Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1476 → Rev 1522

/demos/tags/rel_1_4/orbit/orbit.dat
0,0 → 1,21
----------------------------------------------------
period: 10000 wcet: 100
delta: 1. scala: 150.
G: 6.6e-15
r_pianeta: 4 r_Terra: 8
X_centro: 320 Y_centro: 240
 
------------------- pianeti ------------------------
massa pos.x pos.y vel.x vel.y
0: 6.0e21 0. 0. 0. 0.
1: 1.0e21 10000. 8000. -60. 0.
2: 1.0e8 5000. 0. 0. 80.
3: 5.0e18 10000. 8000. -50. 0.
4: 1.0e9 10000. 8000. -40. 20.
5: 1.0e15 1000. 5000. -80. 0.
6: 1.0e5 1000. 5000. -80. 0.
7: 1.0e17 1000. 5000. -80. 0.
8: 1.0e5 1000. 5000. -80. 0.
9: 1.0e5 1000. 5000. -80. 0.
10: 1.0e5 1000. 5000. -80. 0.
----------------------------------------------------
/demos/tags/rel_1_4/orbit/orbit.c
0,0 → 1,351
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
------------
CVS : $Id: orbit.c,v 1.8 2004-05-23 19:30:33 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.8 $
Last update: $Date: 2004-05-23 19:30:33 $
------------
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo and Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
/****************************************************************/
/* SIMULAZIONE DI MASSE CHE ORBITANO */
/****************************************************************/
 
#include <kernel/kern.h>
#include <semaphore.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#define MAX 11 /* numero massimo pianeti */
#define XMAX 639 /* valore massimo coordinata X */
#define YMAX 479 /* valore massimo coordinata Y */
 
extern int vga16color[16];
 
struct coord {
double x;
double y;
};
 
int flen; // file length
 
double mass[MAX]; /* vettore masse pianeti */
struct coord pos[MAX]; /* vettore posizioni attuali */
struct coord vel[MAX]; /* vettore velocita' iniziali */
 
int XGS, YGS; /* Coordinate centro spazio */
int RP, RT; /* raggio pianeta, raggio Terra */
int np; /* numero attuale di pianeti */
double G; /* Gravitazione Universale */
double tick; /* tick di sistema */
double delta; /* incremento temporale */
double scala; /* fattore grafico di scala */
 
char fbuf[1000] ="\
----------------------------------------------------\n\
period: 10000 wcet: 500\n\
delta: 1. scala: 150.\n\
G: 6.6e-15\n\
r_pianeta: 4 r_Terra: 8\n\
X_centro: 320 Y_centro: 240\n\
------------------- pianeti ------------------------\n\
massa pos.x pos.y vel.x vel.y\n\
0: \t 6.0e21 \t 0. \t 0. \t 0. \t 0. \n\
1: \t 1.0e21 \t 10000. \t 8000. \t -60. \t 0. \n\
2: \t 1.0e8 \t 5000. \t 0. \t 0. \t 80. \n\
3: \t 5.0e18 \t 10000. \t 8000. \t -50. \t 0. \n\
4: \t 1.0e9 \t 10000. \t 8000. \t -40. \t 20. \n\
5: \t 1.0e15 \t 1000. \t 5000. \t -80. \t 0. \n\
6: \t 1.0e5 \t 1000. \t 5000. \t -80. \t 0. \n\
7: \t 1.0e17 \t 1000. \t 5000. \t -80. \t 0. \n\
8: \t 1.0e5 \t 1000. \t 5000. \t -80. \t 0. \n\
9: \t 1.0e5 \t 1000. \t 5000. \t -80. \t 0. \n\
10: \t 1.0e5 \t 1000. \t 5000. \t -80. \t 0. \n\
----------------------------------------------------\n";
 
// -------------------------------------------------------
// NOTA: %f o %lf significa double e %nf significa float
// -------------------------------------------------------
 
PID pid;
int period; /* task period */
int wcet; /* task wcet */
sem_t mutex; /* semaforo di mutua esclusione */
 
 
void get_par(void);
 
/*--------------------------------------------------------------*/
 
int inside(int x, int y)
{
return ((x > RP) && (x < XMAX-RP) &&
(y > RP) && (y < YMAX-RP));
}
 
/*--------------------------------------------------------------*/
 
TASK massa(void *xxx)
{
int i = (int)xxx; /* parametro del task */
int gx, gy; /* coordinate grafiche pallina */
int ox, oy; /* vecchia posizione pallina */
int j;
int r, col; /* raggio e colore pianeta */
double dt; /* incremento temporale */
double dist=0.0, dx, dy; /* distanze pianeta-pianeta */
double dist0=0.0; /* distanze pianeta-Terra */
double x, y; /* posizione del pianeta */
double vx, vy; /* velocita' del pianeta */
double ax, ay; /* accelerazione del pianeta */
double k; /* variabile ausiliaria */
double arg; /* variabile di appoggio */
 
x = pos[i].x; y = pos[i].y;
vx = vel[i].x; vy = vel[i].y;
ox = XGS + x / scala;
oy = YGS + y / scala;
dt = delta;
 
do {
x = pos[i].x;
y = pos[i].y;
ax = ay = 0.0;
for (j=0; j<np; j++) {
if (j != i) {
dx = pos[j].x - x;
dy = pos[j].y - y;
arg = dx*dx + dy*dy;
dist = sqrt(arg);
if (dist < RP*scala) dist = RP*scala;
k = G * mass[j] / (dist*dist*dist);
ax += k * dx;
ay += k * dy;
}
if (j == 0) dist0 = dist - (RP+RT)*scala;
}
x += vx*dt + 0.5*ax*dt*dt;
y += vy*dt + 0.5*ay*dt*dt;
vx += ax * dt;
vy += ay * dt;
 
gx = XGS + x / scala;
gy = YGS + y / scala;
 
r = RP;
col = i + 1;
 
sem_wait(&mutex);
grx_disc(ox,oy,r,vga16color[0]);
grx_disc(gx,gy,r,vga16color[col]);
sem_post(&mutex);
 
pos[i].x = x; pos[i].y = y;
ox = gx; oy = gy;
 
task_endcycle();
 
} while ((dist0 > 0) && inside(gx,gy));
 
sem_wait(&mutex);
grx_disc(ox,oy,r,vga16color[0]);
grx_disc(XGS,YGS,RT,vga16color[12]);
grx_circle(XGS,YGS,RT,vga16color[14]);
sem_post(&mutex);
 
return NULL;
}
 
/*--------------------------------------------------------------*/
/* MAIN */
/*--------------------------------------------------------------*/
 
int main()
{
HARD_TASK_MODEL m;
char c; /* carattere letto da tastiera */
 
sem_init(&mutex,0,1);
 
get_par();
 
grx_disc(XGS,YGS,RT,vga16color[12]);
grx_circle(XGS,YGS,RT,vga16color[14]);
 
np = 0;
 
do {
if (np < MAX-1) {
np++;
hard_task_default_model(m);
hard_task_def_arg (m, (void *)np);
hard_task_def_wcet (m, wcet);
hard_task_def_mit (m, period);
hard_task_def_usemath (m);
pid = task_create("massa", massa, &m, NULL);
if (pid == NIL) {
sys_shutdown_message("Could not create task");
sys_end();
}
task_activate(pid);
}
c = keyb_getch(BLOCK);
 
} while (c != ESC);
 
sys_end();
 
return 0;
}
 
/*------------------------------------------------------*/
/* file reading */
/*------------------------------------------------------*/
 
void read_file(void)
{
int err;
DOS_FILE *fp;
 
fp = DOS_fopen("orbit.dat","r");
 
if (!fp) {
err = DOS_error();
cprintf("Error %d opening myfile.txt...\n", err);
flen = 0;
return;
}
 
flen = DOS_fread(&fbuf, 1, 1000, fp);
cprintf("Read %d bytes from orbit.dat\n", flen);
 
DOS_fclose(fp);
}
 
/*------------------------------------------------------*/
/* get data from buffer */
/*------------------------------------------------------*/
 
void get_par(void)
{
int x = 0;
int i;
double vx, vy, px, py;
flen = strlen(fbuf);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &period);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &wcet);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &delta);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &scala);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &G);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &RP);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &RT);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &XGS);
 
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d", &YGS);
 
for (i=0; i<MAX; i++) {
 
mass[i] = 0.;
px = 0.;
py = 0.;
vx = 0.;
vy = 0.;
 
while ((fbuf[x] != '\t') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &mass[i]);
 
while ((fbuf[x] != '\t') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &px);
 
while ((fbuf[x] != '\t') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &py);
 
while ((fbuf[x] != '\t') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &vx);
 
while ((fbuf[x] != '\t') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%lf", &vy);
 
pos[i].x = px; pos[i].y = py;
 
vel[i].x = vx; vel[i].y = vy;
 
}
}
 
/*--------------------------------------------------------------*/
 
/demos/tags/rel_1_4/orbit/initfile.c
0,0 → 1,200
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 2000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
CABS_register_module();
 
//read_file();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
FB26_init();
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
return 0;
 
}
 
int device_drivers_close() {
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/orbit/makefile
0,0 → 1,16
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS= orbit
 
include $(BASE)/config/example.mk
 
orbit:
make -f $(SUBMAKE) APP=orbit INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
 
/demos/tags/rel_1_4/mix/mix.dat
0,0 → 1,12
TASK NAME PERIOD WCET
------------------------------------------
task1 watch: 1000000 200
task2 tasto: 2000 200
task3 palla: 2000 200
task4 mosca: 20000 200
task5 infor: 20000 300
task6 ruota: 5000 400
task7 color: 2000 200
task8 pendo: 5000 400
------------------------------------------
 
/demos/tags/rel_1_4/mix/readme
0,0 → 1,7
MIX
---
 
This simple applications is a pout-pourri of simple graphic tasks
that does different things with different timing constraints...
 
Paolo
/demos/tags/rel_1_4/mix/mix.c
0,0 → 1,766
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
------------
CVS : $Id: mix.c,v 1.6 2004-05-23 11:15:29 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.6 $
Last update: $Date: 2004-05-23 11:15:29 $
------------
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo and Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
/*--------------------------------------------------------------*/
/* DEMO with 9 INDEPENDENT TASKS */
/*--------------------------------------------------------------*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#include <semaphore.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
#define PIG 3.1415
#define DURATA 10000 /* counter duration in tick */
 
#define LW 200 /* window length */
#define HW 150 /* window height */
#define HLOAD 30 /* Y level for the max load */
#define LLOAD (HW-HLOAD-5) /* length for the max load */
 
#define XWL 10 /* left X of LEFT window */
#define XWM 220 /* left X of MIDDLE window */
#define XWR 430 /* left X RIGHT window */
 
#define YWH 5 /* top Y of HIGH window */
#define YWM 165 /* top Y of MIDDLE window */
#define YWL 325 /* top Y of LOW window */
 
int flen = 0; /* file length */
int fine = 0; /* ending flag */
 
sem_t mx_mat, mx_grf; /* mutex semaphores */
 
int wcet[10]; /* array of task wcets */
int period[10]; /* array of task periods */
double load(long); /* load evaluation function */
 
PID ptas;
char talk[5][25] = {" SHARK Demonstration ",
" RETIS Lab -- Scuola ",
" Superiore S. Anna ",
" HARD REAL-TIME DEMO ",
" June 5, 2001 "};
 
char fbuf[1000] = "\
TASK NAME PERIOD WCET\n\
------------------------------------------\n\
task1 watch: 1000000 200\n\
task2 tasto: 2000 200\n\
task3 palla: 2000 200\n\
task4 mosca: 20000 200\n\
task5 infor: 20000 300\n\
task6 ruota: 5000 400\n\
task7 color: 2000 200\n\
task8 pendo: 5000 400\n\
------------------------------------------\n";
 
extern int vga16color[16];
 
/*------------------------------------------------------*/
/* file reading */
/*------------------------------------------------------*/
 
void read_file(void)
{
int err;
DOS_FILE *fp;
 
fp = DOS_fopen("mix.dat","r");
 
if (!fp) {
err = DOS_error();
cprintf("Error %d opening myfile.txt...\n", err);
flen = 0;
return;
}
 
flen = DOS_fread(&fbuf, 1, 1000, fp);
cprintf("Read %d bytes from file\n", flen);
DOS_fclose(fp);
}
 
/*------------------------------------------------------*/
/* get data from buffer */
/*------------------------------------------------------*/
 
void get_par(void)
{
int x = 0;
int i;
 
flen = strlen(fbuf);
 
for (i=1; i<=8; i++) {
while ((fbuf[x] != ':') && (x < flen)) x++;
x++;
sscanf(&fbuf[x], "%d %d", &period[i], &wcet[i]);
}
}
 
/*--------------------------------------------------------------*/
 
void finish1()
{
sys_end();
}
 
/*--------------------------------------------------------------*/
 
void finish2()
{
fine = 1;
}
 
/****************************************************************/
/* PROCESSO OROLOGIO */
/****************************************************************/
 
#define LLAN 40 /* length of watch stick */
 
TASK watch()
{
int x0 = XWL + LW/2;
int y0 = YWH + HW/2;
int grad;
int xg, yg;
int xt, yt, d;
int sec, min;
char s[5];
double rad, x, y;
 
xg = x0;
yg = y0 - LLAN;
xt = XWL + 78;
yt = YWH + 12;
sec = min = 0;
 
while (1) {
sec = (sec + 1) % 60;
if (sec == 0) min++;
grad = 90 - sec * 6;
rad = (double)grad * PIG / 180.;
 
sem_wait(&mx_mat);
x = (double)x0 + (double)LLAN * cos(rad);
y = (double)y0 - (double)LLAN * sin(rad);
sem_post(&mx_mat);
 
sem_wait(&mx_grf);
grx_line(x0, y0, xg, yg, vga16color[0]);
sem_post(&mx_grf);
 
xg = x;
yg = y;
 
sem_wait(&mx_grf);
grx_line(x0, y0, xg, yg, vga16color[14]);
sem_post(&mx_grf);
 
sem_wait(&mx_grf);
grx_text("0 :0 ", xt, yt, vga16color[14], vga16color[0]);
sprintf(s, "%d", min);
grx_text(s, xt+8, yt, vga16color[14], vga16color[0]);
sprintf(s, "%d", sec);
if (sec > 9) d = 24; else d = 32;
grx_text(s, xt+d, yt, vga16color[14], vga16color[0]);
sem_post(&mx_grf);
 
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO DI RIEMPIMENTO */
/****************************************************************/
 
#define CIMA (YWH+5) /* fondo del recipiente */
#define FONDO (YWH+HW-5) /* cima del recipiente */
#define LREC (XWM+75) /* lato sinistro recipiente */
#define DREC 50 /* diametro del recipiente */
 
TASK tasto()
{
int x, y;
int x0; /* coord. sinistra recipiente */
int col, cliq, bkg;
int i;
int liv; /* livello del liquido */
 
cliq = 9;
bkg = 14;
x0 = LREC;
x = x0 + DREC/2;
y = CIMA;
liv = FONDO;
 
while (1) {
 
col = cliq;
for (i=0; i<2; i++) { /* disegna goccia */
while (y < liv) {
sem_wait(&mx_grf);
grx_plot(x,y,vga16color[col]);
sem_post(&mx_grf);
y++;
}
y = CIMA;
col = bkg;
}
 
liv--;
sem_wait(&mx_grf);
grx_line(x0+1, liv, x0+DREC-1, liv, vga16color[cliq]);
sem_post(&mx_grf);
 
if (liv <= CIMA+1) { /* swap colors */
i = bkg; bkg = cliq; cliq = i;
liv = FONDO;
}
 
task_endcycle();
}
}
 
/****************************************************************/
 
void kboar()
{
task_activate(ptas);
}
 
/****************************************************************/
/* PROCESSO PALLA */
/****************************************************************/
 
#define VMIN 11. /* velocit… minima per suono */
#define LP 3 /* lato della pallina */
 
TASK palla()
{
int ox, oy; /* vecchia posizione pallina */
int x0; /* posizione iniziale pallina */
int xmin, xmax;
int base, top;
int xg, yg; /* coordinate grafiche pallina */
double x, y; /* coordinate pallina */
double G = 9.8;
double vx, vy, v0; /* velocit… della pallina */
double t, tx; /* variabile temporale */
double dt; /* incremento temporale */
double arg; /* variabile di appoggio */
 
xmin = XWR+LP+1;
xmax = XWR+LW-LP-1;
base = YWH+HW-LP-1;
top = HW-10-LP;
x = ox = x0 = xmin;
y = oy = top;
arg = 2.*G*(double)top;
vy = v0 = sqrt(arg);
vx = 15.;
tx = 0.0;
t = vy / G;
dt = .02;
 
while (1) {
x = x0 + vx*tx;
y = base - vy*t + .5*G*t*t;
if (y >= base) {
t = 0.0;
vy = v0;
y = base - vy*t + .5*G*t*t;
}
if (x >= xmax) {
tx = 0.0;
x0 = xmax;
vx = -vx;
x = x0 + vx*tx;
}
if (x <= xmin) {
tx = 0.0;
x0 = xmin;
vx = -vx;
x = x0 + vx*tx;
}
xg = x; yg = y;
sem_wait(&mx_grf);
grx_disc(ox,oy,LP,vga16color[0]);
grx_disc(xg,yg,LP,vga16color[10]);
sem_post(&mx_grf);
oy = yg; ox = xg;
t += dt;
tx += dt;
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO MOSCA */
/****************************************************************/
 
TASK mosca()
{
int x, y, Ax, Ay, h;
int x0, y0, tet;
int xmax,ymax;
double A, B;
double r;
double rnd;
 
xmax = LW/2-1; ymax = HW/2-1;
x = 0; y = 0; tet = 0;
x0 = XWL+LW/2; y0 = YWM+HW/2;
A = 5.; B = 30.;
 
while (1) {
 
rnd = (rand()%100)/100.; /* rnd = [0,1] */
h = (2. * B * rnd) - B; /* h = [-B,B] */
tet = tet + h;
 
if (tet > 360) tet = tet - 360;
if (tet < 0) tet = tet + 360;
r = tet * PIG / 180.;
 
sem_wait(&mx_mat);
Ax = (double)(A * cos(r));
Ay = (double)(A * sin(r));
sem_post(&mx_mat);
x = x + Ax;
y = y + Ay;
 
if ((x >= xmax) || (x <= -xmax) ||
(y >= ymax) || (y <= -ymax)) {
x = x - Ax;
y = y - Ay;
tet = tet - 180;
if (tet > 360) tet = tet - 360;
if (tet < 0) tet = tet + 360;
r = tet * PIG / 180.;
sem_wait(&mx_mat);
Ax = (double)(A * cos(r));
Ay = (double)(A * sin(r));
sem_post(&mx_mat);
x = x + Ax;
y = y + Ay;
}
sem_wait(&mx_grf);
grx_plot(x+x0, y+y0, vga16color[10]);
sem_post(&mx_grf);
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO INFORMAZIONI */
/****************************************************************/
 
TASK infor()
{
char s[2];
int x, y;
int r;
int i = 0;
int leng;
int col = 0;
 
r = 0;
x = XWM + 16;
y = YWM + 40;
s[1] = 0;
 
leng = 0;
while (talk[0][leng] != 0) leng++;
 
while (1) {
s[0] = talk[r][i];
sem_wait(&mx_grf);
grx_text(s,x+i*8,y+r*8,vga16color[col+10],vga16color[1]);
sem_post(&mx_grf);
i++;
if (i == leng) {
i = 0;
r = (r + 1) % 5;
if (r == 0) col = (col + 1) % 6;
}
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO RUOTA */
/****************************************************************/
 
TASK ruota()
{
int x0 = XWR + LW/2;
int y0 = YWM + HW/2;
int grad = 90;
int xg, yg;
double rad, x, y;
 
xg = x0;
yg = y0 + LLAN;
 
while (1) {
 
rad = (double)grad * PIG / 180.;
 
sem_wait(&mx_mat);
x = (double)x0 + (double)LLAN * cos(rad);
y = (double)y0 + (double)LLAN * sin(rad);
sem_post(&mx_mat);
 
sem_wait(&mx_grf);
grx_disc(xg, yg, 4, vga16color[0]);
sem_post(&mx_grf);
 
xg = x; yg = y;
 
sem_wait(&mx_grf);
grx_disc(xg, yg, 4, vga16color[13]);
sem_post(&mx_grf);
 
grad = (grad + 1) % 360;
 
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO COLORI */
/****************************************************************/
 
TASK color()
{
int xx0 = XWL+5;
int yy0 = YWL+5;
int n, col;
int x, y;
 
x = 0; y = 0;
 
while (1) {
n = 19. * ((rand()%100)/100.);
x = xx0 + n * 10;
n = 14. * ((rand()%100)/100.);
y = yy0 + n * 10;
col = 16. * ((rand()%100)/100.);
 
/* xg = xx0 + x;
yg = yy0 + y;
x = (x + 10)%(LW-10);
y = (y + 10)%(HW-10);
*/
sem_wait(&mx_grf);
grx_box(x, y, x+9, y+9, vga16color[col]);
sem_post(&mx_grf);
 
task_endcycle();
}
}
 
/****************************************************************/
/* PROCESSO PENDOLO */
/****************************************************************/
 
TASK pendo()
{
int x0 = XWM+LW/2;
int y0 = YWL+10;
int xg, yg;
int col = 11;
double x, y, teta;
double v, a, dt;
double g, l;
 
g = 9.8;
l = 80.;
dt = 0.1;
teta = 40. * PIG / 180.;
v = 0.;
sem_wait(&mx_mat);
x = l * sin((double)teta);
y = l * cos((double)teta);
a = -(g/l) * sin((double)teta);
sem_post(&mx_mat);
xg = x0 + x;
yg = y0 + y;
 
while (1) {
 
v += a * dt;
teta += v * dt;
sem_wait(&mx_mat);
x = l * sin((double)teta);
y = l * cos((double)teta);
a = -(g/l) * sin((double)teta);
sem_post(&mx_mat);
 
sem_wait(&mx_grf);
grx_line(x0, y0, xg, yg, vga16color[0]);
grx_circle(xg, yg, 5, vga16color[0]);
grx_disc(xg, yg, 4, vga16color[0]);
sem_post(&mx_grf);
 
xg = x0+x; yg = y0+y;
 
sem_wait(&mx_grf);
grx_line(x0, y0, xg, yg, vga16color[col]);
grx_circle(xg, yg, 5, vga16color[col+2]);
grx_disc(xg, yg, 4, vga16color[col+1]);
sem_post(&mx_grf);
 
task_endcycle();
}
}
 
/****************************** gener ******************************/
 
TASK gener()
{
HARD_TASK_MODEL m;
SOFT_TASK_MODEL am;
PID pid;
 
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[1]);
hard_task_def_mit (m, period[1]);
hard_task_def_usemath (m);
pid = task_create("watch", watch, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
soft_task_default_model(am);
soft_task_def_met (am, wcet[2]);
soft_task_def_period (am, period[2]);
soft_task_def_aperiodic(am);
soft_task_def_usemath (am);
ptas = task_create("tasto", tasto, &am, NULL);
task_activate(ptas);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[3]);
hard_task_def_mit (m, period[3]);
hard_task_def_usemath (m);
pid = task_create("palla", palla, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[4]);
hard_task_def_mit (m, period[4]);
hard_task_def_usemath (m);
pid = task_create("mosca", mosca, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[5]);
hard_task_def_mit (m, period[5]);
hard_task_def_usemath (m);
pid = task_create("infor", infor, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[6]);
hard_task_def_mit (m, period[6]);
hard_task_def_usemath (m);
pid = task_create("ruota", ruota, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[7]);
hard_task_def_mit (m, period[7]);
hard_task_def_usemath (m);
pid = task_create("color", color, &m, NULL);
task_activate(pid);
keyb_getch(BLOCK);
//---------------------------------------------
hard_task_default_model(m);
hard_task_def_wcet (m, wcet[8]);
hard_task_def_mit (m, period[8]);
hard_task_def_usemath (m);
pid = task_create("pendo", pendo, &m, NULL);
task_activate(pid);
//---------------------------------------------
 
return NULL;
}
 
/****************************** MAIN ******************************/
 
int main()
{
char s[20]; /* carattere letto da tastiera */
int x0, y0;
int x, y;
TIME t1, count; /* contatori valutazione carico */
double car; /* valore del carico corrente */
TIME seme;
PID pid;
NRT_TASK_MODEL m2;
KEY_EVT eva, evx, evs;
 
/* set the keyboard handler */
eva.ascii = 'a';
eva.scan = KEY_A;
eva.flag = 0;
eva.status = KEY_PRESSED;
keyb_hook(eva,kboar,FALSE);
 
evx.ascii = 'x';
evx.scan = KEY_X;
evx.flag = ALTL_BIT;
evx.status = KEY_PRESSED;
keyb_hook(evx,finish1,FALSE);
 
evs.ascii = ESC;
evs.scan = KEY_ESC;
evs.flag = 0;
evs.status = KEY_PRESSED;
keyb_hook(evs,finish2,FALSE);
 
sem_init(&mx_mat,0,1);
sem_init(&mx_grf,0,1);
 
seme = sys_gettime(NULL);
srand(seme);
 
get_par();
 
grx_rect(XWL,YWH,XWL+LW,YWH+HW,vga16color[14]);
grx_rect(XWM,YWH,XWM+LW,YWH+HW,vga16color[14]);
grx_rect(XWR,YWH,XWR+LW,YWH+HW,vga16color[14]);
 
grx_rect(XWL,YWM,XWL+LW,YWM+HW,vga16color[14]);
grx_rect(XWM,YWM,XWM+LW,YWM+HW,vga16color[14]);
grx_rect(XWR,YWM,XWR+LW,YWM+HW,vga16color[14]);
 
grx_rect(XWL,YWL,XWL+LW,YWL+HW,vga16color[14]);
grx_rect(XWM,YWL,XWM+LW,YWL+HW,vga16color[14]);
grx_rect(XWR,YWL,XWR+LW,YWL+HW,vga16color[14]);
 
x0 = XWL + LW/2;
y0 = YWH + HW/2;
grx_circle(x0, y0, LLAN+3, vga16color[12]);
grx_rect(XWL+74, YWH+7, XWL+120, YWH+22, vga16color[12]);
 
x0 = LREC;
grx_line(x0, CIMA, x0, FONDO, vga16color[15]);
grx_line(x0+DREC, CIMA, x0+DREC, FONDO, vga16color[15]);
grx_line(x0, FONDO, x0+DREC, FONDO, vga16color[15]);
grx_box(x0+1, CIMA, x0+DREC-1, FONDO-1, vga16color[14]);
grx_text("Press A", XWM+16, YWH+48, vga16color[10], vga16color[0]);
grx_text("to fill", XWM+16, YWH+64, vga16color[10], vga16color[0]);
 
grx_text("Press:", XWM+18, YWM+HW-50, vga16color[10], vga16color[0]);
grx_text("ESC to exit", XWM+18, YWM+HW-40, vga16color[10], vga16color[0]);
grx_text("SPACE to create", XWM+18, YWM+HW-30, vga16color[10], vga16color[0]);
 
x0 = XWR + LW/2;
y0 = YWM + HW/2;
grx_circle(x0, y0, LLAN/3, vga16color[14]);
grx_disc(x0, y0, LLAN/3-1, vga16color[12]);
 
x0 = XWR+5;
y0 = YWL+HW-5;
grx_line(x0, YWL+HLOAD, x0+LW-10, YWL+HLOAD, vga16color[12]);
grx_text("SYSTEM WORKLOAD:", x0+5, YWL+HLOAD-10, vga16color[10], vga16color[0]);
 
count = 0;
t1 = sys_gettime(NULL);
do count++; while (sys_gettime(NULL) < (t1 + DURATA));
 
nrt_task_default_model(m2);
pid = task_create("gener", gener, &m2, NULL);
task_activate(pid);
 
x = 0;
while (!fine) {
car = load(count);
y = (double)LLOAD*car;
sem_wait(&mx_grf);
grx_line(x0+x, y0-LLOAD+1, x0+x, y0, vga16color[0]);
grx_line(x0+x, y0-y, x0+x, y0, vga16color[15]);
grx_text(" ", x0+LW-60, YWL+HLOAD-10, vga16color[0], vga16color[0]);
sprintf(s, "%.3f", car);
grx_text(s, x0+LW-50, YWL+HLOAD-10, vga16color[15], vga16color[0]);
sem_post(&mx_grf);
x = (x + 1) % (LW-10);
}
 
sys_end();
 
return 0;
}
 
/****************************************************************/
 
double load(long n)
{
TIME i, t1;
double carico;
 
i = 0;
t1 = sys_gettime(NULL);
do i++; while (sys_gettime(NULL) < (t1 + DURATA));
carico = 1. - (double)i / (double)n;
return(carico);
}
 
/****************************************************************/
/demos/tags/rel_1_4/mix/initfile.c
0,0 → 1,200
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 2000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
CABS_register_module();
 
//read_file();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
FB26_init();
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
return 0;
 
}
 
int device_drivers_close() {
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/mix/makefile
0,0 → 1,16
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS= mix
 
include $(BASE)/config/example.mk
 
mix:
make -f $(SUBMAKE) APP=mix INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
 
/demos/tags/rel_1_4/pci6025e/readme
0,0 → 1,7
These are the demos available for the National Instruments PCI6025e boards.
 
These demos and the PCI driver have been made by
Marco Ziglioli (zi_mar@libero.it). Please send any comments to:
zi_mar@libero.it or to shark-help@gandalf.sssup.it.
 
Paolo
/demos/tags/rel_1_4/pci6025e/test_bms.c
0,0 → 1,262
/*****************************************************************************
* Filename: test_bms.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 27/06/2001 *
* Description: Test program for buffered period and semiperiod measurement *
* capacity of National PCI6025E board *
*----------------------------------------------------------------------------*
* Notes: FOUT are enable and avaiable on pin 50 to provide 1 Mhz frequency *
* You should connect source 0 (PIN 41) and source 1 (pin 45) to this *
* freq source. Gate 0 (pin 42) and gate 1 (pin 44) must be connected *
* rispectivly to DIO7 (pin 32) and DIO6 (pin 30). *
* Use 'g' button to activate gate_action_task which generate a square *
* wave with a freq of 0.5 Hz and Duty cycle of 75%. *
* 's' button should show counters countent but gate_action_task *
* when active shows counters content automatically so 's' button isn't*
* useful. *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include <drivers/pci6025e/timer.h>
#include <drivers/pci6025e/dio_ppi.h>
 
#define SHOW_MET 30000
#define SHOW_WCET 50000
#define SHOW_PERIOD 1000000
 
#define GATE_MET 2000
#define GATE_WCET 5000
#define GATE_PERIOD 2000000
 
#define GATE_ACTION_P 500000
#define GATE_ACTION_W 10000
 
#define black rgb16(0, 0, 0)
 
void endFun(KEY_EVT *);
void gateEvent(KEY_EVT *);
void showEvent(KEY_EVT *);
 
void closeEvent(void *);
 
void drawInterface(void);
 
TASK show_val_body(int);
TASK gate_action_body(int);
 
BYTE sys = 0;
PID show_val_pid, gate_action_pid;
 
int main(int argc, char **argv)
{
KEY_EVT k;
SOFT_TASK_MODEL show_val_mod;
HARD_TASK_MODEL gate_action_model;
 
k.flag = CNTL_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endFun, FALSE);
 
k.flag = CNTR_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endFun, FALSE);
 
k.flag = 0;
k.scan = KEY_G;
k.ascii = 'g';
k.status = KEY_PRESSED;
keyb_hook(k, gateEvent, FALSE);
 
k.scan = KEY_S;
k.ascii = 's';
k.status = KEY_PRESSED;
keyb_hook(k, showEvent, FALSE);
 
if(!reMap()){
sys = 11;
sys_end();
}
 
soft_task_default_model(show_val_mod);
soft_task_def_aperiodic(show_val_mod);
soft_task_def_level(show_val_mod, 2);
soft_task_def_met(show_val_mod, SHOW_MET);
soft_task_def_wcet(show_val_mod, SHOW_WCET);
soft_task_def_period(show_val_mod, SHOW_PERIOD);
if( (show_val_pid = task_create("Show task", show_val_body, &show_val_mod, NULL))
== NIL ){
sys = 20;
sys_end();
}
 
hard_task_default_model(gate_action_model);
hard_task_def_mit(gate_action_model, GATE_ACTION_P);
hard_task_def_wcet(gate_action_model, GATE_ACTION_W);
if( (gate_action_pid = task_create("Gate Action", gate_action_body, &gate_action_model, NULL))
== NIL ){
sys = 22;
sys_end();
}
 
drawInterface();
 
DIO_init();
DIO_setup(0xFF);
DIO_write(0x00);
 
//All PFI configured as input
PFIprogramming(0x0000);
 
//Fout provide 1MHz: timebase = 20MHz; divided by 2; on FOUT pin also divided by 10
setIntClock(0, 1, 10);
 
//Reset both counters
TIM_reset(2);
 
//C0 measures period on PFI3 with gate from PFI 4 driven by DIO7
TIM_bufferedTimeMeasurement(C0, 0x04, 0x45, 0, 0);
 
//C1 measures semiperiod on PFI 6 with gate from PFI 5 driven by FIO6
TIM_bufferedTimeMeasurement(C1, 0x87, 0x46, 1, 0);
 
//arm both counters
TIM_arm(2);
 
return 0;
}
 
void endFun(KEY_EVT *k)
{
closeEvent(NULL);
 
sys_end();
}
 
void showEvent(KEY_EVT *k)
{
task_activate(show_val_pid);
}
 
void gateEvent(KEY_EVT *k)
{
task_activate(gate_action_pid);
}
 
void drawInterface(void)
{
grx_rect(1, 1, 799, 129, rgb16(105, 0, 0));
grx_rect(2, 2, 798, 128, rgb16(155, 0, 0));
grx_rect(3, 3, 797, 127, rgb16(205, 0, 0));
grx_rect(4, 4, 796, 126, rgb16(255, 0, 0));
 
grx_text("Test program for Buffered Period and Semiperiod measure through PCI6025E timers",
7, 10, rgb16(50, 255, 50), black);
 
grx_text("This program counting rise edges on counters source (PFI3 & PFI6) between two rising",
7, 25, rgb16(0, 255, 255), black);
grx_text("edges on gate (PFI 42) and beetwen each gate edge (PFI44).FOUT is enabled and",
7, 33, rgb16(0, 255, 255), black);
grx_text("provides a frequency of 1 MHz", 7, 41, rgb16(0, 255, 255), black);
grx_text("Instruction:",7, 53, rgb16(255, 0, 0), black);
grx_text("Use 's' to see counters value",
7, 61, rgb16(0, 255, 255), black);
grx_text("Use 'g' to enbale automatic tasks which generate square wave with freq of 0.5Hz",
7, 68, rgb16(0, 255, 255), black);
 
grx_text("And duty cycle of 75%. Counter 0 must be loaded with about 2E6 ticks and counter 1",
7, 75, rgb16(0, 255, 255), black);
grx_text("must be loaded alternativly with about 1.5E6 and 0.5E6 ticks",
7, 83, rgb16(0, 255, 255), black);
 
grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
7, 95, rgb16(0, 255, 0), black);
grx_text("CTRL-X for Exit", 7, 110, rgb16(200, 200, 0), black);
 
grx_rect(1, 147, 355, 183, rgb16(0, 105, 0));
grx_rect(2, 148, 354, 182, rgb16(0, 155, 0));
grx_rect(3, 149, 353, 181, rgb16(0, 205, 0));
grx_rect(4, 150, 352, 180, rgb16(0, 255, 0));
grx_text("Period", 7, 155, rgb16(255, 255, 0), black);
 
grx_rect(455, 147, 799, 183, rgb16(0, 105, 0));
grx_rect(456, 148, 798, 182, rgb16(0, 155, 0));
grx_rect(457, 149, 797, 181, rgb16(0, 205, 0));
grx_rect(458, 150, 796, 180, rgb16(0, 255, 0));
grx_text("Semiperiod", 461, 155, rgb16(255, 0, 255), black);
}
 
TASK show_val_body(int dummy)
{
DWORD val;
char buf[40];
 
while(1){
val = TIM_readHWSaveReg(C0);
sprintf(buf,"C0 %07ld", val);
grx_text(buf, 7, 165, rgb16(255, 0, 0), rgb16(0, 0, 0));
val = TIM_readHWSaveReg(C1);
sprintf(buf,"C1 %07ld", val);
grx_text(buf, 461, 165, rgb16(0, 255, 0), rgb16(0, 0, 0));
 
task_endcycle();
}
}
 
TASK gate_action_body(int dummy)
{
int i;
i = 0;
 
while(1){
if( (i%4)==0 ) DIO_write(0xC0);
if( (i%4)==3 ) DIO_write(0x00);
 
i++;
 
task_activate(show_val_pid);
 
task_endcycle();
}
}
 
void closeEvent(void *arg)
{
TIM_disarm(2);
switch(sys){
case 0: sys_shutdown_message("Ok\n"); break;
case 10: sys_shutdown_message("No PCI\n"); break;
case 11: sys_shutdown_message("No National Board\n"); break;
case 20: sys_shutdown_message("task <show val> down\n"); break;
case 22: sys_shutdown_message("task <gate action> down\n"); break;
case 30: sys_shutdown_message("Cannot initialize grx\n"); break;
case 31: sys_shutdown_message("Resolution 800x600x16 not supported\n"); break;
case 32: sys_shutdown_message("Cannot sets up graphic envirorment\n"); break;
default: sys_shutdown_message("????????????\n"); break;
}
}
/demos/tags/rel_1_4/pci6025e/wave.c
0,0 → 1,312
/*****************************************************************************
* Filename: wave.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 12/06/2001 *
* Description: Little test program for Analog Output section of PCI6025E *
*----------------------------------------------------------------------------*
* Notes: Connect an oscilloscope to DACs output pins (20 & 21) and *
* watch the waveforms. *
* and decrise voltage *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#include <modules/sem.h>
 
#include <drivers/pci6025e/dac.h>
 
#define MAX_VAL 500
 
#define WAVE_PERIOD 1000
#define WAVE_WCET 200
#define GRAPH_PERIOD 1000
#define GRAPH_WCET 550
 
#define TASK_GROUP 1
 
#define DAC0_CONV 0.1
#define DAC1_CONV 0.05
 
#define INC 40
 
void createWaves(void);
void drawInterface(void);
 
void endfun(KEY_EVT *);
void close_event(void *);
 
TASK wave_body(int);
TASK video_body(int);
 
WORD wave0[MAX_VAL], wave1[MAX_VAL];
int black = rgb16(0,0,0),
white = rgb16(255, 255, 255);
 
BYTE sys = 0;
 
int main(int argc, char **argv)
{
KEY_EVT k;
HARD_TASK_MODEL wave0, wave1;
HARD_TASK_MODEL video;
PID wave0_pid, wave1_pid, video_pid;
 
k.flag = CNTR_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
k.flag = CNTL_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
hard_task_default_model(wave0);
hard_task_def_wcet(wave0, WAVE_WCET);
hard_task_def_mit(wave0, WAVE_PERIOD);
hard_task_def_arg(wave0, 0);
hard_task_def_group(wave0, TASK_GROUP);
if( (wave0_pid = task_create("Wave 0", wave_body, &wave0, NULL)) == NIL ){
sys = 10;
sys_end();
}
 
hard_task_default_model(wave1);
hard_task_def_wcet(wave1, WAVE_WCET);
hard_task_def_mit(wave1, WAVE_PERIOD);
hard_task_def_arg(wave1, (void *)1);
hard_task_def_group(wave1, TASK_GROUP);
if( (wave1_pid = task_create("Wave 1", wave_body, &wave1, NULL)) == NIL ){
sys = 11;
sys_end();
}
 
hard_task_default_model(video);
hard_task_def_wcet(video, GRAPH_WCET);
hard_task_def_mit(video, GRAPH_PERIOD);
hard_task_def_group(video, TASK_GROUP);
if( (video_pid = task_create("Video task", video_body, &video, NULL))
== NIL ){
sys = 12;
sys_end();
}
 
if(!reMap()){
sys = 21;
sys_end();
}
 
createWaves();
drawInterface();
//Analog output section set up
DAC_Init();
 
/*
*AI_TIMEBASE div by 2; OUT_TIMEBASE div by 2; single DAC mode
*TMRDACWR = 3 OUT_TIMEBASE period; FIFO flags polarity active low
*TMRDACWR disabled; DMA PIO control = FIFO DATA interface mode
*UPDATE signal timebase = AO_UPDATE pulse width
*UPDATE pulsewidth = 3-3.5 OUT_TIMEBASE period
*UPDATE signal polarity = HIGH Z
*/
DAC_boardInit(0x02, 0x4000);
 
/*
*LDAC0 source = UPDATE
*DAC0 update immediately
*LDAC1 source = UPDATE
*DAC1 update immediately
*/
DAC_LDACSourceUpdate(0x00);
//End of Analog output section setup
 
 
group_activate(TASK_GROUP);
 
return 0;
}
 
void endfun(KEY_EVT *k)
{
close_event(NULL);
 
sys_end();
}
 
void close_event(void *arg)
{
switch(sys){
case 0: sys_shutdown_message("Regular End!\n"); break;
case 10: sys_shutdown_message("Cannot create <wave 0> task!\n"); break;
case 11: sys_shutdown_message("Cannot create <wave 1> task!\n"); break;
case 12: sys_shutdown_message("Cannot create <video> task!\n"); break;
case 20: sys_shutdown_message("No PCI bus found!\n"); break;
case 21: sys_shutdown_message("No NATIONAL PCI E-Series board found on PCI bus!\n");
break;
case 30: sys_shutdown_message("Cannot start graphic envirorment!\n"); break;
case 31: sys_shutdown_message("800x600x16 video mode not supported!\n");
default: sys_shutdown_message("Unknown exit event!\n"); break;
}
}
 
/*
* Wave's samples generation
*/
void createWaves(void)
{
int i;
int value0, value1;
BYTE direction;
 
/* Wave0
* * * * * * * *
** ** ** ** ** ** ** **
* ** * * ** ** ** ** ** *
* * ** * * * * * *
--------------------------...
 
Wave 1
* *
* * * *
* * * *
* * * *
-------*-------*-------*--...
* * *
* * *
* *
* */
 
value0 = 0;
value1 = 0;
direction = 0;
for(i=0; i<MAX_VAL; i++){
wave0[i] = (value0 & 0x0FFF);
wave1[i] = (value1 & 0x0FFF);
 
value0 = (value0 + INC) % 2000;
if(!direction) value1 += INC;
else value1 -= INC;
 
if(value1 >= 2000) direction = 1;
if(value1 <= -2000) direction = 0;
}
}
 
void drawInterface(void)
{
int i;
 
grx_rect(1, 1, 799, 69, rgb16(105, 0, 105));
grx_rect(2, 2, 798, 68, rgb16(155, 0, 155));
grx_rect(3, 3, 797, 67, rgb16(205, 0, 205));
grx_rect(4, 4, 796, 66, rgb16(255, 0, 255));
 
grx_text("Test program for Analog output section of PCI6025E",
7, 10, rgb16(50, 255, 50), black);
grx_text("DAC0 and DAC1 should generate saw-toothed wave and triangular wave",
7, 33, rgb16(0, 255, 255), black);
grx_text("Use an oscilloscope to test this software",
7, 40, rgb16(0, 255, 255), black);
 
grx_text("CTRL-X for Exit", 7, 55, rgb16(200, 200, 0), black);
 
grx_text("DAC 0", 100, 92, rgb16(200, 200, 0), black);
grx_rect(1, 100, 799, 325, rgb16(0, 105, 0));
grx_rect(2, 101, 798, 324, rgb16(0, 155, 0));
grx_rect(3, 102, 797, 323, rgb16(0, 205, 0));
grx_rect(4, 103, 796, 322, rgb16(0, 255, 0));
grx_line(19, 115, 19, 320, white);
grx_line(14, 315, 530, 315, white);
 
grx_text("DAC 1", 100, 362, rgb16(200, 200, 0), black);
grx_rect(1, 370, 799, 595, rgb16(105, 0, 0));
grx_rect(2, 371, 798, 594, rgb16(155, 0, 0));
grx_rect(3, 372, 797, 593, rgb16(205, 0, 0));
grx_rect(4, 373, 796, 592, rgb16(255, 0, 0));
grx_line(19, 385, 19, 585, white);
grx_line(14, 485, 530, 485, white);
 
for(i=22; i<530; i+=2){
//DAC0
grx_plot(i, 115, white);
grx_plot(i, 215, white);
//DAC1
grx_plot(i, 385, white);
grx_plot(i, 435, white);
grx_plot(i, 535, white);
grx_plot(i, 585, white);
}
 
grx_text("5 V", 540, 211, rgb16(0, 255, 0), black);
grx_text("10 V", 540, 111, rgb16(0, 255, 0), black);
grx_text("+5 V", 540, 431, rgb16(0, 255, 0), black);
grx_text("+10 V", 540, 381, rgb16(0, 255, 0), black);
grx_text("-5 V", 540, 531, rgb16(255, 0, 0), black);
grx_text("-10 V", 540, 581, rgb16(255, 0 , 0), black);
}
 
/*
* Sends out waves' samples
*/
TASK wave_body(int wv)
{
int i = 0;
while(1){
if(wv)
DAC_output(DAC1, wave1[i]);
else
DAC_output(DAC0, wave0[i]);
 
i = (i + 1) % 500;
task_endcycle();
}
}
 
/*
* Shows wave on screen
*/
TASK video_body(int dummy)
{
int i = 0;
int n_tmp = 0, o_tmp;
//char buf[10];
 
while(1){
o_tmp = n_tmp;
if( (wave1[i] & 0x0800) != 0 ) n_tmp = wave1[i]-0x0FFF;
else n_tmp = wave1[i];
 
if(i>0){
grx_line(19+i, 314-wave0[i-1]*DAC0_CONV,
20+i, 314-wave0[i]*DAC0_CONV, rgb16(255, 255, 0));
grx_line(19+i, 485-o_tmp*DAC1_CONV,
20+i, 485-n_tmp*DAC1_CONV, rgb16(0, 255, 255));
}
 
i = (i + 1) % 500;
task_endcycle();
}
}
/demos/tags/rel_1_4/pci6025e/initfile.c
0,0 → 1,198
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 2000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
CABS_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
FB26_init();
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"800x600-16");
return 0;
 
}
 
int device_drivers_close() {
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/pci6025e/test_mes.c
0,0 → 1,278
/*****************************************************************************
* Filename: test_mes.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 25/06/2001 *
* Description: Test file for single period and pulsewidth measurement feature*
* of PCI6025E timers/counters *
*----------------------------------------------------------------------------*
* Notes: board is configured to provide a frequency of 1 MHZ through its FOUT*
* pin (50). PFI3 (41) and PFI6 (45) are configured like source pins *
* counter 0 and counter 1. PFI4 (42) and PFI 5(44) are the gates for *
* the two counters. Please connect DIO7(32) to PFI4 and DIO6(30) to *
* PFI 5. *
* With 'g' key a task is started which generate a square wave on DIO7 *
* with a period of 2 secs. With 'h' key the same square wave is *
* generated on DIO6. *
* When measurement is performed data are stored into Hardware Save *
* Registers: use key 's' to show this values *
*****************************************************************************/
 
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
#include <kernel/kern.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include <drivers/pci6025e/timer.h>
#include <drivers/pci6025e/dio_ppi.h>
 
#define TASK_MET 20000
#define TASK_WCET 50000
#define TASK_PERIOD 100000
 
#define PERIOD 1000000
 
void endFun(KEY_EVT *);
void gateEvent(KEY_EVT *);
 
void drawInterface(void);
void closeEvent(void *);
 
TASK show_body(int);
TASK gate_body(int);
 
BYTE sys = 0;
PID c0_gate_pid, c1_gate_pid, show_pid;
int black = rgb16(0, 0, 0);
 
int main(int argc, char **argv)
{
KEY_EVT k;
SOFT_TASK_MODEL show_model;
HARD_TASK_MODEL gating;
 
k.flag = CNTL_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endFun, FALSE);
 
k.flag = CNTR_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endFun, FALSE);
 
k.flag = 0;
k.scan = KEY_G;
k.ascii = 'g';
k.status = KEY_PRESSED;
keyb_hook(k, gateEvent, FALSE);
 
k.scan = KEY_H;
k.ascii = 'h';
k.status = KEY_PRESSED;
keyb_hook(k, gateEvent, FALSE);
 
k.scan = KEY_S;
k.ascii = 's';
k.status = KEY_PRESSED;
keyb_hook(k, gateEvent, FALSE);
 
if(!reMap()){
sys = 11;
sys_end();
}
 
soft_task_default_model(show_model);
soft_task_def_level(show_model, 2);
soft_task_def_met(show_model, TASK_MET);
soft_task_def_wcet(show_model, TASK_WCET);
soft_task_def_aperiodic(show_model);
soft_task_def_period(show_model, TASK_PERIOD);
if( (show_pid = task_create("Show task", show_body, &show_model, NULL))
== NIL ){
sys = 20;
sys_end();
}
 
hard_task_default_model(gating);
hard_task_def_mit(gating, PERIOD);
hard_task_def_wcet(gating, 20000);
hard_task_def_arg(gating, C0);
if( (c0_gate_pid = task_create("C0 Gate task", gate_body, &gating, NULL)) == NIL ){
sys = 21;
sys_end();
}
 
hard_task_def_arg(gating, (void *)C1);
if( (c1_gate_pid = task_create("C1 Gate task", gate_body, &gating, NULL)) == NIL ){
sys = 22;
sys_end();
}
 
drawInterface();
//Enable DIO to manage gates
DIO_init();
DIO_setup(0xFF);
DIO_write(0x00);
 
//All PFI configured as input
PFIprogramming(0x0000);
//Fout provide 1MHz: timebase = 20MHz; divided by 2; on FOUT pin also divided by 10
setIntClock(0, 1, 10);
 
//Reset both counters
TIM_reset(2);
//Source PFI3(41); Gate PFI 4(42); Measure period
TIM_timeMeasurement(C0, 0x04, 0x45, 0, 0x00, 0);
//Source PFI6(45); Gate PFI 5(44); Measure pulsewidth
TIM_timeMeasurement(C1, 0x87, 0x46, 1, 0x00, 0);
 
//Arm both counter
TIM_arm(2);
 
return 0;
}
 
TASK show_body(int dummy)
{
DWORD val;
char buf[20];
 
while(1){
val = TIM_readHWSaveReg(C0);
sprintf(buf, "%ld", val);
grx_text(buf, 600, 471, rgb16(0, 255, 0), black);
val = TIM_readHWSaveReg(C1);
sprintf(buf, "%ld", val);
grx_text(buf, 200, 471, rgb16(255, 0, 0), black);
 
task_endcycle();
}
}
 
TASK gate_body(int counter)
{
BYTE out;
 
if(counter == C0) out = 0x80;
else out = 0x40;
 
while(1){
DIO_write(out);
if(counter == C0){
if(out) out = 0x00;
else out = 0x80;
} else {
if(out) out = 0x40;
else out = 0x00;
}
 
task_endcycle();
}
}
 
void drawInterface(void)
{
grx_rect(1, 1, 799, 120, rgb16(105, 0, 0));
grx_rect(2, 2, 798, 119, rgb16(155, 0, 0));
grx_rect(3, 3, 797, 118, rgb16(205, 0, 0));
grx_rect(4, 4, 796, 117, rgb16(255, 0, 0));
 
grx_text("Test program for single period and pulsewidth measurement features",
7, 10, rgb16(200, 200, 0), black);
 
grx_text("This program measures single period and pulsewidth of a square wave",
7, 20, rgb16(0, 255, 0), black);
grx_text("with frequency of 0.5 Hz", 7, 28, rgb16(0, 255, 0), black);
grx_text("Please connect PFI3 & PFI6 (41 & 45) to FOUT pin (50) or to 1Mhz frequency source",
7, 40, rgb16(255, 0, 0), black);
grx_text("Connect also DIO7 (32) to PFI4 (42) and DIO6 to PFI5 (44)",
7, 48, rgb16(255, 0, 0), black);
grx_text("Commands:", 7, 60, rgb16(0, 120, 0), black);
grx_text("Use 'g' to start wave generation on DIO7",
7, 70, rgb16(0, 255, 255), black);
grx_text("Use 'h' to start wave generation on DIO6",
7, 78, rgb16(0, 255, 255), black);
grx_text("Use 's' to show Hardware Save Registers content",
7, 86, rgb16(0, 255, 255), black);
grx_text("CTRL-X to exit", 7, 105, rgb16(255, 255, 0), black);
 
grx_rect(197, 127, 603, 423, rgb16(0, 255, 0));
grx_rect(198, 128, 602, 422, rgb16(0, 205, 0));
grx_rect(199, 129, 601, 421, rgb16(0, 155, 0));
grx_rect(200, 130, 600, 420, rgb16(0, 105, 0));
grx_line(215, 405, 215, 150, rgb16(255, 255, 255));
grx_line(210, 400, 580, 400, rgb16(255, 255, 255));
grx_line(220, 395, 220, 170, rgb16(0, 0, 255));
grx_line(220, 170, 390, 170, rgb16(0, 0, 255));
grx_line(390, 170, 390, 395, rgb16(0, 0, 255));
grx_line(390, 395, 560, 395, rgb16(0, 0, 255));
grx_line(220, 150, 560, 150, rgb16(0, 255, 0));
grx_line(220, 155, 390, 155, rgb16(255, 0, 0));
 
grx_rect(1, 450, 390, 503, rgb16(105, 0, 0));
grx_rect(2, 451, 389, 502, rgb16(155, 0, 0));
grx_rect(3, 452, 388, 501, rgb16(205, 0, 0));
grx_rect(4, 453, 387, 500, rgb16(255, 0, 0));
grx_text("Pulsewidth: [us]", 7, 471, rgb16(255, 0, 0), black);
 
grx_rect(410, 450, 799, 503, rgb16(105, 0, 0));
grx_rect(411, 451, 798, 502, rgb16(155, 0, 0));
grx_rect(412, 452, 797, 501, rgb16(205, 0, 0));
grx_rect(413, 453, 796, 500, rgb16(255, 0, 0));
grx_text("Period: [us]", 416, 471, rgb16(0, 255, 0), black);
}
 
void endFun(KEY_EVT *k)
{
closeEvent(NULL);
sys_end();
}
 
void gateEvent(KEY_EVT *k)
{
if(k->scan == KEY_G) task_activate(c0_gate_pid);
if(k->scan == KEY_H) task_activate(c1_gate_pid);
if(k->scan == KEY_S) task_activate(show_pid);
}
 
void closeEvent(void *arg)
{
TIM_disarm(2);
 
switch(sys){
case 0: sys_shutdown_message("OK\n"); break;
case 10: sys_shutdown_message("No PCI bus found\n"); break;
case 11: sys_shutdown_message("No NATIONAL board found\n"); break;
case 20: sys_shutdown_message("task <show value> down!!\n"); break;
case 21: sys_shutdown_message("task <C0 gate manage> down!!!\n"); break;
case 22: sys_shutdown_message("task <C1 gate manage> down!!!\n"); break;
case 30: sys_shutdown_message("Cannot init graphic envirorment\n"); break;
case 31: sys_shutdown_message("graphic mode 800x600x16 not supported\n"); break;
default: sys_shutdown_message("???????????????\n"); break;
}
}
/demos/tags/rel_1_4/pci6025e/test_dac.c
0,0 → 1,352
/*****************************************************************************
* Filename: test_dac.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 12/06/2001 *
* Description: Little test program for Analog Output section of PCI6025E *
*----------------------------------------------------------------------------*
* Notes: Connect a multimeter to DAC1 output (pin 21) and watch *
* tension value. Use '+' and '-' on numeric pad to increase *
* and decrise voltage *
* With this program it's possible to point out possible *
* offset errors. To correct them no software are written but *
* in National board package there's the program to calibrate *
* the board. Otherwise you can see how much is the offset *
* and you can compensate it through software value *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#include <drivers/pci6025e/dac.h>
 
#define TASK_VOLT_PERIOD 150E3
#define TASK_VOLT_WCET 080E3
#define TASK_DAC_PERIOD 050E3
#define TASK_DAC_WCET 020E3
 
#define CONV 10/2048
 
#define TASK_GROUP 1
 
WORD dac0_value = 0,
dac1_value = 0;
 
BYTE sys = 0;
BYTE dac = 0;
 
//some colors
int black = rgb16(0, 0, 0),
white = rgb16(255, 255, 255);
 
void drawInterface(void);
void endfun(KEY_EVT *);
void inc(KEY_EVT *);
void dec(KEY_EVT *);
void change_dac(KEY_EVT *);
void close_event(void *);
TASK Voltage_body(int);
TASK DAC_Check_body(int);
 
int main(int argc, char **argv)
{
KEY_EVT k;
HARD_TASK_MODEL m, d;
PID pid_m, pid_d;
 
k.flag = CNTR_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
k.flag = CNTL_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
k.flag = 0;
k.scan = 78;
k.ascii = 43;
k.status = KEY_PRESSED;
keyb_hook(k, inc, FALSE);
 
k.flag = 0;
k.scan = 74;
k.ascii = 45;
k.status = KEY_PRESSED;
keyb_hook(k, dec, FALSE);
 
k.flag = 0;
k.scan = KEY_V;
k.ascii = 'v';
k.status = KEY_PRESSED;
keyb_hook(k, change_dac, FALSE);
 
hard_task_default_model(m);
hard_task_def_wcet(m, TASK_VOLT_WCET);
hard_task_def_mit(m, TASK_VOLT_PERIOD);
hard_task_def_group(m, TASK_GROUP);
pid_m = task_create("Voltage", Voltage_body, &m, NULL);
if(pid_m == NIL){
sys = 30;
sys_end();
}
 
hard_task_default_model(d);
hard_task_def_wcet(d, TASK_DAC_WCET);
hard_task_def_mit(d, TASK_DAC_PERIOD);
hard_task_def_group(d, TASK_GROUP);
pid_d = task_create("DAC Check", DAC_Check_body, &d, NULL);
if(pid_d == NIL){
sys = 31;
sys_end();
}
 
//Check if a NI board is on PCI bus
if(!reMap()){
sys = 11;
sys_end();
}
 
drawInterface();
 
//Analog output section set up
DAC_Init();
 
/*
*AI_TIMEBASE div by 2; OUT_TIMEBASE div by 2; single DAC mode
*TMRDACWR = 3 OUT_TIMEBASE period; FIFO flags polarity active low
*TMRDACWR disabled; DMA PIO control = FIFO DATA interface mode
*UPDATE signal timebase = AO_UPDATE pulse width
*UPDATE pulsewidth = 3-3.5 OUT_TIMEBASE period
*UPDATE signal polarity = HIGH Z
*/
DAC_boardInit(0x02, 0x4000);
/*
*LDAC0 source = UPDATE
*DAC0 update immediately
*LDAC1 source = UPDATE
*DAC1 update immediately
*/
DAC_LDACSourceUpdate(0x00);
//End of Analog output section setup
 
group_activate(TASK_GROUP);
 
return 0;
}
 
/*
* Every time operator select a new value to send to a DAc this TASK makes
* actions needed to perform the operation
*/
TASK Voltage_body(int dac_work)
{
WORD old0_value, old1_value;
char buf[6];
float volt;
 
old0_value = dac0_value;
old1_value = dac1_value;
while(1){
if(dac){
if(dac1_value != old1_value){
DAC_output(DAC1, dac1_value);
old1_value = dac1_value;
sprintf(buf, "%04d", dac1_value);
grx_text(buf, 70, 120, rgb16(180, 0, 0), rgb16(255,255,140));
sprintf(buf, "%04x", dac1_value);
grx_text(buf, 300, 120, rgb16(180, 0, 0), rgb16(255,255,140));
if( (dac1_value & 0x0800) == 0 )
volt = (float)dac1_value * (float)CONV;
else
volt = (float)(dac1_value-0x0FFF) * (float)CONV;
sprintf(buf, "%05.2f", volt);
grx_text(buf, 70, 177, rgb16(180, 40, 180), black);
}
} else {
if(dac0_value != old0_value){
DAC_output(DAC0, dac0_value);
old0_value = dac0_value;
sprintf(buf, "%04d", dac0_value);
grx_text(buf, 521, 120, rgb16(180, 0, 0), rgb16(255,255,140));
sprintf(buf, "%04x", dac0_value);
grx_text(buf, 754, 120, rgb16(180, 0, 0), rgb16(255,255,140));
if( (dac0_value & 0x0800) == 0 )
volt = (float)dac0_value * (float)CONV;
else
volt = (float)(dac0_value-0x0FFF) * (float)CONV;
sprintf(buf, "%05.2f", volt);
grx_text(buf, 521, 177, rgb16(180, 40, 180), black);
}
}
task_endcycle();
}
}
 
/*
* This TASK show which is the DAC active
*/
TASK DAC_Check_body(int dummy)
{
BYTE old = dac;
char buf[8];
 
while(1){
if(dac != old){
old = dac;
sprintf(buf, "DAC %d", dac);
grx_text(buf, 385, 90, rgb16(255*dac, 255*(1-dac), 0), black);
}
task_endcycle();
}
}
 
void drawInterface(void)
{
grx_rect(1, 1, 799, 69, rgb16(105, 0, 0));
grx_rect(2, 2, 798, 68, rgb16(155, 0, 0));
grx_rect(3, 3, 797, 67, rgb16(205, 0, 0));
grx_rect(4, 4, 796, 66, rgb16(255, 0, 0));
 
grx_text("Test program for Analog output section of PCI6025E",
7, 10, rgb16(50, 255, 50), black);
grx_text("Use '+' and '-' on numeric pad to change tension",
7, 25, rgb16(0, 255, 255), black);
grx_text("Connect a tester to DAC1 output (pin21) or to DAC0 output (pin20)",
7, 33, rgb16(0, 255, 255), black);
grx_text("Use 'v' to alternate change active DAC",
7, 40, rgb16(0, 255, 255), black);
 
grx_text("CTRL-X for Exit", 7, 55, rgb16(200, 200, 0), black);
 
grx_rect(1, 80, 355, 150, rgb16(0, 105, 0));
grx_rect(2, 81, 354, 149, rgb16(0, 155, 0));
grx_rect(3, 82, 353, 148, rgb16(0, 205, 0));
grx_rect(4, 83, 352, 147, rgb16(0, 255, 0));
 
grx_rect(1, 160, 355, 199, rgb16(0, 105, 0));
grx_rect(2, 161, 354, 198, rgb16(0, 155, 0));
grx_rect(3, 162, 353, 197, rgb16(0, 205, 0));
grx_rect(4, 163, 352, 196, rgb16(0, 255, 0));
 
grx_rect(455, 80, 799, 150, rgb16(105, 105, 0));
grx_rect(456, 81, 798, 149, rgb16(155, 155, 0));
grx_rect(457, 82, 797, 148, rgb16(205, 205, 0));
grx_rect(458, 83, 796, 147, rgb16(255, 255, 0));
 
grx_rect(455, 160, 799, 199, rgb16(105, 105, 0));
grx_rect(456, 161, 798, 198, rgb16(155, 155, 0));
grx_rect(457, 162, 797, 197, rgb16(205, 205, 0));
grx_rect(458, 163, 796, 196, rgb16(255, 255, 0));
 
grx_rect(360, 80, 450, 105, rgb16(85, 85, 255));
grx_rect(361, 81, 449, 104, rgb16(125, 125, 255));
grx_rect(362, 82, 448, 103, rgb16(175, 175, 255));
grx_rect(363, 83, 447, 102, rgb16(225, 225, 255));
 
grx_rect(153, 93, 195, 103, rgb16(255, 0, 0));
grx_text("DAC 1", 155, 95, rgb16(255, 170, 170), black);
 
grx_rect(607, 93, 649, 103, rgb16(255, 0, 0));
grx_text("DAC 0", 609, 95, rgb16(255, 255, 210), black);
 
grx_text("Decimal", 7, 120, rgb16(120, 120, 255), black);
grx_text("Hexadecimal", 200, 120, rgb16(120, 120, 255), black);
grx_text("Tension", 7, 177, rgb16(120, 120, 255), black);
 
grx_text("Decimal", 461, 120, rgb16(255, 120, 120), black);
grx_text("Hexadecimal", 654, 120, rgb16(255, 120, 120), black);
grx_text("Tension", 461, 177, rgb16(255, 120, 120), black);
}
 
void close_event(void *arg)
{
switch(sys){
case 0 : sys_shutdown_message("Regular End\n"); break;
case 1 : sys_shutdown_message("End fun invoked\n"); break;
case 10: sys_shutdown_message("Pci bus not found\n"); break;
case 11: sys_shutdown_message("No National board found\n"); break;
case 20: sys_shutdown_message("Cannot initialize graphic envirorment\n"); break;
case 21: sys_shutdown_message("Cannot start envirorment in 800x600x16\n"); break;
case 30: sys_shutdown_message("Cannot create task <voltage>\n"); break;
case 31: sys_shutdown_message("Canot create task <DAC Check>\n"); break;
case 40: sys_shutdown_message("Break on clock end event\n"); break;
default: sys_shutdown_message("Unkwon exit event\n"); break;
}
}
 
void endfun(KEY_EVT *k)
{
close_event(NULL);
 
sys_end();
}
 
/*
* Capture correct key event and increase output tension of active DAC
*/
void inc(KEY_EVT *k)
{
if(dac){
if( (dac1_value & 0x0800) == 0 && dac1_value > 0x07FF )
dac1_value = 0;
else
dac1_value++;
} else {
if( (dac0_value & 0x0800) == 0 && dac0_value > 0x07FF )
dac0_value = 0;
else
dac0_value++;
}
}
 
/*
* Same as above but decrease tension
*/
void dec(KEY_EVT *k)
{
if(dac){
if(dac1_value < 1)
dac1_value = 0x0FFF;
else
dac1_value -= 1;
} else {
if(dac0_value < 1)
dac0_value = 0x0FFF;
else
dac0_value -= 1;
}
}
 
/*
* Capture correct key event and change active DAC
*/
void change_dac(KEY_EVT *k)
{
if(dac) dac = 0;
else dac = 1;
}
 
/demos/tags/rel_1_4/pci6025e/test_ec.c
0,0 → 1,392
/*****************************************************************************
* Filename: test_ec.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 20/06/2001 *
* Description: Test program for gated event counting using PCI6025E board *
*----------------------------------------------------------------------------*
* Notes: FOUT are enabled to provide a frequency of 6250 Hz. You could *
* connect PFI3 (pin 41) and PFI6 (pin 45) to this source for counting *
* edges. Gated counting are enabled and PFI4 (pin 42) is gate pin for *
* counter 0 and PFI5 (pin 44) is gate pin for counter 0. DIO 7 and 6 *
* are als configured to switch between 0 and 5 V. Connect DIO 7 to *
* gate 0 and DIO 6 to gate 1. Use 'g' (counter 0) and 'h' (counter 1) *
* to change DIO lines value. On left area of the screen you should *
* see counter while counting and on the right area you should lock *
* counter values by pressing 's' key. *
* Notice that line parameters are enabled and accept inital value *
* for the two counters. If they aren't specified or they are wrong *
* counters start from 0x00FFFFFF (counter 0 which counts down) and *
* 0x00000000 (counter 1 which counts up). *
* Last time addiction: TC Interrupts and Gate interrupts are enabled *
* Bottom squares indicates when an interrupt is *
* raised *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include <drivers/pci6025e/timer.h>
#include <drivers/pci6025e/dio_ppi.h>
 
#ifndef INT_NO
#define INT_NO NIDevice_info[0].InterruptLevel
#endif
 
BYTE sys = 0;
 
PID show_aper_pid;
BYTE out = 0x00;
 
int black = rgb16(0, 0, 0),
white = rgb16(255, 255, 255);
 
void endfun(KEY_EVT *);
void close_event(void *);
void show_evt(KEY_EVT *k);
void gate_change(KEY_EVT *k);
 
void drawInterface(void);
 
void int_evt(int intno);
 
TASK show_per(int);
TASK show_aper(int);
 
int main(int argc, char **argv)
{
KEY_EVT k;
SOFT_TASK_MODEL show_per_mod, show_aper_mod;
PID show_per_pid;
int result;
DWORD init_val_c0, init_val_c1;
 
if(argc >= 3){
if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
init_val_c0 = 0x00FFFFFF;
if( (result = sscanf(argv[2], "%ld", &init_val_c1)) != 1)
init_val_c1 = 0x00000000;
}
if(argc == 2){
if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
init_val_c0 = 0x00FFFFFF;
init_val_c1 = 0x00000000;
}
if(argc == 1){
init_val_c0 = 0x00FFFFFF;
init_val_c1 = 0x00000000;
}
 
k.flag = CNTL_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
k.flag = CNTR_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
soft_task_default_model(show_aper_mod);
soft_task_def_aperiodic(show_aper_mod);
soft_task_def_level(show_aper_mod, 2);
soft_task_def_period(show_aper_mod, 250000);
soft_task_def_met(show_aper_mod, 30000);
soft_task_def_wcet(show_aper_mod, 60000);
if( (show_aper_pid = task_create("Show aperiodic task", show_aper, &show_aper_mod, NULL)) == NIL ){
sys = 10;
sys_end();
}
 
k.flag = 0;
k.scan = KEY_S;
k.ascii = 's';
k.status = KEY_PRESSED;
keyb_hook(k, show_evt, FALSE);
 
k.flag = 0;
k.scan = KEY_G;
k.ascii = 'g';
k.status = KEY_PRESSED;
keyb_hook(k, gate_change, FALSE);
 
k.scan = KEY_H;
k.ascii = 'h';
k.status = KEY_PRESSED;
keyb_hook(k, gate_change, FALSE);
 
soft_task_default_model(show_per_mod);
soft_task_def_level(show_per_mod, 2);
soft_task_def_met(show_per_mod, 1000);
soft_task_def_period(show_per_mod, 10000);
if( (show_per_pid = task_create("Show periodic task", show_per, &show_per_mod, NULL)) == NIL){
sys = 11;
sys_end();
}
 
if(!reMap()){
sys = 21;
sys_end();
}
 
drawInterface();
//Init DIO lines used to manage counters gates
DIO_init();
DIO_setup(0xFF);
DIO_write(out);
 
//All PFI are configured as input
PFIprogramming(0x0000);
//FOUT enable; Slow TIMEBASE, divided by two; divided by 16 on FOUT pin
setIntClock(1, 1, 0);
 
TIM_reset(2); //Reset both two counters
 
//Source PFI3(41); Gate PFI 4(42); Down counting; counts rising edge;
TIM_eventCounting(C0, 0x04, 0x45, 0x03, init_val_c0);
 
//Source PFI6(45); Gate PFI 5(44); Up counting; counts rising edge;
TIM_eventCounting(C1, 0x87, 0x46, 0x03, init_val_c1);
 
//Set up interrupt group A and B enabling and programming to assert a request
//both on line 2 and 3 respectively
INT_setup(0x0A, 0x0B);
INT_personalize(0x03); //Interrupt request polarity low; IRQ driven on line 0 and 1
 
handler_set(INT_NO, int_evt, show_aper_pid, FALSE);
 
TIM_arm(2); //Arm both two counters
 
task_activate(show_per_pid);
 
return 0;
}
 
void drawInterface(void)
{
grx_rect(1, 1, 799, 99, rgb16(105, 0, 0));
grx_rect(2, 2, 798, 98, rgb16(155, 0, 0));
grx_rect(3, 3, 797, 97, rgb16(205, 0, 0));
grx_rect(4, 4, 796, 96, rgb16(255, 0, 0));
 
grx_text("Test program for Gated Event Counting capacity of PCI6025E timers",
7, 10, rgb16(50, 255, 50), black);
 
grx_text("This program counting rise edges on counters source (PFI3 & PFI6) when releted gates",
7, 25, rgb16(0, 255, 255), black);
grx_text("(PFI 42 & 44) are enabled. Frequency Out (FOUT) is enabled and provides a frequency of 6250 Hz",
7, 33, rgb16(0, 255, 255), black);
 
grx_text("Instruction:",7, 43, rgb16(255, 0, 0), black);
grx_text("Use 's' to lock counters value in right squares",
7, 51, rgb16(0, 255, 255), black);
grx_text("Use 'g' to block or to release alternativly counter 0 (see top-left square)",
7, 58, rgb16(0, 255, 255), black);
 
grx_text("Use 'h' to block or to release alternativly counter 1 (see bottom-left square)",
7, 65, rgb16(0, 255, 255), black);
 
grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
7, 78, rgb16(0, 255, 0), black);
grx_text("CTRL-X for Exit", 7, 88, rgb16(200, 200, 0), black);
 
grx_rect(1, 110, 355, 170, rgb16(0, 105, 0));
grx_rect(2, 111, 354, 169, rgb16(0, 155, 0));
grx_rect(3, 112, 353, 168, rgb16(0, 205, 0));
grx_rect(4, 113, 352, 167, rgb16(0, 255, 0));
grx_text("Counter 0 evolution", 7, 120, rgb16(255, 255, 0), black);
 
grx_rect(455, 110, 799, 170, rgb16(0, 105, 0));
grx_rect(456, 111, 798, 169, rgb16(0, 155, 0));
grx_rect(457, 112, 797, 168, rgb16(0, 205, 0));
grx_rect(458, 113, 796, 167, rgb16(0, 255, 0));
grx_text("Counter 0 locked value", 461, 120, rgb16(255, 0, 255), black);
 
grx_rect(360, 110, 450, 170, rgb16(0, 105, 0));
grx_rect(361, 111, 449, 169, rgb16(0, 155, 0));
grx_rect(362, 112, 448, 168, rgb16(0, 205, 0));
grx_rect(363, 113, 447, 167, rgb16(0, 255, 0));
grx_text("Gate0", 367, 120, rgb16(200, 255, 200), black);
grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
 
grx_rect(1, 190, 355, 260, rgb16(85, 85, 255));
grx_rect(2, 191, 354, 259, rgb16(135, 135, 255));
grx_rect(3, 192, 353, 258, rgb16(190, 190, 255));
grx_rect(4, 193, 352, 257, rgb16(230, 239, 255));
grx_text("Counter 1 evolution", 7, 200, white, black);
 
grx_rect(455, 190, 799, 260, rgb16(85, 85, 255));
grx_rect(456, 191, 798, 259, rgb16(135, 135, 255));
grx_rect(457, 192, 797, 258, rgb16(190, 190, 255));
grx_rect(458, 193, 796, 257, rgb16(230, 230, 255));
grx_text("Counter 1 locked value", 461, 200, white, black);
 
grx_rect(360, 190, 450, 260, rgb16(85, 85, 255));
grx_rect(361, 191, 449, 259, rgb16(135, 135, 255));
grx_rect(362, 192, 448, 258, rgb16(190, 190, 255));
grx_rect(363, 193, 447, 257, rgb16(230, 230, 255));
grx_text("Gate1", 367, 200, rgb16(255, 200, 255), black);
grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
 
grx_text("Counter 0 Interrupt events", 7, 340, rgb16(255, 200, 100), black);
grx_text("Counter 1 Interrupt events", 461, 340, rgb16(255, 200, 100), black);
grx_rect(1, 350, 355, 400, rgb16(105, 0, 0));
grx_rect(2, 351, 354, 399, rgb16(155, 0, 0));
grx_rect(3, 352, 353, 398, rgb16(205, 0, 0));
grx_rect(4, 353, 352, 397, rgb16(255, 0, 0));
grx_rect(455, 350, 799, 400, rgb16(105, 0, 0));
grx_rect(456, 351, 798, 399, rgb16(155, 0, 0));
grx_rect(457, 352, 797, 398, rgb16(205, 0, 0));
grx_rect(458, 353, 796, 397, rgb16(255, 0, 0));
}
 
 
TASK show_per(int none)
{
DWORD val;
char buf[30];
 
while(1){
val = TIM_readCounter(C0); //Read counter 0 value
sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
grx_text(buf, 7, 145, rgb16(255, 0, 0), black);
 
val = TIM_readCounter(C1); //Read counter 1 value
sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
grx_text(buf, 7, 225, rgb16(255, 0, 0), black);
 
task_endcycle();
}
}
 
TASK show_aper(int dummy)
{
DWORD val;
char buf[30];
 
while(1){
val = TIM_readCounter(C0);
sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
grx_text(buf, 461, 145, rgb16(80, 80, 255), black);
 
val = TIM_readCounter(C1);
sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
grx_text(buf, 461, 225, rgb16(80, 80, 255), black);
 
task_endcycle();
}
}
 
void endfun(KEY_EVT *k)
{
close_event(NULL);
 
sys_end();
}
 
void show_evt(KEY_EVT *k)
{
task_activate(show_aper_pid);
}
 
void gate_change(KEY_EVT *k)
{
if(k->ascii == 'g'){
if( (out & 0x80) != 0){
out &= 0x7F;
grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
} else {
out |= 0x80;
grx_text("5 V", 367, 145, rgb16(0, 255, 0), black);
}
} else {
if( (out & 0x40) != 0){
out &= 0xBF;
grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
} else {
out |= 0x40;
grx_text("5 V", 367, 225, rgb16(0, 255, 0), black);
}
}
 
DIO_write(out);
}
 
void close_event(void *arg)
{
TIM_disarm(2); //Disable both two counters
handler_remove(INT_NO);
 
switch(sys){
case 0: sys_shutdown_message("OK\n"); break;
case 10: sys_shutdown_message("Task <show aperiodic> down\n"); break;
case 11: sys_shutdown_message("Task <show periodic> down\n"); break;
case 20: sys_shutdown_message("No PCI bus\n"); break;
case 21: sys_shutdown_message("No National board on PCI bus\n"); break;
case 30: sys_shutdown_message("No graphic can be initialized\n"); break;
case 31: sys_shutdown_message("This graphic mode cannot be supported\n"); break;
default: sys_shutdown_message("???????????\n"); break;
}
}
 
void int_evt(int intno)
{
WORD status;
 
status = DAQ_STC_Windowed_Mode_Read(AI_STATUS_1);
if( (status & 0x8000) != 0){
if( (status & 0x0008) != 0){
grx_text("INT Group A raised! G0 Rolls over", 7, 360, rgb16(0, 255, 0), black);
set(interrupt_a_ack, 14);
DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK, interrupt_a_ack);
clr(interrupt_a_ack, 14);
}
if( (status & 0x0004) != 0){
grx_text("INT Group A raised! G0 gate pressed", 7, 380, rgb16(0, 255, 0), black);
set(interrupt_a_ack, 15);
DAQ_STC_Windowed_Mode_Write(INTERRUPT_A_ACK, interrupt_a_ack);
clr(interrupt_a_ack, 15);
}
return;
}
 
status = DAQ_STC_Windowed_Mode_Read(AO_STATUS_1);
if( (status & 0x8000) != 0){
if( (status & 0x0008) != 0){
grx_text("INT Group B raised! G1 Rolls over", 461, 360, rgb16(0, 255, 0), black);
set(interrupt_b_ack, 14);
DAQ_STC_Windowed_Mode_Write(INTERRUPT_B_ACK, interrupt_b_ack);
clr(interrupt_b_ack, 14);
}
if( (status & 0x0004) != 0){
grx_text("INT Group B raised! G1 gate pressed", 461, 380, rgb16(0, 255, 0), black);
set(interrupt_b_ack, 15);
DAQ_STC_Windowed_Mode_Write(INTERRUPT_B_ACK, interrupt_b_ack);
clr(interrupt_b_ack, 15);
}
return;
}
}
/* End of file: Test_ec.c */
/demos/tags/rel_1_4/pci6025e/test_ppi.c
0,0 → 1,177
/*****************************************************************************
* Filename: Test_ppi.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 22/05/2001 *
* Description: Test PPI82C55MSM on NI DAQ PCI6025E *
*----------------------------------------------------------------------------*
* Notes: Configures port A and port C in input and port B in output *
* Test 1: *
* Now connect port B to port A and watch on video value changes *
* in counting order. After connect port B to port C and watch *
* the same events on port C *
* Test 2: *
* Connect 8 LEDs on port B and port A and port C lines to Vcc or*
* GND. Now run this test and watch 8 diode changing in counting *
* mode and on screen port A and port C values displayed *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include <drivers/pci6025e/dio_ppi.h>
 
void exit_fun(KEY_EVT *);
TASK test_ppi(int);
void close_event(void *);
void draw_screen(void);
 
BYTE system = 0;
 
int main(int argc, char **argv)
{
HARD_TASK_MODEL m;
KEY_EVT k;
PID pid_m;
 
k.flag = CNTL_BIT;
k.scan = KEY_C;
k.ascii = 'c';
k.status = KEY_PRESSED;
keyb_hook(k, exit_fun, FALSE);
k.flag = CNTR_BIT;
k.scan = KEY_C;
k.ascii = 'c';
k.status = KEY_PRESSED;
keyb_hook(k, exit_fun, FALSE);
 
hard_task_default_model(m);
hard_task_def_wcet(m, 90000);
hard_task_def_mit(m, 250000);
pid_m = task_create("TEST PPI", test_ppi, &m, NULL);
if(pid_m == NIL){
system = 10;
sys_end();
}
 
//Look for a National board on PCI bus
if(!reMap()){
system = 21;
sys_end();
}
 
//Start configuring DIO module
PPI_init();
 
draw_screen();
 
task_activate(pid_m);
 
return 0;
}
 
void draw_screen(void)
{
grx_rect(5, 5, 610, 130, rgb16(255, 0, 0));
grx_rect(4, 4, 611, 131, rgb16(0,255,255));
grx_rect(3, 3, 612, 132, rgb16(255, 0, 0));
grx_rect(15, 45, 195, 100, rgb16(255, 0, 0));
grx_rect(215, 45, 395, 100, rgb16(0, 255, 0));
grx_rect(415, 45, 595, 100, rgb16(200, 200, 255));
grx_text("Test of PPI82C55MSM function (Hosted on PCI6025E)",
9, 7, rgb16(0, 255, 0), rgb16(0, 0, 0));
grx_text("PORT A and PORT C are configured in input mode",
9, 20, rgb16(255, 70, 70), rgb16(0, 0, 0));
grx_text("PORT B is configured in output mode",
9, 28, rgb16(255, 70, 70), rgb16(0, 0, 0));
grx_text("PORT B (Output)", 35, 50, rgb16(200, 0, 0), rgb16(0, 0, 0));
grx_text("PORT A (Input)", 235, 50, rgb16(30,255,30), rgb16(0, 0, 0));
grx_text("PORT C (Input)", 435, 50, rgb16(200,200,255), rgb16(0, 0, 0));
grx_text("CTRL + C to exit", 9, 115, rgb16(255,255,0), rgb16(0,0,0));
}
 
/*
* At each activation this task sends out value on port B and reads values from
* port A and C
*/
TASK test_ppi(int dummy)
{
BYTE val, pA, pC;
int i;
char buf[10];
 
PPI_config(0x99); //Mode 0 for all; Port A, Port C input; Port B output
val = 0;
while(1){
PPI_write(PPI_PORT_B, val); //sends out value
pA = PPI_read(PPI_PORT_A); //reads from port A
pC = PPI_read(PPI_PORT_C); //reads from port C
 
for(i=7; i>=0; i--){
if( (val>>i)%2 )
grx_text("1", 25+10*(7-i), 75, rgb16(255,0,0), rgb16(0,0,0));
else
grx_text("0", 25+10*(7-i), 75, rgb16(255,0,0), rgb16(0,0,0));
if( (pA>>i)%2 )
grx_text("1", 225+10*(7-i), 75, rgb16(0,255,0), rgb16(0,0,0));
else
grx_text("0", 225+10*(7-i), 75, rgb16(0,255,0), rgb16(0,0,0));
if( (pC>>i)%2 )
grx_text("1", 425+10*(7-i), 75, rgb16(200,200,255), rgb16(0,0,0));
else
grx_text("0", 425+10*(7-i), 75, rgb16(200,200,255), rgb16(0,0,0));
}
sprintf(buf, "%03d", val);
grx_text(buf, 140, 75, rgb16(255,0,0), rgb16(0,0,0));
sprintf(buf, "%03d", pA);
grx_text(buf, 340, 75, rgb16(0,255,0), rgb16(0,0,0));
sprintf(buf, "%03d", pC);
grx_text(buf, 540, 75, rgb16(200,200,255), rgb16(0,0,0));
val++;
task_endcycle();
}
}
 
void close_event(void *arg)
{
switch(system){
case 0: sys_shutdown_message("Regular end\n"); break;
case 10:sys_shutdown_message("Cannot create task 'TEST PPI'\n"); break;
case 20:sys_shutdown_message("Pci bus don't find\n"); break;
case 21:sys_shutdown_message("No National board on PC\n"); break;
case 30:sys_shutdown_message("Cannot start graphic envirorment\n"); break;
default: sys_shutdown_message("Unknown exit\n"); break;
}
}
 
void exit_fun(KEY_EVT *k)
{
system = 0;
close_event(NULL);
 
sys_end();
}
 
/*end of file: test_ppi.c*/
/demos/tags/rel_1_4/pci6025e/test_bec.c
0,0 → 1,324
/*****************************************************************************
* Filename: test_bec.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 20/06/2001 *
* Description: Test program for buffered gated event counting using PCI6025E *
* board *
*----------------------------------------------------------------------------*
* Notes: FOUT are enabled to provide a frequency of 6250 Hz. You could *
* connect PFI3 (pin 41) and PFI6 (pin 45) to this source for counting *
* edges. Gated counting are enabled and PFI4 (pin 42) is gate pin for *
* counter 0 and PFI5 (pin 44) is gate pin for counter 0. DIO 7 and 6 *
* are als configured to switch between 0 and 5 V. Connect DIO 7 to *
* gate 0 and DIO 6 to gate 1. Use 'g' (counter 0) and 'h' (counter 1) *
* to change DIO lines value. On left area of the screen you should *
* see counter while counting and on the right area you should lock *
* counter values by pressing 's' key. *
* Notice that line parameters are enabled and accept inital value *
* for the two counters. If they aren't specified or they are wrong *
* counters start from 0x00FFFFFF (counter 0 which counts down) and *
* 0x00000000 (counter 1 which counts up). *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#include <drivers/pci6025e/timer.h>
#include <drivers/pci6025e/dio_ppi.h>
 
BYTE sys = 0;
 
PID show_aper_pid;
BYTE out = 0x00;
 
int black = rgb16(0, 0, 0),
white = rgb16(255, 255, 255);
 
void endfun(KEY_EVT *);
void close_event(void *);
void show_evt(KEY_EVT *k);
void gate_change(KEY_EVT *k);
 
void drawInterface(void);
 
TASK show_per(int);
TASK show_aper(int);
 
int main(int argc, char **argv)
{
KEY_EVT k;
SOFT_TASK_MODEL show_per_mod, show_aper_mod;
PID show_per_pid;
int result;
DWORD init_val_c0, init_val_c1;
 
if(argc >= 3){
if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
init_val_c0 = 0x00FFFFFF;
if( (result = sscanf(argv[2], "%ld", &init_val_c1)) != 1)
init_val_c1 = 0x00000000;
}
if(argc == 2){
if( (result = sscanf(argv[1], "%ld", &init_val_c0)) != 1)
init_val_c0 = 0x00FFFFFF;
init_val_c1 = 0x00000000;
}
if(argc == 1){
init_val_c0 = 0x00FFFFFF;
init_val_c1 = 0x00000000;
}
 
k.flag = CNTL_BIT;
k.scan = KEY_X;
k.ascii = 'x';
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
k.flag = CNTR_BIT;
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
soft_task_default_model(show_aper_mod);
soft_task_def_aperiodic(show_aper_mod);
soft_task_def_level(show_aper_mod, 2);
soft_task_def_period(show_aper_mod, 250000);
soft_task_def_met(show_aper_mod, 30000);
soft_task_def_wcet(show_aper_mod, 60000);
if( (show_aper_pid = task_create("Show aperiodic task", show_aper, &show_aper_mod, NULL)) == NIL ){
sys = 10;
sys_end();
}
 
k.flag = 0;
k.scan = KEY_S;
k.ascii = 's';
k.status = KEY_PRESSED;
keyb_hook(k, show_evt, FALSE);
 
k.flag = 0;
k.scan = KEY_G;
k.ascii = 'g';
k.status = KEY_PRESSED;
keyb_hook(k, gate_change, FALSE);
 
k.scan = KEY_H;
k.ascii = 'h';
k.status = KEY_PRESSED;
keyb_hook(k, gate_change, FALSE);
 
soft_task_default_model(show_per_mod);
soft_task_def_level(show_per_mod, 2);
soft_task_def_met(show_per_mod, 1000);
soft_task_def_period(show_per_mod, 10000);
if( (show_per_pid = task_create("Show periodic task", show_per, &show_per_mod, NULL)) == NIL){
sys = 11;
sys_end();
}
 
if(!reMap()){
sys = 21;
sys_end();
}
 
drawInterface();
 
DIO_init();
DIO_setup(0xFF);
DIO_write(out);
 
PFIprogramming(0x0000);
setIntClock(1, 1, 0);
TIM_reset(2); //Reset both two counters
 
 
//Source PFI3(41); Gate PFI 4(42); Down counting; counts rising edge;
TIM_bufferedEventCounting(C0, 0x04, 0x45, 0x01, init_val_c0);
 
//Source PFI6(45); Gate PFI 5(44); Up counting; counts rising edge;
TIM_bufferedEventCounting(C1, 0x87, 0x46, 0x00, init_val_c1);
 
TIM_arm(2); //Arm both two counters
 
task_activate(show_per_pid);
 
return 0;
}
 
void drawInterface(void)
{
grx_rect(1, 1, 799, 99, rgb16(105, 0, 0));
grx_rect(2, 2, 798, 98, rgb16(155, 0, 0));
grx_rect(3, 3, 797, 97, rgb16(205, 0, 0));
grx_rect(4, 4, 796, 96, rgb16(255, 0, 0));
 
grx_text("Test program for Buffered Event Counting capacity of PCI6025E timers",
7, 10, rgb16(50, 255, 50), black);
 
grx_text("This program counting rise edges on counters source (PFI3 & PFI6)",
7, 18, rgb16(0, 255, 255), black);
grx_text("Counter 1 will be resetted every gate falling edge",
7, 26, rgb16(0, 255, 255), black);
grx_text("(PFI 42 & 44) are enabled. Frequency Out (FOUT) is enabled and provides a frequency of 6250 Hz",
7, 34, rgb16(0, 255, 255), black);
 
grx_text("Instruction:",7, 43, rgb16(255, 0, 0), black);
grx_text("Use 's' to watch contents of Hardware save registers updated every time gate goes down",
7, 51, rgb16(0, 255, 255), black);
grx_text("Use 'g' to generate an event on counter 0 gate (see top-left square)",
7, 58, rgb16(0, 255, 255), black);
 
grx_text("Use 'h' to generate an event on counter 1 gate (see bottom-left square)",
7, 65, rgb16(0, 255, 255), black);
 
grx_text("Please connect DIO7 (pin 32) to PFI4 (pin 42) and DIO6 (pin 30) to PFI5 (pin 44)",
7, 78, rgb16(0, 255, 0), black);
grx_text("CTRL-X for Exit", 7, 88, rgb16(200, 200, 0), black);
 
grx_rect(1, 110, 355, 170, rgb16(0, 105, 0));
grx_rect(2, 111, 354, 169, rgb16(0, 155, 0));
grx_rect(3, 112, 353, 168, rgb16(0, 205, 0));
grx_rect(4, 113, 352, 167, rgb16(0, 255, 0));
grx_text("Counter 0 evolution", 7, 120, rgb16(255, 255, 0), black);
 
grx_rect(455, 110, 799, 170, rgb16(0, 105, 0));
grx_rect(456, 111, 798, 169, rgb16(0, 155, 0));
grx_rect(457, 112, 797, 168, rgb16(0, 205, 0));
grx_rect(458, 113, 796, 167, rgb16(0, 255, 0));
grx_text("Counter 0 locked value", 461, 120, rgb16(255, 0, 255), black);
 
grx_rect(360, 110, 450, 170, rgb16(0, 105, 0));
grx_rect(361, 111, 449, 169, rgb16(0, 155, 0));
grx_rect(362, 112, 448, 168, rgb16(0, 205, 0));
grx_rect(363, 113, 447, 167, rgb16(0, 255, 0));
grx_text("Gate0", 367, 120, rgb16(200, 255, 200), black);
grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
 
grx_rect(1, 190, 355, 260, rgb16(85, 85, 255));
grx_rect(2, 191, 354, 259, rgb16(135, 135, 255));
grx_rect(3, 192, 353, 258, rgb16(190, 190, 255));
grx_rect(4, 193, 352, 257, rgb16(230, 239, 255));
grx_text("Counter 1 evolution", 7, 200, white, black);
 
grx_rect(455, 190, 799, 260, rgb16(85, 85, 255));
grx_rect(456, 191, 798, 259, rgb16(135, 135, 255));
grx_rect(457, 192, 797, 258, rgb16(190, 190, 255));
grx_rect(458, 193, 796, 257, rgb16(230, 230, 255));
grx_text("Counter 1 locked value", 461, 200, white, black);
 
grx_rect(360, 190, 450, 260, rgb16(85, 85, 255));
grx_rect(361, 191, 449, 259, rgb16(135, 135, 255));
grx_rect(362, 192, 448, 258, rgb16(190, 190, 255));
grx_rect(363, 193, 447, 257, rgb16(230, 230, 255));
grx_text("Gate1", 367, 200, rgb16(255, 200, 255), black);
grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
}
 
TASK show_per(int none)
{
DWORD val;
char buf[30];
 
while(1){
val = TIM_readCounter(C0); //Read from Hardware Save Register
sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
grx_text(buf, 7, 145, rgb16(255, 0, 0), black);
 
val = TIM_readCounter(C1); //Read from Hardware Save Register
sprintf(buf, "HEX: %08lx DEC: %08ld", val ,val);
grx_text(buf, 7, 225, rgb16(255, 0, 0), black);
 
task_endcycle();
}
}
 
TASK show_aper(int dummy)
{
DWORD val;
char buf[30];
 
while(1){
val = TIM_readHWSaveReg(C0); //Read from Hardware Save Register
sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
grx_text(buf, 461, 145, rgb16(80, 80, 255), black);
 
val = TIM_readHWSaveReg(C1); //Read from Hardware Save Register
sprintf(buf, "HEX: %08lx DEC: %08ld", val, val);
grx_text(buf, 461, 225, rgb16(80, 80, 255), black);
 
task_endcycle();
}
}
 
void endfun(KEY_EVT *k)
{
close_event(NULL);
 
sys_end();
}
 
void show_evt(KEY_EVT *k)
{
task_activate(show_aper_pid);
}
 
void gate_change(KEY_EVT *k)
{
if(k->ascii == 'g'){
if( (out & 0x80) != 0){
out &= 0x7F;
grx_text("0 V", 367, 145, rgb16(255, 0, 0), black);
} else {
out |= 0x80;
grx_text("5 V", 367, 145, rgb16(0, 255, 0), black);
}
} else {
if( (out & 0x40) != 0){
out &= 0xBF;
grx_text("0 V", 367, 225, rgb16(255, 0, 0), black);
} else {
out |= 0x40;
grx_text("5 V", 367, 225, rgb16(0, 255, 0), black);
}
}
 
DIO_write(out);
}
 
void close_event(void *arg)
{
TIM_disarm(2); //Disable both two counters
 
switch(sys){
case 0: sys_shutdown_message("OK\n"); break;
case 10: sys_shutdown_message("Task <show aperiodic> down\n"); break;
case 11: sys_shutdown_message("Task <show periodic> down\n"); break;
case 20: sys_shutdown_message("No PCI bus\n"); break;
case 21: sys_shutdown_message("No National board on PCI bus\n"); break;
case 30: sys_shutdown_message("No graphic can be initialized\n"); break;
case 31: sys_shutdown_message("This graphic mode cannot be supported\n"); break;
default: sys_shutdown_message("???????????\n"); break;
}
}
/* End of file: Test_bec.c */
/demos/tags/rel_1_4/pci6025e/test_dio.c
0,0 → 1,171
/*****************************************************************************
* Filename: Test_dio.c *
* Author: Marco Ziglioli (Doctor Stein) *
* Date: 22/03/2001 *
* Last update: 22/03/2001 *
* Description: Test STC digital lines (8 lines) *
*----------------------------------------------------------------------------*
* Notes: Configure DIO 4 5 6 7 in input and DIO 0 1 2 3 in output *
* Two way to test this 8 lines: *
* 1) Connect 4 LEDs to output lines and check LEDs lights *
* themselves in counting order. Connect input lines to Vcc *
* or GND and check on video that STC has readed the right *
* nibble *
* 2) Connect 4 output lines with 4 input lines and check on *
* video that the nibble readed by STC change in counting *
* order *
*****************************************************************************/
 
/* This file is part of the S.Ha.R.K. Project - http://shark.sssup.it
*
* Copyright (C) 2001 Marco Ziglioli
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include <kernel/kern.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#include <drivers/pci6025e/dio_ppi.h>
 
BYTE system = 0;
 
void close_event(void *);
TASK test_DIO(int dummy);
void exit_fun(KEY_EVT *);
void draw_screen(void);
 
int main(int argc, char **argv)
{
HARD_TASK_MODEL m;
KEY_EVT k;
PID pid_m;
 
k.flag = CNTL_BIT;
k.scan = KEY_C;
k.ascii = 'c';
k.status = KEY_PRESSED;
keyb_hook(k, exit_fun, FALSE);
k.flag = CNTR_BIT;
k.scan = KEY_C;
k.ascii = 'c';
k.status = KEY_PRESSED;
keyb_hook(k, exit_fun, FALSE);
 
hard_task_default_model(m);
hard_task_def_wcet(m, 90000);
hard_task_def_mit(m, 250000);
pid_m = task_create("TEST DIO", test_DIO, &m, NULL);
if(pid_m == NIL){
system = 10;
sys_end();
}
 
//Look for a National board on PCI bus
if(!reMap()){
system = 21;
sys_end();
}
 
//Start configuring DIO module
DIO_init();
 
draw_screen();
 
task_activate(pid_m);
 
return 0;
}
 
void draw_screen(void)
{
grx_rect(5, 5, 405, 130, rgb16(255, 0, 0));
grx_rect(4, 4, 406, 131, rgb16(0,255,255));
grx_rect(3, 3, 407, 132, rgb16(255, 0, 0));
grx_rect(15, 45, 195, 100, rgb16(255, 0, 0));
grx_rect(215, 45, 395, 100, rgb16(0, 255, 0));
grx_text("Test of PCI6025E DIO function",
9, 7, rgb16(0, 255, 0), rgb16(0, 0, 0));
grx_text("DIO 4-5-6-7 are configured in input mode",
9, 20, rgb16(255, 70, 70), rgb16(0, 0, 0));
grx_text("DIO 0-1-2-3 are configured in output mode",
9, 28, rgb16(255, 70, 70), rgb16(0, 0, 0));
grx_text("Output bits", 35, 50, rgb16(200, 0, 0), rgb16(0, 0, 0));
grx_text("input bits", 235, 50, rgb16(30,255,30), rgb16(0, 0, 0));
grx_text("CTRL + C to exit", 9, 115, rgb16(255,255,0), rgb16(0,0,0));
}
 
/*
* At each activation this task change output value of lowest digitals line
* and read value on highest digital lines, showing them at video
*/
TASK test_DIO(int dummy)
{
BYTE out_val = 0x00,
in_val = 0;
int i;
char buf[10];
 
//DIO 0..3 configured as output
//DIO 4..7 configured as input
DIO_setup(0x0F);
 
while(1){
DIO_write(out_val); //sends out value
in_val = DIO_read() >> 4; //reads value
 
for(i=3; i>=0; i--){
if( (out_val>>i)%2 )
grx_text("1", 25+10*(3-i), 75, rgb16(255,0,0), rgb16(0,0,0));
else
grx_text("0", 25+10*(3-i), 75, rgb16(255,0,0), rgb16(0,0,0));
if( (in_val>>i)%2 )
grx_text("1", 225+10*(3-i), 75, rgb16(0,255,0), rgb16(0,0,0));
else
grx_text("0", 225+10*(3-i), 75, rgb16(0,255,0), rgb16(0,0,0));
}
sprintf(buf, "%03d", out_val);
grx_text(buf, 80, 75, rgb16(255,0,0), rgb16(0,0,0));
sprintf(buf, "%03d", in_val);
grx_text(buf, 280, 75, rgb16(0,255,0), rgb16(0,0,0));
 
out_val = (out_val+1)%16;
task_endcycle();
}
}
 
void close_event(void *arg)
{
switch(system){
case 0: sys_shutdown_message("Regular end\n"); break;
case 10:sys_shutdown_message("Cannot create task TEST DIO\n"); break;
case 21:sys_shutdown_message("No National board on PC\n"); break;
case 30:sys_shutdown_message("Cannot start graphic envirorment\n"); break;
default: sys_shutdown_message("Unknown exit\n"); break;
}
}
 
void exit_fun(KEY_EVT *k)
{
system = 0;
close_event(NULL);
 
sys_end();
}
 
/demos/tags/rel_1_4/pci6025e/makefile
0,0 → 1,32
#
#
# PCI6025E Examples and Test programs
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS= test_dac wave test_dio test_ppi test_ec test_bec test_mes test_bms
 
include $(BASE)/config/example.mk
 
test_dac:
make -f $(SUBMAKE) APP=test_dac OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
wave:
make -f $(SUBMAKE) APP=wave OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_dio:
make -f $(SUBMAKE) APP=test_dio OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_ppi:
make -f $(SUBMAKE) APP=test_ppi OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_ec:
make -f $(SUBMAKE) APP=test_ec OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_bec:
make -f $(SUBMAKE) APP=test_bec OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_mes:
make -f $(SUBMAKE) APP=test_mes OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
test_bms:
make -f $(SUBMAKE) APP=test_bms OTHEROBJS=initfile.o SHARKOPT="__LINUXC26__ __PCI__ __6025E__ __INPUT__ __FB__"
 
/demos/tags/rel_1_4/base/cabs.dat
0,0 → 1,11
----------------------------------------------------
system tick (ms): 1
----------------------------------------------------
 
task periods (ticks)
----------------------------------------------------
producer 1: 200 consumer 1: 400
producer 2: 100 consumer 2: 400
producer 3: 300 consumer 3: 150
producer 4: 800 consumer 4: 200
----------------------------------------------------
/demos/tags/rel_1_4/base/fly.c
0,0 → 1,203
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: fly.c,v 1.9 2004-06-15 14:10:23 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.9 $
Last update: $Date: 2004-06-15 14:10:23 $
------------
**/
 
/*
* Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
/*--------------------------------------------------------------*/
/* SIMULATION OF RANDOM FLIES */
/*--------------------------------------------------------------*/
 
#include <kernel/kern.h>
#include <modules/sem.h>
#include <stdlib.h>
#include <math.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#define YMENU 10 /* menu level */
#define XMIN 50
#define XMAX 600
#define YMIN 100
#define YMAX 450
#define VEL 5 /* linear velocity (def. = 5) */
#define ANG 30 /* angolo massimo sterzata (30) */
#define D 3 /* raggio mosca */
#undef ESC
#define ESC 27 /* ASCII code of ESCAPE key */
#define MAX_P 35 /* max number of flies */
#define FLYGROUP 1
 
double tick = 1.0; /* system tick = 1 ms */
int fly_period = 40000; /* task period */
int fly_wcet = 1000; /* task wcet */
PID pid;
 
sem_t grx_mutex;
 
/*--------------------------------------------------------------*/
 
void draw_fly(int x, int y, int c)
{
grx_disc(x, y, D, c);
}
 
/******************************************************************/
 
TASK fly(void *arg)
{
int x, y;
int ox, oy;
int dx, dy, da;
int teta, col,red;
int outx, outy;
double r;
int i = (int)arg;
 
x = ox = (XMIN+XMAX)/2;
y = oy = (YMIN+YMAX)/2;
teta = 0;
red = 100+10*i;
if (red > 255) red = 255;
col = rgb16(red,0,50); /* colore fly */
 
while (1) {
 
da = rand()%(2*ANG) - ANG; /* da = [-ANG,ANG] */
teta += da;
 
if (teta > 360) teta -= 360;
if (teta < 0) teta += 360;
r = (double)teta * PI / 180.;
 
dx = (float)(VEL * cos(r));
dy = (float)(VEL * sin(r));
x += dx;
y += dy;
 
outx = (x >= XMAX) || (x <= XMIN);
outy = (y >= YMAX) || (y <= YMIN);
 
if (outx || outy) {
x = x - dx;
y = y - dy;
if (outx) teta = 180 - teta;
if (outy) teta = -teta;
if (teta > 360) teta -= 360;
if (teta < 0) teta += 360;
r = (double)teta * PI / 180.;
 
dx = (float)(VEL * cos(r));
dy = (float)(VEL * sin(r));
 
x += dx;
y += dy;
}
 
sem_wait(&grx_mutex);
draw_fly(ox, oy, 0);
draw_fly(x, y, col);
ox = x; oy = y;
sem_post(&grx_mutex);
 
task_endcycle();
}
}
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
{
HARD_TASK_MODEL m;
 
char c; /* character from keyboard */
int i = 0; /* number of tasks created */
TIME seme; /* used to init the random seed */
 
/* Init the mutex */
sem_init(&grx_mutex,0,1);
 
/* The scenario */
grx_rect(XMIN-D-1, YMIN-D-1, XMAX+D+1, YMAX+D+1, rgb16(255,255,255));
grx_text("Simulation of Random Flies", XMIN, YMENU+10, rgb16(255,255,255), 0);
grx_text("SPACE create a fly" , XMIN, YMENU+20, rgb16(255,255,255), 0);
grx_text("ESC exit to DOS" , XMIN, YMENU+30, rgb16(255,255,255), 0);
 
/* The program waits a space to create a fly */
c = keyb_getch(BLOCK);
 
/* randomize!!!! */
seme = sys_gettime(NULL);
srand(seme);
 
do {
if ((c == ' ') && (i < MAX_P)) {
hard_task_default_model(m);
hard_task_def_ctrl_jet (m);
hard_task_def_arg (m, (void *)i);
hard_task_def_wcet (m, fly_wcet);
hard_task_def_mit (m, fly_period);
hard_task_def_group (m, FLYGROUP);
hard_task_def_usemath (m);
pid = task_create("fly", fly, &m, NULL);
if (pid == NIL) {
sys_shutdown_message("Could not create task <fly>");
sys_end();
return 0;
}
task_activate(pid);
i++;
}
c = keyb_getch(BLOCK);
 
} while (c != ESC);
 
sys_end();
 
return 0;
 
}
 
/*--------------------------------------------------------------*/
/demos/tags/rel_1_4/base/initfile.c
0,0 → 1,164
/*
* Project: S.Ha.R.K
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://hartik.sssup.it
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/intdrive.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
 
#include "modules/pi.h"
#include "modules/pc.h"
#include "modules/srp.h"
#include "modules/npp.h"
#include "modules/nop.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
CBS_register_level(CBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
PI_register_module();
PC_register_module();
NPP_register_module();
SRP_register_module();
NOP_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/base/iaster4.c
0,0 → 1,182
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/rr.h"
#include "modules/tbs.h"
#include "modules/cbs.h"
#include "modules/rrsoft.h"
#include "modules/dummy.h"
#include "modules/sem.h"
#include "modules/hartport.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
#define RRTICK 5000
#define TBS_NUM 1
#define TBS_DEN 10
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
TBS_register_level(TBS_ENABLE_ALL, 1, TBS_NUM, TBS_DEN);
TBS_register_level(TBS_ENABLE_ALL, 1, TBS_NUM*3, TBS_DEN);
CBS_register_level(CBS_ENABLE_ALL, 1);
 
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/base/iaster6.c
0,0 → 1,226
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: iaster6.c,v 1.4 2004-05-24 17:20:44 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.4 $
Last update: $Date: 2004-05-24 17:20:44 $
------------
 
System initialization file
 
h3pips.c
 
These functions register the following levels:
 
an EDF (Earliest Deadline First) level
a RR (Round Robin) level
a CBS (Costant Bandwidth Server) level
a PS (Polling Server) level
a Dummy level
 
It can accept these task models:
 
HARD_TASK_MODEL (wcet+mit) at level 0
NRT_TASK_MODEL at level 1
SOFT_TASK_MODEL (met, period) at level 2
SOFT_TASK_MODEL (periodicity=APERIODIC) at level 3
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
 
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/ps.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
#include "modules/pi.h"
#include "modules/pc.h"
#include "modules/srp.h"
#include "modules/npp.h"
#include "modules/nop.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
/*+ sysyem tick in us +*/
#define TICK 1000
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
CBS_register_level(CBS_ENABLE_ALL, 1);
PS_register_level(2 /*PS_ENABLE_ALL_EDF*/,1,500,100000);
dummy_register_level();
 
SEM_register_module();
 
CABS_register_module();
 
PI_register_module();
PC_register_module();
NPP_register_module();
SRP_register_module();
NOP_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
 
 
/demos/tags/rel_1_4/base/iaster7.c
0,0 → 1,214
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: iaster7.c,v 1.4 2004-05-24 17:20:45 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.4 $
Last update: $Date: 2004-05-24 17:20:45 $
------------
 
System initialization file
 
The tick is set to TICK ms.
 
This file contains the 2 functions needed to initialize the system.
 
These functions register a set of scheduling modules, in a fixed or
dynamic priority way...
 
It can accept these task models:
 
HARD_TASK_MODEL (wcet+mit) at level 0
SOFT_TASK_MODEL (periodicity=APERIODIC) at level 1
NRT_TASK_MODEL at level 2
SOFT_TASK_MODEL (periodicity=APERIODIC, wcet (only if TBS) ) at level 3,4
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/tbs.h"
 
#include "modules/rm.h"
#include "modules/rr.h"
#include "modules/ps.h"
 
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
/*+ sysyem tick in us +*/
#define TICK 0
 
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
RM_register_level(RM_ENABLE_ALL);
PS_register_level(PS_ENABLE_ALL_RM,1,1000,100000);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
PS_register_level(4,1,10000,100000);
PS_register_level(4,1,30000,100000);
 
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
 
 
 
 
/demos/tags/rel_1_4/base/iaster8.c
0,0 → 1,228
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: iaster8.c,v 1.4 2004-05-24 17:20:45 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.4 $
Last update: $Date: 2004-05-24 17:20:45 $
------------
 
System initialization file
 
h3piss.c
 
These functions register the following levels:
 
an EDF (Earliest Deadline First) level
a CBS (Costant Bandwidth Server) level
a SS (Sporadic Server) level
a RR (Round Robin) level
a Dummy level
 
It can accept these task models:
 
HARD_TASK_MODEL (wcet+mit) at level 0
SOFT_TASK_MODEL (met, period) at level 1
SOFT_TASK_MODEL (periodicity=APERIODIC) at level 2
NRT_TASK_MODEL at level 3
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/rm.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/ss.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
#include "modules/pi.h"
#include "modules/pc.h"
#include "modules/srp.h"
#include "modules/npp.h"
#include "modules/nop.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
/*+ system tick in us +*/
#define TICK 1000
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
CBS_register_level(CBS_ENABLE_ALL, 1);
SS_register_level(SS_ENABLE_GUARANTEE_EDF,1,5000,20000);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
CABS_register_module();
 
PC_register_module();
PI_register_module();
NPP_register_module();
SRP_register_module();
NOP_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
 
 
 
 
/demos/tags/rel_1_4/base/ipcidemo.c
0,0 → 1,133
/*
* Project: S.Ha.R.K
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://hartik.sssup.it
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/intdrive.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
 
#include "drivers/shark_linuxc26.h"
#include "drivers/shark_pci26.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
set_shutdown_task();
 
device_drivers_init();
 
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
LINUXC26_register_module();
PCI26_init();
 
return 0;
}
 
int device_drivers_close() {
 
return 0;
 
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg) {
 
struct timespec t;
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
 
}
/demos/tags/rel_1_4/base/makefile
0,0 → 1,95
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS = hello sig time preempt
PROGS += aster aster1 aster2 aster3 aster4 aster5 aster6 aster7 aster8
PROGS += pcidemo
PROGS += jointest condtest intsem semdemo pidemo pcdemo srpdemo mdemo
PROGS += ego fly cabs
 
include $(BASE)/config/example.mk
 
# Text applications
hello:
make -f $(SUBMAKE) APP=hello INIT= OTHEROBJS="ihello.o" OTHERINCL= SHARKOPT=
 
time:
make -f $(SUBMAKE) APP=time INIT= OTHEROBJS="ihello.o" OTHERINCL= SHARKOPT=
 
sig:
make -f $(SUBMAKE) APP=sig INIT= OTHEROBJS="ihello.o" OTHERINCL= SHARKOPT=
 
preempt:
make -f $(SUBMAKE) APP=preempt INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
semdemo:
make -f $(SUBMAKE) APP=semdemo INIT= OTHEROBJS="isemdemo.o" OTHERINCL= SHARKOPT=
 
pidemo:
make -f $(SUBMAKE) APP=pidemo INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
pcdemo:
make -f $(SUBMAKE) APP=pcdemo INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
srpdemo:
make -f $(SUBMAKE) APP=srpdemo INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
mdemo:
make -f $(SUBMAKE) APP=mdemo INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
aster:
make -f $(SUBMAKE) APP=aster INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
aster1:
make -f $(SUBMAKE) APP=aster1 INIT= OTHEROBJS="iaster1.o" OTHERINCL= SHARKOPT=
 
aster2:
make -f $(SUBMAKE) APP=aster2 INIT= OTHEROBJS="iaster1.o" OTHERINCL= SHARKOPT=
 
aster3:
make -f $(SUBMAKE) APP=aster3 INIT= OTHEROBJS="iaster3.o" OTHERINCL= SHARKOPT=
 
aster4:
make -f $(SUBMAKE) APP=aster4 INIT= OTHEROBJS="iaster4.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
aster5:
make -f $(SUBMAKE) APP=aster5 INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
aster6:
make -f $(SUBMAKE) APP=aster6 INIT= OTHEROBJS="iaster6.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
aster7:
make -f $(SUBMAKE) APP=aster7 INIT= OTHEROBJS="iaster7.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
aster8:
make -f $(SUBMAKE) APP=aster8 INIT= OTHEROBJS="iaster8.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__"
 
pcidemo:
make -f $(SUBMAKE) APP=pcidemo INIT= OTHEROBJS="ipcidemo.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__"
 
jointest:
make -f $(SUBMAKE) APP=jointest INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
condtest:
make -f $(SUBMAKE) APP=condtest INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
intsem:
make -f $(SUBMAKE) APP=intsem INIT= OTHEROBJS="imdemo.o" OTHERINCL= SHARKOPT=
 
# Graphical applications
 
ego:
make -f $(SUBMAKE) APP=ego INIT= OTHEROBJS="initgraph.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
 
fly:
make -f $(SUBMAKE) APP=fly INIT= OTHEROBJS="initgraph.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
 
cabs:
make -f $(SUBMAKE) APP=cabs INIT= OTHEROBJS="initgraph.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
 
/demos/tags/rel_1_4/base/cabs.c
0,0 → 1,290
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: cabs.c,v 1.7 2004-04-23 07:57:33 giacomo Exp $
*/
 
/*--------------------------------------------------------------*/
/* TEST ON CABS */
/*--------------------------------------------------------------*/
 
#include <kernel/kern.h>
#include <modules/cabs.h>
#include <string.h>
 
#include <drivers/shark_fb26.h>
#include <drivers/shark_keyb26.h>
 
#define NCAB 4 /* max number of CABs */
#define NCAR 26 /* generated characters */
 
#define YP 32 /* level of arrows */
#define R 20 /* task radius */
#define YY (YP+R+32) /* level of writing */
#define DELTA (2*R+72) /* total channel hight */
#define X1 120 /* start column for P1 */
#define X2 360 /* start column for P2 */
 
#define XP1 (X1+64) /* X position of task 1 */
#define XP2 (X2+64) /* X position of task 2 */
#define XC (XP1+96) /* X position of CAB */
#define L 52 /* CAB rectangle length */
 
void my_exit(KEY_EVT *k);
void draw_channel(int i);
void create_channel(int i);
void get_data();
 
TASK producer(void *arg);
TASK consumer(void *arg);
 
char *cname[NCAB] = {"cab1", "cab2", "cab3", "cab4"};
char *pname1[NCAB] = {"wr1", "wr2", "wr3", "wr4"};
char *pname2[NCAB] = {"rd1", "rd2", "rd3", "rd4"};
 
CAB cid[NCAB]; /* CAB identifiers */
PID p1[NCAB], p2[NCAB]; /* task identifiers */
 
/* Task Periods */
TIME t1[NCAB] = {200000, 100000, 300000, 800000};
TIME t2[NCAB] = {400000, 400000, 150000, 200000};
 
/* Task WCETS */
TIME w1[NCAB] = {10000, 10000, 10000, 10000};
TIME w2[NCAB] = {10000, 10000, 10000, 10000};
 
/****************************************************************/
 
/* This function is called when Alt-X is pressed.
*/
void my_end(KEY_EVT* e)
{
sys_end();
}
 
/******************************************************************/
 
/* This function is called when the system exit correctly after Alt-X.
It exits from the graphic mode and then it prints a small greeting.
Note that:
- The function calls grx_exit, so it must be registered using
RUNLEVEL_BEFORE_EXIT (RUNLEVEL_AFTER_EXIT does not work because
at that point the kernel is already returned in real mode!!!)
- When an exception is raised, the exception handler is called.
Since the exception handler already exits from the graphic mode,
this funcion has not to be called. For this reason:
. we registered byebye using the flag NO_AT_ABORT
. the exception handler exits using sys_abort; in that way byebye is
NOT called
*/
 
/*--------------------------------------------------------------*/
/* Main task */
/*--------------------------------------------------------------*/
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
{
char c = 0; /* character from keyboard */
 
grx_clear(BLACK);
 
grx_text("Press a key [1-4]", 10, 16, rgb16(255,255,255), 0);
grx_text("to create a pair", 10, 24, rgb16(255,255,255), 0);
grx_text("ESC to exit demo", 10, 48, rgb16(255,255,255), 0);
 
while (c != 27) {
c = keyb_getch(BLOCK);
if ((c >= '1') && (c <= '1'+NCAB-1))
create_channel(c-'1');
}
sys_end();
 
return 0;
}
 
 
/*--------------------------------------------------------------*/
/* write data in a cab */
/*--------------------------------------------------------------*/
 
TASK producer(void *arg)
{
int i = (int)arg;
char c; /* message character */
char *p; /* pointer to a cab buffer */
char s[2]; /* string to display */
int k = 0;
int x, y;
int col = rgb16(0,0,255);
int ybase = YY + i*DELTA;
 
x = X1;
y = ybase;
s[1] = 0;
 
k = 0;
while (1) {
c = 'A' + k;
p = cab_reserve(cid[i]);
*p = c;
cab_putmes(cid[i], p);
 
s[0] = c;
k = (k + 1) % NCAR;
grx_text(s,x,y,col,0);
 
x += 8;
if (x >= (X1 + NCAR*8)) {
x = X1;
y = y + 8;
if (y >= ybase+16) {
y = ybase;
}
}
 
task_endcycle();
}
}
 
/*--------------------------------------------------------------*/
/* read data from a cab */
/*--------------------------------------------------------------*/
 
TASK consumer(void *arg)
{
int i = (int)arg;
char *p;
char s[2];
int x, y;
int col = 13;
int ybase = YY + i*DELTA;
 
x = X2;
y = ybase;
s[1] = 0;
 
while (1) {
p = cab_getmes(cid[i]);
s[0] = *p - 'A' + 'a';
cab_unget(cid[i], p);
 
grx_text(s,x,y,col,0);
x += 8;
 
if (x >= (X2 + NCAR*8)) {
x = X2;
y = y + 8;
if (y >= ybase+16) {
y = ybase;
col = col % 15 + 1;
}
}
task_endcycle();
}
}
 
/*--------------------------------------------------------------*/
/* create the two tasks and a channel */
/*--------------------------------------------------------------*/
 
void create_channel(int i)
{
HARD_TASK_MODEL m;
 
draw_channel(i);
cid[i] = cab_create(cname[i], 1, 2);
 
hard_task_default_model(m);
hard_task_def_ctrl_jet (m);
hard_task_def_arg (m, (void *)i);
hard_task_def_wcet (m, w1[i]);
hard_task_def_mit (m, t1[i]);
hard_task_def_usemath (m);
p1[i] = task_create(pname1[i], producer, &m, NULL);
if (p1[i] == NIL) {
sys_shutdown_message("Could not create task <producer>");
sys_end();
return;
}
task_activate(p1[i]);
 
hard_task_default_model(m);
hard_task_def_ctrl_jet (m);
hard_task_def_arg (m, (void *)i);
hard_task_def_wcet (m, w2[i]);
hard_task_def_mit (m, t2[i]);
hard_task_def_usemath (m);
p2[i] = task_create(pname2[i], consumer, &m, NULL);
if (p2[i] == NIL) {
sys_shutdown_message("Could not create task <consumer>");
sys_end();
return;
}
task_activate(p2[i]);
}
 
/*--------------------------------------------------------------*/
/* Disegna i processi e il canale di comunicazione */
/*--------------------------------------------------------------*/
 
void draw_channel(int i)
{
char buffer[32]; /* buffer per sprintf */
int yc = YP + i*DELTA; /* altezza del canale */
 
grx_circle(XP1,yc,R,rgb16(255,0,0));
grx_text("P1",XP1-8,yc-4,rgb16(255,255,255),0);
 
grx_circle(XP2,yc,R,rgb16(255,0,0));
grx_text("P2",XP2-8,yc-4,rgb16(255,255,255),0);
 
grx_rect(XC,yc-R,XC+L,yc+R,rgb16(255,255,255));
grx_text("CAB",XC+16,yc-4,rgb16(255,255,255),0);
 
grx_line(XP1+R,yc,XC,yc,rgb16(255,255,255));
grx_line(XC+L,yc,XP2-R,yc,rgb16(255,255,255));
 
grx_text("T1 = ms",X1+40,yc+R+16,rgb16(255,255,255),0);
sprintf(buffer,"%ld", t1[i]);
grx_text(buffer,X1+88,yc+R+16,rgb16(255,255,255),0);
 
grx_text("T2 = ms",X2+40,yc+R+16,rgb16(255,255,255),0);
sprintf(buffer,"%ld", t2[i]);
grx_text(buffer,X2+88,yc+R+16,rgb16(255,255,255),0);
}
/demos/tags/rel_1_4/base/aster6.c
0,0 → 1,447
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai, Gerardo Lamastra and Giuseppe Lipari
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster6.c,v 1.5 2004-04-21 14:55:05 giacomo Exp $
 
this is a part of the classic Hartik demo Aster.
 
it is based on test 17 (h), and the JobControl Task uses an
SOFT_TASK_MODEL served by a polling server
 
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
 
#include <drivers/shark_keyb26.h>
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
#define PER_MAX 5
#define APER_MAX 8
 
#define PER_WCET 6200
#define APER_WCET 18400
#define JET_WCET 10000
 
#define APER_REP 22000
 
PID aper_table[APER_MAX];
 
mutex_t m1;
 
 
#define PIMUTEX
//#define NPPMUTEX
//#define NOPMUTEX
 
//#define LONGSC
 
#ifdef LONGSC
#define SOFT_MET 3000 /* 12000 */
#define CLOCK_WCET 200 /* 300*/
#define ASTER_WCET 200 /* 300*/
#else
#define SOFT_MET 80000 /* 4500 */
#define CLOCK_WCET 2000 /* 200*/
#define ASTER_WCET 2000 /* 200*/
#endif
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
#ifdef LONGSC
mutex_unlock(&m1);
#endif
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
//num_aster--;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = c;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
}
 
TASK soft_aster(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 1000 + rand()%9000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = 1;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
num_aster--;
return 0;
}
 
TASK aster()
{
PID p;
 
// HARD_TASK_MODEL m;
SOFT_TASK_MODEL m_soft;
int r;
int x; // adaptive bandwidth...
 
srand(7);
 
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,SOFT_MET);
soft_task_def_ctrl_jet(m_soft);
 
x = 128; //64;
 
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
soft_task_def_period(m_soft, (x+r)*1000);
p = task_create("aaa",soft_aster,&m_soft,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
mutex_unlock(&m1);
}
else {
num_aster++;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
mutex_unlock(&m1);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(3));
 
mutex_unlock(&m1);
 
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(3));
mutex_unlock(&m1);
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
mutex_lock(&m1);
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
mutex_unlock(&m1);
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
(proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
(proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
mutex_lock(&m1);
if (proc_table[p].task_level == 3)
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
else
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, sum/(nact==0 ? 1 : nact), max, nact, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , last[3], last[4]);
mutex_unlock(&m1);
i++;
}
}
}
 
void fine(KEY_EVT *e)
{
 
sys_end();
 
}
 
int main(int argc, char **argv)
{
PID p1,p2,p3; //,p4,p5,p6;
HARD_TASK_MODEL m;
// NRT_TASK_MODEL m_nrt;
SOFT_TASK_MODEL m_aper;
SOFT_TASK_MODEL m_soft;
// int i;
struct timespec fineprg;
 
#ifdef PIMUTEX
PI_mutexattr_t a;
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_t a;
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_t a;
#endif
 
KEY_EVT emerg;
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
emerg.status = KEY_PRESSED;
keyb_hook(emerg,fine,FALSE);
 
clear();
 
hard_task_default_model(m);
hard_task_def_mit(m,100000);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
// nrt_task_default_model(m_nrt);
// nrt_task_def_group(m_nrt,1);
// nrt_task_def_ctrl_jet(m_nrt);
 
 
soft_task_default_model(m_aper);
soft_task_def_group(m_aper,1);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_aperiodic(m_aper);
 
soft_task_default_model(m_soft);
soft_task_def_period(m_soft,100000);
soft_task_def_met(m_soft,JET_WCET);
soft_task_def_group(m_soft,1);
soft_task_def_ctrl_jet(m_soft);
soft_task_def_aperiodic(m_soft);
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
return 0;
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
return 0;
}
 
// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
if (p3 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
return 0;
}
 
task_nopreempt();
 
#ifdef PIMUTEX
PI_mutexattr_default(a);
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_default(a);
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_default(a);
#endif
 
mutex_init(&m1, &a);
 
fineprg.tv_sec = 20;
fineprg.tv_nsec = 0;
kern_event_post(&fineprg,(void (*)(void *))fine,NULL);
group_activate(1);
 
return 0;
}
 
/demos/tags/rel_1_4/base/aster7.c
0,0 → 1,315
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai, Massimiliano Giorgi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster7.c,v 1.4 2004-04-21 14:55:05 giacomo Exp $
 
this is a part of the classic Hartik demo Aster.
 
it is based on test 10(A), and test the PS with RM.
 
The JetControl is served by a dedicated Polling Server, too.
 
There are APER_MAX tasks sleeping, and when an asteroide task finish
the current activation, it activate also an aperiodic task chosen
randomly (if the task chosen is already active, the task_activate do
nothing!)
 
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
#define APER_MAX 8
 
/* Pentium 133 / Celeron 366 */
#define PER_WCET 25000 /* 7800 */
#define APER_WCET 5500 /* 1400 */
#define CLOCK_WCET 500 /* 200 */
#define ASTER_WCET 500 /* 200 */
 
#define APER_REP 2200
 
PID aper_table[APER_MAX];
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
num_aster--;
return 0;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
s[0] = c;
puts_xy(i,y,rand()%15+1,s);
 
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
}
 
TASK aster()
{
PID p;
 
HARD_TASK_MODEL m;
int r;
int x; // adaptive bandwidth...
 
hard_task_default_model(m);
hard_task_def_wcet(m,PER_WCET);
hard_task_def_ctrl_jet(m);
 
x = 200;
 
srand(7);
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
hard_task_def_arg(m,(void *)((rand() % 7)+1));
hard_task_def_mit(m, (x+r)*1000);
p = task_create("aaa",asteroide,&m,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
}
else {
num_aster++;
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
kern_cli();
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
kern_sti();
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
kern_cli();
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
kern_sti();
i++;
}
}
}
 
 
void fine(KEY_EVT *e)
{
sys_end();
}
 
 
int main(int argc, char **argv)
{
PID p1,p2,p3; //,p4,p5,p6;
HARD_TASK_MODEL m;
NRT_TASK_MODEL m_nrt;
SOFT_TASK_MODEL m_aper;
int i;
 
KEY_EVT emerg;
 
clear();
 
cprintf("Press Alt-x to end the demo...");
 
//keyb_set_map(itaMap);
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
emerg.status = KEY_PRESSED;
keyb_hook(emerg,fine,FALSE);
 
hard_task_default_model(m);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_mit(m,10000);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
nrt_task_default_model(m_nrt);
nrt_task_def_group(m_nrt,1);
nrt_task_def_ctrl_jet(m_nrt);
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
return 0;
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
return 0;
}
 
soft_task_default_model(m_aper);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_level(m_aper, 2);
soft_task_def_group(m_aper,1);
soft_task_def_aperiodic(m_aper);
p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
if (p3 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
return 0;
}
 
soft_task_def_wcet(m_aper,APER_WCET);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_aperiodic(m_aper);
 
for (i=0; i<APER_MAX; i++) {
soft_task_def_level(m_aper, i/4 + 4);
soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
if (aper_table[i] == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aper> ...");
sys_end();
return 0;
}
}
 
group_activate(1);
return 0;
}
 
/demos/tags/rel_1_4/base/aster8.c
0,0 → 1,501
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai, Massimiliano Giorgi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster8.c,v 1.4 2004-04-21 14:55:05 giacomo Exp $
 
Test for Sporadic Server (ss):
 
this is a part of the classic Hartik demo Aster.
 
it is based on test 17 (h), and the JobControl Task uses an
SOFT_TASK_MODEL served by a sporadic server
There are two "dummy" tasks that increment a counter and print
the value. One uses a SOFT_TASK_MODEL served by sporadic server,
the other uses a NRT_TASK_MODEL handled by RR module.
 
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/ss.h"
 
#include <drivers/shark_keyb26.h>
 
int num_aster = 0;
#define EDF_LEV 1
#define CBS_LEV 2
#define SS_LEV 3
 
#define ASTER_LIM 60
#define DISPLAY_MAX 8
#define ASTER_MAX 70
#define STAT_Y 9
 
#define PER_MAX 5
#define APER_MAX 8
 
#define PER_WCET 16000
#define APER_WCET 22000
#define JET_WCET 20000
 
#define APER_REP 22000
 
PID aper_table[APER_MAX];
 
mutex_t m1;
 
 
#define PIMUTEX
//#define PCMUTEX
//#define NPPMUTEX
//#define NOPMUTEX
 
#define LONGSC
 
#ifdef LONGSC
#define SOFT_MET 12000 /* 12000 */
#define CLOCK_WCET 300 /* 300*/
#define ASTER_WCET 300 /* 300*/
#else
#define SOFT_MET 5000 /* 4500 */
#define CLOCK_WCET 2000 /* 200*/
#define ASTER_WCET 2000 /* 200*/
#endif
 
PID p1,p2,p3,p4,p5;
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
#ifdef LONGSC
mutex_unlock(&m1);
#endif
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
//num_aster--;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = c;
#ifndef LONGSC
mutex_unlock(&m1);
#endif
mutex_lock(&m1);
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
}
 
TASK soft_aster(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 1000 + rand()%9000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = 1;
#ifndef LONGSC
mutex_lock(&m1);
#endif
//mutex_lock(&m1);
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
num_aster--;
return 0;
}
 
TASK aster()
{
PID p;
 
SOFT_TASK_MODEL m_soft;
int r;
int x; // adaptive bandwidth...
 
srand(7);
 
 
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,SOFT_MET);
soft_task_def_ctrl_jet(m_soft);
 
x = 128; //64;
 
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
soft_task_def_period(m_soft, (x+r)*1000);
p = task_create("aaa",soft_aster,&m_soft,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc), errno);
mutex_unlock(&m1);
}
else {
num_aster++;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u ",x);
mutex_unlock(&m1);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(EDF_LEV));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(CBS_LEV));
printf_xy(62,5,WHITE,"CSss=%6d",SS_availCs(SS_LEV));
mutex_unlock(&m1);
 
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(EDF_LEV));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(CBS_LEV));
printf_xy(62,5,WHITE,"CSss=%6d",SS_availCs(SS_LEV));
mutex_unlock(&m1);
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
mutex_lock(&m1);
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
mutex_unlock(&m1);
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
(proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
(proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
mutex_lock(&m1);
if (proc_table[p].task_level == 2)
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
else
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, sum/(nact==0 ? 1 : nact), max, nact, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , last[3], last[4]);
mutex_unlock(&m1);
i++;
task_activate(p3);
task_endcycle();
}
}
}
 
void fine(KEY_EVT *e)
{
 
sys_end();
 
}
 
void mydummyaper(void) {
int i=0;
while(1) {
mutex_lock(&m1);
printf_xy(1,24,RED,"dummyAPER pid=%d: %d",p4,i++);
mutex_unlock(&m1);
task_activate(p4);
task_endcycle();
}
}
 
void mydummynrt(void) {
int i=0;
while(1) {
mutex_lock(&m1);
printf_xy(40,24,RED,"dummyNRT pid=%d: %d",p5,i++);
mutex_unlock(&m1);
}
}
 
int main(int argc, char **argv)
{
// PID p1,p2,p5;
HARD_TASK_MODEL m;
NRT_TASK_MODEL m_nrt;
SOFT_TASK_MODEL m_aper;
SOFT_TASK_MODEL m_soft;
 
#ifdef PIMUTEX
PI_mutexattr_t a;
#endif
 
#ifdef PCMUTEX
PC_mutexattr_t a;
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_t a;
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_t a;
#endif
 
 
KEY_EVT emerg;
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
emerg.status = KEY_PRESSED;
keyb_hook(emerg,fine,FALSE);
 
clear();
 
cprintf("Press Alt-x to end the demo...");
 
hard_task_default_model(m);
hard_task_def_mit(m,100000);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
nrt_task_default_model(m_nrt);
nrt_task_def_group(m_nrt,1);
nrt_task_def_ctrl_jet(m_nrt);
 
soft_task_default_model(m_aper);
soft_task_def_group(m_aper,1);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_aperiodic(m_aper);
 
soft_task_default_model(m_soft);
soft_task_def_period(m_soft,10000);
soft_task_def_met(m_soft,JET_WCET);
soft_task_def_group(m_soft,1);
soft_task_def_ctrl_jet(m_soft);
soft_task_def_aperiodic(m_soft);
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
return 0;
}
 
hard_task_def_mit(m,50000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
return 0;
}
 
p3 = task_create("JetControl",jetcontrol,&m_aper,NULL);
if (p3 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
return 0;
}
 
p4 = task_create("MyDummyAper",(void *(*)(void*))mydummyaper,&m_aper,NULL);
if (p4 == -1) {
sys_shutdown_message("Could not create task <MyDummyAper> ...");
sys_end();
return 0;
}
 
p5 = task_create("MyDummyNRT",(void *(*)(void*))mydummynrt,&m_nrt,NULL);
if (p5 == -1) {
sys_shutdown_message("Could not create task <MyDummyNRT> ...");
sys_end();
return 0;
}
 
#ifdef PIMUTEX
PI_mutexattr_default(a);
#endif
 
#ifdef PCMUTEX
PC_mutexattr_default(a);
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_default(a);
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_default(a);
#endif
 
mutex_init(&m1, &a);
 
group_activate(1);
return 0;
}
 
/demos/tags/rel_1_4/base/pcidemo.c
0,0 → 1,45
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "unistd.h"
 
int main (int argc, char *argv[])
{
 
cprintf("Init Done...\n");
 
sleep(5);
return 0;
 
}
/demos/tags/rel_1_4/base/aster2.c
0,0 → 1,241
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster2.c,v 1.4 2004-04-19 14:48:04 giacomo Exp $
 
this is a part of the classic Hartik demo Aster.
 
It checks:
- jet functions
- The EDF level with many task, with almost full bandwidth used
 
*/
 
 
#include "kernel/kern.h"
#include "modules/edf.h"
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
// first numbers for wcet and periods are for a 486/25, the others for a
// celeron 366
 
#define PER_WCET 13000 /*6200*/
#define CLOCK_WCET 1200 /* 100*/
#define ASTER_WCET 1200 /* 100*/
 
#define ASTER_MEAN_PERIOD 64 /*64*/
 
#define END_TEST_TIME 60
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 1000; //10000; // 5000 + rand()%5000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
 
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
num_aster--;
return 0;
}
 
TASK aster()
{
PID p;
 
HARD_TASK_MODEL m;
int r;
int x; // adaptive bandwidth...
 
hard_task_default_model(m);
hard_task_def_wcet(m,PER_WCET);
hard_task_def_ctrl_jet(m);
 
x = ASTER_MEAN_PERIOD;
 
srand(7);
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
hard_task_def_arg(m,(void *)((rand() % 7)+1));
hard_task_def_mit(m, (x+r)*1000);
p = task_create("aaa",asteroide,&m,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
}
else {
num_aster++;
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
kern_cli();
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
kern_sti();
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
kern_cli();
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
kern_sti();
i++;
}
}
}
 
int main(int argc, char **argv)
{
PID p1,p2,p3; //,p4,p5,p6;
HARD_TASK_MODEL m;
NRT_TASK_MODEL m_nrt;
struct timespec t;
 
clear();
 
hard_task_default_model(m);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_mit(m,10000);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
nrt_task_default_model(m_nrt);
nrt_task_def_group(m_nrt,1);
nrt_task_def_ctrl_jet(m_nrt);
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
}
 
p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
}
 
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < END_TEST_TIME);
 
sys_end();
 
return 0;
}
 
 
 
 
/demos/tags/rel_1_4/base/aster3.c
0,0 → 1,300
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster3.c,v 1.5 2004-04-19 14:48:04 giacomo Exp $
 
Test Number 10 (A):
 
this is a part of the classic Hartik demo Aster.
 
it is based on aster2.c, with the use of TBS to serve a set of aperiodic
tasks.
 
There are APER_MAX tasks sleeping, and when an asteroide task finish
the current activation, it activate also an aperiodic task chosen
randomly (if the task chosen is already active, the task_activate do
nothing!)
 
 
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
#define APER_MAX 8
 
/* first numbers runs on a pentium 133, second numbers on a celeron 366 */
#define PER_WCET 30000 /* 6200 */
#define APER_WCET 50000 /* 18400 */
#define CLOCK_WCET 1000 /* 200 */
#define ASTER_WCET 1000 /* 200 */
#define MIN_PERIOD 200 /* 64, in ms */
 
#define APER_REP 22000
 
PID aper_table[APER_MAX];
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
num_aster--;
return 0;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
s[0] = c;
puts_xy(i,y,rand()%15+1,s);
 
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
}
 
TASK aster()
{
PID p;
 
HARD_TASK_MODEL m;
int r;
int x; // adaptive bandwidth...
 
hard_task_default_model(m);
hard_task_def_wcet(m,PER_WCET);
hard_task_def_ctrl_jet(m);
 
x = MIN_PERIOD;
 
srand(7);
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
hard_task_def_arg(m,(void *)((rand() % 7)+1));
hard_task_def_mit(m, (x+r)*1000);
p = task_create("aaa",asteroide,&m,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
}
else {
num_aster++;
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"U=%12u",EDF_usedbandwidth(1));
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
kern_cli();
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
kern_sti();
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
kern_cli();
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, (int)nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
kern_sti();
i++;
}
task_endcycle();
}
}
 
int main(int argc, char **argv)
{
PID p1,p2;//,p3,p4,p5,p6;
HARD_TASK_MODEL m;
NRT_TASK_MODEL m_nrt;
SOFT_TASK_MODEL m_aper;
int i;
 
clear();
 
hard_task_default_model(m);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_mit(m,10000);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
nrt_task_default_model(m_nrt);
nrt_task_def_group(m_nrt,1);
nrt_task_def_ctrl_jet(m_nrt);
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
}
 
soft_task_default_model(m_aper);
soft_task_def_wcet(m_aper,APER_WCET);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_aperiodic(m_aper);
 
soft_task_def_level(m_aper, 3);
aper_table[0] = task_create("JetControl",jetcontrol,&m_aper,NULL);
if (aper_table[0] == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
}
 
for (i=1; i<APER_MAX; i++) {
soft_task_def_level(m_aper, i/4 + 3);
soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
if (aper_table[i] == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aper> ...");
sys_end();
}
}
 
 
group_activate(1);
 
{
struct timespec t;
do {
sys_gettime(&t);
} while (t.tv_sec < 60);
}
 
sys_end();
return 0;
}
 
/demos/tags/rel_1_4/base/aster4.c
0,0 → 1,389
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster4.c,v 1.3 2004-04-19 14:48:04 giacomo Exp $
 
Test Number 13 (D):
 
this is a part of the classic Hartik demo Aster, and it is based on aster 3.
 
The demo creates:
- a set of TBS tasks assigned to 2 TBS servers initialized with different bandwidth.
 
- a set of periodic tasks, just to make noise (function asteroide)
 
- a set of CBS tasks that are created to fill the available free
bandwidth (function soft_aster)
 
- a few service task (the one that creates the CBS tasks (aster), a clock,
JET info visualization
 
- a set of never ending "system tasks" that simulate a device driver
task that will end only at shutdown (function aper_asteroid)
 
- a keyboard task that will execute an hook to terminate the system
 
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
#define PER_MAX 5
#define APER_MAX 8
 
// These numbers works on a Pentium 133 */
#define PER_WCET 25000
#define APER_WCET 53000
#define CLOCK_WCET 1000
#define ASTER_WCET 1000
#define SOFT_MET 6300
 
#define APER_REP 22000
 
PID aper_table[APER_MAX];
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
//num_aster--;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
s[0] = c;
puts_xy(i,y,rand()%15+1,s);
 
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
}
}
 
TASK soft_aster(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
i = 1;
while (i < ASTER_LIM) {
load1 = 1000 + rand()%9000;
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
puts_xy(i,y,rand()%15+1,s);
}
s[0] = 1;
puts_xy(i,y,rand()%15+1,s);
 
task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
num_aster--;
return 0;
}
 
TASK aster()
{
PID p;
 
HARD_TASK_MODEL m;
SOFT_TASK_MODEL m_soft;
int r;
int x; // adaptive bandwidth...
 
srand(7);
 
/* create a set of periodic tasks, just to make noise */
hard_task_default_model(m);
hard_task_def_wcet(m,PER_WCET);
hard_task_def_ctrl_jet(m);
for (x=0; x<PER_MAX; x++) {
r = (rand() % 200);
hard_task_def_mit(m, (64+r)*1000);
p = task_create("per",asteroide,&m,NULL);
if (p!=-1) task_activate(p);
}
 
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,SOFT_MET);
soft_task_def_ctrl_jet(m_soft);
 
x = 64;
 
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
soft_task_def_period(m_soft, (x+r)*1000);
p = task_create("aaa",soft_aster,&m_soft,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
}
else {
num_aster++;
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(5));
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(5));
task_endcycle();
}
}
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
kern_cli();
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
kern_sti();
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 ||
(proc_table[p].pclass & 0xFF00) == HARD_PCLASS) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
kern_cli();
if (proc_table[p].task_level == 5)
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(4,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
else
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
kern_sti();
i++;
}
}
}
 
void endfun(KEY_EVT *k)
{
sys_end();
}
 
int main(int argc, char **argv)
{
KEY_EVT k;
 
PID p1,p2,p3;
HARD_TASK_MODEL m;
SOFT_TASK_MODEL m_aper;
SOFT_TASK_MODEL m_soft;
int i;
 
k.flag = 0;
k.scan = KEY_ENT;
k.ascii = 13;
k.status = KEY_PRESSED;
keyb_hook(k, endfun, FALSE);
 
clear();
cprintf("Press ENTER to end the demo...");
hard_task_default_model(m);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_mit(m,10000);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,1000);
soft_task_def_period(m_soft,100000);
soft_task_def_group(m_soft,1);
soft_task_def_ctrl_jet(m_soft);
soft_task_def_aperiodic(m_soft);
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("aster4.c(main): Could not create task <aster> ...");
sys_end();
return 0;
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("aster4.c(main): Could not create task <Clock> ...");
sys_end();
return 0;
}
 
p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
if (p3 == -1) {
sys_shutdown_message("aster4.c(main): Could not create task <JetControl> ...");
sys_end();
return 0;
}
 
soft_task_default_model(m_aper);
soft_task_def_wcet(m_aper,APER_WCET);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_system(m_aper);
soft_task_def_aperiodic(m_aper);
 
for (i=0; i<APER_MAX; i++) {
soft_task_def_level(m_aper, i/4 + 3);
soft_task_def_arg(m_aper, (void *)(i/4 ? 'Û' : '±'));
aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
if (aper_table[i] == -1) {
sys_shutdown_message("aster4.c(main): Could not create task <aper> ...");
sys_end();
return 0;
}
}
 
group_activate(1);
return 0;
}
 
/demos/tags/rel_1_4/base/aster5.c
0,0 → 1,477
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai, Gerardo Lamastra and Giuseppe Lipari
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster5.c,v 1.4 2004-04-19 14:48:04 giacomo Exp $
 
this is a part of the classic Hartik demo Aster.
 
it is based on test 13 (d), and use the CBS to serve the periodic tasks.
 
There are not periodic tasks, only CBS tasks.
 
The tasks use a PI, NPP or NOP mutex to access the video memory.
 
A flag (LONGSC) is provided to try long and short critical sections.
 
This demo is really interesting because you can note the behavior of
the system, and the differences between the various protocols...
 
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
 
#include <drivers/shark_keyb26.h>
 
int num_aster = 0;
#define ASTER_LIM 60
#define DISPLAY_MAX 15
#define ASTER_MAX 70
#define STAT_Y 9
 
#define PER_MAX 5
#define APER_MAX 8
 
#define PER_WCET 6200
#define APER_WCET 18400
#define JET_WCET 10000
#define JET_PERIOD 100000
 
#define APER_REP 22000
 
//PID aper_table[APER_MAX];
 
mutex_t m1;
 
 
#define PIMUTEX
//#define NPPMUTEX
//#define NOPMUTEX
 
#define LONGSC
 
#ifdef LONGSC
#define SOFT_MET 3000 /* 3000 12000 */
#define CLOCK_WCET 400 /* 200 300*/
#define ASTER_WCET 400 /* 200 300*/
#else
#define SOFT_MET 80000 /* 4500 */
#define CLOCK_WCET 2000 /* 200*/
#define ASTER_WCET 2000 /* 200*/
#endif
 
TASK asteroide(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = 10000; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
#ifdef LONGSC
mutex_unlock(&m1);
#endif
 
// task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
//num_aster--;
}
 
TASK aper_asteroid(void *a)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
int c;
 
char s[2];
 
c = (int)a;
s[0] = '*'; s[1] = 0;
 
for (;;) {
i = 1;
while (i < ASTER_LIM) {
load1 = APER_REP; //8000 + rand()%2000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = c;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
}
 
TASK soft_aster(void)
{
int i;
int y = rand() % 7 + 1;
 
int load1,j;
 
char s[2];
 
s[0] = '*'; s[1] = 0;
 
/*for (;;)*/ {
i = 1;
while (i < ASTER_LIM) {
load1 = 1000 + rand()%9000;
#ifdef LONGSC
mutex_lock(&m1);
#endif
for (j=0; j<load1; j++) {
s[0] = '*' + rand() % 100;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
#ifndef LONGSC
mutex_unlock(&m1);
#endif
}
s[0] = 1;
#ifndef LONGSC
mutex_lock(&m1);
#endif
puts_xy(i,y,rand()%15+1,s);
mutex_unlock(&m1);
 
// task_activate(aper_table[rand()%APER_MAX]);
task_endcycle();
 
mutex_lock(&m1);
puts_xy(i,y,WHITE," ");
mutex_unlock(&m1);
i++;
}
}
num_aster--;
return 0;
}
 
TASK aster()
{
PID p;
// HARD_TASK_MODEL m;
SOFT_TASK_MODEL m_soft;
int r;
int x; // adaptive bandwidth...
 
srand(7);
 
/* periodic_task_default_model(m,0,PER_WCET);
periodic_task_def_ctrl_jet(m);
for (x=0; x<PER_MAX; x++) {
r = (rand() % 200);
periodic_task_def_period(m, (64+r)*1000);
p = task_create("per",asteroide,&m,NULL);
if (p!=-1) task_activate(p);
}
*/
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,SOFT_MET);
soft_task_def_ctrl_jet(m_soft);
 
x = 128; //64;
 
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 200);
 
soft_task_def_period(m_soft, (x+r)*1000);
p = task_create("aaa",soft_aster,&m_soft,NULL);
if (p == -1)
{
if (x < 500 && errno != ENO_AVAIL_TASK) x += 1;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u err=%d",
iq_query_first(&freedesc),errno);
mutex_unlock(&m1);
}
else {
num_aster++;
mutex_lock(&m1);
printf_xy(62,3,WHITE,"adapt=%3u ",x);//,errno);
mutex_unlock(&m1);
 
task_activate(p);
x /= 2;
if (x<50) x = 50;
}
}
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
 
mutex_unlock(&m1);
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
mutex_lock(&m1);
printf_xy(62,1,WHITE,"%2d:%2d ast=%d",m,s, num_aster);
printf_xy(62,2,WHITE,"Uedf=%12u",EDF_usedbandwidth(1));
printf_xy(62,4,WHITE,"Ucbs=%12u",CBS_usedbandwidth(2));
mutex_unlock(&m1);
task_endcycle();
}
}
 
 
 
/* we consider the first ASTER_MAX + 2 tasks from the PID 2
and plot on the screen the elapsed times... */
TASK jetcontrol()
{
int i; /* a counter */
TIME sum, max, curr, last[5];
int nact;
int j; /* the elements set by jet_gettable */
PID p;
 
 
mutex_lock(&m1);
printf_xy(0,STAT_Y,WHITE,"PID ³ Mean T.³ Max T. ³ N.A. ³ Curr. ³ Last1 ³ Last2 ³ Last3 ³ Last4 ³ Last5");
mutex_unlock(&m1);
 
for (;;) {
for (i=0,p=0; i<DISPLAY_MAX+5 && p<MAX_PROC; p++) {
if (jet_getstat(p, &sum, &max, &nact, &curr) == -1 /*||
(proc_table[p].pclass & 0xFF00) == APERIODIC_PCLASS ||
(proc_table[p].pclass & 0xFF00) == PERIODIC_PCLASS*/ ) continue;
 
for (j=0; j<5; j++) last[j] = 0;
jet_gettable(p, &last[0], 5);
mutex_lock(&m1);
if (proc_table[p].task_level == 2)
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³p%-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)CBS_get_nact(2,p), (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, sum/(nact==0 ? 1 : nact), max, proc_table[p].avail_time, proc_table[p].status, proc_table[p].shadow, proc_table[p].timespec_priority.tv_sec,proc_table[p].timespec_priority.tv_nsec/1000 , CBS_get_nact(2,p), last[4]);
else
printf_xy(0,STAT_Y+i+1,WHITE,"%-3d ³ %-6d ³ %-6d ³ %-4d ³ %-7d ³ %-5d ³ %-5d ³ %-5d ³ %-5d ³ %-5d",
p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)curr, (int)last[0], (int)last[1], (int)last[2], (int)last[3], (int)last[4]);
// p, (int)sum/(nact==0 ? 1 : nact), (int)max, nact, (int)proc_table[p].status, (int)proc_table[p].shadow, (int)proc_table[p].timespec_priority.tv_sec,(int)proc_table[p].timespec_priority.tv_nsec/1000 , (int)last[3], (int)last[4]);
mutex_unlock(&m1);
i++;
}
}
}
 
void fine(KEY_EVT *e)
{
sys_end();
}
 
int main(int argc, char **argv)
{
PID p1,p2,p3;//,p4,p5,p6;
HARD_TASK_MODEL m;
// NRT_TASK_MODEL m_nrt;
SOFT_TASK_MODEL m_aper;
SOFT_TASK_MODEL m_soft;
// int i;
struct timespec fineprg;
 
#ifdef PIMUTEX
PI_mutexattr_t a;
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_t a;
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_t a;
#endif
 
KEY_EVT emerg;
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
emerg.status = KEY_PRESSED;
keyb_hook(emerg,fine,FALSE);
 
clear();
 
hard_task_default_model(m);
hard_task_def_wcet(m,ASTER_WCET);
hard_task_def_mit(m,100000);
hard_task_def_group(m,1);
hard_task_def_ctrl_jet(m);
 
// nrt_task_default_model(m_nrt);
// nrt_task_def_group(m_nrt,1);
// nrt_task_def_ctrl_jet(m_nrt);
 
 
soft_task_default_model(m_aper);
soft_task_def_group(m_aper,1);
soft_task_def_ctrl_jet(m_aper);
soft_task_def_aperiodic(m_aper);
 
soft_task_default_model(m_soft);
soft_task_def_period(m_soft,JET_PERIOD);
soft_task_def_met(m_soft,JET_WCET);
soft_task_def_group(m_soft,1);
soft_task_def_ctrl_jet(m_soft);
soft_task_def_aperiodic(m_soft);
 
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <aster> ...");
sys_end();
return 0;
}
 
hard_task_def_mit(m,500000);
hard_task_def_wcet(m,CLOCK_WCET);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <Clock> ...");
sys_end();
return 0;
}
 
// p3 = task_create("JetControl",jetcontrol,&m_nrt,NULL);
p3 = task_create("JetControl",jetcontrol,&m_soft,NULL);
if (p2 == -1) {
sys_shutdown_message("test7.c(main): Could not create task <JetControl> ...");
sys_end();
return 0;
}
/*
aperiodic_task_default_model(m_aper,APER_WCET);
aperiodic_task_def_ctrl_jet(m_aper);
aperiodic_task_def_system(m_aper);
 
for (i=0; i<APER_MAX; i++) {
aperiodic_task_def_level(m_aper, i/4 + 2);
aperiodic_task_def_arg(m_aper, (i/4 ? 'Û' : '±'));
aper_table[i] = task_create("aper",aper_asteroid,&m_aper,NULL);
if (aper_table[i] == -1) {
perror("test7.c(main): Could not create task <aper> ...");
sys_end();
l1_exit(-1);
}
}
*/
task_nopreempt();
 
#ifdef PIMUTEX
PI_mutexattr_default(a);
#endif
 
#ifdef NPPMUTEX
NPP_mutexattr_default(a);
#endif
 
#ifdef NOPMUTEX
NOP_mutexattr_default(a);
#endif
 
mutex_init(&m1, &a);
 
fineprg.tv_sec = 1800;
fineprg.tv_nsec = 0;
group_activate(1);
return 0;
}
 
/demos/tags/rel_1_4/base/imdemo.c
0,0 → 1,102
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: imdemo.c,v 1.3 2004-04-19 14:48:05 giacomo Exp $
**/
 
#include "kernel/kern.h"
 
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
#include "modules/pi.h"
#include "modules/pc.h"
#include "modules/srp.h"
#include "modules/npp.h"
#include "modules/nop.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
CBS_register_level(CBS_ENABLE_ALL, 1);
dummy_register_level();
 
SEM_register_module();
 
CABS_register_module();
 
PI_register_module();
PC_register_module();
NPP_register_module();
SRP_register_module();
NOP_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
__call_main__(mb);
 
return (void *)0;
 
}
 
/demos/tags/rel_1_4/base/ego.c
0,0 → 1,203
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: ego.c,v 1.6 2004-04-19 14:48:05 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.6 $
Last update: $Date: 2004-04-19 14:48:05 $
------------
**/
 
/*
* Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
/****************************************************************/
/* PERIODIC PROCESS TEST */
/****************************************************************/
 
#include <kernel/kern.h>
 
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
#define X0 10
 
/* task periods */
#define PERIOD_T1 100000
#define PERIOD_T2 200000
#define PERIOD_T3 300000
 
/* X position of the text printed by each task */
int y[3] = {100, 180, 260};
 
/* text printed by each task */
char talk[3][50] = { "I am ego1 and I print a character every 100 ms",
"I am ego2 and I print a character every 200 ms",
"I am ego3 and I print a character every 300 ms"};
 
/***************************************************************/
 
TASK ego(void *arg)
{
int i = (int)arg;
int leng;
char s[2];
int x;
int j = 0;
 
/* compute the length of the string to print */
leng = 0;
while (talk[i][leng] != 0) leng++;
 
x = X0;
s[1] = 0;
task_endcycle();
 
while (1) {
s[0] = talk[i][j];
grx_text(s,x,y[i],rgb16(255,255,255),0);
x += 8;
if (++j == leng) {
j = 0;
x = X0;
y[i] += 8;
if (y[i]>340) y[i]=100;
}
task_endcycle();
}
}
 
 
/****************************************************************/
 
/* This function is called when Alt-X is pressed.
*/
void my_end(KEY_EVT* e)
{
sys_end();
}
 
/******************************************************************/
 
/* This function is called when the system exit correctly after Alt-X.
It exits from the graphic mode and then it prints a small greeting.
Note that:
- The function calls grx_exit, so it must be registered using
RUNLEVEL_BEFORE_EXIT (RUNLEVEL_AFTER_EXIT does not work because
at that point the kernel is already returned in real mode!!!)
- When an exception is raised, the exception handler is called.
Since the exception handler already exits from the graphic mode,
this funcion has not to be called. For this reason:
. we registered byebye using the flag NO_AT_ABORT
. the exception handler exits using sys_abort; in that way byebye is
NOT called
*/
 
/****************************** MAIN ******************************/
 
int main(int argc, char **argv)
{
PID pid1, pid2, pid3;
KEY_EVT emerg;
HARD_TASK_MODEL m1, m2, m3;
 
/* set the keyboard handler to exit correctly */
emerg.ascii = 'x';
emerg.scan = KEY_X;
emerg.flag = ALTL_BIT;
emerg.status = KEY_PRESSED;
keyb_hook(emerg,my_end,FALSE);
 
/* a small banner */
grx_text("EGO Test",8,8,rgb16(255,255,255),0);
grx_text("Press Alt-X to exit",8,16,rgb16(255,255,255),0);
 
/* ego1 creation */
hard_task_default_model(m1);
hard_task_def_ctrl_jet (m1);
hard_task_def_arg (m1, (void *)0);
hard_task_def_wcet (m1, 5000);
hard_task_def_mit (m1, PERIOD_T1);
hard_task_def_group (m1,1);
pid1 = task_create("ego1", ego, &m1, NULL);
if (pid1 == NIL) {
sys_shutdown_message("Could not create task <ego1>");
sys_end();
return 0;
}
 
/* ego2 creation */
hard_task_default_model(m2);
hard_task_def_ctrl_jet (m2);
hard_task_def_arg (m2, (void *)1);
hard_task_def_wcet (m2, 5000);
hard_task_def_mit (m2, PERIOD_T2);
hard_task_def_group (m2,1);
pid2 = task_create("ego2", ego, &m2, NULL);
if (pid2 == NIL) {
sys_shutdown_message("Could not create task <ego2>");
sys_end();
return 0;
}
 
/* ego3 creation */
hard_task_default_model(m3);
hard_task_def_ctrl_jet (m3);
hard_task_def_arg (m3, (void *)2);
hard_task_def_wcet (m3, 5000);
hard_task_def_mit (m3, PERIOD_T3);
hard_task_def_group (m3,1);
pid3 = task_create("ego3", ego, &m3, NULL);
if (pid3 == NIL) {
sys_shutdown_message("Could not create task <ego3>");
sys_end();
return 0;
}
 
/* and finally we activate the three threads... */
group_activate(1);
 
/*
now the task main ends, but the system does not shutdown because
there are the three task ego1, ego2, and ego3 running.
 
The demo will finish if a Alt-X key is pressed.
*/
 
return 0;
}
 
/****************************************************************/
/demos/tags/rel_1_4/base/preempt.c
0,0 → 1,149
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: preempt.c,v 1.3 2004-04-19 14:48:05 giacomo Exp $
 
CBS test with preemption disabling
 
*/
 
#include "kernel/kern.h"
 
void *periodic(void *arg)
{
int i;
int y = (int)arg;
 
for (i = 19; i < 60; i++) {
puts_xy(i,y,7,"*");
 
task_endcycle();
}
 
cprintf("Periodic: Task %d end.\n", exec_shadow);
 
return 0;
}
 
void *blocker(void *arg)
{
struct timespec t;
 
task_nopreempt();
cprintf("Blocker: Task nopreempt\n");
 
do {
sys_gettime(&t);
} while (t.tv_sec < 5);
 
cprintf("Blocker: Task preempt\n");
task_preempt();
 
cprintf("Blocker: end\n");
 
return 0;
}
 
 
 
int main(int argc, char **argv)
{
struct timespec t;
NRT_TASK_MODEL m;
SOFT_TASK_MODEL m_aper;
PID p;
 
clear();
cprintf("Preemption Test.\n");
cprintf("Start time: two periodic tasks and a blocker are created and activated.\n");
cprintf("2 seconds : blocker calls task_nopreempt.\n");
cprintf("5 seconds : task_preempt is called.\n");
cprintf(" The blocked task exec its pending activations.\n");
cprintf("10 seconds: the test stops.\n");
puts_xy(1,20,7,"save task:");
puts_xy(1,21,7,"skip task:");
 
nrt_task_default_model(m);
 
soft_task_default_model(m_aper);
soft_task_def_met(m_aper,10000);
soft_task_def_period(m_aper,200000);
soft_task_def_group(m_aper,1);
soft_task_def_arg(m_aper, (void *)20);
soft_task_def_periodic(m_aper);
 
p = task_create("save", periodic, &m_aper, NULL);
if (p == NIL)
{
sys_shutdown_message("Can't create save task...\n");
sys_end();
}
 
soft_task_def_skip_arrivals(m_aper);
soft_task_def_arg(m_aper, (void *)21);
 
p = task_create("skip", periodic, &m_aper, NULL);
if (p == NIL)
{
sys_shutdown_message("Can't create skip task...\n");
sys_end();
}
 
p = task_create("blocker", blocker, &m, NULL);
if (p == NIL)
{
sys_shutdown_message("Can't create blocker task...\n");
sys_end();
}
 
cprintf("main : save & skip tasks activated.\n");
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 2);
 
cprintf("main : blocker activated.\n");
task_activate(p);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
 
cprintf("main : End!!!\n");
 
return 0;
}
/demos/tags/rel_1_4/base/initgraph.c
0,0 → 1,198
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 2000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
CABS_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
FB26_init();
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
return 0;
 
}
 
int device_drivers_close() {
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/base/aster.c
0,0 → 1,383
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai, Gerardo Lamastra and Giuseppe Lipari
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster.c,v 1.4 2004-04-18 19:46:29 giacomo Exp $
 
Author: Gerardo Lamastra
Giuseppe Lipari
Date: 1/10/96
 
File: Aster.C
Revision: 1.6
 
*/
 
/*
Well, this is only a stupid demo which intend to show many
HARTIK+ capabilities; the application is structured in the followig
way: there is an ASTER task wich randomly creates some ASTEROID tasks
which are displayed into the first window; each task is HARD/PERIODIC
and auto-kills itself when it reaches the window end!
An other couple of tasks, TITLE & PUT give an example of port
communication facility; the server task creates the port, the client
task connect to it and uses the server to accomplish some stuff.
Port can be declared READ/WRITE and can model ONE-TO-ONE communication
or MANY-TO-ONE communication.
Finally a second couple of tasks realizes a communiation through CABs;
each time a key is pressed, the ascii code is posted into the CAB by the
CCC task while the second task, WRITE, displays it on the screen and
perform other silly actions.
Finally a CLOCK task is implemented to test system clock.
Please note that usually the HARTIK+ application is made up of a task
group which interacts among them, while the main() function, which
became a task itself when the kernel is activated, is suspended until
the system is ready to terminate; the MAIN task can also be used to make
other background activities, but it should not be killed; when the
application terminates, the control is passed to MAIN which kills
everybody, shut down the system and can handle other operations using
the services available with the previou operating system (I.E. the DOS).
If you need to manage sudden abort/exception you should install your own
exception handler and raise it through the exc_raise() primitive to
make the system abort safely!
Remember that the exit functions posted through sys_atexit() will be
executed in both cases, to allow clean system shutdown.
*/
 
#include <kernel/kern.h>
#include <modules/sem.h>
#include <modules/hartport.h>
#include <modules/cabs.h>
#include <string.h>
 
#include <drivers/shark_keyb26.h>
 
//#define __VPAGING__
 
#include <drivers/crtwin.h>
 
int num_aster = 0;
#define ASTER_LIM 67
 
CAB cc;
BYTE esc = FALSE;
 
TASK asteroide(void)
{
int i = 1;
int y = rand() % 7 + 1;
while (i < ASTER_LIM) {
puts_xy(i,y,WHITE,"*");
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
num_aster--;
return 0;
}
 
DWORD taskCreated = 0;
 
TASK aster(void)
{
PID p;
SOFT_TASK_MODEL m_soft;
int r;
WIN w;
 
win_init(&w,0,0,ASTER_LIM,8);
win_frame(&w,BLACK,WHITE,"Asteroids",2);
 
soft_task_default_model(m_soft);
soft_task_def_met(m_soft,2000);
soft_task_def_ctrl_jet(m_soft);
 
srand(7);
while (1) {
if (num_aster < 5) {
r = (rand() % 50) - 25;
soft_task_def_arg(m_soft,(void *)((rand() % 7)+1));
soft_task_def_period(m_soft,(50 + r)*1000);
p = task_create("aaa",asteroide,(TASK_MODEL *)&m_soft,NULL);
taskCreated++;
task_activate(p);
num_aster++;
}
 
task_endcycle();
}
}
 
TASK clock()
{
WIN w;
int s = 0, m = 0;
 
win_init(&w,68,0,11,2);
win_frame(&w,BLACK,WHITE,"Clk",1);
 
while(1) {
printf_xy(70,1,WHITE,"%2d : %2d",m,s);
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(70,1,WHITE,"%2d : %2d",m,s);
task_endcycle();
}
}
 
TASK title()
{
PORT t;
WIN w;
int i,pos = 77;
char msg[85],tmp[85],ss[2];
BYTE c;
win_init(&w,0,9,79,2);
win_frame(&w,BLACK,WHITE,"Title",2);
 
for (i=0; i < 77; i++) msg[i] = ' ';
msg[77] = 0;
 
t = port_connect("title",1,STREAM,READ);
 
while (1) {
port_receive(t,&c,BLOCK);
ss[0] = c;
ss[1] = 0;
strcat(msg,ss);
puts_xy(1,10,WHITE,msg);
pos++;
if (pos > 77) {
strcpy(tmp,&(msg[1]));
tmp[pos-1] = 0;
pos -= 1;
strcpy(msg,tmp);
}
task_endcycle();
}
}
 
#define STR "..................... S.Ha.R.K. ....................."\
" Guarantees hard tasks "\
" Includes soft periodic tasks "\
"TB server for decrementing the aperiodic response time "\
"SRP for both hard & soft aperiodic tasks "\
"Portability toward other compilers/system "\
" "\
"Programmers : Gerardo Lamastra (lamastra@sssup2.sssup.it) "\
" Giuseppe Lipari (lipari@sssup2.sssup.it) "\
"Research coordinator: Giorgio Buttazzo (giorgio@sssup1.sssup.it)"\
" "\
" "\
" "
 
static char GreetMsg[1600];
 
TASK put(void)
{
PORT p;
 
strcpy(GreetMsg,STR);
p = port_create("title",strlen(GreetMsg),1,STREAM,WRITE);
while(1) {
port_send(p,GreetMsg,BLOCK);
task_endcycle();
}
}
 
TASK ccc(void)
{
WIN w;
char *m;
 
win_init(&w,68,3,10,3);
win_frame(&w,BLACK,WHITE,"CCC",2);
puts_xy(70,4,WHITE,"Cab");
 
while(1) {
m = cab_getmes(cc);
puts_xy(72,5,WHITE,m);
cab_unget(cc,m);
task_endcycle();
}
}
TASK write_keyb()
{
BYTE c;
char *msg;
 
while (1) {
c = keyb_getchar();
if (c == ESC) {
esc = TRUE;
task_endcycle();
}
else {
#ifdef __VPAGING__
if (c == 's') {
if (get_visual_page() == 0) set_visual_page(1);
else if (get_visual_page() == 1) set_visual_page(0);
}
#endif
msg = cab_reserve(cc);
msg[0] = c;
msg[1] = 0;
cab_putmes(cc,msg);
}
}
}
 
#define DELTA 200000.0
double carico(double rif,BYTE init)
{
double i;
DWORD t1 = 0,t2 = 1000;
double u;
 
i = 0.0;
do {
i += 1;
} while (i <= DELTA);
 
u = i / ((double) (t2 - t1));
 
if (init) return u;
else return (1.0 - u/rif);
}
 
int main(int argc, char **argv)
{
PID p1,p2,p3,p4,p5,p6;
 
HARD_TASK_MODEL m_per;
SOFT_TASK_MODEL m_soft;
NRT_TASK_MODEL m_nrt;
 
struct timespec t;
#ifdef __VPAGING__
set_active_page(1);
set_visual_page(1);
#endif
CRSR_OFF();
clear();
puts_xy(0,20,WHITE,"Press ESC to exit demo.");
cc = cab_create("Cab",2,2);
 
soft_task_default_model(m_soft);
soft_task_def_period(m_soft,500000);
soft_task_def_met(m_soft,1000);
soft_task_def_group(m_soft, 1);
p1 = task_create("Aster",aster,&m_soft,NULL);
if (p1 == -1) {
perror("Aster.C(main): Could not create task <aster>");
sys_abort(-1);
}
 
hard_task_default_model(m_per);
hard_task_def_mit(m_per,500000);
hard_task_def_wcet(m_per,1000);
hard_task_def_group(m_per, 1);
p2 = task_create("Clock",clock,&m_per,NULL);
if (p2 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <Clock>");
sys_end();
return 0;
}
 
soft_task_def_period(m_soft, 50000);
p3 = task_create("Title",title,&m_soft, NULL);
if (p3 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <Title>");
sys_end();
return 0;
}
 
soft_task_def_period(m_soft, 1000000);
p4 = task_create("Put",put,&m_soft, NULL);
if (p4 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <Put>");
sys_end();
return 0;
}
 
nrt_task_default_model(m_nrt);
nrt_task_def_group(m_nrt, 1);
p5 = task_create("Write",write_keyb,&m_nrt,NULL);
if (p5 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <Write>");
sys_end();
return 0;
}
 
hard_task_def_mit(m_per, 50000);
p6 = task_create("CabTask",ccc,&m_per,NULL);
if (p6 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <CabTask>\n");
sys_end();
return 0;
}
 
group_activate(1);
 
while (!esc) {
sys_gettime(&t);
printf_xy(0,21,WHITE,"Clock : %-9ds %-9dns",(int)t.tv_sec, (int)t.tv_nsec);
}
 
group_kill(1);
clear();
CRSR_STD();
#ifdef __VPAGING__
set_active_page(0);
set_visual_page(0);
#endif
 
sys_end();
 
return 0;
 
}
 
/demos/tags/rel_1_4/base/jointest.c
0,0 → 1,214
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: jointest.c,v 1.2 2004-04-17 11:36:14 giacomo Exp $
 
This test verify the correctness of the task_join primitive. (that
function is the same as pthread_join... someday I will change the
names...)
 
There are 4 taks, J1, J2, J3, are created as joinable, J4 as detached
 
The main task:
Creates J1 and J2, locks m1 (a PI mitex), creates C3.
at t=0.8 sec it calls a task_join on J3 (that returns EDEADLK),
it unlocks m1, then it makes task_join on J3 another time.
Next it creates J4 as detached and finally it does a task_join on J4
(that returns EINVAL).
 
J1:
at t=0.2 sec it calls task_join on J2, the it ends.
 
J2:
it simply waits t=0.4 sec and it ends.
 
J3:
First, it calls task_join on J1.
Then, at t=0.6 sec it locks m1, then unlocks it
 
J4:
it simply waits t=1 sec and it ends.
 
*/
 
#include "kernel/kern.h"
 
PID j0, j1, j2, j3, j4;
mutex_t m1;
 
TASK J1()
{
int err;
void *ret;
 
cprintf("J1: started, waiting 0.2 sec\n");
 
while (sys_gettime(NULL) < 200000);
 
cprintf("J1: 0.2 sec reached, joining J2\n");
 
err = task_join(j2, &ret);
 
cprintf("J1: join J2 returns %d error %d, exiting\n",
(int)ret,err);
return (void *)11;
}
 
TASK J2()
{
cprintf("J2: started, waiting 0.4 sec\n");
 
while (sys_gettime(NULL) < 400000);
 
cprintf("J2: 0.4 sec reached, exiting\n");
 
return (void *)22;
}
 
TASK J3()
{
int err;
void *ret;
 
cprintf("J3: started, joining J1\n");
 
err = task_join(j1, &ret);
 
cprintf("J3: join J1 returns %d error %d, waiting 0.6sec\n", (int)ret, err);
 
while (sys_gettime(NULL) < 600000);
 
cprintf("J1: 0.6 sec reached, locking m1\n");
 
mutex_lock(&m1);
 
cprintf("J3: locked m1, unlocking m1\n");
 
mutex_unlock(&m1);
 
cprintf("J3: unlocked m1, exiting\n");
 
return (void *)33;
}
 
TASK J4()
{
cprintf("J4: started, waiting 1 sec\n");
 
while (sys_gettime(NULL) < 1000000);
 
cprintf("J4: 1 sec reached, exiting\n");
 
return (void *)44;
}
 
int main(int argc, char **argv)
{
NRT_TASK_MODEL m;
 
PI_mutexattr_t a;
 
int err;
void *ret;
 
struct timespec t;
 
j0 = exec_shadow;
nrt_task_default_model(m);
nrt_task_def_joinable(m);
 
/* ---------------------------------------------------------------------
Mutex creation
--------------------------------------------------------------------- */
 
PI_mutexattr_default(a);
mutex_init(&m1,&a);
 
 
/* ---------------------------------------------------------------------
Let's go !!!!
--------------------------------------------------------------------- */
 
cprintf("main: creating J1,J2,J3, locking m1\n");
 
j1 = task_create("J1", J1, &m, NULL);
if (j1 == NIL) { cprintf("Can't create J1 task...\n"); return 1; }
task_activate(j1);
 
j2 = task_create("J2", J2, &m, NULL);
if (j2 == NIL) { cprintf("Can't create J2 task...\n"); return 1; }
task_activate(j2);
 
mutex_lock(&m1);
 
j3 = task_create("J3", J3, &m, NULL);
if (j3 == NIL) { cprintf("Can't create J3 task...\n"); return 1; }
task_activate(j3);
 
cprintf("main: waiting t=0.8 sec\n");
 
while (sys_gettime(NULL) < 800000);
 
err = task_join(j3, NULL);
 
cprintf("main: join J3 error %d, unlocking m1\n",err);
 
mutex_unlock(&m1);
 
err = task_join(j3, &ret);
 
cprintf("main: join J3 returns %d error %d, unlocked m1, creating J4\n",
(int)ret,err);
 
nrt_task_def_unjoinable(m);
j4 = task_create("J4", J4, &m, NULL);
if (j4 == NIL) { cprintf("Can't create J4 task...\n"); return 1; }
 
task_activate(j4);
 
err = task_join(j4,&ret);
 
cprintf("main: join J4 returns %d error %d, exiting\n", (int)ret, err);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
sys_end();
 
return 0;
 
}
/demos/tags/rel_1_4/base/aster1.c
0,0 → 1,174
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: aster1.c,v 1.3 2004-04-17 11:36:12 giacomo Exp $
 
this is a reduced verion of the classic Hartik demo Aster.
 
It uses:
- EDF module
. periodic tasks
- an high number of task executing concurrently
 
The demo ends after 6 seconds.
 
*/
 
/*
Well, this is only a stupid demo which intend to show many
HARTIK+ capabilities; the application is structured in the followig
way: there is an ASTER task wich randomly creates some ASTEROID tasks
which are displayed into the first window; each task is HARD/PERIODIC
and auto-kills itself when it reaches the window end!
Finally a CLOCK task is implemented to test system clock.
Please note that usually the HARTIK+ application is made up of a task
group which interacts among them, while the main() function, which
became a task itself when the kernel is activated, is suspended until
the system is ready to terminate; the MAIN task can also be used to make
other background activities, but it should not be killed; when the
application terminates, the control is passed to MAIN which kills
everybody, shut down the system and can handle other operations using
the services available with the previou operating system (I.E. the DOS).
If you need to manage sudden abort/exception you should install your own
exception handler and raise it through the exc_raise() primitive to
make the system abort safely!
Remember that the exit functions posted through sys_atexit() will be
executed in both cases, to allow clean system shutdown.
*/
 
#include "kernel/kern.h"
 
int num_aster = 0;
#define ASTER_LIM 67
#define ASTER_MAX 90
 
TASK asteroide(void)
{
int i = 1;
int y = rand() % 20 + 1;
while (i < ASTER_LIM) {
puts_xy(i,y,WHITE,"*");
task_endcycle();
 
puts_xy(i,y,WHITE," ");
i++;
}
num_aster--;
return 0;
}
 
DWORD taskCreated = 0;
 
TASK aster(void)
{
PID p;
 
HARD_TASK_MODEL m;
int r;
 
hard_task_default_model(m);
hard_task_def_wcet(m,500);
 
srand(7);
while (1) {
if (num_aster < ASTER_MAX) {
r = (rand() % 50) - 25;
 
hard_task_def_arg(m,(void *)((rand() % 7)+1));
hard_task_def_mit(m, (50+r)*1000);
p = task_create("aaa",asteroide,&m,NULL);
taskCreated++;
task_activate(p);
num_aster++;
}
 
task_endcycle();
}
}
 
TASK clock()
{
int s = 0, m = 0;
 
while(1) {
printf_xy(70,1,WHITE,"%2d : %2d",m,s);
task_endcycle();
 
if (++s > 59) {
s = 0;
m++;
}
printf_xy(70,1,WHITE,"%2d : %2d",m,s);
task_endcycle();
}
}
 
int main(int argc, char **argv)
{
PID p1,p2;
HARD_TASK_MODEL m;
struct timespec t;
 
clear();
 
hard_task_default_model(m);
hard_task_def_mit(m,10000);
hard_task_def_wcet(m,2000);
hard_task_def_group(m,1);
 
p1 = task_create("Aster",aster,&m,NULL);
if (p1 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <aster> ...");
sys_end();
}
 
hard_task_def_mit(m,500000);
p2 = task_create("Clock",clock,&m,NULL);
if (p2 == -1) {
sys_shutdown_message("Aster.C(main): Could not create task <Clock> ...");
sys_end();
}
 
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
 
sys_end();
return 0;
}
 
/demos/tags/rel_1_4/base/mdemo.c
0,0 → 1,189
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: mdemo.c,v 1.2 2004-04-17 11:36:14 giacomo Exp $
 
This test verify the correctness of the NOP module. It works with the
PI, PC, SRP module, too.
 
The test uses one mutex
 
the main task (NRT) creates three tasks.
 
J1 with PC priority 0
starts at t=0.5 sec and lock m0
 
J2 with PC priority 1
starts at t=1 sec and doesn't lock any mutex
 
J3 with PC priority 2
it starts and locks m0
at t=2 sec it unlocks m1
 
 
The example is similar to the scheduling diagram shown at p. 188 of the
book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
 
*/
 
#include "kernel/kern.h"
#include "modules/srp.h"
 
mutex_t m0;
 
 
void startJ(void *a)
{
task_activate((PID)a);
}
 
TASK j1()
{
cprintf("J1: before locking m0\n");
mutex_lock(&m0);
cprintf("J1: locked m0\n");
mutex_unlock(&m0);
cprintf("J1: unlocked m0, end task\n");
return 0;
}
 
 
TASK j2()
{
cprintf("J2: waiting t=1.5 sec\n");
 
while (sys_gettime(NULL) < 1500000);
 
cprintf("J2: end task\n");
return 0;
}
 
 
TASK j3()
{
cprintf("J3: before locking m0\n");
mutex_lock(&m0);
cprintf("J3: locked m0, waiting to t=2 sec\n");
 
while (sys_gettime(NULL) < 2000000);
 
cprintf("J3: t = 1 sec reached, unlocking m0\n");
mutex_unlock(&m0);
cprintf("J3: unlocked m0, end task\n");
return 0;
}
 
int main(int argc, char **argv)
{
struct timespec t;
 
HARD_TASK_MODEL m;
PID p0,p1,p2;
 
PC_mutexattr_t a;
PI_mutexattr_t a2;
NOP_mutexattr_t a3;
SRP_mutexattr_t a4;
NPP_mutexattr_t a5;
 
PC_RES_MODEL r;
SRP_RES_MODEL srp;
 
/* ---------------------------------------------------------------------
Mutex creation
--------------------------------------------------------------------- */
 
PC_mutexattr_default(a,0);
PI_mutexattr_default(a2);
NOP_mutexattr_default(a3);
SRP_mutexattr_default(a4);
NPP_mutexattr_default(a5);
mutex_init(&m0,&a4);
 
/* ---------------------------------------------------------------------
Task creation
--------------------------------------------------------------------- */
 
hard_task_default_model(m);
hard_task_def_wcet(m,20000);
hard_task_def_mit(m,10000000);
PC_res_default_model(r,0);
SRP_res_default_model(srp,3);
p0 = task_createn("J1", j1, (TASK_MODEL *)&m, &r, &srp, SRP_usemutex(&m0), NULL);
if (p0 == NIL)
{ cprintf("Can't create J1 task...\n"); return 1; }
 
hard_task_def_wcet(m,1600000);
hard_task_def_mit(m,21000000);
PC_res_default_model(r,1);
SRP_res_default_model(srp,2);
p1 = task_createn("J2", j2, (TASK_MODEL *)&m, &r, &srp, NULL);
if (p1 == NIL)
{ cprintf("Can't create J2 task...\n"); return 1; }
 
hard_task_def_wcet(m,3000000);
hard_task_def_mit(m,100000000);
PC_res_default_model(r,2);
SRP_res_default_model(srp,1);
p2 = task_createn("J3", j3, (TASK_MODEL *)&m, &r, &srp, SRP_usemutex(&m0), NULL);
if (p2 == NIL)
{ cprintf("Can't create J3 task...\n"); return 1; }
 
 
/* ---------------------------------------------------------------------
Event post
--------------------------------------------------------------------- */
 
t.tv_sec = 0;
t.tv_nsec = 500000000;
 
kern_cli();
kern_event_post(&t,startJ,(void *)p0);
 
t.tv_sec = 1;
kern_event_post(&t,startJ,(void *)p1);
kern_sti();
 
task_activate(p2);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 60);
sys_end();
 
return 0;
}
/demos/tags/rel_1_4/base/intsem.c
0,0 → 1,109
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: intsem.c,v 1.2 2004-04-17 11:36:14 giacomo Exp $
 
this test is a simple main() function with one other task.
 
This test verify the correctness of the internal_sem functions.
 
*/
 
#include "kernel/kern.h"
 
#include <kernel/int_sem.h>
 
internal_sem_t s;
 
TASK pippo(void *a)
{
int i=0;
struct timespec t;
 
do {
sys_gettime(&t);
 
if (i==0 && t.tv_sec == (int)a) {
i = 1;
cprintf("before internal_sem_wait %d\n",(int)a);
internal_sem_wait(&s);
cprintf("after internal_sem_wait %d\n",(int)a);
}
 
if (i==1 && t.tv_sec == 2+(int)a) {
i = 2;
cprintf("before internal_sem_post %d\n",(int)a);
internal_sem_post(&s);
cprintf("after internal_sem_post %d\n",(int)a);
return 0;
}
 
 
} while (1);
}
 
int main(int argc, char **argv)
{
NRT_TASK_MODEL m;
PID p2,p3;
 
struct timespec t;
 
nrt_task_default_model(m);
nrt_task_def_group(m,1);
 
nrt_task_def_arg(m,(void *)1);
p2 = task_create("pippo1", pippo, &m, NULL);
if (p2 == NIL)
{ cprintf("Can't create pippo1 task...\n"); return 1; }
 
nrt_task_def_arg(m,(void *)2);
p3 = task_create("pippo2", pippo, &m, NULL);
if (p3 == NIL)
{ cprintf("Can't create pippo2 task...\n"); return 1; }
 
internal_sem_init(&s,1);
 
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
sys_end();
 
return 0;
}
/demos/tags/rel_1_4/base/pcdemo.c
0,0 → 1,203
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: pcdemo.c,v 1.3 2004-04-17 11:36:14 giacomo Exp $
 
This test verify the correctness of the PC module.
 
The test uses 3 mutexes
m0 with ceiling 0
m1 with ceiling 0
m2 with ceiling 1
 
the main task (NRT) creates three tasks.
 
J0 with PC priority 0
starts at t=1.5 sec and lock m0, unlock m0, then lock and unlock m1
 
J1 with PC priority 1
starts at t=0.5 sec and try to lock m2
 
J2 with PC priority 2
it starts and locks m2
at t=1 sec it locks m1
at t=1.5 sec it unlocks m1
 
 
The example is similar to the scheduling diagram shown at p. 197 of the
book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
 
*/
 
#include "kernel/kern.h"
 
mutex_t m0,m1,m2;
 
void startJ(void *a)
{
task_activate((PID)a);
}
 
TASK j0()
{
cprintf("J0: before locking m0\n");
mutex_lock(&m0);
cprintf("J0: locked m0\n");
mutex_unlock(&m0);
cprintf("J0: unlocked m0, locking m1\n");
 
mutex_lock(&m1);
cprintf("J0: locked m1\n");
mutex_unlock(&m1);
cprintf("J0: unlocked m1, end task\n");
return 0;
}
 
 
TASK j1()
{
cprintf("J1: before locking m2\n");
mutex_lock(&m2);
cprintf("J1: locked m2\n");
mutex_unlock(&m2);
cprintf("J1: unlocked m2, end task\n");
return 0;
}
 
 
TASK j2()
{
cprintf("J2: before locking m2\n");
mutex_lock(&m2);
cprintf("J2: locked m2, waiting to t=1 sec\n");
 
while (sys_gettime(NULL) < 1000000);
 
cprintf("J2: t = 1 sec reached\n");
mutex_lock(&m1);
cprintf("J2: locked m1, waiting to t=2 sec\n");
 
while (sys_gettime(NULL) < 2000000);
 
cprintf("J2: t = 2 sec reached\n");
mutex_unlock(&m1);
cprintf("J2: unlocked m1\n");
 
mutex_unlock(&m2);
cprintf("J2: unlocked m2, end task\n");
return 0;
}
 
int main(int argc, char **argv)
{
struct timespec t;
 
HARD_TASK_MODEL m;
PID p0,p1,p2;
 
PC_mutexattr_t a;
PI_mutexattr_t a2;
PC_RES_MODEL r;
 
clear();
 
cprintf("Priority Ceiling demo. It ends after 60 sec\n");
 
/* ---------------------------------------------------------------------
Task creation
--------------------------------------------------------------------- */
 
hard_task_default_model(m);
hard_task_def_mit(m, 1000000);
hard_task_def_wcet(m, 20000);
PC_res_default_model(r,0);
p0 = task_create("J0", j0, &m, &r);
if (p0 == NIL)
{ cprintf("Can't create J0 task...\n"); return 1; }
 
hard_task_default_model(m);
hard_task_def_mit(m, 2100000);
hard_task_def_wcet(m, 20000);
PC_res_default_model(r,1);
p1 = task_create("J1", j1, &m, &r);
if (p1 == NIL)
{ cprintf("Can't create J1 task...\n"); return 1; }
 
hard_task_default_model(m);
hard_task_def_mit(m, 10000000);
hard_task_def_wcet(m, 3000000);
PC_res_default_model(r,2);
p2 = task_create("J2", j2, &m, &r);
if (p2 == NIL)
{ cprintf("Can't create J2 task...\n"); return 1; }
 
/* ---------------------------------------------------------------------
Mutex creation
--------------------------------------------------------------------- */
 
PI_mutexattr_default(a2);
PC_mutexattr_default(a,0);
mutex_init(&m0,(mutexattr_t *)&a);
mutex_init(&m1,(mutexattr_t *)&a);
 
PC_mutexattr_default(a,1);
mutex_init(&m2,(mutexattr_t *)&a);
 
/* ---------------------------------------------------------------------
Event post
--------------------------------------------------------------------- */
 
t.tv_sec = 0;
t.tv_nsec = 500000000;
 
kern_cli();
kern_event_post(&t,startJ,(void *)p1);
 
t.tv_sec = 1;
kern_event_post(&t,startJ,(void *)p0);
kern_sti();
 
task_activate(p2);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
sys_end();
 
return 0;
 
}
/demos/tags/rel_1_4/base/srpdemo.c
0,0 → 1,234
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: srpdemo.c,v 1.3 2004-04-17 11:36:15 giacomo Exp $
 
This test verify the correctness of the SRP module.
 
There are 3 taks, Jh, Jm, Jl that uses 3 mutexes m1, m2, m3
 
the main task (NRT) creates the three tasks.
 
Jh with preemption level 3
starts at t=1.5 sec and lock m3, lock m1, unlock m1, unlock m3
 
Jm with preemption level 2
starts at t=0.5 sec and lock m3, lock m2, unlock m2, unlock m3
then lock and unlock m1
 
Jl with preemption level 1
it starts and locks m2
at t=1 sec it locks m1
at t=1.5 sec it unlocks m1
then it unlocks m2, and finally it locks and unlocks m3
 
 
The example is similar to the scheduling diagram shown at p. 210 of the
book "Sistemi in tempo Reale", by Giorgio Buttazzo, Pitagora Editrice
 
*/
 
#include "kernel/kern.h"
 
#include "modules/srp.h"
 
mutex_t m1,m2,m3;
 
void startJ(void *a)
{
task_activate((PID)a);
}
 
TASK Jlobby()
{
cprintf("(*) JLobby!!!\n");
return 0;
}
 
TASK Jh()
{
PID l;
HARD_TASK_MODEL m;
SRP_RES_MODEL r;
 
cprintf("JH: creating Jy before locking m3\n");
 
hard_task_default_model(m);
hard_task_def_mit(m,30000);
hard_task_def_wcet(m,1000);
SRP_res_default_model(r,4);
l = task_create("Jlobby",Jlobby,&m,&r);
task_activate(l);
 
mutex_lock(&m3);
cprintf("JH: locked m3, locking m1\n");
mutex_lock(&m1);
cprintf("JH: locked m1, unlocking m1\n");
mutex_unlock(&m1);
cprintf("JH: unlocked m1, unlocking m3\n");
mutex_unlock(&m3);
cprintf("JH: unlocked m3, end task\n");
return 0;
}
 
 
TASK Jm()
{
cprintf("JM: before locking m3\n");
mutex_lock(&m3);
cprintf("JM: locked m3, locking m2\n");
mutex_lock(&m2);
cprintf("JM: locked m2, unlocking m2\n");
mutex_unlock(&m2);
cprintf("JM: unlocked m2, unlocking m3\n");
mutex_unlock(&m3);
cprintf("JM: unlocked m3, locking m1\n");
mutex_lock(&m1);
cprintf("JM: locked m1, unlocking m1\n");
mutex_unlock(&m1);
cprintf("JM: unlocked m1, end task\n");
return 0;
}
 
 
TASK Jl()
{
cprintf("JL: before locking m2\n");
mutex_lock(&m2);
cprintf("JL: locked m2, waiting to t=1 sec\n");
 
while (sys_gettime(NULL) < 1000000);
 
cprintf("JL: t = 1 sec reached, locking m1\n");
mutex_lock(&m1);
cprintf("JL: locked m1, waiting to t=2 sec\n");
 
while (sys_gettime(NULL) < 2000000);
 
cprintf("JL: t = 2 sec reached, unlocking m1\n");
mutex_unlock(&m1);
cprintf("JL: unlocked m1, unlocking m2\n");
 
mutex_unlock(&m2);
 
cprintf("JL: unlocked m2, locking m3\n");
mutex_lock(&m3);
cprintf("JL: locked m3, unlocking m3\n");
mutex_unlock(&m3);
cprintf("JL: unlocked m3, end task\n");
return 0;
}
 
int main(int argc, char **argv)
{
struct timespec t;
 
HARD_TASK_MODEL m;
PID p0,p1,p2;
 
SRP_mutexattr_t a;
SRP_RES_MODEL r;
 
PI_mutexattr_t a2;
 
clear();
cprintf("Stack resource Policy demo. It ends after 60 sec\n");
 
/* ---------------------------------------------------------------------
Mutex creation
--------------------------------------------------------------------- */
 
PI_mutexattr_default(a2);
SRP_mutexattr_default(a);
mutex_init(&m1,&a);
mutex_init(&m2,&a);
mutex_init(&m3,&a);
 
/* ---------------------------------------------------------------------
Task creation
--------------------------------------------------------------------- */
 
hard_task_default_model(m);
hard_task_def_mit(m, 1000000);
hard_task_def_wcet(m, 80000);
SRP_res_default_model(r, 3);
p0 = task_createn("JH", Jh, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1), NULL);
if (p0 == NIL)
{ cprintf("Can't create JH task...\n"); return 1; }
 
hard_task_default_model(m);
hard_task_def_mit(m, 2100000);
hard_task_def_wcet(m, 80000);
SRP_res_default_model(r, 2);
p1 = task_createn("JM", Jm, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1),
SRP_usemutex(&m2), NULL);
if (p1 == NIL)
{ cprintf("Can't create JM task...\n"); return 1; }
 
hard_task_default_model(m);
hard_task_def_mit(m, 10000000);
hard_task_def_wcet(m, 3000000);
SRP_res_default_model(r, 1);
p2 = task_createn("JL", Jl, (TASK_MODEL *)&m, &r, SRP_usemutex(&m3), SRP_usemutex(&m1),
SRP_usemutex(&m2), NULL);
if (p2 == NIL)
{ cprintf("Can't create JL task...\n"); return 1; }
 
/* ---------------------------------------------------------------------
Event post
--------------------------------------------------------------------- */
 
t.tv_sec = 0;
t.tv_nsec = 500000000;
 
kern_cli();
kern_event_post(&t,startJ,(void *)p1);
 
t.tv_sec = 1;
kern_event_post(&t,startJ,(void *)p0);
kern_sti();
 
task_activate(p2);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 60);
sys_end();
 
return 0;
}
/demos/tags/rel_1_4/base/iaster3.c
0,0 → 1,110
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: iaster3.c,v 1.2 2004-04-17 11:36:13 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.2 $
Last update: $Date: 2004-04-17 11:36:13 $
------------
 
System initialization file
 
The tick is set to TICK ms.
 
This file contains the 2 functions needed to initialize the system.
 
These functions register the following levels:
 
an EDF (Earliest Deadline First) level
a RR (Round Robin) level
a TBS (Total Bandwidth Server) level 0.1 Us
a TBS (Total Bandwidth Server) level 0.3 Us
a Dummy level
 
The TBS bandwidth is TBS_NUM/TBS_DEN
 
 
It can accept these task models (into () the mandatory fields):
 
HARD_TASK_MODEL (wcet+mit) at level 0
NRT_TASK_MODEL at level 1
SOFT_TASK_MODEL (wcet, periodicity=APERIODIC) at level 2,3
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/rr.h"
#include "modules/tbs.h"
#include "modules/dummy.h"
 
 
/*+ sysyem tick in us +*/
#define TICK 1200
 
#define RRTICK 5000
#define TBS_NUM 1
#define TBS_DEN 10
 
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
EDF_register_level(EDF_ENABLE_ALL);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
TBS_register_level(TBS_ENABLE_ALL, 0, TBS_NUM, TBS_DEN);
TBS_register_level(TBS_ENABLE_ALL, 0, TBS_NUM*3, TBS_DEN);
dummy_register_level();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
__call_main__(mb);
 
return (void *)0;
}
 
/demos/tags/rel_1_4/base/readme
0,0 → 1,44
This directory contains a set of simple examples, useful to understand
How to make a Shark application.
 
Text mode demos:
- hello.c --> a hello world application
- timer.c --> tests if the time reads are always increasing
(useful for debugging purposes)
- sig.c --> simple example that sends signals
- semdemo.c --> simple example that uses a semaphore for mutual exclusion
- pidemo.c --> simple example that uses PI mutexes between NRT and Hard tasks
- pcdemo.c --> simple example that uses PC mutexes between NRT and Hard tasks
- srpdemo.c --> simple example that uses SRP mutexes between NRT and Hard tasks
- mdemo.c --> simple example that uses a mutex, initialized with whatever
protocol you want ;-)
- aster.c --> Wow! the original Hartik ASTER demo!!! (EDF, CABs, ...)
- aster1.c --> a -lot- of periodic tasks that are created and then die
(6 seconds demo)
- aster2.c --> a simple stress test: a lot of tasks are created until Utot=1;
uses jet functions to dump statistics. (60 seconds demo)
- aster3.c --> aster2 + 8 tasks handled by 2 different TBS servers
- aster4.c --> aster3 + CBS tasks + Shutdown demo with system tasks
- aster5.c --> aster3 + only CBS tasks + mutexes... Really interesting!
- aster6.c --> aster5 + Polling Server to serve the JetCtrl task
- aster7.c --> another aster clone with Rate monotonic and Polling server
- aster8.c --> aster5 + Sporadic Server
- preempt.c --> simple test for CBS, task_preempt, task_nopreempt, and
save/skip arrivals
- pcidemo.c --> PCI Bus scan
- jointest.c--> Simple test that uses the task_join primitive
- condtest.c--> Simple test that uses condition variables
- intsem.c --> Simple test that uses internal semaphores
 
Graphical demos:
- fly.c --> Random flies going around the screen
- ego.c --> Periodic tasks that writes a phrease on the screen
- cabs.c --> Example that uses cabs
 
Note on the init files:
- ihello.c (RR+dummy)
- isemdemo.c (iaster1+Semaphores)
- iaster1.c (EDF+RR+dummy)
- iaster3.c (EDF+RR+TBS(0.1)+TBS(0.3)+dummy)
- iaster4.c (iaster3+CBS)
- initfile.c (EDF+CBS+RR+dummy, SEMaphores, CABS, HARTPORTs and Keyboard)
/demos/tags/rel_1_4/base/pidemo.c
0,0 → 1,123
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: pidemo.c,v 1.3 2004-04-17 11:36:14 giacomo Exp $
 
This test verify the correctness of the PI module.
 
the main task (NRT) lock a PI mutex.
then 2 tasks arrives, with priority higher than the main
 
the first try to lock the mutex, but it can't, so the main inherit
his priority. The second simply prints a string.
 
If all works, the string of the second task is printed after the end of
the first task.
 
*/
 
#include "kernel/kern.h"
 
mutex_t m1;
 
 
TASK goofy1(void *a)
{
cprintf("goofy1 before mutex_lock\n");
mutex_lock(&m1);
cprintf("goofy1 after mutex_lock\n");
 
mutex_unlock(&m1);
cprintf("goofy1 after mutex_unlock\n");
 
return 0;
}
 
TASK goofy2()
{
cprintf("goofy2 inside goofy2\n");
return 0;
}
 
int main(int argc, char **argv)
{
HARD_TASK_MODEL m;
PID p2,p3;
 
struct timespec t;
 
PI_mutexattr_t a;
 
hard_task_default_model(m);
hard_task_def_mit(m,50000);
hard_task_def_wcet(m,20000);
hard_task_def_group(m,1);
 
hard_task_def_arg(m,(void *)1);
p2 = task_create("goofy1", goofy1, &m, NULL);
if (p2 == NIL)
{ cprintf("Can't create goofy1 task...\n"); return 1; }
 
hard_task_def_mit(m,100000);
p3 = task_create("goofy2", goofy2, &m, NULL);
if (p3 == NIL)
{ cprintf("Can't create goofy2 task...\n"); return 1; }
 
PI_mutexattr_default(a);
mutex_init(&m1,&a);
 
cprintf("main before mutex_lock\n");
mutex_lock(&m1);
cprintf("main after mutex_lock\n");
 
group_activate(1);
 
cprintf("main after group_activate\n");
mutex_unlock(&m1);
cprintf("main after mutex_unlock\n");
 
mutex_destroy(&m1);
cprintf("main after mutex_destroy\n");
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
 
sys_end();
 
return 0;
 
}
/demos/tags/rel_1_4/base/condtest.c
0,0 → 1,209
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Giorgio Buttazzo, Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: condtest.c,v 1.2 2004-04-17 11:36:13 giacomo Exp $
 
This test verify the correctness of the condition variables.
(... it doesn't test all...)
 
The test uses 1 mutex
 
the main task (NRT) creates three tasks.
 
J0, J1, J3
starts, lock the mutex, and wait on a condition variable
 
J2
at t = 0.5 lock the mutex and call cond_signal
at t = 1 lock the mutex and call cond_signal
 
*/
 
#include "kernel/kern.h"
 
mutex_t m0;
cond_t c0;
 
int number = 0;
 
PID p0,p1,p2,p3;
 
TASK j0()
{
cprintf("J0: before locking m0\n");
mutex_lock(&m0);
cprintf("J0: locked m0, waiting on c0, number =%d\n", number);
while (!number) {
cond_wait(&c0,&m0);
cprintf("J0: number = %d, if >0 unlocking m0\n",number);
}
number--;
mutex_unlock(&m0);
cprintf("J0: unlocked m0, end task\n");
return 0;
}
 
 
TASK j1()
{
cprintf("J1: before locking m0\n");
mutex_lock(&m0);
cprintf("J1: locked m0, waiting on c0, number =%d\n", number);
while (!number) {
cond_wait(&c0,&m0);
cprintf("J1: number = %d, if >0 unlocking m0\n",number);
}
number--;
mutex_unlock(&m0);
cprintf("J1: unlocked m0, end task\n");
return 0;
}
 
 
TASK j2()
{
 
cprintf("J2: started, waiting t=0.5 sec\n");
while (sys_gettime(NULL) < 500000);
 
cprintf("J2: before locking m0\n");
mutex_lock(&m0);
cprintf("J2: locked m0, number++ (was %d), cond_signal\n", number);
 
number++;
cond_signal(&c0);
 
cprintf("J2: unlocking m0\n");
mutex_unlock(&m0);
 
cprintf("J2: waiting t=1 sec\n");
while (sys_gettime(NULL) < 1000000);
 
cprintf("J2: Killing J3\n");
task_kill(p3);
cprintf("J2: before locking m0\n");
mutex_lock(&m0);
cprintf("J2: locked m0, number++ (was %d), cond_signal\n", number);
 
number++;
cond_signal(&c0);
 
cprintf("J2: unlocking m0\n");
mutex_unlock(&m0);
cprintf("J2: unlocked m0, end task\n");
return 0;
}
 
void cleanup_lock(void *arg)
{
cprintf("J3: KILL!!!\n");
mutex_unlock(&m0);
cprintf("J3: unlocked m0 by the cleanup function\n");
}
 
TASK j3()
{
cprintf("J3: before locking m0\n");
mutex_lock(&m0);
cprintf("J3: locked m0, waiting on c0, number =%d\n", number);
task_cleanup_push(cleanup_lock, (void *)&m0);
while (!number) {
cond_wait(&c0,&m0);
cprintf("J3: number = %d, if >0 unlocking m0\n",number);
}
task_cleanup_pop(0);
// I hope this task never reach this point... it is killed by J2!!!
number--;
mutex_unlock(&m0);
cprintf("J3: unlocked m0, end task\n");
return 0;
}
 
 
int main(int argc, char **argv)
{
struct timespec t;
 
NRT_TASK_MODEL m;
 
PI_mutexattr_t a;
 
/* ---------------------------------------------------------------------
Task creation
--------------------------------------------------------------------- */
 
nrt_task_default_model(m);
nrt_task_def_group(m,1);
p0 = task_create("J0", j0, &m, NULL);
if (p0 == NIL)
{ cprintf("Can't create J0 task...\n"); return 1; }
 
p1 = task_create("J1", j1, &m, NULL);
if (p1 == NIL)
{ cprintf("Can't create J1 task...\n"); return 1; }
 
p2 = task_create("J2", j2, &m, NULL);
if (p2 == NIL)
{ cprintf("Can't create J2 task...\n"); return 1; }
 
p3 = task_create("J3", j3, &m, NULL);
if (p3 == NIL)
{ cprintf("Can't create J3 task...\n"); return 1; }
 
/* ---------------------------------------------------------------------
Mutex creation
--------------------------------------------------------------------- */
 
PI_mutexattr_default(a);
mutex_init(&m0,&a);
 
cond_init(&c0);
 
/* ---------------------------------------------------------------------
Event post
--------------------------------------------------------------------- */
 
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
sys_end();
 
return 0;
 
}
/demos/tags/rel_1_4/base/semdemo.c
0,0 → 1,105
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: semdemo.c,v 1.2 2004-04-17 11:36:15 giacomo Exp $
 
This is a really simple semaphore demo.
 
*/
 
#include "kernel/kern.h"
 
#include "semaphore.h"
 
sem_t s;
 
void *goofy(void *a)
{
struct timespec t;
char *n = proc_table[exec_shadow].name;
 
cprintf("Task %s: Locking semaphore...\n", n);
 
sem_wait(&s);
cprintf("Task %s: Semaphore locked...\n", n);
 
do {
sys_gettime(&t);
} while (t.tv_sec < (int)a);
 
cprintf("Task %s: Unlocking semaphore...\n", n);
 
sem_post(&s);
 
cprintf("Task %s: Semaphore unlocked...\n", n);
 
return 0;
}
 
int main(int argc, char **argv)
{
NRT_TASK_MODEL m;
PID p2,p3;
 
struct timespec t;
 
nrt_task_default_model(m);
nrt_task_def_group(m,1);
 
nrt_task_def_arg(m,(void *)1);
p2 = task_create("goofy1", goofy, &m, NULL);
if (p2 == NIL)
{ cprintf("Can't create goofy1 task...\n"); return 1; }
 
nrt_task_def_arg(m,(void *)2);
p3 = task_create("goofy2", goofy, &m, NULL);
if (p3 == NIL)
{ cprintf("Can't create goofy2 task...\n"); return 1; }
cprintf("Initializing semaphore...\n");
 
sem_init(&s,0,1);
 
group_activate(1);
 
do {
sys_gettime(&t);
} while (t.tv_sec < 10);
 
sys_end();
 
return 0;
}
/demos/tags/rel_1_4/base/iaster1.c
0,0 → 1,99
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: iaster1.c,v 1.2 2003-04-15 10:21:22 giacomo Exp $
 
File: $File$
Revision: $Revision: 1.2 $
Last update: $Date: 2003-04-15 10:21:22 $
------------
 
System initialization file
 
The tick is set to TICK ms.
 
This file contains the 2 functions needed to initialize the system.
 
These functions register the following levels:
 
an EDF (Earliest Deadline First) level
a RR (Round Robin) level
a Dummy level
 
It can accept these task models (into () the mandatory fields):
 
HARD_TASK_MODEL (wcet+mit) at level 0
NRT_TASK_MODEL at level 1
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
 
/*+ sysyem tick in us +*/
#define TICK 1000
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
EDF_register_level(EDF_ENABLE_ALL);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
__call_main__(mb);
 
return (void *)0;
}
 
/demos/tags/rel_1_4/base/sig.c
0,0 → 1,168
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: sig.c,v 1.3 2003-01-07 17:10:15 pj Exp $
 
File: $File$
Revision: $Revision: 1.3 $
Last update: $Date: 2003-01-07 17:10:15 $
------------
**/
 
/*
* Copyright (C) 2000 Paolo Gai and Giorgio Buttazzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
/*
Test Number 5:
 
this test is a simple main() function with one other task
 
This test can be useful to test functions like:
 
sys_gettime
sigemptyset
sigaddset
hartik_deliver_pending_signals
sys_end
task_sigmask
sigaction
sigqueue
task_signal
*/
 
#include "kernel/kern.h"
 
 
TASK goofy(void *arg)
{
struct timespec t;
 
cprintf("Goofy: waiting 2 secs...\n");
 
do {
sys_gettime(&t);
} while (t.tv_sec < 2); // wait until 2 sec
cprintf("Goofy: ok, I'm ready :-)\n");
 
return 0;
}
 
void catchit_RT(int signo, siginfo_t *info, void *extra)
{
cprintf("RT signal: Current Running Task = %d signo=%d code=%d value=%d from pid=%d\n",
exec_shadow,
info->si_signo, info->si_code,
info->si_value.sival_int, info->si_task);
}
 
void catchit(int signo)
{
cprintf("RT signal: Current Running Task = %d signo=%d\n",
exec_shadow, signo);
}
 
int main(int argc, char **argv)
{
struct timespec t;
NRT_TASK_MODEL m;
PID p2;
 
sigset_t newmask;
sigset_t oldmask;
struct sigaction action;
union sigval sval;
 
clear();
 
/* Set the signal action */
action.sa_flags = SA_SIGINFO;
action.sa_sigaction = catchit_RT;
action.sa_handler = 0;
action.sa_mask = 0;
 
if (sigaction(SIGUSR1, &action, NULL) == -1) {
perror("Error using sigaction.");
return -1;
}
 
action.sa_flags = 0;
action.sa_handler = (void (*)(int))catchit;
 
if (sigaction(SIGILL, &action, NULL) == -1) {
perror("Error using sigaction.");
return -1;
}
 
/* create another task */
nrt_task_default_model(m);
nrt_task_def_group(m,1);
 
p2 = task_create("goofy", goofy, &m, NULL);
if (p2 == NIL)
{
cprintf("Can't create goofy task...\n");
return 1;
}
 
group_activate(1);
 
/* block the signal for the main task */
sigemptyset(&newmask);
sigaddset(&newmask,SIGUSR1);
task_sigmask(SIG_BLOCK, &newmask, &oldmask); // pthread_sigmask
 
cprintf("main: Sending 2 signals ...\n");
 
sval.sival_int = 123;
sigqueue(0,SIGUSR1,sval);
sval.sival_int = 999;
sigqueue(0,SIGUSR1,sval);
 
cprintf("main: Now sending a signal to myself,"
" then wait until 4 secs...\n");
 
task_signal(0 /* main */, SIGILL); // pthread_kill
 
NULL_TIMESPEC(&t);
do {
sys_gettime(&t);
} while (t.tv_sec < 4); // wait until 4 s
 
cprintf("main: ending...\n");
 
return 0;
}
/demos/tags/rel_1_4/base/isemdemo.c
0,0 → 1,98
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: isemdemo.c,v 1.1 2002-11-11 08:22:45 pj Exp $
 
File: $File$
Revision: $Revision: 1.1 $
Last update: $Date: 2002-11-11 08:22:45 $
------------
 
The simplest initialization file
 
The tick is set to TICK ms.
 
This file contains the 2 functions needed to initialize the system.
 
These functions register the following levels:
 
a RR (Round Robin) level
a Dummy level
 
It can accept these task models:
 
NRT_TASK_MODEL at level 0
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/sem.h"
 
 
/*+ sysyem tick in us +*/
#define TICK 300
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
__call_main__(mb);
 
return (void *)0;
}
 
/demos/tags/rel_1_4/base/time.c
0,0 → 1,69
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* CVS : $Id: time.c,v 1.1 2002-10-28 08:13:37 pj Exp $
*
* Timer correctness test
*/
 
#include "kernel/kern.h"
 
#define NT 10
 
int main(int argc, char **argv)
{
struct timespec t[NT];
int i;
 
cprintf("Timer correctness test (1 second).\n");
 
for (i=0; i<NT; i++) NULL_TIMESPEC(&t[i]);
 
do {
for (i=0; i<NT-1; i++) t[i+1] = t[i];
 
sys_gettime(&t[0]);
 
if (TIMESPEC_A_LT_B(&t[0],&t[1])) {
for (i=0; i<NT; i++)
cprintf("%d %ld\n",i, t[i].tv_nsec);
sys_end();
}
} while (t[0].tv_sec < 1);
 
return 0;
}
 
/demos/tags/rel_1_4/base/hello.c
0,0 → 1,53
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
/*
CVS : $Id: hello.c,v 1.1 2002-10-28 08:13:37 pj Exp $
 
hello.c:
 
This test is a simple hello world function.
 
*/
 
#include "kernel/kern.h"
 
int main(int argc, char **argv)
{
cprintf("Hello, world!\n");
 
return 0;
}
/demos/tags/rel_1_4/base/ihello.c
0,0 → 1,95
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: ihello.c,v 1.1 2002-10-28 08:13:37 pj Exp $
 
File: $File$
Revision: $Revision: 1.1 $
Last update: $Date: 2002-10-28 08:13:37 $
------------
 
The simplest initialization file
 
The tick is set to TICK ms.
 
This file contains the 2 functions needed to initialize the system.
 
These functions register the following levels:
 
a RR (Round Robin) level
a Dummy level
 
It can accept these task models:
 
NRT_TASK_MODEL at level 0
 
**/
 
/*
* Copyright (C) 2000 Paolo Gai
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
 
 
#include "kernel/kern.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
 
/*+ sysyem tick in us +*/
#define TICK 300
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
__call_main__(mb);
 
return (void *)0;
}
 
/demos/tags/rel_1_4/readme.txt
0,0 → 1,7
Hi, these are the S.Ha.R.K. demos...
 
the old examples directory is now called demos/oldexamples...
 
Enjoy
 
PJ
/demos/tags/rel_1_4/dosfs/makefile
0,0 → 1,16
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS= dosfs
 
include $(BASE)/config/example.mk
 
dosfs:
make -f $(SUBMAKE) APP=dosfs INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT=
 
/demos/tags/rel_1_4/dosfs/dosfs.c
0,0 → 1,174
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: dosfs.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
 
File: $File$
Revision: $Revision: 1.1.1.1 $
Last update: $Date: 2002-09-02 09:37:41 $
------------
**/
 
/*
* Copyright (C) 2000 Paolo Gai and Gabriele Bolognini
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "string.h"
#include "ll/i386/x-dos.h"
 
 
/* This is the buffer used by read_myfile */
char myfilebuf[1000];
 
/* This is the number of bytes read by read_myfile */
int myfilebuf_length;
 
/* This function write myfile.out (up to 30 chars) */
void write_myfile(void *arg);
 
int main(int argc, char **argv)
{
int x;
 
cprintf("\nBuffer contents:\n");
 
for (x=0; x<myfilebuf_length; x++)
cputc(myfilebuf[x]);
 
/*
WARNING: You can call these functions only when you are in
real mode!!!
 
The system is in real mode:
- into __kernel_register_levels__()
- into sys_atrunlevel functions posted with RUNLEVEL_AFTER_EXIT
*/
 
if (myfilebuf_length)
sys_atrunlevel(write_myfile, NULL, RUNLEVEL_AFTER_EXIT);
 
return 0;
/*
* Since there is only one user task, the kernel will shut down after this
* task finishes...
*/
}
 
/* This function read myfile.txt (up to 1000 chars) */
void read_myfile(void)
{
/* DOS file descriptor */
DOS_FILE *f;
 
/* Error code */
int err;
 
/* open the DOS file for reading (you can specify only "r" or "w") */
f = DOS_fopen("myfile.txt","r");
 
/* check for open errors */
if (!f) {
/* error!! */
err = DOS_error();
 
/* note that if you call DOS_error() here, it return 0!!! */
cprintf("Error %d opening myfile.txt...\n", err);
myfilebuf_length = 0;
return;
}
 
/* read up to 1000 chars */
myfilebuf_length = DOS_fread(&myfilebuf,1,1000,f);
 
/* check for errors */
err = DOS_error();
 
cprintf("Read %d bytes from myfile.txt...\n", myfilebuf_length);
 
if (err) {
cprintf("Error %d reading myfile.txt...\n", err);
myfilebuf_length = 0;
/* there is not return because I want to close the file! */
}
 
/* Close the file */
DOS_fclose(f);
}
 
/* This function write myfile.out (up to 30 chars) */
void write_myfile(void *arg)
{
DOS_FILE *f; /* DOS file descriptor */
int err; /* Error code */
int maxbytes;
int writtenbytes; /* number of files written */
 
/* open the DOS file for writing (you can specify only "r" or "w") */
f = DOS_fopen("myfile.out","w");
 
/* check for open errors */
if (!f) {
/* error!! */
err = DOS_error();
 
/* note that if you call DOS_error() here, it return 0!!! */
cprintf("Error %d opening myfile.out...\n", err);
return;
}
 
/* write up to 30 bytes */
if (myfilebuf_length > 30)
maxbytes = 30;
else
maxbytes = myfilebuf_length;
 
writtenbytes = DOS_fwrite(myfilebuf,1,maxbytes,f);
 
/* check for errors */
err = DOS_error();
 
cprintf("Written %d bytes into myfile.out...\n", writtenbytes);
 
if (err) {
cprintf("Error %d writing myfile.txt...\n", err);
/* there is not return because I want to close the file! */
}
 
/* Close the file */
DOS_fclose(f);
}
 
 
/demos/tags/rel_1_4/dosfs/myfile.txt
0,0 → 1,3
0.2.4.6.8.0.2.4.6.8.0.2.4.6.8.0.2.4.6.8.
This is the myfile.txt file...
 
/demos/tags/rel_1_4/dosfs/initfile.c
0,0 → 1,91
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Paolo Gai <pj@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/**
------------
CVS : $Id: initfile.c,v 1.1.1.1 2002-09-02 09:37:41 pj Exp $
 
File: $File$
Revision: $Revision: 1.1.1.1 $
Last update: $Date: 2002-09-02 09:37:41 $
------------
**/
 
/*
* Copyright (C) 2000 Paolo Gai and Gabriele Bolognini
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
 
#include "kernel/kern.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
void read_myfile(void);
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
/* If you need to interact with the DOS Filesystem and you use
the X eXtender, this is the better place where you can use
the DOS_fXXX functions...
 
WARNING: You can call these functions only when you are in
real mode!!!
 
The system is in real mode:
- into __kernel_register_levels__()
- into sys_atrunlevel functions posted with RUNLEVEL_AFTER_EXIT
*/
read_myfile();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
__call_main__(mb);
 
return (void *)0;
}
 
/demos/tags/rel_1_4/dosfs/readme.txt
0,0 → 1,46
--------------------------------------
DOS_fXXX Demo
 
by
 
Paolo Gai pj@sssup.it
and
Gabriele Bolognini gabrieleb@sssup.it
2001
 
--------------------------------------
 
The DOS_fXXX functions provided into ll/i386/x-dos.h are a few
shortcuts that can be used to call INT21's DOS calls.
 
These functions can be used to read and write files before/after
the kernel goes into i386 protected mode.
 
THEY CANNOT BE USED IF YOU BOOT WITH GRUB.
 
--------------------------------------
 
The demo is composed by:
 
MAKEFILE The makefile used to compile the application;
dosfs is the rule to compile the application
README.TXT This file
INITFILE.C The init file (only RR)
DOSFS.C The DOS_fread and DOS_fwrite demo
 
--------------------------------------
 
The demo works as follows:
- Into __kernel_register_levels__() the demo reads up to 1000 bytes from
myfile.txt
- Then, into the main() function it prints the contents of the buffer at
screen
- Finally, at the end of the system it writes a file called myfile.out
with up to 30 of the first bytes of the buffer
 
The demo should work on any processor speed, and does not use keyboard or
graphics.
 
Bug: at the moment (01 Jun 2001) sometimes the demo hangs when using
the one-shot timer.
 
/demos/tags/rel_1_4/bttvdemo/bttv.c
0,0 → 1,340
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* Copyright (C) 2003 Giacomo Guidi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
#include "kernel/kern.h"
#include "stdlib.h"
#include "unistd.h"
 
#include "drivers/shark_keyb26.h"
#include "drivers/shark_videodev26.h"
#include "drivers/shark_fb26.h"
 
#include "tracer.h"
 
#define WIDTH 640
#define HEIGHT 480
#define BYTES_PP 2
 
//#define COLOR
#define MAX_SPEED
 
#define FRAME_GRABBER_NUMBER 0
 
#define FG_PERIOD 40000 //ONLY IF MAX_SPEED IS DISABLED
#define FG_WCET 30000
#define FG_W 320
#define FG_H 240
 
unsigned int frame_number = 0;
 
void program_end(void *arg)
{
 
sys_end();
}
 
void elaborate_image(void *imageptr);
 
void start_frame_grabber(PID elaborate_task_PID, int channel, struct video_buffer *fbuf) {
 
struct video_window win;
struct video_channel chan;
struct video_tuner tuner;
struct video_picture vpic;
int res;
 
/* Init videodev driver */
VIDEODEV26_open(FRAME_GRABBER_NUMBER);
 
/* Select the input channel */
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCGCHAN,(unsigned long)&chan);
//cprintf("res = %d\n",res);
 
chan.channel = channel;
chan.type = VIDEO_VC_TUNER;
chan.norm = VIDEO_TYPE_CAMERA;
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSCHAN,(unsigned long)&chan);
//cprintf("res = %d\n",res);
 
/* Enable the tuner */
 
tuner.tuner = 0;
tuner.mode = VIDEO_MODE_PAL;
 
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSTUNER,(unsigned long)&tuner);
//cprintf("res = %d\n",res);
 
/* Select palette and depth */
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCGPICT,(unsigned long)&vpic);
//cprintf("res = %d\n",res);
 
#ifdef COLOR
vpic.palette = VIDEO_PALETTE_RGB24;
vpic.depth = 24;
#else
vpic.palette = VIDEO_PALETTE_GREY;
vpic.depth = 8;
#endif
 
vpic.brightness = 35000;
vpic.hue = 32000;
vpic.contrast = 32000;
vpic.colour = 32000;
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSPICT,(unsigned long)&vpic);
//cprintf("res = %d\n",res);
 
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCGWIN,(unsigned long)&win);
//cprintf("res = %d\n",res);
win.x = 0;
win.y = 0;
win.width = FG_W;
win.height = FG_H;
 
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSWIN,(unsigned long)&win);
//cprintf("res = %d\n",res);
 
/* Set the buffer */
res = VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSFBUF,(unsigned long)(fbuf));
//cprintf("res = %d\n",res);
 
/* IMPORTANT: Set the aperiodic elaboration task
* This is a SHARK change on VIDIOCSYNC. When the
* new frame is ready, the task elaborate_task_PID
* is activated. Elabortate_task must be aperiodic !!
* To link the task to BTTV use this function: */
 
VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCSYNC,(unsigned long)(elaborate_task_PID));
 
}
 
/* Check if the frame grabber is ready */
volatile int ready_to_grab = 1;
 
void grab_command(void *arg) {
 
SYS_FLAGS f;
 
f = kern_fsave();
 
int on = 1;
VIDEODEV26_ioctl(FRAME_GRABBER_NUMBER,VIDIOCCAPTURE,(unsigned long)&on);
 
kern_frestore(f);
 
}
 
/* Elaboration task, it is called when the frame
grabber buffer is ready */
TASK elaborate_task(void *arg) {
 
struct video_buffer *fbuf = (struct video_buffer *)(arg);
char txt[100];
 
while(1) {
 
elaborate_image(fbuf->base);
//cprintf("E");
//Text version
//printf_xy(1,20,WHITE,"%08x",
// *(unsigned int *)(fbuf->base+50*320*3+50*3));
 
frame_number++;
sprintf(txt,"Elapsed Time = %u us Frame = %u",(int)(sys_gettime(NULL)),frame_number);
grx_text(txt, 10, 250, rgb16(255,255,255), 0);
 
ready_to_grab = 1;
 
#ifdef MAX_SPEED
grab_command(NULL);
#endif
 
task_testcancel();
task_endcycle();
 
}
 
return NULL;
 
}
 
/* Send the grab command */
TASK grab_task(void *arg) {
 
while(1) {
 
if (ready_to_grab) {
/* Grab */
grab_command(NULL);
 
//cprintf("G");
 
ready_to_grab = 0;
 
} else {
 
//cprintf("S");
/* Frame skipped */
 
}
 
task_testcancel();
task_endcycle();
}
return NULL;
 
}
 
extern void *video_memory;
 
void elaborate_image(void *imageptr)
{
 
WORD x,y;
BYTE *col;
 
#ifdef COLOR
 
for(y = 0; y < FG_H; y++)
for(x = 0; x < FG_W; x++) {
 
col = (BYTE *)(imageptr + y * FG_W * 3 + x * 3);
*(WORD *)(video_memory + y*(WIDTH*2) + (x*2)) = (WORD)rgb16(*(BYTE *)(col+2),*(BYTE *)(col+1),*(BYTE *)(col+0));
 
}
 
#else
 
for(y = 0; y < FG_H; y++)
for(x = 0; x < FG_W; x++) {
col = (BYTE *)(imageptr + y * FG_W + x);
*(WORD *)(video_memory + y*(WIDTH*2) + (x*2)) = (WORD)rgb16(*(BYTE *)(col),*(BYTE *)(col),*(BYTE *)(col));
}
 
#endif
 
}
 
int main(int argc, char **argv)
{
 
HARD_TASK_MODEL gt;
SOFT_TASK_MODEL et;
PID grab_task_pid,elaborate_task_pid;
 
struct video_buffer fbuf;
int channel = 0;
 
if (argc < 2) {
sys_shutdown_message("ERROR: Enter the input channel [ex> %s 0]\n",argv[0]);
sys_end();
}
 
channel = atoi(argv[1]);
 
soft_task_default_model(et);
soft_task_def_period(et,FG_PERIOD);
soft_task_def_arg(et,(void *)(&fbuf));
soft_task_def_met(et,FG_WCET);
soft_task_def_aperiodic(et);
soft_task_def_ctrl_jet(et);
hard_task_default_model(gt);
hard_task_def_mit(gt,FG_PERIOD);
hard_task_def_wcet(gt,5000);
hard_task_def_ctrl_jet(gt);
grab_task_pid = task_create("GrabTask",grab_task,&gt,NULL);
if (grab_task_pid == NIL) {
sys_shutdown_message("ERROR: Cannot create grab task\n");
sys_end();
}
 
elaborate_task_pid = task_create("ElaborateTask",elaborate_task,&et,NULL);
if (grab_task_pid == NIL) {
sys_shutdown_message("ERROR: Cannot create elaborate task\n");
sys_end();
}
 
#ifdef COLOR
 
fbuf.base = malloc(FG_W*FG_H*3);
fbuf.height = FG_H;
fbuf.width = FG_W;
fbuf.bytesperline = FG_W*3;
fbuf.depth = 24;
 
#else
 
fbuf.base = malloc(FG_W*FG_H);
fbuf.height = FG_H;
fbuf.width = FG_W;
fbuf.bytesperline = FG_W;
fbuf.depth = 8;
 
#endif
 
start_frame_grabber(elaborate_task_pid,channel,&fbuf);
 
#ifndef MAX_SPEED
/* Activate periodic grabbing */
task_activate(grab_task_pid);
#else
/* Grab */
grab_command(NULL);
#endif
 
while(keyb_getch(BLOCK) != ESC);
 
#ifndef MAX_SPEED
task_kill(grab_task_pid);
#endif
 
sleep(1);
 
sys_end();
 
return 0;
 
}
/demos/tags/rel_1_4/bttvdemo/initfile.c
0,0 → 1,177
/*
* Project: S.Ha.R.K
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://hartik.sssup.it
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/intdrive.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_pci26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
#include <drivers/shark_i2c26.h>
#include <drivers/shark_bttv26.h>
#include <drivers/shark_videodev26.h>
 
#define FRAME_BUFFER_DEVICE 0
#define FRAME_GRABBER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrup Server */
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
CBS_register_level(CBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
set_shutdown_task();
 
device_drivers_init();
 
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
int res;
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
PCI26_init();
 
I2C26_init();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
BTTV26_init();
 
FB26_init();
 
res = FB26_open(FRAME_BUFFER_DEVICE);
if (res) {
cprintf("Error: Cannot open graphical mode\n");
KEYB26_close();
INPUT26_close();
sys_end();
}
FB26_use_grx(FRAME_BUFFER_DEVICE);
FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
return 0;
 
}
 
int device_drivers_close() {
BTTV26_close();
 
FB26_close(FRAME_BUFFER_DEVICE);
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
/demos/tags/rel_1_4/bttvdemo/readme.txt
0,0 → 1,31
--------------------------------------
BTTV Frame Grabber Demo
 
by
 
Giacomo Guidi <giacomo@gandalf.sssup.it>
 
Last update 12/05/2004
--------------------------------------
Ex:
 
x bttv [channel number]
 
if the channel is not specified 0 is taken.
If you don't see a grabbed image, you
can try to set a channel number from 0 to 4.
 
This is a simple demo for the BTTV driver.
It starts the frame grabber at 25 fps 320x200.
 
--------------------------------------
 
The demo is composed by:
 
MAKEFILE The makefile used to compile the application
README.TXT This file
INITFILE.C The init file
BTTV.C The BTTV Demo
 
--------------------------------------
 
/demos/tags/rel_1_4/bttvdemo/makefile
0,0 → 1,16
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS = bttv
 
include $(BASE)/config/example.mk
 
bttv:
make -f $(SUBMAKE) APP=bttv INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__ __I2C__ __BTTV__"
 
/demos/tags/rel_1_4/advtimer/initfile.c
0,0 → 1,178
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
* (see the web pages for full authors list)
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
#include "kernel/kern.h"
#include "modules/intdrive.h"
#include "modules/edf.h"
#include "modules/hardcbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
#include "modules/cabs.h"
 
#include "drivers/shark_linuxc26.h"
#include "drivers/shark_input26.h"
#include "drivers/shark_keyb26.h"
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ IntDrive Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAGS 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAGS);
EDF_register_level(EDF_ENABLE_ALL);
HCBS_register_level(HCBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
CABS_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
//sys_set_reboot(EXIT_MODE_HALT);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
 
/demos/tags/rel_1_4/advtimer/makefile
0,0 → 1,17
#
#
#
 
ifndef BASE
BASE=../..
endif
include $(BASE)/config/config.mk
 
PROGS = advtimer
 
include $(BASE)/config/example.mk
 
# Text applications
advtimer:
make -f $(SUBMAKE) APP=advtimer INIT= OTHEROBJS="initfile.o" SHARKOPT="__LINUXC26__ __PCI__ __INPUT__"
 
/demos/tags/rel_1_4/advtimer/advtimer.c
0,0 → 1,161
/*
* Project: S.Ha.R.K.
*
* Coordinators:
* Giorgio Buttazzo <giorgio@sssup.it>
* Paolo Gai <pj@gandalf.sssup.it>
*
* Authors :
* Giacomo Guidi <giacomo@gandalf.sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://shark.sssup.it
*/
 
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
/*
* Advanced Timer Demo
*
*/
 
#include "kernel/kern.h"
#include "ll/i386/cons.h"
#include "ll/i386/advtimer.h"
 
#include "drivers/shark_keyb26.h"
 
#define UPDATE_PERIOD 10000
#define UPDATE_WCET 1000
 
extern unsigned int clk_per_msec;
extern unsigned int apic_clk_per_msec;
 
TASK Update(void *arg)
{
struct timespec actual_timer;
long nsec,sec,min,hrs,day;
long mean_delay,tot_delay,num_delay;
 
signed long long start,end,res;
struct timespec s_test,startts,endts;
 
task_nopreempt();
 
num_delay = tot_delay = mean_delay = 0;
 
while (1) {
 
if (clk_per_msec != 0) {
 
rdtscll(start);
sys_gettime(&actual_timer);
rdtscll(end);
res = end - start;
rdtscll(start);
rdtscll(end);
res -= (end - start);
s_test.tv_nsec = res * 1000000 / clk_per_msec;
 
 
} else {
 
sys_gettime(&startts);
sys_gettime(&actual_timer);
sys_gettime(&endts);
SUBTIMESPEC(&endts,&startts,&s_test);
sys_gettime(&startts);
sys_gettime(&endts);
SUBTIMESPEC(&endts,&startts,&endts);
SUBTIMESPEC(&s_test,&endts,&s_test);
 
}
 
if (tot_delay < 1000000000) {
tot_delay += s_test.tv_nsec;
num_delay ++;
mean_delay = tot_delay / num_delay;
}
nsec = actual_timer.tv_nsec;
sec = actual_timer.tv_sec;
min = sec / 60;
sec %= 60;
hrs = min / 60;
min %= 60;
day = hrs / 24;
hrs %= 24;
printf_xy(0,5,WHITE,"Actual CPU Clk/msec: %12d",clk_per_msec);
printf_xy(0,6,WHITE,"Actual APIC Clk/msec: %12d",apic_clk_per_msec);
printf_xy(0,7,WHITE,"Actual Timer: %2ld d %2ld h %2ld m %2ld s %12ld ns",day,hrs,min,sec,(long)nsec);
 
printf_xy(0,9,WHITE,"Timer Access Delay: %12ld ns",mean_delay);
task_endcycle();
 
}
 
}
 
void set_screen()
{
 
clear();
 
printf_xy(20,0,WHITE," Advanced Timer Demo ");
printf_xy(20,1,WHITE,"Giacomo Guidi <giacomo@gandalf.sssup.it>");
printf_xy(20,2,WHITE," Press Alt + c to exit ");
}
 
void program_key_end(KEY_EVT* e)
{
sys_end();
}
int main(int argc, char **argv)
{
HARD_TASK_MODEL mp; //Show current setting
PID update;
KEY_EVT k;
k.flag = ALTL_BIT;
k.scan = KEY_C;
k.ascii = 'c';
k.status = KEY_PRESSED;
keyb_hook(k,program_key_end,FALSE);
 
set_screen();
hard_task_default_model(mp);
hard_task_def_ctrl_jet(mp);
hard_task_def_group(mp, 1);
hard_task_def_wcet(mp,UPDATE_WCET);
hard_task_def_mit(mp,UPDATE_PERIOD);
hard_task_def_usemath(mp);
update = task_create("Update", Update, &mp, NULL);
if (update != NIL) task_activate(update);
 
return 0;
 
}
/demos/tags/rel_1_4/advtimer/readme.txt
0,0 → 1,31
--------------------------------------
Advanced Timer Demo
 
by
 
Giacomo Guidi <giacomo@gandalf.sssup.it>
 
Last update 23/04/2003
--------------------------------------
 
This demo shows the new timer management
code of S.Ha.R.K.
 
--------------------------------------
 
The demo is composed by:
 
MAKEFILE The makefile used to compile the application
README.TXT This file
INITFILE.C The init file
ADVTIMER.C The Advanced Timer Demo
 
--------------------------------------
 
To change the timer mode, you have to
modify shark.cfg and to recompile the
system
 
make clean
make
 
/demos/tags/rel_1_4/servo/load.c
0,0 → 1,46
#include "kernel/kern.h"
#include "drivers/shark_keyb26.h"
#include "unistd.h"
 
#include "servo.h"
 
#define N_SEND 10000
 
int main () {
 
int res, i = 0, k;
 
srand(sys_gettime(NULL));
 
cprintf("(Open Com2)");
res = servo_open(COM2, 19200);
cprintf("(Res = %d)",res);
 
cprintf("(Servo Turn On 0)");
res = servo_turn_on(COM2, 0);
cprintf("(Res = %d)",res);
 
while(i < N_SEND) {
 
cprintf("(Cycle = %d)",i);
 
k = rand() % 180 - 90;
 
cprintf("(Set Servo 0 %d)",k);
res = servo_set_angle_sec(COM2, 0, ANGLE2SEC(k,0,0));
cprintf("(Res = %d)",res);
 
udelay(100000);
 
i++;
 
}
 
servo_close(COM2);
 
sys_end();
 
return 0;
 
}
 
/demos/tags/rel_1_4/servo/initfile.c
0,0 → 1,152
/*
* Project: S.Ha.R.K
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://hartik.sssup.it
*/
 
#include "kernel/kern.h"
#include "modules/edf.h"
#include "modules/cbs.h"
#include "modules/rr.h"
#include "modules/dummy.h"
#include "modules/intdrive.h"
 
#include "modules/sem.h"
#include "modules/hartport.h"
 
#include <drivers/shark_linuxc26.h>
#include <drivers/shark_input26.h>
#include <drivers/shark_keyb26.h>
 
#define FRAME_BUFFER_DEVICE 0
 
/*+ sysyem tick in us +*/
#define TICK 0
 
/*+ RR tick in us +*/
#define RRTICK 10000
 
/*+ Interrupt Server +*/
#define INTDRIVE_Q 1000
#define INTDRIVE_T 10000
#define INTDRIVE_FLAG 0
 
void call_shutdown_task(void *arg);
int device_drivers_init();
int device_drivers_close();
void set_shutdown_task();
TASK shutdown_task_body(void *arg);
 
PID shutdown_task_PID = -1;
 
TIME __kernel_register_levels__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
EDF_register_level(EDF_ENABLE_ALL);
CBS_register_level(CBS_ENABLE_ALL, 1);
RR_register_level(RRTICK, RR_MAIN_YES, mb);
dummy_register_level();
 
SEM_register_module();
 
return TICK;
}
 
TASK __init__(void *arg)
{
struct multiboot_info *mb = (struct multiboot_info *)arg;
 
HARTPORT_init();
 
/* Create the shutdown task. It will be activated at RUNLEVEL
SHUTDOWN */
set_shutdown_task();
 
/* Init the drivers */
device_drivers_init();
 
/* Set the shutdown task activation */
sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
 
__call_main__(mb);
 
return (void *)0;
}
 
void set_shutdown_task() {
 
/* WARNING: the shutdown task is a background thread. It cannot execute
if the system is overloaded */
NRT_TASK_MODEL nrt;
 
nrt_task_default_model(nrt);
nrt_task_def_system(nrt);
 
shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
if (shutdown_task_PID == NIL) {
sys_shutdown_message("Error: Cannot create shutdown task\n");
sys_end();
}
 
}
 
int device_drivers_init() {
 
KEYB_PARMS kparms = BASE_KEYB;
LINUXC26_register_module();
 
INPUT26_init();
 
//keyb_def_ctrlC(kparms, NULL);
 
KEYB26_init(&kparms);
 
return 0;
 
}
 
int device_drivers_close() {
KEYB26_close();
INPUT26_close();
return 0;
}
 
#define SHUTDOWN_TIMEOUT_SEC 3
 
void call_shutdown_task(void *arg)
{
struct timespec t;
 
sys_gettime(&t);
t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
 
/* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
 
task_activate(shutdown_task_PID);
}
 
TASK shutdown_task_body(void *arg) {
 
device_drivers_close();
 
sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
 
sys_abort_shutdown(0);
 
return NULL;
 
}
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/servo/makefile
===================================================================
--- rel_1_4/servo/makefile (nonexistent)
+++ rel_1_4/servo/makefile (revision 1522)
@@ -0,0 +1,15 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = load
+
+include $(BASE)/config/example.mk
+
+load:
+ make -f $(SUBMAKE) APP=load INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __INPUT__ __SERVO__"
/rel_1_4/servo/makefile
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/servo/README
===================================================================
--- rel_1_4/servo/README (nonexistent)
+++ rel_1_4/servo/README (revision 1522)
@@ -0,0 +1,2 @@
+TODO
+
Index: rel_1_4/bca/initfile.c
===================================================================
--- rel_1_4/bca/initfile.c (nonexistent)
+++ rel_1_4/bca/initfile.c (revision 1522)
@@ -0,0 +1,230 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#define PI_MUTEX
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/hardcbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include "modules/pi.h"
+#include "modules/nop.h"
+
+#include "bca.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ HCBS_register_level(HCBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+ CABS_register_module();
+
+ PI_register_module();
+ NOP_register_module();
+
+ kern_init_bca();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ /* Create the shutdown task. It will be activated at RUNLEVEL
+ SHUTDOWN */
+ set_shutdown_task();
+
+ /* Init the drivers */
+ device_drivers_init();
+
+ /* Set the shutdown task activation */
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+#ifdef PI_MUTEX
+int app_mutex_init(mutex_t *m)
+{
+ PI_mutexattr_t attr;
+
+ PI_mutexattr_default(attr);
+
+ return mutex_init(m, &attr);
+}
+#else
+int app_mutex_init(mutex_t *m)
+{
+ NOP_mutexattr_t attr;
+
+ NOP_mutexattr_default(attr);
+
+ return mutex_init(m, &attr);
+}
+#endif
+
+void set_shutdown_task() {
+
+ /* WARNING: the shutdown task is a background thread. It cannot execute
+ if the system is overloaded */
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"800x600-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
Index: rel_1_4/bca/esplo.c
===================================================================
--- rel_1_4/bca/esplo.c (nonexistent)
+++ rel_1_4/bca/esplo.c (revision 1522)
@@ -0,0 +1,94 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: esplo.c,v 1.5 2004-05-26 09:25:06 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//************************
+//* file: esplo.c *
+//* included by: bca.c *
+//************************
+
+#include <time.h>
+
+PID crea_soft_esplo(int index)
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_arg(m,(void*)index);
+ soft_task_def_period(m,ESPLO_PERIOD*2);
+ soft_task_def_wcet(m,ESPLO_WCET*10);
+ soft_task_def_met(m,ESPLO_MET*10);
+
+ pid = task_create("esplo", esplo, &m, NULL);
+ return pid;
+}
+
+TASK esplo(void *argv)
+{
+ int i;
+ int index;
+ WORD xx0, yy0, xx1, yy1;
+ struct timespec delay;
+
+
+ delay.tv_sec = 0;
+ delay.tv_nsec = 20000000;
+ i=0;
+ index = (int)argv;
+ xx0 = aereo_table[index].x - ESPLO_LX/2;
+ yy0 = aereo_table[index].y - ESPLO_LY/2;
+ xx1 = xx0 + ESPLO_LX-1;
+ yy1 = yy0 + ESPLO_LY-1;
+
+ for(i=0;i<5;i++) {
+ mutex_lock(&grx_mutex);
+ FAB_image_put_within(image_esplo[i],xx0,yy0,X0,Y0,X1,Y1);
+ mutex_unlock(&grx_mutex);
+ task_endcycle();
+ }
+
+ mutex_lock(&grx_mutex);
+ FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ mutex_unlock(&grx_mutex);
+
+ return 0;
+
+}
Index: rel_1_4/bca/missile.c
===================================================================
--- rel_1_4/bca/missile.c (nonexistent)
+++ rel_1_4/bca/missile.c (revision 1522)
@@ -0,0 +1,202 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: missile.c,v 1.3 2004-05-25 18:24:59 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//**************************
+//* file: missile.c *
+//* included by: bca.c *
+//**************************
+
+PID crea_hard_missile(int index);
+PID crea_soft_missile(int index);
+PID crea_soft_esplo(int index);
+
+TASK missile(void *arg)
+{
+ PID esplo_pid;
+ int img;
+ int i, index; // indice nella cannone_table
+ int distx, disty;
+ int xx0,yy0,xx1,yy1;
+ double vel, acc;
+ double a;
+ double y;
+ double x;
+ double old_x; // [pixel]: conserva valore x prima di aggiornare
+ double old_y;
+ double dx; // [pixel/us]: spostamento periodico
+ double dy;
+ int first_time;
+ int killing;
+
+ index = (int)arg;
+ img=0;
+ y = MISSILE_Y_MAX;
+ x = cannone_table[index].x;
+ a = FAB_rad(270);
+ vel = MISSILE_V_MIN;
+ acc = MISSILE_ACC_MIN;
+ dx = 0;
+ dy = 0;
+
+ first_time = 1;
+ killing = 0;
+
+ while(1){
+
+ old_x = x;
+ old_y = y;
+
+ if (vel<MISSILE_V_MAX) {
+ vel += acc*MISSILE_PERIOD/(60*60*1000000.0);
+ if (vel>MISSILE_V_MAX) vel = MISSILE_V_MAX;
+ }
+ if (acc<MISSILE_ACC_MAX) {
+ acc += MISSILE_ACC_MIN;
+ if (acc>MISSILE_ACC_MAX) acc = MISSILE_ACC_MAX;
+ }
+
+ cannone_table[index].missile_vel=vel;
+
+ dx = cos(a)*vel * (X1-X0) / (double)BASE_L
+ * (MISSILE_PERIOD / (60*60*1000000.0));
+ dy = sin(a)*vel * (Y1-Y0) / ((double)BASE_H/1000)
+ * (MISSILE_PERIOD / (60*60*1000000.0));
+
+ x += dx;
+ y += dy;
+
+ xx0 = old_x - MISSILE_LX/2;
+ yy0 = old_y - MISSILE_LY/2;
+ xx1 = xx0 + MISSILE_LX-1;
+ yy1 = yy0 + MISSILE_LY-1;
+
+ if (x<MISSILE_X_MIN || x>MISSILE_X_MAX
+ || y<MISSILE_Y_MIN || y>MISSILE_Y_MAX) {
+ killing = 1;
+ }
+
+ if (killing) {
+ if (!first_time) {
+ mutex_lock(&grx_mutex);
+ FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ mutex_unlock(&grx_mutex);
+ }
+ cannone_table[index].fire = 0;
+ //il task cannone si accorge che il suo missile ha finito
+ // quindi ne ricreer… uno nuovo in caso di bersaglio!!!
+ return NULL;
+ }
+
+ if ( (int)x != (int)old_x
+ ||(int)y != (int)old_y ) {//...se c'Š lo spostamento reale
+ // di almeno un pixel...
+ mutex_lock(&grx_mutex); //...aggiorna disegno...
+ if (first_time) {
+ first_time=0;
+ }
+ else {
+ if (yy1<Y1-CANNONE_LY) FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ else FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,Y1-CANNONE_LY);
+ }
+
+ FAB_image_put_within(image_missile[img++], x - MISSILE_LX/2, y - MISSILE_LY/2,
+ X0, Y0,
+ X1, Y1-CANNONE_LY);
+ mutex_unlock(&grx_mutex);
+ if (img==2) img = 0;
+ }
+
+ //Ha colpito un aereo?
+ for (i=0; i<AEREO_N_MAX; i++)
+ if (aereo_table[i].status){
+ distx = aereo_table[i].x-x;
+ disty = aereo_table[i].y-y;
+ if (distx<0) distx *= -1;
+ if (disty<0) disty *= -1;
+ if ( distx<(AEREO_LX+MISSILE_LX)/2-1
+ &&disty<(AEREO_LY+MISSILE_LY)/2-1 ) { // BERSAGLIO COLPITO!
+ esplo_pid = crea_soft_esplo(i);
+ task_activate(esplo_pid);
+ killing=1;
+ aereo_table[i].killing=1;
+ break;
+ }
+ }
+
+ task_endcycle();
+ }
+
+return NULL;
+}
+
+
+PID crea_hard_missile(int index)
+{
+ HARD_TASK_MODEL m;
+ PID pid;
+
+ hard_task_default_model(m);
+ hard_task_def_level(m,1);
+ hard_task_def_arg(m,(void*)index);
+ hard_task_def_periodic(m);
+ hard_task_def_wcet(m, MISSILE_WCET);
+ hard_task_def_mit(m,MISSILE_PERIOD);
+
+ pid = task_create("hard_missile", missile, &m, NULL);
+ return pid;
+}
+
+PID crea_soft_missile(int index)
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_level(m,2);
+ soft_task_def_arg(m,(void*)index);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,MISSILE_PERIOD);
+ soft_task_def_wcet(m, MISSILE_WCET);
+ soft_task_def_met(m,MISSILE_MET);
+
+ pid = task_create("soft_missile", missile, &m, NULL);
+ return pid;
+}
Index: rel_1_4/bca/cannone.c
===================================================================
--- rel_1_4/bca/cannone.c (nonexistent)
+++ rel_1_4/bca/cannone.c (revision 1522)
@@ -0,0 +1,218 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: cannone.c,v 1.3 2004-05-25 18:24:59 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//**************************
+//* file: cannone.c *
+//* included by: bca.c *
+//**************************
+
+TASK cannone_creator(void * arg)
+{ int i, index, last;
+ WORD count;
+ PID pid=-1;
+
+ while(1){
+
+ count=0;
+ index=-1;
+ last=-1;
+
+ for (i=0; i<CANNONE_N_MAX; i++) // Conteggio aerei attivi
+ if (cannone_table[i].status) {
+ count++;
+ last=i; //...ultima posizione occupata in tabella...
+ }
+ else {
+ if (index==-1) index=i; //...prima posizione libera in tabella...
+ }
+
+ if (count<cannone_count && index!=-1) { // Richiesta nuovo cannone
+ cannone_table[index].status = 1; //...occupa posizione...
+ cannone_table[index].killing = 0; //...disattiva richiesta di kill...
+ if (index==0) pid = crea_hard_cannone(index); // sempre il 1ø hard
+ else pid = crea_soft_cannone(index); // tutti gli altri soft
+ cannone_table[index].pid = pid;
+ if (pid!=NIL) task_activate(pid);
+ else { //ripristino il posto libero in tabella;
+ cannone_table[index].status = -2;
+ cannone_table[index].killing = -2;
+ }
+ }
+
+ else if (count>cannone_count) { // Richiesta cancellazione cannone
+ cannone_table[last].killing = 1;
+ }
+
+ task_endcycle();
+ }
+ return NULL;
+}
+
+PID crea_soft_cannone_creator();
+PID crea_hard_cannone(int index);
+PID crea_hard_cannone(int index);
+
+PID crea_hard_missile(int index);
+PID crea_soft_missile(int index);
+
+TASK cannone(void *arg)
+{
+ PID missile_pid=-2;
+ int i, index; // indice nella aereo_table e cannone_table
+ int d, dir;
+ int xx0,yy0,xx1,yy1;
+ int first_time;
+
+ index = (int)arg;
+ first_time = 1;
+ if (index%2) {
+ //indice dispari
+ xx0 = X0 + 500/2 - CANNONE_LX/2 + 500/(CANNONE_N_MAX+1)*(index+1)/2;
+ }
+ else {
+ //indice pari
+ xx0 = X0 + 500/2 - CANNONE_LX/2 - 500/(CANNONE_N_MAX+1)*(index/2);
+ }
+ xx1 = xx0 + CANNONE_LX;
+ yy0= Y1 - CANNONE_LY;
+ yy1= Y1;
+
+ cannone_table[index].x = xx0 + CANNONE_LX/2;
+
+ while(1){
+
+ if (cannone_table[index].killing) {
+ if (!first_time) {
+ mutex_lock(&grx_mutex);
+ FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ mutex_unlock(&grx_mutex);
+ }
+ cannone_table[index].status=0;
+ cannone_table[index].pid=-2;
+ cannone_table[index].killing=0;
+ //il task aereo_creator si accorge che c'Š un aereo in meno
+ // quindi ne ricreer… uno nuovo!!!
+ return NULL;
+ }
+
+ if (first_time) {
+ mutex_lock(&grx_mutex); //...aggiorna disegno...
+ if (index==0) FAB_image_put(image_cannone[1], xx0, yy0);
+ else FAB_image_put(image_cannone[0], xx0, yy0);
+ mutex_unlock(&grx_mutex);
+ first_time=0;
+ }
+
+ if (!cannone_table[index].fire) {
+ for (i=0; i<AEREO_N_MAX; i++) {
+ if (aereo_table[i].status) {
+ d = aereo_table[i].x - (xx0+CANNONE_LX/2);
+ dir = aereo_table[i].dir;
+ if (d*dir<0 && FAB_ABS(d)<=CANNONE_SENSIBILITA/1000.0*500/BASE_L) {
+ // FA F U O C O
+ if (index==0) missile_pid=crea_hard_missile(index);
+ else missile_pid=crea_soft_missile(index);
+ if (missile_pid!=NIL) {
+ cannone_table[index].fire = 1;
+ task_activate(missile_pid);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ task_endcycle();
+ }
+
+return NULL;
+}
+
+
+
+PID crea_soft_cannone_creator()
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,CANNONE_CREATOR_PERIOD);
+ soft_task_def_wcet(m,CANNONE_CREATOR_WCET);
+ soft_task_def_met(m,CANNONE_CREATOR_MET);
+
+ pid = task_create("cannone_creator", cannone_creator, &m, NULL);
+ return pid;
+}
+
+PID crea_hard_cannone(int index)
+{
+ HARD_TASK_MODEL m;
+ PID pid;
+
+ hard_task_default_model(m);
+ hard_task_def_level(m,1);
+ hard_task_def_arg(m,(void*)index);
+ hard_task_def_periodic(m);
+ hard_task_def_wcet(m, CANNONE_WCET);
+ hard_task_def_mit(m,CANNONE_PERIOD);
+
+ pid = task_create("hard_cannone", cannone, &m, NULL);
+ return pid;
+}
+
+PID crea_soft_cannone(int index)
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_level(m,2);
+ soft_task_def_arg(m,(void*)index);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,CANNONE_PERIOD);
+ soft_task_def_wcet(m, CANNONE_WCET);
+ soft_task_def_met(m,CANNONE_MET);
+
+ pid = task_create("soft_cannone", cannone, &m, NULL);
+ return pid;
+}
+
Index: rel_1_4/bca/aereo.c
===================================================================
--- rel_1_4/bca/aereo.c (nonexistent)
+++ rel_1_4/bca/aereo.c (revision 1522)
@@ -0,0 +1,241 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: aereo.c,v 1.2 2004-05-25 18:24:59 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//************************
+//* file: aereo.c *
+//* included by: bca.c *
+//************************
+
+TASK aereo_creator(void * arg)
+{ int i, index, last;
+ WORD count;
+ PID pid=-1;
+ COLOR col;
+ double vel;
+ int dir;
+ WORD h;
+ double l;
+ WORD x, y;
+
+ while(1){
+
+ count=0;
+ index=-1;
+ last=-1;
+
+ for (i=0; i<AEREO_N_MAX; i++) // Conteggio aerei attivi
+ if (aereo_table[i].status) {
+ count++;
+ last=i; //...ultima posizione occupata in tabella...
+ }
+ else {
+ if (index==-1) index=i; //...prima posizione libera in tabella...
+ }
+
+ if (count<aereo_count && index!=-1) { // Richiesta nuovo aereo
+ aereo_table[index].status = 1; //...occupa posizione...
+ aereo_table[index].killing = 0; //...disattiva richiesta di kill...
+ col = FAB_rgb(FAB_int_rand(50,255), //...nuovo colore...
+ FAB_int_rand(50,255),
+ FAB_int_rand(50,255));
+ vel = FAB_double_rand(AEREO_V_MIN,AEREO_V_MAX); //...velocita'...
+ dir = FAB_sign_rand(); //...direzione...
+ h = FAB_int_rand(AEREO_H_MIN,AEREO_H_MAX); //...altezza...
+ y = Y0 + 500 - h*500/BASE_H;
+ l = (dir>0) ? AEREO_L_MIN : AEREO_L_MAX; //...posizione iniz...
+ x = (dir>0) ? AEREO_X_MIN : AEREO_X_MAX;
+ // ... settaggio valori in tabella ...
+ aereo_table[index].color = col;
+ if (index>0) {
+ if (dir>0) FAB_image_copy(image_aereo[0],aereo_table[index].image);
+ else FAB_image_copy(image_aereo[1],aereo_table[index].image);
+ }
+ else {
+ if (dir>0) FAB_image_copy(image_aereo[2],aereo_table[index].image);
+ else FAB_image_copy(image_aereo[3],aereo_table[index].image);
+ }
+ FAB_image_color_change(aereo_table[index].image,AEREO_BASE_COL,col);
+ aereo_table[index].vel = vel;
+ aereo_table[index].dir = dir;
+ aereo_table[index].h = h;
+ aereo_table[index].l = l;
+ aereo_table[index].x = x;
+ aereo_table[index].y = y;
+ if (index==0) pid = crea_hard_aereo(index); // sempre il 1ø hard
+ else pid = crea_soft_aereo(index); // tutti gli altri soft
+ aereo_table[index].pid = pid;
+ if (pid!=NIL) task_activate(pid);
+ else { //ripristino il posto libero in tabella;
+ aereo_table[index].status = 0;
+ aereo_table[index].killing = 0;
+ }
+ }
+
+ else if (count>aereo_count) { // Richiesta cancellazione aereo
+ aereo_table[last].killing = 1;
+ }
+
+ task_endcycle();
+ }
+ return NULL;
+}
+
+TASK aereo(void *arg)
+{
+ int index; // indice nella aereo_table
+ FAB_IMAGE* image;
+ int xx0,yy0,xx1,yy1;
+ int y;
+ double x;
+ double old_x; // [pixel]: conserva valore x prima di aggiornare
+ double dx; // [pixel/us]: spostamento periodico
+ int first_time;
+
+ index = (int)arg;
+ image = aereo_table[index].image;
+ y = aereo_table[index].y;
+ x = aereo_table[index].x;
+ dx = aereo_table[index].vel * (AEREO_X_MAX-AEREO_X_MIN) / (double)BASE_L
+ * (AEREO_PERIOD / (60*60*1000000.0))
+ * aereo_table[index].dir;
+ first_time = 1;
+
+ while(1){
+
+ old_x = x;
+ x += dx;
+
+ xx0 = old_x - AEREO_LX/2;
+ yy0 = y - AEREO_LY/2;
+ xx1 = xx0 + AEREO_LX - 1;
+ yy1 = yy0 + AEREO_LY - 1;
+
+ aereo_table[index].x = x; //...aggiornamento posizione in tabella...
+
+ if (x<AEREO_X_MIN || x>AEREO_X_MAX) {
+ aereo_table[index].killing = 1;
+ }
+
+ if (aereo_table[index].killing) {
+ if (!first_time) {
+ mutex_lock(&grx_mutex);
+ FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ mutex_unlock(&grx_mutex);
+ }
+ aereo_table[index].status=0;
+ aereo_table[index].pid=-2;
+ aereo_table[index].killing=0;
+ //il task aereo_creator si accorge che c'Š un aereo in meno
+ // quindi ne ricreer… uno nuovo!!!
+ return NULL;
+ }
+
+ if(aereo_table[index].x!=(int)old_x) {//...se c'Š lo spostamento reale
+ // di almeno un pixel...
+ mutex_lock(&grx_mutex); //...aggiorna disegno...
+ if (first_time) {
+ first_time=0;
+ }
+ else {
+ FAB_image_put_within(image_bca,X0,Y0,xx0,yy0,xx1,yy1);
+ }
+
+ FAB_image_put_within(image, x - AEREO_LX/2, y - AEREO_LY/2,
+ X0, Y0, X1, Y1);
+ mutex_unlock(&grx_mutex);
+ }
+
+ task_endcycle();
+ }
+
+return NULL;
+}
+
+PID crea_soft_aereo_creator()
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,AEREO_CREATOR_PERIOD);
+ soft_task_def_wcet(m,AEREO_CREATOR_WCET);
+ soft_task_def_met(m,AEREO_CREATOR_MET);
+
+ pid = task_create("aereo_creator", aereo_creator, &m, NULL);
+ return pid;
+}
+
+PID crea_hard_aereo(int index)
+{
+ HARD_TASK_MODEL m;
+ PID pid;
+
+ hard_task_default_model(m);
+ hard_task_def_level(m,1);
+ hard_task_def_arg(m,(void*)index);
+ hard_task_def_periodic(m);
+ hard_task_def_wcet(m, AEREO_WCET);
+ hard_task_def_mit(m,AEREO_PERIOD);
+ hard_task_def_usemath(m);
+
+ pid = task_create("hard_aereo", aereo, &m, NULL);
+ return pid;
+}
+
+PID crea_soft_aereo(int index)
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_level(m,2);
+ soft_task_def_arg(m,(void*)index);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,AEREO_PERIOD);
+ soft_task_def_wcet(m, AEREO_WCET);
+ soft_task_def_met(m,AEREO_MET);
+ soft_task_def_usemath(m);
+
+ pid = task_create("soft aereo", aereo, &m, NULL);
+ return pid;
+}
+
Index: rel_1_4/bca/bca_lib.c
===================================================================
--- rel_1_4/bca/bca_lib.c (nonexistent)
+++ rel_1_4/bca/bca_lib.c (revision 1522)
@@ -0,0 +1,412 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: bca_lib.c,v 1.4 2004-05-23 08:59:27 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: BCA_LIB.c *
+ * libreria: BCA_LIB *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************/
+
+#ifndef __BCA_LIB_c__
+#define __BCA_LIB_c__
+//-------------------BEGIN---------------------------
+
+// *** Librerie S.Ha.R.K ***
+#include<kernel/kern.h>
+
+#include<drivers/shark_fb26.h>
+
+// *** Librerie Standard C ***
+// *** Librerie FAB ***
+#include"fab_lib/fab_msg.h"
+// *** Librerie BCA ***
+#include"bca.h"
+
+char * titolo[10]={" UNIVERSITA' DEGLI \0",
+ " STUDI DI \0",
+ " PAVIA \0",
+ "Progetto S.Ha.R.K.\0",
+ " 'BaseContrAerea' \0",
+ "-------------------\0",
+ " PAVIA 2002 \0",
+ "by Fabio CALABRESE \0",
+ "<fabiocalabrese77 \0",
+ " @yahoo.it>\0"};
+
+void kern_alloc_images(); // richiede DISABLED_INTERUPTS
+void kern_free_images(); // richiede DISABLED_INTERUPTS
+void kern_load_images(); // solo in __kernel_register_levels__()
+
+void kern_alloc_borders(); // richiede DISABLED_INTERUPTS
+void kern_free_borders(); // richiede DISABLED_INTERUPTS
+void kern_set_border(); // consigliato in __kernel_register-levels__()
+
+void kern_alloc_frames(); // richiede DISABLED_INTERUPTS
+void kern_free_frames(); // richiede DISABLED_INTERUPTS
+void kern_set_frames(); // consigliato in __kernel_register-levels__()
+
+void kern_alloc_ballframes(); // richiede DISABLED_INTERUPTS
+void kern_free_ballframes(); // richiede DISABLED_INTERUPTS
+void kern_set_ballframes(); // consigliato in __kernel_register-levels__()
+
+void kern_alloc_task_tables(); // richiede DISABLED_INTERUPTS
+void kern_free_task_tables(); // richiede DISABLED_INTERUPTS
+void kern_set_task_tables(); // consigliato in __kernel_register-levels__()
+
+void kern_alloc_task_tables()
+{
+ int test=0,j;
+
+ FAB_print("TASKS'TABLES","allocazione...");
+ for (j=0; j<AEREO_N_MAX; j++) {
+ aereo_table[j].image=FAB_image_alloc(AEREO_LX,AEREO_LY);
+ if(aereo_table[j].image==NULL) test=1;
+ }
+ FAB_msg(test,"fatto","almeno un elemento della tabella non allocato");
+}
+void kern_free_task_tables()
+{ int j;
+
+ for (j=0; j<AEREO_N_MAX; j++) {
+ FAB_image_free(aereo_table[j].image);
+ }
+}
+void kern_set_task_tables()
+{ int j;
+
+ FAB_print(NULL,"settaggio...");
+ for (j=0; j<AEREO_N_MAX; j++) {
+ aereo_table[j].status = 0;
+ aereo_table[j].killing = 0;
+ aereo_table[j].image->trasparent = 1;
+ aereo_table[j].image->trasparent_col = AEREO_TRASPARENT_COL;
+ }
+
+ FAB_print(NULL,"fatto");
+}
+
+
+void kern_alloc_ballframes()
+{
+ int test=0,j;
+
+ FAB_print("FAB_BALLFRAMEs","allocazione...");
+ ballframe_radar = FAB_ballframe_alloc();
+ if (ballframe_radar==NULL) test=1;
+ for (j=0; j<3; j++) {
+ ballframe_lucerossa[j] = FAB_ballframe_alloc();
+ if (ballframe_lucerossa[j]==NULL) test=1;
+ }
+ FAB_msg(test,"fatto","almeno un ballframe non allocato");
+}
+void kern_free_ballframes()
+{ int j;
+
+ FAB_ballframe_free(ballframe_radar);
+ for (j=0; j<3; j++)
+ FAB_ballframe_free(ballframe_lucerossa[j]);
+}
+void kern_set_ballframes()
+{ int j;
+
+ FAB_print(NULL,"settaggio...");
+ FAB_ballframe_border_set(ballframe_radar,border_verde7,7,
+ FRAME_MISURE_LINE_COLOR);
+ FAB_ballframe_color_set(ballframe_radar,0,FAB_blue);
+ for(j=0; j<3; j++) {
+ FAB_ballframe_border_set(ballframe_lucerossa[j],border_verde7,7,
+ FRAME_MISURE_LINE_COLOR);
+ FAB_ballframe_color_set(ballframe_lucerossa[j],0,FAB_red);
+ }
+ FAB_print(NULL,"fatto");
+}
+
+void kern_alloc_frames()
+{
+ int test=0;
+
+ FAB_print("FAB_FRAMEs","allocazione...");
+ frame_bca = FAB_frame_alloc();
+ if (frame_bca==NULL) test=1;
+ frame_misure_oriz = FAB_frame_alloc();
+ if (frame_misure_oriz==NULL) test=1;
+ frame_misure_vert = FAB_frame_alloc();
+ if (frame_misure_vert==NULL) test=1;
+ frame_titolo = FAB_frame_alloc();
+ if (frame_titolo==NULL) test=1;
+ frame_comandi = FAB_frame_alloc();
+ if (frame_comandi==NULL) test=1;
+ frame_control = FAB_frame_alloc();
+ if (frame_control==NULL) test=1;
+
+ FAB_msg(test,"fatto","almeno un frame non allocato");
+}
+void kern_free_frames()
+{
+ FAB_frame_free(frame_bca);
+ FAB_frame_free(frame_misure_oriz);
+ FAB_frame_free(frame_misure_vert);
+ FAB_frame_free(frame_titolo);
+ FAB_frame_free(frame_comandi);
+ FAB_frame_free(frame_control);
+
+}
+
+void kern_set_frames()
+{
+ FAB_print(NULL,"settaggio...");
+ FAB_frame_border_set(frame_bca,border_blu7,7,FAB_rgb(255,0,0));
+ FAB_frame_color_set(frame_bca,0,image_bca,FAB_green);
+ FAB_frame_border_set(frame_misure_oriz,border_verde7,7,FRAME_MISURE_LINE_COLOR);
+ FAB_frame_color_set(frame_misure_oriz,0,NULL,FRAME_MISURE_BACK_COLOR);
+ FAB_frame_border_set(frame_misure_vert,border_verde7,7,FRAME_MISURE_LINE_COLOR);
+ FAB_frame_color_set(frame_misure_vert,0,NULL,FRAME_MISURE_BACK_COLOR);
+ FAB_frame_border_set(frame_titolo,border_bianco7,7,FAB_white);
+ FAB_frame_color_set(frame_titolo,0,NULL,FRAME_TITOLO_BACK_COLOR1);
+ FAB_frame_border_set(frame_comandi,border_giallo7,7,FAB_yellow);
+ FAB_frame_color_set(frame_comandi,0,NULL,FRAME_COMANDI_BACK_COLOR1);
+ FAB_frame_border_set(frame_control,border_verde7,7,FAB_green);
+ FAB_frame_color_set(frame_control,0,NULL,FRAME_CONTROL_BACK_COLOR);
+
+ FAB_print(NULL,"fatto");
+}
+
+void kern_alloc_borders()
+{
+ int test=0;
+
+ FAB_print("FAB_BORDERs","allocazione...");
+ border_blu7 = FAB_border_alloc(7);
+ if (border_blu7==NULL) test=1;
+ border_verde7 = FAB_border_alloc(7);
+ if (border_verde7==NULL) test=1;
+ border_rosso7 = FAB_border_alloc(7);
+ if (border_rosso7==NULL) test=1;
+ border_bianco7 = FAB_border_alloc(7);
+ if (border_bianco7==NULL) test=1;
+ border_giallo7 = FAB_border_alloc(7);
+ if (border_giallo7==NULL) test=1;
+
+ FAB_msg(test,"fatto","almeno un bordo non allocato");
+}
+void kern_free_borders()
+{
+ FAB_border_free(border_blu7);
+ FAB_border_free(border_verde7);
+ FAB_border_free(border_rosso7);
+ FAB_border_free(border_bianco7);
+ FAB_border_free(border_giallo7);
+}
+
+void kern_set_borders()
+{
+ FAB_print(NULL,"settaggio...");
+ border_blu7->buf[0]=FAB_rgb( 0, 0, 50);
+ border_blu7->buf[1]=FAB_rgb( 0, 50,200);
+ border_blu7->buf[2]=FAB_rgb( 50,100,255);
+ border_blu7->buf[3]=FAB_rgb(100,150,255);
+ border_blu7->buf[4]=FAB_rgb( 50,100,255);
+ border_blu7->buf[5]=FAB_rgb( 0, 50,200);
+ border_blu7->buf[6]=FAB_rgb( 0, 0, 50);
+
+ border_verde7->buf[0]=FAB_rgb( 0, 50, 0);
+ border_verde7->buf[1]=FAB_rgb( 0,100, 50);
+ border_verde7->buf[2]=FAB_rgb( 50,255,100);
+ border_verde7->buf[3]=FAB_rgb(100,255,150);
+ border_verde7->buf[4]=FAB_rgb( 50,255,100);
+ border_verde7->buf[5]=FAB_rgb( 0,100, 50);
+ border_verde7->buf[6]=FAB_rgb( 0, 50, 0);
+
+ border_rosso7->buf[0]=FAB_rgb( 50, 0, 0);
+ border_rosso7->buf[1]=FAB_rgb(200, 25, 25);
+ border_rosso7->buf[2]=FAB_rgb(255, 75, 75);
+ border_rosso7->buf[3]=FAB_rgb(255,125,125);
+ border_rosso7->buf[4]=FAB_rgb(255, 75, 75);
+ border_rosso7->buf[5]=FAB_rgb(200, 25, 25);
+ border_rosso7->buf[6]=FAB_rgb( 50, 0, 0);
+
+ border_bianco7->buf[0]=FAB_rgb( 25, 25, 25);
+ border_bianco7->buf[1]=FAB_rgb( 75, 75, 75);
+ border_bianco7->buf[2]=FAB_rgb(125,125,125);
+ border_bianco7->buf[3]=FAB_rgb(255,255,255);
+ border_bianco7->buf[4]=FAB_rgb(125,125,125);
+ border_bianco7->buf[5]=FAB_rgb( 75, 75, 75);
+ border_bianco7->buf[6]=FAB_rgb( 25, 25, 25);
+
+ border_giallo7->buf[0]=FAB_rgb( 25, 25, 0);
+ border_giallo7->buf[1]=FAB_rgb(115,115, 25);
+ border_giallo7->buf[2]=FAB_rgb(170,170, 75);
+ border_giallo7->buf[3]=FAB_rgb(255,255,100);
+ border_giallo7->buf[4]=FAB_rgb(170,170, 75);
+ border_giallo7->buf[5]=FAB_rgb(115,115, 25);
+ border_giallo7->buf[6]=FAB_rgb( 25, 25, 0);
+
+ FAB_print(NULL,"fatto");
+}
+
+void kern_alloc_images()
+{
+ int j,test=0;
+
+ FAB_print("FAB_IMAGEs","allocazione...");
+
+ image_missile[0] = FAB_image_alloc(MISSILE_LX,MISSILE_LY);
+ if (image_missile[0]==NULL) test=1;
+ image_missile[1] = FAB_image_alloc(MISSILE_LX,MISSILE_LY);
+ if (image_missile[1]==NULL) test=1;
+
+ for (j=0; j<2; j++) {
+ image_cannone[j] = FAB_image_alloc(CANNONE_LX,CANNONE_LY);
+ if (image_cannone[j]==NULL) test=1;
+ }
+
+ for (j=0; j<4; j++) {
+ image_aereo[j] = FAB_image_alloc(AEREO_LX,AEREO_LY);
+ if (image_aereo[j]==NULL) test=1;
+ }
+
+ for (j=0; j<5; j++) {
+ image_esplo[j] = FAB_image_alloc(ESPLO_LX,ESPLO_LY);
+ if (image_esplo[j]==NULL) test=1;
+ }
+
+ image_sfondo = FAB_image_alloc(96,96);
+ if (image_sfondo==NULL) test=1;
+
+ image_bca = FAB_image_alloc(500,500);
+ if (image_bca==NULL) test=1;
+
+ FAB_msg(test,"fatto","almeno un'immagine non allocata");
+}
+void kern_free_images()
+{
+ int j;
+
+ FAB_image_free(image_missile[0]);
+ FAB_image_free(image_missile[1]);
+ for (j=0; j<2; j++) FAB_image_free(image_cannone[j]);
+ for (j=0; j<4; j++) FAB_image_free(image_aereo[j]);
+ for (j=0; j<5; j++) FAB_image_free(image_esplo[j]);
+ FAB_image_free(image_sfondo);
+ FAB_image_free(image_bca);
+}
+
+void kern_load_images()
+{ int test=0;
+
+ FAB_print(NULL,"caricamento dai file...");
+
+ FAB_print(NULL," [missile1.raw]...");
+ if(FAB_image_load(image_missile[0],"BCA_raw/missile1.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_missile[0],MISSILE_TRASPARENT_COL);
+ FAB_print(NULL," [missile2.raw]...");
+ if(FAB_image_load(image_missile[1],"BCA_raw/missile2.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_missile[1],MISSILE_TRASPARENT_COL);
+
+ FAB_print(NULL," [aereo1.raw]...");
+ if(FAB_image_load(image_aereo[0],"BCA_raw/aereo1.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_aereo[0],AEREO_TRASPARENT_COL);
+ FAB_print(NULL," [aereo2.raw]...");
+ if(FAB_image_load(image_aereo[1],"BCA_raw/aereo2.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_aereo[1],AEREO_TRASPARENT_COL);
+ FAB_print(NULL," [aereo1_h.raw]...");
+ if(FAB_image_load(image_aereo[2],"BCA_raw/aereo1_h.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_aereo[2],AEREO_TRASPARENT_COL);
+ FAB_print(NULL," [aereo2_h.raw]...");
+ if(FAB_image_load(image_aereo[3],"BCA_raw/aereo2_h.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_aereo[3],AEREO_TRASPARENT_COL);
+
+ FAB_print(NULL," [cannon.raw]...");
+ if(FAB_image_load(image_cannone[0],"BCA_raw/cannon.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_cannone[0],CANNONE_TRASPARENT_COL);
+ FAB_print(NULL," [cannon_h.raw]...");
+ if(FAB_image_load(image_cannone[1],"BCA_raw/cannon_h.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_cannone[1],CANNONE_TRASPARENT_COL);
+
+ FAB_print(NULL," [esplo1.raw]...");
+ if(FAB_image_load(image_esplo[0],"BCA_raw/esplo1.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_esplo[0],ESPLO_TRASPARENT_COL);
+ FAB_print(NULL," [esplo2.raw]...");
+ if(FAB_image_load(image_esplo[1],"BCA_raw/esplo2.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_esplo[1],ESPLO_TRASPARENT_COL);
+ FAB_print(NULL," [esplo3.raw]...");
+ if(FAB_image_load(image_esplo[2],"BCA_raw/esplo3.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_esplo[2],ESPLO_TRASPARENT_COL);
+ FAB_print(NULL," [esplo4.raw]...");
+ if(FAB_image_load(image_esplo[3],"BCA_raw/esplo4.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_esplo[3],ESPLO_TRASPARENT_COL);
+ FAB_print(NULL," [esplo5.raw]...");
+ if(FAB_image_load(image_esplo[4],"BCA_raw/esplo5.raw")==-1) test=1;
+ FAB_image_trasparent_set(image_esplo[4],ESPLO_TRASPARENT_COL);
+
+ FAB_print(NULL," [sfondo.raw]...");
+ if(FAB_image_load(image_sfondo,"BCA_raw/sfondo.raw")==-1) test=1;
+ FAB_image_no_trasparent_set(image_sfondo);
+
+ FAB_print(NULL," [bca.raw]...");
+ if(FAB_image_load(image_bca,"BCA_raw/bca.raw")==-1) test=1;
+ FAB_image_no_trasparent_set(image_bca);
+
+ FAB_msg(test,"fatto","almeno un file non esiste oppure ha un formato incompatibile");
+}
+
+// *** Corpo delle funzioni in CA.h *** //
+void kern_init_bca()
+{
+ FAB_clr();
+
+ kern_alloc_task_tables();
+ kern_set_task_tables();
+
+ kern_alloc_borders();
+ kern_set_borders();
+ kern_alloc_images();
+ kern_load_images();
+ kern_alloc_frames();
+ kern_set_frames();
+ kern_alloc_ballframes();
+ kern_set_ballframes();
+}
+
+//----------------------END--------------------------
+#endif
Index: rel_1_4/bca/fab_lib.c
===================================================================
--- rel_1_4/bca/fab_lib.c (nonexistent)
+++ rel_1_4/bca/fab_lib.c (revision 1522)
@@ -0,0 +1,424 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_lib.c,v 1.4 2004-05-23 08:59:27 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: FAB_lib.c *
+ * libreria: FAB_LIB *
+ * version: 1.0 25/08/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************/
+
+#ifndef __FAB_LIB_c__
+#define __FAB_LIB_c__
+//-------------------BEGIN---------------------------
+
+// *** Librerie di S.Ha.R.K. ***
+#include<kernel/kern.h>
+#include<kernel/mem.h>
+
+#include<drivers/shark_fb26.h>
+
+#include<ll/sys/types.h>
+#include<ll/i386/x-dos.h>
+// *** Librerie Standard C ***
+// *** Librerie FAB ***
+#include"fab_lib/fab_msg.h"
+#include"fab_lib/fab_tool.h"
+#include"fab_lib/fab_grx.h"
+
+// *** Corpo delle funzioni in FAB_msg.h *** //
+
+void FAB_print(char * InitMsg, char * msg)
+{ if (InitMsg!=NULL) {kern_printf("\n[%s]",(InitMsg));}
+ if (msg!=NULL) {kern_printf("\n %s.",msg);}
+}
+void __FAB_go(int test, char * OkMsg, char * ErrorMsg,int EXITflag)
+{
+ if (OkMsg==NULL) OkMsg=FAB_EMPTY_MSG;
+ if (ErrorMsg==NULL) ErrorMsg=FAB_EMPTY_MSG;
+
+ if (!test) {kern_printf("\n OK: %s.",OkMsg);}
+ else {kern_printf("\n ERROR: %s!",ErrorMsg);
+ if (EXITflag==FAB_EXIT_YES) sys_end();
+ }
+}
+
+// *** Corpo delle funzioni in FAB_tool.h *** //
+
+// nessun corpo!
+
+// *** Corpo delle funzioni in FAB_show.h *** //
+
+void FAB_show_sched_modules()
+{ //int i;
+
+ FAB_print("MODULI DI SCHEDULAZIONE",NULL);
+ kern_printf("\n (livello) (nome)");
+ kern_printf("Names non more available!");
+ //for (i=0; i<sched_levels; i++)
+ // {kern_printf("\n %-9d %s",i,(level_table[i])->level_name);
+ // }
+ FAB_newline();
+}
+
+// *** Corpo delle funzioni in FAB_grx.h ***
+
+FAB_BALLFRAME* FAB_ballframe_alloc()
+{ FAB_BALLFRAME* frame;
+
+ frame=(FAB_BALLFRAME*)kern_alloc(sizeof(FAB_BALLFRAME));
+ if (frame==NULL) {
+ FAB_print(NULL,"BALLFRAME CREATING... ERROR #1");
+ return NULL;
+ }
+ return frame;
+}
+void FAB_ballframe_free(FAB_BALLFRAME * frame)
+{ if (frame!=NULL)
+ { kern_free(frame,sizeof(FAB_BALLFRAME));
+ }
+}
+
+FAB_FRAME* FAB_frame_alloc()
+{ FAB_FRAME* frame;
+
+ frame=(FAB_FRAME*)kern_alloc(sizeof(FAB_FRAME));
+ if (frame==NULL) {
+ FAB_print(NULL,"FRAME CREATING... ERROR #1");
+ return NULL;
+ }
+
+ return frame;
+}
+void FAB_frame_free(FAB_FRAME * frame)
+{ if (frame!=NULL)
+ { kern_free(frame,sizeof(FAB_FRAME));
+ }
+}
+void FAB_ballborder_put(FAB_BORDER* border, WORD cx, WORD cy, WORD r_int)
+{ int i;
+
+ for (i=0; i<border->dim; i++)
+ grx_circle(cx, cy, r_int+i, border->buf[i]);
+}
+void FAB_border_put(FAB_BORDER* border, WORD x0, WORD y0, WORD x1, WORD y1)
+{ int i;
+
+ for (i=0; i<border->dim; i++)
+ grx_rect(x0-i, y0-i, x1+i, y1+i, border->buf[i]);
+}
+FAB_BORDER* FAB_border_alloc(WORD dim)
+{ FAB_BORDER* border;
+
+ border=(FAB_BORDER*)kern_alloc(sizeof(FAB_BORDER));
+ if (border==NULL) {
+ FAB_print(NULL,"BORDER CREATING... ERROR #1");
+ return NULL;
+ }
+
+ border->buf=(COLOR*)kern_alloc(dim*sizeof(COLOR));
+ if (border->buf==NULL) {
+ FAB_print(NULL,"BORDER CREATING... ERROR #2");
+ return NULL;
+ }
+
+ border->dim = dim;
+
+ return border;
+}
+void FAB_border_free(FAB_BORDER * border)
+{ if (border!=NULL)
+ { kern_free(border->buf,border->dim*sizeof(COLOR));
+ kern_free(border,sizeof(FAB_BORDER));
+ }
+}
+void FAB_image_free(FAB_IMAGE* image)
+{ if (image!=NULL)
+ { kern_free(image->buf,image->lx*image->ly*sizeof(COLOR));
+ kern_free(image,sizeof(FAB_IMAGE));
+ }
+}
+FAB_IMAGE* FAB_image_alloc(WORD lx, WORD ly)
+{ FAB_IMAGE* image;
+
+ image=(FAB_IMAGE*)kern_alloc(sizeof(FAB_IMAGE));
+ if (image==NULL) {
+ FAB_print(NULL,"IMAGE CREATING... ERROR #1");
+ return NULL;
+ }
+
+ image->buf=(COLOR*)kern_alloc(lx*ly*sizeof(COLOR));
+ if (image->buf==NULL) {
+ FAB_print(NULL,"IMAGE CREATING... ERROR #2");
+ return NULL;
+ }
+ FAB_image_no_trasparent_set(image);
+ image->lx = lx;
+ image->ly = ly;
+
+ return image;
+}
+int FAB_image_load(FAB_IMAGE* image, char* file_name)
+{
+ DOS_FILE* file;
+ BYTE rgb[3];
+ COLOR * buf;
+ int i;
+
+ file=DOS_fopen(file_name,"r");
+ if (file==NULL) return -1;
+
+ buf = image->buf;
+ for (i=0; i<image->lx*image->ly; i++)
+ { DOS_fread(&rgb[0],sizeof(BYTE),3,file);
+ *buf = FAB_rgb(rgb[0],rgb[1],rgb[2]);
+ buf++;
+ }
+
+ DOS_fclose(file);
+ return(0);
+}
+void FAB_image_get(FAB_IMAGE* image, WORD x0, WORD y0, WORD lx, WORD ly)
+{ WORD x, y;
+ COLOR* buf;
+
+ buf = image->buf;
+ for (y=0; y<image->ly; y++)
+ for (x=0; x<image->lx; x++) {
+ *buf = (COLOR) grx_getpixel(x0+x,y0+y);
+ buf++;
+ }
+ FAB_image_no_trasparent_set(image);
+}
+void FAB_image_put(FAB_IMAGE* image, WORD x0, WORD y0)
+{ WORD x, y;
+ COLOR* buf;
+
+ buf = image->buf;
+ if (!image->trasparent) {
+ for (y=0; y<image->ly; y++)
+ for (x=0; x<image->lx; x++)
+ grx_plot(x0+x,y0+y,*buf++);
+ }
+ else {
+ for (y=0; y<image->ly; y++)
+ for (x=0; x<image->lx; x++) {
+ if (*buf!=image->trasparent_col)
+ grx_plot(x0+x,y0+y,*buf);
+ buf++;
+ }
+ }
+}
+void FAB_image_put_within(FAB_IMAGE* image, WORD x0, WORD y0,
+ WORD xx0, WORD yy0, WORD xx1, WORD yy1)
+{ int step_x0_xx0;
+ int step_y0_yy0;
+ int step_xx1_x1;
+ int step_yy1_y1;
+ WORD xx, yy;
+ COLOR* buf;
+
+ step_x0_xx0 = xx0 - x0;
+ step_y0_yy0 = yy0 - y0;
+ step_xx1_x1 = (x0 + image->lx - 1) - xx1;
+ step_yy1_y1 = (y0 + image->ly - 1) - yy1;
+
+ if (step_x0_xx0 < 0) step_x0_xx0 = 0;
+ if (step_y0_yy0 < 0) step_y0_yy0 = 0;
+ if (step_xx1_x1 < 0) step_xx1_x1 = 0;
+ if (step_yy1_y1 < 0) step_yy1_y1 = 0;
+
+ buf = image->buf + step_y0_yy0*image->lx;
+ if (!image->trasparent) {
+ for(yy=step_y0_yy0; yy<image->ly-step_yy1_y1; yy++) {
+ buf += step_x0_xx0;
+ for(xx=step_x0_xx0; xx<image->lx-step_xx1_x1; xx++)
+ grx_plot(x0+xx,y0+yy,*buf++);
+ buf += step_xx1_x1;
+ }
+ }
+ else {
+ for(yy=step_y0_yy0; yy<image->ly-step_yy1_y1; yy++) {
+ buf += step_x0_xx0;
+ for(xx=step_x0_xx0; xx<image->lx-step_xx1_x1; xx++) {
+ if (*buf!=image->trasparent_col)
+ grx_plot(x0+xx,y0+yy,*buf);
+ buf++;
+ }
+ buf += step_xx1_x1;
+ }
+ }
+}
+//...funzione usata da FAB_image_fill()...
+void __FAB_image_put_into(FAB_IMAGE* image, WORD x0, WORD y0, WORD lx, WORD ly)
+{ WORD x, y;
+ WORD skipped_pixels;
+ COLOR* buf;
+
+ if (lx < image->lx) skipped_pixels = image->lx - lx;
+ else skipped_pixels = 0;
+ buf = image->buf;
+
+ if (!image->trasparent) {
+ for (y=0; y<ly; y++, buf+=skipped_pixels) {
+ if (y > image->ly -1) break;
+ for (x=0; x<lx; x++, buf++) {
+ if (x < image->lx) grx_plot(x0+x,y0+y,*buf);
+ else break;
+ }
+ }
+ }
+ else {
+ for (y=0; y<ly; y++, buf+=skipped_pixels) {
+ if (y > image->ly -1) break;
+ for (x=0; x<lx; x++, buf++) {
+ if (x < image->lx) {
+ if (*buf!=image->trasparent_col)
+ grx_plot(x0+x,y0+y,*buf);
+ }
+ else break;
+ }
+ }
+ }
+}
+void FAB_image_fill(FAB_IMAGE* image, WORD x0, WORD y0, WORD lx, WORD ly)
+{ WORD x, y;
+ WORD sub_lx, sub_ly;
+
+ for (y=0; y<ly; y+=image->ly) {
+ sub_ly = ly - y; // spazio verticale disponibile
+ if (sub_ly > image->ly) sub_ly = image->ly;
+ for (x=0; x<lx; x+=image->lx) {
+ sub_lx = lx - x; // spazio orizzontale disponibile
+ if (sub_lx > image->lx) sub_lx = image->lx;
+ __FAB_image_put_into(image,x0+x,y0+y,sub_lx,sub_ly);
+ }
+ }
+}
+void FAB_frame_put(FAB_FRAME* frame, WORD x0, WORD y0, WORD lx, WORD ly)
+{
+ WORD eff_dim;
+ int j;
+
+ //BORDO DEL FRAME
+ if (frame->border!=NULL) eff_dim = frame->border->dim;
+ else eff_dim = frame->border_dim;
+ frame->x0 = x0 + eff_dim;
+ frame->y0 = y0 + eff_dim;
+ frame->x1 = x0 + lx - eff_dim - 1;
+ frame->y1 = y0 + ly - eff_dim - 1;
+ if (frame->border!=NULL) {
+ FAB_border_put(frame->border, frame->x0-1, frame->y0-1,
+ frame->x1+1, frame->y1+1);
+ }
+ else {
+ for (j=0; j<eff_dim; j++)
+ grx_rect(frame->x0-1-j, frame->y0-1-j,
+ frame->x1+1+j, frame->y1+1+j, frame->border_col);
+ }
+
+ //PANNELLO DEL FRAME
+ if (!frame->trasparent) {
+ if (frame->image==NULL) grx_box(frame->x0, frame->y0,
+ frame->x1, frame->y1, frame->color);
+ else FAB_image_fill(frame->image,
+ frame->x0, frame->y0,
+ lx-eff_dim*2, ly-eff_dim*2);
+ }
+}
+
+void FAB_ballframe_put(FAB_BALLFRAME* frame, WORD cx, WORD cy, WORD r)
+{
+ int j;
+ WORD eff_dim;
+
+ //BORDO DEL FRAME
+ if (frame->border!=NULL) eff_dim = frame->border->dim;
+ else eff_dim = frame->border_dim;
+ frame->cx = cx;
+ frame->cy = cy;
+ frame->r = r - eff_dim;
+
+ if (frame->border!=NULL) {
+ FAB_ballborder_put(frame->border,frame->cx,frame->cy,frame->r+1);
+ }
+ else {
+ for (j=0; j<eff_dim; j++)
+ grx_circle(frame->cx,frame->cy,frame->r+1+j,frame->border_col);
+ }
+
+ //PANNELLO DEL FRAME
+ if (!frame->trasparent) {
+ grx_disc(frame->cx,frame->cy,frame->r,frame->color);
+ }
+}
+
+void FAB_image_copy(FAB_IMAGE* orig_image, FAB_IMAGE* dest_image)
+{
+ COLOR* orig_buf;
+ COLOR* dest_buf;
+ int j,n;
+
+ n = orig_image->lx * orig_image->ly;
+ if (n==(dest_image->lx * dest_image->ly)) {
+ orig_buf = orig_image->buf;
+ dest_buf = dest_image->buf;
+ for(j=0; j<n; j++) {
+ *dest_buf = *orig_buf;
+ orig_buf++;
+ dest_buf++;
+ }
+ }
+}
+void FAB_image_color_change(FAB_IMAGE* image, COLOR old_col, COLOR new_col)
+{ COLOR* buf;
+ int j,n;
+
+ buf = image->buf;
+ n = image->lx * image->ly;
+ for(j=0; j<n; j++, buf++)
+ if (*buf==old_col)
+ *buf=new_col;
+}
+//----------------------END--------------------------
+#endif
Index: rel_1_4/bca/bca.c
===================================================================
--- rel_1_4/bca/bca.c (nonexistent)
+++ rel_1_4/bca/bca.c (revision 1522)
@@ -0,0 +1,203 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: bca.c,v 1.5 2004-05-23 08:59:27 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: bca.c *
+ * header file: bca.h *
+ * data: 15/09/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ******************************************************
+ * *
+ * descrizione: e' il file in cui è descritto il task*
+ * main del programma S.Ha.R.K. *
+ * "(B)ase(C)ontr(A)rea". *
+ * Il codice del programma comprende *
+ * anche l'implementazione di altri task*
+ * distribuiti nei seguenti file che *
+ * quindi sono inclusi: *
+ * dummy.c *
+ * control.c *
+ * aereo.c *
+ * cannone.c *
+ * missile.c *
+ * esplo.c *
+ * Inoltre è incluso anche il file: *
+ * scenario.c *
+ * che descrive come disegnare lo *
+ * scenario grafico iniziale *
+ * *
+ ******************************************************/
+
+
+// *** Librerie S.Ha.R.K ***
+#include <kernel/kern.h>
+#include <ll/i386/cons.h>
+
+#include <drivers/shark_fb26.h>
+#include <drivers/shark_keyb26.h>
+
+// *** Librerie Standard C ***
+#include <stdlib.h>
+// *** Librerie FAB ***
+#include "fab_lib/fab_msg.h"
+#include "fab_lib/fab_show.h"
+#include "fab_lib/fab_tool.h"
+#include "fab_lib/fab_grx.h"
+// *** Librerie BCA ***
+#include "bca.h"
+
+
+char * titolo[10];
+
+void scenario();
+void info();
+#include"scenario.c"
+
+PID crea_soft_dummy_radar ();
+TASK dummy_radar(void *);
+#include"dummy.c"
+
+PID crea_soft_control();
+TASK control(void *);
+#include"control.c"
+
+PID crea_soft_aereo_creator();
+TASK aereo_creator();
+PID crea_hard_aereo(int index);
+PID crea_soft_aereo(int index);
+TASK aereo(void * index);
+#include"aereo.c"
+
+PID crea_soft_cannone_creator();
+TASK cannone_creator();
+PID crea_hard_cannone(int index);
+PID crea_soft_cannone(int index);
+TASK cannone(void * index);
+#include"cannone.c"
+
+PID crea_hard_missile();
+PID crea_soft_missile();
+TASK missile();
+#include"missile.c"
+
+PID crea_soft_esplo();
+TASK esplo(void *);
+#include"esplo.c"
+
+void end_fun(KEY_EVT* k)
+{ sys_shutdown_message("Ending...\n");
+ sys_end();
+}
+void incrementa_aerei_fun(KEY_EVT* k)
+{ if (aereo_count<AEREO_N_MAX) aereo_count++;
+}
+void decrementa_aerei_fun(KEY_EVT* k)
+{ if (aereo_count>AEREO_N_MIN) aereo_count--;
+}
+void incrementa_cannoni_fun(KEY_EVT* k)
+{ if (cannone_count<CANNONE_N_MAX) cannone_count++;
+}
+void decrementa_cannoni_fun(KEY_EVT* k)
+{ if (cannone_count>CANNONE_N_MIN) cannone_count--;
+}
+
+int main(int argc, char **argv)
+{
+ PID pid;
+
+ KEY_EVT k;
+
+ k.flag = 0;
+ k.scan = KEY_ENT;
+ k.ascii = 13;
+ k.status = KEY_PRESSED;
+ keyb_hook(k,end_fun,FALSE);
+ k.flag = 0;
+ k.scan = KEY_1;
+ k.ascii = '1';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,incrementa_aerei_fun,FALSE);
+ k.flag = 0;
+ k.scan = KEY_2;
+ k.ascii = '2';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,decrementa_aerei_fun,FALSE);
+ k.flag = 0;
+ k.scan = KEY_3;
+ k.ascii = '3';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,incrementa_cannoni_fun,FALSE);
+ k.flag = 0;
+ k.scan = KEY_4;
+ k.ascii = '4';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,decrementa_cannoni_fun,FALSE);
+
+ /* inizializza il mutex grafico */
+ app_mutex_init(&grx_mutex);
+
+ scenario();
+
+ //---init---
+ srand(sys_gettime(NULL));
+ aereo_count = AEREO_N_MIN;
+ cannone_count = CANNONE_N_MIN;
+
+ pid=crea_soft_dummy_radar();
+ task_activate(pid);
+
+ pid=crea_soft_aereo_creator();
+ task_activate(pid);
+
+ pid=crea_soft_cannone_creator();
+ task_activate(pid);
+
+ pid=crea_soft_control();
+ task_activate(pid);
+ //----------
+
+ return 0;
+
+}
+
+
Index: rel_1_4/bca/makefile
===================================================================
--- rel_1_4/bca/makefile (nonexistent)
+++ rel_1_4/bca/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS= bca
+
+include $(BASE)/config/example.mk
+
+bca:
+ make -f $(SUBMAKE) APP=bca INIT= OTHEROBJS="initfile.o fab_lib.o bca_lib.o" SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
+
Index: rel_1_4/bca/fab_lib/fab_msg.h
===================================================================
--- rel_1_4/bca/fab_lib/fab_msg.h (nonexistent)
+++ rel_1_4/bca/fab_lib/fab_msg.h (revision 1522)
@@ -0,0 +1,94 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_msg.h,v 1.2 2004-05-23 08:59:28 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: FAB_msg.h *
+ * libreria: FAB_LIB *
+ * version: 1.0 25/08/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************
+ * *
+ * descrizione: libreria di funzioni per stampare *
+ * messaggi circa il corretto esito *
+ * dell'esecuzione delle istruzioni; *
+ * stampa semplici stringhe colorate; *
+ * aiuta a fare il debbuging. *
+ * *
+ ****************************************************/
+
+#ifndef __FAB_LIB__FAB_msg_h__
+#define __FAB_LIB__FAB_msg_h__
+//-------------------BEGIN---------------------------
+
+// *** Librerie di S.Ha.R.K. ***
+#include <ll/i386/cons.h>
+// *** Librerie Standard C ***
+// *** Librerie FAB ***
+
+// -----------
+// Definizioni
+//----------------------
+#define FAB_EXIT_YES 1
+#define FAB_EXIT_NO 0
+#define FAB_EMPTY_MSG ""
+//----------------------
+
+// ----------------
+// Funzioni & Macro
+//-------------------------------------------------
+#define FAB_newline() NL()
+#define FAB_home() HOME()
+#define FAB_clr() clear()
+
+void FAB_print(char * InitMsg, char * msg);
+#define FAB_msg(TEST,OKMSG,ERRORMSG) __FAB_go((TEST),(OKMSG),(ERRORMSG),FAB_EXIT_NO)
+#define FAB_go(TEST,OKMSG,ERRORMSG,EXITFLAG) __FAB_go((TEST),(OKMSG),(ERRORMSG),(EXITFLAG))
+//--------------------------------------------------
+
+
+// Altro...
+
+void __FAB_go(int test, char * OkMsg, char * ErrorMsg,int EXITflag);
+
+//----------------------END--------------------------
+#endif
Index: rel_1_4/bca/fab_lib/fab_grx.h
===================================================================
--- rel_1_4/bca/fab_lib/fab_grx.h (nonexistent)
+++ rel_1_4/bca/fab_lib/fab_grx.h (revision 1522)
@@ -0,0 +1,203 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_grx.h,v 1.3 2004-05-23 08:59:28 giacomo Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: FAB_grx.h *
+ * libreria: FAB_LIB *
+ * version: 1.0 25/08/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************
+ * *
+ * descrizione: libreria di funzioni grafiche: *
+ * permette di gestire con facilita' *
+ * immagini, cornici, e veri e propri *
+ * pannelli colorati. *
+ * Il contesto di grafica va avviato *
+ * con FAB_grx_open() e alla fine *
+ * chiuso correttamente con la funz. *
+ * FAB_grx_close(). L'ambiente di *
+ * grafica e'impostato a 16bit per *
+ * default, comunque e' sempre *
+ * possibile scegliere la profondita' *
+ * di colori preferita tra 15/16/24/32*
+ * definendo semplicemente solo una *
+ * delle seguenti costanti all'inizio *
+ * del proprio programma che include *
+ * questa libreria grafica: *
+ * FAB_GRX_15 *
+ * FAB_GRX_16 (default) *
+ * FAB_GRX_24 *
+ * FAB_GRX_32 *
+ * *
+ ****************************************************/
+
+#ifndef __FAB_LIB_fab_grx_h__
+#define __FAB_LIB_fab_grx_h__
+//-------------------BEGIN---------------------------
+
+// *** Librerie di S.Ha.R.K. ***
+#include <kernel/kern.h>
+#include <ll/sys/types.h>
+
+#include <drivers/shark_fb26.h>
+
+// *** Librerie Standard C ***
+// *** Librerie FAB ***
+#include"fab_grx.sys"
+
+//#define FAB_GRX_15
+//#define FAB_GRX_16
+//#define FAB_GRX_24
+//#define FAB_GRX_32
+
+typedef __FAB_COLOR COLOR;
+
+typedef struct {
+ WORD lx,ly;
+ COLOR * buf;
+ int trasparent;
+ COLOR trasparent_col;
+ } FAB_IMAGE;
+
+typedef struct {
+ WORD dim;
+ COLOR * buf;
+ } FAB_BORDER;
+
+typedef struct {
+ FAB_BORDER * border; //default = NULL
+ WORD border_dim; //default = 0
+ COLOR border_col;
+
+ BYTE trasparent; //default = 0
+ FAB_IMAGE * image; //default = NULL
+ COLOR color;
+
+ WORD x0,y0,x1,y1; //spigoli pannello interno
+ //cornice esclusa: vengono settati
+ //automaticamente con FAB_frame_put().
+ } FAB_FRAME;
+typedef struct {
+ FAB_BORDER * border; //default = NULL
+ WORD border_dim; //default = 0
+ COLOR border_col;
+
+ BYTE trasparent; //default = 0
+ COLOR color;
+
+ WORD cx,cy,r; //centro e raggio del pannello
+ //circolare: vengono settati
+ //automaticamente con FAB_ballframe_put().
+ } FAB_BALLFRAME;
+
+// -----------
+// Definizioni
+//----------------------
+#define FAB_BPP __FAB_BPP
+#define FAB_rgb(R24,G24,B24) __FAB_rgb((R24),(G24),(B24))
+
+// Colori base
+#define FAB_white FAB_rgb(255,255,255)
+#define FAB_black FAB_rgb( 0, 0, 0)
+#define FAB_red FAB_rgb(255, 0, 0)
+#define FAB_green FAB_rgb( 0,255, 0)
+#define FAB_blue FAB_rgb( 0, 0,255)
+#define FAB_yellow FAB_rgb(255,255, 0)
+#define FAB_gray FAB_rgb(100,100,100)
+
+//----------------------
+
+// ----------------
+// Funzioni & Macro
+//--------------------------------------------------
+int FAB_grx_open(WORD lx, WORD ly);
+void FAB_grx_close();
+
+FAB_IMAGE* FAB_image_alloc(WORD lx, WORD ly); //richiede DISABLED INTERRUPTS
+void FAB_image_free(FAB_IMAGE* image); //richiede DISABLED INTERRUPTS
+FAB_BORDER* FAB_border_alloc(WORD dim); //richiede DISABLED INTERRUPTS
+void FAB_border_free(FAB_BORDER * border);//richiede DISABLED INTERRUPTS
+FAB_FRAME* FAB_frame_alloc(); //richiede DISABLED INTERRUPTS
+void FAB_frame_free(FAB_FRAME * frame); //richiede DISABLED INTERRUPTS
+FAB_BALLFRAME* FAB_ballframe_alloc(); //richiede DISABLED INTERRUPTS
+void FAB_ballframe_free(FAB_BALLFRAME * frame);//richiede DISABLED INTERRUPTS
+
+// Permette di riempire lo spazio allocato ad un FAB_IMAGE
+// leggendo le sequenze rgb a 24bit da un file immagine binario.
+// Un formato perfettamente compatibile Š quello
+// "RAW"(con header=0 e sequenza ad ordinamento RGB-RGB-RGB...):
+int FAB_image_load(FAB_IMAGE* image, char* file_name); // solo in __kernel_register_levels__()
+// Per default un FAB_IMAGE non ha il colore di trasparenza:
+#define FAB_image_no_trasparent_set(IMAGE) (IMAGE)->trasparent=0
+#define FAB_image_trasparent_set(IMAGE,TRASPARENT_COL) (IMAGE)->trasparent=1;(IMAGE)->trasparent_col=(TRASPARENT_COL)
+
+// Settaggio FAB_BORDER deve essere fatto manualmente!
+// esempio:
+// mio_border->buf[i] = FAB_rgb(0,100,0);
+// ...
+// mio_border->buf[N] = FAB_rgb(0,100,255);
+// (non esiste una funzione FAB_border_set)
+
+#define FAB_frame_border_set(FRAME,BORDER,BORDER_DIM,BORDER_COL) (FRAME)->border=(BORDER);(FRAME)->border_dim=(BORDER_DIM);(FRAME)->border_col=(BORDER_COL);
+#define FAB_frame_color_set(FRAME,TRASPARENT_FLAG,IMAGE,COLOR) (FRAME)->trasparent=(TRASPARENT_FLAG);(FRAME)->image=(IMAGE);(FRAME)->color=(COLOR);
+#define FAB_ballframe_border_set(FRAME,BORDER,BORDER_DIM,BORDER_COL) (FRAME)->border=(BORDER);(FRAME)->border_dim=(BORDER_DIM);(FRAME)->border_col=(BORDER_COL);
+#define FAB_ballframe_color_set(FRAME,TRASPARENT_FLAG,COLOR) (FRAME)->trasparent=(TRASPARENT_FLAG);(FRAME)->color=(COLOR);
+
+void FAB_ball_put(WORD cx, WORD cy, WORD r, COLOR c);
+void FAB_image_get(FAB_IMAGE* image, WORD x, WORD y, WORD lx, WORD ly);
+void FAB_image_put(FAB_IMAGE* image, WORD x, WORD y);
+void FAB_image_put_within(FAB_IMAGE* image, WORD x0, WORD y0,
+ WORD xx0, WORD yy0, WORD xx1, WORD yy1);
+void FAB_image_copy(FAB_IMAGE* orig_image, FAB_IMAGE* dest_image);
+void FAB_image_color_change(FAB_IMAGE* image, COLOR old_col, COLOR new_col);
+void FAB_image_fill(FAB_IMAGE* image, WORD x0, WORD y0, WORD lx, WORD ly);
+void FAB_border_put(FAB_BORDER* border, WORD x0, WORD y0, WORD x1, WORD y1);
+void FAB_ballborder_put(FAB_BORDER* border, WORD cx, WORD cy, WORD r_int);
+void FAB_frame_put(FAB_FRAME* frame, WORD x0, WORD y0, WORD lx, WORD ly);
+void FAB_ballframe_put(FAB_BALLFRAME* frame, WORD cx, WORD cy, WORD r);
+//--------------------------------------------------
+
+// Altro...
+
+//---------------------END---------------------------
+#endif
Index: rel_1_4/bca/fab_lib/fab_show.h
===================================================================
--- rel_1_4/bca/fab_lib/fab_show.h (nonexistent)
+++ rel_1_4/bca/fab_lib/fab_show.h (revision 1522)
@@ -0,0 +1,83 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_show.h,v 1.2 2002-10-01 10:33:52 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: FAB_show.h *
+ * libreria: FAB_LIB *
+ * version: 1.0 25/08/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************
+ * *
+ * descrizione: libreria di funzioni per stampare *
+ * specifiche informazioni utili *
+ * riguardo lo stato del sistema. *
+ * *
+ ****************************************************/
+
+#ifndef __FAB_LIB__FAB_show_h__
+#define __FAB_LIB__FAB_show_h__
+//-------------------BEGIN---------------------------
+
+// *** Librerie S.Ha.R.K ***
+
+// *** Librerie Standard C ***
+
+// *** Librerie FAB ***
+#include "fab_msg.h"
+
+// -----------
+// Definizioni
+//----------------------
+//----------------------
+
+// ----------------
+// Funzioni & Macro
+//-------------------------------------------------
+void FAB_show_sched_modules();
+//--------------------------------------------------
+
+
+// Altro...
+
+//----------------------END--------------------------
+#endif
Index: rel_1_4/bca/fab_lib/fab_grx.sys
===================================================================
--- rel_1_4/bca/fab_lib/fab_grx.sys (nonexistent)
+++ rel_1_4/bca/fab_lib/fab_grx.sys (revision 1522)
@@ -0,0 +1,71 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_grx.sys,v 1.1 2002-10-01 10:25:02 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+// file incluso da FAB_grx.h
+// -------------------------
+
+typedef BYTE COLOR8;
+typedef WORD COLOR15;
+typedef WORD COLOR16;
+typedef DWORD COLOR24;
+typedef DWORD COLOR32;
+
+#if defined FAB_GRX_15
+ #define __FAB_BPP 15
+ #define __FAB_rgb(R24,G24,B24) rgb15((R24),(G24),(B24))
+ typedef COLOR15 __FAB_COLOR;
+#elif defined FAB_GRX_16
+ #define __FAB_BPP 16
+ #define __FAB_rgb(R24,G24,B24) rgb16((R24),(G24),(B24))
+ typedef COLOR16 __FAB_COLOR;
+#elif defined FAB_GRX_24
+ #define __FAB_BPP 24
+ #define __FAB_rgb(R24,G24,B24) rgb24((R24),(G24),(B24))
+ typedef COLOR24 __FAB_COLOR;
+#elif defined FAB_GRX_32
+ #define __FAB_BPP 32
+ #define __FAB_rgb(R24,G24,B24) rgb32((R24),(G24),(B24))
+ typedef COLOR32 __FAB_COLOR;
+#else
+ #define __FAB_BPP 16
+ #define __FAB_rgb(R24,G24,B24) rgb16((R24),(G24),(B24))
+ typedef COLOR16 __FAB_COLOR;
+#endif
Index: rel_1_4/bca/fab_lib/fab_tool.h
===================================================================
--- rel_1_4/bca/fab_lib/fab_tool.h (nonexistent)
+++ rel_1_4/bca/fab_lib/fab_tool.h (revision 1522)
@@ -0,0 +1,90 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: fab_tool.h,v 1.1 2002-10-01 10:25:03 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: FAB_tool.h *
+ * libreria: FAB_LIB *
+ * version: 1.0 25/08/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ****************************************************
+ * *
+ * descrizione: tool di funzioni d'utilita' *
+ * *
+ ****************************************************/
+
+#ifndef __FAB_LIB__FAB_tool_h__
+#define __FAB_LIB__FAB_tool_h__
+//-------------------BEGIN---------------------------
+
+// *** Librerie S.Ha.R.K ***
+// *** Librerie Standard C ***
+#include <stdlib.h>
+#include <math.h>
+// *** Librerie FAB ***
+
+// -----------
+// Definizioni
+//----------------------
+//----------------------
+
+// ----------------
+// Funzioni & Macro
+//-------------------------------------------------
+#define FAB_PI 3.141592654
+#define FAB_grad(RADIANTI) RADIANTI/FAB_PI*180
+#define FAB_rad(GRADI) GRADI/180.0*FAB_PI
+#define FAB_set_ang360(ANGOLO,X,Y) if ((X)>0) {if((Y)>0) (ANGOLO)=atan((Y)/(double)(X));else if((Y)<0) (ANGOLO)=atan((Y)/(double)(X))+2*FAB_PI;else (ANGOLO)=0;}else if ((X)<0) (ANGOLO)=atan((Y)/(double)(X))+FAB_PI;else /* X==0 */if ((Y)>0) (ANGOLO)=FAB_PI/2;else if ((Y)<0) (ANGOLO)=FAB_PI/2+FAB_PI;else /* Y==0 */ (ANGOLO)=-1; /* X=Y=0 */
+#define FAB_set_xy360(X,Y,MODULO,ANGOLO) (X)=(MODULO)*cos(ANGOLO);(Y)=(MODULO)*sin(ANGOLO);
+
+#define FAB_ABS(X) ((X) > 0 ? (X) : (X)*-1)
+
+#define FAB_sign_rand() (rand()%2 ? -1 : +1)
+#define FAB_int_rand(MIN,MAX ) ((MIN) + rand()%((MAX)-(MIN)+1))
+#define FAB_double_rand(MIN,MAX) ((MIN) + ((MAX)-(MIN))*((double)rand()/RAND_MAX))
+//--------------------------------------------------
+
+
+// Altro...
+
+//----------------------END--------------------------
+#endif
Index: rel_1_4/bca/bca.h
===================================================================
--- rel_1_4/bca/bca.h (nonexistent)
+++ rel_1_4/bca/bca.h (revision 1522)
@@ -0,0 +1,288 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: bca.h,v 1.2 2002-10-01 10:33:51 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/****************************************************
+ * *
+ * file: bca.h *
+ * included by: bca.c & bca_lib di cui fa da header*
+ * data: 15/09/2002 *
+ * creato da: Fabio CALABRESE *
+ * *
+ ******************************************************
+ * *
+ * descrizione: contiene la definizione di variabili *
+ * e strutture globali, con un corredo *
+ * di macro e funzioni per la loro *
+ * gestione, usate nel programma SHaRK *
+ * "(B)ase(C)ontr(A)rea", il cui codice *
+ * e' scritto nel file bca.c; *
+ * il file bca_lib.c contiene il corpo *
+ * di tutte le funzioni qui dichiarate. *
+ * *
+ ******************************************************/
+
+#ifndef __BCA_H__
+#define __BCA_H__
+//----------------BEGIN------------------
+
+// *** Librerie S.Ha.R.K ***
+// *** Librerie Standard C ***
+// *** Librerie FAB ***
+#include"fab_lib/fab_grx.h"
+#include"fab_lib/fab_tool.h"
+// *** Librerie BCA ***
+
+
+// ---------------------------------
+// *** Elementi Grafici Generici ***
+// ---------------------------------
+
+// IMMAGINI:
+FAB_IMAGE* image_sfondo;
+FAB_IMAGE* image_bca;
+FAB_IMAGE* image_aereo[4]; // 1 aereo per ogni direzione(soft e hard)
+FAB_IMAGE* image_esplo[5]; // 5 immagini in sequenza simulanti
+FAB_IMAGE* image_cannone[2]; // un esplosione
+FAB_IMAGE* image_missile[2];
+
+// BORDI:
+FAB_BORDER* border_blu7;
+FAB_BORDER* border_verde7;
+FAB_BORDER* border_rosso7;
+FAB_BORDER* border_bianco7;
+FAB_BORDER* border_giallo7;
+
+// FRAME:
+FAB_FRAME* frame_bca;
+FAB_FRAME* frame_misure_oriz;
+FAB_FRAME* frame_misure_vert;
+FAB_FRAME* frame_misure_vert;
+FAB_FRAME* frame_titolo;
+FAB_FRAME* frame_comandi;
+FAB_FRAME* frame_control;
+
+// BALLFRAME:
+FAB_BALLFRAME* ballframe_radar;
+FAB_BALLFRAME* ballframe_lucerossa[3];
+
+// Base ContrAerea
+#define BASE_L 1.0 // [Km]: lunghezza
+#define BASE_H 2100 // [m]: altezza max di visibilita'
+
+// Finestra Virtuale sullo schermo
+#define FIN_X_MIN 20 // [pixel]
+#define FIN_X_MAX 520-1 // [pixel]
+#define FIN_Y_MIN 20 // [pixel]
+#define FIN_Y_MAX 520-1 // [pixel]
+// Inoltre si possono usare le seguenti + comode define
+// con gli stessi valori:
+#define X0 FIN_X_MIN
+#define X1 FIN_X_MAX
+#define Y0 FIN_Y_MIN
+#define Y1 FIN_Y_MAX
+// NB: non e' necessaria la proporzionalita' tra finestra
+// reale(BASE_L*BASE_H) e virtuale((X1-X0)*(Y1-Y0))!
+
+// Finestra Misure
+#define FRAME_MISURE_LINE_COLOR FAB_green
+#define FRAME_MISURE_BACK_COLOR FAB_black
+#define FRAME_MISURE_ORIZ_LY 30
+#define FRAME_MISURE_VERT_LX 52
+
+// Finestra Titolo
+#define FRAME_TITOLO_TEXT_COLOR1 FAB_yellow
+#define FRAME_TITOLO_TEXT_COLOR2 FAB_white
+#define FRAME_TITOLO_BACK_COLOR1 FAB_gray
+#define FRAME_TITOLO_BACK_COLOR2 FAB_blue
+
+// Finestra Comandi
+#define FRAME_COMANDI_TEXT_COLOR1 FAB_yellow
+#define FRAME_COMANDI_TEXT_COLOR2 FAB_white
+#define FRAME_COMANDI_TEXT_COLOR3 FAB_red
+#define FRAME_COMANDI_BACK_COLOR1 FAB_gray
+#define FRAME_COMANDI_BACK_COLOR2 FAB_yellow
+
+// Finestra Control
+#define FRAME_CONTROL_TEXT_COLOR1 FAB_rgb( 50,255, 50)
+#define FRAME_CONTROL_TEXT_COLOR2 FAB_rgb(150,255,150)
+#define FRAME_CONTROL_BACK_COLOR FAB_black
+
+// ---------------------------------
+// *** Elementi Task Dummy_radar ***
+// ---------------------------------
+#define DUMMY_RADAR_GROUP 3
+#define DUMMY_RADAR_PERIOD 50000
+#define DUMMY_RADAR_WCET 400
+#define DUMMY_RADAR_MET 200
+
+// ---------------------------------
+// *** Elementi Task Control ***
+// ---------------------------------
+#define CONTROL_PERIOD 50000
+#define CONTROL_WCET 400
+#define CONTROL_MET 300
+
+// ---------------------------
+// *** Elementi Task Esplo ***
+// ---------------------------
+#define ESPLO_TRASPARENT_COL FAB_white
+#define ESPLO_LX 40
+#define ESPLO_LY 40
+
+#define ESPLO_PERIOD 80000
+#define ESPLO_WCET 300
+#define ESPLO_MET 100
+
+// -----------------------------------
+// *** Elementi Task Aereo_Creator ***
+// -----------------------------------
+#define AEREO_CREATOR_PERIOD 200000
+#define AEREO_CREATOR_WCET 300
+#define AEREO_CREATOR_MET 100
+
+// -----------------------------------
+// *** Elementi Task Cannone_Creator ***
+// -----------------------------------
+#define CANNONE_CREATOR_PERIOD 1000000
+#define CANNONE_CREATOR_WCET 150
+#define CANNONE_CREATOR_MET 50
+
+// ---------------------------
+// *** Elementi Task Aereo ***
+// ---------------------------
+#define AEREO_N_MAX 10
+#define AEREO_N_MIN 1
+
+#define AEREO_TRASPARENT_COL FAB_white
+#define AEREO_BASE_COL FAB_green
+#define AEREO_LX 32
+#define AEREO_LY 19
+#define AEREO_H_MIN 500 // [m]: altezza min di volo
+#define AEREO_H_MAX 2000 // [m]: altezza max di volo (<BASE_H)
+#define AEREO_L_MIN 0 // [km]: posizione 0 nella base
+#define AEREO_L_MAX BASE_L // [km] posizione max nella base
+#define AEREO_V_MIN 300.0 // [Km/h]: velocit… min di volo
+#define AEREO_V_MAX 500.0 // [Km/h]: velocit… max di volo
+#define AEREO_X_MIN X0 - AEREO_LX/2
+#define AEREO_X_MAX X1 + AEREO_LX/2
+
+#define AEREO_PERIOD 30000
+#define AEREO_WCET 1250 //Verificato!
+#define AEREO_MET 800
+
+struct { BYTE status; //[0=free/1=occupato]
+ BYTE killing; //richiesta uscita se Š 1 altrimenti 0
+ PID pid;
+ COLOR color;
+ FAB_IMAGE* image;
+ double vel; //[km/h]
+ int dir; //[+1/-1]
+ WORD h; //[m]
+ double l; //[km]
+ WORD x, y; //[pixel]
+ } aereo_table[AEREO_N_MAX];
+
+int aereo_count;
+
+// -----------------------------
+// *** Elementi Task Cannone ***
+// -----------------------------
+#define CANNONE_N_MAX 9
+#define CANNONE_N_MIN 1
+
+#define CANNONE_SENSIBILITA 200 //[m]
+
+#define CANNONE_TRASPARENT_COL FAB_white
+#define CANNONE_LX 33
+#define CANNONE_LY 15
+
+#define CANNONE_PERIOD 100000
+#define CANNONE_WCET 1000
+#define CANNONE_MET 100
+
+struct { BYTE status; //[0=free/1=occupato]
+ BYTE killing; //richiesta uscita se Š 1 altrimenti 0
+ PID pid;
+ BYTE fire;
+ WORD x;
+ double missile_vel;
+ } cannone_table[CANNONE_N_MAX];
+
+int cannone_count;
+
+// -----------------------------
+// *** Elementi Task Missile ***
+// -----------------------------
+#define MISSILE_V_MIN 300.0 //[km/h]
+#define MISSILE_V_MAX 5000.0 //[km/h]
+#define MISSILE_ACC_MIN 100000.0 //[km/(h*h)]
+#define MISSILE_ACC_MAX 10000000.0 //[km/(h*h)]
+#define MISSILE_X_MAX X1 + MISSILE_LX/2 //[pixel]
+#define MISSILE_X_MIN X0 - MISSILE_LX/2 //[pixel]
+#define MISSILE_Y_MAX Y1 + MISSILE_LY/2 //[pixel]
+#define MISSILE_Y_MIN Y0 - MISSILE_LY/2 //[pixel]
+
+#define MISSILE_TRASPARENT_COL FAB_white
+
+#define MISSILE_LX 7 //[pixel]
+#define MISSILE_LY 15 //[pixel]
+
+#define MISSILE_PERIOD 10000
+#define MISSILE_WCET 500
+#define MISSILE_MET 100
+
+
+
+
+
+// MUTEX:
+mutex_t grx_mutex; //per l'accesso alla grafica
+int app_mutex_init(mutex_t *m);
+
+
+
+// FUNZIONI GESTIONE RISORSE DI MEMORIA:
+void kern_init_bca();
+
+
+
+//------------------END------------------
+#endif
Index: rel_1_4/bca/scenario.c
===================================================================
--- rel_1_4/bca/scenario.c (nonexistent)
+++ rel_1_4/bca/scenario.c (revision 1522)
@@ -0,0 +1,168 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: scenario.c,v 1.1 2002-10-01 10:25:01 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//***************************
+//* file: scenario.c *
+//* included by: bca.c *
+//***************************
+
+void scenario_ca()
+{ //SFONDO
+ FAB_image_fill(image_sfondo,0,0,800,600);
+
+ //FRAME_BCA
+ FAB_frame_put(frame_bca,X0-7,Y0-7,500+7*2,500+7*2);
+}
+void scenario_misure()
+{ int x, y, cx, cy;
+ char* str_km ="X.Xkm";
+ char* str_m ="XXXXm";
+ int h;
+
+ //FRAME_MISURE orizzontale
+ FAB_frame_put(frame_misure_oriz, X0-7, Y1+7+20-7,
+ 500+7*2, FRAME_MISURE_ORIZ_LY+7*2);
+ cy = frame_misure_oriz->y0 + 10;
+ cx = frame_misure_oriz->x0 +
+ (frame_misure_oriz->x1 - frame_misure_oriz->x0) / 2;
+ for(x=frame_misure_oriz->x0 ;x<frame_misure_oriz->x1+1 ;x+=5)
+ grx_line(x,cy,x+2,cy,FRAME_MISURE_LINE_COLOR);
+ for(y=frame_misure_oriz->y0; y<cy-1; y+=5) {
+ grx_line(frame_misure_oriz->x0,y,frame_misure_oriz->x0,y+2,FRAME_MISURE_LINE_COLOR);
+ grx_line(cx,y,cx,y+2,FRAME_MISURE_LINE_COLOR);
+ grx_line(frame_misure_oriz->x1,y,frame_misure_oriz->x1,y+2,FRAME_MISURE_LINE_COLOR);
+ }
+ sprintf(str_km,"%02.1fkm",0.0);
+ grx_text(str_km,frame_misure_oriz->x0+10,cy+2,FRAME_MISURE_LINE_COLOR,frame_misure_oriz->color);
+ sprintf(str_km,"%02.1fkm",BASE_L/2.0);
+ grx_text(str_km,cx-10,cy+2,FRAME_MISURE_LINE_COLOR,frame_misure_oriz->color);
+ sprintf(str_km,"%02.1fkm",BASE_L);
+ grx_text(str_km,frame_misure_oriz->x1-FRAME_MISURE_ORIZ_LY,cy+2,FRAME_MISURE_LINE_COLOR,frame_misure_oriz->color);
+
+ //FRAME_MISURE verticale
+ FAB_frame_put(frame_misure_vert, X1+7+20-7, Y0-7,
+ FRAME_MISURE_VERT_LX+7*2, 500+7*2);
+ cy = frame_misure_vert->y0 +
+ (frame_misure_vert->y1 - frame_misure_vert->y0) / 2;
+ cx = frame_misure_vert->x0 + 10;
+ for(y=frame_misure_vert->y1; y>frame_misure_vert->y0-1; y-=5)
+ grx_line(cx,y,cx,y-2,FRAME_MISURE_LINE_COLOR);
+ h=0;
+ for(y=frame_misure_vert->y1; y>frame_misure_vert->y0-1;
+ y-=500.0*(X1-X0)/BASE_H, h+=500) {
+ for(x=frame_misure_vert->x0; x<cx-1; x+=5)
+ grx_line(x,y,x+2,y,FRAME_MISURE_LINE_COLOR);
+ sprintf(str_m,"%dm",h);
+ grx_text(str_m, cx+2, y-6,
+ FRAME_MISURE_LINE_COLOR, frame_misure_vert->color);
+ }
+}
+void scenario_radar()
+{ FAB_ballframe_put(ballframe_radar,
+ frame_bca->x1+7+30, frame_bca->y1+7+30, 30);
+ FAB_ballframe_put(ballframe_lucerossa[2],605,546,20);
+ FAB_ballframe_put(ballframe_lucerossa[1],594,578,15);
+ FAB_ballframe_put(ballframe_lucerossa[0],574,591,10);
+}
+void scenario_titolo()
+{ int x0,y0;
+ x0 = frame_misure_vert->x1+7+20-7;
+ y0 = frame_bca->y0-7;
+ FAB_frame_put(frame_titolo,x0,y0,800-x0-20+7,170);
+ x0 = frame_titolo->x0;
+ y0 = frame_titolo->y0;
+ grx_text(titolo[0],x0+2,y0+10,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[1],x0+2,y0+20,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[2],x0+2,y0+30,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[3],x0+2,y0+46,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[4],x0+2,y0+66,FRAME_TITOLO_TEXT_COLOR1,FRAME_TITOLO_BACK_COLOR2);
+ grx_text(titolo[5],x0+2,y0+81,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[6],x0+2,y0+96,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[7],x0+2,y0+116,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[8],x0+2,y0+133,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+ grx_text(titolo[9],x0+2,y0+141,FRAME_TITOLO_TEXT_COLOR2,FRAME_TITOLO_BACK_COLOR1);
+}
+void scenario_comandi()
+{ int x0, y0;
+ x0 = frame_misure_vert->x1+7+20-7;
+ y0 = frame_titolo->y1+7+20-7;
+ FAB_frame_put(frame_comandi,x0,y0,800-x0-20+7,100+7*2);
+ x0 = frame_comandi->x0;
+ y0 = frame_comandi->y0;
+ grx_text(" COMANDI \0",x0+2,y0+10,FRAME_COMANDI_TEXT_COLOR1,FRAME_COMANDI_BACK_COLOR1);
+ grx_text("-------------------\0",x0+2,y0+20,FRAME_COMANDI_TEXT_COLOR2,FRAME_COMANDI_BACK_COLOR1);
+ grx_text(" esci \0",x0+2,y0+40,FRAME_COMANDI_TEXT_COLOR2,FRAME_COMANDI_BACK_COLOR1);
+ grx_text("[INVIO]",x0+2,y0+40,FRAME_COMANDI_TEXT_COLOR3,FRAME_COMANDI_BACK_COLOR2);
+ grx_text(" +/- aerei \0",x0+2,y0+60,FRAME_COMANDI_TEXT_COLOR2,FRAME_COMANDI_BACK_COLOR1);
+ grx_text("[1/2]",x0+2,y0+60,FRAME_COMANDI_TEXT_COLOR3,FRAME_COMANDI_BACK_COLOR2);
+ grx_text(" +/- cannoni\0",x0+2,y0+80,FRAME_COMANDI_TEXT_COLOR2,FRAME_COMANDI_BACK_COLOR1);
+ grx_text("[3/4]",x0+2,y0+80,FRAME_COMANDI_TEXT_COLOR3,FRAME_COMANDI_BACK_COLOR2);
+}
+void scenario_control()
+{ int x0,y0;
+
+ x0 = frame_misure_vert->x1+7+20-7;
+ y0 = frame_comandi->y1+7+20-7;
+ FAB_frame_put(frame_control,x0,y0,800-x0-20+7,frame_misure_vert->y1+7-y0);
+ x0 = frame_control->x0;
+ y0 = frame_control->y0;
+ grx_text(" CONTROL \0",x0+2, y0+5,FRAME_CONTROL_TEXT_COLOR2,FRAME_CONTROL_BACK_COLOR);
+ grx_line(x0-3, y0+15,
+ frame_control->x1+3, y0+15,
+ FRAME_CONTROL_TEXT_COLOR1);
+
+ grx_line(x0-3, frame_control->y1-81,
+ frame_control->x1+3, frame_control->y1-81,
+ FRAME_CONTROL_TEXT_COLOR1);
+}
+void scenario()
+{ scenario_ca();
+ scenario_misure();
+ scenario_radar();
+ scenario_titolo();
+ scenario_comandi();
+ scenario_control();
+}
+
+void info()
+{ int i;
+ for(i=0; i<10; i++) kern_printf("%s\n",titolo[i]);
+}
Index: rel_1_4/bca/readme
===================================================================
--- rel_1_4/bca/readme (nonexistent)
+++ rel_1_4/bca/readme (revision 1522)
@@ -0,0 +1,11 @@
+Hi,
+
+This is a nice simulation made by Fabio Calabrese
+(fabiocalabrese77@yahoo.it).
+
+Documentation is also available in PDF form on the shark website (only
+in italian, sorry).
+
+Enjoy
+
+PJ
Index: rel_1_4/bca/bca_raw/esplo5.raw
===================================================================
--- rel_1_4/bca/bca_raw/esplo5.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/esplo5.raw (revision 1522)
@@ -0,0 +1,65 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)&ÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿ+*#!
+.*%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ):'+) :-65/1&&ÿÿÿÿÿÿ *-"&* %!&$)"%+-&% &!+% )& ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+?.'O==D58F><$!ÿÿÿ=<EF&23FJ'16EI.;>)58%:=,10&$ +.(B= 7342)&
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  $)&.(:/G7'H7/@3-) 62&+*EE HJ MRNSHNOS2JN7Y\K<=/0/@@('&
+<9B=D?SO)75-* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-. YW.uqDYP)[M3P@0SE8J>2/(1-XUzz$€ƒ(v{!rv)Z^!BDWYC=>0=>0KK3BC#;;DEA?SP'JHVT#2/,) +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ++-ba3“`{tHl_?cT=\L<`SBSH2`Y/xr(—”5•–0šœ9z}&kn)QR*OO7VTGIJ:DE&EHJL47@?RQ!]\&[Z"KHTR,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !IGTQ$^W-ZM-aS9zkVj[Dj_Ai^1zq,‹ƒ.—“2}}aa ;:LJ#CA*@>/A@+HJ"HMAF=BORBBXW!po9spEvsPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + *'!.(OD(cW?o`Ik]BylJqd8pc,‚x1›“>{"MJ0/0,#! 41 ,,;>EJOTZ_RU MOVU%_^0\Z4gfH$#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  -)( +/,")# +#?4 i]GcU:i[6}nEmEƒuDzo-xr(^ZDB :6'%30//36 279=BE `a7**!*'1-KH7*'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+-(.2-*A=4<8,*$ +&QC(eW2o`9E4]M,QE[Uzv9eb/63#!  +*#%47
+$&#"ÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ")!.,%,1++/+(ÿÿÿÿÿÿD8"dV3`P/@/5&2);5DA.-/.!!  +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +  +ÿÿÿÿÿÿ +F:*bR80 ! 
+ÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&#$ÿÿÿÿÿÿÿÿÿÿÿÿ $( - +$& +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿ + + +ÿÿÿ +ÿÿÿÿÿÿ+%/1)692:0*,#"
+ ÿÿÿÿÿÿ
+%+!*%! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0&%"   , ÿÿÿÿÿÿ3-7IBJHBF@;7((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ (#C<4>6)RD9=$/   6&ÿÿÿÿÿÿ
+-(/A:A824>;6!!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ G=;QG>SG9P@1S6.=&( $ +*7%ÿÿÿ
+*&'! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ &G99C41YGCG3*>7+ !-,( 2-'*&##ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;+,J::6$"Q<7/ 6
+ ,%
+!
+# 50,(#!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ =20>0-PA>J84M32>"!4*! ! ÿÿÿ940 +&# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,$!@72RID]RLJ<9R>?E13<)-/"7&.7'1ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,)$,'!@<3G@8H?:C867++/%$;125,-+%'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"(#=849612/*$#)($ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"#%&;<445-692 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+%(!'*#%(! ÿÿÿÿÿÿ 
+ÿÿÿÿÿÿ !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+  "!ÿÿÿ
+
+ 
+ *' 52+=:5A@;43.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+
+
+ÿÿÿÿÿÿ  ÿÿÿ + +'-) '#HE<LIB[[SGG?('"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ51%ZVJjf[hfZpmd;;177/872! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&&++!'% $"(&ÿÿÿÿÿÿÿÿÿÿÿÿ'!gaS}zkŠ{‚€srpd@=441* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%'DE79:*DC1ML8WU@GE0ÿÿÿ&! )$c]Mxs`Œ{|‘€ŽdbVNKB""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1*"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!#EE9LM?GE6WVDNK8><'ÿÿÿFA.kfR|i„k˜•‚•’‰ˆv‘€‚€t|saaY#"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +/&.%"  ÿÿÿÿÿÿÿÿÿÿÿÿ!# *+&A@;DA:;8/GE9ÿÿÿ XUD€}l™–…‡„s‘€‰‡x‡…x…ƒw|ypjjb?>9 %%"6,"I<3dSIucWeSG-$ 
+  + ÿÿÿÿÿÿÿÿÿ0/+=96?<7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"WTMyvo‚x}zszwpŒƒpmftqjnkdgd]41,52+DB5a^Og_Rwi^Œvk¥‰~±‘†›wk}YKtRFK+ 9) +*
+ +ÿÿÿÿÿÿ!!52+41,GD?B?:ÿÿÿÿÿÿÿÿÿÿÿÿ32.NMIPOKZYUfc^]ZUxunole{xqwtm…‚{Œ‰€wui…u†|p‚pfŸ„{Ÿt”nažtd¦}i}WB€]IR6!4 +3!1"ÿÿÿÿÿÿ$!;812/*:63ÿÿÿÿÿÿÿÿÿ('#;:6KJF>=9MJEMJEdaZlib…‚{¡ž—Œ…“‰Œ‰‚‰„~…|uzŽwosg o{boP`=[?O7\J$RE"' +""*)$ÿÿÿÿÿÿÿÿÿ
+('#@?;GFBVUQWTOROJgd]…‚{|u‡„}‡„}{xsyura\Ysig‘ƒ€‰vo‘{nƒjV|bG~dA‚kA„o@n^-[OOG,%
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+21/JIG=<8CB>FE@KJEVSN_\Wlibqng`]VNKFIEDLFHkbcwmlwhc{j`aP<4#G5†uJqBdX&C<a[)51EC""!"&'10+'&"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ! 431540A@<VUP:94-*% B?8A>9A=<0,-5/1TKL@64  */%8/% >9/+;8jjR^_MKL>++!"! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +
+ ÿÿÿÿÿÿ '$ÿÿÿÿÿÿÿÿÿ"
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿ +&$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/missile2.raw
===================================================================
--- rel_1_4/bca/bca_raw/missile2.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/missile2.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÀÀÀ€€€€€€ÿÿÿÿÿÿÀÀÀÀÀÀ€€€ÿÿÿÀÀÀ€€€€€€ÀÀÀÀÀÀ€€€ÀÀÀ€€€€€€ÀÀÀÀÀÀ€€€ÿÿÿ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/sfondo.raw
===================================================================
--- rel_1_4/bca/bca_raw/sfondo.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/sfondo.raw (revision 1522)
@@ -0,0 +1,136 @@
+v= u<!s;"r;&p;)k:+f6(c3'p5r5v4w4x1w3x6 y8"t=o7n2r3{:~? {=$v:"w7x8x8v6x8{;x8r2l4n6o7 o7 m5k3k3l4m5&o6%t7%w6$x4z2~35u6r6q6q8r9t9s7r3d-e.e.e.e.e.d-c,s3 +{;€>z7t4r6m6!g5N.!M-"L* J%H!H!L#N%!M# +V,^4_5^2^2e7k=#a<*_9&^5#_4#d7$h9%i9%i9%ˆ9…8 ƒ6 6€6}4x1v/T6W6Z6[2Z1X0V3W5Q3)O/$M)N&O'M&F#AS"V%!W&"W&"[*&_.*],(X'#N"#P$%S'(T()T()U)*W+,Y-.?%D(K-Q/V1\3c6f9x;u:p9o9q;t=w<w:DDDŽCB‹@Š?‰>n;s=!q9 k1g.c/[+S$M(O*R+S+V+"Y-$\/)a2,k6$f2f/l3u;%{?'u9o1z:x6u3v4|8€<ƒ=ƒ=r:!o9n8 n7"n:%o:(n9)l9(m9#q:%t9'u8&s5&p5%o7(o:*`0b/f/g/f-d,_+\+T0V2V2S/T0U1R.L(I&J'K(L)L)O,S0V3^0!c4$h7&m8&p7$r8$v8#x:%u<p8j6h6j8!n:"s; u<g3g3g3g3f2e1c/c/L#N#Q"W$_,g4#e6$_2|5 ~7 +€877‚6„8‡8v9'{<+>*~:%z4y/y-|/h9%e6$`2"^0![/"[/$Y.%X-$[4%X1"U-!V, W-!W,#W,#V+"o+r, u-!v,#t+$r,$q.&p0'o1v6};!€="~<"|<#y<'x=+†:*‰=-‰=-…9)„8(„8(5%|0 ~2"~2"}1!|0 z.{/~2"5%j0%l2'o3(r2&r0$p,p+r*m7h4d1`1b3g4h4j4R,#R,#T.%U/&V0'W1(W1(V0'b=*d;)e6$h5"m6"o8$n7"j6R0&T/&S.%Q,$N)!M("N)#P*'] +j+x7!}: ~7‚7A!˜I(EŒDˆB…@€= {:v6t4‡H)„E&@ =<:€98Y/Z0^1^/[.V-S.Q1J!O& U*#V*!P%H!D!A" 2%7*!:-$:-$;.%?2)?2)</&=0'=0';.%8+"6) 6) 8+";.%G+L-O0R2T1U1W1X2k4h4c3b3#c4$c3d0d-u5v6w7x8y9z:z:y9i?'l>'p<&r8"r4q1p3s6\4([3)X2'U/&S-$T-&X1*[4-l6i3j2t8B#‡G$…C ‚>~6:ƒ=„?€?!}=!x:!v8^*])_)d*l.q1u2u2u;#x<$z<'x:%s6#k4 f3c5s;*w>+{A-z@*u<(l9&f7'c8(e)k/$n2'm1&l0%o3(o3(m1&k0(l1)l1)j/'i.&i.&l1)n3+b5 d7"f9$g8$h8$k8%m:'p=*n7"k7"j7$g8(h9)j7$g3g0e1e1e1e1d0c/b.a-O! V$ a)k/q1s3z:D%—D–C’AŽ=ˆ9‡8‰:‹=sB$rA#s@!q>q<m8k5h2Z0]2`7%a7'_5'Z2&X0&X0&O-$R-$U/$^4&g9*p=,r=+t<+ˆ1Š35!Œ3!‡20{0w0ƒ3…6‰7Š9†98{7w7u;z@|Bx>t:t:s9p6k5l6n8m7l6l6n8o9y4$y4$z2#w/ v-v-x.!z0#n6l5 h3!h5$j7&k6$m6!l4W2*W2*V1)V1)T/'S.&Q,$P+#a7b4g4p9%q8$m4 l5 n:$k4l5!j6!f3 b/],[,[,^'i2t=s>j7h5o="yG,DC~B|>x:w7x8z:|C&}B$@!„?‡>‡<‡8†4 q5v7z;{<x=t>p?mAt:"v: v:v:r;m:f8 a7e1l8#o;&l8#j6!l8#l8#k7"]/ _1"`2#`2#^0!\.]/ ]/ a5b5`2^0\.^/b2f6k1g/c,`-c0j3m5o5q4q4r5r5r5q4q4p3\7$W1X-`0"b2$Z,R'P&\'`-f3"h7&g8(e7(a6&a6&@!|=x;u<!u=$q='j7"e2X9%X8#W4 S.R,W._5e;%lBmClEjBc<[4P+K& b5c6g8l:q;r:s9s8n5p7t8v9u8w8y8z9{9{9|:};|:{9y7x6„: ‡=ŒBŽEŽE‰B…>€;p5v9z=z;v5t2y4|7^1c3i5p8q8p7l4i3X0(U*!W+a2"e2b+^$^$ O,M( +R*\0`0`,d,i1f9h9k<"n;&p<&t>$xA#{E#zDwCl>_6V.R,T.Z1b2
+g7m=q@rAt@vBxDZ*W'S#Q"S#W*'^00b67w6$x5$y5"z3~334ƒ3s7s7s6v7x9|;€>?^:"^:"^:"^:"`<$b>&d@(fB*T/T/U0 T0 S/!O-!M+J*B)$G+'J.*K.*J+&K*%L+&P-)R+V,\/a1c1a/\,Y*_2X,X,^2b9d:!f>$kC)j>%f:!g;"m?(o?)m:%n;&r?,f5e4c0b.c-d,e.f. +}>x=r:l8"h5"i6#m8&p;)^/)b1*e3,e3,e0*e.'g.'h/(z?x<w;t9s8p7q8p9P.O-Q.S/X1^6d9g<V1(R-$O*!Q+ W/#\4(_7+a7)~6~6€8‚:ƒ;…=…=†>£J¡HFšC +—B –@ +”A +”A += > “@•B˜B˜BšBšB‡?ŠAC–E˜F–E’DBˆ@€;{7x8v9q8p:s=#m4j1i1j4h4f2e2h5"L*}H(yB$w?$zA&{B%}B${@ w4r2m/h-h-j-m,m*m; o<p;o8p5p4t3u5M& O( T,U0V2U1R0Q.q1r0t2w4|7€;…> ‡@"“B=‹9
+Œ: ’@–D”B‘?¢;¥>©B¬E"«D!¨A£< 9’I‘HŽE‹C‡B†A…A…A†=…<…<‡=Š@‹A‰?‰=‰; +< +“@˜BšD™F—E•Dœ? œ? œ? œ? š=–9’535~4|3x3u4s3q6r6s9m2i.k.q4v9v9t7y;&u8%p5#o6%s8&v7%w5u1L7&M6$N4#P4S3X4\6`8’B+@)‹='‰;%ˆ<%‰>)ŒA,D/ŒB%D$ŽC$B#ŒA!‹?‰=ˆ<–E’A>‘@”C’CŒ=‡8 +m7+n8,o9-o9-n8,k5)h2&f0$V0#W1$W3'W3'T2(S1(P/&O.%[1!Z0 W0!X1"Y1%Y1'W/'U-%R."V/ Z0 ]2!^3"Z3$X2%V2&o.u3€8Š>–BŸF¨IªJšCšC–B‘@>‰>‡=†<ƒA~<y7z:?ƒB"ƒB$€?#n6k5i5l9$s?)xB(zA${>!u7*u6'u3#w4$}5&‚9(ˆ;)Š=+–>”?’=<‹8†5
+ƒ1 ~/i7j8l:l:k9h6f4d2 +X6-W5,U4-V5.U61R3.L-(E($K2I0E,B)B)E,I0L3o0q2r5t7s7q5m4k2z9z9z8x8v5s3q1p0^7(`6&a6%`5$^3"X1"S/#P.$D2K5P5U3`6 o?|G‚I—IœK›J—F”C”C‘@<‹C‡?<:;~:y7u2g.e.b/c1e3h5j5j4ˆ=†;…7…7ˆ9‹<Ž<Ž<:#?(E0I6%L9(J9'F5!C2j"k#m%o'q)r*q,r-n5n6n6n8 l8"i6!g4e2g9f8e7d6e7h:k=m?j0k3m5n8 n7"k7!h4g3r5t7t9p7k3h0g0h1z8|8|7{6x4r2m0k0T<"W=$S9 J/G) +K.O0O0{A‚F!‡I"ˆGG”I!•F’ADDŒC‹B‡@‚<8|6€:};z;s:o8n7o7r8J5G2B.A,@.@->-=,r8,n4(g/ b*^)`+b/e2V0#U/"S/!S/!S/#S1%V4(W5)`*b,a-`-^.]._0a3#d*h.#m3(q7,r8-o5*k1&h.#s7s7t8s9!r:!q9"n8 n8 w8{<|? x=p7m3m5q8$q9r9u:u:s:p: l:#h9%t2w8&t9)g1%],%Y-*U--N*,J%V-a4j5u9ƒ?‡>„8‡8‰<Œ?‹Aˆ?…=‚;‚:!Š8‰;†=={:z;~?ƒC > {;u8s7p7#o7&j5'g3%|8z6z6}9=„@‚>;x9x7x4y3y4v3q2l1e,h0m4s7v9y7x6 x4!p4p4p4o6p7o7l4i3l7l6k7k9"j:#j:#i<g<g4i6n9r9v;z;|<{;u4|<…FŠMˆKƒFA}>q5q7p:l;g9^6U1P-P2N0M.M.M-N.N-N-_9`5e4o6}:†;ˆ7ˆ4z9<†>Œ@ ‘B
+“D •H—L~Dz?y;y9{99‚:‚:‘HŽE‹BŠAŒC‹B‡>„;|<{9|8~7~9z9u8r6y6z8:€<€:~7|4z2z8x7x7y:{<y<w:t7s2s2t2s2q3p4o4m5l3n5q6t7w8x8w7x6‰19™DIIšF—B•?…B…BBAz@u?p>n;^0#].$Y-$W,&U)(P&(L#)J!)L)L)L'N'R)V,\0_2€D"†F"H’J•I–I–J—KJ‹F‡Aˆ?‰>Š>‹<Š<’C@‹<Œ=Ž?AŽ?‹<€?€<;ƒ:‚;;!|: w:ˆ:‡<ˆ=ˆ=…;‚8}3{1|8{7y7{9{:|;y:w8|5|5|4z3z3w4w4v5x;x;y<y<y<{<z;y:i8k;m>n@n@ n@pAqB‹G‰E†Aƒ@€?@B‚CxCwCtBq@ h: _5X/R+H+'G+'B)%;#4 4":+>2o4w8ƒ?ŽC”F–F–F”G˜G–E”B•A•A–@”>“>;Š8‡5 +ˆ6;==;‰@‰>‹;‹;Š;‡;ƒ:}8…;†<…=ƒ>=};z8x6u8t7r6r6q8p7n6l4s9!r8"r7%r7%r9&r:#s; t=t<%t<%t<%t>&t>&t>&t>&t>&~A/{>)w;!t9s8v;{?#~B(~F%}E"{C {@{@|BCE!{CzEyFtEk?_8W2R.@$#@$#>!#968?%F-z5„<’EžL¤O¥N¥O¤M™C
+˜A ˜@™@šA™B—@”>‘CŽ@Š<Š<Œ>?‹=ˆ:’E’D“@’?‘?=‡;‚9w9"w9 w;t;r:o9!k7"j5%j:&g7#d5#b3!a3#`2"\1!Z/T1T0 T0"U1#X3#Z5#\8 ^: \/]0^1`1b3!d5!e6"f7#f2$f3"e2e3f4g5g4g4^5!_4!`6 b5c5c5d4d5c*e-f0$b0)Y,)P&'J#&F"&H(L'O'X' a+!n0#w6$|8#“B›G¥M¯Q¯Q¬N¨J +¥H  K
+žH œG™F˜F–F“CŽA ƒA!€>=‚@ …C#†D$ƒA!€>ŠGŠEŠBŠ@‰@…>=z;c2$c2#b2a1^0\-Y+X*\2$Z0"T, S+Q+ P*N) L'?%?%@$A%E(H+M/O1T+U*Y,]/a1g5k8o9P/S2Y8_>bA `?Z9U4^3 _4!c6!d7"d7"c5a3_1i0k3l6h5 b1 ]/ [/"[1%f8j8p6 {7"‡9"‘; š=ž=™C¡G§L«NªM¤J¡HG£UžR™M“KIŠG„D€Bl6k5m7q;!v@&wA't>$p: j;k:k8m7l8"h8"c6!_4![,$[- [-\.[-\,[+[+Z/W,T)R(R(Q)P(N(O*P)O(R(U*Y/^2`5e8g8l9s;z>BˆEŒHœJ%œJ%žL'¡N,£P.¢O-J(™G"‰I%‰I%ŠJ&‹K'ŠJ'†G$„E"‚C ƒD„F„F€Dy? +x>zBGv6y9~96ƒ5‡6 :“>L¡N£P¤R¡P›O˜P•Q"ŽK‹HƒC|? w>!s=!n=j<g9"f8!f8!h:#j<%g9"a3[-I-J+K*N*N,"K-#G,#D,"_0(a1%c3g5j7n9p8q9f3a1_/^/_0`2"`2"_1!p9$p9$p7$q6$t7"w;{>}AzD |E‚D‰F’JšM¢R§S£X›P’GŒ@ Œ@ ŽBE‘F™B +™B +—A”A +‘? += +< +Œ; Š?"‹@#‰>!„9~3~3ƒ8ˆ=7ˆ>ŽD!ŒDˆDŠI”Tœ_–L˜L–JG†B~?v?t@t7o3h/c._/!]1$Y2#X3#M.Q2U6!W7 Y3`3j8!t;'b< +g>mBqEtEsCr?p=l2{= ŠDC ”D —F•FŽA ? Š< ‡=‡@‚?z:x:x<n8o9o9p:q;s=u?v@€: ƒ= ‡? +‹CD‹B‹? ‰= y?'v<$p8!k4h4j7$n;(o>-t2v4x7y8y8v5s1q/f-j1 j1 f-h/n5$n5$i0a-h1
+r6y={@ wAp?j=c3b2`1!_1$\0%X."Q*L'=,$@-'C+'C*%E'H&M*Q-x7 +}>„E‡G‡C‹>=”=ž7ž7 7¡8£8£7¢6¢5›C¢I§J!¢Eœ@–@>!‡9"}=w8r7n7g4^,X*X+b0a/a/`.`.`.`.`.H4-H4-K4,L5-M5+N3*N3(M2'Z4Y3V2U1U2U4T5V7fA&fA$fB eAb>^:Z5X3V3Z7Z7W4X5\9\9X5_=$a='d;'d9(a7'Z5%S4"M2M0K-K-I-J.G-E+B( +M'Q+Y0`3 d5!h9o> sA †E‰I#M'ŽO&K$‘G •E ™G"¤L¡IžEšC˜@•@–A–A‡MˆN‚Js?c7W2L-D*@((;%'9%'8'-4'./#--#..&37#"8$#9%$;'&=)(?+*A-,B.-G"J#M&U,\3!d9&j?,pC.n>n>l?k=h<d8_4]2H$
+K( O, S1X6\9^;`<"a8d;d;b9b9d;e<b9b8 c6!a2_0].Z/W1V1`9^7]5_5b8f:f;e:@ƒB…D„B?}<z9y9 +£B ¢C ŸB œ?›< =©A
+°E}LxItElAh> e<b<b<s'u)v- +t.s1r5#q7)p7,x3v1t2x7v9t8t:"w?({7|8;=„@†B‡C ˆD!ŽCBBŽAB‘C”C•D“D%”E&”E&“D%‘B$‹> ‡:„7€<'€=#€="€= €= >#>$=(„:†<!‡="…; „:„:…; …; 7~6}5 +~4 +~6€8<‚=|4}2|/1…4Š8 Ž;<Œ? Ž@C‘F“J!”M#–O#•Q"n9'k8%d5!^1].`/f1!l4%€;~<};z;w:u9q8p7p.p.t2y69 9 „8†9‘@‹<‡:ˆ:ƒ95~59ˆ=ˆ=ˆ=ˆ=‡<…:ƒ8‚7x@%x@%y@#x?"x=v;u8t7„5…6ˆ9Š;>?!‘A ’B!Š;‰:ˆ9‡9…7„5ƒ4‚3ˆ;‰<Š=Š=ˆ;†9‡:Š=ŽCŽCŽCŽCŽCCBŽA‰:‡7†4‰59 ”=!™@œB©]+¤W)›P&‘I#ˆB‚>|;y:ŠC%‰D%†E%‚E&~A"z= y8x5z1|3 €7$ƒ<(…>*„@+ƒ?*‚>'nK+iF(gD&jC$k@h8h1j/^8-Y3(T/&R0&O-$J)"G)!J+&N-$O.%P/&P/&P/&N-$L+"K*!Q+U,Y0^3 a7!e8#f9"g9"g9g9h;l<n>rAuDxDv?xAyC{E}G~H~G~G r<r<t>v@s=o9q;wAs:s; t? tA"vA!w@!y>y<}G{DyBzBE‚H …J†L€=}9x6w6y9|? €D"F$i4"i6#f9&d;'`:'^4$[0 W+b.d0h5m8p;r<s=r<€8w3s2u6%x9*x6&{7$8%h8!c3`2a3`3^1_2d7$_0a2d5g8i: i: h9h9nB)n@(l>$k<"i:j9j9j9fB fB hBgAh@j@i?j>o<o=n<l;i8d2 +`. ]* q;q;t>wAs=o9r<yCk2l5l:n>r@xB}AAyEwCu@s?uAtCtDtDƒE ~?x9r5q4p3o2l176x7w9u;w<y<{<x@'y@%|A#~B €B‚CƒBƒCyDj:Z3Q2K1"C+B*D, L.#G)D&E'C'A%B&F*N)P+R-S.S.Q,O*N)K.L-J+K*N-U2Y6"]:&l5 n6p8!s9!v: v9w7v6t1!w4#{9#=%?'?)<+~;+ˆ9ˆ9‹<@"Œ=‡8Š;“D&“E’FIK“LšM M¥N™L—J ’G E%ŽG'H'‹G$ˆG!C|@z= }="?$€A"~?|>=/&:)<)E. L1 M,P+U/S6V9\;a<f=!i;!h9i7k:i;j;k>!k?$f<#`8[3[8"Z7#Y4$T0$M+"C'9#4 H)K*P/W4 [7!^8!`8`8V* +[/d7j=oA p?n=k:a<`;c;!e;#e8#c4 e6$l;*Z8Z7Z7Z5[7]6^7_8V1X3Y4Z5Y3W1U/S-J4)G1$E/"F0"I4#K6#I4G2H3B/A-B1B2?0<0=1F)G*I+ L.#N0&L.$H*"D&iB%d= f;n@wE"}G#„J%‹O*o6o6q6r5u5x5{5{5_:'\7$W4!S2!Q2 O/ I,F)?%?%@#A$>%!;&#8)$5*&?&@(C(D)F*F)E(G'Q2 S4"V7#Z9&]:&]:$\8"\8"r;s9s9v:u7r2s3x8p5p5q7s7u9z<|>~>…J†K‡L"‡L$†K#„H#E!€D ƒ?‚>ƒ?…AˆD‰F‡D…B +“J)ŒF$‹D$H'ŒJ*‰F)‡F(ˆG+xE&vC$tA"s@#s@%r?$p<$n:"L,J'L(R,Z0_1c4f7qDoBo?o?qAuEzJ"}M%ŽE‰Bƒ<8{6 +{6 +y5x4 +y9 +{8 +z5 z5y5w7u;t<y8z9}9~:<‚=ƒ>…>€@?€=€==„=…?†@i?)g='i<%j=&i;$e7e7j:#e5'e4%e4%g4#h5$j5#l7%l7%c2d3e4e3d2c1`._-O(P*Q+T.W1X2V0T.Z1U,S,V/U0R-O+Q-\6X2S-P*P*R,R+R+ŽJŽJ‘J•M—M–I‘EB’>&;#‹9!ˆ8†9ˆ<"‹?%C(o=&l:#i7 g4g4i6!k8#l9$q?$r?$s=!q;p: k9 f9"d:$n<%n<%n<%p<$q=%s?'uA)vB*qE*pD)pB(oB%qB&uD&wF(yH(<:9„=ƒ<8 ~7 : ‰;‰;‰;Š;‹<=?’?•G•G—I—I˜J—I–H–H„I)„I)„I)„I)†K+‡L*ˆM+ˆM+”X"SŽR‘U’V"SŽRT”M‘JFŒEŽGI’K!’J"iC.hB-f@+g>,g>,f=+c9)`6&c7_5[3U0Q.K,I,H+ +d6&e7'f8(g9)h:*j;+l=-m>,e6"i9"o<!r?"r?$n>'k<(f;*n>(m='k;%h8"f6 d5!d5!c4 Z1Z1\2\2_3`2a3a3X2'U/$U1%Y5'Z6(V2$U1!W3#Y2!Z3"]4"`5"c8%h;&k>)l?*c8'd9(f;(g<)i>+j?,k@-k@-tA&r?$p="n; m:o;#q=%s?'r:+n4&m3%q7)s:)p7&o6%q8'f@)d>)c=(c=*e?,f?.e>-d=,‰B…@:y4 +z6=ƒAƒA€:.;.€</=/|=.z<-v;+t;*t5x7{:}=};};;;x6~:…>ŠA‹B‡@=|:‚=<€<;{:z9x8x8†F ‡H‰H ‰H‹HŠE‰DˆC„@==„B…C €@~>>B€A€?€@>ƒ?ƒ?„@;;=ƒ@…B†CˆE‰FŽGF‹DˆA†?†?‰AŒD‘I!FF’I ”K ”J“I•KŽGFFFF‹Dˆ@…=r7o6j1c+c-g3h5"e2!^5_6a8d;e>!g@#iB%jC&W.Z1^3 a4!a2`2b2d4d6)g8&l:!n;m:h6c3_/!c4c5e7f:!d:"d:$b9#b9%i9"j;!j;!m; n; n;p:o:w=s8p8t;t<#n7"h4g2 p@)o?(n?%n<#m:l9n8n8g5h6h7i8j9l;m=n>h>%j@'kA)j@*h>(g<)h=,i>-^<Z8[8`=e@e>e>i@}C|B{Az@{@y>v;s8›MŸQ#P$–K#’J$ŽH&†A |7w<v;u:t9t9t9v9w:†AˆCFFF“F–J›MF%’G •H™I™I—I•G ’F$“J“J“K’LŽJ‹G‡D…B‘C“C”D—E™HJŸL¡NL˜G•E–H–IŽBˆ<†;z8{9|:<…?‰C!ŽE"G$‘N#‘N#M NN‘O’P’Q¡L ¥P«U¬VªT§Q¦O¦OžP"œKL£Q!¨U#©S ªR ­V!¡R QžNŸO P¡Q¡Q ŸOt?k6 g1 +i4m8i6f4d3T2]6j:s=u=p;i<f;R) W, ^0h6q9z<~=€<y>v;r7m6j7i8f7d7b:!`7!`6 b8"g:%j;'j:&h7&dA+c=&f:g8k:k<"j=(g>*o?j:h8k;qAsCm=g7_;_:];];"^<#a<"f<#i;!n<o=v@{C~C|?}>A|?~A}@x=y?{C zA#t=}D~E~FzEwAu>v? yA&pElAj=l?tEvGtCp?U5(P0%O.'Q0+Q/-N-(O,&Q/&\39c57m84t80v7.p5/g1/_//dE3cD0dA-d@*g>(l@'pB(rC)xDt?n;j8g9!g:#d:!b;_3^2^0a3f7k9 l9j7`8b6c4i4j5h5d2_1[;0Y9.W7,V6+U5*S3(O/$M-"e6c5`3]2_2`1c0g0_9$a8"g=%nB)pB(p?!r? vC$q@rA!rA#n?#o@&rB+oA)j<%y;|AFH{Ds=l7i3€D(|@&w>#v<$w='v<&s9%p6"c.b-g/"l2&n2'o1"t5#z<'x-~/Š3–<
+ŸCžF˜D’@‡>‰?‹AD”H™LœO Q˜M’IŒDˆA…@…BƒCƒCCC‘D”GšKNŸOŸO•J—J›J K¡LžI–C +‘@ ”@–B—C•A’>‘=“?–B—@”?‘==<‘<•<™<–F—GœJ¤Q§R¦OªQ°U¡K¦M¦M¥L§L©N¦K¢D‰AŒGM#N$‰K"~Bs;o6a8_6\4W1S/O,K*I({9y6|6„:!ˆ;!Š9<”@zF!zC}B‚E…FDs<i3 +…C!‡G$‹K'M'ŠJ$ƒE|?w:d@*`;(Y5%T2&T2(T4)R5'R5%a8$a8$b9#e=#g@#kB$lC#lD!pH.qG.tH-wI/xJ0wH.rB+n>'u<v= v= u<t;u<x?"{B%k6(i5(g5*e5+h6+l8+r:+v;+„<„<ˆ@F‘F‘D”G™J•H™LœN LŸN¢P žL™E I IœJ–H‘GŽEŠFˆE˜?!–?#•?&='ˆ:&„6)ƒ7*7,i;!b3`.e.i/j,i* h)-ƒ.Š2
+•= H ¤O(¡M(œJ%‰CG#’M&•Q*’Q)‹L!…F€AsD&o@$j:#g8$g8$g:%h<#h<!oA)pB(qC)rE(rE&sF%sH%tI&qD%pC$oB%pA%rC'uC(uB%u?#nI7kF4gB0e@.d?-d?-c>,b=+q9 o9!k7!j7"m9#s;"y=!}@!‡<‰;‹>C‘B@‘B—F’A–E™G™G›IžK›H•BªI§F¢BB +CœGJžM‹I ŠJ +ˆJƒG~DxBwBvC[+”Q$‘L"—O'T+žT'œP›O€M.|I*wD's@#n=g5].V' +Œ58”=˜C +žI¢M£Q¥S²Q +¯M ¬J +¬I¬I­K­K
+¬K°R²T±U±U­S­S­S®V­Q¨N¤L +£J¥L«N®N±O¬R©O¦L +¦L +§M§M¥K £I
+¯M«K§H¥H +¦H ©J
+¯L´M­N¬M®O±R°Q­N¯P´U°L²P²P¯O±Q²T¯Q¨L +¬O«NªLªO¬Q­S­T­TºS¹RµP²N®M«K¨I§H§J¢D¢B§G +ªIªJªJ«KŸTS™R–P“N‘LKJu@!u?#t>"s=!r< r:r:q9ˆC‡B†A‡A‰CŠEˆC‰B„@…A‡B„A€?~>?€A‹L ‡I G!~F!G"†H#‹G ŒGŽ> +@’B“C’B’B“C”D†C&ƒB$?#}=!~?‚@‰DF†J(„G(†I*ˆK,‡L,„I)†K+‹P0—V0—W1”V1ŽT/ŠT0ŠU3„S2~M-¡VŸSŸQ!¡S%¥T'§U&¥T£RŸZ!œW™TšU›U!œV#™S –P—I“F’DC!‹?„9„:ˆ>€5~6 ~7#z7&y7'z8(};+>.„A‡DH’K!“K#‘G ŽC‹@…G …G"‡F&‰H*‹J*‹K(ŠI#ˆG’L’N”O%’O%ŽL)ŒK+ŒM.O3‡JƒH }E {E#{E#€D ‚B„Av=*|C0€G4~E2v=*r9&s:'w>+}<(y:(v9's9%w:%?$†D$‹F%“F’E“F”J”J’H”K™P#¢Q¢R›O’JŒJ‰JƒH|CŠP ‡JƒD‚@‡AŠB‹B‹AC‹?ˆ<Œ@”F"˜H%–F#’BˆG‹J L"ˆIB|?~ADxD
+|GK‚L €KKKN|L|J|GƒGL•P™QœQžQšM–J˜L•KFŒCŒCG"|D!vA"n<#j:#m:%p<&s=%nA i<f9j=rE$vI(sF%nA pArCsCsB!sB!tDxIzKƒT €PM…L‹N"ŽM%ŽJ#ŒF"|IKŠL'K+H)ˆF$ƒE E†B‰EIK!L"I"‰E†Bu?t?s>q;o7p6t6v8€<:‚;ˆ>!Š? ‹?B—HœNŸQ ¢T#¢U! S¢S¥V¨Y!«M­O­N ¬L"©I©J©M«O•T6“R4”O0—P0R2£T3¥U2¦S1Q*ˆM%‡K&ˆN)ˆM+‚J)F(H*HŠG„D €A ~A$A%…D&ˆE(™F(—D&•B$”A#“@"’?!<:’D’C"‘B$?$Ž>#@"“D#–H"JGG‚E„E†E‡D‡B€F…HŒH!F#ŒC ŠB…BƒCo>o>p= q>!r?"s@#v@&wA'žF ¡I#£K%¥K&¥L$¨L#¬O$°Q%«Q¨NªMªL©J¤E ¥G «L
+œIŸI£L§M«P°S´VµW«WªV§R¤O¡L¢N¥O¨SžT +ŸR ŸR ¡R +¢S£S¡Q ¡N
+³U¯Q­Q°S¯U«P¨O¨N¹L ¶J ¯I «G ©F +¬G±J´K¨I«L
+­N ¬M ªK ªK ¬M ®O +§R§R¥O£M J¡K¤O¦Q°X±Y´X³W±U°T±U²V§OªN +­M®K­I¬H ¬J «L§W"¥V¢QJ™D +•>’86P%U*^1e7j<n@tD wG#•N“K’K”M!‘L"ŽJL”R ‚8‚8„9Š;‘?—A˜A š@ —O–N•M•J•J–L™M›O¦L§M§L¨M¦N ¤L¢I G“GŽB‹AŽDDˆA…=†>~={; u9!o6"l5!m4 p6 s7^7a:e>g@iB!kD#oH'rK*dF$eG%fG(eF'cD%bC$bD"cE#xC#zE&yF'uD&o@"k>!k?"mA$f<#g=%i<'i:(i8'j:$m>$pA%v:|A‡I"‘P(—T*™T+˜Q'—N%™X ›YY™SJ †B|:y7n2 +k1 k2m5l6i6k:p?!uB/vA/xA,|B*ƒF)‡H'ŠH%‰H"—=˜>A¡D¤G§G§F§F›@BDŸFF™E—B•B•KFDŽGŽF‡B„>ƒ?u=,p=,j:,g9,d8-f8+g7)i8)v<0u;/t:.u;/x>2y?3x>2w=1w<*z?-E1€F2E1|B.{@.z?-r?$sA(sA(m?'f:!`6`8`:#U5(U5*U4+V4+W5+\8,c>,hB/ƒI#†J%‹M(‹M&ŠJ$„C;{7q)y.ƒ5Š:#Š:#†9%8'}8)Š;‡8…7ƒ6~3x.v/y5R'T*V*Z,^/a1d2f4w6z9?‰E J#‘I#E ŒBœPžS¢X£Y¡ZŸXŸXžX¬V§Q¥N¦Q¥OžJšF™G”=‘>>‰>‰>‹@@’A’CAŽ?@‘B’CAŽ?’? +–C›HKK›H™F˜E£L¢M¡KœI˜F”D‘C‘C„:„<‚<ƒ=„?‹B”GšL@
+@ ŽA +B”F—I›MO!™E!ŸG!¦I ¨G A“:ˆ40}?(y<)x:+w9,q5*l1#k2!n5"j7"m:%p=(q?(p>%p>#tB'wE*^9`<gApGvKvJtEq@r3$u6'z8({:(z9%z8"{9!|:"wD'r?$p<$r@)o?)k;'g8&g8(d-b._.\/[0^1`2b3O2P3R5S6S6T7V9W:Q3S6V9W;V:U8V9W9i7g5e3e3c3b2`0_/f1e2c4"b5"d6j8s<x?!€Q3{N1uG/kA)d;'_8']8(\8*L0T4^9e<c<\:!T9&O9+M,%L)%M*(P,,Q+*N(%R+$W1&y:~?B!}Ay=v<z@~D|;'|<!€?‡CŒGŽDŠ>‡8sB$vE%zH'|H#zFzE|F~H…A€<};€>€?{<x8y9r<$o;%j:$g:%f9$f:!g9h9s6!x;&|?*z=(t7"r5 v9${>)o;-o<+o=&m; l:m;$p=,s?1g='d:$b7$c8%h:*j<,g9*e7(r5 q7!o8#l8 l9s:z>€@}:{:x:s9m6g4b0_/m6"r8"|<!<|9s7h5$b4'h7h5k5o7o6o4r6x<›MœNMœLœKžM¢O¥RRŸT WV™T—Q•Q•QžM  O£Q¥S¥S£QŸNL ON‘N!‘N$‘M&M#L!ŽL„K ‚I€G}Cz@x>w=w=‚8‡<ŒA‘D’D•D˜FšHœL +›K™J˜I•G“F“F“E„A…BˆD‹G‘K“K’IF…G‹H–IžIH—EŽA‡?LŒJ‹I‰IˆJ…H~Dz?r6u9t9r7r7u:u:r7|:‚@ŒH!“N%—P$˜P ˜P™Pr:t<v>y>y=x<|>}?r6s6!s9#r8$o6#l4#i4"i4$kF+jE+iC.gA.f@-d>)b=#b="o?o?n=m;"l:#j8i7i8l;l;l;l;m<n<!o="p>%c/g3m7p8q8q8u:v;r@qAp?m> l=#k=%k<(j=(b9%b9#b8"c9!f:!f8c5a2X3`4i6p8q8m7d5!^3#d4a3_1^1]2]2Y0V-e<&h?)h?+d;'b7&b7&_4$Z/e5d4e3c1c0f1l6o9‚?…B‰D‹FŒE‹D‹B‹B’K“K”N“MKIŒJK‹G‰E‡B†A‡B‰DŒHK‰FˆE†Bƒ?=€<;;‰Aˆ?‡>†=†=†=†=†<|;~=€@‚@‚Aƒ?„A…BŠGŠG‰F‡F†E…F…EƒEz:y9y8{:€<‚>‚=<~<ƒ>ˆ?Œ?‹>„<{9u8†;„9‚7€788~7|7r=w?{A{?~?@"€?!~; ‚BA~=z9z7 +}:ƒ?ˆD^9'a<*d?-f@-e?,f=)f=)h>(d<f>g?f>d<b<c=d>o<n;m9!l8"n:$q=%tA$wD%k@-j?,h=,e:*d9)c8(c8'c8'n@)m>*k<(h9'f7%e6&d5%d5%W2)W2)X4(X4&X4&W3#Y4"Y4"]/]/\0\/Z0Y/W/W/e6"d5!c4 f6 j:$l<&m='m='k:+n;(p<&s=%p<$k;%f9&b8(r?.p<.m9+i8)h7(h7(h7(h7(G(K,N-Q,U.^4(b6+c4*]6%`:'d>+f@-h?+i@,jA-kB.ŒIŽIŽIHŽGG“J–M ™M-šN.›O/›O/™M-™M-N/žO0ŠP+‰N,‡L,…I-‚F*F&D"E ™J™J˜J˜J—I˜J˜J˜J‹@‹@Š?Š?Š?Š?‹@‹?„<ƒ;‚;‚;‚;ƒ<€<€<wD)vD)wE*uF*tE)rE(qD'pC&wC+t@(q=%p<$p<$o=&m;$l:#g4#h5"k7"o8#o;#o=&m='l=)g9"g9"f8!e7 e7 f8 h:"k;$GŽFŠB†< +‡:>’@’@Š@E”J—M–M “J’I‘HS.T/T.S-T+U,Z0]3S*T+U,U*T*W*Y,\.X0X/Y0Y/W-U,R)Q)`-a.c1d2e4e3e3e3h;&g:'f9&d6&b4$a3$a3$a3&l<&j<%h:#h:#i<%j=&h>&g=%†>‡?†@†?ƒ?<~;}:†?‚=€;:;~:z9x7u6u6v6v6w5y5y5y5q3
+s5 v9 +y:|<?‚B‡D~L1}K0xF-p>%n<%r@)rB,qA+`4`4_3Y/U+Q(Q(Q'o@&qB(tB'tB'tA$vA"xC$zE&xLyN|N}N~LNƒP†S…? †@ˆAŠC‹D‹D‹E‹E}@$B#‚F!…J †K…J ƒH ‚F!€B~?{<x9u6s4r3q2w7u5s3s5t8u;v<s;\7]8^8!\7$Z7$W3%R0$P.$H(F)F)F*F+ E*!A)>%8)$7(#8&":% <%@#B$E$F)L,P0!S2!W3#X5"\7$_:'{7}9y7r3p4r7r:p8„L'K'~H&xC$q>!m;"n<%n>(D) G,#K/$M1&M/$L.#M- N.!E,'F-(I.'I,$J,"M-"P0%T2&N5!N4#M3&L1&K0%K1$K1 K2R* U.Y3\7]8[6X3V0f7f7e6e5f6g7!h8"i9#g7 c5a3b5d:"f='e?(d>'q=r>p>p=m; g7 d4 a0d<#b:!_9"]9#Z7#S2N-H)7$9&>(E+O/"Y4$c8(h:*f3i7 n:$r<$q9 r9s:w;i6#j9(i:(c8'^8%]:'X9%S4"L,M,N.K. G+ E*#E)%C*&v:z>B#€D(~B&{@"z?z@„C‰EŒH#ŽH$‘G"’G–I—KœL +œNœM—J“GEG“J‘E%Š>ˆ<Œ@ Œ@ †:„8‡;x6z9|;~>}={:x7v4s6s8t8r9p8m7i5g3Y7V4Q.K+J*I*K,J.H(G'H(L,O/P0M-I)A&<!:>#C&D'F)J-<'?-B/E0I-U2g;uD{CzE{G{HxGuE!pB n@y9x:u;r;s:s8 v7 w7 h0 +k3o6s7t8v;{?}Ao?p@qAs@r?s?t@vCz@{AyAu=o9j5i3g4uAp<o;s?t@p<o;q=g5i7l;n=o>n=m;l:f?f?g@f@eAdBdBdC l;l;l;k<l=m@#oB%oC(h<!g; g; h<!i="g; c7`4f9&`3 ]0_2b3a3b2e5{8|:"z<'t:&p6"r4x6}:6}6|5{4w1s-n*l(^1^3 ^8!_;#a<"c;!e9 f8€H%€E#}B"y<w8w7z9~;‚H‚H€G}CyBxAyC{Ev;v=x?"w@"v?!s>r=r=s?o;n:r>t@s?r>t@o7p8r:t=v?w?w?w?uDsDqAo?k>j=h<h<h:"g:#e8!`6 \2W.S*N(K-#K-#L.$N0&P2(Q3)O1'M/%N/-I*(J(&P-)T1-V1+Y2-]6/h0h4h9f>fB gF'hG(iH)‚B)‚B)?'=%~:#|8!|5{4};|;y=z@|BC„D †D!|=~=ƒ?ˆBH"˜O$¡W(¨\*›A™@•> 9 ‹7‡5ˆ8Š;?Ž@BDF‘G’H“I‰>‡<‡<‰>‹@!‹@!‹@!Š? Š:!Š:Š;‹<Œ=Œ=="=$@@Ž? >‹<‰:ˆ9‡8s6t7u:v;v=v= u> u="‚7ƒ8„9†;ˆ=ˆ=ˆ=‡<}7{2|2 +‚8‰;Š=>’A‡<ƒ:8}7z7v4p0k+i>i>j>l>o?rAuAwBm5$g2 ]-Y*Z-`2f6 l9$šS%˜Q%–M$“H ’EB?==;‹9!†5 €2~147ƒ<;€7~6~7 +~7 8
+8
+…>"„=!ƒ< ‚;„=!…>"„=!:€=#<=~<|:|:{8z7„5‡8‹<A#“D%•F'•F'•F'–E•D’D’D‘D‘DE‘FŒF$‹E#ŠD"‡A„>;9~8u>q9q6u9y9x7y6 z7 +u=0s8(r3!t2y1{0x+ +t(k5m6o8t;z=AƒC…E¯F +ªC ¢?>žA£D
+¦F ¦F }:~;;‚>…A†B‚A@e:e9e9 a7_5]5_7a:\2"Z0 X/Y.Z0^1^2^2b;c<a:^7_8a:_8[4]:];\:\;Z9X6W5V3\/_3d6h:m=n>o?p>oB/j?,d9(\3!V,P)M&J%B-,C.-B-,@+*<'&:%$:%$:%$2,00'*0&'6+);,)<)#=)"@)!D)J*T,c5u?H‰L ŠM —=˜>š@žB D¢F¤G¥H–D’D‘G ’M$’Q)”P)K&‹E!u@ p= k9 e5!a2 \/T*N%C)E+G,I,H,K,M/O1S2T3 X5"\9&a<)c=*c:(a8&X6Z8X6U3U3Y7X6R0X3Z5\8]9^:]9[6Z5X6X5V3V2X1Z1[3\4K0'L1*M2+K2-J3-J2.G2-G2-^+`-b/a.`-`-c0e2[.Z+_,g3p8t9x9|;†4Š6“:?£B¥D!£E#¡D#–<—=˜>˜?—?”?“>’=<Œ;‰<ˆA‰E‡B‚=~6P*N'J&G&G*&E,(C+'?+$P*T,"Z/(]0*a2*c3%f5$h8"n<o=t@xDzD x@s8m2j2#m5&l4%h0!i1"n6'm5&g/ q- t1!x5"|:$='<)}:*|8+t?/q<*o7&m4!o5!u8#z>&~@)ACEEŒD‰@ƒ<:w?yA zB!x@t<s;u=x@u7"t3v4€: ‡= ˆ<‹;=’A –C +HœJ˜HC‚?{=z<{={?z@w@t>p<l;xA,n;&a4[2Y5Z5"Y4"W0P2R2T2Y1]1c2d1g2n:r<{>…CH“J”K“J¡QQ•N‹I‚CA€A‚C€Az;t5 t5 z;€A‚CƒB‡;
+ˆ< Š< Ž> +‘? +’A “@
+“@
+‡D +ŒFG’D’B”D˜KR¢O +žM˜I‘E‹D‡C„C#ƒC'wAv@t? p<$m:%j:$j:#i;#[2\3]3[1\/\0`2b4m7l8 k9i:f8c6_4#^3#A*F,K.O.P,L+J+H,Q,V1_8f=!i="h: e7d5m; o<t? y@"B!†D"ŠF#G#”R ˜RŸT¥V©W¨V£QŸN‘<Œ;†: €9}8|8|8}7Š>&†8!‚5…5Š9Ž="< ;ƒG#„H$…I%‡K&ŠL'ŠL'ŠL'ŠL%‹E
+•JŸO£P¡K›H˜G˜G‘MK†FAx=q;n:"l:#`3^0[.W,T)R(O(O)J&K'M(L'M'N(S*V-V'W(W*W+W*S)Q&P$]3b6h9m9!n8l9k:j;k=m?q@ r? p=o:m6m6ˆ@Š@B”E™GŸJ!£L!¥L"G ¡H ¦L­O®P¨M F™B +™F‘B‡=€;|;z8u3q/[4#Y3 Z1`3f7j8k6h3_3`4a5_5`6_5^6]5Q6!Z;'dA.gB0e>-^9'Z6&V5$m8i6c1\.W*Q(M'L'S-R,N)L&H#F!C!C!G%I'M)M)O*Q,U.X1 \0#]2"a4!b5c5c5b3!b1"x:~<…?‰@‹A‹CŠEŠGC‚D‚D‚B€@?ƒA†D!”@•A˜BšBCŸC D£E£E¦H «K¯O­P¤J—C<€@$u9g0],Z,X*S%N =*A,G.N2V7\8\6[3a2a4a4a5`4^4\4\4a4c4g4h3f1d1e3f6g8$f7#c6!`5"]4 [5 [5"Z5"`8_6 ]3#[1#Z0$Y/#V/ V/Z/\1!^3"a4!a4!d5!g7#i9%g4#i4"k7q9s:u9v8u79†;Œ=‘?’?“@’C“Fˆ=‰>Š?‰>ˆ=‹=A“E˜F˜G—F—F˜E˜E˜E˜F§M¨NªO©O¢L“D„:z3T+J%=78!<%=& <%\'!`)"h/$s5&}<&>#„=…<D€EE €F €F €F!E }E wAw?x<w9v8t9u<v@&s?)s?)r>&q?&r@'r@%sA&sA&q>p= o;#n:%n:%n:%q;#q;!l4n6q7s7r6s6t7v9v4x7{9;‚=„<…;†:}9‚9‡;Š;‹;‹;Š?‹AŒ9<‘><‰8 +‡6 ˆ7 ‹:‘E‘E’FF‘G‘I‘I’J™G™GšF˜E‘D‡>{8s3P+H'>"8!9&>+$A.'C/&V*[- a2"j7"p="v? yA{A@‚A…A‡DˆC‰D‹D‹DqA*tB'vC$xC#tA"o=$h9'c7*s:u:t9t9t7t7u6u6q9s8r6s5s5v6w8x9v5x7{8{8{6z5{4|5ƒ8…:ˆ<Š?‹@?Œ>Œ=w:|;€: :ƒ9:‚=?‹8=•B“A=Š;Œ=@‡<ˆ=‡=‡?†A‡B‡C…D™I˜F—E—F•FE ˆC"ƒB$i/d-\+U*P)P)P)P*A,B-D/G1K3O6Q9R:o9r:u<z=?ƒ?…@‡?‘> –A ›E
+žH œF +”A +ˆ9‚4x=x=y=z;z9z8x6z5n6n5m4o3p2r2s3u4u5w7z8z8z7x5z5{6{/|1}4~5|6|5{3y3r6u8y8|6}6|7};~=ˆ8=‘C‘C‹@‰?ŒD‘I!†7†7…8„9ƒ9€;~<~;šH˜E”A +’? +=Š=„:9†7†9‚:"|:$u7"q5p2p3W+(W,&V+$V*U)V+X-Z0X0&\2&a3$f6"n7"r9v9y:‚@„C‰FIJ‡G$C)y?+o9q9s8t7v7v5v3w1n;m:n7"n5!o5!q4q5r5l2n4 s6#s6!s5r4t4t4y2z4y6y8x8u7"r5#q3&m2q1u2w2x1x3y7z:ˆ<‹?ŒB†>|7y4 +{7€<c1h6k< n=o:r8{:<s@q;s8x9~;‚=;~9{?|;€8ˆ:>‘@‰= 7|7{8y9t8 l3b-X'S$C,&M2+R4)V2"]4 h:"n<!n8e8%h:#m;"r< t=s<p:m:m5k3l2q7y=#|?#y9s3c5e7h:l;n;n;o9m7i3h5i6h6h6d4a1`0_1]/[-Y,Z-Z-Y,X+P3#R2#S4"S4"S4"S2R1R1M/ S3 +V6V4T0W0]6d=;'&>,,A//@..?+*B*&I,$N0&p;p8q6v6z8}< =€>w;|<„>‹@Ž@BEGI +‘K‘LNŽM‰J†GƒEX,Y-V*P& +R*Z5_9"_9"e.j/q2w5{7z9y9x8k4i2i1l4r8 v: v9t7d7f7g8k9k9l9k8j7o8#m9#k7"i6!h5"e5!e4#c4"h/i0l3n5!o5o5o5n4p-p-o,n+m)k'j&i%S&+Y*0].4_06[,2V%+O$J>Ž?@ˆ=„9…8Š9 Ž< +r6q5n3j.h*h*i+k-o3x9‚>…<‚8‚8ˆAIŠ@ŒBD’F
+—H +šJœJœJG†Dx;h2 _1[3U2O/L+"O-#V0#\2"`5%_5%]6'\6)s3r2q1s2u4x6{9|:m4m4o4o4p3p3q2q2R/P.N,J*J*J,L.N0K$%R**X00\31^2/^1,a2,b3-e5 +f6g7i9j:j:j:j:w8v7w8z=€C +„G„H„HŒA‹A„?|;v6u4v5z8~?}@#{?%t:&m4!j1l2p3 v9|@B!?y7{7‚>ŠF!:€9…:Š;‘<—> š? @!¤QŸM•HF„D {@ o9e2Q/%T0$X0$[1!\1!Y/!T.!R-$T,"U-#V.$V.$U-#U-#Y/#[1%S.%R-$R-$S-$T,"U-#X."Y/#p4p4p4n5o7q9 r<$s=%ˆ6Ž<•B—B—>—<›?ŸCŠ>‹?‹@ B"B"D$D$ŒC#”D#‘A Œ>‰;‡<‰?CŽFc5(_4+Y2-R0.N/-M-.O0.S1/r2t6t<%q=(o:(p8's:'y<)r7r7q6n3j/k.q2u6r9(r7't5$v3"{2~13ƒ2‰9ˆ8Š:?”D!•E"’B@“B•C—C™C—A’><‰:‰>‹ACCŠ@ˆ>†<†<ŠA‹AŒBAD“E•H—H¡< ¢<#£?%¤@(£A(£@) @( @(Š?B‘DŽ@‹: ‹9 = •B‰?"†?!„=!€: z7u3r0p.R)#X/)\6-\6-W1&P,M)M)w0t1q1o3n4o5t8 u9f(e-d0c3c3g3m3q3‚F,~E*zB'xB&yD%|E'~E(E)k=l;k9h6h4h2 h1
+h1
+z7$w5x1}3€3ƒ2ˆ5Ž:A“B–C—E–C’CŒA‰?˜@™AšD›E˜D•A=:–>—?™ACŸE¢G£H¦H~>?€?@}>y;v8r7X8+X8+V6)Q1$M- L,O/"S3&g:f9c8^5Z3T/P,N*z-2 …6%„6"‚2‚0†5Œ; j.h.f/d1e2g3i3j2r9%l8#e7 a7f:!n; w:|9k/g/c0_0`1c1h2j0s@#r?"p?l>i<f;b:b:q<*n:%n7#k4 e,^%`(h.[*_,b.d0c0`/ Z.!W-!M*$J)$I(#H)&I+)H,+E)(?%&I&"J'!O*"Q,#T.!U0 V/U/eCeCcCbA`A^?[>Z=ƒ?‚>};z9u8s7r9s:„2„4‚4‚5!5%}5&{6'z4(J@'H<"D6>-=( A( H. +P3{?#w>#t>$q=%r<$q9 r6q4k6$b2Y/X0b6p=@†Bv:"t<%p>%k=#i;!i9"m9#r9%f)$f+%e,%_-$\-%X-$T.#R."U'W+]3_9&X4$M- L0$T8-n4o5s7u7s7o6"h5"e4%€;{6u3u4y9z=!x;t8ƒ=„>‰AŒDDDŒB‹A…7 „6‚65€5 €7$‚9&„;(†6„5€5~7|9z9#v7%s6#w8w8u8r9o9l9j8g7 V'Y)`,j2#u7(}<*€<):(^5#Y3 U/Q-R.U2Y7];"e8f8j9o=u?x@y?x<\=(^;%c8%h8$j5#g4`0[-I#M'R,U/X/X/Y0Y0o2o2p3q4q4q4p3p3g3h4g3d0`,^*^*_+U3U2T1U2W4[6[7Z6Q0P/P/Q0T3 V5"V5"U4!g3i5i5h4j6 m9#j6 d0f6 i6!n7#r8$u8#r8"q9 o9lBn@q?v>x>x<s9p6„5…7…:„<=?€A€D y:y:z;|>A‚D…G†Io@"m> k<l;l9h5f0b,U1X/].c0j3m6!k7j8j8l:!n<#k<"i: g7 e7f8 P, Q-!S/#T0$V2&W3'W3'W3'f4h6i7 j8!j8!k9"n<%p>'s.r-t,v.y1"{3${3$z2#n<l:j8i7k9l:k9j8q8 +s:u<u<y@}D|Cw>{77‚6†6†6…6€5 +4 w3z23†4‹7Œ8 Š6†5p=*p=,l;*e7']2"V/ S.Q-S.%V1([5*_8)a8&a6#`3_1h3i3k5m9!p>'s@+r?,o?+…A†=‡:Œ;=”A—E–E{?y>v;m4e-]' X%
+W# _+_+a-b.c/c/c/c/e5f6 g7!g7!f6 f6 i9#k;%q9(p8'o7&p8'p8'l7%i4"f1q2+n/(k,%j+$k,%m.'m.'m.'k/$m1&m1&k/$l0%n2'k/$e)g8$j:&o:(u<)x>*w>*v@(t@(e7f6m6!s9#y<'{?'x>&v>%r1q1o2k/d+`( +`( +_)o5t8y< > ‚=;€6}3 †D!„B €?!{>"x<$q8$j2!d/V5,U3*U0'V0'Y1'[3)\4(\4(n1o2p4m5m7l8"n;&o?)y:y:y:x9w8v7u6t5b2c3c3b2`0_/a1c3Z1Z1W1X2W1T/O*L':,#7) 4&3%5'9+";-$<.%9,#</&</&9,#8+"9,#6) 1$D#F$L&Q&S'R'P(O)R2U1X/]0`1`3\2Y0{6}8€;€>?ƒA!„C#‡F&q5t7z:€= †A ‹BŒBA“EB‰?‚;|7s1i+d%O)&N(%L)#N+%S.&V/(U/&U-%m6!l8"m9$k8%h7&g8(h:*k=.Z4)Z4)Z4)Y3(X2'W1&V0%U/$d0f2g3h4h4i5 l8#n:%l-l-m/ o1$o4&m3'j0%f-"|8%y5"u1u1w3 z6#|8%}9&}1!ƒ7'†:*†:*‡;+‹?/Œ@0‰=-x@%y@%~>#=#~; {:x9t7p0$q/#r,"v,#w,&v-&r,$o+"R* T,"V.$X-$X."Y/#\0%^2'V."V/ X. Z/^0!a2"d3$e4%}/{0 |2}6€;=#}<&y;&‰8†7‚78‚:‚8ƒ5‚2 +c2#c2#a0!],X'S"Q Q c/c/e1f2g3g3g3g3q9"q9"r:#p8!o7 n6p8!r:#s=%p<$m;$j:$h9%d7$^3"[0 M3J0F,E+E+F,F,F,M(R-V1T/U0W2X3 V1Z+\,b-g.h/h/f/d0p9%p7$r4%t5&v6*u7*r8,o7*i8'k:)n;(o:(p9%p7$r8$t:&€?~={:z6x4w2w2w2y:x8u8t8 r8"o6#k3"h0e2/_/+X-'T,$R,!U*!V'V&U!Y%`+f/k2q4u7 w9"†;‡<‰>‹@ŒABBBy=#y=#x<"u9q5o3p4q5g<c8]4Y2R.N,G'C$V*+S'(Q%&P$%P$%P$%O#$M!"V$%[)*]+,Y'(V$%V$%V$%S!"= B!I$M&!R)#R,#R-$P.$Z6Z3Z1\0^2]3Z4X4t2x3{5€65†6Š8Œ:n@(k?&i<%g:'d9(d9)c9+c9-i9#g7#e5!c4"a2"^. X*T%V%(P"$H E"H%N)#T+%Y,'k3"o6#t:&z<%~;!€9‚9„9g0g0h1i2i2h1h1g0u5w7x8x8w7x8{;}=!Š5 †4‚1€1 3%}5'z4(y3)t3r1q0r1t3u4 t3r1s3y9}="z:y9z:{; z:p: s9!w9 y9 y7v6r5o4|: {8{4{2|3"{3$w4#s4#b7'f8(j;+n;*r:)u:(y<)}>,
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/aereo1.raw
===================================================================
--- rel_1_4/bca/bca_raw/aereo1.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/aereo1.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/cannon.raw
===================================================================
--- rel_1_4/bca/bca_raw/cannon.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/cannon.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/aereo2.raw
===================================================================
--- rel_1_4/bca/bca_raw/aereo2.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/aereo2.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/esplo1.raw
===================================================================
--- rel_1_4/bca/bca_raw/esplo1.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/esplo1.raw (revision 1522)
@@ -0,0 +1,46 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$#BB??-*ÿÿÿÿÿÿÿÿÿÿÿÿCB]_`b_b>Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-+LLŠŒ'³¶C¹¹G›™2‚|.2)3&
+`[ ut‘‘~z~ƒ‰%6;"% +ÿÿÿÿÿÿÿÿÿÿÿÿA>?ÿÿÿggaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ94 qn'µ·LÈÍ=ÄÉ'ÒÕ0ÓÏ:»°<hVH. - kRˆ| “ Ÿ  £ˆŒmpBC,*ÿÿÿ$$%'?B ;?+. +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ Ž<±³8ÖÛ6áæ(ÛÛÙÏàË>°$dJ„N"Žb¼¥!Ñƺ¿¹ +ËÇ—•’‹‰„€mh3/ 56nqhm“˜Htz4HKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;7hiª¬1ÂÆÞàìåijԳΝ'ŽNz1ŸO¿|%â¼)åÐãÐâÑÛ˽±±§‘Š’‹«§!Š Ž~€ª®&¬°5¢§IˆŽF]`''(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !wz ´¶Ú×˾àÄ à±·v¤S2™3¶^Û©ݾîÐïÕ âÈãÍ!áÏ#ÎÀ©ž²¬ÒÎ$ÚÙ/ÚÙ1ÅÆ ¸¹¯²%‰.X]*, ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + +98»º.ÓË"åÎÈ¢Þ¡¹i­JÂR£*ÀXê¬øÑ
+ü×çà +ëÊùÛ/óÙ*ÝÈâÕÔÌéã×Ô +éæ'ÛÚ ÕÒ#´±"ii$$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ,+qn­ δ!Ù¬¿{Ãm°J¶HÚiéƒÿ· +î°÷«ò¢ +î¡à–ó®"õº ÷Éö×êÚîéàÞÕÔÕÏ#‰EC + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmaœ¼·t±]Èm¿eê›ð£ÿ­îˆåXÝ<Ñ2Ï3ÕBØWöŽó¬íÏÙÓÙØ%ÆŬ§†€<; + ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+!eQ•q··vڗʌà®Ú¡
+åŒ
+Þ]ë5õ'éÖ ÔÓ%ÓBæ Þ¬ª™˜“—–‰d`10ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  VMŠ{¦ŒÆ¦áÌ­ʳÔ¨ÅjÍ?Þéé îè ÌÆ"ÕZՏ +±œ‹ˆ‡ˆsw./ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ op·¸6µ°¶°ǽÊ¿ Á·Âœ¶TÎ:ê%îãê îØÓ'ÍDÎrÀ† ¯Œ ‡wsodh!#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "qy&ž©1•Ÿ ±¹¬®¶°˾ĖÄ\Â*ÑëìãßÚÐ"Ó?Ï_ ´b§li rb PL 10ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +(+1:‹™: ¯:©µ/º½2¶«̲!ҘÝr"ÖD ÏÙá$Þ#Ö!Ô& Ï(Õ>ÎN +¨>—E‰NwUUD-'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9@
+BMAF_Ug
+µ„%ë Eãx*üx.ö^Þ>Ñ3Ê0Æ0Î9Ì6Ë9Á7ž ‡mZ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿi? +„B¶]#Üo*ëp"á]áYñkä_ÉD ÈAÄ6É9Å2 wZ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4U-¦7ÏYÆRÞhú.Ûa­0—“¡ ¨ +›ˆz Y + +-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+B_¬8+¤9ÁVÌY¸=“š©”Žž‚sM 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ 7 <>q
+uŽ‹%˜2 “› ™š¥™“
+r Q<
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC
+b*`tn{ €cK[z —™¥Ÿ“…e> ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'@ +h'x+¶^›=¦E•2t 76`€
+ £  
+‹k =%  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)@ [“KÃx°f¸n”CaBF\‘ ‹„} W
+/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:
+e+¯w"ȕ"›­ƒ
+œf6 ÿÿÿ #D n q~q j [  +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2e1­‰(̯-Ä´±Ÿ‡j@) ÿÿÿ)>X [\
+F 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1*†~-´­;ÊÇ<ÄÄ&µ²-ld&ÿÿÿÿÿÿÿÿÿ +&)
+" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+nr%½Â^®³=’•tx
+)*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ45 yx?WWZX 43 +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+'" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/aereo1_h.raw
===================================================================
--- rel_1_4/bca/bca_raw/aereo1_h.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/aereo1_h.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/cannon_h.raw
===================================================================
--- rel_1_4/bca/bca_raw/cannon_h.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/cannon_h.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀ€€ÀÀÀ€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÿÿÿÿ€ÀÀÀÀÀÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÿÿÿÿ€ÀÀÀÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÿÿÿÿ€€€ÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÿÿÿÿ€€€€ÿÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€ÿÿÿÿ€€€€ÿÿÿÿ€€€€ÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ€€€€€€€€€ÿÿÿÿ€€€€€€ÿÿÿÿ€€€€€€€€€€€€ÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/esplo2.raw
===================================================================
--- rel_1_4/bca/bca_raw/esplo2.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/esplo2.raw (revision 1522)
@@ -0,0 +1,92 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" 6H`` UN1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#% +JE(H=!E54"=<`m +f|
+q_2" +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKO.‰‹Y}Dno3GD"L i‹œª ± «ž‹K.(ÿÿÿÿÿÿ.2KJ WU UR >>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ::jm8ox5^i'+2 +$3e‰§¿á +ÔÚ ¦vPÿÿÿ +OY‡‰ŽŒ¬¤7†|qjif#'%/-.,'%(%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(D@ &-8ÿÿÿÿÿÿÿÿÿ.S‚¢Á
+× Þ ë à ¨
+d9
+$IRo} ¤³®½°$®Ÿ³©0}HI59HLqt#gh"[\"12ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ: R† ­´ÈÔåÛ© y 8'IP—£±´ +¼¶º­ ³¤ Ä»"ÇÅ4”—ƒ‰ +—•šž0ƒ‡)tv+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3n„Ÿ¬Ã +¾Ù ´g/#VR¸»8³±¾¹ÕËÊüº¿Â°²º¿°·¬´³¹#–œ©­>X[DEÿÿÿÿÿÿ +
+ÿÿÿÿÿÿ*P} žª£³¯ £ +x`2*rh‡‚
+¤Ÿ¿¹ ÞÛÞÞÝßÈËÒÓ³´±¶¾Å­²¾Ãª®›’”'NP $ `Gb0c„˜ +¡ª¤—‰y +i' +jCZD G7cW­¤½¹àãÞäÍÓÈ˾»Â¿ÄÇ´¹¹¼¿Ã
+¹¼ +¸º±´œ  +ÿÿÿ82ztˆ}µœ(²Áo'”¥£¨
+£’† x+uAŽn%†t [KQDœ¹´ÜßÝä
+ÎÒÂÄüÌž½¾ÁÁÀÁ¸¸¹º¸» «¯ÿÿÿÿÿÿ 92us±±5ËÈ+×Æ!ë¿+õ¨6ÃP¢¦ ¡£œ•…#7_¢’ˆqfvk‹~³ªÊÊÒÖÎÐÀ¿Ä¼ÍľµÂ» ¼ º··´º¸ ¸¸
+°³ÿÿÿÿÿÿÿÿÿ*)Œ‘+¶»+ÑÔ!ïá(öÉ%æ”âi"½* ¨´¬ ¦ºA¼^Ń Чʹ£Ÿˆ‚’‰˜‹¸®º¶ÆÈÕÔÊÇÍÄÍÃÏÆÐÉÉÄÀ¾ Á¾ +¿¾ ¶·¯²ÿÿÿÿÿÿ
+3>`m¬·*ÑÓ'äÑò» ×zÛVÆ&¼ ÌÃ
+É0èrû¦%ÿÅ&ïÍàÕ ÑÐÁ¾²¬º®
+ÎÃÁ½ËÉÞÛÚÕÞÓÙÑÞÙ ÙØ
+ÐÏÆÇÂĹ¼¯´­³ÿÿÿÿÿÿ4:sq¾°ñÊ-é¡át +Ç3ÄÖÍÅÏ;òŠþ¹ûÍîÓäÛæäíéæáÕÌ +ÞÖÔÑÒÓ ÝÝ +ßÛ
+äÙ æÛ +ÛÚØÛÕ×ËÎÀø½µº°·ÿÿÿK5s\hQ’rÏ£ï«,äÞ[ +Î*ÍÜ$ÐÆ$ÑPížðÃóÖúéôêèâ
+ïæ îæ âÜßÜÛÞ ÓÙÕÛÝÜßÔ áÕØ× ÖÛ×ÚÌÑÀÄ¿Ä ±¶“—ÿÿÿ= q9±q3·uǀÍxåègÉ5á:Õ'Ë Ú<ÓIçð°ïÌåÎæ×éÞ
+îã +øè çØïàÞÕÞÞÔØÔØàÞ +ÚÍÔÈÌÌÇÌÆʹ½°²#±´3MQÿÿÿJ u¼FÆNÅIÓPÝOãJêJèIçOéWÙ[Ôtçœñ¶á¶çËìØêÛîÛîÓóÔïÐêÑäÖÝØÖÔÖÏÍ¿¸« +—˜„ƒ…š›$™—2nn<@ÿÿÿR mµ"ÂË"Ó'ÌÔ#Û(é<ðSûjÿxïvÛ}â‘
+ߏÛ•ê¸ ôÏ +ñ×òÙïÑôÒóÑéÎãÔâÛÜÙÎʱ¦Š€mkLLrmpiSL=7ÿÿÿÿÿÿ{© Èáã âÝß éñ8 íK +ìXô`é\ ÜZãeÛbÙlë”ô³óÅ +òÓ îÔñÙêØæØâÝÚÚÍÑÉÌ ÅƼ¸’‰
+xkweG4ÿÿÿÿÿÿÿÿÿÿÿÿ® Á
+Þù
+éíúæ àç3áHÜO
+áPßGÚ=ßAÞEÖIàkçŒê«ðÇ îÔíÝíáâÙÚÕÙÖØ× Ö×ÄÈ®¯ ˜’ƒ„qYE9%ÿÿÿÿÿÿÿÿÿŠµ äíìææà ×ß@ ÔT ÉRÏJÒ>Û/ç3è8Ú8ÞSåvíŸ ÷ÄïÒéÙìßèÚçÖåÔ àÒÔ͵µ ’Ÿœ°©ÍÅ@«£4Ž†3lf,-)ÿÿÿ…œÍ
+Üð
+ êÙÛ Ø'ßO Õf ÈfÉ`ÎSÛEêJ ìOáOéið‰ö®ýÐòÙ +éÙéÖôÚ øÒç¼Õ«˪³ •Š‹„ÿ(°®'³³A¨¨Nnq.+.O| º +ÖÙó ê
+ÓÊ×NÚy؎ܙ؎Ù~ à ßـ㒠+ä£â·èÏåÖæ×êÍóÄï¨Ԁ¿k¶j‘W +[5ƒr
+‡ƒ››9§«VšSHS)ÿÿÿ=m˜ÍÌÞ Ó ÐÊ2ÐYÎzȎʝǚʒ֘ڙ֕۟ +ўǢδÕÂäÈæµú°ñ‹ÀJ•‰rG,N:RF 30,1ÿÿÿÿÿÿÿÿÿÿÿÿ[Š­Ê!ÆÇ.À:×e +Ú}ݔǏϥƟƛՠѐגۗʌӝÕ¦ܱØ¢í¢ óŒÙV¼(£ +—Š
+lG5'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&X˜ Í@ØNâoì‰+àˆ$ֈ̃ʉՠϝқܞ ٍÍzÌxÊ{Սϊؔá”ðŽðv×C¿­§£  zW?/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNjª6Ým#؁"Æ|؏(Ê{ºcÕ|ލ
+׈áëç‚ÙoÊaÀ[ÑqރêîŠõƒ îiÕ<¸ ³¶ª£xH,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3f‘¹E¿^Ço¸[ ´O³Aêzå†Òx×w Ûv ÍißzçƒÝx Öt Ýwé~ï}%âdØLÆ+»½µ¹®«™– ^@ÿÿÿÿÿÿÿÿÿÿÿÿ8¢£ ¥¡©¬´"òpîŠÔÔyÌvڑᝠò«ÿ´2ø£.ãÎ_ +ÈM ´,¬¬³Ë% +ÇÍ
+¿ ½ §’b6ÿÿÿÿÿÿÿÿÿÿÿÿ:^Œ£¬ © ªª ±ÝYëˆäîì’õ©ó­éžæÚtÓ[¼0©¬ +¨ ±Ç-óU.öR-ÿR4í:$Ð ¼‰
+]6ÿÿÿÿÿÿÿÿÿÿÿÿ H~
+ Œ§˜ª¶"Ä9Õ^çŒ
+ç‘
+ô†ù†óŠÿ¨2ÿš(çhÄ/Ò)Þ!à Ï Å È"Ø?ÿt1ÿt.ÿr/ñQ!º 
+~ +FÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿO‡. ‘"Ž“ÀDçqè
+ó™à‚Õ_×RÖQòh÷eðNÙ!áè ê
+ä
+Ò ÌÎ/ôc"í`éZÀ4¬)‡jA 3! +ÿÿÿÿÿÿÿÿÿÿÿÿX1²xH¬e'Âs0­W°VÖ|âˆþ¢ü +í‚Ú[Å7Ö;Û5ï= +ä'àå êï
+ãçÉ ÈÇ(
+¹#µ'•gG@`?ra)lh+DE ,2ÿÿÿÿÿÿ![D­‰M¤u-¯z.w<…H¤fá "ò«þ¬ì‹ çwÇGÒBÓ3Ý0à#ì +ê +ëíéæÎ Á² –ƒe05gU%›U‰Bqm042ÿÿÿÿÿÿ+!‡q@sTsNEL!^4ªàµ5ò½3ì®)ޑ%¼d
+§CÍ\â[#áCÕØçòèáÒ²’ +nF3+;&VG(tkBZV)98 ÿÿÿÿÿÿÿÿÿÿÿÿ06ua ͹I˲1ȧ&qo9l0x-®MÀEÉ.ÐÏØß
+ÐÁ +–|m'G< +%
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ65rs…ƒ‘ŠmM6) 1 <`{¹7'¼(² À&¥Žht9“r-yq pn1I<3 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ @Jz„$sy‹6>8*r1•D1š;)¥?0y^L>gI˜Jƒ‹8s}>3/$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(3„ŽEV^ee',+ÿÿÿÿÿÿ +:K!=-">/XU2DL9Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ *+4.0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/aereo2_h.raw
===================================================================
--- rel_1_4/bca/bca_raw/aereo2_h.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/aereo2_h.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/bca.raw
===================================================================
--- rel_1_4/bca/bca_raw/bca.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/bca.raw (revision 1522)
@@ -0,0 +1,13211 @@
+ d d d d d d d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d d d d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d d d d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b d d d d b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+c
+c
+c
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+c
+c
+c
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+c
+c
+c
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+b
+b
+b
+b
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+b
+b
+b
+b
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+b
+b
+b
+b
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+` b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `7;7;7;7;7;7;7; ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` b b b b ` ` ` ` ` ` ` ` ` ` `7;7;7;7;7;7;7;7;7;7;7; ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` b b b b ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` b b b b ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b7<~7<~7<~7<~7<~7<~7<~7<~7<~7<~7<~7<~ b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b7<~7<~7<~7<~7<~7<~7<~7<~7<~7<~7<~ b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<}8<} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` a a a a a a a a a a +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~9=~9=~ +_ +_ +_9=~9=~9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ a a a a +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~ +_9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ a a a a +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ a a a a +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_9=~9=~9=~9=~9=~9=~ +_9=~9=~9=~9=~9=~9=~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`:=}:=}:=}:=}:=}:=}:=}:=}:=}:=}:=}:=}
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`:=}:=}:=}:=}:=}:=}:=}
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`:=}:=}:=}
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`:=}:=}:=}:=}
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`:=}:=}:=}:=}:=}:=}:=}
+ +`:=}:=}:=}:=}:=}:=}:=}
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +`
+ +` +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_;>~;>~;>~;>~;>~;>~;>~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_;>~;>~;>~;>~;>~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_;>~;>~;>~;>~;>~;>~;>~ +_;>~;>~;>~;>~;>~;>~;>~ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_ +_
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~
+`
+`
+`;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~
+`
+`
+`;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~
+`;>~;>~;>~;>~;>~
+`
+`;>~;>~;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`;>~;>~;>~;>~;>~
+`;>~;>~;>~;>~
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~
+`;>~;>~;>~;>~
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`;>~;>~;>~;>~;>~;>~;>~;>~
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+`
+` ` ` ` ` ` ` ` ` ` ` ^ ^ ^ ^ ^<=}<=}<=}<=}<=} ^ ^ ^<=}<=}<=}<=}<=} ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=}<=}<=}<=} ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^<=}<=}<=}<=}<=}<=}<=} ^ ^ ^<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^<=}<=}<=}<=}<=}<=}<=}<=}<=}<=}<=} ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ` ` ` ` ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ` ` ` ` ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^=>~=>~=>~=>~=>~ ^ ^=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^<?|<?| +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?| +^<?|<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^=>~=>~=>~=>~<?|<?| +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?|<?| +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ _ _ _ _ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ _ _ _ _ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ _ _ _ _ _ _ _ _ _ _ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?| +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^=>~=>~=>~=>~<?| +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^<?|<?|<?|<?|<?|<?| +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ _ _ _ _ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ _ _ _ _ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^ +^]]]]]]]]]]]]]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]]]]]]]]=>~=>~=>~=>~=>~=>~=>~]]]]=>~=>~=>~=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~]]=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~]]=>~=>~=>~=>~=>~]]]]]=>~=>~=>~=>~=>~]]]]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]=>~=>~=>~=>~=>~]]]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]]=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]__________^^^^^=>~=>~=>~=>~=>~^^^^=>~=>~=>~=>~=>~^^^=>~=>~=>~=>~=>~=>~^=>~=>~=>~=>~=>~^^^^=>~=>~=>~=>~=>~=>~=>~=>~=>~^^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~^^^^^^^^^^=>~=>~=>~=>~=>~=>~=>~^^^^=>~=>~=>~=>~=>~=>~=>~^^^^=>~=>~=>~=>~=>~^^^=>~=>~=>~=>~=>~^^=>~=>~=>~=>~=>~^^^=>~=>~=>~=>~=>~^^=>~=>~=>~=>~=>~^^^^^=>~=>~=>~=>~=>~^^^^^^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~^^^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~^^=>~=>~=>~=>~=>~^^^^^=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~=>~^^^=>~=>~=>~=>~=>~=>~^=>~=>~=>~=>~=>~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^__________^^^^^??~??~??~??~??~^^^^??~??~??~??~??~^^??~??~??~??~??~^^^??~??~??~??~??~^^^^^^^??~??~??~??~??~??~^^??~??~??~??~??~^^^^^^^^^^^^^^^^^^^??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~^^^^??~??~??~??~??~^^^??~??~??~??~??~^^??~??~??~??~??~^^^??~??~??~??~??~^^??~??~??~??~??~^^^^^??~??~??~??~??~^^^^^??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~^^??~??~??~??~??~^^^^^^^^^^??~??~??~??~??~^^^^^??~??~??~??~??~^^^^^^^^^^??~??~??~??~??~^^^??~??~??~??~??~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^??~??~??~??~??~??~??~??~??~??~??~??~??~??~^^??~??~??~??~??~^^??~??~??~??~??~??~^^^^^^^^??~??~??~??~??~^^??~??~??~??~??~??~^^??~??~??~??~??~^^^^^^^^^^^??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~??~^^^^^??~??~??~??~??~??~^??~??~??~??~??~??~^^??~??~??~??~??~^^^??~??~??~??~??~^^??~??~??~??~??~^^^^^??~??~??~??~??~^^^^^??~??~??~??~??~??~??~^^^^^^^??~??~??~??~??~??~??~^^??~??~??~??~??~??~^^??~??~??~??~??~^^??~??~??~??~??~^^^^^??~??~??~??~??~??~^^??~??~??~??~??~^^??~??~??~??~??~^^??~??~??~??~??~??~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[[[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[@?|@?|@?|@?|[[@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[[[[[[[[[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|[[@?|@?|@?|@?|@?|@?|@?|@?|[[@?|@?|@?|@?|@?|[[[[[@?|@?|@?|@?|@?|@?|@?|[[[[[[[@?|@?|@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|[[[[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|@?|[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^^^^^^^^^^^^??{??{??{??{??{??{??{??{??{??{??{??{??{^^^^??{??{??{??{??{??{??{??{??{??{??{??{^^^??{??{??{??{??{??{??{??{??{^^^^^??{??{??{??{??{??{??{??{??{^^^^^^^^^^^^^^^??{??{??{??{??{??{??{??{??{??{??{??{^^^^^^^^^??{??{??{??{??{??{??{??{??{^^^^??{??{??{??{??{^^^??{??{??{??{??{^^^??{??{??{??{??{??{??{^^>?|>?|>?|>?|??{^^^^??{??{??{??{??{??{??{??{^^^^^^^??{??{??{??{??{??{??{??{^^^??{??{??{??{??{??{??{??{??{^^^^??{??{??{??{??{^^^^^^^??{??{??{??{??{??{??{??{??{^^^^^??{??{??{??{??{??{??{??{??{??{??{??{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\\\\\\\\\\\\\\@@|@@|@@|@@|@@|@@|@@|@@|@@|@@|@@|\\\\\\\@@|@@|@@|@@|@@|\\@@|@@|@@|@@|\\\\@@|@@|@@|@@|@@|@@|@@|\\\\\\\@@|@@|@@|@@|@@|@@|@@|\\\\\\\\\\\\\\\\\\\@@|@@|@@|@@|@@|@@|@@|\\\\\\\\\\\\\@@|@@|@@|@@|@@|\\\\\\@@|@@|@@|@@|@@|\\\@@|@@|@@|@@|@@|\\\\@@|@@|@@|@@|@@|@@|\\A@}A@}A@}A@}@@|\\\\@@|@@|@@|@@|@@|@@|@@|@@|\\\\\\\\@@|@@|@@|@@|@@|@@|@@|\\\\@@|@@|@@|@@|@@|@@|@@|\\\\\@@|@@|@@|@@|@@|\\\\\\\\@@|@@|@@|@@|@@|@@|@@|\\\\\\\@@|@@|@@|@@|@@|\\@@|@@|@@|@@|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\^^^^^^^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^^^^[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\\\\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\\\\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZECzZZZZZZZZZZZZZZZZZZZZZZZZECzECzECzECzECzECzECzECzZZZZZECzECzECzECzZZZZZZZECzECzECzECzECzECzECzZZZZZECzECzECzZZZZZZECzECzECzECzECzZZZZECzECzECzZZZZZZZZZZZECzECzECzECzZZZZZZZECzECzECzECzZZZZZZECzECzECzZZECzECzECzECzECzECzECzECzZZZZZZZZZZECzECzECzECzECzZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYFByYYYYYYYYYYYYYYYYYYYYYYYYYFByYYYYYYYYYYYYYYYYYYYYYYYFByFByFByFByFByFByFByFByFByYYYYYFByFByFByFByYYYYYYYFByFByFByFByFByFByFByFByYYYYFByFByFByYYYYFByFByFByFByFByFByFByFByYYYFByFByFByYYYYYYYYYYYFByFByFByFByYYYYYYYFByFByFByFByYYYYYYFByFByFByYYFByFByFByFByFByFByFByFByFByFByYYYYYYFByFByFByFByFByFByFByFByYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZYYYYFByYYYYYYYYYYYYYYYYYYYYYYYYYFByYYYYYYYYYYYYYYYYYYYYYYYFByFByFByFByFByFByFByFByFByYYYYFByFByFByFByFByYYYYYYFByFByFByFByFByFByFByFByFByFByYYFByFByFByFByYYYFByFByFByFByFByFByFByFByFByFByYYFByFByFByYYYYYYYYYYFByFByFByFByFByYYYYYYFByFByFByFByFByFByYYYYYFByFByFByYFByFByFByFByFByFByFByFByFByFByFByFByYYYYFByFByFByFByFByFByFByFByFByFByYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZGBzZZZZZZZZZZZZZZZZZZZZZZZGBzGBzGBzZZZZZZZZZZGBzGBzGBzGBzGBzZZZZZZGBzGBzGBzGBzZZZGBzGBzGBzZZGBzGBzGBzZZZZGBzGBzGBzGBzZZZGBzGBzGBzZGBzGBzGBzGBzZZZZZZZZZZGBzGBzGBzGBzGBzZZZZZZGBzGBzGBzGBzGBzGBzZZZZGBzGBzGBzZZGBzGBzGBzGBzZZZZGBzGBzGBzGBzZZZZGBzGBzGBzGBzZZZGBzGBzGBzZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZGCzZZZZZGCzGCzGCzGCzZZZZZZZGCzGCzGCzGCzZZZZZGCzZZZZZZGCzGCzGCzGCzGCzGCzZZZZZZZZZZZGCzGCzGCzZZZZZZZZZGCzGCzGCzZGCzGCzGCzZZZZZGCzGCzGCzZZZZGCzGCzGCzZZGCzGCzGCzZZZZGCzGCzGCzZZZZGCzGCzGCzZGCzGCzGCzZZZZZZZZZZGCzGCzGCzZGCzGCzGCzZZZZZGCzGCzGCzGCzGCzGCzZZZZGCzGCzGCzZZGCzGCzGCzZZZZZZGCzGCzGCzGCzZZZGCzGCzGCzZZZZGCzGCzGCzZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZWWWWHCyWWWWHCyWWWHCyHCyWWWWHCyHCyWWWWHCyHCyWWWHCyWWWWWHCyHCyWWWWHCyHCyWWWWWWWWWWHCyHCyHCyWWWWWWWWWHCyHCyHCyWHCyHCyHCyWWWWWHCyHCyHCyWWWHCyHCyHCyHCyWWHCyHCyHCyWWWWHCyHCyHCyWWWWWWWWHCyHCyHCyWWWWWWWWWWHCyHCyHCyWHCyHCyHCyWWWWWHCyHCyHCyZHCyHCyHCyWWWHCyHCyHCyWWHCyHCyHCyWWWWWWWHCyHCyHCyWWWHCyHCyHCyWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZZZZZZZWWWWHCyWWWHCyWWWWWHCyWWWHCyWWWWWWWWHCyWWHCyWWWWHCyWWWWWWWWHCyWWWWWWWWWHCyHCyHCyHCyHCyHCyHCyHCyWWWHCyHCyHCyWWHCyHCyHCyWWWWWHCyHCyHCyHCyHCyHCyHCyHCyHCyWWWHCyHCyHCyWWWWHCyHCyHCyHCyHCyWWWWWWHCyHCyHCyWWWWWWWWWHCyHCyHCyWWHCyHCyHCyWWWWWHCyHCyHCyZHCyHCyHCyWWWHCyHCyHCyWWHCyHCyHCyWWWWWWWHCyHCyHCyWWWHCyHCyHCyHCyHCyWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWZZZZZZZZZZYYYYHCyYYYHCyYYYYYYYYYHCyYYYYYYYYHCyYYHCyYYYHCyHCyYYYYYYYYHCyHCyYYYYYYYHCyHCyHCyHCyHCyHCyHCyHCyHCyYYYHCyHCyHCyYYHCyHCyHCyYYYYYHCyHCyHCyHCyHCyHCyHCyHCyYYYYHCyHCyHCyYYYYYHCyHCyHCyHCyHCyHCyYYYYHCyHCyHCyYYYYYYYYYHCyHCyHCyYYHCyHCyHCyYYYYYHCyHCyZZHCyHCyHCyYYYHCyHCyHCyYYHCyHCyHCyYYYYYYYHCyHCyHCyYYYYHCyHCyHCyHCyHCyHCyYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXIDzXXXIDzIDzXXXXXXXIDzXXXXXXXXXXIDzXIDzXXXIDzXXXXXXXXXXIDzXXXXXXXIDzIDzIDzIDzIDzIDzIDzIDzXXXIDzIDzIDzXXXIDzIDzIDzXXXXIDzIDzIDzIDzIDzIDzIDzIDzIDzXXXIDzIDzIDzXXXXXXXIDzIDzIDzIDzIDzIDzXXIDzIDzIDzIDzXXXXXXXXIDzIDzIDzXXXIDzIDzIDzXXXXIDzIDzHD{XXXIDzIDzXXIDzIDzIDzXXIDzIDzIDzIDzXXXXXXXIDzIDzIDzXXXXXIDzIDzIDzIDzIDzIDzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXIDzXXXXIDzIDzIDzIDzXXXXIDzXXXXXXXXXXIDzXIDzXXXIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzXXXXXXXIDzIDzIDzXXXXXXXIDzIDzIDzIDzXXXXIDzIDzIDzXXXIDzIDzIDzXXXXIDzIDzIDzXXIDzIDzIDzXXXXXXXXXIDzIDzIDzIDzIDzXIDzIDzIDzXXXXXXXXIDzIDzIDzIDzXXXXIDzIDzIDzXXXIDzIDzIDzXXXIDzIDzIDzXIDzIDzIDzXXIDzIDzIDzXXXXXXXXIDzIDzIDzXXXXXXXIDzIDzIDzIDzIDzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZXXXXIDzXXXXXXXIDzIDzXXXIDzXXXXXXXXXXIDzXIDzXXXIDzXXXXXXXXXXXXXXXXXXIDzIDzIDzXXXXXXXIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzXXXIDzIDzIDzXXXXIDzIDzIDzXXIDzIDzIDzXXXXXXXXXXXIDzIDzIDzXIDzIDzIDzXXXXXXXXIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzIDzXXXIDzIDzJDxZZZIDzIDzIDzXIDzIDzIDzXXIDzIDzIDzXXXXXXXIDzIDzIDzXXXXXXXXXXIDzIDzIDzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYWWWWJDxWWWWWWWWWJDxWWJDxWWWWWWWWWWJDxWJDxWWWJDxWWWWWWWWWWWWWWWWWWJDxJDxJDxWWWWWWJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxWWWJDxJDxJDxWWWWJDxJDxJDxWWJDxJDxJDxWWWJDxJDxJDxWWWWWJDxJDxJDxWJDxJDxJDxWWWWWWWJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxJDxWWWJDxJDxJExYYYWJDxJDxWJDxJDxJDxWWJDxJDxJDxWWWWWWJDxJDxJDxJDxWWJDxJDxJDxWWWWWJDxJDxJDxWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWYYYYWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWYYYYWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXJExXXJExXXXXXXJExXXXJExXXXXXXXXJExXXJExXXXXJExXXXXXXXXXJExXXXXXXXJExJExXXXXXXXJExJExJExJExJExJExJExJExJExJExJExJExXXXJExJExJExXXXJExJExJExJExXXJExJExJExXXXJExJExJExJExXXXJExJExJExJExXJExJExJExXXXXXXXJExJExJExJExJExJExJExJExJExJExJExJExXXXJExJExXXXXXJExJExJExJExJExJExXXJExJExJExXXXXJExJExJExJExJExXXXJExJExJExJExXXXJExJExJExJExXXXXXXXXXXXXXXXXXXXXXXXXXXXWXY"[)!_+$a#\XXXXXXWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWKEwWWKEwWWWWWWKEwWWWKEwWWWWWWWWKEwWWKEwWWWWKEwKEwWWWWWWWKEwWWWWWWWKEwKEwKEwWWWWWWKEwKEwKEwKEwWWWWWWKEwKEwKEwWWKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwWWKEwKEwKEwWWWWKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwWKEwKEwKEwKEwKEwKEwKEwKEwKEwWKEwKEwKEwKEwWWWWWWKEwKEwKEwWWKEwKEwKEwXXXXWKEwKEwKEwKEwKEwWWKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwWWWKEwKEwKEwKEwKEwKEwKEwKEwKEwKEwWWWWWWWWWWWWWWWWWWWWWWWWW Z#] Z%^)"_*"`4,hA;o91j']WWWWY"\&_YYWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWYYYYYYYYYYYYYYLExYYYLExYYYYLExYYYYYLExLExYYYYLExLExYYYLExYYYYYLExLExYYYYYLExYYYYYYYYLExLExLExYYYYYYLExLExLExYYYYYYYYLExLExLExYLExLExLExLExLExLExLExLExLExLExYYLExLExLExYYYYYLExLExLExLExLExLExLExLExLExYLExLExLExLExLExLExLExLExLExYLExLExLExYYYYYYYYLExLExLExYLExLExLExYYYYYLExLExLExLExLExYYLExLExLExLExLExLExLExLExLExLExLExYYYYYYLExLExLExLExLExLExLExLExLExYYYYYYYYYYYYYYYYYYYYYYY Z&^,$`']( ^.&b0(d) ]/'c80i5-i$\YYYYY"Z%_!YYYYYYYYYYYYYYY![#Y![YYY XYYY X XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYLFxYYYYLFxLFxLFxLFxYYYYYYYYLFxLFxLFxLFxYYYYYLFxYYYYYYYLFxLFxLFxLFxLFxYYYYYYYYYLFxLFxLFxYYYYYLFxLFxLFxLFxYYYYYYYYLFxLFxLFxYLFxLFxLFxLFxLFxLFxLFxLFxYYYYLFxLFxLFxYYYYYYYLFxLFxLFxLFxLFxYYYLFxLFxLFxLFxLFxLFxLFxLFxLFxLFxLFxLFxLFxYYYYYYYYLFxLFxLFxYLFxLFxLFxYYYYYYLFxLFxLFxLFxYYLFxLFxLFxLFxLFxLFxLFxLFxLFxYYYYYYYYYYLFxLFxLFxLFxLFxYYYYYYYYYYYYYYYYYYYYYYYY"Z( ^;3l=5lF?rTN~GAu;5l80i91j;3j1)e&\![YYYYYYYYYYYYY"X'] ZYYY X']91jHBt91j( ^$Z*#`2*f-%a%[#Y$Z"XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X"Z$\$Z#["Z"X#["Z X X X X X X X X X V V V!Y V X X X X X X X X!Y X V!Y!Y%[5,gG@s]V‚qn’ŽŒ¥’§ˆ„ |w–}x—{v•rn‘_YƒLFx>5k3*e0(d,$`+#_+#_'[!W X X X X X#[-%a*"^"Z X"Z&\1)eJDvwu—„ƒ rn‘E?q91jMGygc‰[T€A;o?8k?9m2*f#Y X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X"V']80i>8l91h80i4,e80i;3j5-f(\"Z!Y"Z"Z#W"Z#W%Y)!]*!^*!^-$a) ]!Y X%Y"Z!Y!Y#W%[*"^/'c6.g/'c+#_4+fLEvc]‡‹‡£³²¾Á¿Æ·´½³°¹·¶À¾¼Ã¹·¾­¬¶ª©µš®‚|˜rn‘up’c]…c\…e`ˆICu7/h3+d*"^&\&Z#Y&Z7/h>5k,$`1)b:2kUN}so’Œ‹¥›œ° ¢²”•¨}y˜fa‰ƒ‚•—¬¦yx•ut”liLFx.&b&Z#["V X X X X#W&Z#[!W X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W"V) ]F@rkjŽuu–ooliie‹mjŽrq‘^Y90h,#^-$_.%`*!^,$`8/g+"_)[.&b=4j=4j4+f+#_%Y$X)[-%a'[(\4*cIBsd]†up’zs•`XƒLFx/'c:1ioj­¬¸ÅÄÉÌÌÌÌËÊÉÉÉÈÇÉÆÅÇ¿¿ÂÂÀÄÄÂƺ¹Á¥¡±Œ¢–”©–”©››­“¦€{™ƒž{w—\TMFwI@s;2j@9lPIx[T€XO}f`ˆŽ§¥£µ®®¹§§²¡¢±¤§± £°œŸ¬¡¢±ª­¹¬®·¢¥±•—§‹¢€šc^†HArD=p80i*"^#W"X!W!W(Z=7k0(a+"_&Z!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!W!Y!Y!Y!Y!Y!Y!Y!Y!Y!Y"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V!Y!Y!Y!Y"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V$X*"^@9lss”Ž¥”¨‹¤‰‹ †Œ¡‰Ž¢ŒŽ£}™_Z‚OHwTM|[UF=pC:mNGxA:m1)b:1i>5k6.g0'b,#^,$`.%`7.f:1i5,dB8mh`ˆ˜”©±­º·³¾ª¤´ˆ‚œe]…A:mUN}™—¬ÅÄÉÑÐÏÐÏÎÒÒÏÊÊÊÄÄǼºÁº¹¾¼¼ÂÁÀŹ¸À¨¥±™–ª™—©¦¥±ªª³¥¤°£¢±¥¤³¡ ¯–”©„€œxt”sn}x—…€›Š… Œ¤¡ž¯µµÀÀÀƽ½Ã®®·¦§³¦©³¤¨°¤©²²¶¾·º¾¯²¹£§¯—œ¨‘–§ŠŒ¡xy”uu“vv”b^‡<3i) ]%W#W#W) ]A:mHArLFx80g(\#W"V"V#W"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V!Y!Y!Y!Y"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V!Y!Y!Y!Y"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V$X'Y.%`F?rwv–—œ°¢±—œ«”™¨—¦Ž•¤–¥•™©––¦Ž£‹ˆ ‹¢ŒŠ¡€{™pkc\…XQ}C:mC9n=4j6,e3)b90hOHvUN|JCtIBsQJx{v•ª§¶ÆÂÈÎÍÌÐÍÍÆÂÈ´°¸—©{™Œ¤¿¾ÆÔÓÒ×ÕÓÔÔÑËÊɾ¼Â´²¹°¯¹µ´¼³²º±°¸«¨´¦¢°Ÿœ«¥¥°­¯µ­¯µª©±©¨²ª©±«ª´¨¥±¢Ÿ®›™«›™«¤¡²­ª¶²¯»¶µ¿º¹Ã¸·¿»»ÁººÀ²´º«­¶¦©³¤¨°¥©±±´»²µ¼©¬³› ¬”™¨”¥“¥Š¢Š¢ˆ¡xw—OHw=6i7.f4+c6-e<5hPIxgc‰hdŠYUI@s0(a*\$X"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V#W#W#W#W#W#W#W#W#W#W"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V#W#W#W#W"V"V"V"V"V"V"V"V"V"V"V"V#W#W(Z3)bRKzˆ†¢§¨¹©®º¤©µ›Ÿ­—žª”›§’š§–©œ «¤¥±§§²©©´¨¨³¤£¯£ ¯š—«‹ tmNGuA7l;2j=4jC:mXQ}|›“¨ƒ}™tl‹£¹¶ÂÍËÌÕÓÑ×ÕÓÖÔÒÒÐÎÈÅȺ¶¾´¯¹¿½ÄÑÑÑÙ×ÔÖÔÑÊÉÈÃÀö²º²¯¸³±¸¶µ½¶´»µ´¹µµ»°¯·«ª²­¯µ¯²¶­°´®°³°°¶²´·´´º²°·¬«µ©¨²°¯¹¼ºÁÂÀÄÃÁÅÁÀž¾Ä¹·¾·¶»µµ»®°¶¨ª³£§¯¡¤®Ÿ£®¦«´¨«²¢¦®—œ¨’™¥“›¨“›¨“š¦Ž–£Œ’¤ƒ‚œmiŒvu•qmŽhcˆpntt’y{˜~€š|šwy–mmŽWS}H?r+"]"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V#W#W#W#W"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V#W#W#W#W"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V"V$V$V$V$V$V$V$V$V$V$V#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U$V$V$V$V#U#U#U#U#U#U#U#U#U#U$V$V(X*Z4(aYR~›²²µÁ²µ¼¬±º¤¨³ £¯ £­ £­£§¯¥©±ª­´²´·µ·½´´º±±·®­µ®­µ±®·°­¶œ™ªtmRIw]Vf^†tl{—”¥°­¹µ²»³°¹¾¼ÃÍÍÍÕÔÓÖÖÓ×ÕÓ×ÔÑÔÒÐÍËÉÉÆÆÉÄÄÍÊÊÕÓÐÖÔÑÑÏÍÅÂÂÁ¾Á¼º¾½»¿¹¸½¼¼¿ÀÁÂÁÀ¾¾Áºº½´´·±³¶°²µ®°³±³¶²´·´¶¹µ·ºµ·º´³¸´²¹¹¹¿ÃÄÅÈÆÇÅÄÆÂÀĽ¼Á»º¿»º¿··½°²µ¨¬²£§¯œ¤¯œ¡­¤®Ÿ¦°›¢¬”™¥’—£’›§•žª”œ§—£Ž“¢‘•¥—›«˜šª”–¦Ž¢‰ŽŸ‰Ž¢‰¡‡Ÿ†Œž„‰~™jg‹OHy+"]#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U$V$V$V$V#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U$V$V$V$V#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V%W&X+!Z3)`JCtŽŒ¨»¼È¾ÀƳ¶½«®µ©«´©«´«¯·°²¸´´º··½¹¹¿¼¼¿¼¾ÁººÀ¸¸¾»º¿»»¾¼»À»¹¿©¤°Œ† †š¨¤´¶²½¼¸ÀÀ¾ÄÅÂÅÇÅÆÊÉÈÊÉÈËÊÉÎÍÌÐÐÍÏÏÌÒÒÏÔÒÐÒÐÎÐÐÍÏÍËÐÎÌÕÓÑÙÖÒÔÑÍÏÌÉÉÆÆÈÅÅÉÈÇÉÈÇÈÆÄÊÊÇÍÍÊËÉÇÃÁ¿»»¾´¶¹±±·¯²¶¯±´²´·°³·°²µ±´¸¸º½»»¾¾¾ÁÃÄÅÈÈÈÉÈÇÅÄƾ½Â»»ÁººÀ¸º½¸¹º±³¶§ª®Ÿ£«š¡«˜ «›¢¬™ ª“›¦‘˜¢• Ž–£“›¦’š¥—¢Ž–¡™ ª©®·¯²¹¬¯¶¢¤­”™¥”£Œ”¡˜¥•¤ˆžƒ‰žpoXR|.%]$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V$V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U$V$V$V$V%U%U%U%U%U%U%U%U&V&V*Z.$]:0gXO}„¬®¾¾¾Ç¼¾Äµ·½±°¸²´ºµ·½ººÀ¾¾ÁÀÀÃÃÁÂÄÂÃÅÄÃÅÅÅÁÀÂÁÀÂÀÀÃÀ¿ÁÀ¿Á¾¼À¯ª´°¬·¿»ÃÏÍÎÖÔÒ×ÕÒÖÓÏÔÑÍÏÍËÌËÊÌËÊÌËÊÉÈÇÂÀÁÅÄÃËÊÉÎÌÊÒÒÏÒÒÏÏÍËÑÏÌ×ÔÐØÖÓ×ÔÐÖÓÏÓÑÏÒÐÍÕÓÑ×ÕÒØÕÑØÕÑÖÔÑÓÑÏÇÅ÷¸¹°²µ®±µ®±µ´´º´¶¹¯²¶­¯µ®±µ·¹¼¸º½¾ÀÿÁÄÂÁÃÄÃÅ»º¿²°·­¬´­¯µ®°¶±³¶­¯µ£§­œ¢©š¡«™žª—Ÿª˜ «–›§—¢Œ”Ÿ–¢’š¥“š¤—¢– “š¤Ÿ¤­²µ¼´¶¼ª¬²™¨Ž•¡Œ“Ÿ‘™¦”›§” ‰Ÿƒšfa†3*b%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U$V$V$V$V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U$V$V$V$V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%W%W%W%W%W%W%W%W%W%W%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%W%W%W%W%U%U%U%U%U%U%U&V'W/#\;1eH?oc]…š™¯¯²¾»»Ä¼¼Â¹¸À·¶¾¼ºÁ½¼Á¾¾ÁÃÂÄÆÅÄÉÈÇÍÍÊÏÏÌÎÍÌÌËÊÉÉÉÅÆÄÃÂÁÅÄÃÊÉÈÈÆÄÊÈÉÐÍÍÖÔÒÚ×ÓÜÙÕÙÖÒÔÑÎÐÎÌËÉÇÆÅÄÈÈÅÈÉÇÅÆÄÂÀÁÁÀÂÄÁÄËÊÉÏÎÍÎÍÌÑÏÌÑÑÎÔÒÐÓÑÏÓÑÏÕÒÏØÖÓÙ×ÔÚØÕÚØÕÙ×ÔÙ×ÔØÖÓÔÒÏÆÅIJ²µ«­³®±µ±´¸¹»¾¸¸¾²²¸®®´ª¬²«­³ª¬²°²¸¶¸¾¹¹¿»»Á¶´»©¨²¤£¯¥§°¨«²©­³¨¬²¢¦¬ž¢ª›¢¬š¡«˜Ÿ©—ž¨“›¦Ž–¡Œ”ŸŽ–¡“š¤“š¤’—£’—£‘–¢–§¨®´¯³¹©«± ª’—£‹Ÿ‰‘ž˜£˜£–¢‡Œie†0'_%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%W%W%W%W%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%W%W%W%W%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U&V&V&V&V&V&V&V&V&V&V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U&V&V&V&V%U%U%U%U%U%U%U(X/%^F=mg`†‚}›œ°¹ºÆÇÅÌÅÅ˾¾Ä½»Â¿¾ÃÂÀÄÅÂÅÈÅÅÍÌËÓÑÏÕÓÑÕÓÑÓÓÐÒÒÏÏÎÍËÌÊÈÉÇÈÈÅÌËÊÐÎËÒÒÏØÖÓÙ×ÕÛÙÖÜÙÕÛØÔØÕÑÑÏÍÉÆÃÃÀÀÁÀÂÅÄÃÄÅÃÅÅÅÄÃÂÄÁÁÃÀÀÈÅÅÈÅÅÇÅÆÈÇÆÍÍÊÉÆƾºÀº¸¾ÉÄÇÓÑÏÔÒÐÓÑÏÎÍÌÎÍÌÎÍÌÌËÊÅÅÅ·¹¼¯¯µ®®´¹»¾¹»¾¹»¾¸º½¶¸»±±·¨§±££®¤¤¯©«±ª¬²ª¬²¨¨±¦¦¯£¢®££®¥§°¨«²¨¬²§¬¯£©¯¢¨® ¦¬£ª™Ÿ¦–§‘˜¢• Ž•Ÿ—¢“š¤’™£”œ§’™£‘–¢•œ¦ ¦­«°³«®²¢¦®–›§Š‘‰œŒ•¡˜¤—¢„‰šXQz."[%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U&V&V&V&V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U&V&V&V&V%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U&U&U&U&U&U&U&U&U&U&U&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&U&U&U&U&V&V&V&V&V&V'W/#\H?oohŽŒ£¯«¬»½¿ÈÅÅË¿¿Å½½Ã¿¾ÃÃÀÃÈÅÅÎËËÒÐÎÕÓÑ×ÕÒÖÔÒÑÏÍÏÎÍÑÑÎÏÏÌÊÊÇÈÉÇÈÈÅÉÈÇÌÊÈÕÓÑÛÙÖÜÚ×ÚØÕ×ÕÒØÕÑÕÓÐÐÎÌÇÅÃÄÁÁÅÄÃÆÆÃÅÆÄÆÅÄÅÆÄÂÁÀÂÁÀÃÁÂÇÅÃÆÅÄÇÅÃÇÅÿ¼¿¶²¸´¯¶¸¶¼Ã¾ÂÅÀÃÄÁÁÂÀÁ¼»½»¹½¸¸»´¶¹®°³­°´³µ¸¹»¾¶¶¹¶¸»²´·²´·®®´¦¥¯£¢®¦¦¯¦¨®¨ª°©«±©«±ª©±©©²©«±¨«¯¨¬²©¬°¨­°¦ª°¥©¯£©¯ ¦ªš §•š£“˜¡—¡—¢‘˜¢’™£–¥™ ¨˜Ÿ©–š¥—œ¨¢¨¯¬±´ª®´£©¯˜Ÿ©Œ“Ÿ‡œ‹“ž‹“ž” ~•D;k(W&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&U&U&U&U&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&U&U&U&U&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U*W8.bTLwy•“‘¦œœ®¥¤³µ·Àº¼Â»½ÀÀ¿ÄÈÆÇÍËÉÎÌÊÔÒÐ×ÕÓØÖÓÖÔÑÑÑÎÍÍÊÍÍÍÏÏÌÌÌÉÉÇÅÈÈÅÊÉÈÍËÉÑÏÍÙ×ÔÜÚ×ÜÚ×ØÖÓÑÏÌÎÎËÐÐÍÌÌÉÇÅÃÇÇÄÈÈÅÆÇÂÆÆÃÅÆÄÇÅÃÃÄÂÁÀ¿ÄÃÂÇÇÄÊÈÅÉÇÄÅ¿¿½¾º·º»¸»½º½À¾¿Á¿ÀÃÀÀ½¼¾·¶¸´´·´¶¸²´¶­°´¯²¶±³¶±±·­­³¬¬²®°³­­°©«®¦¦¬¥¤®§§°¨ª°«®²³µ¸µ·º¶µº³³¹«®²¨¬²«°³¬¯³ª­±©¬°§¬¯¤¨® ¦¬Ÿ£«¡©¡©šž¦•š£“š¤—ž¨¤¬¢¨¬¡§­œ¡ª¢«¤ª°¤ª® ¦¬ ¤¬˜Ÿ©‹“žˆ‘†›„Œ™‚†™on‹7+b&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V'V'V'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U&U-!Z=1eZRz‡ƒŸ˜˜ªš˜ª¨¨µ¶¸Á»»ÁÁÀÅÊÊÊÓÑÏ×ÔÐÖÔÑØÖÓÙ×Ô×ÕÒÐÐÍÍÍÊÌÌÉÉÊÈÊËÉÌÍËÌËÊÌËÊÎÍÌÕÓÑÙ×ÔÛÙ×ÜÚ×ÛØÔÕÕÏÏÍËÈÆÄÇÅÃÆÅÄÉÇÄÇÈÃÈÈÅÇÈÃÇÇÄÇÇÄÆÇÂÄÃÂÀ¿¾ÁÀ¿ÇÅÃÈÈÂÈÅÂÅÃÁÄÁÁÃÀÀÁ¿ÀÀ¾¿¾¼½¾¼½À¾¿¾¾¾º¹»´¶¹³µ·°²´¯±³¯°±­¯²®°³««±©©¯ªª°¬®±¬®±ªª°§©¯¥§­¦¨®«­³¶¸»º¼¿ºº½µµ¸®°²¬±´®±´®±´¬¯³©¬°¥©¯£©¯¡¨­§­³«¯µ®±µ©­³œ ¨˜¦ž¤ª¡§­¢¨®£©­¡§­ž¤«œ¢©›¢ªœ¢©™ ª’š¥ˆ’›‚™€‰˜x{“je‡MDr-#Z&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V'V'V'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U'V.!Y<0d_W„‚›•’¦œ«©ª¶¸ºÀÀÀÆÊÉËÐÏÎ×ÕÒÚ×ÓÙÖÒØÕÑÖÔÑÒÒÏÏÏÌÌËÊÈÈÅÊËÉËÌÊËÌÊÉÈÇËÊÉÊÉÈËÊÉ×ÕÓÛÙÖÛÙÖ×ÔÐÓÑÎËÉÇÅÂÂÄÃÂÇÅÃÇÅÃÆÆÃÂÁÀÅÅÂÆÆÃÅÅÂÅÅÂÃÀÀÀÀÀÁÀ¿ÅÄÃÆÇÂÆÇÂÇÅÃÆÆÃÅÄÃÂÁÀ¿½¾¾¼½½¼¾¼½¾¼½¾·¸¹´µ¶±³µ±³µ°²´±²³°²µ±³µ¯¯²¬®±ª¬¯­¯²­¯²ªª°§©¯¨«¯©¬°«¯µ­¯²¯±´°²µ°²´«®±«°³®±´­°³«®²§«±¤¨® ¦¬¢¦¬§­±ª°´¬±´§«±£©œ¢© ¦¬ž¤ªœ¢©£ª£ª™Ÿ¦–§—ž¦”›¥‘™¤• ƒŽš~‰–z€’ea„?4e0#[(U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U'V'V'V'V&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U&U(U(U(U(U(U(U(U(U(U(U'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T(U(U(U(U'T'T'T'T'T(U/#ZA6gldˆ‡‚–“§§§´´´½½½ÃÆÆÉÎÎÎÒÒÏÖÔÑÚ×ÓÙÖÒÖÓÏÒÒÏÎÎËÌÌÉÉÈÇÇÅÃÈÈÈÈÈÈÈÈÈÅÄÃÆÅÄÄÂÃÄÄÄÎÏÍ×ÕÒÙÖÒÕÓÐÎÏÊÈÅÂÅÄÃÇÅÃÅÆÄÃÄ¿À¾¾¾¾¿¿¿ÀÀÀÀÀÀ¿ÀÁ¾½¿½¾¿¾¿ÀÁÁÁÆÆÃÇÅÂÇÅÃÆÆÃÆÆÃÂÁÀ¾½¿½¼¾¼»½½½½º»¼¸¹º¶·¸´µ¶±²³±²³²´¶´¶¸µ¶·´µ¶°²µ­°´¬¯³­¯²ª¬¯©«®©¬°ª®´ª¯²«¯µ¬¯³©«±©®±ª¯²¨­°©®±¨­°¦ª°¡¤«Ÿ£«¢«£ª ¦ª ¦¬ ¦¬¡§­ž¤ª£ªœ¢©š §™Ÿ¦™Ÿ¦˜Ÿ§˜ž¥–§•š£”™¢—¡Š’ƒ‹˜~‡–tvJBm6)^(U'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T(U(U(U(U'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T(U(U(U(U'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T'T(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U*W4&]@5fc[€Œ‡Ÿ¤¡°±³¼·¹¿À¿ÄÈÉÊÎÎÎÏÏÌÓÑÎ×ÕÒÖÔÒÓÑÏÐÎÌÌÍËÈÈÈÃÂÄÁÀÂÀÁÂÀÀÃÅÅÅÀÃÃÁÁÁÃÁÂÄÂÃÈÈÈÎÍÌÒÏÌÏÍÊÉÇÄÄÃÂÅÄÃÃÄÂÃÄÂÀÀÀ¹»º¸¹º¸¹º¸¹º¹¸º¸º½··º·¸¹»¼½¾¿ÀÂÁÀÆÆÃÅÆÄÅÅÂÁÁÁ¿¿¿½¾¿¼»º»»»½½½ººº¹¹¹¶·¸³´µ¯¯²¯±´³µ·µ·¹¶·¸´¶¸¯±´¬¯³¬¯³¯±´¯±³­¯²¯±´±°µ®°³±³¶®±´¬®±©¬°¦ª°¤¨®¤ª°¡§­ £ª›¡¨œ ¨šŸ¨™ž§—œ¥—¤—ž¨™Ÿ¦˜ž¥—œ¥•œ¤”›¥—ž¦™ ªš¡©›¡¨™ ªš §˜ž¥’™£’ž†Ž›„‹šqp‹A8h-#Z(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U(U)V)V)V)V)V)V)V)V)V)V(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S)V)V)V)V(S(S(S(S(S,W/#Z9-a]S{•“¨±³¼·¹¿»½ÃÂÄÇÈÉÊÍÍÍÍÌËÑÏÍÕÓÐÕÓÐÑÏÌÍÍÊÉÊÈÃÄž¾Á¼¼¿»½À¼¾À½ÀÀÀÁÂÀÁ½¾¿¾¾ÁÁÂÃÅÄÃÈÈÅÇÅÃÅÆÄÅÄÃÄÃÂÂÁÀÀ¿Á½¼¾¸¹ºµ·¹´´·²´·²´¶²´·³µ·³´µ¶·¸¼½¾ÁÀ¿ÅÄÃÂÁÀÀÁ¿¾¾¾»º¼¸¹º¹º»»¼½»¼½»»»¹¹¹´µ¶¯±³­­°®°³²´·´µ¶´¶¸°³¶¬¯³ª­°­¯²®±µ°²´°²´³µ·³µ¸³µ¸²´·®°³«­°¦©­¡§­¢¨®£©¯¢¨®œ¡ªš §™ ª˜¦–›¤•™¤“˜¡‘˜¢“—¢‘˜¢‘˜¢‘˜¢’™£”›¥—ž¦¤¬ ¦­ ¦¬ ¦¬Ÿ£«™ ª“š¤Œ”Ÿ‹“žƒ„˜`Y~A6g2%Z*U(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S)V)V)V)V(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S)V)V)V)V(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S)T)T)T)T)T)T)T)T)T)T*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S)T)T)T)T*S*S*S*S*S+T. W9+_\Rzšš¬¶¶¿¼¼Â¿ÁÄÅÅÈÊÊÊËÌÊÍÌËÐÐÍÒÒÏÓÑÎÏÏÌËÊÉÆÆÆ¿¾À¹¹¼µ·º¶¸»¶¹¼»¼½¾¿À½¾¿¼½¾»¼½º¼¾¼¾ÀÀ¿ÁÀÁÂÂÂÂÂÃÁÂÂÂÂÁÀÁÁÁ½¾¿»¼½·¹»µ·º±´·±³µ±³µ±³µ´µ¶µ¶·¹¼ÀÅÅÅÅÄÃÁÁÁ»½¼ºººµ¶·´µ¶²´¶·¸¹¹¹¹¸¸¸·¸¹±±´­¯²«­°®±´³µ·³µ·°²´«®±«°³­°³¯²µ¬¯³«®²«®²¯²µ²´·¯²µ­°³¬®±§©¯£¥«¡£© ¦­¢¨®¡§®›¡¨›¡¨š §—ž¨”›¥“š¤’—£‘˜¢Ž–¡’–¡—¡‘˜¢’™¡’— •š£œ¢©ž¤ª¢¨¬¤¨®¡§­¢«–§“›¦“š¤•¡†Ššwv^V{:,`-V*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S)T)T)T)T*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S)T)T)T)T*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S+T+T+T+T+T+T+T+T+T+T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T+T+T+T,U*U*U)T)T)T,U3%Y@5cf]›­»ºÄÄÄÇÂÁÃÄÃÅÉÉÉËÌÊÌÍËÌÌÉËÊÉÌËÊÊÉÈÅÅÅ¿¿Â¹¹¼´¶¹°²µ°°¶°³·´·º¹»¾¹»½·¹»·¹»·¹»¸º½¸º½¹»½º¼¾½¾¿½¾¿¿ÀÁÀÀÀ¾¿À½¾¿¸¹º´¶¸±³µ±³µ±³µ²´·³µ¸³³¶¸º½ÂÁÃÅÅÂÁÁÁ¼½¾µ´¶²³´¯±³°³¶±¶¶µ¶·¶·¸¶·¸²´¶­¯²¬®±¯²µ²´¶±²³­¯±«®±ª­±«°³«°³¨­°¥©¯§¬¯«®²¬¯²©¬¯¨«®¥©¯¢¦¬ ª› ©Ÿ£«ž¤«›¢¬œ¢©›¡¨™Ÿ¦”œ§“š¤‘˜¢—¢– Ž–¡Ž•¡– —¢—¡‘• ”™¢˜Ÿ§›¢ª¡§«¥©¯£©¯ ¤¬œ¢©™ ¨˜Ÿ§–§”›¥‘˜¤‡ˆœe`‚C8f2&Z+V)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T+T+T+T+T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T+T+T+T+T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T)T*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S+T+V+T. W. W0#X3&[5'[5&Y8)\F;i_Vzƒ|—«ª¶ÆÅÊÌÌÌÈÆÇÁÀÂÅÅÅÉÉÉÉÉÉÄÄÄÅÄÃÃÂÄ¿¿Â»½À¶¸»²²¸­¯²«®±«¯µ­°³°³·µ·º±´·¯²µ¯´·¯´·±´·±´¸²´·³µ·µ·¹·¸¹¹º»¹º»¹»½¹º»´¶¸±³µ±³µ±³µ®±´°³¶±±´²´·¹»¾¿¿ÂÁÁÁ¾¿À·¸¹²´¶°²´°²´®±´¯²µ°³¶³¶¶¶·¸³µ·¯±³¯±³°²´°²´­¯²ª­°ª­±©«®¨«¯©®±§ª®£¦ª¤¨®¦ª°¦©­£¨«¡¥«£ª›¡¨™¥˜œ¤™ ª™ ªš¡«šŸ¨˜œ¤•œ¤”›£’™¡Ž•Ÿ–žŽ–¡Ž•Ÿ”ž”žŽ•” – ”›£—ž¨š §¡§­¦«®¥©¯¡¤«œ¡ªš §—ž¨•œ¦“š¤‘”¡‹Ÿƒ˜oj‰SIt1$Y*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S,S,S,S,S,S,S,S,S,S,S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S+T.U/!U3%Y9,_F9jXMw^T|ZPxXLvvpŽ“¤­­¸ÄÂÉÏÎÍÏÎÍÆÅÄÀÀÃÁÀÂÃÂÄÂÁÿÀÁ»»¾¸¸»µ·º±´¸®±µ©­³¦©­¥¨¯¥«±§­³¬°¶®±µ¬¯²ª¯²¨­°ª­±ª­±«®²«®±ª¯²¬®±®±µ°³¶±´·µ·¹´·ºµ·¹°³¶¯±´°²´±³µ°³¶±³µ³´µ¸¹º¹»¾º¼¾¹º»³µ·«®±ª¯²«®²«®²«®±®±´±³µ²µµ²··±´´®±´®°²«°°ª­°©¬°§«±¦ª°¦«®§¬¯¥¨¬¢¢« £ª¡¤«Ÿ£«œ¢©›¡¨˜¦—œ¥•š£”š¡“˜¡”›¥—ž¨˜ž¥”š¡‘˜ —¡Ž–¡‹“œ‹“ž‹“ž‹’œŠ’Š“ŸŠ”Œ”• ’™£–¥›¡¨ ¦¬¥©¯£¦­› ©š¡«˜œ§’•¢Ž‰Š›ƒ€–~–{y’kd†MAn0#X*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S,S,S,S,S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S,S,S,S,S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S*S+T+T+T+T+T+T+T+T+T+T,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S-T1!X4&Z7*]@3dD9gMBm]S{ng‰|—Š‡Ÿ‡›–’¤¯°¼ÂÂÈÌÌÌÏÎÍËÊÉÅÅž¾Á½¾¿»½Àº¼¾··º²´·°³¶®°³ª­±¤ª°¡§­¢«œ¡ªœ¦¬£©°¤ª°§«±§¬¯¥©¯¤§ª¤§«£§­¤ª°¤ª®¤ª°¦ª°¦«®ª­°¬¯²¬¯²®³¶±´·±´·±³¶¯²µ°³¶²´·±³¶±²³±³µ±³µ¯²µ¬°¶«®±¨«¯¦«®¤ª®¥ª­§ª­§¬¯ª¯²®±´°µµ°³¶®±´«°°©®±¦«®¤¨®¢¤ª¡¤«£§­£§­¡£©›¡§™Ÿ¦™Ÿ¦˜œ¤”›¥—›£”˜ ’— ‘—ž””žŽ–Ÿ™Ÿ‘™¢‘˜ ”žŒ”Ÿ‹’œ‡‘š‡œ†‘‡œˆ‘ˆ‘‹“œŒ“• Ž–¡‘˜¢•¨˜Ÿ©Ÿ£«œ ¨–›§˜œ§’•¢„—xsŽtnŠph‰rlŠrlŠaX|>0b-S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S+T+T+T+T,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S+T+T+T+T,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S-T-T-T-T-T-T-T-T-T-T+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q-S4&Z>0bJ@mWQy^Y~d]‚[QyaY~‹¢Ÿ ±¥¤³ªªµ»»ÄÅÅÈÉÉÉÈÈÈÂÁÿÁÄ¿ÀÁ¼½¾µ·º°³¶®±µ«°³¨®²¦¬°¢¨® £ª™Ÿ¦–ž§•¨˜Ÿ§œ£­ ¤¬¡¤«ž¤ªŸ£«£©£ª£©ž¤ªž¤ª¤¬ž¤« ¦­¢¨¬£¨«£©­¦¬°¨¬²ª­±¬¯³¬±´¬±´­°´¬®±­¯²­¯²¨«®¥ª­¥ª­£©­¢§ª §©¢¨¬£©­¤©¬£ª¬§¬¯§¬¯¬±´®±´ª­±§¬¯¤ª® ¦ªŸ¢©›¡§£ªž¤«¢«œ ¨™ž§—œ¥•›¢“™ ‘—ž—Ÿ–ž‹•ž‰‘šˆ™‡œ‰’žŠ’›‹•ž‰“œ‡‘š†™ˆ™„™„™„›…š…Žš†›Š’”ž– —¡—¡‘˜¢•¦—ž¨•š¦’•¢“–£Ÿ|”ne…e\aX|aX|aX|ZOv@4a. T+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q-T-T-T-T+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q-T-T-T-T+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q+Q-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T0 W;.aNFqYU{cb…iiŠnj‹oj‰•–©§ª¶±³¼¹»Á¿¿ÅÄÂÆÂÁû½À¼¾Á½½Ã¼¾Á¸º½²µ¹¬¯³¨«¯£©­ž¦¬›£¬šŸ¨—œ¥“š¤‘™¢“š¤“š¤”œ§–ž©˜Ÿ©˜Ÿ©˜Ÿ©˜Ÿ©˜¦˜Ÿ©™ž§š §˜Ÿ§š¡©œ¢©œ¢©ž¤« £ªž¤ª £ª¡¥«¤©¬¥ª­¥©¯¥ª­¥«¯¦ª°¥©¯£§­¡¤«¡¤«ž¤ª £ªž¤«ž¤«ž¥ªŸ¦«¢¨¬¢¨®£©­ª¯²«®²¦©­ ¦¬ž¤ªœ¢©œ ¨œ ¨š §™ ¨˜¦—œ¥–›¤”™¢’˜ŸŽ–¡–ž‹“œ‰“œˆ™„™„™…š…š…š…š„™ƒŽ˜ƒŽ˜ƒŽ˜€‹—€‹˜‚™ƒŒ›„™…š†‘‹“ž—¢‘˜¢‘˜¢“š¤”›¥”™¥‘“£ŠŠœˆ…›|w’tnŠf]€^Uy_Sy]TxYMvI=j0"V-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T.S.S.S.S.S.S.S.S.S.S-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T.U8)\F=kSMw^Z€feˆqqƒ‚›œ®¯±ºµ·À¹»Á¼¾Ä½½Ã¹¹¿´·¾³µ»´·»µ¸¼³¶º®±µ§«±£¦­ ¢«—ž¨–§”›¥’™£–¢–žŽ•Ÿ–žŽ–Ÿ—¢“š¤“š¤“š¤“š¤”›¥”™¢–œ£•œ¤–§—ž¨–§—¤—ž¨˜Ÿ§™ ª›¡¨›¢§£ªž¤¨ž¤ª¡§­¡§­ ¦¬¡¤«¡£¬¢«£ª£ª›¡¨—Ÿ¨—ž¨˜ž¥›¡¨£ªž¤ª¥©¯©¬°¥¨¬ž¤ª›¡¨™ž§˜Ÿ§—ž¦—¤•œ¦•›¢•›¢“š¢’™¡—¢Ž–¡Ž•”œ‰‘šˆ™…œƒŽšƒŒ˜„™…œ…Žš„œƒŽš˜˜Œ–‹–~Š•€‹˜€Œš‚Ž™„›„›Š“ŸŽ–¡• —¢‘˜¢–¢‹Ÿ~–tnŠqk‰ia‚]Tx^Uykc„pjˆeZ~\OwODo=/a/ S-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T.S.S.S.S-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T.S.S.S.S-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-T-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S/ S9+]G=jRKt^Y~lk‹‚ƒœ˜™¬¦©µ¯²¹²µ¼´¶¿²´º¯²¹«±·«­³¬®·¬¯¶­±·ª­´¡¤«Ÿ£«šž©”˜£“—¢—¢Œ”Ÿˆ’›‰‘œ‡œˆ’›‰‘œŒ”Ÿ• •ž•žŽ–Ÿ•ž‘˜ ”›£“›¤”œ§•œ¤“š¢‘™¢“š¢’š¥•¦•¦™Ÿ¦˜ž¥—ž¨œ¢©ž¤ªŸ£«¢«œ¡ª› ©œ¡ª›¡¨™ž§—ž¨”›¥“š¤•š£š § ¦ª£§­¡§­ž¤ª˜ž¥•›¢”š¡“š¤“š¤˜¡— —Ÿ‘˜¢—¡Ž–¡Ž•Ÿ• Œ”‹“žŒ“›ˆ™†Ž™…Žš…š†™†™‡Žš‡Žš…šƒŒ›Œ˜Š—|ˆ“|ˆ“~‰–~Š•€Œš‚Ž™„™„›‡’ž‹•ž• Ž•¡‹ƒ€–tnŠ^RxD6c;,\9*Z=.^J<i^Rxld…]TxNBlG9i7([-Q.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S-Q-Q-Q-Q.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S-Q-Q-Q-Q.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S/T/T/T/T/T/T/T/T/T/T-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q/T5$Y;,\A2bLAlb^ts„ƒœ“”¥Ÿ ¯¤§±¤§³¥¦²£¦°¥¨²¤©²¦ª²¦©°¦¬²¤ª°Ÿ¢¬šž©“š¤– ”ž‰‘œ‡‘š…œ„™ƒŽš„›…œ†›ˆ‘ˆ‘‡’œ‡’œ‹“œ•ž˜¡‘™¢‘™¢—ŸŒ”ŸŒ”— ˜¡‘™¢’š£“š¤•œ¦”œ§•¦—ž¦š §˜Ÿ©—ž¨—ž¨˜¦˜œ¤•š£•™¡•œ¦•œ¦–§›¢ªœ¡ª˜Ÿ©“š¤‘˜ Ž–ŸŽ–¡—Ÿ— Ž–¡Š’›‹“œŒ”•žŒ”Ÿ‹“žŠ’Š”Š“Ÿ‰’ž‹“œˆ’›…Žš‡Žš†™…š‡Žš†‹š…Š™„‹—„‹—‚Š—~‡–x„”x„’z†”}ˆ•Š™ƒŽš…œ†›‡œˆˆ›ƒ„•vqŒj`VHr>/_0"V-Q.R7&YF8ePDnOCmA3c9*Z8)Y0!T-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q/T/T/T/T-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q/T/T/T/T-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q/T/T/T/T/T/T/T/T/T/T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/T4#V6%X7&YF:gYMvaX{mfˆwq|”‰…šŽ‹Ÿ——©œ¬  ­¡¦¯¡§®¡§®¡¦¯Ÿ¤­œŸ©–š¥Ž–¡‹“ ‡’ž…œ‚š€‹˜€ŒšŠ—Œ˜ƒŽš„™…ŽšƒŽ˜˜‚Ž™†™‰’ž”ž• Œ”Ÿ‹“žŠ“Ÿ‡“›ˆ’›‰’žŒ”Ÿ•ž– ‘˜¢‘™¤’š¥’š£“š¤“š¤’š¥’—£’™£”˜£‘–¢’–¡’—£’–¡‘–¢‘˜¤•¡Ž•ŸŠ’Š“ŸŒ”Ÿ‹’œ•ž‹” ˆ’›‡‘š†›†›†‘›†›†›‡‘š†‘›‡œ†‘›‰’žŠ”ˆ‘‡’ž‡œˆ‘†‘‡Žš‡‹™„‰˜„†˜ƒ…—†•{†•z†–z†”}ˆ•Š—‚‹œ‰›–z{‘wvqm‰\QuD6c@/_:)Y0!T/Q/Q1 SC5bXKsM?i7&V0!T0R/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/T/T/T/T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/T/T/T/T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/S/S/S/S/S/S/S/S/S/S/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/S1 U0T4"V?.^F8eI=gPDnPDnSGp_SyqhˆŒŠŸ••§›ž« £°Ÿ¤°¤¬œ£­™ ª•œ¦’—£Œ”Ÿ‡ŸƒŽš€‹˜Š—}ˆ•|ˆ–|‡–}ˆ•‚Š—‚Š•ƒŒ˜Œ˜~Š•Š–‚™‰œ‹œŒ‘‰‘œ‹’ž‰œ‡œ‡œ†›†›ˆ‘‰“œ‹“ž•ž–¢Ž–Ÿ– Ž–¡• Œ”Ÿ” ” ’Ÿ’žŸ‰Š™††˜ŠŽžŒžŒž‰’žˆ‘Š’›ˆ‘ˆ‘‡œ„›ƒŽ˜ƒŽ˜‚™ƒŽ›ƒŽ›ƒŽ„›„™„›†›Š“Ÿ‹” ‡’œ†‘ˆ“Ÿ‰” ˆ‘ˆ›†‹œ…‡™ƒ„•€’ƒ•‡—†•†•Š™‚œ‚‹œwvaX{L@jE7d<-\6%X1 S0R/S/Q/Q/Q1 S>-]D5c9(X0R/Q0R/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/S/S/S/S/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/S/S/S/S/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q0R0R0R0R0R0R0R0R0R0R/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S0R0R0R0R1 S5#U9(X>-]8'W:(ZD5cZNt‚|–““¥˜™ªšž®›¢±™¡¬•œ¦“˜¤Ž–£Š’Ÿˆ‘ ‚Žœ‹™Š™~‰˜}ˆ•{†•|…”~†“€‡“‚‰•ƒŠ–‰–€‰˜€‰˜ƒŒ˜†Ž™‰Žš‰Žš‰Žšˆ™ˆœ‡Žš…š‚šŒ™Œ™„œ†‘ˆ‘ˆ“Ÿ‰” Š“Ÿ‰’žˆ“Ÿ‡œŠ‘‹œŒœ‹Ÿ‰Š›€|‘}x–„ƒ™ˆŒœŠžŠ‘ˆ†›…ŽšƒŒ˜Š™}ˆ•}‰—€‹˜Œ™‚š‚šƒŽ›ƒŽš‚š†‘ˆ“Ÿ‡’žƒŽš…‡’œˆ‘‰’ž‡œ‡œˆœ‡Š—„…–„‰˜€‰š€†˜Š™‹™‚šƒŒ›|{”UJq>-]4"T/S/S/S/S/S/S/S/S/S1 U1 S/Q/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S0R0R0R0R/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S0R0R0R0R/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S0T0T0T0T0T0T0T0T0T0T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q0T0T0T0T/Q/Q0R1 S0R4"T?0^XKsqk‰€z”ˆƒ›““¥˜®–©‘˜¤Œ•¡ˆ‘ …Ÿ„ž‹›Š™~‰–}†•~†“}…’†•…“‚†”ƒ†“‚†–‚‡–†•‰–„‹—ˆ‹˜‰Œ™‡Œ˜ˆŒš…Œ˜‡‹™„‹š„Œ™Œ˜Š™€‰˜‚œƒŽš„œ†‘†‘ž…‚šƒ„›…šˆœ…Š›…†™‚—ytnf„lcƒpj†‚€•‰›‡šˆ›‡Žš„Œ—‚Š—|‡–{‡—|ˆ–Š—~Š•€Œ—€‹˜€Œ—˜‚Ž™ƒŽ›ƒŽšŒ™€‹—ƒŽš„œˆ“Ÿ‰’ž‰‘ž‹“ ‹’ž‡œ†œ…Œ›‚œ€Œœ€‹šŒ›‚š‚™‚‡›yx‘\Qu?.^4#V1 S/Q/Q/Q/Q0R1 S0R/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q0T0T0T0T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q0T0T0T0T/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q/Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q4"T>/]I:fOAkZMrmd„ŒŠ¡”˜¨’—£Œ”¡ˆ“¢ƒŽ›‹›Œ›~Šš}‰—~‰•~‡–€…”€„’€„”€‚’ƒ“ƒ“ƒ“…•…•‚†–…†—…†—†ˆ˜…‰™†ˆ˜„‰š…‰™„‰šƒˆ—‚‰˜ˆ—‡—Š™Š™€‹˜‚š€Œš‹™Š—‹™Œ™ƒŒ›…˜xwoj‰i_€\OtSFnXJqcYz}zˆŒš‡Œ›‡Œ˜‡‹™…Š–ƒŠ–‡—~‰˜~‰–~Š•Š—Š–Š™~Š•Š”~Š˜Š—Š—~Š˜|ˆ–€‹˜Œ™…œ‹“žŽ•¡• ’žŠ’Ÿˆ„›ƒŽ‚œƒ‹›‚œƒŽš†ž‡Ÿ‡œ˜jd‚OClD6c>/]:)Y9(X<*Y@1_E6b:)Y0R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q4"T8&X;(YD5af\}ysŽ¢–¥ˆ“ ƒŸ‹›Š™Š—Š™€‡–€…”€„’ƒ“~‚’€’‘‘€’‚“‚“€‚”‚“‚ƒ”‚ƒ”„„”„…–„…–„…˜ƒ…—ƒ„•…•†—~†˜…—~†–{‡—|‡–{‡—{ˆ—z†–{‡—}‰—~Šš€†˜vu\QuI:f>-]9(X:(W@/]UHpxv…‰™†Š˜†Š˜ƒˆ—…‰—‚‰•†•ˆ—€‰˜€‹—ˆ—€‰˜ˆ—ˆ”}ˆ•~‰–}ˆ•}‰—z‡“z†–}‰—€Œ—‡’žŒ”ŸŽ•Ÿ• Œ”ŸŒ”ŸŠ’Ÿ‡œ…œ‚œƒ‹›ƒŽ…œ‡’ž‡’œ‰” ‹’žˆŒœƒ‚˜wuŽf]}g\}aWxh_qj…jd‚E4b3!S1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q2 R2 R2 R2 R1Q1Q1Q1Q1Q3 Q5"S6#T9'V@/]ZMrxrŒˆŠœŒ“¢ˆ‘ ƒŽ›Œ›Š™‚‡–€‡–…•€‚’‘€€‘€€’€‘€€’€€’}~‘|z~|‘€~“€€’‚€’‚‚”‚•“€€’”€“‚–ƒ–€•}ƒ•zƒ”u‚“sƒ“t„”u…•v†˜x…–{…—|•oi‡WIp@.]8%V5#U3 Q8&UPCkup‹ƒ„—„…–ƒ…•ƒ„•‚„”†—€‡–†•‚‡–‚‰˜€‰˜€ˆ•€ˆ•~‰–}†•}†•|…”{„“x…–x„”z†”Œ™‡’žŒ”ŸŒ”ŸŽ“ŸŒ”Ÿ” Š’ˆ‘†›…šƒŒ›‚‹š„œƒŽ›…œˆ“Ÿ‹“ž• –¢“ž‹Ž›‰‹›…†™~|‘f[|=,Z4!R4!R2 R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q2 R2 R2 R2 R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q2 R2 R2 R2 R1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q1Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R3 Q3 Q3 Q3 Q2 R2 R2 R2 R4!R7%T<+YA0^H8cXJqjawuŽ‚˜†‹š‡Ž†Ž›…Š™…‰—„…–‚ƒ”‚‚’‘€€‘~~‘€~}’}zŽ{wŒwtŒtq‰wrŠzv‹|x~z{}{|z|xxu{wŒ{yŽ{y{z|~“w€”r€’p€’q“sƒ•t‚”zƒ–{–wvf\{K<e;)X6$S6#T3 Q:(WSElqj…~{‘}{~{}’~’“€„”€„”…•†•€‡–€ˆ•ˆ”}ˆ•~‰•}†•|…–z†–w†•vƒ”{‡—€‹˜„œ…œˆ‰‘žŠ’‹’ž‰’ž‡‘š†›…Žƒ‹˜ƒŠ™„Šœ‚‹šƒŒ˜„›‡‘šŒ”ŸŽ•Ÿ‘–¢—¡Ž’ ˆŠš‚•wuŒaVw=+Z5"S;)X7%T2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R3 Q3 Q3 Q3 Q2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R3 Q3 Q3 Q3 Q2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R2 R3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5"S:(WD4_N?hXKpbXykcsqŠ{y~’‚„–†Š˜…‰™……•„ƒ’‚€’~~~|‘~{}zŽ|z|z}z|xuo‰i_~_Svg\}mdpg„qhƒvpŠxr‰xs‹wq‹tk†qh…qh…qj…rk†sl‡vuŽvzu}’r~‘s’v“x€’y}’vuŽh_XIoG5a6$S3 Q3 Q4"Q;)XM>geZ{mdj`ka€ne‚pj†wtŠ|}€‘€‘ƒ“€„”„“„“€…”~…”~†“|…”w„•uƒ•t„”v†˜{‡—€‹˜‚š„›†‘‡’žˆ‘‡œ‡œ†Ž›…š…Š™ƒŠ™‚‡˜ƒ‰›„‹šƒŽ˜†›‹“žŠ’Œ‘‰‹›„„–}{wuŠmj‚d[{F7`8&U7%T8#T3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5 S5 S5 S5 S5 S5 S5 S5 S5 S5 S3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5 S5 S5 S5 S3 Q3 Q3 Q3 Q5#R?,ZF7`OAhYLq_Uve]~mh†qpŠwuŒ{yŽ~’‚‚’‚‚”“~~~z}yŽzt‹wq‹sm‡qj…qj…meƒ_SvJ;dH6aXIocXyeZ{f[|mdsi…ri„oek_~fZzbWxbUw_SvdYzohƒusŠtvuyŽu{w|y}’vwicQCjB1_9'V4!R3 Q3 Q9&T7%T9'VE3^P@hN?hJ8cN?hQCj]Nspk†wuŒxw||Ž~’~€‘ƒ“„“†•|‡–x…–vƒ”u„“t„–w…—~Š˜Œ™Œ™ƒŽ›„›„›…š…œ„›„™Š™Œ›ƒŠ™„‰˜ƒŒ›„›†›Š“Ÿˆ›…‰™}~‘wuŠqn†lg‚f_z]TtSFkC3^8&U7"S4!R3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5 S5 S5 S5 S3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5 S5 S5 S5 S3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q3 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q8&U>,XD4_K>fSFkZNq`Wwf`~kepj„sn†vt‰wx‹||Ž||xysŠysŠuo‰mddYzZKpXIoM?f?-Y8&U:(WH9b_Rt`Su^QscVxi]|k_~eYy]NsWHnP@hN>fN>fRDk`Uvkcoj…qoˆusŠvuŽwxŽtr‹`UvL=f>+Y7"S5 Q5 Q7"S9&T5 Q5 Q7"S8%S9&T<)W>+Y=*XC1]WHn_Tune‚urŠ{yŽ}~‘~‚’~‚’~…”}…•z„–u„“vƒ”uƒ•v†˜{ˆ—|ˆ˜~‰–Š—€‹˜Œ›Œ™Œ™Œ™Œ˜Œ™€‹˜€‹˜‹™Œ™‚™„›„Œ™…•{{utŠqk…jd~b\z]TtVLmOCiF8_@-[8%S6!R5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q7"S<)W@.ZF7`K=dSDjYMp]TtbYyc]{kdoiƒpm…spˆsl‡nd€ri„ri„i]|^QsO?gA/[?-Y:'U7!Q5 Q>+YSCk`Su`Su_OsTEkZKpaTv^NrN>fD2]@-[C.\@.ZC1]L<dWHn]Qt`Uviane‚kce\|O?g@.Z<)W8%S6!R5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5"P6!R9&T>,XH9b\Mrj`vq‰{yŽ|}~’“~ƒ”}…•{„•zƒ”x„”w„“u…—w†•uƒ•vƒ”w„“z†–}ˆ•Š—Š–~‰–~Š˜‹™~Š˜Š—}‰—Š—Š—†•|’xzŒsrˆmj‚gb}aZu\SsVLmNBhH:aC1]=*X:'U7$R5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q5 Q6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P5 Q5 Q5 Q5 Q6 P6 P6 P6 P6 P9#S<*V@.ZD5^I;bN@gPDjTKo[Qr`Wwd\zg_}g^{aUuaUudXx^QsR@hI6`@-X9#S7!Q6 P6 P6 P:%SC0[WGlXHmTDiTDiTDiZJoR@hA.Y<'U?*X@+Y9$R9#S:$T<)W@-XD2]SDj\MrUFlP@h>+Y8"R7!Q8"R8"R6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P7!Q8"R;&T>+VD1[RCimdwtŠ{yŽ{|~““}ƒ•{„•x„”w„•x„”y…“u„“u„“t‚”u‘wƒ“{†•}†—~‰˜}†•|ˆ–{‡—z†”|ˆ–{‡—z…”vsy‹rv‰no…jge_{^VtYPpSIjNAfG9`B3\?-Y<'U8"R6#Q6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P5 Q5 Q5 Q5 Q6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P5 Q5 Q5 Q5 Q6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q9#P<'U@-XD2]D5^G8aK=dQDiTHkXInUFlRCiQ?gM;cJ8`D1\>+V;%R8#Q7!Q8"R7!Q7!Q7!Q7!Q9$R?,WF3]N<dN<dYIn[KpN<d@+Y:%S<'U:$T7!Q7!Q7!Q7!Q7!Q9#S;&TA.YB/ZF3]<)T6!O7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q9#S8"R9#S;&TC0[^Qspf‚vq‰yvŒ|z~“}‚“}…•z…”w„•z…”y…“vƒ”v‚’u‚‘u‚“y„“~…‘~…”€…”~…”|‡–x…–x…”vƒ”s’pyŒnt‰hlfe~b^z_Yu[RrVLmODhJ<cG7_B0[>,X=(V9#S8"R7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q7!Q8"R8"R8"R8"R8"R8"R8"R8"R8"R8"R6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O8"R8"R8"R8"R6!O6!O6!O6!O6!O6!O6!O8#Q<'U>+V@.YB3\E5]G7_G4^E2\A.Y=*U<)T;&T:%S8#Q7"P6!O7"P6!O6!O6!O6!O6!O6!O6!O7!N8#Q='TG5]YIm_PrWGlG4^<)T7"P6!O6!O6!O6!O6!O6!O6!O6!O7"P;(SA.Y;&T9$R8#Q6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O7"P>+VP@eZJndXxsl‡xu{yŽ}~’|‚”|„”x„”{„“z…”x„”wƒ“wƒ“x„”|„‘~…”~…”~‚’~ƒ”}„“zƒ”u‘qzŽlt‰jo…ega`{][wYTrSNmQHkL@fG;aD5^@.Y>,X:(T:%S6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O8"R8"R8"R8"R6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O8"R8"R8"R8"R6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O6!O7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O:%S<*V?,W@-X>+V@-XA.Y=(V7"P8"O7!N7!N8"O7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O7!N7!N:$QC/YYIm`QsYHlH6^:%S7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O=(V:$Q7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O8"O:%SA.YE2\N<deYxqhƒupˆxu‹z{Ž{’|’}‚“|‚”|‚”|‚”|ƒ’|ƒ’}„“~…”}„“~‚’}‘y~uzŽpvˆjo…diab{[ZuVTpTOnPIkMBfH=aE7^A2[@.Y>+V;(S8#Q7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N9"Q9"Q9"Q9"Q9"Q9"Q9"Q9"Q9"Q9"Q7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N9"Q9"Q9"Q9"Q7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O8#Q9$R:$Q9#P:$Q:$Q8"O7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N:#R8"O7!N>(UI5^S@gQAfK8_A.Y9#P7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O8"O7!N9#P=)SH5\YIndWvj^}oerk†upˆwvŒ{||~|}Ž}~}‘}‘~‚’}‘}‘{|vu‹rq‡op†jhed~^]zVUrSQpOKkLDhI@dF:`B4[?0Y>,W<)T:%S8"O7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N9"Q9"Q9"Q9"Q7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N9"Q9"Q9"Q9"Q7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N7!N8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N8"O8"O8"O8"O9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N:#O:#O9"N;%RB.X@,V<(R<%Q9#P9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9#P>*TC/YJ7^SBfYHlZIk\MofYxtk†wuŠzxzw‹{yŽ{{zzŒxxŠvs‡rm…oiƒkdg`{d]x_XsYSqSLnNGiJAeH<bD7\B2ZA.X=*U<)T:$Q9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N8"O8"O8"O8"O9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N8"O8"O8"O8"O9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N9"N:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O:#O:#O:#O:#O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O9#P9#P8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O;$P>'S?+UA-WD.XD0ZJ7^`Oqoeqjƒri„qjƒqjƒpi‚ofja|g^ycYu`Ts^Rq[QpWLmSHiNDeJ>aG:_D5[A1Y@-W=*T<(R:$Q8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O:#O:#O:#O:#O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O:#O:#O:#O:#O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O8"O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O;$P:#O;$P?(TA+UI6]XFgXGiXGi[Jl_Pr^Qp`SrbVuaTq]Qp[NmXIkSFhQAeN>bJ:_F6[C0WA.X?+U=)S<%Q;$P:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#Q:#Q:#Q:#Q:#Q:#Q:#Q:#Q:#Q:#Q:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#Q:#Q:#Q:#Q:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O;$P:#O;$P=&RI5\K8_C-WA*VC-WE1ZM:aZIk[LnYJlVFjSCgP@dL<aJ7^G4[D0YB.W?+U?(T=&R;$P:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#Q:#Q:#Q:#Q:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#Q:#Q:#Q:#Q:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#OA)TQ=cQ=cA*S;$P;$P<&PC-WQ@dTDhRBfN=aL;_I6]G3ZC/VC-W@*T>'S=&R<%Q:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O<$O<$O<$O<$O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#OC-WUDhUDhG3ZA+U@)R@,SC-WJ6\M<`L;_J6\G4[D0WB.U@*T?)S>(R;%O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O<$O<$O<$O<$O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O<$O<$O<$O<$O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O:#O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$OB+TR?cXFgS@dO<`M:^L9]J6\I5[I5[H4ZE/VB.UB+T@)R>'P=&O=%P<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O;$MC,UM:^SAbR@aO<`L9]J7[I4YF0WC/VC-TB+TA*S?(Q=&O=%P<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O<$O=%P=%P=%P=%P=%P=%P=%P=%P=%P=%P=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=%P=%P=%P=%P=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N<%NF/XJ7[K8\L7\I3ZH2YE/VE-UE-UA*S?(Q@(P?%P>$O=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=%P=%P=%P=%P=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=%P=%P=%P=%P=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N=#N>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M>$O>$O>$O>$O;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M=&OE-UG1XG1XD.UE-UD,TC+SA*S@)R?(Q=&O;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M>$O>$O>$O>$O;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M>$O>$O>$O>$O;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M;$M>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O@&QC+SD,TA)Q@(P?'O?'OA'R?'O?'O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O?$N?$N?$N?$N?$N?$N?$N?$N?$N?$N>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O?$N?$N?$N?$N>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O@(PA)Q?%P>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O?$N?$N?$N?$N>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O?$N?$N?$N?$N>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>$O>&N>&N>&N>&N>&N>&N>&N>&N>&N>&N>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>&N>&N>&N>&N>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>&N>&N>&N>&N>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>&N>&N>&N>&N>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L>$L?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M@%L@%L@%L@%L?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M@%L@%L@%L@%L?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M@%L@%L@%L@%L?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%M?%MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&M@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%LA&MA&MA&MA&M@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%LA&MA&MA&MA&M@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%LA&MA&MA&MA&M@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%L@%LA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MA&MB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LA&MA&MA&MA&MB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LA&MA&MA&MA&MB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LA&MA&MA&MA&MB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB'KB'KB'KB'KB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB'KB'KB'KB'KB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB'KB'KB'KB'KB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LB&LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KD'LD'LD'LD'LB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KD'LD'LD'LD'LB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KD'LD'LD'LD'LB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KB'KD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD'LD'LD'LD'LC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JC'JD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD(KD(KD(KD(KD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD(KD(KD(KD(KD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD(KD(KD(KD(KD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LD'LE(ME(ME(ME(ME(ME(ME(ME(ME(ME(MD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KE(ME(ME(ME(MD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KE(ME(ME(ME(MD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KE(ME(ME(ME(MD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KD(KE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JF)KF)KF)KF)KE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JF)KF)KF)KF)KE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JF)KF)KF)KF)KE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JE(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF)KF)KF)KF)KF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF)KF)KF)KF)KF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF)KF)KF)KF)KF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IF'IG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KG(JG(JG(JG(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KG(JG(JG(JG(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KG(JG(JG(JG(JF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KF)KG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JI)JI)JI)JI)JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JI)JI)JI)JI)JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JI)JI)JI)JI)JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JG(JH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JH)KH)KH)KH)KI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JH)KH)KH)KH)KI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JH)KH)KH)KH)KI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JI)JH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KI)JI)JI)JI)JH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KI)JI)JI)JI)JH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KI)JI)JI)JI)JH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KH)KK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HK*IK*IK*IK*IH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HK*IK*IK*IK*IH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HK*IK*IK*IK*IH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HH)HI*II*II*II*II*II*II*II*II*II*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*II*II*II*II*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*II*II*II*II*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*II*II*II*II*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IK*IL+JL+JL+JL+JL+JL+JL+JL+JL+JL+JJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HL+JL+JL+JL+JJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HL+JL+JL+JL+JJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HL+JL+JL+JL+JJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HJ*HK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IM+IM+IM+IM+IM+IM+IM+IM+IM+IM+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IM+IM+IM+IM+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IM+IM+IM+IM+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IM+IM+IM+IM+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IK+IL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HL+HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GL+HL+HL+HL+HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GL+HL+HL+HL+HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GL+HL+HL+HL+HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GN,HN,HN,HN,HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GN,HN,HN,HN,HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GN,HN,HN,HN,HM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GM+GN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HN,HO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FN,HN,HN,HN,HO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FN,HN,HN,HN,HO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FN,HN,HN,HN,HO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FP,GP,GP,GP,GP,GP,GP,GP,GP,GP,GO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FP,GP,GP,GP,GO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FP,GP,GP,GP,GO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FP,GP,GP,GP,GO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FO+FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FP,EP,EP,EP,EO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FP,EP,EP,EP,EO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FP,EP,EP,EP,EO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FO-FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EQ,FQ,FQ,FQ,FQ,FQ,FQ,FQ,FQ,FQ,FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EQ,FQ,FQ,FQ,FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EQ,FQ,FQ,FQ,FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EQ,FQ,FQ,FQ,FP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ-FQ-FQ-FQ-FQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ-FQ-FQ-FQ-FQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ-FQ-FQ-FQ-FQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DQ,DR-ER-ER-ER-ER-ER-ER-ER-ER-ER-EQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FR-ER-ER-ER-EQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FR-ER-ER-ER-EQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FR-ER-ER-ER-EQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FQ-FR-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ES.FS.FS.FS.FS.FS.FS.FS.FS.FS.FR-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ES.FS.FS.FS.FR-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ES.FS.FS.FS.FR-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ES.FS.FS.FS.FR-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ER-ES.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FS.FT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CT.DT.DT.DT.DS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CT.DT.DT.DT.DS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CT.DT.DT.DT.DS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CS.CT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT/DT/DT/DT/DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT/DT/DT/DT/DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT/DT/DT/DT/DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DT.DU/EU/EU/EU/EU/EU/EU/EU/EU/EU/ET/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DU/EU/EU/EU/ET/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DU/EU/EU/EU/ET/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DU/EU/EU/EU/ET/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DT/DU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CX/DX/DX/DX/DX/DX/DX/DX/DX/DX/DU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CX/DX/DX/DX/DU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CX/DX/DX/DX/DU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CX/DX/DX/DX/DU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CU/CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BW0CW0CW0CW0CW0CW0CU0EU0EU0EU0EW0CW0CW0CV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BW0CW0CW0CW0CV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BW0CW0CW0CW0CV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BV/BW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY2CW1CW1CV2DV2DV2DV2DW1CW1CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY2CY2CX2DW3EU2EU3DU3DU3DU3DU2EW3EW1CW1CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY2EX2DY3EX4FU4GU5EU6GU6GU6GU6GU5EU4GW4DX2DW1CY2CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY0CY0CY0CY0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CY0CY0CY0CY0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CW0CZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CZ2BY2CZ3DY3EW4DW5FU6GS8HS8HS8HS8HS8HS8HU6GU5EW4DW4DX2DY2CZ2BY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CZ2BZ2BZ2BZ2BY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CZ2BZ2BZ2BZ2BY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CY0CZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BY2CY3EX5EX6GU7FS8HR:JS;KR<KR<KS;KR:JS8HT6HV6FW4DX4CY2CZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DY2CZ3DY5DX6GU7FT9IS;KQ=LP?NP@PP@PP?NQ=LS;KT9HU7FW5FX5EZ3DY2CZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ1DZ1DZ1DZ1DZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2B[1B[1B[1B[1B[1B[1B[1B[1B[1B[1BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2B[3CZ3DX5EX8HT9IT<LP?NO@NNBPNCRNCRNBPO@NQ>MS;KT9HW7GX5EZ3D[3CZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2B[1B[1B[1B[1BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2B[1B[1B[1B[1BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2BZ2B[3C[3C[3C[3C[3C[3C[3C[3C[3C[3C[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[3CZ3AY5DY7GV:IT<IR?MOAPMDPLESKGTKGTLESNCRPAOQ>LS;HU9HY6EY5DZ3A[3C[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[3C[3C[3C[3C[1A[1A[1A[1A[1A\2B\4D[3C[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[3C[3C[3C[3C[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A[1A\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\4DZ4CY6DX9GV;JR>MPAOMDPKGTJIUIIVIIVKHTLESOCQP@MR<KU:IW8FY5DZ3A\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3C^4Da9Ia:Ha:H^4D]3Ca9Ig@Nc<J^6F^4D^4D]5E\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\4D[5DX6FW9HT=KR?NPDRLGSJIUHKWHLWHLWHKWKHTLESNBOR?MU<KW8FY6DZ4C\4D\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3Cd:Jg?LoKWrO[qMYiBPc9IgCOpLXqMYkDRkDRkDRgAPe;Kb8Hc;Hc;H`8E]3C\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3B]3B]3B]3B]3B]3B]3B]3B]3B]3B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3C[4BY6DX9GV;JS?LPAONFSKHTHKWHMYFNYFNYHMYJJWKGTNCOQANT=KU:HX8E[5D[4B]3C\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3C]3C\2B\2B\2B\2B]3B^4Ce;KnHTwVb_i_ivS_sP\zWc_i_i~^h€`j~^h{[etQ]sP\~[g}]gsOZe=J_5E^4D`6Fa7Gb:Ge>Ld<L^4D\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3B]3B]3B]3B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B\2B]3B]3B]3B]3B]3B]3B]3B]3B]3B]3B\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A]3B]3C]5B[5DZ7FW9HT=KRAMPDRLHUIJVHMYFO[FO[FO[FNYHLWJIUNFSPBOR?MT<IX9GZ7F[5D]5B]3C]3B\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A]3B`6E_5D\2A\2A\2A\2A]3B]3B_5DhAOvS_‚blˆis‡gp‰irˆis‹ow‹owŒpxŽrz‹ow‹ow‹kts{–}ƒ•|‚Œpx|\foIUnJVwT`yYc}]g‡hr~^hh@M]3B\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A]3B]3B]3B]3B\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A\2A]3B]3B]3B]3B]3B]3B]3B]3B]3B]3B]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]3B\4A\5CZ7EX9GV;JS?LQBNNFSLIUHKWFNYEPZFQ[FQ[FO[HMYIJVLHUNCOQANR>KW;HY9FZ7E\5C]5B]5B]3B]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@^5A^5A^5A]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@^5A]4@]4@]4@]4@]4@]3B]3B`7Cg?LtQ]…fpw}•|‚–}ƒ–~„˜€†›…‹Ÿ‡ž†Œš‚ˆ˜€†˜€† ‡Œ¦‘•¦‘•¡Œ˜€†‘v•}†¡Œ“¡—£’™¦•˜ƒuU_c;H_6B^5A]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]3B]3B]3B]3B]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@]4@_4B_4B_4B_4B_4B_4B_4B_4B_4B_4B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A]5B\5C[7CZ7FW;HS=JRAMPDRLHUJJWIMXFO[FQ[EQ\EQ\EPZGNXHKWKHTLEQNBOR?MU=JW;HY9FZ7EZ6B\5C]5B]3B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A`5Ca8Da8D`5C^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_4B`7C`7C^5A^3A^3A^3A_6Ba6Da6D`5C`7Ca8Db8Ge<HmERyU`…enw}‡¢Ž“¥’•©—›¨–šª˜œ®œ ¯¡¬šžª˜œ¨“–©”—¯¡°ž¢¯¡­š ®ž¤³§¬¶­´¶®´´«°²ª°«Ÿ§“z‚xW`nHTkCMb9E_4B_4B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_4B_4B_4B_4B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^5A]5B\6B[8FZ:GU<HS?LOCPMFRLIUJMWGNXEPZEQ\DR[DR[FQ[FO[IMXIJVKHTOFRPBOS?LU=JW;HY9F[8F\6B]5B]5B^5A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_6Bb9Eb7Eb9Ec:Fd;Gb9E`7C`7C_4B_4B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3Ac:FnGRpJVd;G^3A^3A_6Bh?KpLWpJVoIUpLWwS^yXa|[dŠjs“z€š„Š£‘•©›ž¬Ÿ£¯¢¦°¢¥¯Ÿ¢° £´§ª¹¯°¹®±¶©¬± ¢±Ÿ£³£¦³¥¨µ§ª·¬¯º°´¼¶¹½¸¼¼·»¸³·¸²¸²¬²«Ÿ§›Š‘r{|Xch?K^5A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_4B^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A_4@_4@_4@_4@^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3A^3Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_6B_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_6B^6C[7C[:FX<GT>KQANODPLHSJKWHOYFO[FQ[DR[DR[DR[FQ[EPZGNXHLWJJULGSNEQPBOS?LU>IW;HY9F[8F[7C^6C_6B^5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@`5Ag>JoIUpITkCMi@Lg>Jd9Ec:Fc8D`5A`5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@a6BiAK^g^giAKa6Ba8Df=IwT]†foˆisŠnvŽu}—‚‰›† “¦–œªœ¢¬Ÿ£­¡¦³¨«¶­¯·¯²·®°·­®¸®¯½´¶À·¹À¹º¼³µ»­¯º¬®¼¯²»±²¿´·¾¶¹½µ¸¾¹½¾ºÀ¾ºÀ»¸»¸¶º·µ»´¯¶­¡© “ˆhqmFQc8D`7C_4@_4@`5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@a6Ba6B`5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@a5Aa5Aa5Aa5A_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@_4@a5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5A`5Ab7Cf;Gg<Hg<Hd9E`5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5A_4@_4@_6B]7C[8DY:EX=IS@LPDQMFRKJVIMXGOZEPZEQ\DR[DR[DR[DR[FQ[FO[GNXHLWJIULGSNEQQBNRAMT>KW<HY:E[8D[7C^6C_6B`5A_4@a5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Ad9EmDPvRZ^g^guQ\lDNf=Ie:Fd9Eb7Cb6Bb6Ba5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Ab6Bc7Ci>JoHRwT]ŒsyŠjspITkCMqKWyU`‹nu•|„š…ŒŠ¤”š«Ÿ§¯§­²®´·µ»¸¶¼·²¶µ¯²º´·½¸¼¿¼¿À¼Â¿ÂþÂļ¿Å½Àļ¿Ã¹ºÁ·¸Á·¸Åº½Äº¾Å¼Áû¾½µ¸½¸»À¾ÂÀ¾Ä¾½Â¼ºÁ¹»Á¸¶½²­±ªž£›…‹„dmuPZnGRjBLh=Ic8D`5Aa5Ab6Bb6Ba5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5A`5Aa6Bb6Bc7Cc8Dc8Db6Bb6Bb6Ba5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5Aa5A`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5@c7Bh=Ik@Lh@Jj?KkBKiAKg;Fc7Ba5@`5A`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5A`5A^6@]7C[:FX<GT>KQBNNFQLIUKMVHOYFO[FQ[DR[DR[DS]DR[DR[EQ\EPZFO[GNXHLWJJULHUOFRPDQRAMT>KX=IY;G[8D]7C^7B_6B`5Aa5A`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5@g<HqJU€]fw™…ŠnvuQYoHSiAKg<Hd9Ee:Fb7Ca5@b6Ac7Bc8Db6A`4?`4?`4?`4?`4?`4?`4?b7Cf;Gh@JmFQ‚ajv|“{œ‡Ž–}…†gq†fo‹ow’y™ƒ‰ “¤”š¤”š©›¡¯§­µ°·º¸¿¼¾Ä½Àǽ½Ã¼ºÀ¿¿ÅÄÂÉÃÅÈÇÇÊÉÉÌÉËÎÉÈÊÉÆÆÈÂÄÈ¿ÁǾÀȾ¿ÊÂÅÊÄÇÉÁÄƾÁÀ»¾¾¹½Á¿ÅÂÀÆÀÀÆ¿Áʼ¾Ä¹»Á´²¶°ª­ª¡‰Ž”ysz‡gn|X`qJUg?If;GiAKh@Jb6A`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5Ad8Cj?KoGQpISk@Lg;Fg<Hg<He:Fe9Db6Aa5@`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5Aa5Aa5Aa5A`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?`4?a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@a5@c7Bi=Hk@LmDMoFOoGQnENnFPqISlDNi@Ii=Hh<Ge9Dc7Bb4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@a5@`5A^7B]9DZ;FX=IT@KPDONHQKJVIMXHPYFQ[DR[DR[CR\CR\CR\DR[DR[EQ\FQ[FPYGNXIMXJJULHSMFRPDQRAMU@JX=IZ;F\9E]7C^7B^6@`5Aa5@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@c5Ac7Be9DkCM{XaŠqw›Š’¤™¢™†ŒŠmtƒ`itPXnFPlCLlDNlCLj?KlCLrKUvOYlDNd8Cb4@c5Ab4@b4@b4@d9EnFPyV_`iŽs| ’˜¦šŸ©›¡©œ£¨š ¤“š¢‘˜¥”™¦˜ž¦–œ¨š ©œ£§› «Ÿ¤±©¯²®´¹µ½½¿Å½ÀÇ¿ÂÉÂÅÌÆÈÎÈÊÍÊÌÏËÍÏÍÏÑÎÐÒÌÎÐÏÐÑÏÏÏÎÌÍÏÌÌÎÉÉÐÍÍÏÌÏÊÄÇƾÁļ¿¿º¾Â¿ÂÂÀÇ¿ÁǾÂʽÁɺ½Ä¸·¿µ²µ¯©¬«ž¡§—š§•™ ‹Ž•{ms]e|U_vRZoGQf:Ee9Db6Aa5@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@d8ClAM|Waq{œ‡Ž˜‡]epHRxQ[xT\rJTkBKf:Ed8Cc7Bd6Bd6Bc5Ab4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@a5@a5@a5@a5@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@b4@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@b6Ab6Ad8Ce:Ch?HjAJmDMoFOqHQsKStLTsKStOVwRYvOYrJTnENjAJh?Hg>Gf:Ea5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a6B^7B\9E[<GW?IRBLPEQLHSKMVHOYFO[EQ\DR[CR\CR\CR\CR\CR\DR[DR[EQ\FQ[EPZGOXIMXIJVKHTMFRODPRBLU@JX=IZ;F\9E^7B_7Aa6B`5Aa5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@d8Cf=Fi@IrKUƒclz€‘™¥œ¤¡”›š†‹“zŒovah|Yb†fo‡jq}Ya}\bŠoutzahpGPe9Da5@a5@a5@f:EqJTŠmt—„Š•§¡ª«§¯¬§«¬£ª¯©¯±¬³²ª³²¬²³®µ±¯µ±«±¯«±°«²°¨®°ª°³¯µ´²¸º¸¿¾ÀÆ¿ÂÉÃÆÍÆÉÐÉÌÐÊÍÐËÍÏÌÎÐÎÑÑÎÓÓÏÔÔÒÕÕÔÖÕÖ×ÕØØÕØØÕÖÕÔÔÒÓÌÉÉÈÀÃĽ¾Á»¾Â¿ÂÂÀÇ¿ÂɾÂʽÁÉ»¾Å¸ºÃµ³¹³«®­£¤®¤¥­¢¢ªœž¥“›…ˆ”{}Žrv…dj}X_qIQh?Hi>Jg<Ed9Ba5@a5@a5@a5@a5@a5@a5@a5@c7Bi>JtPXŒpx©˜ ·±º»¸Á³¨¯˜}ƒ‡fl•y~—{or{V]lCLi@Ii=Hf:Ef:Ed8Cb6Ab6Aa5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@c6@c6@c6@c6@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@a5@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@e8Be9Dg<Eh=Fk@ImDMoFOpGPoFOoFOsJStLTvQXxSZ{U[~Y`}X_wRYtKTpGPnENk@Ih=Ff9Cc7Bd7Ab6Ac6@c6@c6@c6@c6@c6@c6@c6@a6?`7@_8C\;DZ=GW@KRCOMFRLIUIMXHPYFQ[DR[CR\CR\CR\CR\CR\CR\CR\CR\DR[DR[FQ[EPZGOXGNXIJVLIUNHQODPRBLT@KX=IZ;F\9E^7B_7Aa6Ba5@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@e8Bf:EjAJnENwS[…iq†œ‘š£›¡¦¤¤™ ¢–›—–…Œ˜‡œ“œ›Ž˜w}Žv|›Ž•œ–‹rxwS[jAJd8Cc7Bf:EqISŠjs ’˜¨ ©ª¨®¬¬µ­«±¬§«±«±³¯·¶³¼¶´º··À¸»Å¸»Â¸»Â¸ºÃ¶¶¿¶¶¿·¶¾¸ºÀ¹»Áº¾Æ¾ÂÊÀÆÍÂÆÌÆÊÐÇÊÎÊÌÏÊÍÐÍÏÑÍÒÒÎÓÓÑÔÔÔÖÕ×ØÖÚÚ×ÝÛØÞÛ×ÜÚ××ÖÕÑÐÏËÆÉÄ¿ÂÄ¿ÂÂÀÆÂÂÈ¿ÂÉÀÀɾÀɺ¼Å¸ºÃµ³¹³­°®¤¥°¦§°¦§¯¡£©™™¢™€‚“w{msˆgm[cqIQsKUqHQkBKd8Ce8Be8Be9De8Bb6Af:ElCLsKU`fœ‡Ž³«±ÃÂÌÉËÑÇÊÑÀ¼Ä®ž¡¤Ž®œ°žŸ¨’“‘tx‚]d^g€\dqHQi@Ih=Fh;Ef;De9De8Bd7Ac6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@e8Bg:Dg<ElAJmBKmBKmDMoFOrIRsKRtKTqHQrIRtLTuPWxSZ{V]Zaƒ^eƒ`f€[b|W^yT[vNVsJSnENj?Hj>Ik@Ii>Gf9Cd7Ac6@c6@c6@c6@c6@c6@a6?`7@_8B\;DZ>IVAKQDNNGSKJTHOYFPYFQ[DS]CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\DR[DP[EPZFO[GNXJMWKJTNHQOFORCOVAKZ>I[;E]9D`8B`7@a6?c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@d7Ad8Cg<EkBKpHR{Xa†ms~‡˜–¢š£¦£¬¨§±¨ª³¦¥¯¤£­¤§´¤¨¸¤¡­ ”œœ–¤ž§£›¤v|uPWmDMmDMmDMrIR_fœŒ’¨¤¬¬«³¬¬²­­³¬ª°®©­²®¶¶´»·¶¾·¹¿·ºÁ¸¼Ä¹¾ÇºÁ˺Á˹½Å¹½Åº¾É»¿Ê»ÀɼÁʾÄËÀÆÍÃÆÍÂÆÌÄÈÎÇÊÎÆÊÐÉÌÏÌÎÐÍÏÑÏÑÓÓÔÕÔÓÒ×ÖÕÜÚ×ÞÛ×ÞÛ×ÙÙÖÔÓÒÎÎÎÈÅÈÈÅÈÅÄÉÂÄÊ¿Âɽ¿Å»¾Å¸»Â·¶¾µ²µ²¬®°¦§°¥¥²§§¯¢¢ªšš¡‹Œ’vz‹mpˆglˆekƒbh‚]d€[byT[nENf;Df:Ef:Eg<Ei<FkBKxSZŽsy›…‹¦•š²ª°ÂÀÇÐÒÕÔÖØÒÔ×ÉÉÏÀ¼Â¼³µ»±¯º°®·©¨¯œœ±žž»«®¶¤¨ty‚_e€[bXbvQXtKTi=Hg:De9Dg:De8Bc6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@c6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?h9Ck@InCLpENqIPrIRpENpENpHOsKRuMTwOVtLTwQW}W]}W]Y_[aƒ_dˆdi‰fl‰ej‡ch…afƒ]c|TZtLSqHQqIPrJQqFOnCLj>Ff9Cc6@d5?d5?d5?d5?c6@a8A_8B\<FZ>IUALQEPMHRJKWHOYFO[EQ\DS]CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\DR[DP[EPZFO[GNXJMWKJTNHQQEPRBLW?IZ=G\;D^9C`8Ba8Ac6@c6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@e8Bh<Dk@IqIQzZa…jsŒy‚–ˆ‘— ¥¥°©­¸©®º©®º¦¯¾¤¯¾¤­¾¦ª¸¥¥²¥¡©¥¢«£ž¥“}ƒ€]c|W^^d…bhŠjp–€†¦ž¤¬«³¬®´¬®±«­³¯®³³±¸´³»·¶¾¸·¿·¹¿·ºÁ·¹¿·»Ã¸¼Ä»¿Ç¹½Å¹½Èº¾É¸½Æ¸¼Ä»¿Ç¼ÁʽÄÌ¿ÅÌÂÆÎÃÆÍÅÈÏÆÉÍÄÉÌÈÊÍÉÊËÌËÍÍËÌÏÌÌÓÒÑØ×ÖÙÚÕÜÚ×ÙÙÖÕÔÓÏÐÑÊÌÏÇÉÌÇÆËÄÄÊ¿ÁļÀƹ¼Ãµ¸¿µ²µ²­°³ª¬°¦§²¤¦²§§®¡¡¨••™}‰hmƒ_dƒ_dƒ_dƒ_d†ci„`ezTZnCLi=Eg:Dg<Ek@IuOUŒlrŸ‡®£ª³¯µ¶´ºº·ºÂÂÈÓÔÕÙÚØ×××ÎÐÓÆÆÉÅž¿Ä»ºÀ¶´½²¯ÊÀ¾ÖÓÓÓÎÎõ´ºªª»ª¬´¢¦¡‡‹‡djqHQsKR{U[]bvPVlAJg<Ee8Bd5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@e6@e6@e6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@k?GnFMsKRtLSuMTsKRsKRsKRsKRxRX|V\~X^[a‚^c†bgˆdi‡chˆdi‡eiŠhlŒloŽnqŽnqŽnqŒio†bg‚\b}U[{SYzTZySYvPVsKRoDMj?Hg;Ce6@d5?d5?b7@a8A_:D\<FX?HTCLPENLHSILVGOZFQ[DR[DS]CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\DP[EPZEPZGNXJMWKHTNGSREOTCLX?H\<E^:Ba9Aa8Ac6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?f7Ah<Dj?HqKQyY`‚gp‰u}‘ƒŒ™‘œ£ ¬§«¶©°º©²Á¦²À¤°À£¯¿¤¬¹¤«º¥¨²¦¤«¥Ÿ¥˜†Šu{“z“}€™„ˆ¦›¢ªª°¬°¸¬²¹¬²¸®²º°´¼´¶¿·¹Âº¼Å¹»Á·º¾·¶»´³¸µµ»´´ºµ·½´¶¼µµ¾·¹Â¶¸Á´¶¼·»Ã·½Ä¹ÀʼÁʾÄË¿ÂÉÃÅÎÄÆÌÄÄÊÄÃÅÈÅÈÈÅÅÉÆÆÍÈÈÏÎÍÔÔÔÖ×ÕÙÙÖ×ÖÕÔÓÒÏÎÐËÍÏÉËÎÄÆÉÀÀƽÀÄ»½Ã¶¸¾¶³¶´±´´®°³¬­²¨©°¥¥¯¢¢¬œœ¡‹‹Žnq{VZxPV}W]~X^~X^[`|V\rIOk@Ii=Ek?GoGN|V\ru¨—™³«®¹·½¼»Ãº¼ÂººÀÀÄÊÏÑÓ×ØÖÕ×ÖÐÑÒÇÈÉÉÄÄÇÄÁÈÀÀǾ½Äº·ËÁ¾ØÕÒÜÚØÛØÕÙÖÓÚÕÕÖÑÑŸ¸š}ˆekœ€„®˜™² Ÿƒ‡ŠgmxRXpDLf7Ad5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@e6@e6@e6@d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?d5?e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@g8Bh;Bl@HrIOxRXxRXxRXxRXwQWySYySY}W]ƒ_dŒjn‘tv™|~–y{”vy’twŽnqjpkonp’ru•ux–vy•ww—wz•uxŽnqilŠfi…afƒ]c~V\xPVtKQpENk?Gf7Ac6@b7@a9A^:B\=GX@JSCMOGRMITILVGOZFQ[DR[BR]CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\DP[EPZEOXGNXIJVLIROGRRCOWAJZ>F]<E`9Cb7@c7?d5?e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@f7Ag;Cl@HpHPwV_€dl‡qzŽ~ˆ––žš¥¤§³¨°½¨³Â§²Á¤°¾¤­¾£®½¤¬¹¦¨±¥¥«§Ÿ¥¡“–ŸŽ“ ’•¡“–¤—›§ž£©¨°«°¹­´¾­µÀ­´À¯¶À²¹Ã¶»Ä¹½È»¾Å»¿Ç¹¼Ã¶µº´²¸³°³²®´²°¶µ³º³±¸µ³º¶µ½²²¸´·¾µ»Âµ¼Æ¹½Å¼¿Æ½ÁÉ¿ÁÇÃÅËÄÄÊÃÁÅÄÁÄÈÂÄÊÇÇËÆÊËÉÊÏÏÏÒÒÒÔÔÔÓÒÑÑÏÍÍÌËÊËÌÈÉÊÄÄÊÁÀÅÀ¿Ä»º¿¶³¶´®°´¯²¶¯°³««²§§®¡¡«š™¨••Ÿ…†Žnq}X\{U[†bg‚]a|W[{SYuMTqFOlAJoCKvNTˆdg—{ª˜™´ª«»¶¹½½Ã½¿Å½½Ã½¼Á¿ÄÇÇÊÎÑÔÔÓÖÖÎÐÒÈÉÊÈÇÆÊÅÅËÉÇÌÆÅÊ¿ÌľÔÏÌÝÚÖßÜØßÜØßÜØÝÚ×ÒÍʼ«©¸§¦É¾¾ÍÈÈÊÁÀ»¬ª«••”vyxPVi=Ee6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@g8Bj>FoFLwOU€Z`[`Y_[aY_~X^~X^ƒ_d’tw£ŠŒ¬—š¯ž ±œŸ®™œ©“”¢†Š˜z}’ru‘pr•ux–xyœ~£ˆˆ¬––±Ÿ ±žž­——¨ŽŸ„„˜x{mqƒ_d|TZuMTsHQmAIe9Ab9Bb;E^=F[>HW@KRDMNGSKJTHLWGOZFQ[DR[CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\DP[EPZGOXHMVJJUNHQREOTCLY>G\<F_;Ca9@c7?d7>e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@g8Bj>FpGPuR[|]gƒkuŠwƒ…‘˜“¡ ¬§«¹©°¿§°¿¥°¿¤­¾¤¬¹¥¬¶¦¨®§§­¥¡§¥›Ÿ¥™ž¥›Ÿ¥š§Ÿ¥©§­«®µ«²¼­µ¾¬´½­¶Â°¸Ã´»Å¶½Éº¿Ë¼ÁʼÁʹ½Å·¹¿³²·³°³²¯²²°¶´²¹³²º´´º´¶¼³³¹³µ»³¹¿³½Ã¸¾Å¹¼Ã½ÀľÀÃÀÂÈÅÅËÅÄÉÆÅÇÈÅÈÈÅÈÊÈÉÊÉÈÊËÌÍÌËÍÌËÐÎÏÍÈÈÊÈÉÉÆÉÇÅÉÃÁÅÁ½Ã¿½Ã¼¹¹¸²´µ®¯´«­´ª«²§§°¡¡«››©—˜§•–¥›ƒ“w{™ƒœ„‡—{‘txmp†bg[`|V\[`mpŸ…†®œ³««¹±±»¸¸½½À½¿Å¼¾Ä»½À½¿ÂÀÅÈÈÍÍËÑÒÊÍÐÈÉÊÉÉÉËËËÐÏÎÑÏÍÏÌÉÓÎËÓÐÌÙÙÓßÜØàÜÖàÜÖàÜÖÚØÕÖÑÎ×ÔÑÙÙÖÛÙÖÔÑÍÈ»¸½®¬±žž”vy{SYoCKf9@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@f7Af7Ae6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e8?e8?e8?e8?e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@e6@f7?f7?f7?f7?f7?f7?f7?f7?f7?f7?e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>f7?h9Cl@HtIR|TZƒ^b†bg‡ch‡ch‡ch„`e‡bfps¦‘´§ª¹¯°»±²¼²³¼²³¹«­±žž¨‘€˜x{™{{Ÿ§´¢ Á´´ÈÀÀËÁÂÊ¿¿Æ»¸À³³¸¥¥¬””›~€ŒhkY_zRXsJPjBIiAIb=G]=FY@ITCLREOMHRJJUHMVFPYFQ[DR[CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CQZDP[FPYGNXILVLIRPENSCMY@I]=F_;Ca9Ad8@d7>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>g8Bi<CmBKrKUxXa€dl†q{Œ~‡”‹”›—¢¢¢¯¦ªµ§¬¸¦«·¥ª¶¦©³¦¨±¦©°§©¯§¥«¨ ¦¨ £§ž£§Ÿ¢¨£§ª©®«®µª°·¬´¿«¶À®·Ã±¹Äµ¼Æ¸½É»¿Ê¼¾Ä»¾Å¸¼Ä¶¸¾µ³·´³¸´²¸µ´¹µµ»³µ»´¶¼³³¹²´º³¶½µ»Â´»À·½Äº½Ä½¿Â¿¿ÅÂÅÉÆÈËÈÈÎÉÉÌËÊÌËËÎËÊÌÊÉÈÉÆÉÊÈÉÊÅÈËÅÇÉÂÃÆ¿ÀÅÀÃÃÀÃÁ¾ÁÀ½À¾¹½¼¶¸¹²³µ¬®µªª±¢¢¯ŸŸ®žž®žž®žž®žž° £¯Ÿ¢¯Ÿ¢´§ª´§ª°¢¥®ž¡«šœ¦‘¡‹‹„†ƒ„¥­›™µ«©¸²±º´³ºµµ»º¼»¾Â»¾Â»½À¼¾Á¿ÄÇÄÇÊÃÉÊÄÇÊÈÉÊËÌÍÓÓÓ×ÖÕÙ×ÕÙÖÓÖÖÓÕÖÑ××ÑÜÜÖàÜÖàÜÖàÜÖÞÛ×ßÜØßÜØßÜØÝÛØÖÓÏÍÃÀÉ»·Å¶´»««¦‹glqEMj=Dh;Bf9@e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e8?g8Bi=Ek>Ek>Eg8@f7Ak<FpDLm>Hh9Cg8Bg8Bg8Be8?e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>f7?f7?f7?f7?e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>e6>f7?f7?f7?f7?f7?f7?f7?f7?f7?f7?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?f9@g:Ak>EpCJsHNyQW€[_‡chŠhlŠgmŒjnŒjnŒlopsŸƒ‡®œ¸¯±½·¹Àº½Á»½Áº»¿¶µ»¬ª³žž¬””¨Ž¦Œ«”’¶¤¢Å»¹ÍÊÊÐÏÎÐÏÎÓÎÎÑÏÍÑËÊÍÂÂƸ·¹¨§©‘‘’ru]buQVpKRnJReEN`DLYCLTDMOGRLIRIJVGNXEPZDP[DR[CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CQZEPZGOXHMVKJTOGPSENXBK[?G_<Ea9Ac8Ae8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?f9@k?GpHOtQW|\eƒjr‰u}Š—Ž—š£££®¦©°¦©°§©¯§§°§©¯§©¯¨ª°¨§¬¨¤ª¨¤ª§¢¦§¢¦§¡¤ª§ª««±«®µ«±¸¬³½­´¾¯·À³ºÄ¶½Çº¾Éº¾Æ¹½Ã·¹¼µ¸¼µ´¹µ³º´´º³µ»´¶¼³µ»³µ»´´º³¶½³¹¿µ»Â·½Ä¸¾Å»¿ÇÀÀÆ¿ÁÄÄÆÉÆÉÍÇÊÎÊÌÏÌÍÎÍÎÏËÊÌÉÆÉÉÄÇÉÂÃÇ¿Âƽ¿À¸¸¿¶µÁ¸º¿·º¿¸¹¿·º¿·º¼µ¶¸¯±µ­­³¨¨¯ŸŸ®žž³¤¤¶­¬·¯¯¶®®º³´»¶¹¼¶¹½·º¼·ºº³´»²´»³¶¹±´¶­¯³¥§¯ž²¡ ³¥¤¸®¬¸±¯·±°¸²±¸·¶¹»¾º¾Äº½Á»¾Â¾ÁÅÁÃÅÀÂÄÃÄÅÅÆÇÊÌÎÕÖÔÛÛØÞÛ×ÝÛØÜÚ×ØÙÔÙÚÕÚÚÔÞÛ×àÜÖàÜÖàÜÖàÜÖàÜÖàÜÖÞÛ×ÙÕÏÎÈÁȼ¶Æº´ÌÄÁÅ»¹­—˜‰ehxOTrGMnCIi<Ce8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?f9@k?GnBJwNS{SYyQWoFLk>EoFLyQW{RWrIOrIOrIOoFLm@Gj=Dl?Fl?Fi<Cf7>e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?f7?f7?f7?f7?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?e8?g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7?i:An?FqFLtIOyQWY_ƒ^b†ae‰dhŒhkmqnpor’ru”vv—yz¡††­›œ·®­¾¸ºÁ¾ÁÃÀÃÂÀÁĽ¾Á·µ½¯®»¬ª¹©©º©¨¼­«Å»¸ÌËÊÒÔÓÔÖÕ××ÔØÕÑÕÕÒÔÑÎÏÉÅÍ¿ɾ»¾°¯¨Šjm}Y^uTZoQWhOUcKTYFORFNNISLKUINWFNYEPZDP[CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CR\CQZEPZEOXGNXJJUMHRQEMUBKZ?H]=Da:Dc8Ad8@e8?f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>i:Am@GqIPvSY~`f…ms‹w“ƒŒ˜™ ¦£¥®¦ª²§«³¨¬´¨«µ©¬³¨«²©«®¨ª­ª©®¨¦ª§¢¦¨ £§¡¤ª§ªª¨¬««±¬®´­°·®´»°·Á´¸Ãµ¼Æ¸½Æ¸¼Ä¶¹½µ·ºµµ»µ³¹´´º´¶¹³³¹³³¹²´º²µ¼´·¾´·¾¶¹À·»Ãº¾Æ»½ÃÀ¿ÄÀÀÃÄÆÉÄÇÊÇÉÌÉÉÌËÌÍËÌÍÈÆÇÈÂÄÇÁÄſº½½³´º­­¹«ª»°°º²²¾µ·Àº½À»¿¿º¾½´¶¸®¯µ¨¨°  ±¡¡»°°¿¼¿Â¿ÂÁ¾Á¿ÂÂÀÄÃÁÅÃÀÃÁ¼¿¾¸ºÀ»¾Á¾ÁÁ¿Ã¾»¾¼µ¶º±°»°­º¯¬º°®¸¯®µ­ªµ¯®·µ³¸º½¸¼Âº¾Æ½ÀǽÁǾÁÄÁÂÃÃÄÅÄÆÉËÌÍÖ×ÕÞÛ×àÜÖàÜÖßÜØÝÛÕÜÚ×ÙÙÓÛÛÕÜÜÖÞÛ×ÞÛ×ÞÛ×àÜÖàÜÖßÜØÜØÒÎÈÁÈ»µÉ¼¶ÎÇÂÏÊǾ³³¥‹Œ‹gj~X[vKQnBGf7>f7>f7>f7>f7>g8?g8?f7>f7>f7>f7>f7>g8?l?FuJPZ^ˆcg‡ch€Z]V[ƒ^bŒhkŽmo‰ej‰dh†aeƒ^b~V\}TY…`d†ae{RWmAFh9@h9@h;Bi<Cj>CoBIm@Gh9@f7>f7>f7>f7>f7>f7>f7>f7>f7>g7>g7>g7>g7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>g8?g8?g8?g8?g8?g8?g8?g8?g8?g8?f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>g8?l=DsHN{RW€Z]†aeŽnq•x|˜{}•ux’tt“sv‘qt’tu™}¡‰‰¤‹Š¦ŽŽª••±žž¶©©½·¹Á¿ÃÂÁÃÅÆÇÄ¿¿Å¿¾Äº¸Á¶³Àµ²Äº¸ÉÂÀÍËÉÒÓÑÓØÕØÚÖÚÚ×ÜÚ×ÛÙÖØÖÓÕÏËÏÅÂʽºÁ´±®œš“w{cfwZ^nU[iQZbQXYKTPHQMITJMWHOYEOXDP[DR[CR\CR\CQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZFPYGNXILSLIRPGPUDLZAI]=F`<Db:Ae9Ae8?f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>g8?k<CmBHsKQyX^‚el†qx|„’‡š”  ©¤©²¦®¹¦¯¾§®¸©­¸©­µª­´ª¬²©«±©¨­¨£§§¡¤¨ £§¡¤§¡£©¤¨«¦©ª¨¬­­³¯±·²µ¼³¶½¶ºÂ¸¼Ä¶¼Ãµ»Áµ¸¿µ·½´¶¼³µ¸²´·²µ¹±´¸²µ¼²µ¼´·»µ¸¿¶ºÂ»¾Å¼¿Ã¾¾ÄÂÀÆÄÄÇÇÇÊÈÊÌÉÊËÊËÌÈÉÊÈÅÅÇÂÅÄÁÄÅÂÅÁ»¾»±²¶©©µ§¦»°°¼µ¶¾¸º¿º½Ã¿ÅÄÂÈÁ»¾¼²³·ªª¶§§·©¨Á¸ºÅÅÈÇÉÌÆÅÊÇÅÉÇÅÉÅÅÈÃÀÀý¿Â¿ÂÃÀÀÄÁÄÃÀÿ½¾Á¾¾Ã»»Â¹¸À¸¸Á¼¿ºµµ¶°¯¶±±¸µµ·º¾·½Ã»ÁȼÂɾÄȾÁÄ¿ÁÃÂÅÈÇÉËÌÍÎÕÖÔÝÛØàÜÖàÜÖàÜÖßÜØÜÚ×ØØÒ×ØÓ××Ñ×ÔÍÚ×ÓßÛÕàÜÖàÜÖßÜØÚ×ÓÎÈÁɼ¶Ê½·ÎÇÂË¿¹¼­«®˜—›}~Šfi}SVnBGg8?f7>f7>f7>g8?i:Ah9@f7>f7>f7>f7>f7>f7>h9@qFLƒ[aŠhl‘qt’ru”tw™{~£‡‹¡ƒ„—y|–vy’ru‘qtnp–vyŸ„ ƒ…”tw„_cvMSwNS€X^‚\b…`dŒlo…afqDKg8?f7>f7>f7>f7>f7>f7>f7>f7>g8?g8?g8?g8?f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>f7>h8?h8?h8?h8?h8?h8?h8?h8?h8?h8?g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>h8?k<CqFL|SXƒ]`ˆdg•wx¢Š¦‘”¨’“¦‘¡‡ˆš}˜z{„†ª”•®žž°¡¡³¤¤´§§µ§¦·¬©½¶·¿ÁÄÃÆÉÃÆÉÅÄÃÈÅÂǾ½Äº¸Äº¸ÉÁ¾ÌÊÈÐÑÏÓÖÓÖÙÖÚÛÖÝÝ×ÝÝ×ÜÜÖÛÛÕÙÖÒÓÍÉËÀ»Ä¶²·¥£ Š‰Šqs}bhr\bkZabU\ZQYQNWMOXJQ[IQZFRZDP[CR\CR\CR\CQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZDPXFNYHMVKJTOGPSENWBI[?G]=Db<Bc:@e9>f7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>i:Am>EqHNvRW}\b‚io‰t~Ž‹•˜šš¥¢¦±§¯¼¨³¿¨±À©±¾¬°»«¯·«®µ«­³ª¬²«ª¯ª¨®ª¨¬©§«¨¢¥¨ £¨ £«¦©«¨«®«®°¯´²²¸´¶¼¶¹À¸¼Ä¶¼Ãµ»Á¶¹À´¶¼³µ»³µ»´¸À²·À²·À³¹À´ºÁ¶¼Ã¸¼Ä»¾Å¾ÁÈÂÂÈÄÆÉËÌÍÏÐÑÎÐÒÎÏÐÊÍÐËÌÍÉÈÊÅÅÈÄÆÉÅÅËÃÀþ·¸¸­­¶©©¹®®½¶·À»¾À·¹Ã½ÀÉÄÇÇ¿ÂÁ¹¹½°°¾°²Á·¸Ç¿ÂÈÈËÉËÎÉÉÌÉÉÌÇÅÉÅÂÅ¿ÂÄ¿ÂÅÂÅÄÁÄÅÄÆÃÀÃÀ½½Å¿ÁÆ¿ÀÊÃÄÊÃÄÈÇÉÃÀÀ»µ´¸³³¹¸º¸¼Â¸¾Å¼ÂɼÃȾÄȾÁÄÂÂÅÃÆÊÈÊÌËÍÌÔÕÓÜÚ×ÞÛ×ßÜØÞÜÖàÜÖÞÛ×ÜÚÔÙÙÓ××ÑÔÎÈÔÎÈÞÚÔàÜÖàÜÖßÜØÚ×ÓÑËÄÌ¿¹Î¼ÎÇŸµ¶¤ ¯™˜ „ˆnpV[pAHi9@g7>g7>g7>g7>h8?g7>g7>g7>g7>g7>g7>h9@n?FvKQƒ]`‘prŸ‚„£‡‹¢…‡¥‹Œ©‘‘«’”¦Œ¥ˆŠ¡„†Ÿ‚„ ‚ƒ¥ŠŠ«••­——§ŽŸ‚„˜z}›€†¥’§’–¨“—©–œŸ†‹€X^m>Ei9@i9?g7>g7>i9@i:Ai9@h8>h8?h8?i9?h8?g7>g7>h8?h8?g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>g7>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>l<Bn?FsGLyQT‚\_ln ‡‰«šœ®ž¡¯Ÿ¢°¢¥®Ÿ§‘’¦­œž´§ªµ¬®·®°·®°º³´¼µ¶¼µ¶¿½¾ÀÅÈÂÈÌÇÊÍÇÉËËÌÍÊÈÆÈÁ¿É¿¼Ê¿ÌÉÆÐÐÍÕÕÒØÙ×ÜÚ×ÞÛ×ßÜØßÜØÝÝ×ÜÙÕÖÑÎÎþŷ³»®«°Ÿž›‰Š‡ruyhmnbgg^fa\cXWaQV_NU]KU^KW_GS^DS]CR\CR\CQZCQZDR[CQZCQZDR[CQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCQZEPZEOXGNXJJUMIQQFOUBKZAI^>Ga<Cd;Ad9?g8?h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>i9?k<CnCIrLRxU[bi…ox‰yƒ‘†–’ Ÿ«¨«¸ª²¿«´Ã­´À¬±½­°º¬°¸¬¯¶«¯·©®·«¯·ª®¶ª¬²ª¨¬©£¦¨¢¤©£¥¬§ª¬§ª®©¬°¬²²°´´´º¶¹À¶ºÂ¶ºÂ´ºÁµ¹Á´¸À´¹Â¶¼Ã¶½Ç¶½Ç¶¼Ã¹¿Æ»ÁÈ»ÀɼÂÈÀÄÊÈÊÍÍÎÏÑÒÓÓÕÔÓÕÔÒÓÔÍÏÑËÍÏÉÈÊÅÅÈÅÅÈÃÅËÂÁÉ¿»Á»²´¸®¯·®­»³³Á¼¿Å¿ÁÈÂÄÎÍÌÏÌÌÊÄÃú¹Ä»ºÈ¾¿ÊÄÃËÉÊÉÊËËÌÍÊÊÍÇÆÈÃÀÃÄ¿ÂÆÄÈÆÆÉÇÈÉÆÈËÅÄÉÄÁÄÄÁÁÊÄÃÌÊËÍÌËÍÍÐÆÅǽººº··»º¼¹½Ã¶¼ÂºÀÇ»ÁǾÄÈÂÆÌÇÉÌÉËÎÎÏÐÐÐÐÖÕÔÛÙÖÛØÔÛÛÕÝÚÖàÜÖàÜÖÞÛ×ÜÚÔÙ×ÑÔÎÈ×ÑËÞÛ×àÜÖàÜÖßÜØÜÙÕÕÏÉÏÈÀÑÉÃÌÁ¾À²®´¡žª“‘œ‚ƒnp~VYpDIk<Ci9?h8>h8>h8>i9?k;Ak;Aj:@i:Ak<Cm@DsGL„^aŽmoœ~­——±œœ°±žž´¢£´¡¡³  ² ¡²ŸŸ°››¯™™­••®˜˜³žµ £²ŸŸ² °Ÿ¡¶©¬º¯²º°´¸­°·­±±£©™}‚Z^uLRsGLl=Dm@DxOT‚\_wNSn?Fm=CoBFsGLrCJk>Bk;Aj;Bj:@h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>l<Bm>Em>EoBFn?Fn?FuINƒ]`–x{©”—® £²¥©³ª¬¶¬°´ª®±¤§²¤¦´«­¹±´ºµ¸º·º»¸¸¼¼¿¾¾Á¿¿ÂÀÂÅÀÆÊÄÊÎÈÍÐÊÐÑÍÒÒÎÎÎÊÇÄÉÂÀËÄ¿ËÅÁÎÊÄÒÏËÔÒÏ×ÔÐÛ×ÑÞÚÔßÜØÞÜÖÝÚÖÙÕÏÓËÅËÀ½Ç¼·Á¹¶µ«©œ‘‘Š‚€x{xtznntcfm[`iW^fT_fP\dLZcIXbFU_FU_FT]GU^FT]ES\FT]GU^ES\DR[CQZCQZCQZCQZCQZCQZCQZCQZCQZCQZCOZEOXFNYILVLIROGRSENXCJ[?G_>Db<Bd;Ag8?g8?h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>k;Am>EqFLtPU{[b€en…qyŒ~‡“Š“š•Ÿ££®ª®¹­µÂ¬´Á¬±À¬³¿­´À¬³¿ª²¿©²¾ª±»ª±¹«¯·ª­´«©¯ª¤§ª¢¥ª¤¦ª¤¦¬¦¨­§©°«¯²®´´²¶µ´¹¶µ½¶¸Á´¸ÀµºÃµ¼Æ·¾Æ¸¿É¹ÀÊ»ÀɼÁʽÂË¿ÅÌÂÆÌÆÉÍÍÎÏÑÑÑÑÓÒÏÔÑÑÓÒÑÒÓÎÐÒÌËÍÊËÌÉÊËÈÉÊÆÅÊÃÂÊÀ¾Ä¾¹½¾¸º½µµ¼µ³¿¹¸ÆÁÄÏÎÍÕÔÓ×ÕÓÐÎÌÊÁÀƽ¼È¾¼ÉÀ¿ÉÆÆÊÈÉÊËÌÊËÌÇÈÉÄÁÄÄÁÄÇÅÉÇÇÊÈÉÊÉËÎÈÊÍÉÉÌÈÆÇÉÄÄÐÍÍÑÑÑÏÐÑÊËÌÁÀ¾½¿½¿Â¹¼À·½Ã·½Ã»¿Å¾ÄÊÄÉÌËÍÐÏÑÓÕÕÕÖÕÔØÖÔÚØÕÚ×ÓÙÙÓÜÜÖàÜÖáÝ×àÝÙÝÝ×ÜÚÔØÔÎÜØÒàÜÖàÜÖàÜÖàÜÖÞÛ×ØÔÎÐÊÃÌľŷ³¹¨¦®˜—¢‰ˆ—yzil‚Z]~TW{QTo?Eh8>h8>j:@qBIxOTyORwLR|RU‚\_Œhk–xx©‘‘¶¤¥Ä··Ê½½ËÀÀȾ¼É¿½È¿¾È½ºÄ··ÄµµÄ¶¸Àµµ½®®·¦¥·¥¦º©¨¸¨¨¹©©»®®½°³¾¶¹¿¹¼¾¸»»µ¸½¸¼º±¶¯¡§¢Œ”w{†aeyPUƒ^bš…‰¢‘–˜~‚Y\wLR„_c’v{Œkp}U[zRX~TWsGLk;Ah8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>i9?h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>j:@{QTlo‡bf‡ch€Z]uINUXnp¡‹‹­ °£§´©¬´«­µ­°¶®±¶®±¶®±¹±´ºµ¸º¹»º¼¿½¿Â¿ÁÄ¿ÃÉÂÆÌÃÆÊÂÉËÇÎÐÉÐÒËÒÔÎÓÓÎÎÎÌÉÆÌÅÃÎÄÁÍÃÀÍÆÁÏÉÃÐÊÄÐÊÃÒÌÅÙÓÍÝÚÖßÜØÞÜÖÝÙÓØÔÎÕÐÍÓÎËÐÍÉÉÇļ¹¶°««ª§§¢¡£‘“•|„krwblr\gnYdkS_gP^gKYbKYbKYbKW_HV_GU^HV_JV^GU^DR[ES\CQZCQZCQZCQZCQZCQZCQZCQZCQZCQZDPXEOXGNXJJUMIQQFOUDLZAI]?E`=Cc;Ad9?g8?i9?h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>l<BnBGsJPuTZ}]f‚ir†s|ˆ–Ž™ š£¦¦¯ª¯»­´À®µÁ¬´Á®µÁ­µÂ¬´Áª±»©°º©±¼«²¾«¯º«­³«©­ª¤§ª¢¥© ¢ª¡£ª¡£¬£¥¯¥©°¨«°ª­²®´²²¸³µ»´·¾³ºÂµ¼Æ·¾Æ¹ÀʼÁʽÂ˾ÁÈÀÆÌÃÉÍÉÌÏÐÑÒÓÓÓÑÓÒÎÑÑÍÐÐÌÎÐËÐÐÎÏÐÎÏÐÎÏÐÌÌÏÉÉÌÅÅËÁÀÅÀ¿ÄÂÀÄ¿ÂÁº»Ã»»ËÆÉ×ÕÓÛÙÖÚØÕÔÒÐÏÊÊËÂÁÊÁÀÉÀ¿ÊÄÃÊÄÃÉÈÇÉÈÊÈÉÊÇÂÆÄ¿ÂÅÂÅÆÄÅÆÈÊÊËÌËËÎËËÎÊÉËÊÅÅÎÍÌÒÒÒÏÐÑÊÌÎÆÈÊÃÆÊÀÆʼ¿Æ¹½Ã¹½Ã»ÀÿÅËÃÆÍÌÎÐÑÓÒ×××ÙÙÖÙÙÖÜÚ×ÚÛÖÛÜ×ÝÝ×ßÝÚáÞÚàÝÙßÜØßÜØÝÝ×àÝÙáÝ×áÝ×áÝ×áÝ×ÞÛ×ÚÖÐÍÅ¿Ç»µ¾¯ª´¡žª‘¡„„”tw‰df…`d‘os‹gjsGLk;Al<BrEI„^aps–xy–x{™}¥±Ÿ ½®®ÊÀ¾ÐÍÍÒÐÎÔÏÌÑÎËÑÏÍÓÑÏÐÎÌÎËÈÌÉÉÌÇÇÎÉÉÍÈÈËÃÃÊ¿¿É¾¾ÌÁÁɾ¾Ä¹¹Å¼¾Á¸ºÁ»¾Á¼ÀÀ½À¾¹½Â¿ÂÁ½Ã¹³¹µª­®™œ£‹‹£‡‹©™œ«£©ª¨®¨ž¢œ‡‹‘tx¡•¥Ÿ¨ —Ÿ™‡‹—‚†•|„_cqEJk<Ck;Ai9?h8>h8>h8>h8>j:@l<Bk;Ah8>h8>h8>h8>h8>h8>h8>j:@k;Ai9?h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>h8>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=l;@UXª—­Ÿ¥ªœŸ Šps“svœƒ…©–™¯¡£±§¨³ª¬´¬¬¶®±µ°³·³¹¹µ»º·º¹·»ºº½½¿Â½ÁǾÄÊÂÈÌÃÊÏÈÍÐÈÎÒÊÑÓÍÓÔÌÓÒÏÐÑÏÎÍÏÌÉÏÌÉÐËÈÏÈÃÑÊÈÒÍÊÐËÈÐÊÄÎÇ¿ÒËÃÚÔÎÞÚÔßÜØÝÛÕÞÛ×ÝÚÖÛÙÖÚØÕÕÖÑÒÑÐÌÍËÈÊÉÂÅÅ·¼¼¡§¨†Œt|‚jtz`krZelUaiN\eN\eNZbMYaLX`KW_IU]HV_FT]ES\HV_HV_FT]FT]DR[CQZCQZCQZCQZCQZCQZCOZDOYFNYHLTKJTNHQRFNWCKZAG^>Da<Cd;@f:?g8?i9?i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=k:?m?BpDItKPxU[}`g‚jsŠu‘ƒš’£ž¨§©²«°¼­´À­´À®³Â­µÂ­µÂ«´À«³¾­´À«³À«²¾«®µ«­³¬©¬«¦©© ¢ª ¡¬ž «Ÿ¬ž ¬ž «  ¯¥©¯¬¬±¯³²²¸°µ¾³ºÂ³»Á·½Ä¹ÀʼÁʾÁÈÀÄÊÇÊÍËÍÏÐÑÒÒÓÔÒÓÔÎÑÑÌÏÏÌÍÎÌÍÎÏÐÑÏÐÑÎÎÑÎÏÐÌËÍÇÉÌÄÆÌÃÅËÄÄÊÄÄÇÃÂÄÇÅÆÐÍÍÚØÖÝÛØÙÚÕÖ×ÒÔÕÓÑÎÎËÄÂËÁ¿È¿¾ÈÀÀÈÀÀÇÅÃÈÅÅÆÀÂÃÀÀÃÀÀÄÁÄÅÆÇÅÈËËÌÍÌÍÎËÌÍÈÈÈÌÉÉÌÍÎÊËÌÇÈÉÃÈÈÄÉÉÂÇÊ¿ÃÉ»ÁǺÁüÂÆ¿ÅÉÃÆÊÇÊÍÏÐÑÕÕÕÖ×ÕÖ×ÕÚÚ×ÛÜÚÖØ×ÑÔÔÔ×ÔÖ×ÕÕÖÔÒÔÓÑÖÓÜÝØààÚáÝ×áÝ×âÞØáÝ×ßÛÕØÒÎʾ¸¼®ª¶¤¢´ž«‘€€”ttmnnpŸ‚„˜x{}SVvJOƒ[^•tv¯–•¾¬ªÃ´²»ª©¹ªª³¨«º±³ËÆÉÕÕÕÖ×ÕØÖÓÖÖÐ×ÕÒÔÔÑÒÓÑÏÏÌÐÏÎÐÏÎÌËÊÎËËÐÎÌÌËÊËÉÇÅÄÆËÈÈÏÊÊÎËËÍÊÊÊÂÂËÃÃËÉÊÈÅÈÈÅÈÈÆÊÊÉËÇÅÉÇÁÃÅÀÃýÀ¿¹»¹²³±«­¬¬¯©¨­¦¤ª®©­³±µ±°µ¨¨® œ¤•›š‘qt[^WZvKQoADk:?j9>i8=i8=n>D}QTsFJpBEm=Ci8=i8=j9>k:?k:?k:?m<Am<Aj9>j9>j9>i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=i8=j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>l;@yOR“uu·²¶½¼Ä´°¶¨—™¢ŒŒ§””­Ÿ¡±¤§²¨©²ªª³««µ¯±¸µ¸¹¶¹¸¸¾ººÀ»½Àº¾Ä¼ÀƼÄÊ¿ÇÍÅËÏÉÎÑËÑÒÍÒÕÎÓÓÍÓÑÐÓÓÏÑÐÒÒÒÑÐÏÓÑÎÔÑÍÔÐÊÕÒÏÖÓÐÔÑÍÓÏÉÐÊÃÐÈ¿ÓÍÆÚ×ÐÞÛ×ßÜØßÜØßÜØÞÜÙÜÜÖÛÛÕÚÛÙÕÖÔÏÐÎÅÊÇ¿Å󸸢§§‘˜š|ƒˆgrw]hoVbjS_gQ]eQ^dP\dP\dQ]eO[cLX`KW_IW`JXaMYaMYaKW_GU^ES\DR[CQZDR[CQZCQZCOZDPXEOXGNXILSLIRPGOTDMZBK]@G`=Cd<Be:@g:>i9?j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j<?nAErFKuORyY_~bj…oxŒ{„•†’›“ž¤ «§ª¶ª±»«³À«´ÀªµÁ­µÀ­´¾®µ¿¯¶Â®³Â¬³¿ª±»«®µ¬¬²¬ª®«¦©ª ¡ªª››©šš§——ª››«  ®§¨¯¬¯¯¯²¯³¹°·¿¯·Â³ºÄµ¼Äº¿È¾ÁÈÃÆÊÆÉÌËÍÏÍÎÏÏÏÒÏÐÑÌÏÏËÎÎÌÎÐÌÎÐÍÎÏÍÎÏËÌÍÍÍÐÍÎÏËËÎÇÉÌÂÆÌÄÆÉÄÆÉÅÅÈÊÉËÔÓÒÚØÖÙÚÕØÙÔÕÖÔÖÖÓÑÐÏÌÉÆÊÁÀÉÀ¿ËÄÂÇ¿¿ÈÂÁÅ¿¾Ã¼ºÃ¾¾Á¾¾ÂÀÁÀÁÂÂÇÊÉÊËËÌÍËÌÍÊËÌÈÉÊÄÄÄÁÀÂÀ¿ÁÀÁÂÀÅÅ¿ÄÄÂÅÉ¿Å˼ÂƽÂÅ»ÁžÁÅÂÇÊÈÊÌÍÏÑÒÔÓÔÖÕÖØ×ÑÔÔ¿ÆȼÃÈÂÈɾÅǵ¼Á³º¿ÂÈÉÖØÔÞßÚáßÜááÛãáÛâÞØÜÖÐÓÌÇÅ·³¸¦¢µŸž¯˜–¥‹‰€¢‡‡§‘‘¦®™œ¨‘–xx™{{°š™Ê¹·ÔÊÇÙÒÍÖÏÊÎþù·»³¶Ä¿ÃÔÓÕÙÚØÛÜ×ÙÙÓÛÛÕ××ÑÕÕÒÐÑÏÎÏÍÏÐÎÑÑÑÍÍÍÍÌËÐÏÎÍÌËÆÅÄÀÁÂÆÅÄÈÈËÈÉÊÊËÌËÊÉÏÍËÒÑÐÓÑÒÓÓÓÔÔÔÔÔÔÒÒÒÎÎÎÉÈÊÊÉËÇÅƾ¼½´´·­°´«­³ª¬²·¹¼¼¼¿²´·¨ª°žž§šš£š”š™‡‹–„ˆ–…ŠquzPSn@Ci;>j9>k:?n@C~UW[^„_awNPqDHsEHwJNxLQrEIm?BoADoADm?Bk=@l;@k:?j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>j9>k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k:?n@CvIM”vw¼»À¾ÁÈ°¨«¨–—«™š® ¢¯¢¥²§§±©©³¬­¶±´¹·¾¹·»º¹¾¹»ÁºÀƼÂƼÄʾÈËÃÊÏÉÎÑÌÑÑÎÓÓÐÒÔÑÔÔÏÒÒÎÑÑÒÔÓÔÕÓÖÖÓØÖÓØÕÑÙÖÒÙ×ÔÙ×ÕØÖÓÖÓÏÕÑËÓÌÇÒÌÅÕÏÉÙÓÍÛ×ÑÚÚÔÚÚÔÛÛÕÛÜ×ÛÜ×ÙÚØÑÒÐÄƽ¿¹¼¹²µµ«±¯Ÿ¤¤ˆ‘rz€gqw_jq[fmXdlVahVbjWbiZelYdkWbiQ]eP\dQ]eP\dS_gQ^dP\dMYaLX`IW`HV_DR[CQZCQZCOZDPXEOXGLUJJSMIQQFOUDL[BH^@Fa=Be<Bh;?h:=j9>k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l:=m;>k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l<?oADsILuPT{[aemˆr{|…•‰‘›•ž¡ ª¥©´¨±½©²¾©²¾­µÀ¬´¿­µÂ­µÂ­´Ãª²¿ª±»«­³­«²¬«°¬§ª«¢¤ªœžª››¦––¦”•¨˜˜«œœ«¡¢®§¨®¬°®±µ¬´½¬·Á±¹Âµ¼Ä¸¾Å½ÁÉ¿ÅËÂÆÌÇÉÌÊËÌËËÎËÌÍÉËÍÊÌÎÈËÎÇÊÍÉËÎÉÊËÇÉÌËÌÍÌÌÏÌÍÎÇÉÌÃÆÊÇÉÌÇÉÌÄÇÊÌÍÎÔÓÒØØÕÖ×ÒÔÕÓÒÓÑÑÐÏÑÐÏÏÎÍÍÆÄËÄÂËÅÄÉÂÀÈ¿¾Ä¼¹Á¹¶¿·´¾¸·¿½¾¿ÁÃÀÅÈÃÆÊÆÈËÈÉÊÇÉËÄÆÈÁÀ¿¾¼º¼»º¾¾ÁÀÁÂÂÄÆÂÅÈ¿ÅɽÂżÁļÁĽÂÅÀÅÈÄÉÌÊÏÒÏÔÔÓÖÖÏÔÔ¾Ä˵»Âµ¼Áµ¼Á«²·Ÿ§°¢ª°¹¿ÃÌÎÍÕ×ÓÚÛÖÜÝØßßÙàÞØÛÕÏÏſĵ°¸¥¢·¡ ³¬–•®››¹«­¿¶µÀ¶´¼±±º­­¸©©Å¸µÔÌÉÜØÒàÝÖáÛÕßÙÓÚÓÎÔÎÊÎËÈÔÏÏÚÙØßàÛßßÙÞÞØ×ØÓÖÖÓ××ÔÓÔÒÏÐÎÑÒÐÐÑÏÏÐÎÎÏÍÐÐÐÈÊÉ¿Áý¾¿ÃÄÅÈÈÈÈÈÈÈÇÆÉÈÇÌËÊÐÑÏÓÓÓÔÔÔÕÕÕÒÒÒÏÏÒÌËÍÊËÉÈÈÈÂÁý½À··½°³·«¯µ«®²¶¸¾¸¸¾¯¯µ £ªž¥œš¡™˜ ™—ž••ž–“œ—†‹„_czPSvJOvIMvJMxPS…ad‘uy’y{qr‘ss˜{}¥ŒŽ ƒ…†abxKO€VW€WYzNQsEHp?Dn=Bm<Am;>m;>l:=k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l:=l:=l:=l:=l:=l:=l:=l:=l:=l:=k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l<?xNQ©—˜½¼Á±¨ªª—š©—˜«››®ŸŸ® ¢°£¦´®±·´·¹·»¸º½·º¾¸¾Ä»ÂʼÆ̾ÈËÃËÎÇÍÎËÐÐÎÑÑÒÓÔÓÔÕÓÔÕÓÕÔÒÕÒÓÕÑÖÖÓÙ×ÔÛÙÖÚÚÔÛÙÖÙÙÓÛÙÖÙ×Ô×ÔÐ×ÕÒØÕÑ×ÓÍÕÏÉÏÉÂÏÉÂÐÌÆÓÐÌÖ×ÒÚÛÙÛÛØÕÖÔÊËÉÄÆÂÃÆÿÄÁ¹¾»°µ²¤ª¨•›œ†z†kv{hszbmt`krbmtblrbmtbmt`kr`kr\gnYdkYdk\gnZelYdkVahUaiR^fO[cIW`FT]CQZCQZCOWEOXGNVHLTLIRPHQSFMYCI^AH`?De<Ag;@h:=i9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l:=l:=j:=k9<k9<n<?o=@m;>k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<n=BpCGuKNvSY|\c‚gp‡ry}‡”‰’™”žŸ ¬¤©µ§¯º¬³¿¬´Á«³Àª²¿ª³Â©±Á©±¾ª¬µª¤ªª ¤¨ £ª ¤¨›ž§˜˜§˜˜§•–¦‘”¤’“§•–ª¬£¥®«®®®´«°¹«´À®·Ã³ºÂµ¼Äº¿È½ÁÉ»ÁÇÀÂÈÄÃÅÅÅÈÄÄÇÃÆÊÃÆÊÂÅÉÃÅÈÄÆÉÆÆÉÃÆÊÇÉÌÊÊÍÉËÎÆÉÌÅÈËÄÉÌÄÇËÈÊÌËÌÍÏÐÑÒÒÒÑÒÐÐÑÏÐÑÏÐÏÎÒÍÍÒÐÎÐÍÍÏÊÊÌÊÈÉÆÃÈÀÀÅ»¼¿¶µ½³±»²±¼¶µ¼º¸½¿Â½ÀĽÁǾÁžÀÿ¿Â¿½¾»¶¶»¶¶»»»¿ÁÿÄÄ¿ÂƽžÁÅÀÃÆÀÄÊÀÄÊÁÇËÂÈÌÉÎÑÑÖÙÒÕØÁÅ͸¾Åµ¼Á¹¿Ãµ¼Á­´¶ ¨®£«±µ»¿ÀÅÅÌÏÌÏÐÎÓÔÒØÙÔ××Ñ×ÔÍÑÊÂȹ´»©¥¼«©½¯®»°°À»¾ÇÄÄÐÎÌÓÐÍÎËÈÊÇÇÑÌÌ×ÕÓÞÛ×âßÛáßÙâßØáÞ×ÞÛÔÜØÒÛ×ÑÛÙÖßÝÚààÚàÞØÜÚÔØØÒØØÕ××ÔÕÕÒÏÐÎÑÑÎÎÏÍÊËÉÉÊÈÈÊÉ¿Äĺ¿¿º¼¾½¾¿ÀÁÂÂÂÂÀÁÂÄÄÄÉÈÇÍÌËÏÏÏÐÐÐÐÐÐÐÐÐÎÍÏÎÎÎËÌÊÈÈÅÂÁû»¾¶¸º®±µ¨¬²¨¬²®²¸®°¶¨«¯ž¡¨š¤™¥šž¦—œ¥”˜£––ŸšŽ“”{€–‚‡”|‚‘uy“~‚“‚‡”‡Ž–”›“–¦œ ²¬¯¿»ÁÿŸ­°œhi›{{œ||’qp‚Y[tGHrBErAFo>Co>Cm<Al:=l:=k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<l:=p@Cp@C‡bc¯¤§ªš£¡‹‹©”—­›œ¬±¤§µ¯²¶³¶·¶¸·¹¼¹¿Ã¼ÂÉ»ÃÉ¿ÆËÃÊÌÈÍÐÊÏÏÏÑÓÐÒÔÏÒÒÕÕÕÒÔÓÓÖÓÓ×ÑÓÕÑÖÖÓÚÚÔÛÛÕÛÛÕÛÛÕÚÚÔÚÚÔÚÚÔÙÖÒÙ×ÔØÖÓ×ÕÒÓÐÌÏÈÃËÄ¿ÊľÏÌÈÐÑÌÕÖÔÖÖÓÎÎËÊÌÈÌÎÊËÎËÊÏÌÇÌɼ¿´º¸«±¯Ÿ¤¤–˜ƒ‹Ž{‚‡s{mx}kv{lw|ozny~mx}kv{fqvdntdovcouams`kr_jq^jp]hoVbjM[dJXaFT]FT]EQYDPXEOXGLUJLRMIQQFOVEM[BH_?Ec>Bf<?h;?j:=j:=k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<p>ArDGtFIqCFo?Bn<?n<?q?Bm;>k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<m;>p?DrEItKQxU[~^gƒhq‡ryŽ}…•ˆ’™”žŸŸª¤¨³©®½«²Á©²Á§²¾§¯¼©°¼©¬¶§¡§£’”œ††Ÿ‰‰ ‹‹‡‡œ††¡‰‰¢ŒŒ¡‰‰ž††£§•–ªŸŸ«£¦¬ª®ª¬²«¯º¬´¿¯¶¾±¹Â¶½Ç·½Ä¹¿Æ¹¿Å¾½ÂÀ¾Â½½Ã¾ÁžÁžÀü¾Á¿ÁÄÂÄÇÀÄÊÃÆÊÆÈËÆÈËÄÇËÂÆÌÃÆÊÃÆÊÃÅÈÇÈÉÇÇÊÉÉÉÌÌÌÍËÉÌÊÈÍËÉÐÍÊÒÏÏÒÏÏÐÎÌÍËÉÈÅÂÈ¿¾Æ¼½ÂººÀ¸¸»°°¶¬ª¶­¬·´´¶¸»¶ºÀ¶¹½¶µ·¹¶¶»¶¶ºµµ»¶¶½¼¾½ÀþÁÄ¿ÁĽÀľÁÅ¿ÄÇÀÄÊÀÆ̾ÈËÂÉËÍÒÕÑÖÙÈËϾÁȹ¿ÅºÀĽÂŹÀµ»¿­³·±¶¹¹¾Á¿ÁÃÄÆÅÊÊÊÐÐÍÑÒÍÔÒÌÔÑÊÓÍÉÑÇÁÍ¿»Ç¾½ËÅÄËÈÈÎÎÎÎÍÌÓÐÍ×ÕÓÖÔÒ×ÕÒÖÕÔÙÙÖÞßÚààÚáßÙâßÛàÞØÞÜÖÝÛÕÝÛÕÝÛÕÝÝ×ßßÙßÜØÝÛÕÛÛÕÙ×ÔÕÖÑÓÔÏÐÐÍÎÏÊÌÍÈÊÊÇÅÆĽ¿Á»¾Á¹»¾»½¿½¿Á¾À¿ÁÃÀÁÂÄÅÃÈÉÇËÌÊÎÏÍÐÐÍÑÑÎÏÐÎÎÎÎÊÊÊÆÆÆÁÂú»¼°µµ«°³¥«²£©¯¤ª°¥«±£¦­šž¦–œ£–§š¡©˜¦”™¢—— žœ£¥ §¢Ÿ¨Ÿ£š–œ—•›••ž“•ž“– œŸ¦£©¯¬±ºÇÊÎÍÐÔĿò ¡©³œ²Ÿœ­”‘—vu‰`b‰ad‡_bwJNrDGqADq?Bo?Bn>Am;>l:=k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<k9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<l;=p@Cm<>sFGŒkm¨šž††Ÿ„„£‹‹©––¬œŸ²©«´®°¶µ·¸¸¾¶¹½¹¿Å¼ÄʾÆÌÂÉËÅÌÎÉÎÎÌÎÐÏÑÓÑÒÓÑÔÔÓÕÔÒÕÒÒÔÐÑÓÏÔÖÒØÙÔÚÛÖÚÚÔÛÙÖÜÚÔÜÜÖÜÜÖÛÙÖÚÚÔ×ØÓÕÒÎÓÏÉÐËÈÌÅÀÊľÉÄÁÉÅ¿ÉÉÃÊÊÄÊËÆÉÊÅÊÌÈÎÏÍÑÒÐÒÓÑÑÔÑÊÏÌ¿Åú¿¼®³°¢¨¦Ÿ¦¥›¡¢‹’”~…‡{‚‡~…Š}„‰v€ƒp{€s}€x‚…t~px~lw|ityfqvdpvdntdnt^ipWbiNZbLX`O]fMYaFRZEOXGNVIMUKJTPHQTFL[CI^AEb>Ae<Ah;?j:=l:=k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<o>@tDGyLM}QRST|PQwJLuHItDGo?Bm;>k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<n=?oBCrFIuORxU[~^d„gkŠpt{€”‡Žš’›žª¤§´¥®½¦¯¾¦®»§¬¸©«´¨ ¦¢‘–xyŽjknmpplk‹fgpp˜{{—yz•ww›€€¤§——¬Ÿ¢«¨««©°¬°¸ª³¿¬³½¯¶Àµ¹Á´¹Â·½Ä·½ÃººÀ¼¼Â¹¼À¹¼Ãº¼¿ºº½ºº½¼¼¿½¿Â½ÁǾÂÈÂÅÉÃÆÊÃÆÊÀÄÊÀÄÊ¿ÂÆÀÀÃÃÀÀÃÀÀÅ¿ÁÈÀÀÇÁÀËÄÂÉÄÁÌÇÇÍÈÈÏÍËÏÍËÍËÉÉÆÃÇÀ¾Ç¿¿ÉÂÃÆÀ¾µ´¶¨§µ§¦¶­¬¶°²´±´²°±³­¬¶®®»´µ½ºº¼»º½¿Á½¿Á½ÀþÀ¼½¾¼¾Á½ÀļÁľÁÅ¿ÆÈÃÊÌÌÒÖÎÑÕÉËξÄÈ¿ÆÈÁÇÈ¿ÆȽÂÅ»¾Á¼¾ÁÀÁÂÄÅÆÆÆÆÄÇÇÉÉÉËÌÊÍÍÊÍÎÉÒÏËÓÎËÕÍÄÖÏÊÔÒÐÚÚ×ÜÚ×ÜÜÖÚÚÔÚ×Ó×ÕÒÕÕÒØÖÓÖÖÐØØÒÚÚÔÛÛÕÜÝØÞÞØÞÞØÝÝ×ÝÝ×ÝÛÕßßÙàÞØàÝÖßÝ×ßÝ×ÜÜÖÙÙÓØØÒ×ÕÒÖÔÑ×ÕÏÔÔÎÍËÈÄÅÿÁû½À¹¼¿¸»¾¼¾Àº½À½¿Á¾ÀÂÂÄÃÅÆÄÉÊÈÍÎÌÏÐÎÑÑÎÐÑÏÏÐÎÊÌËÅÆÇÅÅÅÀÁº»¼°²´§¬¯¢¨¯¡§®¢¨® ¤¬š §™¥“˜¡”™¢™Ÿ¦—¤”™¢–™ ¡£©¯±´³³¹°°¶§§­›£–›¤”›¥˜Ÿ©˜ «š¢«¤«³ÇÊÍÓÕ×ÊÌÏľÀ¾´²¾±®¾±®»©¥³™¶ Ÿ¾®®¹¦¦˜wv‰ccˆ_a†]_ST|OPsBDn>Ao>@o>@n<?l:=k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<k:<n:=n:=n:=n:=n:=n:=n:=n:=n:=n:=l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l;=m<>n<=tFIŽjmª ¤¦”•—yz—yy¦‘‘®£¦³°³´³µ¶¶¹·¹¼·¹¼»¾Å½ÄÉÀÇÌÅÊÍÅÌÎÉÎÎÌÎÐÍÐÐÑÒÓÒÔÓÑÒÐÑÒÐÒÓÑÕÖÑÖ×ÒÙÚÕÚÛÖÚÚÔÛÛÕÚÛÖÜÜÖÝÛØÛÛÕÚÚÔØØÒÕÒÎÓÎËÑÍÇÎÈÂÎÊÄÍÊÆÌÉÅÉÉÃÉÊÅËÌÇÍÎÉÐÑÌÐÑÏÕÕÒ×ÙÕ×ÙÕÒÕÒÌÐÊ¿ÄÀ¸»¸µº·µ»¹³¹·¨®¬–œ••”–‰’€ˆ‹}„†€ˆ‹Š‘“‰’…ŒŽ‰’”–‰’v€ƒhsxfqvams]hoXcjS_gT`hT`hO[cHT\GOXGLUJLRNIPRFNYDK]AFb@Dd>Ah;?j:=l:=l:;l:;l:;l:;l:;l:;l:;l:;l:;o>@rACo>@n=?o>@p?AuEH|OP‚VW†^^ŠddŒffŠdd†\]€TUxKLrBEn=?m;<l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l;=l;=l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;n=?qADsFHwMP}UX\^†dh‹np{€”‡Žš’›œ¦ £¯¥©´¨ª³§§°§¡§¢‘“uu†]_|OPST‚VWWX„Z[ŠefŽjk‹fghh–xx¡‹‹¦•”«Ÿª¥©«ª¯ª°·ª³¿­µÀ¯¶À²¶¾³ºÄµºÃ¶¼Â·¹¿¶¼Âµ»Á¶ºÀ¸¶º·´·¸µ¸º¹¾¹»¾»¾Â»¿Å½ÀǾÁȾÁȾÁŽÀļ¼¿¾»»¾¹¹¾¹¹Àº¹Ä»ºÄ¼¹Æ½¼Ç¾½ÉÂÀÌÄÁÌÈÂÍËÉÌÉÆËÈÅÈÃÀÉÂÀÊÁÃÇÀÁ¿µ³¸ª©¶§¥´§§³¨¥²§§¯¤¤°¡¡³¦¦¸®¯½ºº¾Àý½Àý¾¿º»¼¸·¶¶´µ·µ¶¹¶¶¼»½ÅÆÇËÍÏÆÊÐÈÊÍÆÈËÄÇÊÈËËÈËËÄÊËÃÈÈÈÉÊÉÊÈÊËÉÍÍÊÎÎËÏÏÌËËÈÊÊÇËËÈÏÏÉÕÒË×ÑËÙÒÊÝÙÓßÜØààÚáßÙààÚÞÜÖÜÙÕ××ÑÔÕÐÕÕÏÔÔÎÑÒÍÒÒÌ××ÑÚÚÔÜÜÖÜÝÕÝÝ×ÜÜÖÛÜÔßÝ×áßÙàÞÕàÞØÞÞØÞÞØßßÙáßÙàÞØáÞÚÞÜÖÜÚÔÑÑËÂÃÁ¿ÀÁº½Àº½À½¿Á¿Áý¿Á¿ÁþÃÃÄÆÈÄÆÅÌÌÌÊËÉËÌÊÍÎÌÎÎËÌÍËÉÊÈÄÆÅÁý¾¿¶·¸«®±¥ª­¢¨® ¤¬Ÿ£«Ÿ£«š §–œ£“™ •™¤˜ž¥™¥–š¢–™ › §©¬¶¸»¹¹¼¯±´ £ª˜¦š¡©›£¬¤¬˜Ÿ§›£¬°¶¼ËÎÑÏÑÔÈÇÉÈÃÃÇ¿¼Æ¼¹Ä·´À³­ÌÁ¾ØÓÓÖÐÏǶ´¾¬ª¾¬ª·¥£¦‹ˆŽhhxKL|OPƒYZˆ``STuEHq@Bn=?l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;m<>p?Ap@CuEHp?A€TU™€­«¯¬ª°¡‹Œ–yy¦““±©¬µ³·´³µ´´·¶¶¹¹¼À»ÁÈ»ÃÉÁÇËÆËÎÉÎÑÊÏÏÌÏÒÏÒÒÒÔÓÒÔÓÔÔÔÒÓÑÒÓÑÖ×ÒØÙÔÙÚÕÚÛÖÚÛÖÚÛÖÚÛÖÛÛÕÚÛÖÛÙÖ×ØÓ×ÕÒÕÒÎÒÎÈÏÌÈÍÍÇÍÎÉÎÎËÍÍÊÍÍÊÏÐËÏÐËÒÓÎÔÖÏ×ØÓÙÚÕÚÜØÙÚÕÔÖÒÐÔÎËÍÉÄÈÂÆÈÄÇÊÇÅÊǽ¿¯´±¢¨¦œ£¢”›š”–Œ“•’˜™˜žŸ™Ÿ ›¡¢¤ª¨­´³«²±—ž |ƒ…jtzcmsakq\gnWbiWbi\dmZbkO[cNV_HOYILSMIQQHOUEK]BHa@Ed>Ah<?j<?l;=l:;l:;l:;l:;l:;l:;l:;l:;o>@vEGvFItDGvFIwIIxJJ~RSƒYZŠ`aŒff‘ll“op“qr‘mnŠddƒYZ|OPxJJtCEn<=l:;l:;l:;l:;l:;l:;l:;l:;l:;o>@sCFuGGsCFo>@n<=n<=m;<l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;m;<m;<l:;l:;l:;n=?q@BsEHwJL{QR~VY…`bŠmoy•„Œ—Ž•ž–Ÿ¢¤¦ ¦§Ÿ¥£“–•zz‰aawJKp?Ap?AtDG€TUhi‘mnhiŒghnmš}} ŠŠ¦•”©žžª¤§««±¬°¸«³¾®¶¿°·¿±¸Â³ºÄ´»Å´»Å´¹Â³ºÄ´ºÁµ¸¿µ³¹´±´¶³¶¹¶¹º¹¾º¹¾¸ºÀ¹¼Àº½Ä»¾Å»»Á»»¾¸¸¸»¸¸¼··»¶¶½¸¸¿¸¶Ãº¹Äº¸Æ½¼Æ¾»È¿¾ÈÃÀÌÉÅÌÇÄÊÈÅÊÇÃÉÄÄȾ¿Á·µ¾³°¼±®¹«ª³¢¡®œš®œ§‘¨’’«––¯ž·°±½¿Â¾Áļ¿Âº¹»·²²²ªª±£¥´§§¸ª©½´³ÆÅÊÇÉÌÇÉÌÇÇÊÇÆÈËÌÍÎÏÍÎÏÍÐÑÏÏÐÎÏÐÎÑÒÍÖÖÐØØÒ××ÑÓÔÏÐÑÌÌÍÈËÌÇÔÑÍ×ÕÏÙ×ÎÜÚÔßÜØáßÙâàÚâàÚáÞÚÛÙÓØØÒÓÔÏÐÑÌÏÐËÐÑÌÍÎÉÎÎÈÓÓÍÙÖÒÙÙÓÙÚÕÛÛÕÛÛÕÛÛÕÞÜÖßÝ×àÞØàÞØßàØàáÙááÛááÛààÚààÚßßÙÛÛÕÐÐÍÃÄÂÁþÁÁ½ÂÂÄÅÆÃÄÅÀÁÂÀÃÃÄÆÅÂÇÄÇÉÈÄÆÅÃÄÅÄÆÅÉÊËÆÅÄÈÉÇÇÈÆÄÅýÀÀµºº°³¶ª¯¯§ª­¥ª­ ¦¬œ¢¨œ¢©˜ž¥”š¡’˜Ÿ•›¢˜ž¥˜ž¤˜›¢—š¡œ› Ÿ¢¦°²µµ·¹°²µ¤¨®œ¢©›¢ª›¥«›£¬˜ ©™¡¬£©°ÄÊËÏÑÓÉÉÉÈÅÂÊÄÀÊ¿ɿ¼È»µÎ¼ÙÖÓÜÚØÜ×ÔÛÖÓÛÕÔØÒÑɺ¸Ÿii¢‚‚²ššµžœ¥……klUVwGJm<>l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;l:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m;<sBD{MM|LO{NOuDF}PP‡Š¯¯µ¬²¸ª¢¨¦“–ªš±©¬³°°³²´´¶¹¶¹½·½Ã¼ÂɾÅÊÂÈÌÇÊÍÉÏÐÌÑÑÎÐÒÎÐÒÏÒÒÒÓÑÓÓÓÒÓÑÔÓÒ××ÔÚØÕÙÙÓÙÚÕÚÛÖÚÛÖÚÛÖÙÚÕÙÚÕØØÕÕ×ÓÖÔÑÓÐÌÒÏËÒÐÍÏÐËÐÒÎÓÔÒÑÒÐÑÑÎÒÔÐÒÔÐ×ØÓÙÚÕÛÜ×ÜÝØÛÜ×ÛÜ×ÚÛÖÖØÒÕ×ÓÔÖÒÔÖÒÓÕÑÑÔÑÍÐÍÃÆø»¸®³°¦¬ªœ£¢šŸŸ ¦¤¦¬ª©¯­¬²°³¹·ºÀ¾¸¿¾¯¶µ–Ÿt|‚dotcms\gn\dm\fl^hnZelOZaMX_JR[OS[PPVSJRUGM[CI_ADd?Ag=@j<?l;=m;<m9<m9<m9<m9<m9<n:=m;<q?@wFHxJJyILyKK}PQRR…YZŠ`aŒddjj’mm’mm”pq“nnŽhhŠbb„Z[€STyKKrACn<=m;<m9<m9<m9<m9<m9<m9<n<=wFHRS‰_`†\]~QR|OP{NOwGJp?An<=m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<p>?q@Bn:=m9<m9<m9<n<=p>?rACuEHxKL~TU„_`‹jouy’}—‚†›‰ “¢‘“œƒ…‘ll€TUsBDn<=p>?xJMŽij™||›~~–xx™||œ‚€¡‰‰¥§——ªŸŸ«¥¨¬«°¬¯¶«°¹¬³½¯µ¼²¶¾²·À²¹Ã°¸Ã®¶Á¬µÁ¬µÁ¯´½²²¸²¯²¶±´·µ¹··º·µ¹¸¶º··½¸»Â¹½Ã¹¼À¹»¾¸¸»¹º»»»»½¼¾À¿ÁÃÀÀÆ¿Àƾ¾Å¿¾ÇÀ¾ÉÂÀÊÄÃÌÊÇÌÊÈÍËÉËÉÇÉÃÂÆ»»Ä¹¹Äº¸ÉÄÁÈ¿¾½²¯³¢¡¬——¨§¥‹‰¦ŽŽ±¤¤»º¼¾Àü¾Á¸¶·²ªª¯ŸŸ²¡ ¼®­Ãº¹ÆÁÄÉËÎÏÏÒÎÍÏÇÇÊÇÈÉÌÌÌÑÒÐ×ØÓØÙÔÖ×ÒÛÛÕÞÞØÞÞØÜÜÖÚÚÔ×ØÓÓÔÏÐÑÌÎÏÊÖÔÎÙÙÓÛÛÕßßÙàáÙáâÚââÙááØßÝ×ÙÙÓÒÒÌÑÒÍÏÐËÍÎÉÌÍÈÌÍÈÌÍÈÑÑËÔÒÌØØÒÙÙÓÙÙÓÙ×ÑÙÙÓÙÙÓÛÙÓÜÜÖßßÙààÚßßÙÞÞØØØÒØÙÔ×ØÓÕÖÑÏÏÌÆÅÄ¿ÄÁÃÄÂÄÇÇÃÅÄÃÅÄÀÃÃÀÁÂÀÁÂÆÇÅÈÊÉÇÉÈÃÅÄ¿ÁÃÀÃÃÃÅÄÂÃÁÂÃÁÂÃÁ¾ÁÁ·ºº³¸¸±¶¶¬±´ª°±©¬¯¤§ª £§œ ¦˜ž¤”š¡“™ •›¢—¤—£™Ÿ¥š¡›£œ¢¨¨­°²µ¸³µ¸ª®´Ÿ¤­¤¬›£©˜ ©˜ ©š¡©¦¬°ËÐÐÎÐÒÉÉÉÊÇÄËÈÅÍÊÇÌÇÄͽÍýÕÐÍÝÚÖßÜØßÜØßÜØÝÚ×ÕÎ̾®¨¼©¤Ë½¼ÐÉÇÍ¿¾¬¨°–’šxvSTsABm;<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<m9<n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<q?@yKKUV…[\…\[‚VW‡^]ƒ„­«¯¯µ¼¯³»®®´­¨¬°«®³²´³µ¸´ºÀ´ºÀ·º¾ºÁƽÅËÂÉËÅÌËÉÎÎÍÐÐÐÑÒÏÑÐÎÐÏÐÑÏÑÒÐÓÓÓÔÓÒØØÕÙ×Ô×ØÓØØÒ×ØÓÙÚÕØÚÓ×ØÓÖ×ÕÕÖÔÑÒÐÓÑÎÐÐÍÒÒÏÔÕÓÔÖÒÔ×ÔÕØÕÔ×ÔÒÕÒÔÖÒÕ×ÓÚÛÖÛÛØÜÝØÜÝØÝÞÙÜÝØÛÝÙÛÜ×ÛÜ×ÛÜ×ÜÝØÛÜ××ÙÕÖØÔÑÓÏÉËǾÁ¾·¼¹±´´¨®¬«±¯²·´µº·¶»¸ºÀ¾¿ÅÃÃÈĽÃÁ¬²°Š‘“mx}dnt_jq`kr\gn[clYdkLX`IT[PZ`TZaVU]XRXXJPZEI^BFc?Bg=@i<=k;>m;<m;<n<=m;<m;<o=>p>?q?@sABwGGxJJ|NL|OO‚UUƒYZ‡^]‹ccgeigjhig’ljkligŽijŒfdˆ_^TTxJJwGGtDGq?@m;<m;<m;<m;<m;<o=>xJJWX‹cckl’mm”pq“op‹cc~PNvFIsBDq?@o=>m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<n<=o=>rACr@Am;<m;<m;<m;<m;<m;<p>?sBDwII}QRƒ]]ˆde‹jllnŽpp“xx•wwno…]]{MMq@Bp>?xJJ‹ecœ‚ƒ¤¥£‹‹¤Ž¥¥“‘¨˜˜ª«¢¤¬§«­«±¬ª°«­³®­µ¯¯µ¯±´¯³»­´¾«³¾¨³¿§²¼¨°»ª¯¸­°´°¯´³³¶µµ¸µ´¹´´··¸¹¶ºÀ¶¼Â¶¼Â¸¾Äº¾Ä¹¿Å¼¿Ã¾ÁÄÄÆÈÉÊËÊËÌËÊÌÉÈÊÇÅÆÆÅÄÉÄÄÊÉÈÍÎÌÎÏÍÏÏÏËÈÅÇ¿¼Äº¸Ä¼¹ÌÊÈÒÒÏÒÒÏÌÇǾµ´´£¢±žž°žœ­—–¦ŽŽ°  º··¼¼¿¼¼¿¹¶¶µ°°»¸¸Ä¿¿ÈÃÃÈÅÅÈÉÊÉËÎÌÍÎÇÈÉÆÅÇËËËÏÐÎÖ×ÒßÜØßÝÚÝÝ×ßßÙÞÞØÚÚÔØØÒÙÙÓÖ×ÒÑÒÍÑÒÍÐÑÌÕÕÏÙÙÐÞÞØàáÙáâÚàáÙàáÙààÚÝÝ×ØØÒÐÐÊÍÎÉÎÏÊÍÏËÌÍËÍÎÌÍÎÉÎÎÈÑÏÉÕÓÍÖÖÐÔÔÎÔÕÍÓÔÏ×ÕÏØÖÐÚÚÔÛÛÕÜÚÔÙ×ÑÔÔÎÏÐËÎÏÊËÌÊÆÈÄ¿ÄÁÀÃÀ¾ÁÁÀÃÃÆÆÆÁÃÂÀÃü¿¿¾¿À¾À¿ÆÅÄÆÈÇÂÅÅÀÃüÁÁ»½¿¼½¾»»¾»»¾¹»º·ºº´¹¹³¶¶²µµ­²²¬±±«°°¨­­¤§ª¥§©¡¤¨™Ÿ¥—¤˜ž¤˜ž¥›¡§£©Ÿ£©¡£¦¤§ª¨¯±²¸¹³¶¹¬°¶ ¦¬™¡§™¡§–ž§”œ¥™¡ª¯¶¸ÉÏÐÊÏÏÊÊÊÊÉÈÌËÊÑÐÏÒÏËÑÌÉÓÎËÕÑËÚØÒßÜØàÜÖàÜÖàÜÖÜÙÕ×ÒÏØÕÒÚØÖÛÙÖÖÑÎ˽¹À°ªµŸ›šxv‚VWwFHo=>m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<m;<p;=p;=p;=p;=p;=p;=p;=p;=p;=p;=n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;r>?wGG}OM…[\geig’pn™|| ……¬Ÿ¢±µ½¯·À°·Á²¶¾±·½²¸¼³¹¿³·½´¶¹·º¾¼ÂƽÄÉÂÈÉÅÌËÉÌÌËÎÎÎÐÏÏÐÎÏÐÎÐÏÎÒÑÐÔÕÓÖÕÔØØÕ××ÔÕÕÒÖ×ÒÕ×Ó×ØÓÖØÑÕÖÑÓÔÒÒÓÑÑÒÐÐÐÍÐÏÎÓÔÒÕ×ÓÕØÕÔÙÖÖÙÖÖÙÖÓ×ÑÔÖÒ×ÙÕÚÛÙÛÝÖÝÞÙÝÞÙÝÞÙÝÞÙÛÝÙÛÜÚÜÞ×ÝÞÙÝÞÙÝÞÙÚÛÖÚÛÖ×ÙÕÒÔÐÌÎÊÈÉǿ·¼¹³¸µ·¼¹½Â¿¾Ã¿¾Á¾ÃÇÁËÎËÆËȸ½º §¦ƒ‹Žpx~dpv_jqZelXcjXcjP\dJV^QYbV\bZZ`YU[^RWaOSdHLgCFh?Ai<=l;=o=>r>?r>?o;<o;<q=>p<=tBCtDDxHH{KK~PN€RP‚UU„XY‰`_ŒcbŒddŠa`‹ba‹baŒddŒcbfcgg‘jgŽff‹ba‰`_‰`_…YZ|LLvDEp<=n:;n:;n:;p<={KKˆ_^ee‘nk˜wvœ||Ÿ™xwŽhf‰_`ˆ_^†YYxJJq?@n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;o;<o;<sABr>?p>?o;<n:;n:;n:;n:;n:;p<=tBCxHH|NL~RS€TU‚XY‚XVXWƒWXSQxHHsCCsABuEE„ZX™~~¦““ª››ª™˜©˜—¨˜˜©™™ª››ª¡£¬¥¦­ª­­­³­­³¬ª°¬ª°­«±°­°­¯²®²¸®²½ª±»©±º§²¼©°º©®·«±¸¯²¶²µ¹³¶º³µ¸´¸¾µ¸¼µ¹¿¶¼Ã¶¼Ãº¾Æ½ÁÉ¿ÂÉÃÆÊÆÉÌÊÌÎÐÐÐÓÓÓÒÔÓÒÒÒÍÎÏÌÍÎËËËÌÌÌËÍÌÍÎÌÍÎÌËÉÇÈ¿¾ÈÂÁÌÊÈÒÒÏÕÖÑÔÕÐÑÐÏƽ¼² ž¬•“®˜—®œš¬—”°¡Ÿ¶­¬¹³µ»º¼¹·¸º¹¸ÃÄÅÉÌÌËÌÊÊËÉÉÈÇÄÆÉÃÅÈÄÅÆÇÈÉÐÏÎ×ÕÒÙÙÓßßÙààÚààÚÝÞÙØÚÓÕÖÑÔÖÒÖ×ÒÔÕÐÒÒÌÐÑÌÒÓÎ××ÑÜÚÔáßÙââÜáâÚßàØÞß×ÚÛÖÙÙÓÔÕÐÎÏÊÎÏÊÐÑÌÎÏÊÌÍÈÍÎÉÎÎÈÌÍÈÎÎÈÐÐÊÑÒÍÒÓÎÑÒÊÒÒÉÔÒÌÕÓÍÖÖÐÖ×ÏÖÖÐÓÓÍÎÏÊÊËÆÉÊÈÄÇľÁÁ»¾¾¼¿¿¼¾À¿ÁþÀÂÂÃÁÁÂü½¾¼¼¼¾¿½ÀÃÀÃľÁÁ½ÀÀ»½¿¾ÀÂÀÁ¿ÀÁ¼¼¿¶·¸³¶¶³¸¸³µ·²´¶±´´°µµ®³³«°°§®°«®±«®±¥¨¬Ÿ£©Ÿ£©ž¤ª¤«­©®±©¬¯¥¨«§¬¯­²µ¬²³§®°¦­¯ §¬”ž¤’š£’š£–ž§¡«®»ÀÃÄÉÉÇÉËÉÊËÌÍÎÓÓÓ×ÖÕÚ×ÔÙÖÓØÖÓÖ×ÒØÖÐÞÛ×àÜÖàÜÖàÜÖßÜØßÜØàÜÖßÜØÞÛ×ØÔÎÏſ˼·É·³¿­©«‘jgxJJsABq?@p<=n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;tBCyIIƒWXjj•ts”rpš}}¨˜˜©—˜¬Ÿ¢¯µ»¯·À±¹Â³ºÂ³¹¿³º¿³º¿³¹¿´·»¶¹¼¹ÀŽÅÈÁÈÊÆËËÉÌÌËÌÍÏÏÏÎÏÍÎÏÍÐÏÎÒÓÑÔÓÒÖÖÓ××ÔÕÕÒÕÕÒÔÕÓÓÔÏÒÔÐÓÔÏÒÔÐÑÓÏÑÒÐÑÒÐÑÒÐÒÓÑÔÕÓÕ×ÓÕØÕÖØÔÕØÕÖÙÖ×ØÖ×ÙÕÙÛ×ÚÜØÛÜ×ÛÜ×ÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÛÜ×ÚÛÖ×ØÖÔÖÒÒÓÑÌÏÌÃÆûÀ½¼Á¾ÄÇÄÇÊÇÆÈÂÊÌÈÓÕÑÏÑÍÂÅ´º¸ž¥¤‚Šlw|`lr^ip[fmYdkT`hNZbNY`SZbZ\b\X^aW[cRWfNQhHKjEFl@Ap@CtDDvFFt@As?@r>?r>?r>?r>?vEDyII{KK|NL~PN€RPTT†Z[‰`_ˆ^\„WWƒVV…XX…[Y†\Zˆ_^Œeb“mk–qq•sq—us”rpjhŠa`…XXzJJvDEt@As?@tBCQOig”rp—vuž€¤‡‡§‹£ˆˆš{x™xuœ||šzzig|LLp<=n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;o;<p<=q=>q=>p<=n:;n:;n:;n:;n:;n:;p<=s?@sCCvFFvFFwGGtDDrBBuCDsABq=>r>?uEE}PPge ‡†©šš­Ÿ¡«žž«  «  ¬ž «¡¢¬¦¨¬ª®«®²­°·¬°¸¬¯¶¬®´­¯µ¯²¹¬²¸¯¶À±¶Â­²¾ª³¿¬µÁ«³¾©°º¬´¿²¸¿´ºÁ³¹¿³¹À²¸¾³¹½µ»Âµ»Â¶½Å¹¿Æ½ÁÉÂÅÉÇÉÌÊÌÎÌÎÍÑÑÑÔÖÒÖØÔÕÖÔÒÔÓËÎÎÈËËÉËÊÊËÌÉÉÉÉÆÃÉÃÂÈÃÀÌÌÉÑÑÎÓÔÒÕÕÒÓÓÐÎÌÊö³ª‘Ž˜wv›|y¢……§Ž¬™–°Ÿžµªªº··º¹»½¼¾ÃÆÉÊÏÏÍÍÍÌÊÇÆÅÄÂÂÈÃÄÅÈÈÈÒÒÏÜÙÕÞÜÖÝÝ×ààÚààÚÞÞØØØÒÔÖÏÓÔÏÔÔÎÓÔÏÕÖÑÔÕÐÔÕÐ××ÑÝÛÕáßÙâàÚââÜàáÙÞÞÕÚÛÓÖÖÐÒÓÎÏÐÎÏÏÉÏÐËÏÐËÏÐËÎÏÊÎÏÊÎÏÊÌÍÈËËÅÍÍÇÏÏÉÏÐËÏÐÈÐÐÊÐÑÌÐÑÌÑÑËÒÒÌÒÒÌÏÐËËÌÇÈÉÄÄÅÿÀÁº¿¿¸»»¸»»¼¾½¾¿À¾¿ÀÁÁÁÀÁ¿½¿¾¼¼¼¸º¹º¼»¾À¿¿ÀÁ½¾¿º¼¾¿ÁÃÃÅľ¾¾µ·¶²··¶¹¹µ¸¸´¶¸³¸¸²··®´µ«²´¯µ¶´º»·¼¿³¶¹¥ª­¡§«¦­¯¨®²«°³«°³ª¯²¤«­£©­¢©«£ª¬ §¬š¢¨‘›¡Œ—ž‘œ£«²´½ÂÅÃÈÈÃÄÅÄÄÄÆÅÄÌÍÎÕÖÔÛÛØÞÛ×ÞÛ×ÜÜÖÚÚÔÚÚÔÛÛÕÝÝ×àÜÖàÜÖàÜÖàÜÖàÜÖàÜÖßÛÕÙÕÏÑÉÀ˽¶Ê»³ÎÄÁʼ¸±˜•heQOyIIvFFr>?n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;n:;p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9r>?yHG…XX’mm˜xx™yy¢ˆ‰®¦©±®±°¯´±·¾°¸Á±¹Â±¹¿²·º´º¾´»À´¼Âµ¼Á¶½Â¹¿Å¼ÃÈ¿ÇÊÃÉÊÆÈÊÈÉÊËÍÌÍÏÎÎÏÍÐÐÐÐÑÏÒÒÒÕÕÒÕÕÒÖ×ÕÖ×ÒÔÕÐÑÓÏÏÑÍÐÑÏÐÒÎÏÒÏÏÑÐÏÑÐÑÓÒÓÕÔÕÖÔÓÕÑÕØÕÕØÕÕØÕÖØÔ×Ú×ØÚÖÚÜØÜÝØÛÜ×ÛÜ×ÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÚÛÖÚÛÖ×ÙÒÕ×ÓÓÕÑÎÐÌÇÉÅÆÈÄËÍÉÐÒÎÒÓÎÖ×ÒÚÛÖÖØÔÏÑÍÄÉű·µ–Ÿ|„‡kv{fpvcnu^ipWbiLX`Q\cT[cX[bXV\YPU^MRcIMdDGiCCnDEsFGuEEyIIvEDt@Aq=>p;:q=>p<=wEFyII{JI{IJ{JI{KK{KKQO„VT‚TR}NKzJJ}LK~PP‚TR‰_]if–qq›{{ŸŸ€}›|y•sq“pm‘nkfc‡][ˆ^\‡ZZƒWXˆ^\•roŸ€}¡ƒ‚¦‹ˆ©‘‘«”’©¦‹ˆ¥Š‡¡ƒ‚}}–qqƒVVr>?o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9p<=q=>q=>q=>p<=p;:o:9o:9o:9q=>xGF„WWnl ‡†¨˜˜¬¡¡«££­¤¦­¤¦­¤¦­¤¦­¨«­«¬¬®±«±¸¬±º¬±º®µ¿±¸Â¯·Â°¸Ã²ºÅ²¹Ã°·Á°¸Ã®¶Á­µÀ­´¾²¹Á»¿Ç½Áɹ¿Å¸¾Ä³¹À³º¿³º¿´»À³»Á¹¿Æ¼ÀÆ¿ÃÉÃÈËÉËÍËÌÍÍÎÏÐÑÏÓÔÒÖÖÖÓÕÔÎÐÒÉËÍÉÊËÆÆÆÄ¿¿À·¶Á¶³Æ¿½ÉÄÁÌÌÉÐÑÏÒÒÏÏÍËÄ·´³œš ~Žedfc”oo˜vt¡„„¨’‘®››²¥¥´©©¸°°ÄÄÄËÌÍÍÎÏÊÇÃÈÃÃÂÂÅÇÆÈÑÏÍÙ×ÔßÜØáßÙáßÙàÞØÞÞØÚÚÔÖ×ÒÔÕÐÐÑÌÒÓÎÓÔÏÓÔÏÓÓÐÓÔÏÖÔÑ××ÑÞÞØâßÛáßÙßÜÕÜÚÔ××ÑÔÔÎÐÑÌÏÐËÎÏÊÌÍÈÉËÇËÌÇÌÍÈËÌÇËÌÇÊÊÄÈÉÄÈÉÄÍÍÇÎÏÊÎÏÊÏÐËÏÏÉÍÎÉËÌÇÌÍÈÍÎÉÉËÇÈÉÄÄÆÂÀÃÀ¼¾½º¼»¸»»¸»»¹»º¹¼¼º½½¼½¾º½½º¼»¸¹º·¸¶¹º¸º¼»·ºº¶»»¶¸º¹»½º½½º¼»¸º¹´¶µ±¶¶µ¸¸µ·¹µ·¹±·¸±¶¶¯µ¶®±´¯µ¶²¸¹³¹º¯µ¶§¬¯¥«¯¨®²¦­¯¤ª®¤«­¤ª®¡§« §©Ÿ§ªž¥§š¡¦•£˜¡Œ˜ š¥¬¼ÂÆÂÆÌÀÅÅÂÂÂÄÄÄÅÆÇÌÌÌÖ×ÕÝÝ×àÜÖàÜÖßÜØÝÛÕÜÚ×ÙÙÓÛÛÕÞÛ×ÞÛ×ßÜØßÜØàÜÖàÜÖßÜØÛ×ÑÑÉÀ˽¶Ë½¶ÑÉÃÏÈÿ±­§Š‡‘jg„YV~OLwEFo;<o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9o:9p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<q=>vEDQOˆ_^‘omšzz¥¯ª­²¶¼±·¾®¶¿®¶¿®¶¿°¸¾³¹½´ºÁ³¹½´¼Âµ¿Å¸¿Ä¹¿Å¼ÃȽÅȾÅÇÃÆÉÆÉÉÈËËÊÌËÌÎÍËÐÍÐÑÏÒÓÑÒÓÎÓÔÒÕ×ÓÔÖÒÒÓÑÑÒÐÎÐÌÌÐÊÌÏÌÍÐÍÌÑÎÏÒÒÒÔÓÕÖÔÕ×ÓÓÖÓÔ×ÔÕØÕÔ×Ô×ÙÕ×ÙÕÚÚ×ÚÛÖÚÛÖÛÜ×ÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÛÜ×ÛÜ×ØÙÔ×ÙÒ×ØÓ×ÙÕÓÕÑÏÑÍÑÓÏÖ×ÒØÙÔÙÚÕÛÜ×ÜÝØÛÜ××ÙÕÐÒξÁÁ¦««–˜v€ƒkv{juzgqwXcjNZbR]dY_fW[aTRYSJRVFL^EJbBEfABnDEsEEtCByIIuABq=>o;<o;<o;<q=>uDCxHHyHGvDEuDCvEDxHHyII|KJyIIzIHxGFvFFyHG~NNˆ\]‘jg–sp~{¤‡‡¤‡‡ ~Ÿ~{|yœ}z›zw›{{œ~}™xw–sp•ro|y¦‹ˆª‘Ž¬“«”’«”’©‹§Œ‰¥Š‡™xu‘liŒcb|LLq=>o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<p<=sBA€RPmj¡‡…©˜—© Ÿ­¦§®©¬­§©®¨ª­¦§¬ª«­ª­«­°¬²¹«³¾®µ¿²ºÅµ¼Æ°¸Ã±¹Ä³»Æ´»Ã´»Ã³»Æ³ºÄ²¹Ã¶¼ÃºÀǾÄÊÂÆ̾ÄʽÁɸ¿Ç³»Áµ¼Ä´»Ã´»Ã¶½Å¸¿Ä¼ÂÈ¿ÅÉÄÇÊÈÉÊÉÊËÉÊËËÌÍÏÐÑÍÏÑÊÌÎÈÉÊÆÆÆľÀ¿µ³½®¬¹¨¦»­©Àµ²Æ¾»ËÄÂÊ¿ö³µžœ¢~”qn‹ba…XX„YV‡[\hh‘nk›}|£…„§¯œ™½³±ÈÁ¿ÉÆÃÇÄÁÀÀÃÃÂÄÌËÊÒÓÎÙ×ÑÝÛÕáÞ×àÞØÞÜÖÛÛÕÖÖÐÓÔÏÑÒÍÎÏÊÑÑÎÑÑÎÐÑÏÏÏÌÏÏÌÐÎÌÏÐËÖÖÓÝÝ×áÝ×ÜÚÔØÖÐÔÒÌÐÐÊÍÎÉÍÎÉËÌÇÇÈÃÄÆÀÆÇÂÇÈÃÇÈÃÈÈÅÆÅÄÄÆÂÃÆÃÈÉÄÌÍÈÍÎÉÍÎÉÍÎÉÌÍÈËÌÇÇÈÃÈÈÅÇÅÂÅÆÁÃÄÂÁÿÁÀ¼¾½º¼»º¼»»¾¾¼¿¿¾¿À½¾¿¹»½¸¹ºµ¸¸···¸¸¸·¹¸¶¸·µ·¹´¹¹µ»¼¸½½¸»»´¹¹³¶¶°µµ±´´°µµ°³¶±¶¹¯µ¶®³¶©°²¨¯±§®°ª¯²¨¯±¦­¯¤«­¥«¯¢¨¬¡§«¡§« §©¡§«¢©«£©­ ¦ª£ªš¡©•¦”Ÿ¦«³¹ÀÆÊÂÇʾÁÄÁÂÃÄÆÈÈÉÊÍÍÍÖÖÓÝÛØßÝ×ßÝ×ßÝ×ßÝ×ÝÚÖÙ×ÑØØÒØØÒÙÓÍÛ×ÑßÛÕßÝ×ßÝ×ßÜØÜØÒÑÉÀ̽µÌ¾·Ïſʾ¶¼¬¦¯–“ ~z‘heƒUSvEDp<=o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<o;<r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:r>?wCDyHG‚TR‹ba˜xxªš¯­±°·¿®¶¿®¶¿­µ¾­µ¾±·¾²¸¿²¸¿²·º³»¾¶¾Ä¹¿ÆºÀÄ»ÃÆ¿ÅɾÅÇ¿ÆÈÀÇÆÂÇÇÄÉÉÇÍËÊÏÌÎÑÎÏÒÏÏÓÍÑÕÏÑÔÑÑÓÒÎÐÏÎÑÎÎÑÎÌÏÌËÎËÊÐÎËÑÏÎÑÑÐÓÓÒÔÓÔ×ÔÔ×ÔÔ×ÔÕØÕÕØÕÖÙÖ×ÙÕÙÚÕÛÛÕÛÛÕÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÜÝØÜÝØÜÜÖÛÜ×ÚÛÖØÙÔ×ØÓÙÚÕÛÜ×ÜÝØÜÞ×ÜÝØÝÞÙÜÝØÛÜ×ÔÖÒÈÉǶ»¸Ÿ¦¥ƒ‹Žp{€ny~frxYdkQ]eP[bT[cRX_OOUOIOTFLZDGaCFhCEkABoA?sCCvDBr=<q<;r=<q<;p;:s?=vBCxDEwCDs?@wCDvDBt@At@AvDBvDBwCDxGFxGFzIH€QN†[Xif•ro |¨ŽŒª‘Ž¦‹ˆ£„¥†ƒ¥Š‡§Œ‰¨Ž¨Œ¦‰‰¥†ƒ¢…‚§Œ‰¬“¯™˜®—•¬“ª‘Ž¨Š©Ž‹§Œ‰œ{zŽedƒUSvEDp<=p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:vBC…XX“qo¢‹‰©š˜«¡¢­ªª­¬®®«®®©¬¯ª­¯¬¯¬«°¬®±¬³»±¸Â´»Å´¼Çµ½È±¹Ä±¹Äµ¼Äµ»Â´»Ãµ¼Ä¶½Å¶½Å»ÁȾÄÈÃÆÊÃÆÊ¿Å˼ÂÉ·¿Å´¼Å³»Á´ºÁ³ºÂ²ºÀ´»Ã¸¾ÅºÀƽÁÇ¿ÃÉÂÅÉÂÄÆÄÆÉÄÇÊÄÆÉÂÁÃÁ¾¾¾¸·»°­¸§¥´Ÿœ³ž›´›˜³™¸§¥»¬ª¹¨¦³œš§ˆ…šwtŒb`‚TRƒUS}LK|KJ‚TRSQ…[Yfc”nlœ{x¯•“Àµ²Å¿¾À¿Á¿¾ÀÄÂÃÍÌËÔÒÏÕÓÍØÖÐÝÛÕÝÛÕÚÚÔ××ÑÔÕÐÑÓÏÏÐÎÌÍËÉËÇËËËËÍÉÉËÇÈÊÆÉÊÈËËÈÏÏÌÕÕÏÚ×ÓÖÔÎÒÐÊÐÎËÍÍÊÊËÆÊËÆÆÇÂÀÃÀ¿Â¿ÂÃÁ¿ÂÂÁÁÁ¿ÁÃÀÃÃÃÅÄÃÆÃÄÇÄÉÊÈÌÍÈÌÍÈËÌÇÈÉÄÇÈÃÄÇÄÇÅÂÅÅÂÆÆÃÃÄÂÂÄÀ¿ÁÀ½¿¾¼¾½»¾¾º¿¿¾¿À½ÀÀ¼¾À¹»½µ¸¸¶¹¹·¹¸¶¸·¶¸·º»¼¹º»¹º»º¼¾¸½½·¹»²··¯µ¶®³³¬²³«°³§®°­²µ«²´«²´©°²¤«­£©­¡¨­£ª¬ §¬Ÿ¦«ž¥ªŸ¦¨Ÿ©¬¢©®¡©¬¢©«¤ª±£©­¡§«ž¤ªž¤«•¦˜£ª´»À¿ÅÉ¿ÅÉ¿ÂÆÃÃÆÄÆÉÉÊËÌÍËÔÕÓÜÚ×ßÜØàÜÖßÜÕßÝ×ßÜØÜÚÔÚÚÔÙÖÒÔÎÇÕÏÈÞÛÔßÝ×ßÝ×ÞÜÖÜØÒÓÌÄÎÀ¹ÏÁºÎľŷ°·¢œ¯˜“¤…‚“nk„YVvEDq<;p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:q<;q<;q<;q<;q<;q<;q<;q<;q<;q<;p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:q<;t@AwCDvED~OLŠ`^œ‚€¬¤§¯´·¬´º­µ¾®¶¿®¶¿­µ¾°³·±¯³³³¶µ»¿¶½Â´»À¸¿Ä¼ÂɼÞÅÇ¿ÆÈ¿ÆÈÀÈÈÃÉÊÆËËÇÍËÇÍËÈÍÊÌÏÏÌÑÎÏÒÏÐÓÐÐÒÑÌÏÏÊÏÌËÐÍÌÏÌÉÎËÊÍÍÌÏÏÍÐÐËÐÍÏÑÐÒÔÓÓÖÓÓØÔÓÖÓÔÙÕÓ×ÑÔÖÐØÙÔÚÜÕÚÜÕÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÜÝØÜÝØÜÝØÜÝØÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÖ×ÒÏÑÍÂů´±–œƒŠŒp{€dot\gnVahR]dJTZJPWKMSNIPTHMZEI_BFhDGkABoAAp?>r@>vBCsA?q=>r=<q<;p;:r=<q<;q<;q<;q<;r>?s>=p;:p;:q<;s?=xGF}LKƒTQ‡YWŠ]]’kh˜vt¤‡‡­—–­—–©¦‰†§‹¬•“®˜—°››­–”¬“­”‘¬•“¬“°š™¯›­–”¬“©‹¥Š‡¦‹ˆ©£…„ifSQwFEt@Ap;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:xDE†[X‘omœ„„£““©Ÿ ­§©¯¬¯°­°±¯³°®µ®°¶¬°¸¬²¸°¶½µ¼Æº¾É¶½Ç¶½Å¶½Çµ¼Ä¶½Åµ¼Ä¶½Å¶½Å´¼Â·¿Å¼ÂɾÄÈ¿Å˾ÄȼÂɸ¿Çµ¼Ä±¹Â±¸À°·¿­µÀ®¶¿®¶¿°¸¾°¸¾µ»Â¶½Â»¿Å»¾Â¼¿Ã¼¾Á½»¿»µ´¹«ª² ž²œ›­”‘«§Š‡¦‡„¥†ƒ§ˆ…§ˆ…¡{›yw”ol“mk‡][|HI{IGuCAuABwECuABvBC}NK†[X‡\Y™wuµ¨¨¾¼½¾½¿À¿ÁÈÅÅÌÌÉÒÐÍÓÐÌÖÓÏÚØÒÚØÒ×ÕÏÕÓÐÐÑÏÏÐÎËÍÌÈÊÉÄÆÈÄÆÅÃÈÄÆÉÆÆÈÄÄÅÃÆÆÆÈÊÆÌÌÉÎÏÊÏÍÊÌÍÈÌÍÈËÌÇËÉÆÇÇÄÄÅÿÁÀ¾¿À¿ÀÁ½ÀÀ»¾¾»½¿¼¾ÀÁÃÂÃÆÃÃÅÄÉÊÅÌÍÈÉËÄÇÉÂÆÇÂÄÆÂÅÆÄÃÄÂÃÄÂÄÅÃÅÅÂÂÃÁ¿ÁÀ½¿¾»½¼¹¼¼º¼¾»½¼»¾¾¹¾¾µººµºº·ºº¸¹º¶¹¹¶¹¹¹¼¼½¾¿»½¿º½½¹»½·ººµ·¹±¶¶­²µ®³¶¬±´¦¬°¥«¯¦¬°§­±§­±¥«¯¢¨¬ž¥ª §¬ž¤ªž¤«œ¤ª §©£©­¤«°§®³§¯²¨¯±©¯³¦¬²¢¨®œ¢©•Ÿ¥—¡§¥­³¼ÂÆÀÆÊÃÈËÇÉÌÉËÎÏÐÑÏÐÎÖÖÓÚÚÔÚØÒÜÚÔÝÛÕßÝ×ßÝ×ÝÛÕÜÚÔÙ×ÑÕÏÈ×ÑÊßÛÕßÝ×ßÝ×ÞÜÖÜÙÒÕÐÇÑÉÀÐÆÀ˾¸À°ª´žš¬‘Œ¡€}’mj„VTvDBq<;p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:p;:s=;s=;s=;s=;s=;s=;s=;s=;s=;s=;r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:q<;u@?zHF}LKˆ^\ƒ¬¦¨®´º«³¹­µ¾¯·½±¸À®¶¼°µ¸®¥§²¬®µ¹¿¶½Âµ¼Á·½ÄºÀÆ»ÁžÄȽÄƽÃľÅÇÂÈÉÃÉÊÄÊËÇÊÊÆÌÊÉÌÌÊÍÍÊÏÌÍÏÎËÎÎÊÍÍÉÌÌÉÎËËÍÌÈËËÊÍÍËÎÎÊÐÎÉÏÍÍÒÏÎÓÐÐÓÐÐÕÒÑÖÓÒ×ÓÕ×ÑÕ×Ð×ÙÓÙÚÕÛÜ×ÛÝÖÝÞÙÝÞÙÝÞÖÝÞÖÜÝÕÛÜ×ÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÜÝØÝÝ×ÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÛÛÕÔÕÐÉËǼÁ¾­²¯œ£¢Œ“•t~amsS^eOZaFQXHOWJMTMIQRHLYEJ_CGhHHnHHrEEtEByIINM}KIxDBs>;r<:r<:r<:r<:r<:r<:r<:r<:r=<r<:r<:r<:q<;xDBƒTQ‰^[Š`^ec—tq |¨Š°››²°š™¬•“®—•± Ÿµ§©¶©©´¢£²œ›±š˜±›š±›š±Ÿ³¡¢®˜—«‘¨ŽŠ¦‡„¥†ƒ©Ž‹§Š‡”nj‰^[…VS~LJt?>r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:vB@ƒTQfc–wt‡†¤••© ¢­ª­¯®³±´»±¶¿¯¶À±¹Ä¶»Ä¹¿Æ½ÁɽÁɶ»Ä¶½Ç·¾È·¾Æ·¾Æ·¾Æ·¾Æ¶½Ç¶¼Ã·¾ÆºÀÇ»ÁȺÀǶ½Å³ºÄ³ºÂ¯·À­µ¾­³º­³ºª°¶¬²¹ª°·«²ºª²¸­´¼¯¶¾±µ»µµ¸·µ¶¸²´¶­¬³¤¢­—“£†ƒ¤…‚¢~›xu“liŽdbca‹`]‰[YƒVSƒTQPM…VSPMvB@r><q<;r<:s=;r<:q<;u@?yGE}KI’mj²¥¥½»¼À¿ÁÅÄÃÈÇÆÍËÉÐÍÉÒÏËÖÓÏØÖÐ×ÕÏÕÕÏÐÑÌÎÎËÊËÉÈÉÇÂÇľÁĽÂ¿ÄÁÄÆÅÄÅÃÂÄÃÁÃÂÀÃÃÄÆÅÈÈÈÇÉÅÉÊÅÉÊÈÉÊÅÈÉÄÆÇÂÄÅÃÀÃÀ¿ÀÁ¾¿À»½¿º½½¸»»º½½¿ÁÀÀÃÃÄÅÆËÌÊÌÍÈÉÊÅÃÆÿÁÀ¿Â¾ÃÀ¿ÁÀ¿ÁÀÀÁ¿ÀÁ¿¿ÁÀ½¾¿º¼¾¹»º·¼¼º½½º½½·ººµ¸¸²¹¸¶»»·ººµ·¹´¶¸´¶¸·ºº¹¼¼¸»»¹»½»¾¾º¿¿·ºº±¶¶ª°´ª±³©¯³¥¬®¤«°¢ª­¡¨­¢¨¬ž¥ªœ¢©š¡«œ£«¤¬¤©œ£«œ¦©¥«¯¦¬°¥­°§®°ª±³«±µª°´¥«±ž¤«œ£«¤¬¤¬¦­²¹¿ÃÆÉÌÊÍÐÏÑÓÕÕÕÖÕÔØÖÔÙÙÓÚ×ÓÚØÒÝÚÖÞÜÖßÝ×ßÝ×ÝÛÕÛÙÓØÕÎÜÙÒàÜÖßÝ×ßÝ×ßÝ×ÝÛÕÙÓÍÑÉÀÍÀºÅµ¯»§¡¯—‘¥‡ƒšxv‘he„WTxDBr=:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:s=;s=;s=;s=;s=;s=;s=;s=;s=;s=;q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9s>=t@>zHFƒTQ‹a_–vvª ¬°¶«³¹«³¹°¶½±·¾°¸¾°´º°©ª¯§§³³¶¶¼À´¼Â·¾ÃºÀǺÀǼÃȾÄÈ¿ÆÈ¿ÆȽÄƽÄÆ¿ÆÅÃÊÉÄËÊÆËËÈÎÌÊÍÍÈÍÍÇÍËÊÍÍÇÍËÇÌÉÇÊÊÈËËÉÌÌÈÍÍÈÎÌÉÏÍÉÏÍÌÑÎÏÒÏÏÒÏÐÔÎÑÔÑÔØÒÕ×ÑÖØÑØÙÔÚÛÖÛÜ×ÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÜÝØÝÞÙÝÞÙÞßÚÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÜÝØÜÝØÜÝØÜÝØÝÞÙßàÛÞßÚÝÞÙÝÞÙÝÞÙÜÜÖÕÖÑÒÓÎËÍÉÀŶ¹¹ª°®•œžv€ƒblrP\dHSZGOUIMULJPQHOWFK^FIlNOxWV‚\ZŒebdaŠ`^‹`[…VS|HFvB@s>;r=:q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9vB@PM‹`[“mi˜ur¡€}§Œ‡¬•“°žœ²¡ ²¡ ±Ÿ± Ÿ¶¬­¹´·»³¶¸°°¹®®·©¨¶¦¦¸ª©¹®®·¬¬´£¢°š°š–®—•«’®—•¯š—£‚—ro’ifŠ_\|HFr=:q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9u@=€QNˆ^\nl–yyœ‡‡£””¨Ÿ¤«©¯®±¸±¸Â²ºÅ¶½Ç»ÂÌ¿ÅÌÁÄ˽Áɶ»ÄµºÃ¶½Ç´¼Å´»Å´»Å´¼Ç²¹Ã³ºÄ³ºÄµ¼Ä·½Ä´»Å¯·À¯µ¼­´¾®´»­±·­°·­¯²«­³«­³ª¬¯ª¬¯©­³ª­±¬¯³¯®°±ª«²©¨±§¥°žœ«’¡€}”ol’lh’if‡ZW}NIwECwCAvB@uA?s?=s>;s?=t@>t?<r=:r=:r=:r=:q<9q<9q<9s>=xDB€QN–sp³¥¤Á¾¾ÈÅÅÈÃÃÉÄÄÌÊÇÐÍÉÑÎÊÑÎÊÒÏËÓÐÌÐÎËÌÌÉÈÈÅÂÂÂÀÃýº½À¸¾¿»ÀÀ¿ÁþÁÁ¾ÁÁ¾À¼ÁÁ½ÂÂÀÁ¾ÁÁ¿ÄÁÃÅÄÄÅÃÅÆÄÄÆÂÄÅÃÃľÀ¿»½¼¹»º¹»º¹¼¼º½½½¿ÁÀÃÃÃÄÅÉÊÈËÌÇÉÊÅÄÅþ¿½¾À¿½À½º¿¿¹¿½½¾¿½¿¾¾À¿º½½¹º»¹»º¸»»¹¼¼¸º¹µ¸¸´¹¹³¸¸³¸¸´¹¹±¶¶³¸¸±¶¶´¶¸µ¸¸²µµ´¹¹µºº³¸¸±·¸«²´©¯³©¯³¥¬®¦¬°¤«­¡¨ªž¦¬£ª›¢§™ ¨˜Ÿ§˜Ÿ§š¡«›¢ª˜ ¦›¢§¢©«¢¨¬¢¨¬£ª¯©°²­³´«²´§®³£ª¯ §¬Ÿ¦«ž¥ªŸ¦«¤¬²°¶ºÇÊÍÑÒÓ×ÖÕÙÙÖØÙÔÚÚÔÛÛÕÚÚÔÜÜÖßÜØßÝ×ÞÜÖÞÜÖÝÛÕÜÚÔÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ÞÛÔÙÓÍÎüƷ²»¨£²›–¨‹…Ÿ}y“pj‹a_„URyHGt@>q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9q<9t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:s=;s=;r<:r<:r<:r<:r<:s=;r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:t><vB@~LJŠ]Zgd›yu¦‘‘®«®¯µ¹¯¶¾­µ»­·½¯·½±·¾°°³®¤¥³®±²±³¶¼À·¾Ã¹¿Ã¸¿Ä»ÂǾÅÊ¿ÇÊ¿ÆȾÅʽÆÇ¿ÅÆÂÊÊÃÊÉÇÌÌÇÎÍÆÍÌÇÎÍÅÌËÅÌËÇÊÊÄÊÈÈËËÆËËÆÉÉÇÍËÈÎÌÉÏÍÌÑÎÌÒÐÎÓÐÏÒÏÑÔÑÒÔÐÓÕÑÔÖÐÓÕÑÖØÔØÙ×ÚÛÖÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÞÞØÝÞÙÞßÚÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÛÛÕÛÜ×ßàÛàáÜàáÜààÚÝÞÙÝÞÙÝÝ×ÚÛÖÙÙÓ××ÔÒÔÐÈËȽÀÀ©¯­–˜v€ƒdpvYciW]dRX^QQWRJPVFL^FIqVV‹pmš|Ÿ}œzv˜sp–ojfbŠ]Z†WT~LJ|HFzFDu@=r=:r<:r<:r<:r<:r<:r<:r<:t><|HFƒUQ“jg|y§Œ‰¯˜–°žœ´¦¥µ¨¨·ªª´ª¨·®­ºµ¸»º¿¼¼¿¼»½½º½¾¹¼½·¹¾¸º½¹¿¼·»¹±±¸­­¶©©µ§¦´¢ ¶§¥µ§¦°žœ¨Š›xu”nj„URt@>r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:t@>~LJ„WT‹b_‘po—yx™¡’¦œ ¨¤¬¬®´­´¾³ºÄ¸¿É¼ÁʽÁÉ»ÀÉ·¾È´»Åµ¼Ä²ºÃ²ºÅ°¸Ã²ºÃ¯·Â²¹Ã²¹Ã°·Á°¸Ã®µ¿­´¼¬²¸­°´®®±®¬²«­°­«¯­¨«­¨«ªª­«ª¬ª©«ª©«¬ª«®§¨°££°¡Ÿ¯žª” |“miˆ]Z†XTPMyECs>;r<:r<:r<:r<:r<:r<:r<:s=;s=;s=;u@=t@>vB@xDByECyECzHD…VS“mi§Œ‰º±°ÊÈÆÐÍÊËÈÄÆÁÁÈÅÂÌÊÇÍÊÆÊÇÃËÈÄÉÇÄÄÅÃÀÁ½¾¿¹»¾·ºº·¼¼·¼¿·¼¿¹¼¿»¾Á¹¼¿¶¼½´»º¶¼½¸½½¹¼¿º¼¾º¼¾¼¾À¾¿À¿ÁÀ¾ÁÁ¿ÁÀ¾À¿»½¼¸»¸¹»º¸º¹¶¹¹¸»»½¿¾ÀÁÂÁÃÅÆÈÇÇÉÅÄÇÄ¿ÀÁ¸½½º½½º¼»·¼¼¸½½¸½½»¾¾¾À¿½¿¾¸»»¶¹¹·ºº¹»º¶¹¹´¹¹´··³µ·±¶¶¯¶µ±¶¶³¸¸¯´·­³´®³³«±²«±²®´µ­²µ©°²©°²§­±¤«°¦¬°¥«¯£©­Ÿ¦«¤¬›¢ª™¡§—Ÿ¥–ž§˜Ÿ§™¡§˜ ¦™¡§š¡©›¢ª¤¬ §¬¡©¬©°²¯´·®³¶©¯³¤«°¢©® §¬ §¬¡¨­¦­²«±µ¶¼ÀÈÊÌÕÕÕÖ×ÕÕÖÔØÙÔÛÛÕÜÜÖßÛÕßÜÕßÝ×ßÜÕßÜÕÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ÞÜÖÜÖÐÔÊÄƸ±¼ª¤´˜«‰¡{•rlea†YVPM{GEvA>r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:s=;u@=wCAu@=s=;s=;u?=t?<s=;s=;t><s=;s=;r<:r<:s=;r<:s=;r<:r<:s=;r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:s=;r<:r<:r<:r<:r<:r<:s=;r<:t><yEC…VSŒb`–qn›{{¤‹«¡¢®®±®´º­´¹¬³¸¯¶¾±¸À¯µ»²²µ´±´µªª¸¸»¹¾Á¸¿Ç»ÂÇ»ÅȽÅË»ÅȽÇʾÈʾÈʾÈÊÁÊËÂËÌÃÌÍÄÍÎÇÍÎÇÎÍÆËËÃÊÉÃÊÉÃÊÉÃÊÉÄÊËÆËËÉÌÌÈÎÌÌÏÏÌÑÎÌÒÐÍÓÑÎÓÏÎÓÏÑÓÏÒÕÒÕ×ÑÔØÒÕ×ÓØØÕÙÛÔÜÝØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÞÞØÞßÚÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙßßÙßßÙßßÙßàØàáÜàáÜßßÙÝÞÙÝÞÙÝÝ×ÝÝ×ÜÝØÛÜÚÖ×ÒÍÏ˼Á¾©¯­˜žŸ—™‹’”‰Ž‘|~kkn]U[VIM]HKs[[‘xu¤ˆ¨ŽŠ¥‡ƒ¡€{›xs—qm–pl•nifdŒ_\ˆ[X€NJyECvB@s=;r<:r<:r<:r<:r<:r<:t?<KI‘he¢~¬’Ž°žœµªª¶®®¸°°¸±²¸²´¸µµ»º¼¼¼Â½ÂŽÂžÁÅÀÄÊÀÂȾ¾Ä½ÁǽÁǾ¼Àº··»´µº³´¹²³¸°°¸°°¸®¯³¡ŸªŠŸ}{b_yECr<:r<:r<:r<:r<:r<:s>;t?<u?=t?<r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:t?<|HF€QL…[Yfcmk’sp˜~ŒŽ¢•˜¥ ¤§§°«¯·°·Á³ºÄ¶ºÅ·»Æ´»Å²¹Ã±¸À²¹Á°¸Ã°¸Ã¯¸Ä±¹Â²¹Ã²¹Á¯·À¬´¿«³¾¬²¹­°´®«®­ªª®¨ª­§©­§©¬£¥¬¤§ª¤¦ª¤¦ª§§«¨¨«¦¦¬£¢¯¡ ®Ÿ¬™–¦‹ˆ•pmƒTQ|HF|HFwCAs>;r<:r<:r<:r<:r<:r<:r<:r<:s=;t><vA>xDB}IG„URŽgd’mjgdda¡‚¯›¼´´ÊÄÃÓÐÌÓÐÌËÈÄÅÀÀÄÂÀÈÅÂÇÄÁÄÁ¾ÃÀ½¿¾½»¼½·¹»³¶¹²´¶°³¶¯²µ­´¶®µ·´¹¼µº½³¸¸±·¸¯µ¶²µ¸²µ¸³¶¹³¸¸´¹¹¶¸º·¹»¸½½¹¼¼º½½»¾¾º½½·ººµ·¶¶¸··¹¸·ººº¼»½¿¾¿ÁÃÀÃÃÀÃþÁÁ»½¿´¹¹²··³¹º²¹¸´¹¹·ºº¸»»º½½¹¿½¸½º·ºº·¹¸µ¸¸³¸¸³¸¸³¸¸±¶¹®µ´¯¶µ³¸¸³¸¸¯´·§®°§­±¥¬®§®°«±²¨¯±§­®¥¬®¤ª®ž¥ª¡¨ª¡¨ªž¤¨™ ¥™Ÿ¦˜Ÿ§”œ¢•Ÿ¥–ž¤”œ¢˜ ¦”Ÿ¦• ¥—¡§˜¢¨œ£«ž¥ª¢©«§®°®³¶ª¯²¦¬°£ª¯¦¬°«±µ­´¶¯µ¹¸¾Â»ÁÅÀÅÈÊÌÎÐÑÒÐÐÐÑÒÐÕÖÔÖØÔÚÚÔÝÛÕÞÜÖßÝ×ßÛÕßÜÕßÝ×ßÝ×ÝÛÕÞÜÖßÝ×ßÜÕÜÖÐÕÍÇ˽¶¼©¢´˜­‘‹£‚™vp’hd‰^[‚SP}IGwCAs>;r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:r<:t>:t>:t>:t>:t>:t>:t>:t>:t>:t>:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:s=;wB?|HF|HFyDAyECwB?wB?wB?u@=xC@xDBxDBwCAu?=v?<u>;u>;u>;t><t=:v?<u?=u>;t=:t=:t=:t=:t=:s=9t><xC@u?=v@>t><u?=xDBwA?t><t=:u>;u>;t=:u@=vA>u>;t=:u>;u>;u?=€NJ‹^[‘heœ{x£‹‹©—˜­žž¬¤§¯±´­´¹­´¹°¶½±·¾²¸¿³¹À²¸¾¹´´»¹ºº¿ÂºÄʾÆ̾È˼ÄʽÄɼÅƺÄǼÆȽÈË¿ÊÍ¿ÊÍÂÌÎÃÍÏÄÍÎÄÍÎÇÍÎÅÍÍÄËÍÄËÍÄÊËÇÌÌÉÎÎÊÏÏÊÍÍÎÐÏÌÏÏÏÒÏÐÕÑÐÕÑÏÒÏÒÕÒÕÙÓÕÙÓÔØÒÓÖÓ×ØÖÙÛÔÛÝÖÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÞßÚÞßÚÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙÞßÚàáÜßáÚßáÚáßÙààÚÞàÙßáÚàáÜßßÙÞÞØÞßÚààÚßáÚÞßÝÜÝØØÙÔÍÏËÆÈľÁÁ¸½½º¿¿¸½½¬­®˜™š|wz_TW]INoYYŽwu¥‹ª”ªŠ¦‰ƒ¥„¢€~¢z£€{ }xœyt˜uo“ie‹]Y…TQxC@t=:t=:s=;t><s=;s=9vA>…VSœzvª‘Ž¯œ™³¦£·¯¯¸³³·´´¸¶·¹¸ºº»¼»»¾½ÀþÅÊ¿ÇÊÁÇËÃÈËÂÆÌÀÆ̾Æ̾ÅʽÂŽ½À¼¼¿»»¾ºº½»¹º¼¶¸º²²¸ª©²ŸœªŠ–ojOKu@=s>;u?=v@>vA>yECOK„SPƒROKIwA?u>;t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:s=;yEC}IGSO†[X‹b_ig‘qq—||›†‰Ÿ—¢ §¥§°§«¶ª±»®µ¿°·Á¯·À¯·À¯·½¯·À¯·Â°¸Á°¸Ã±¹Ä²¹Á¯·Â«³¹«³¹­°·­¬±¯ª­­§¦¬¤¤¬¤¤«¢¡«¢¡«¡Ÿª¡ ª¡ ª¢¢ª£¤«¢¡®¡¡®žž®œš¬•“¢~Œb`|HFvA>v@>s=;t=:t=:t=:t=:t=:t=:t=:v?<xC@zFDzIH‚SP„WT‹`]‘nkš|{£§•–¨°žœ»µ·ÉÄÄÐÍÉÔÐÊÏÌÈÈÅÂÂÀ¾À¿¾¿¿¿¾¾¾¼º¸¹·µ¶·¸²³´°²´¬¯²¬¯²©®±¦¬°¤¬²©°µ¬²¶¯´·¬³µ«±µ­³´­³´ª±³«±µ«²´¬³µ®³¶®´µ±¶¶³¸¸³¶¶µºº¹º»·ºº¶¹¹¶¸·¸¹º¹º»·ºº¸¹ºº¼»¸»»¶»»·¼¿²¸¹²··°¶·°µ¸®³³¯´´°µµ³¸¸µºº¸½½¸½½µºº²¸¶±¶¶°µµ²¸¹²¸¹¯´·¬³µ®´µ°¶·¯µ¶§­±¤ª®¡¥« ¦ª£ª¬§­®¤«­¡¨ªž¦©š¢¨˜ ¦™¡§›£©™ ¥•œ¡–¥“šŸš ’¤“ž¥’œ¢‘œ£“ž¥“ž¥–¥–ž¤—Ÿ¥›¢ª¥«¢¨¬§­±¦¬°¦­²§­±®´º»ÁÅÀÆÇÂÈÉÄÇÊÅÈËÅÈËËÍÏÊÌÎÌÍÎÍÏÎÒÓÑÒÕÒ×ÙÒÜÜÖÝÛÕÝÝ×ÝÚÖÞÜÖÞÜÖÞÜÖÛÛÕÛÛÕÝÛÕÜÙÒÕÎÉÌ¿¹¾®¨³œ—¬’Œ¥†›xs“lgŒa^„UR~LHyECu?=u>;t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t=:t>:t>:t>:t>:t>:t>:t>:t>:t>:t>:s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9u@=zHD†YV‘lic_ƒTQ‡\Y‹`[€QL}KG|JF…WS‰^[ca‹a]€NJwB?vA>vA>u@=t>:v@<v@<u@=u?;t>:t>:t>:s=9s=9wB?|GD}IG|JE~JH}IG}HEKI…SO{IDt?<u?;t>:s=9wB?vA>u?;v@<s=9s=9u?;PJ`]’ifšyv©˜—®¤¥­žž¯¦¨³³¶¯µ»®¶¼°·¿°´¼¯´½±¸À°·¿²¸¿º··ºÀƺÄʾÈËÁÈʽÈͺÅʺÅȺÅȼÆɽÈ;É̽ÊÍ¿ÊͼÉɽÈÈÂËÌÃÌÍÃÌÍÃÊÌÄËÍÄÉÉÇÉËÊÏÏËÐÐÎÑÑÎÑÑÏÒÒÑÔÑÒÕÒÑÖÓÓÖÓÒ×ÓÓØÔÖÚÔÔØÒÔØÒÕÙÓØÚÓÛÜ×ÝÞÖÝÞÙÝÞÙÝÞÙÝÞÙÞßÚßàÛßàÛÝÞÙÝÞÙÝÞÙÞßÚÞÞØÞÞØàáÙáâÚàâÛâãÛàâÛàâÛáâÚàáÜáâÝáâÝáâÝßáÚààÚàáÜáâÝáâÝßàÛÝßØÝÞÙØÚÖÔÖÒÌÏÌËÐÍÍÒÏËÐÍÄÇÇ·¹¸œ›sknaQToYZŽxw¥±ž™²—±š•°—”¯•‘®“Ž¬Š­‘‹¯”°–’«‰ }w”jfOKvA>wCA}IG€NJ}IGyEC~LH’if¨Š°žœ³¥¤µ¬«¸²´¹·¸¸¸»¹¸º»½¿»ÀüÁļÃÅ¿ÇÊ¿ÉÌÂÉËÀÇÉÀÆÊÁÈʾÈ˾Æ̾ÅʼÃżÂȼÀÆ»ÁÅ»¾Â¼»½¼µ¶¹¬¬·¦¤°š–¤ƒ€’hd‚QN~JH…VQ‹^[Š]Z‰\Y•okœwt™rme_~LHwB?u@=u@=t>:s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9vB@zFD~LH€RN„YVŠa^Œifol“yw•˜‡‰š’œ”šŸ£¤¢©§©¯ª­´­±¹®´»®µº­·½­·À®¶¿­·À°¸Ã°¸Á¯·À¬¶¼ª´º«±·­­°¯ª­­¨¨«££«¢¡¬ŸŸª žª ž«œ« ©Ÿ© Ÿ«  ­Ÿž­žœ­—–ª‘ŽŸ~{ˆZVwCAt>:s=9s=9s=9s=9s=9s=9s=9s=9s=9u@=zHDSO‡a_Œoouv“yznm’pn¦˜›¬§«³¬­·¯¯Ä¿ÂÉÆÆÌÊÇÌÉÅÇÄÁÃÂÁÁÀ¿¿¾½¹¹¹¶·µµ´³²³±¬±±«®±§¬¯¤©¬¡¦©ž¤ª¤©¥«¢©®¦¬³§­±¦­¯¦¬°§®°¦­¯¦­¯¦­¯¥­°¥¬±¥«¯§­±ª°±«°°ª°±¬²³¯µ¶²´¶³µ·³¶¶³¶¶´¶¸´µ¶³¸¸µ¸¸²··±¸·°¸¸­µµ®´µª³´ª±³ª±³«±²­³´¯´´¯´´´¹¹µºº²··®´µ¬²³­³´±¶¶¯¶µ«²´¦®±§­±¨¯±§­±¢©®Ÿ¦«£§™ ¥š¢¨œ¤ª˜£¨˜¢¥“£’œ¢“›¤“£“ž£œ¢šŸš ™ŸŒ—ž‘™¢”ž¤•Ÿ¥‘œ£’¤”œ¥•œ¤–ž§—Ÿ¨›¡¨ž¥ªœ¤ªŸ¦«¦¬°®´¸­³·µº½ÀÃÆÇÉËÉÌÌÊÌÎÊÌÎÈÍÍÉÌÏÉËÎÉËÍËÎÎÍÏÎÒÔÓÖØÔÙÚÕÙÚÕÙÚÕÙÚÕÙÚÕÛÛÕÚÛÖÙÚÕØÙÔØØÒÕÏÉμ¾±«²—ªŽˆ¥†ž{v”njb]†XT€OI|HFvA>t>:s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9s=9v=:v=:v=:v=:v=:v=:v=:v=:v=:v=:u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8v?9w@:€NJidœ~¢Œ‹¢Œ‹œ~‚„™xu–ur‘li™}Ÿ†…¢‹‰{Š]W}HEwB?xB>xB>xB>wB?wB?wA=wA=wA=KI~LGxC@u?;xB>wB?zEB„RNe_Ža^‡XS€NI„SM}HEv@<v@<v?9v@<wA=xB>}HEyDAu?;u>8w@:OJŽc]•lf z±¡¡¹´··µ¶¸º½·¼¿²¸¿²¹Á³ºÂ¯´½¯µ¼¯µ¼­µ»±·¾½¿ÂÀÆʸÃÈ¿ÆË¿ÇʼÆÉ»ÃɹÃɹÃƺÄǺÂÈ»Å˺ÆÌ»Æ˽È˽È˾ÉÌÀÊÌÃÌÍÁÉÌÄËÍÅËÌÄÊËÉÎÎËÐÐÍÐÐÎÑÑÍÓÑÑÔÑÒÕÒÐÓÐÒÕÒÓØÔÕÙÓÖÚÔ×ÙÓÔ×ÔÖØÔØÚÔÚÜÕÞÞØÝÞÙÝÞÙÝÞÙÝÞÙÝÞÙßàÛßàÛßàÛßàÛÞßÚÞàÙáâÝâãÛâãÞãäÜâãÞâãÛàâÛáâÝáâÚàáÙáâÝáâÝáâÝàâÛáâÝâãÞâãÞâãÞáâÝààÚßàÛÛÝÙÙÛ×ÖØÔÔ×ÔÓÖÓÒÕÒÎÓÐÄÉƳ´²“ŽŽvkk{hh•€€¬š–·©¥º¨¤¸¨¢¶¢œµŸ›µ¡›·¡¸¦ »­©À¶´½²¯±›—¢zd^€NI†XT“hc”mh’gb‹^[’hd£‚­š—³££µ«©¶¯­¸¶·¹·¸º¼¿¹¼À¹À»ÂǼÄÇ¿ÆÈ¿ÇÊÂÉËÃÊÌÁÈÊÃÈËÃÉʽÈÈ¿ÈÉ¿ÇÊ¿Æ˾ÅʽÄɼÃȼÂƼ¾Á¼¹¹»²±¹«ªµŸ›±–‘©Š…œwt–oj¡~yªŒˆª‹†¢€|§†­’©Š…žxt_[„RN€NI}HExB>v?9v?9v?9u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u?;wB?|GD}KF€QL…WSˆ]X‹damiŽqn‘xw”~•„†šŠ“¢˜œ¥ §£©«ª¯«®²¬²¸®´»­µ¾®¸Á±¹Ä²¹Ã¯·Â­µÀ­´¾¬²¸­°´®­¯¯©«­¥¥­¢¢¬ŸŸ«œš«œ«œ«œªœ›ªœ›«œ­œš­›™¬—”©Ž‰›yu‚QKw@:u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8wA=€OL‡fh‡rvˆ{‚‹‚‰”„‡™© §¯­³·µ¹¾½¿ÃÁÂÈÅÅÄÃÂÁ¿ÀÂÀÁÂÀÁÀ¿Á¼»½¶·¸³²±°¯®©¬¬¤©¬ ¦¬Ÿ£©›¡§š ¦š¡¦œ¢©›¡¨š¢«œ¤­ ¦­Ÿ¦« ¦­ §¬¡¨­¡¨­£«®¢ª­Ÿ¦« §¬¡¨ª£©­£ª¬¦«®¤«­¨«®¨­­ª¯¯«°°¬¯²¬±±¬²³­³´¯µ¶°µµ¯µ¶­´¶ª±³ª±³©°²¦®±§¯²¨¯±©°²ª±³ª±³²··²··®³³§®°¨®²¦­¯§®°¦­¯£«® ¨« §¬£©­¢¨¬ž¥ªš¡¦—Ÿ¥—¡¤–ž¤“ž£“£›¢Ž™ Ž™ ›¡š¡›£Ž™ ˜ŸŒ—ž‰•Š”˜Ÿ’š£“›¤˜Ÿ˜Ÿš£“›¤–ž§™ ¨™ ªœ£«¤¬¡§®ª°´·¼¿´º¾¸½À¿ÅÆÃÈÈÉËÍÊÌÎÈÍÍÆÌÍÇÌÏÈËÎÅÊÍÇÊÍÊÍÍÎÑÑÒÕÒÓÕÑÑÔÑÑÔÑÑÔÑÓÕÑÓÕÑÔÕÐÓÔÏÑÒÍÑÍÇÍÁ»À³­¶¢œªŠ¡€{zu–pie`†YS‚PL}HExB>u?;u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8v?9v?9v?9v?9v?9v?9v?9v?9v?9v?9u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8v?9v?9xA;yB<|FBŠ_Zƒ¦˜š¦œ ¦››¥˜˜¥••¤“’¢‘ ž‘”Ÿ•™¥šš§šš¥Œ‰—qm…VQ~HDzD@|FB}HB…SL‚OIzD@yC?}HE‘f`–le‡UNyD>xA;wA=}GC„QK‡VPˆWQ†UO„RK}HEyC?xA;xA;w@:xB>yC?}HE†TP}HEyC?}F@xB>ƒQLŸxs°’‹¿¨£Ë½¼ÄÄÄ»ÁŹÀŶ¾Ä°¸¾¯¹¿¯·½¯¶¾¯µ¼°¶½¯µ»´ºÀ»ÁǾÈ˺ÄʹÄɸÃȹÁÇ·ÃÉ·ÃɹÀÅ»ÂʸÀƺÂ˸ÃÊ·ÃÉ»Æ˽È˽ÈËÁËÍÃÌÍÃÌÍÄÌÌÅÌËÅËÌÇÍÎÉÎÎÉÏÍÎÐÏÌÑÎÏÔÐÏÔÑÐÓÐÐÕÒÓÖÓÓÖÓÕ×ÓÖØÔ×Ú×ØÛØÙÛ×ÝÞÙÞßÚßàÛÞÞØßàÛÞàÙààÚàáÜÞàÙßßÙààÚàáÜáâÚáãÜãäÜãäÜãäÜãäÜâãÞàâÛáâÝàâÛáâÚáâÝáâÝáâÝáâÚâãÛáãÜáãÜâãÞâãÛááÛßáÚÝßÙÛÝÙØÚÖÕ×ÓÖÙÖÔØÒÏÔÐÌÏÌÀÃÀ¸¹·©£¢œ‘Ž£•‘²¤ »¯©¾±®¾±®¼­¨¹©£º«¦¼®ª¿´±Ä¾½ÈÆÇŽ²¯´žš©Š…štp˜uo¤ƒ~¨‡„¤…€£‚§Œ‰°š™²¢¢´§§µ¬«¶¯°¸µµ¹¸º¹¾Á¹¿ÃºÁƼÃȽÅÈ¿ÈÉÂÈÉÄÊËÆËËÆËËÄÊËÂÉÈÂÉÈÁÈÇÂÉÈ¿ÈɾÆɼÆÉ»ÅȼÃȼ¿Ã¼¾Á¾·¸º¯¬¹§£·¤¡µ¢Ÿ³™²—’´š–¶£ ¸¦¢¶£ ¶ œ·¡µ›—­ˆ¤yœvo–le^Y€KHwA=v?9w@:u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8w@:zC=|FB|JEOKƒTO…ZWŠa^Œgdlkrr‘vv“zy—š‡‡œŒŒ¢”–¤œŸ¦¡¥¨¦ª¨«¯«±µ­³º¯¶À²¹Ã±¸Â°·Á­¶Â­´¾­²»­°·®«®¬¤¤­Ÿž«œª™˜ª˜–ª˜–ª˜–¨–”ª˜–¬š˜¬š–¬™”¬•“¨Œ†˜rn}HEu>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u?;~IF„^\„lr…u~‡|ˆˆŽ ˜ž«ª¯µµ»º¹¾½½ÀÁ¿ÃÀ¿Á¼»½·¹¼º¸¹»º¹ºº½··º²³´®®®«ª©¦¤¨Ÿ¡¤œŸ¦š ¦™Ÿ¥•œ¡™ž¡™£•œ¡“›¤•¦š¡©›¢ªš¡©›¢ªœ£«ž¥ª §¬ §¬ž¤ª£ªœ¢¨ž£¦œ¢¨Ÿ£©ž¤ª ¦ª¡§«£¨«£©ª¥ª­¨®¯©®±§­±ª¯²¬±´ª±³¨¯±¨¯±§®°¥¬±¢©®£ª¯¤«­¥¬®§®°¬³µ±´·¬²³¦­¯¥«¯¤«­¡©¬ž¨«ž¦©¥«¤©¤©š¢¨™¡§™ ¨—Ÿ¥—¡¤—¡¤”Ÿ¤”Ÿ¤“ž¥’¤“£’ž¤“£’œ¢“ž¥Ž™£Š–žŠ–ž‡“›ˆ”œˆ”œŠ•ŸŠ–¡Š–žŒ˜ ™¡’š£•¦–¥˜Ÿ§£ª¡¨­­³·º½ÁÀÅÅÂÅÈÂÅÈÄÅÆÅÇÉÅÇÉÃÆÊÄÇÊÃÈÈÀÅÅ¿ÄľÁÄÀÂÅÃÆÉÇÊÊÉÌÌÉÌÌÇÌÌÊÍÍÈÍÍÊÌËÊËÉËÌÇÌÊÇÊľƼ¶¿±ª¶£œ¬”Ž£‚}™vp•oke`Š[V„RN~IFyC?w@:u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8xA;w@:yC?zE?‡XSžƒ€§š¤ ¦¥¡§¤Ÿ£¥ ¥œ›¢šš¡™œš˜ž™˜ ™›¡¢¡¨žŸ«š˜§‰•okŒ^ZŠ[VˆYT–le¢z‘fa‚PIOH„RKŒ_Y˜ng“hbNHzE?|IC„RK`[†TMLFLF}HB~HD|FBzE?zE?yD>}HB„RK‚PIŠYS€KE}JD„RKƒQJ‘d^²”Êµ¯Óž×ÏÉÏÎÍ¿ÅÉÀÆʽÀĶ¼À°¸¾°·¿­´¹¯µ¹°µ¸¸µ¸ÂÀÄÒÑÐÍÐнÅË·Ã˹ÃɸÀÆ·ÂÉ·ÂǸÀƹÁÇ»ÁȺÂȺÂȸÃʸÃȹÄɼÄʾÉÌÁÉÌÂËÌÄÌÌÄÌÌÄËÍÅËÌÆÍÌÇÎÍÊÏÌËÐÍÍÒÏÌÒÐÎÑÑÐÕÒÑÖÓÓÖÓÓÕÑÕØÕØÙ×ÚÛÙÛÜÚÛÜ×ÜÝØààÚàáÜáâÚáâÚáâÚáâÚáâÚáâÚáâÝàâÛâãÞáãÜãäÜãäÜãäÜãäÜâãÛâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝâãÛãäÜãäÜâãÞâãÛàâÛÞàÚÞßÚÝÞÙÛÛØ×ÙÕØÛØØÚÔÔ×ÔÐÕÒÌÑÎÊÍÍÄÅü¹¶¶®¨»°«¾²¬Àµ°Äº·Á·´¿³­¾²¬¿µ²Á»·ÅÂÂÊËÌÇÈÉÅÂÂż»½¯«²˜’¬Š°–’±›—±›—±œ™² ž´¦¥·¬¬¶®®·¯¯·±³º¸¹¹¼ÀºÀĺÀÄ»ÁÅ»ÅȾÈÊÁÈÊÃÊÉÅËÌÆËËÆËËÅËÌÄÉÉÆÉÉÇÊÊÃÊÉÂÉÈ¿ÈɽÆǼÄǽÅȾÄÊ¿ÁÄ¿¼¼¼³²¼¯¬¼±®¼±®»°­»ª¨¹§£½¯®¿¶µ¿¶¸¿±°½¬ª»¨£·¡´˜³˜“«Š…šsn†UO|FBxB>wA=u>8u>8v?9u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8v?9xC=zGA}JDNHSO…ZU†]Zˆc`‹igŒkhŽnnsp”zx–~~›…„Œ‹¢‘“£–™¤ž¡¤¢¦¦¨®ª­´®±¸®²º®µ¿­´¾­´¾­±¹­­³¬§ª«œ¦“¦‘Ž¥‹¤Š†£ˆ…¡†ƒ¡†ƒ£‰…§‘«˜“¬—”¬–’§Œ‡—qm|ICu>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8wA=|JF…\[ˆjmŠuyƒ‹™¡­«²³³¹·¶»··º¸¸»¶¶¹³µ¸²´¶´±±´²³°²µ±³¶®®±«©ª¦§¨¢¢¥› šœŸ˜›Ÿ”šž’™›“™‘˜˜ž— ‘™¢“›¡’œ¢’¤”ž¤”ž¤—Ÿ¥š¢¨š¢¨™¡§š ¦—£–œ£˜ž¥˜ž¥™ ¨š¡¦£©œ¢¨£©¡§«¥ª­¤¨®¤ª°¥«¯¨®²¨®²§®³¥¬±¡¨­Ÿ¦«¤©Ÿ¦«¤«­§®°ª°´ª°´¦¬° ¦ªž¤¨¤©ž¥ªœ¤ª›£©–¡¦—Ÿ¥š¡©š¡©–ž§˜Ÿ§—Ÿ¥—Ÿ¥– ¦–ž¤’¢• ¥˜¢¨™£©›£©¤©œ¦©›¥¨˜¢¨’š£— ‰”ž„’›„˜†’ˆ”œ‰•Š–žŠ–žŒ—¡™¢’œ¢•œ¤š §§ª®·º½ÀÅÈÄÉÉ¿ÄÄ¿ÀÁ¼½¾¼¹¹¾»»¿½¾¾»»¾¸·¼µ³º´³¸±¯¶±±¹´´º¹»½¿ÁÁÂÿÅÆÂÅÅÅÆÇÃÈÈÆÈÇÈÅÂÉÂÀÆ¿º¿³­¹ª¥³Ÿ™¬•£…~›xs“mf‘fa‰\VƒRL~KEzGAwA=u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8u>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9y@:y@:xA;y@:zC=~HDˆ[U›yu§™›¦¥¯¤¤­££©¥¡§¤¡¤¤Ÿ¢Ÿ£™™¢“—¢‘–¢”˜£¡Ÿ¥© ¢¬¡ž®œ˜­–‘ªŽˆ§‰‚¤‚{°•´˜«Žˆ {u—phe_Ž_Z˜me—ld^Y†SKˆVOŽ_Zb[‹YR~KE}GC}F@zE?|FB€KENFNHJD„RKŠYS‹ZTˆWQ‚OIˆWQšskµ˜’ɳ¬ÔÈÀÚÐÊÛÔÌØÖÓÈÍÍÃÊÌÄÉÌÃÆɽÂŶ¼Ã±·¾°³·¶µ·½¶·ÍÌË×ÕÓÞÜÙÐÕÕ¼Æ̺ÂË·¿ÅµÀŸÀÆ·¿Å¹ÁǺÂÈ»ÁȼÂÆ»ÂǹÃƹÃƺÄǼÆɾÈÊ¿ÈÉ¿ÊÊÀËËÄÌÌÂÌÎÅÍÍÇÍÎÉÏÍÊÐÎËÑÏÌÑÎÍÐÐÏÔÑÐÓÐÏÔÑÑÕÏÓÕÑ×ØÖÚÚ×ÚÛÙÛÜ×ÛÝÙßàÛààÚáâÝáâÝàâÛâãÛâãÛâãÞâãÞâãÞáãÜáãÜãäÜãäÜãäÜâãÞâãÛâãÞâãÛàâÛàâÛàâÛàâÛáâÝáâÝàâÛâãÞâãÞáâÝàáÜÞßÚÝßÛÝßÙßàÛÞßÚÜÞÚÚÜØÚÜØØÛØÓØÕÎÔÒÐÓÓÏÑÐËÌÊÄ¿¼À¹´À¶³Å»¸Äº·ÅºµÅ½ºÅ»¸ÁºµÄ½»ÅÄÃÊÍÍÊÏÏÊÍÍÊÊÊÁ»·¼­¨º¨¤µ£Ÿ¶¤ ·¨¦µª§³©§¶­¬·°±·±³¸±²¶³³¸º½¸º½ºÀƺÁÆ»ÂʼÄʾÈË¿ÆÈ¿ÈÉÃËËÄÌÌÃÉÊÄËÊÇÊÊÇÊÊÈËËÈËËÃÉÊÃÉÊÃÉÊÂÊʾÅÇ¿ÅÌ¿ÃÉÀ¿ÁÀ¹·¿·´¾¹¹Àº¹¿¸¶¾´±½°­¿µ²Ã½¿Ã½ÀÁ¹¹¿´±½¯«½®©¿®¬½ª¥·œ—¢|u‹\WLF|E?yB<x?9w>8x?9w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9xA;zD@}HE~MG€QL‚URƒ\Y†`^‰dd‹ffŒjhŽol‘tt”ww—|y™€›……œŠ‹“¡—›¤œ¢¦¡¨¥£©§£«¨¦¬§¥«¨£§©›¦•”¥Ž‚š|x—vq–sn‘nhŽgbŽd`•ok|y¥‹‡¨‘Œ¨ˆ¤ƒ€•ni}HBw>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8|FB€NG‚SNŠa^‘{~˜Œ‘¤œ¢ª¦¬¯¬¯®­¯±¬¯°«®¯¬¬­¬®¯­®¯¯¯®­¯¬®±ª¬¯¨§¦¢¢¥› ˜š–™“–š–šŒ“˜Š”šŒ“˜–›‘˜ —š Ž˜¡Ž˜¡Œ˜ ‘›¡”ž¤˜ ¦˜Ÿ¤™Ÿ£”š ‘—ž–›“™ •›¢—¤—ž£˜ž¤š ¦š §›¢§¤© ¦ªŸ¦«ž¥ª¡§®¥¬±¨®²¢©®¢©®¡¨­Ÿ¦®Ÿ§­¥¬±¦­²¡¨­œ£«˜ ¦–ž¤—ž¦—ž£– ¦– ¦”ž¤”ž¤’¤•¦”œ¥’œ¢“›¤”ž¤”ž¤’œ¢‘œ£’œ¢•Ÿ¢—¡§›£©˜¢¨˜ ¦Ÿ¦«¢©« ª­›£©–ž§™¢„’›ƒš…‘œ‰•‹– ‹” Œ–Ÿ˜¡“š¢•›¢—£¢¢¥¶®®À½½ÄÇÇÀÆǾÁÄ»»»¸³³µ¬«¶©¦·©¥²Ÿœ¬’Ž«”®—’®™–¯›²£¡¶­¬¹³²¼¹¹½¼¾À¿ÁÄÃÅÇÈÉÉÉÉÇÄÁĺ·½²¯·¦¤±›—«‘‹£†€œ{v•ok‘faŠ]W…TN€KE}F@xA;w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9x?9x?9x?9x?9x?9x?9x?9x?9x?9w>8w>8w>8w>8w>8w>8w>8w>8x?9w>8y@:yB<yB<zC=|E?~HDŒ_\£‹‹ª ¤«­³°²»©«±¥£§¦¡¤¥¢¥£ £šœ¢•˜¢‘–¢– ”˜£¢Ÿ¢©¡¡­£¡±£Ÿ³¤Ÿµ£Ÿµ£Ÿ¶£ž¸©¤º¨¢¸¢›¶ ™´œ–®‰¡{tŸxpŸvp—ld^Y‡VP_Xb[„QK€KE…RL‚OG~HD‚OG^Y yt£€x›qj_X^XŽ_Z‰XR`[¤y¾©£Î¿ºÔÊÄÚÒÉÝÖÎÝ×ÐÝÙÓÕÕÒ¾ÅʾÅÊÈÉÊÅÄÆ¿ÂÆ·»Áµ»¿¶ºÀ¾ÁÄÓÓÓßÝÛßÜØÛÜ׿É̸ÀÉ·¿Å¸ÃʶÁÆ·ÁĶÀƸŸÀƼÂƸÃȸÃÈ·ÂǹÃƺÄǽÆÇ¿ÈÉÂÊÊÀËËÂËÌÃÌÍÅÎÏÇÎÍÈÏÎÈÐÐËÐÐÍÐÐÌÏÏÍÐÐÎÑÑÐÓÐÓÔÒÓÖÓ×ØÖÚÚ×ÚÚ×ØÙÔÛÜ×ßàÛàáÙàáÙâãÛâãÞãäÜãäÜãäÜãäÜãäÜãäÜâãÛâãÞâãÞâãÞâãÞâãÞâãÞâãÞàâÛáâÝáâÝáâÝáâÝáâÝáâÚâãÛáâÝßàÛÞßÚÜÝØÞßÚßàÛÝßÙÝÞÙÞßÚÜÝØÚÜØÚÝÚÕØÕÓÖÓÒ×ÔÐÕÒÐÒÑËËÈÅÀ½Å¾¹ÈÁ¿Æ¿ºÆ¿ºÈÃÀÈÅÂÈÅÂÅÃÁÆÆÃËÎÎËÑÏËÒÑÉÏÐÆÅÄ¿¼¿º·Áº¸½µ²¸°­¸¯®¸²´¸²´¶°²·´´·¶¸·¶¸·º½·º¾¹¿Å¹ÁǸÃÈ»ÃÉ¿ÆË¿ÈÉ¿ÈÉ¿ÈÉÄÊËÃÉÊÇÊÊÈËËÍÍÍÎÎÎÉËÊÈËËÈËËÉÌÌÇÌÌÂÉËÀÇÉÂÆÌÂÀÁÁ¿½À¿¾Á¿ÀÀ¿¾¿¼¹¾¹¶À¶³¿¸¶ÃÀÃÃÁÂľÀÁ¸·Àµ°À³°Ä¶µÁ´±¼¨¢­Œ‡•jd‡UN€KEzD=x?9w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w@:yC?|FB|IC~MJRO‚XV„[Z†_\ˆb`ŠeeŒjhnjol“qm“pk’ol”vu–~~™‡ˆ›‹ŽœŒœŒ‹Œ‹œ†…•zw‘so”spnkŠeb‰c_‡`[ƒZT~OJ{JGƒUQ‹b\’mg™ws›xs•ni‹\W|E?w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8zD@}GC~HD‡\Ymk•wv›ƒƒ¢Œ‹¨““©—•«˜•­  ­¤£­¦§¬«­ª«¬ª«¬§©¬§§ª¤¢£ŸŸ¢–™”—žŽ”›Œ“›‡˜„Ž—ƒŽ˜†Ž—“š‘—›–›—œ‹•›‰“œ‡“›—“£™Ÿ¥™ž¡•™Ÿ’–œ–•›•œ—œ“š¢’š •›¢—ž¦˜Ÿ§™ ¨™¡§š¡©š¡©š¡©œ¢©¡¨­£ª¯¢ª°£ª¯¡©¯¥­³¥­³¥­³¤®±Ÿ©¬–¡¨’¤“›¤’š “£’¤š¡Ž™ Ž™ Ž™ Œ˜ Ž™ Ž˜¡š¡š¡š¡Ž™ ›¢”œ¥‘œ£‘œ£’œ¥‘œ¦”œ¥›£©¥¬±¨¯±¨¯±§¯²š¥ªŽ˜¡‡’œˆ–ŸŠ–žˆ”Ÿ˜¢˜ «£¥«¨¦ªª§§®¦¦±ž›±˜•¸«¨¿¾À¿Áľ¿À¹·µµ¬«´¦¢¶¤¢²œ˜©Ž‰£„¥‡ƒ¦‰ƒ«’­˜•²£¡·®­µ®¬¹³²¾¼½ÁÀÂÄÆÈÇÈÉÆÅÄÄ¿¿½³±µ¤£°›˜©‹¢…‚œ{v”qkgaŠ]W…TN€NG}F@xA;x?9w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9x?9x?9x?9x?9x?9x?9x?9x?9x?9w>8w>8w>8w>8w>8w>8x?9x?9w>8zA;{B<{B<yB<~E?IE`]©²®¶´´½®±¸·ºÁ¬¯³©¦¦§¢¥¤¢¦¤¢¦Ÿž£–™ ’— ’™£•›¢¢ ¤©¤§®¨ª³ª©¶©¦¹­§º¯ª»°«¼±¬½¯¨½¯¨¾±«¿­§º¤›¶œ“¯ˆ§xulŽ_W‡UNŠXQ‰VN„OIƒNH‰WP‡TL‡TL’e_¦ƒ}º§¤À±¬¶œ“«‰€œum’d]—ldª‰„ų¯ÐÆÃ×ÏÉÛÔÌÝ×ÐÞ×ÏáÝÕàÜÖÙÙÖÊÏϺÁƼÃÅÈÊÉÉÉɾÁż¿Â¹¿ÃÁÇËÑÔÔÞÜÙßÝ×Ô××½ÄɸÀɹÁÊ·ÂÉ·ÂɵÀŶÀÆ·ÁǹÁǼÃȹÄÉ·ÅɸÃƹÃÅ»ÆɼÉÌÀÊÌÂËÌÂËÌÃÌÍÂÌËÂÍÍÅÍÍÆÍÌÉÐÏÊÐÎÌÏÏÎÐÏÍÐÐÐÓÓÑÔÔÓÖÓÓÖÓ×ØÖ×ØÖ××ÔÚØÕÛÜ×ÞßÚààÚàáÙâãÛãäÜãäÜãäÜãäÜãäÜãäÜãäÜâãÞâãÛâãÞâãÞâãÞâãÛâãÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝàâÛáâÚàáÙààÚßàÛÜÝØÜÝØÝßÙÞßÚÝÝ×ÝßØÜÞ×ÛÜ×ÛÝÙÛÜÚØÛØÕÚ×Ô×ÔÑÖÓÐÑÏÊÊÇËÌÇÍÍÊËÉÇÊÅÂÉÇÄÊËÉÊËÉÊÌËÊÍÍËÑÏÌÓÒÌÓÒÊÑÐÅËÌÂÉÈÂÅÅÁÆÉ¿Áþ¹¹¼º¸º¸¹¸µµµ³´¶¶¹··º·º¾·¼¿·¼¿¸½À¹¿ÃºÂÈ»ÃɽÅÈ¿ÇÊ¿ÈÉÂÈÉÄÊËÆËËÇÊÊËÌÍÎÎÎÎÏÍÎÏÍÍÎÌÌÍËÊÌËÈËËÅÈËÄÉÌÃÉÊÄÆÉÁÂÃÀÁÂÀÁÂÀÁÂÁÀ¿À»¸Â»¹¿¼¹ÀÁ¿ÃÅÄÁÀ¿Á»ºÃ¼·Ä½»Å½½Å»¹Â±¯¹¡›¨…}”ga‡TL€JC}D>zA;x?9w>8w>8x?9w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9zA;zC=|FB}JD~LH€QL‚UR„YV†[Vˆ]X‹`[Œa\Œa\†YS„UP‚UR‰_[ŒjhŒolŒollinkŠmjˆgdƒ`[€[X}XU}WSxSPxQLvOJtJFqDAqC?sEAvHDzMGƒUQˆ[U„SMzGAv@<w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8zA;y@:zD=ƒQJ‰ZUŠ]Wd_d_‘fa•ohŸ~yª˜–¬ž«£¦¦¨«¤¨®£¨«¢¥¨¢¢¥Ÿ¢—š¡’–žŒ“ˆ™…–„Œ•Š–€Š“‚Š“‰““–’•˜’—šŽ•šˆ–ˆ™Ž–œ—œŸš¡šœŸ–˜›•—š““™Ž”š–˜žŽ–ŸŽ˜ž™Ÿ‘™¢“›¡“£“£–§–¥”œ¥•¦œ¤ª¢©®¦¬°¦­¯©°²±¸º³º¿­µ»¦²¸¢¬²˜£ª“ž¥‘œ£’š£‘œ£™¢‹– ‰•‰•Š•ŸŠ–¡Š–¡‹–¢Œ˜ Œ˜ Œ˜ Ž™ ’¤“ž¥Žš¢š¤’œ¥‘œ¦”œ¥›£©¥¬±ª±³°·¹´º»¦®±•¦‘›¤’œ¥š¤Š–¡’©¶¹½Â¼¾º­ª¹¨¦¶¤ ´˜®’Œ´¢ž»¸¸½¼¾½¼¾ºµµµ®¬¸²±·¯¯°Ÿž®˜—­›™­”‘ªŠ­š—±£¢µ¬«¸µµ¸·¶¹¸·½¾¿ÂÅÅÄÆÅÄÅÃþ¾¼´±µ¨¥®›˜§‹¡ƒš{v–plf`‰\V…TNNF~HA{B<x?9w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8w>8x?9x?9x?9x?9x?9x?9x?9x?9x?9x?9w@8w@8w@8w@8w@8w@8xA9zC;xA9xA9zC;}D>}F>„RK”nj­›œ¹·½½»Â·¹¿®±¸­³¹«°³ª§§¨¥¥¨£¦¨£¦¥¢¢  £š¤˜ž¤¡§§¤§ª©«®­¯·±°»´²¼µ³½¶´½³°¾³¬¾°©¿²¬À±©¼©Ÿ¿¬¥Â°ª¼¥·™¦€w“e\Š[S…RJLFLFƒOF„PGˆVO\VaYvn°’‰¾«¤Ã°©Àª¡·™®Ž…´š‘ó­ÏÈÆ×ÒÏÜÖÐÜÙÒáÝÕàÚÔàÚÔáÞÚØÙÔØØÕÊÐÑÉÎÎÆËËÀÅÅÀÃƾÁÄËËËÐÒÑÑÓÒÜÜÖßÛÕÜÚ׿ÇʶÀƵÀÇ·ÂÉ·ÁÊ´¿ÆµÀǸÃÊ»ÅȼÃżÄʸÆʹÄ˹ÅË»ÆÉ»È˾ÉÎÀËοÌÌÁËÍÁÌÌÁÌÌÄÍÎÆÎÎÇÏÏÉÑÑËÐÐÌÒÐÌÒÐÏÒÒÐÓÓÐÖÔÓÖÓÔ×ÔÕ×Ó×ØÖÙÙÖØÙÔÝÝ×ßßÙàáÙáâÚãäÜãäÜãäÜãäÜãäÜãäÜâãÞâãÞâãÞâãÞâãÞâãÛâãÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝàáÜàáÙàáÙàáÜßàÛÝßØÝÞÙßßÙßàÛßßÙÞßÚÞßÚÝÞÜÜÞÚØÛØ×Ú××Ú×Ô××ÒÔÓÐÒÑÏÒÏÏÑÐËÎÎÌÏÌÍÎÌÌÎÍËÎÎÉÏÍÉÏÍËÒÑÌÒÐËÒÑÊÑÐÉÏÐÇÎÍÄÍÎÃÊÌ¿ÆȾÁľÀ¼¼¼·¸¹µµ»³µ¸´¶¹µ·¹·¼¿·¼¿¸½À¸¿Ä¹ÁĺÂÅ»ÃƽÅÈÄÊËÅÌËÅÌËÉÌÌÉÌÌÌÎÍÎÏÍÍÎÌÌÎÊÍÎÌÍÎÌÌÎÍÈËËÈËËÈËËÈËËÇÊÊÄÉÉÃÆÆÁÃÂÂÃÁÃÁÂÁÀ¿ÁÀ¿ÁÀ¿ÁÁÁÃÅÄÃÄÂÃÁ¿ÂÁÀÄÁÁÇÂÂÇ¿¿Æ»¸À²®¹¡›¨‚y•g`Œ[S‡TL€JC|E=zC;w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8xA9yB:zD=|GA|IC~KE€NG€NGOHƒQJ„SMƒTO~LExF?tC=uGCxMHwQMvQNtQNvTRuTSrQPqPMpOLlJHjHFiGEkFFkECkDAkB?kA?mB=mB?oB?tE@vGBvD?tA;u?8v?9w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8x?9yB:|E=JDƒOFHB~HA†TM“jd§Ž«žž© ¢¦¢¨¡¤«ž¤«›ž¥™›¡“™ – Œ“†™ƒ–‚Œ•ƒ‹–ƒ‹‘„Š‘…‹‘ŒŽ’’’”“•””—’”—“™Œ’˜‘–™˜™šš™›—–˜–•—•”–••˜–˜›”š Ž˜¡‰•‰”ž— ˜¡’š£š£›¢’š£™¥š£‘œ£—Ÿ¨Ÿ¦«¥«¯§®°®µ··¾À¹ÀÅ´¼Â°ºÀ¨²¸œ§®™¤«–¡¨“Ÿ§”Ÿ¦Œ˜ ‡“ž„‘†’‰”ž‰• ‰— ‹– ‹– Œ—¡Š–¡Žš¢›¥›£‹—ŸŽ™£›£›£‘œ£”ž§™£©§­©±´®µ· ¨®•Ÿ¨—Ÿ¨Ž™£Š–¡‹—¢“ž¨³¹¿Æ¿À¹¦¡±™“²›–²—±š•´¢ž¸®«º´³¼»½¹¶¶·²²¶·¸³µ·±ª¨°¢¡°žœ­—“¬•“­—“²£¡µ¬«¸¸¸¸½½¼¾Á¿ÁÃÀÁ¿¾½¼¹¶¹±®²£¡¬—”¥Œ‰Ÿ}˜wr“nhf`‰\V„UMNF~HAzC;xA9w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8w@8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8z@9y?8zC;}C<}C<~D=}F>~G?ƒOF¡€}¼³¸¿½ÃÂÀƽ»¿´³¸²´º¯³¹«®²«¨¨¬¦¥¬¦¥«¦¦ª§§¦¦©¥§ª¤¨®¨ª­¯­®°°³´³µº¸¹¼º»»¹º½º·¿¹µ¿·±À³­Á³¬Ã´¬Á²ªÅ·°È»µË½¹Å¶®¾§®Ž…˜meŠWO‰VNŽ_WaYŽ_W—ldœtkœtkwp©†~¹¢šÊ¼µÌ½µÊ»³È¸¯Ê½·ÍÃÀÒÍÊØÕÎÝÚÓßÜÕàÝÖßÛÓàÚÔÝÛØàÜÖÞØÒÙÓÌØÕÎÍÏξÅǼÃÅÂÇÊÐÏÎÕÓÐÒÔÓÙÙÖÝÙÓÝÙÓÈÍ͸ÀÉ´¿É¶ÀÉ·ÁÊ·ÁʸÂ˸ÃʺÂÈ¿ÆȾÆɽÈ˹ÆÌ»ÇÍ»È˼ÈμÈοÊÏÂËÌÃÌÍÃËËÂËÌÄÍÎÇÏÏÇÏÏÈÐÐÊÑÐÌÒÐËÑÏÍÒÒÎÓÓÑÔÔÑÖÓÓÖÓÔ×ÔÕØÕØØÕØÙÔÜÜÖßßÙààÚàáÙâãÛãäÜãäÜãäÜãäÜáãÜáãÜâãÞâãÞâãÞâãÞâãÞâãÛâãÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÚàáÙàáÙáâÚßáÚÝÞÙÝÞÙÞÞÛÞßÚÞàÙààÚßáÚßàÛÛÝÙØÚÖØÙ×ÙÛÚØÚÙÕÖ×ÐÓÓÑÒÐÏÒÒÍÒÎËÑÎËÑÏÊÐÎÉÏÍÉÏÍÉÏÍÉÏÍËÒÑËÒÑÈÏÎÈÐÐÈÏÎÇÎÐÂÌνÇʽÄƺÀĹ¼Àµ¸¼´ºÀ³¹¿µ¸¼¶¸ºµ»¿¶»¾¹¾Á¸¿Á·ÁùÁĽÅÅÀÇÉÆËËÆÌÊÆÌÊÊÍÍÊÍÊÍÎÌÎÏÍÎÏÍÍÎÉÎÏÍÎÏÍÍÎÌÍÍÍËÌÍÉËÊÉËÊÈËËÄÊÈÂÈÉÄÆÅÄÃÂÄÃÅÃÂÄÄÅÆÃÄÅÄÄÄÂÅÅÄÄÄÂÄÃÄÄÄÅÆÇÅÆÄÅÃÁÈÁ¿È½ºÁ²­´˜¢{sœri˜lcŽ_W…QH~G?yB:y?8z@9y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8z@9yB:zC;}D>~E?}F>}G@}JD}JD|ICxGArA;oA=mB?lC@jDBiFChGFhHHgIIdGGcHHcFFbEEbEEaDDaDDbDDcCCdDDeCAgDAjC@lB>mB?oA=q@:r@;s@:u@:v?9x?9y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8xA9zC;z@9|B;…QH“ib¡„¦Š¨““¨¢¡©œŸ¦–š¢’˜ŸŒ“‰‘œˆ›„™„Œ•…Œ‘ˆ‹’Š‘ŠŒ‘ŽŽ”—‘–“““’”’‘“‘‘”–““™””›”•—””•“”•”–™—˜˜š˜ž¤’œ¢Š•ŸŒ–ŸŒ—¡Œ—¡š£š£Ž™£Œ—¡‰• ‰˜¢š¤– ©Ÿ©¯¨°¶¬´º°¸¾ºÁƼÃÈ»ÂʹÀű»Á£­³›§­š¦¬§­š¥ª” ¨‹—¢ˆ”Ÿ†”‡•ž‡•žˆ–Ÿ‡•ž‡“žˆ—¡‰— ‹—¢Œ—¡‰• Š–¡Œ—¡Ž™£›¥‘›¤’œ¥”ž§–ž§š¢« ¨®›£¬›¥š¤˜¥‹—¢‹—¢›¥ž¦¬±±´´¢ ¥ƒ|¤‚{¨Šƒ®’Œ²›–´¡œ·ª§»¸¸º¸¹¸¶·´·»³¶º³­¯°¢¡«•‘ªŠªŽˆ©‡°žš³¨¥¶±±·¶µ¹¸·º¸¶¸±¯³©§±¢ ®›–¨ˆ z›yu–sm’leŽc^‰[T„SKNFH@}C<yB:y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y?8y?8y?8{A:y?8y?8z@9~D=~G?~G?}F>€JC’icº¬®ÏÍÎÏÍÎÃÀúº½µµ¸³µ¸°°³®¬­®«¨°©§°««¯­®®¬­¬«°¬¬¯¯¯²±°²¶´µº¹»¼»½¾½¿¾½¿¼»½¾¼º¿¹µÀ¶³À¸²Äº·Ä¼¶Æ¼¶É¾·ÌÁ¼Ì¿¹É·®¿© ¸œ“›sjŽ_W£}v¹Ÿ™¼¢œ¶—º —ï¦Å±¨Çµ¯Êº´Ë¿¹ÍÅ¿ÎÈÁÏÉÂÎÆÀÐÊÄÑÍÇÑÎÊÙÖÏÝÚÓÝÚÓÞÛÔÞÛÔ×ÙØÛÙ×àÚÔÛÕÎÚÔÍÞØÒØÕÑÒÓÑÏÑÐÏÑÐÎÑÑÒÔÓÕÖÔÑÓÒÝÚÖÝ×ÑÊÍͶÀÆ´¾Çµ¿È¶ÀɵÀʵ¾Ê¹ÁÊ»ÅÈ¿ÇʾÈ˽ÈͺÆÌ»ÇÍ»ÇͼÈνÈË¿ÉÌÂÉËÁÊËÃËËÁÊËÁÊËÅÍÍÆÎÎÇÏÏÉÑÑÊÑÐÊÐÎËÐÐÍÒÒÍÒÒÎÔÒÒÕÒÓÖÓÕ×ÓØÙÔÚÚ×ÛÛØÜÝØßßÙàáÙáâÚâãÛâãÛãäÜãäÜãäÜãäÜãäÜâãÞáãÜãäÜâãÞâãÞâãÛâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝßáÚÞàÙààÚßßÙßàÛßàÛÞàÙàáÜßáÚßàÛÞßÚÛÝÙÙÜÙÙÜÙÙÛÚÖ×ØÔÖÕÑÔÔÒÔÓÎÔÒÌÑÍËÑÎÊÐÎÊÏÌÉÏÍÈÎÌÈÏÎÊÐÑÊÑÐÈÏÎÇÎÍÈÐÐÈÐÐÄÍÎÀÊÌ»ÄÅ»ÂǺÀǵ¼Á´»Àµ»¿µ¹¿¶¼À´º¾¶½Â¸¿Á¸¿ÁºÁûÄŽÆÇ¿ÆÈÃÉÊÅÌËÇÍËÊÍÍÌÎÍÍÎÌÏÐÎÎÏÍÍÎÌÏÐÎÏÐÎÎÏÍÍÍÍÍÍÍÌÌÌÌÌÌËÍÌÉÎËÇÍËÃÊÉÃÈÈÅÆÇÄÆÈÄÆÉÃÈÈÃÈÈÃÈÈÃÅÈÃÆÉÄÉÉÄÊËÉÉÉÈÈÅÈÅÂÊÁÀÆ»¸º£žª†}¥~v£{r˜lc\T„PG€IAzC;y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8z@9z@9yB<yD>yF>wE>uD>sD?mB?kB?hC@eCAdDDcED`EE_FE]GG\FG\FG[FI[FI[FI[FI\FG\FG\FF`FG`EEcEDdDDeCAhC@kB?mB?oA=q@:s@:u@:v@9x?9y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8zC;„OIŠYQ`Z“ib›zu¦–™¡£šœ¢‘–¢Œ”Ÿ†›„™„™…˜ˆŽ•ˆŽ”ŒŽ‘Ž‘ŒŒ“Œ–Œ–Ž‹—Œ—Ž––—‘š‘›‘›’‘˜’‘˜’”˜••˜›Ÿž £˜Ÿ¤‘™¢— Š•ŸŠ•ŸŒ—¡‹– †“Ÿ…”ž†’†“Ÿ‹™¢—£«§²¹´¼Â¹ÀÈ»ÂʼÂɼÂÉ»ÃɺÄʵ½Ã¥°µ «° «°¤®±¢­²›§­•¢¨¦Žœ¥‹™ ‰˜¢Š˜¡‰• ˆ”œ‡•ž†“Ÿˆ”Ÿˆ”Ÿ…”ž„‘‡” Š–¡Ž™£”œ¥–ž§–ž§–¥–ž§–ž§”ž§Ž™£Žš¥‘œ¦˜¢˜¢˜¤“›¤–§¢Ÿ¢¦Œ¡€{¢|¥ƒ|«Žˆ±š•³¡·­«º°­¶­¬´²³³±²²°±®œªŠ¦‰ƒ¢€y¡{¨‹ˆ®”±ž™²¡Ÿ²£¡°žš«’§‹…£„Ÿ}y—rl“jd‘faŽc]‹\W…TNƒPHJD~GAzC;yB:y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8{@8{@8{@8{@8{@8{@8{@8{@8{@8{@8y?8z@9y?8y?8|A9~C;}C<}C<€F?H@KD‹]V¯ššÀ¾ÄÎÍÏÍËÌÁÀºº½µµµµ°°µ¯®´®­´®­µ¯®µ³´´²¶µ³·µ´¶¶µ·¼¹¹½»¼¿¼¿¿½¾¿½¾À¿¾ÁÁÁ¿¾ÀÀ»»¿º·Á¾»Ã¾¾Å¿¾ÈÁ¿Ê¼ËÁ»Í½Í½ʸ¯Å¯¦ºž•¡ypª„{Á­¤ÐľÔÉÄÒÅ¿ÓÉÀÔÍÈÖÐÉÕÏÈÖÏÊÓÏÉÐÊÄÒÎÈÒÏÈÔÑÊÒÏÈÑÎÇÓÐÌÖÒÌÖÓÌ×ÔÍÜÙÒÛÙÖÖÖÖÝÚÖàÜÖÚÕÌÚÔÍÝ×ÑÛ×ÏÙ×ÔÓÔÒÌÏÏÃÉÍÍÒÒÇÌÏ¿ÇÊØÖÓÙÓÌÙÖÒ·¿Å°»Âµ¿È¹ÁʶÀÉ·ÁʹÁÊ»Æ˾È˾É̾É̼ÉÌ»Æ˺Å̽Ç;ÈË¿É̾ÉÌÂÊÍÂÊÍÁÉÌÁËÍÃÌÍÇÏÏÈÐÐÊÐÑÉÐÏÉÐÏÊÑÐËÐÐÌÒÐÎÔÒÒÕÒÔÖÒÖØÔÙÚÕÚÛÖÛÜ×ÝÞÙßßÙàáÙáâÚâãÛâãÛãäÜãäÜãäÜãäÜâãÞâãÞâãÞáãÜâãÞâãÞâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝßáÚßáÚàáÙàáÙßàÛààÚààÚÞàÙßáÚßàÛÞàÙÞßÚÝÞÙÚÜØÙÛ×ØÛØ×ÙØÕ×ÖÔÖÕÑÔÔÎÔÒÌÒÐÌÑÎÉÏÍÇÍËÈÎÌÇÎÍÈÎÌÉÐÏÊÑÐÈÏÎÆÏÐÈÐÐÇÏÏÇÎÐÂÌξÈÊ»ÂǹÀÅ´¼Â´ºÁ´¼Âµ¼Áµ¼Áµ»¿·½ÃºÀĹÀºÃļÅƽÅÈÀÈÈÂÉÈÆËËÈËËÊËÉÌÎÍÍÎÌÏÐÎÎÏÍÐÐÍÐÑÏÏÐÎÏÐÎÐÐÐÏÏÏÏÏÏÍÎÌËÎËËÎËÊÍÍÇÍËÃÊÉÃÉÊÄÊËÄÆÉÇÈÉÈÊÌÄÊËÄÉÉÂÈÉÆËËÆËËÄÉÉÇÈÆÈÅÂÉÄÁɾ»Á±«·›’±‘ˆ­‹‚£{r—ib[TˆRK~G?y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8x?7w@8v@9u@:tA;rA;oB?mC?hC@fDBcEDaDD\FF\FGYGHXGIUGJUHKUHLSHKSHKSHKSHKUHLUHKUGJXGIYGH\FG\FFaDDcEDfDBhC@lB>nA>qB=sA:u@:v@9w@8x?7y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8z@9}C<~G?H@‡TL™vp£ˆ…¡™œ˜š • ‡œ„™„Œ—†’‰•“Ž’“Œ”‹—Š˜Š™‡šŽˆ˜Ž‹˜ŽŒ˜ŽŒšŒ››œŒš‘šŽš‘••¤ž£¢¤Ÿ¤§–ž¤”œ¥š¤ˆ”Ÿ‡’œ„›šŽšƒš„‘‹˜¤œª³³»Á¼ÄÊ·¿È´¼Å¶½Ç·¾Æ¸¿Ç»ÃɶÀÆ«¶»ª´·«µ¸¬¶¸©³µ¢­°š¦¬˜¥«—¤ª•¢¨ž§š¤Ž™£Œ˜ Š–ž‡•ž†’„‘‚‘›‚›„‘‡•ž›£”ž§–ž¤—ž¦•¦•¦“›¦˜¡š£Ž™£’œ¥Žš¥Žš¢™¢Ž™ ˜¡“˜¡™™ŸŸ—š¤“’¤‰„«’«’±Ÿ³¦£®£ °š–­–”®œ˜®œš§Œ‡¡~y™rj˜ng™pjxr¡|v¤ƒ~¥„¤…€£€{šuo—nh“ib‘d^\VŠXQ‰VN†SKƒOF€IC€GA~G?|B;z@9y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8y?8{@8{@8{@8{@8{@8{@8{@8{@8{@8|A9y@8zA9y@8zA9|C;}D<F>~E=JB„PG•hb©Ž‰·±´ÂÂÈÈÈËÉÆÉÂÀļº¾¸µ²º°­»³°¸³°¹´´¹¸·»¹ºº¹»¾½¿À¿ÁÁ¿ÀÁ¿ÀÃÀÀÄÁÁÅÀÀÃÀ½ÆÁÁÆÁÁÃÀÀÁ¿½Ä¿¿Å¿ÃÃÀÆÄÁÈÅÁËøËļÍÅ¿ÏÁ½É¶¬½£š¼¡—» –Ê´«ÑŽÙÓÍÜÖÐÜÖÐÞØÒÝ×ÑÝ×ÑÜÖÐÛÕÎØÒÌÑÎÇÓÏÉÓÐÌÕÒËÕÒËÓÐÉÑÏÉÍÉÃ˞ξÖÐÉÙÕÏÚ×ÓÚ×ÐÚÖÎÚ×ÐÙÕÍÙÕÍÛ×ÏÙÖÒÒÓÑÈÊ̼ÂÉÈÍкÁ˾ÆÌÅËÌÛØÔÙ×Ô¶Àð»Â´¾ÇºÂȼÆ̺ÄʺÂË»Æ˽È˽ÈͽÈͼÆÌ»ÇͺÆ̽ÇʽÈ;È˽ÈËÁÊ˾ÉÎÂËÌÂÊÊÁÊËÄÍÎÈÎÏÈÎÏÉÎÎÊÏÏÊÏÏÉÐÏÌÒÐÎÓÐÐÓÓÓÖÓÕ×Ó×ÙÓÚÚÔÜÝØÝÞÙÝÞÙÞßÚàáÜáâÚâãÛáâÚâãÛâãÞâãÞâãÞâãÞâãÞâãÞâãÛâãÛâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝßáÚàáÜàáÙàáÙààÚààÚààÚÞàÙààÚÞßÚÝÞÙÛÝÖÚÛÖÛÜ×ÙÚÕ×ØÖÖ×ÕÑÔÔÏÕÓÌÒÐÍÓÑÌÒÐÊÐÎÇÎÍÇÎÍÅÍÍÄËÊÈÎÌÉÐÏÈÐÐÅÍÍÅÎÏÆÎÎÃÌÍÂÌξÉ̹ÄɹÀŵ½Ã³»Á´¼Âµ½Ã¶¾Ä·¾Ã¹¿Ã·¾ÃºÁúÃÄ»ÃþÄÅ¿ÆÈÂÈÉÄÉÉÈËËËËËÌÎÍÎÏÍÎÏÍÏÐËÐÒËÐÒÎÐÑÏÐÑÏÐÑÏÑÑÑÐÐÐÎÏÍËÎËËÎËËÌÊËÍÌÉÌÌÅÌËÆËËÄÉÉÈÉÊÊËÌÉËÍÈËËÂÇÇÂÇÇÆÌÊÅËÉÈÉÇÈÈÂÊÆÀÉÁ¾Ç»µÁ±«¼¦Ÿ¸•³”Œ¦u—i`[RJB}B:y@8y@8y@8y@8y@8y@8zA9zA9zA9y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8x?7w@8v@9u@:sA:rC>nC@kDAgDAdEB`FD\FFZHIWGJUHKSIMQHMPHNOJNMIOMIOMIOMIOMIOMIOOJNPHNQHMSIMUHKWGJZHI\FF`FDdEBfDBiC?nC>qB=sA:u@:v@9w@8x?7y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8zA9|C;~E=H@…QH“ld Š†Ÿ—•™¡Ž•ŸŠ‘›ˆ™‹•Ž“‘•Ž—Œ˜Ž‹™‡˜Š›‰›†›Œ‡›‰›‰šŒˆœ‰„œŒ†œˆŽ‰Ž‰œŽŠ›Ž‹œŒ£˜•¦Ÿ§¦¥¦¨ª ¦ªŸ¦«˜ ©˜¢‚‘|Œš{Žš~Žœ€ž…” œ¨¢®¶ºÁɽÅË·¿È³»Ä·¾Æµ¼Ä¶½Â»ÃÉ»Ãɲ¼¿²¼¾´½¾³½¿°º¼¨³¶¡¬¯Ÿ«±ª°›¨®—¤ª’ž¦‘Ÿ¨Žœ¥š Œ˜ Œ—¡ˆ•¡ƒ’ž‚Žœ‚›‰• š¤”œ¥”œ¥•œ¤•œ¤”›¥‘™¢š¡˜ž—¢Ž˜¡‘›¤’š¥•ž‹•žŽ–Ÿ‘–Ÿ“˜¡•›¡šš ›™œšžœ™œœ—š¢——§Œ‡™tn™sl£€{ }w–mgŽ_WŒ[SŒ]U‘bZ’d]“f`–ja“hb”ic‘d^aY‹\T‰XP…RJ‚NEJB€IA€JCH@~E=|C;zA9y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8y@8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}B7}B:|A6}B7F>€G?€G?‚KA`Xyp¨‹…µ¬®¼¼Â¿ÁÄÁÀÂÀ¿ÁÀ¾ÄÀ½À½¶´¾¶°¿¶µ¾¹¶¿ºº¿½¾À¾¼ÃÀÀÅÂÂÇÄÁÇÄÁÈÅÂÇÄÀÉÄÁÈÅÂËÈÄÊÈÂËÈÄÉÄÁÉÄÁÇÅÂÇÄÀÈÅÁÉÄÁʼËÀ¹ÍúÏÈÀÏ¿´Æ±¥È²©Ì¼³ÑüÕÍÄÛÕÏÞØÒßÛÓàÚÔàÚÔÞÚÒÜØÐÛÕÎÙÓÌØÒÌÒÏÈÏÍÇÐÊÄÏÌÅÏÌÅÐÍÆÑÎÇÌÉÂÉÁ»ÌÀ¸ÎƽÔÎÈÔÎÇÕÍÂÚÔÎÛØÑÚÖÎÚÖÎÚÔÎ×ÑË×ÔÍÜÙÕßÝÚÐÓÖºÁË´¼Å±¹Â¹¿ÆÃÉʸ¿Ä¼ÃÈ¿ÇÊ¿ÆËÂÊͽÈͽÅ˾ÆÌ·ÃɺÄʽÈͽÈͽÈͺÅÊ»Æ˽ÈË»Æ˽È˽ÈÈÁÊË¿ÊÊÂËÌ¿ÉËÂËÌÆÌÍÈÍÍÊÏÏÉÎÎÊÍÐËÐÐÌÒÐÍÐÐÏÒÒÐÓÐÒÕÒÕ×ÓÙÚÕÚÛÖÛÜ×ÝÞÙÞßÚàáÙáâÚáâÚáâÚâãÛâãÛàâÛâãÛâãÛâãÛâãÛâãÞâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝàâÛáâÝáâÝáâÝßáÚßáÚßáÚàáÙàáÙààÚßàØÞàÙÞàÙßàÛÝßØÛÝÖÛÜ×ÛÜ×ÚÚ×Õ×ÓÓÖÓÒ×ÔÑÔÔÌÒÐÌÒÐËÑÏÊÐÎÇÎÍÆÎÎÅÍÍÄÌÌÅÍÍÈÎÏÈÐÐÆÎÎÃÌÍÅÍÍÃÌÍÁËͽÈ˺ÅʹÃƵ½Ã³»Á²½Âµ½Ã¶¾Ä¹¿Ã¹¿Ã¹¾Á¹ÀºÂźÃļÂýÃÄÁÇÈÃÈÈÈÉÊÉËÊÍÎÌÍÎÌÎÏÍÏÐÎÏÑËÏÑÍÐÒÎÎÐÏÐÑÏÐÑÏÍÎÌÍÎÌÍÎÌËÎËÊËÉËÌÊËÎËÉÎËÉÌÌÉÌÌÌÌÌÍÍÍÊÌËÇÊÊÁÇÅÂÅÅÄÊÈÅÊÇÉËÊÈÊÆÊÆÀÊÄÀɾ¹Æ¹³Ä²¬¿¬¥»£²“‹¦~s˜i_ˆRIF>}B7|A6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6y@8x?7wA:u@:sB<oB<nC>iDAeDAbEE]GGZHIWGJSHKQHMNIMMIOKJOJJPIKQIKQHLRHLRHLRHLRIKQIKQJJPKJOMIONIMQHMSHKWGJZHI]GGaDDeDChC@lB>oB<rA;u@:wA:x?7y@8z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6|A6€G?ƒLD†SH‰XP”jc˜}zœŽ—•›”–œ”–™““–“’”•’’—™šŠ›‰›†›Œ‡›Œ‡œˆœˆœŒ†œ‰„›‡›„{žƒ~†Ÿ‡ ‰„ž‰ƒŠ…¡‡§•‘«™­¦¤­«©­®¯©®±ž¦¬‘¥‚‘{Œ›~ŽœŸ†•¡‘ ª›©²°ºÀ¼ÄʽÄ̹ÀÊ·¾Æ¸¿Ç¶¼Ã¹¿Æ½ÄɾÅʹÁÄ»ÄÅ»ÃøÃöÀ¯º½¨³¶¥²µ¤±´¢®´›ª¯™§«–£©’¢¨ž¥¦Žœ¥‰˜¢’žŽš‚›‡“žŒ—¡Ž˜¡—¢˜£‘˜¢‘˜¢˜žŽ–œ’™¡‘˜ Ž–¡“˜¡•™¡‘–ŸŒ“›Š””œ–’˜Ÿ“™Ÿ–™ ˜–š–““‰Š•……œ{vŠXQ‡QH\T‹YPƒMD€G?€IA‚KA…OFJBƒLB‡SJ…QH„NE‡SJ‡SJ…OF„NEJB€E=~D:~C;}C9|B8|B8|A6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6|A6|A6|A6|A6|A6|A6|A6|A6}B7}B7z@6}B7E;€G?H@‚KC†PGŠYQ©Ž‰¶­¯¸²´½¸»¾¼ÀÀ½ÀÁÀ¿¼¼¾»»¿¹¸Á¸·Äº·Ä½»Å¿¾Å¿¾Æ¿½ÇÁ½ÉÄÁÈÅÂÈÅÁÉÇÁÌÈÂÏÌÅÑÎÇÒÏÈÔÐÊÑÏÉÑÍÇÎËÇÎÊÄËÈÄÇÄÀÇÄÀÈÃÀʼ̎ÏËÃÒËÁÏøÑŽÒÊÄÖÏÊØÒËÜÖÐÞÚÒáÛÕßÛÓàÜÔßÛÓÜØÐÙÓÍÚÔÎÙÓÍÕÏÉÍÍÄÎËÄËÈÁÎËÄÎËÄÐÍÆÎËÄÉÅ¿ÇÁ»É¿¹ÍýÎľÏĽÒÊÁÙÓÍ×ÓÍØÔÌ×ÓËØÔÌØÓÊÖÒÊØÔÌÜØÐáÞÚÜÜÙ¼ÂɲºÃ°¸Á±¹¿¼ÂÈÍÐÐÎÑÑÁÉÌÁËÎÇÍÎÃÊ̺ÄʹÁʼÆ̽ÈÍ»Æ˾È˺ÅÊ»ÆͽÈ;ÈË¿ÇÊ¿ÉËÁÊËÀÊ̾ÈÊ¿ÉËÂÉËÃÊÌÈÎÏÊÏÏÊÏÏÊÍÐËÐÐÎÑÑÌÏÏÌÑÎÒÔÐÕÖÔÖØÔÚÛÖØÙÔÚÛÖÝÝ×ààÚâãÛâãÛâãÛâãÞâãÛàâÛàâÛâãÛàâÛâãÛàâÛâãÛâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝàâÛßáÚàáÜàáÜàáÙßàØÞàÙààÚàáÙàáÙÞàÙßàÛÞßÚÝÞÙÝÝ×ÚÛÖÕØÕÕ×ÖÑÔÔÍÓÑÌÒÐÉÐÏÈÏÎÇÍÎÃÌÍÅÍÍÄÍÎÄÌÌÃËËÅÎÏÂÍÍÃÌÍÃÍÏ¿Ì̽È˺ÅȹÃÆ»ÂÇ·¾Ã´¼Â²½Âµ½Ãµ½Ã¶½Â¹¿Ã¹¿Ã¹ÀºÃĻĿÂýÃÄ¿ÆÅÃÆÆÈÉÊÈËËËÎËÎÏÍÎÏÍÍÐÍÏÑÍÐÒÎÐÑÏÏÐÎÑÑÎÐÑÏÍÎÌÍÏËÍÎÌÍÎÌÍÎÌËÌÊËÎËËÏÉÌÏÌÌÎÍÍÍÍÌÌÌÊÌËÈÊÉÁÇÅ¿ÆÅÂÇÄÆÉÉÊÌËÊËÉÊÈÅÉÄÁÉ¿¼Çº´Å·³Ã³­¿«¥·”²“‹¥~v_W„KC€G?~D:|A6|A6|A6|A6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6{@8xA9wA:u@:sB<oB<kD?hEBeFC_FE\GGWGJSHKPHKMIOKJOJJPHLRFLRFLSFLSFMUFMUDLRDLRFMUFMUFLSFLSFLRHLRJJPKJOMIOPHKSHKWGJ\FG^EDdEBgDAkD?oB<sA:u@:wA:xA9{@8z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6}C9€IAˆVMŽbY’mg–ur—~{˜ŠŒ–“—’–˜••˜••š“‘œ‘Œœ‰œŽŠœŒ†‹…œŠ„œ‰„‰ƒžŠ„žŠ„†œ€z—tl“ld—qjšxo{tœ{vŸzžƒ{ƒ} „~¦Œ†¬•¯™°¥¢³¬ª²±°¬±´¡©¯”¢«Š™¥‡˜¤¨™§°¥±¹³»Á¿ÅÉ¿Å̼ÂɺÁË·¾Æ¸¿Ç¹¿Æ»ÁȽÄÉ¿ÆË¿ÆË¿ÈÉ¿ÇʾÈÊ»ÅȵÀÅ®ºÀ¬·º«¶¹¨³¶¦±´¡¬¯œª«š§ª˜¦ª–£©‘Ÿ¨ˆ˜£‘Ÿ}›~Žœƒˆ“‰”ž‹•ž•žŽ–ŸŽ–¡•ž•œ–•œ‘™Œ‘š““™’”šŽ‘˜‰‘—Œ“›–”œ“•›•’•—ŒŒ“ƒ†}~Žxxol†UM€G?F>E;|B8z@6zA9|A6|B8zA9|B8}C9}C9}C9E;F>F>F>F>|A6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6z@6~B9~B9~B9~B9~B9~B9~B9~B9C:C:~B9~C8‚IAŠTKZR“d\™nf£€x·ªªÁ¿ÅÂÀÄÄÁÄÉÄÇÅÂÅÆÁÄÁ»ºÁ¹¹Ä»ºÇ¾½ÉÀ¿ÈÁ¿ÊÀ½ÌľÊĽÊľÎÊÄÍËÅÎËÄÒÏÈÕÏÉÖÓÌ×ÔÍ×ÔÍÕÒËÒÏÈÑÎÇÏÌÅÏÍÇÍËÅËÇÁÇÄÀÊľÎÈÁÕÑËÖÒÌÕÑÉÓÏÇÕÏÉÙÕÏÝ×ÑÞØÑàÚÔàÛÒàÛÒßÛÓàÚÓÝ×ÑÜÖÐÖÐÊÖÐÊÑÍÇÐÊÄÊÇÀÊľÌÈÂËÈÁËžÉÅ¿ÊÅÂÉÅ¿ÈľÊĽÍýÍżÎüÑÊÂÖÑÎ×ÒÏÕÏÉÓËÂÕÐÇ×ÐÆÕÑÉÚÔÎÜØÐÞÚÒÝ×ÑÝ×ÑØÕÑÉÊ˾ÄÈÈÍÍÑÔÔËÐÓ¿ÉÌÄËÍÊÏÒÄËͺÂȹÃɽÅ˼ÄʼÄʾÈ˾È˺Æ̾Æ̾ÆÌ¿ÉËÁÊËÁÉÌÂËÌÁÊËÀÉÊÂÉËÂËÌÇÌÏÊÍÐÉÎÎÊÍÐËÎÑÏÒÒÏÔÑÐÓÐÖ×ÕÚÚ×ÛÛØÛÜ×ÚÛÖÜÝØßßÙàáÙâãÛãäÜâãÞâãÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝáâÝàâÛàâÛßáÚßáÚßáÚàáÜàáÜàáÜàáÙÞàÙÞàÙàáÜàáÙßáÚàáÜÞàÙÞßÚÞßÚÜÝØØÙ×Õ×ÖÑÔÔÌÒÐËÒÑÈÐÐÆÍÏÂËÌÃÌÍÄÍÎÂÊÍÂËÌÁÊËÃÌÍÂÌοÌÌ¿Ê;ÉÌ»Æ˸ÃƹÃƹÀÅ·¿Å´¼Â´¼Âµ½Ã´¼Â¶½Â¹¿Ã¹À»ÃûÄŽÅżÄĽÅžÅÄÂÅÅÆÉÉÈËËËÍÌÌÏÌÎÏÍÌÏÌÍÏÎÏÑÍÎÐÌÏÏÌÐÐÍÐÑÏÐÐÍÎÐÌÍÎÌÎÏÍÎÏÍÍÎÌÎÏÍÎÐÌÏÐÎÍÏÎËÌÍÈÉÊÉËÊÇÊÊÂÇÄÂÇÇÂÈÆÈËËÉÌÌÌÌÌËÉÇÉÄÁÊÄÀȾ¸È¼¶Ä¶²À®¨¼¦¸ž˜°‡qhŒYNƒJB€F<D9~B9}A8~B9~B9}A8}A8}A8}A8}A8}A8~B9~B9}A8z@6y@8xA9vB9sA:oB<kD?gDAdFE^FFZHIUHKQHMNIMKJOIKQFLRFLSELQDLRCMSCMSDLUBMTBMTBMTBMTDLUCMSCMSDLRELQFLSFLRIKQKJONIMQHMUHKYGH]GGcEDgDAkD?oB<sA:vB9xA9y@8z@6}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8E;„NE‰ZRŽd]‘nh”sp‘yy“‚„”‡Š˜‹‹™›’‘’œŽŠŽ‰œŒ†žŠ„ˆ‚…ž‚|œ~w›|tš|u˜yq”lc‰VNˆTK‘c\—ph˜qi˜qi›xp›|tœ}u{t¢|¦ˆ«ˆ­—“°žš³©¦±°¯¬±´§¯µ ¬´«´¢¯µ¤°¶²¼ÂÁÇËÃÆʽÁɸ¾Å·¾È´¼Åµ¼Ä·¾Æ·¾Èµ¼Ä¹ÀÈ»ÂÊ»ÃɼÁÊ»ÂǹÀŹ¿Ã¶½Â²¼¿²º½±¸º¬µ¶¨±²¦¯°£­¯Ÿª­˜¦ª’¡¦Šš£…”žŽš~™Žš…‘œ‡’œ‡œ‰’ž‰’žŠ’›‰šŠ’ˆ›‰š‡Ž˜†Ž™Œ–ŽŽ”‹™ˆ–Š‘›•œ’–’’•‡‰”‘yysq‹pmˆfd‡\T…OF~E=~C8~B9}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8~B9D9~C;C:}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A8}A5}A5}A5}A5}A5}A5}A5}A5~B6~B6~D:H@‰VK•g`žvmª‹ƒ²š”¸ª©Á¾ÁÊÈÉÎËËÐÍÍÐÍÍËÆÉĿ½ÀÃÀÀÄ¿¿ÆÀÂÊÄÃÍÅ¿ÏÅ¿ÐÈ¿ÏÈÀÏÉÅÔÐÊÖÒÌÛÕÏÛ×ÏÞØÒÝ×ÑÛÕÏ×ÔÍÖÓÌ×ÔÍÖÒÌÐÎÈÐÎÈÏÍÇÍÊÃÉÇÁÍËÅÔÐÊÖÐÊÖÓÌØÒÌØÔÌÚ×ÐÞØÒÞØÑáÛÕàÜÔàÛÒàÛÒàÜÔàÚÓßÙÒÝ×ÑØÒÌÐÊÄÍÊÃÊĽ˽´Ê¿¸É½ÊÇÀÊľÊľÉÅ¿ÉÅ¿ÉÅ¿ËÅ¿ËļÌÄ»ÍýÏÈÀÔÍÈÔÎÇÓÉÀÓÉÀÒÊ¿ÕÍÄÙÓÍÙÕÍÚÔÎÙÑËÔŻн±ÒÁµÔÌÃÐÎËÎÑÑÏÒÒÈÍÐÉÏÐÐÓÓËÐÐÁÇË»ÃɼÂɼÂɽÄɾÈË¿ÇʽÅ˸ÃÈ»ÃɽÄÉ¿ÈÉ¿ÇÊÁÉÌÄÍÎÄÍÎÃËËÂËÌÂÉËÄËÍÇÌÏÉÎÎËÎÑÌÑÑÐÓÓÓÕÔÕÖÔ×ØÖÚÚ×ÚÛÖÜÜÖÝÝ×ÞÞØàáÙáâÚàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÚáâÚßáÚßáÚàáÜßáÚàáÜàáÜàáÜßáÚßáÚßáÚßáÚßáÚÞàÙààÚßàÛÞßÚÜÝØÚÛÖÖ×ÕÒÕÒÏÒÒÍÒÒÌÒÐÈÎÏÄÌÏÃËÎÃËÎÁËÎÁËÎÀÊÌ¿ÉË¿ÇÊ¿É̾ÉÌ»ÆË»ÈË·ÄÇ·ÃɵÀŵ¼Á¶½Âµ¼Áµ½Ãµ½Ãµ¼Á·¾À¸¿Á¹À¸¿ÁºÃÄ»ÃûÃÀ¼Ã½ÄÃÁÇÅÃÉÇÆÉÉÇÌÉËÌÊÎÏÍÎÏÍÎÏÍÎÐÌÍÎÌÏÐÎÏÏÌÐÐÍÑÑÎÏÐÎÏÏÌÍÎÉÍÍÊÎÏÊÏÐËÏÐÎÏÐÎÌÎÍÉÌÌÆÉÉÃÉÇÆÉÉÇÉÈÄÉÉÄÊÈÇÍËÊÏÌËÎËÊËÆÊÊÄÊÅÂÈÃÀɾ¹Å¸µÃ³­¿ª¤¼¥ µ™§€x–g]ˆQGG=E;}B7|A6|A6|A6}B7|A6}B7|A6|A6~C8€F<€F<~C8zA9xA9vB9uB:oB<mC?gECbEE^HHYHJTILPJMLJPIKQHLRFLSDLRCMSBMTBMTAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUBMTBMTCMSDLRFLSFLRIKQLJPOILSHKYGH]GGbEEgECmC?oB<uB:vB9xA9zA9|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6}C9€G?ƒPE†XQŠ`Ygcnk‘vs‘{z’€•ƒ—†…™Œ‰œŽŠœˆ Œ†Ÿ‡Ÿ„|ƒ}€zšxq–og’d[‘cZŒZQ‚KCE;€F<ˆUJ•i`•kb•i`–ne˜rk›ul˜ri›tlwpŸyr£‚}¨Œ†­–‘±£¢±®®¯±´®´¸©´¹¬·¾®¸¾µ¼ÄÁÇÍÂÆÌ»Áȶ½Å´¼Å³»Ä³»Ä³ºÄ±»Ä°¸Á³ºÂ³ºÂ³ºÂ³»Ä²¹Ã±·¾²·º¸»¿º»¼º¼¾·º½±¸·¬³²«²±§°±£­¯›¨«—¤ªž§‡–ž‡“ž‚›ŽšŽš‚š‚—ƒŽ˜„™„™„Ž—†Ž—…–…–…–ƒ–ƒŽ•…–…–…˜‰˜‹Ž•ŠŽ’„†~xv‹roŠmj‰fa…_[ƒYR„RIH@~D:}B7|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6}B7}B7}B7|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6|A6A8A8A8A8A8A8A8C7A8D9ƒI?ŒZQ¤~w®“‹´˜·¤¡»­¬¼º¾ÅÅËÌËÍÒÐÎÔÒÐÏÍËÆÁÄÄ¿ÂÆÁÄÅ¿ÁÆ¿½ÊþÌÇÄÏÉÂÔÉÂÖÌÃÕÏÈÓÏÉÖÒÌÚÖÐÞØÒßÙÓßÙÓÜÙÒ×ÑË×ÓÍØÔÎØÕÎØÕÎÓÐÌÐÎÈÏÌÅÌÉÂÌÉÂÐÌÆÐÌÄÑÌÃÔÍÃÕÑËÚ×ÐÝÚÓßÜÕßÜÕßÛÓàÜÔàÜÔàÜÔàÛÒßÙÓÞÚÒÝ×ÑØÒÌÒÌÆÍÇÁËļʼɽÊÄÀËÈÁÊÇÀÊÆÀÊÇÃÌÉÅÌÈÂÉÅ¿ËļËļÌÄ»ÏżÑǾÐƽÐÈ¿ÒÊÁÓÉÀÕÏÈØÒÌÔÐÈÔÍÅÑúÑÁ¸Ì·«Êµ©Ð½³ÕÏÈÖÔÑÐÐÐÃÉÊËÍÌÏÐÎÊÌËÀÆÊÀÆʾÄÈ»ÁȾÄËÀÆʾÅÊ»ÂʸÀƺÁÆ»ÅȽÅ˾ÈËÂÊÍÄÌÏÃÌÍÂËÌ¿ÉËÂÊÊÂËÌÆÍÏÉÏÐËÐÐÏÑÓÑÔÔÓÖÓÔÕÓÖÖÓØÙ××ØÓØØÒÛÛÕßßÙßáÚßáÚáâÝáâÝáâÝáâÝáâÝàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝàâÛáâÝáâÝáâÝáâÝáâÚßáÚßáÚßáÚàáÜàáÜàáÜßáÚßáÚßáÚßáÚßáÚßáÚÞàÙÞàÙÞàÙßßÙÜÜÖÙÚØÕÖÔÒÕÒÎÑÎËÐÍÌÒÐÈÍÍÄÊËÄÌÌÁÉÌ¿É̾È˽È;ÅʽÄÉ»ÅÈ»ÅȺÅʸÄÊ·ÄÇ·ÂɶÀƳº¿²¹¾³»Á´¼Â³½À³½Àµ¼Á¸¾Â·¾À·¾ÀºÁûÃûÄ¼ÄľÅÄ¿ÈÆÀÈÅÂÈÆÈÉÊÊÌËÍÎÌÍÎÌÍÎÌÎÏÍÎÏÍÎÐÌÏÐÎÎÏÍÎÏÍÎÏÍÏÐÎÏÏÌÎÏÊÍÎÉÎÏÊÏÐÎÌÍËÈËÈÈÊÉÇÉÈÈÊÉÆÉÉÇÉÈÈËÈÈËÈÉÎËÌÏÌÌÏÌËÌÇÊÊÄÇÈÃÉÅ¿Ä¿¼Ç½ºÄ·´Á¯©½¨¢·œ’¬†}škaˆRIƒI?F;€E:C7C7~B6~B6}A5~B6~B6~D:ƒJB‹XM‹ULJBzC;yB8vB9qC<pGAkHEdFE^HHZIKTILPKOKJOHJPFLRDLRCMSBMT@LTAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMU@LTBMTCMSDLRFLRHJPKJOOJNSIJXHH]GGdFEhE@nC>qC<vB9yB8y@8|A6}A5}A5}A5}A5}A5}A5}A5}A5}A5D9G=‚LE†SKˆZS‹`XgcŽmjrouuxx‘~{•‚™†›‡‚zœzsœ}u›|t˜ri•i`ŒZQ…NDƒK@€F<}B7}A5‚H>^V–lc—kb•g^`V“dZ–lc—i`•eZ‘bX•g^™rjœxo¢€y§‹­žœ®¤¥°­­°³·³¹À¶½Â¹ÀÊ»Àɺ¿È·¾Èµ¼Ä±¹Â²¹Á²¹Á°¸Ã¯¹Â°ºÃ³ºÂ±¹¿¯·À®µ½¬³½®´º¯±´²°±¶±±»¶¶º¸¶¶¸·°µ²­³±«²±¥®¯Ÿ©¬˜¤ª“Ÿ¥™¡‹™¢ˆ–Ÿ‚‘~™}‰—|‡–}†’Š”ƒ‹”„Œ•‡”ƒ‹”Œ–ƒ–Œ–‚Œ•€‹•„Œ•…Œ”†Š’‰‡ŠƒŒ||‹vv‰po‡li†eb„_\ƒXP‚SKƒLBG=€F<~C8}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5~B6~B6~B6~B6~B6~B6C7C7€E:„L@•d\¤}u¯’Œ¶ œ¹¬©»°­º°®»¸¸¿¿ÅÇÅÉËËËËÊÉÄÁÁÁ¾¾Ä¿ÂÆÀÂÅ¿¾É¿¼ÌľÏÉÂÓËÂ×ÍÄÚÓÎÛÕÏÛÕÏÚÔÎÜØÐÝ×ÑÝÚÓØÕÎÓÐÉÒÎÈÔÐÊÖÒÌÔÑÊÓÐÉÐÌÆÌÊÄÎËÄÎÊÄÍÊÃÎËÄÐÌÄÑÌÃÓËÀ×ÑËÜØÐàÚÔßÜÕßÜÕàÜÔàÜÔßÛÓÞÙÍÜÕÍÞØÒÜØÐØÕÎÙÓÍÐÊÄÊľÊĽÊľÊÇÀÊÇÀËÈÁÊÇÃÈÅÁÌÉÅÍËÈÊÊÄÊÆÀÊĽÊĽÌŽÎƽÑÊÀÏÉÂÒÌÆÓÏÉÑÌÃÕÏÉÖÐÊÔÎÇÑǾÐÁ·Î¾µÐ¾µË·¬Íº°ÑúÒËÃÐËÈÊÊÇÈÇÆÉÉÉÆÉÉÂÇÊ»ÁǶ½Â»ÁÇ»ÁÈ»ÂʺÁƼÂƸÀùÁÄ»ÂǽÇʾÈ˾ÉÎÂÊÍÂÉ˾ÉɼÉÉ¿ÉË¿ÉËÃÌÍÆÎÎÊÐÑÍÒÒÎÓÐÓÔÒÔ×ÔÖÖÓÕÖÔÖ×Õ×ØÓÙÚÕÝÞÙßáÚáâÚàâÛáâÝáâÝâãÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝàâÛàâÛáâÝáâÝáâÝáâÚáâÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚààÚÜÜÖÛÛØ×Ú×ÖÚÔÒÕÒÍÒÎÍÓÑËÑÏÇÎÍÃË˾ÉÉÀÉʽÇʽÈÍ»ÅË»Å˸ÃʸÃȸÃȶÁƶÁÆ´¿Ä¶¾Ä´»À²¹¾²¹¾³¹½´¼¿³½À¶¾Á¸¾Â¸¾Â¹À¸¾¿¸ÀÀ»ÃûĻĽÄþÇÅÂÉÈÆÉÉÉËÊÉÊÈÉËÇÌÍÈÎÏÊÍÍÊÍÎÌÍÎÌÍÎÌÍÎÌÎÏÍÍÎÌÎÏÊÏÐËÍÏÉÎÐÌÎÐÌÎÏÍÌÍËÉÌÉÅÊÇÈËÈÉÌÉÊËÉÊÌÈÊÍÊÌÏÌÍÐÍÍÏËËÍÉÊÌÈÊÈÅÇÅÂÅ¿ƿ½Äº·Á²­¾«¤¹¢š­„˜ia‰RH‚H>‚H>‚H>‚H>€E:~C8~B6~B6~C8€E:‚H>‹WK–ha–haˆUJ~G=wC:sB<nC>mJEjOL^HHXHHTILPKOLLRIMSFLSCMSBMTAMU@LTAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMUAMU@LT@LTBMTCMSFLSFLRJJPNIMTILXHH]GGeFCiDAnC>sB<wC:zB7zA9}A5}A5}A5}A5}A5}A5}A5}A5}A5~B6E;€G?‚NE…SJ‡XP‰^Vˆb^†dbˆhh‹pmŽtp‘ws–{v—zt˜rk—ph˜qi–ja\T‰SJƒI?D9~B6}A5}A5}A5€E:†OE‘`X‘bZ^V^U^V“dZŽ\S‰UI‰SJŽ^S”f_“h`”ng˜vož‚|¢Š¦—•¬£¥¯­±±±·³µ¾®³¼¯¶À±¸Â°¸Á°¸Á¯·½±¸À¯·Â°¸Á°¸Á±¹Â±¹Â¯·À­´¼­´¼®²¸°®²²¯¯³¬ª³­©¸±¯¸µ²µ¶´²´°­³±«°°¥¬®œ§ª–¢¨œ¢Œš£Œ˜ ˆ”œ€Ž—}ˆ•{†’|…‘ˆ„Š‰“Š”†Œ’ƒ‹”‚Š“~‰“Š”€‰•‚†‘‚„‚~†„{€†xzˆss‡nm‡he„b`ƒ]Y‚XQ€RKMF€I?E;~C8}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5}A5€B6€B6€B6€B6€B6€B6€B6€D8†K@‘]Q™ma¥v°’‰´•¹«§¹ª¥º¨¢¹©£½¶´¿¾ÃÁÀž½¿½½½¾¾¾À¾¿ÃÀÀÉÄÁËÄ¿ÍÇÁÐÊÃÔÍÃÚÔÍÝ×ÑÞØÑßÙÓÞØÒÝÙÑÜÙÒÙÖÏÓÍÇÏÌÅÒÎÈÔÐÊÕÑËÖÐÊÒÏÈÏÌÅËÇ¿ÌǾÌÈÀÍÉÃÎÊÄÐÊÄÒËÁÔÌÁØÑÉÜÖÐßÜÕßÜÕàÝÖßÜÕßÛÓÛÖÍÚÒÇØÑÇØÔÌÙÖÏÚÖÎÖÓÌÏËÃÉÅ¿ÉÅ¿ÊÇÃÍÊÃÍÊÃÊÇÀÊÇÀÉÅ¿ÊÇÃÊÅÂËÇÁÊľÊľÊĽÊĽÏÉÂÒÌÆÑÎÇÑÏÉÒÏÈÒÎÆÐÌÄÓÏÇÓÌÂÑǾÑǾÒÄ»ÒÄ»ÒÄ»ÒÄ»ÒÈ¿ÐËÈÍËÉÊÉÈÄÆÉ¿ÅɾÄÈÂÅȽŸ¾Å¹¿Æ³»Ä¸¾Å·¾Ã»ÁźÁÆ»ÂǼÃȼÄÊ»Æ˾ÈË¿ÉËÀÉÊ¿ÈɼÉÉ¿ÈÉÀÉÊÀÊÌÅÍÍÉÐÏÌÒÐÎÓÐÐÓÐÓÖÓÕ×ÓÔÖÒÔÖÒ×ØÓÚÛÖÞßÚàáÙáâÚáâÚáâÚâãÛâãÞâãÛâãÛàâÛàâÛàâÛàâÛàâÛâãÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÚáâÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚßáÚáâÚáâÚáâÚàáÜÞàÙÞàÙÞßÚÚÛÖØÚÖ×ÛÕÔØÒÐÔÎÍÒÏÌÒÐÇÎÍÃË˾ÈʾÈʼÇǺÅʺÄʹÃɶÀƵÁÇ·ÁǵÀǶÀƱ½Ã³»Á³º¿²¹¾³º¿±¸º³»¾³½À¶½Â¸¾Â¸¿Á¸¿Á·¾ÀºÀÁ¼ÂûÂÁ»ÃýÅžÆÃÀÈÅÃÈÈÂÇÄÊÊÊÌÍËÍÎÌÌÎÊÌÍËÍÍÊÌÍËÌÍËÍÎÌÍÏËÌÎÊÍÎÉÌÎÈÌÎÈÍÏËÍÎÌÍÎÌÌÍËÊÌËÉËÊÇÊÇÇÊÇÌÍËËÎËÍÐÍÎÏÍÍÏËÌÏÌËÎËÈËÈÆÉÉÃÆÆÂÂÂÃÀ½Ã»¸Á¶³À²®¼¬¦±“Œšl`‹TJƒK?„I>…J?…KA„L@I=G=‚G<ƒK?ˆPE‰UI’`W›tl›tlŽ_U€NEvG?qD>mGClOLgQP]KLSIJPKOJLOHLRELQCMSBMTAMUAMU@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LTBMTCMSELTFLRJJPNIMSIJZHI^FFfEBjD@pC=tB;xB9zA9}B7}A5A5A5A5A5A5A5A5A5A8€E:€G?ƒLB„RI…VN‚WQ…ZTˆ^WŠd`hbga‘f^‘cZ^VŽ[PŒXL‡PFƒH=F;C7A5€B6A5A5A5A5€D8„I>‡PCŒYNŒYN“cX”e[ŒYN…NA…NA‰UIŒXLŒ[S‘cZ”ia•qh™zu›}ž‹ˆ£””¦›ž©£¦¨¦ª¨¨®«®²­±¹®´º°¶º®¶¼®¶¿®¶¿®¶¿±¹Â¯¹Â¯·À¬¶¼«³¹­²µ¯®°±¬¬±ª¨²¨¥´ª§¹²­¸µ±¶´²´´±°²±¨­­Ÿ¨©–¢¨œ¢‹—Ÿ‹—Ÿ‰•…š€Š“}…~…ƒ‰ŠŒŽŒŒŒŽ‹‹‘†Œ’‰’‰’~†‘}„Ž~~‡z€ux‚ss‚mm…jj†d`ƒ`[ZU‚UO‚QI€MB€H=€F<C7A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5€B6€B6€B6€B6€B6€B6C7„I>ŠRGYM˜i_©†|´œ“µ›’¸£»¨¡ºª¤º«£½µ²¾¼À¾¾Á½¼¾½¼¾¾½¼Á¿ÀÊÇÃÐÍÉÓÐÉÓÐÉÒÎÆ×ÓËÝ×ÑßÙÓÝÚÓßÙÓÞÚÒÜÙÒÙÖÏÓÐÉÑÎÊÐÎÈÐÎÈÑÎÊÔÐÊÓÑËÐÍÆÏÌÅÍÈ¿ÏÉÃÎÊÄÎËÇÑÍÇÓÍÇÖÑÈÙÒÊÝØÏàÚÔàÝÖàÝÖàÝÖáÛÕÝØÏÛÓÈØÏÃ×ÐÆÓÏÇÔÑÊ×ÔÍÏÌÅÊÇÀÈžËÈÁÏÌÅÏÌÅÎËÄÌÉÂÊÇÀÈžÉÇÁÊÇÀËÈÁÊÇÀÉÅ¿ÊľÊľÏÉÃÐÍÆÐÍÆÏËÃÓÐÉÒÏÈÐÌÄÍËÂÑÌÀÑÊÂÒËÁÒËÁÒÈ¿ÒËÃÓÌÄÐÌÆÊÊÊÇÈÉÃÆÊÃÆÊÂÇÊÂÇÊÄÇÊ¿ÅÉ·¾Æ´¼Å³½Ã´¼Å¸¾Å¹¿Æ¸¿Ä¹ÀȹÃƼÆɽÇÊ»Æ˾È˾ÆɽÇÊ¿ÈÉ¿ÆÈÀÇÉÂÊÊÄËÍÈÏÎÊÐÎÌÒÐÏÔÑÎÓÐÑÖÒÓÖÓÓÕÑÔÕÓØÙÔÝÞÙààÚàáÙáâÚáâÝâãÛâãÞâãÞâãÛàâÛàâÛàâÛâãÛâãÛâãÛâãÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÚáâÝáâÝßáÚßáÚßáÚßáÚßáÚßáÚáâÚáâÚàáÙàáÙßàØßàÛÝÝ×ÜÝØÙÛ×ÖØÔÓ×ÑÓ×ÑÑÔÑÎÓÐÊÐÎÇÍοÉ˼ÆÉ»ÆɹÄÉ·ÂÇ·ÁÇ´¿Æ±¼Ã±¼Ã³¾Å²½Ä°»À¯·½±¹¿¯·½±¹¿±»¾²¹»³½Àµ½À¶½¿¸¿Á·¾À¸¿Á¸¿Á¹À¹ÀºÁýÅŽÄþÅÄÀÅÅÅÈÈÆÈÇÊÌËÌÍËÌÍËÌÍËÌÍËËÌÊËÍÉÍÎÌÍÎÉËÌÇÌÍÈÌÍÈËÍÇËÌÇÌÎÊÍÎÌÌÍËÌÌÌÉËÊÇÌÉÉÌÉÊÍÊËÎËÍÐÍÍÐÍËÐÌÊÏËÉÌÉÇÊÊÃÈÈÂÅÅÀÀÃÀÀÀÀ½ºÀ¹·Àµ²¼®ª´š”ŸulŽ[N†OBƒK?…J?ƒK?ˆRFYM‹WKˆQDŒXL]R“cX—la zqŸ{r”lc‡[R{PHsMFoPKmVTgVU]RRQKNMLQHLRFMRDNTCNUAMUAMUAMU@LT@LTAMUAMUAMU@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LTBMTCMSELTGKQJJPOILUHK[HHbGDhE@mD>rC;wC:yB8}B7}B7~B6C7‚F:‚H<‚F:C7~B6~B6~B6~B6E9€H<€JANC€QIƒUL‡VN‰XP‰VK‡SG…OCI=ƒH=‚G<‚F:€D8C7~B6C7~B6~B6~B6~B6~B6~B6~B6~B6€D8‚G<ˆRF“cX•i]‘aV‰SG„L@„LA…OCˆTH‹YPŽ_U’f]“mf•sl—yu™€}œ‡‡¤“’£•”¦››§ŸŸ©¤§«ª¬®°²®±µ®´»¯¶¾®¸Á±¹Â²ºÅ¯·Â­µÀ­´¾®²¸®±µ°®¯°ª©°¨¥²§¢·¬§¸¬¦¸°­·²¯´²°¯°®©¬¬ž¦©• ¥‘œ¡‘›¡Ž™ Š’›…‹’‚ˆƒ‰ˆ‹ŠŒŒŽŒŒ‰‹Ž…‰ƒ…‹‡{z‚}u{~sv~nniiec€a^\V€WQ€SM€OGKB€H=~F:€D8~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6~B6A5A5A5A5A5A5€D8†NBŠSF‘_S™i^«‰€¸¥ ¹¦Ÿ·¡˜¹£š»­¦½³°¼º¾¾½Â¼»½¿¼¼¿½¾ÄÁÁÍÈÅÔÐÊØÔÎÚ×ÐÛÕÏ×ÑËÙÖÏÝÚÓÞÛÔÛØÑÜÙÒÛØÑØÕÎÔÑÊÒÏÈÑÏÉÐÊÄÏÌÅÐÊÄÐÌÆÒÐÊÓÐÉÓÏÉÒÎÈÐÍÉÐÍÉÓÏÉ×ÑËÛØÑÞØÒßÙÓàÚÔàÝÖàÝÖáÛÕâÜÖßÙÒÛÔÊÚÒÇÕÎÄÔÌÁÒÍÄÐÊÃÏÉÂÌÆÀÊľÌÉÂÎËÄÐÍÆÏÌÅÎËÄÍÊÃÍÊÃÍÊÃÍÊÃÌÉÂÍÊÃËÉÃÉÅ¿ÇÁ½ÉýÌÈÀÏÊÁÏÉÃÐÍÆÑÎÇÐÍÆÎÊ¿ÑÊÀÒËÁÒÌÅÑËÅÒÎÆÑÎÇÓÍÇÑÎÇÎÌÉÅÆǽÁǽÁÇÂÅÉÃÆÉÄÇÊÄÉÉÃÈ˾ÄÈ»ÁÈ·¾Æ¸¿Ä¸¿Ä¶¾Ä¸ÀƸÂŹÃƼÄǺÅʹÄɽÇʾÈʽÈȾÆÉ¿ÈÉ¿ÈÉÀÉÊÁÊËÆÎÎÉÐÏÊÑÐËÒÑÊÐÎËÑÎÏÔÑÔÕÓÔÕÓ×ØÓÚÛÖÞÞØÞàÙâãÛãäÜãäÜâãÛâãÞâãÛàâÛàâÛàâÛâãÛâãÛâãÛâãÛâãÛâãÛàâÛáâÝàâÛàâÛáâÝáâÝàâÛâãÛâãÛâãÞâãÞâãÞâãÛáâÝßáÚàáÙßáÚáâÝàáÜàáÙàáÙÞßÚÞß×ÝÞÙÛÝÖÛÜ×ÙÚÕÓÖÓÓ×ÑÒÖÐÒÖÐÎÓÏËÑÏÇÎÍÀÉʼÆɺÄÇ·ÂÇ·Ádz¾Å²ºÃ²ºÃ°¸¾±¹¿°ºÀ°¸¾¯¶¸®¶¼®¶¼¯¹¼®¶¹¯·º³º¿µ¼Á·½Á¸¿Á¹À¹À¸¾¿¹À¿»Á¹À»ÂļÄĽÃÄ¿ÅÃÂÈÆÆÈÇÈÉÊÈÉÇÉÊÈËËËÌÍËËÌÊËÍÉÌÍËÌÍÈÌÍÈÌÍÈÊËÆËÌÇÌÍÈËÍÉËÌÊËÌÊÌÍËÊÍÊÈËÈÈËÈÊÍÊÊÍÊËÎËËÎËÌÏÌÉÎËÈËÈÂÇÄÀÆÇ¿Áþ¾Á¿¿¿¾¼ºÀº¹¿¶µ½¯«¶›“¤|p•eYŒVJ‡OD„J>†NBYM”bY’`W]R•eZ˜i_ul£€x¤ƒ~£‚}|w’og‡d_}^Yv\XjXVfXZ\VXOORIMSFMREMSDOVAMUAMUAMUAMU@LTAMUBNVBNV@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LTALSCMSELTGKQKJOPJMWGJ\GGbEBhE?oD<tC;xB9{C8D9ƒG;„L@ˆPD‰QC‰QC„J>ƒG;C7A5A5A5€D8€F<I>KB‚OD…NDƒK?†NB†NCƒI=C7€B6A5A5€B6A5A5A5A5A5A5A5A5A5€B6A5A5E9†NC”bY–j^’bWŠSF‚G<‚G<‚J>…NA‡SGŠWL]RcZ‘jb’mg”sn–xtœ~Ÿ„Ÿ‰…¡Ž‹¥–”¨¨¡¢«¦©©«®«¯µ­³º°·Á³ºÂ±¸Â°¸Ã­·À®µ¿­³¹¯±´±®®±§¤¯¡²£ž² š³¤Ÿ¸­¨·°«³®«±®«¬¬¬¤©© ¦§ž£¦› £–˜›ŒŽŠŠ‹ŠŒŒŽŒŽŽŒ’‹Œ“Š‰ˆ‰‰ƒ…ƒ}€w}~tx}oq{ij|dd}``}\Y|YS~TMQH~MEI@€H<€E:C7A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5€B6€B6€B6€B6€B6€B6E6†NB‹SE”dXšnb®Žƒ¸ª©»®«ºª¤¹£š¸¦¼¯¬¿¼¿¾½Â¾¼½À¾¿ÈÂÄÍÊÇÔÏÌÚÔÎÝ×ÐÞØÑÝ×ÐÛ×ÏÛØÑÝÚÓßÙÓÛØÑÙÖÏØÔÌÔÑÊÒÏÈÒÏÈÐÎÈÐÌÆÏÌÅÐÊÄÎÌÆÒÏËÒÏËÓÐÉÓÐÌÓÏÉÕÑËÓÐÉ×ÑËÛØÑßÙÓáÛÕáÛÕàÝÖâÜÖáÛÔàÚÓÞØÒÛÖÍÙÕÍÖÐÊÑÊÂÏȾÎǽËÅÁÌÈÂËÈÁÍÊÃÍÊÃÎËÄÌÉÂÊÈÂÍÊÃÌÉÂÍÊÃÌÉÂÍÊÃÍÊÃËÉÃÉÅ¿ÇýÈÀºÈÁ¼ÌÈÀÏÉÃÍÊÃÐÍÆÎËÄÐÍÆÒÏÈÓÐÉÓÐÌÑÏÉÒÏËÑÏÌÐÎËÎÎÈÉÊÈÄÆÈÀÃÇ¿ÄǾÁÅÀÃÆ¿ÅÉÁÆÉÀÄʼÂÈ»ÁÇ·½Ä¶ÀùÀÅ·¾Ã¹ÀŶ¾Ä·ÁÄ»ÅȽÅȼÆɽÇʾÈÊÀÇÉ¿ÈÉ¿ÈÉ¿ÈÉÂÈÉÁÉÉÀÊÌÄÍÎÄÌÌÆÎÎÇÏÏÊÐÎÏÒÏÑÔÑÔÖÒØÙÔÚÚÔÝÞÙÞàÙáâÚáâÚâãÛâãÛâãÛâãÛâãÛàâÛâãÛâãÛâãÛâãÛâãÛàâÛàâÛàâÛàâÛàâÛàâÛáâÝáâÝàâÛâãÞâãÛâãÛâãÞâãÞâãÛáâÝàáÙßàØàáÜßáÚàáÙààÚààÚÞßÚÜÝØÜÝØÛÝÖÚÛÖ×ÙÕÕ×ÓÒÖÐÑÕÏÎÓÏÍÒÏÊÐÎÆÍÌ¿É˽È˹ÄÉ·¿Åµ¿Å±¼Ã­¹Á­¸¿­·½°·¿­´¹¬´º­´¹«³¹­´¹¯¶»®¶¹­µ¸±·»µ¼¾¶½¿¶½¿¹À¸¿Á¶¾¾¸¾¿ºÀÁºÀÁºÁÀ»ÃýÃľÅľÅÄÂÇÇÄÇÇÇÉÈÊÊÊÊÊÊËËËÊËÉËÌÊÊÌÈÈÉÄÊËÆÌÍÈËÌÇÌÍÈÍÎÉÍÎÉÌÎÊËÌÊËÍÉÊÎÈÈÌÆÇÊÇÉÌÉÈËÈËÌÊÊÍÊÉÎËÊÌËÆÉÆÂÇǾÅǽÃÄ»ÀÀ¼½¾¼»½¾¹¹¿¶µ¼®ªµ›’ªƒy›oc“aUŒUH‰QFˆQDYM‘]Q“cW™j`›pe¡yp¦„}¨Š¨•’¦•”¤“’œ‹Š’}zŠuu~mlnaae\^^[^TW[OU[IQWEPWBNVAMU@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LT@LTBMTCMSFLSHJPMIOSIMZHI_GGfEBlF?sG>xG?H>ƒMA‡PC‹SHWK[O‘]QYMŠRD†K@ƒG;€D8C7A5C7€F:‚G<ƒG;‚F:E9E9‚F:€D8A5A5A5A5A5A5A5A5A5A5A5A5A5A5€B6€B6A5ƒG;‰RE\QŽ[P‹UI„L@€D8€B6ƒG;ƒI=†NC†RFˆVM‹[P_Ve^ke’mg”ql–tm˜{uœ€z†¡Œ‰£‘¥••¦œ¥¢¥¦¨««­³­°´¯²¹¯´½®µ¿¯³¾¯±·°®²°¨¨°žš¬•­•­•Œ¯•±›”³ž˜² š³¤Ÿ³©¦°­ª®¬ªª©¨¦¦£¡›š•Š’‹‰“ŒŠ“ŒŠ“ŒŠ“Š‰”†…”ƒ‚‘€~|z‰wu„rp€mm{efyaay^[{XU|UP|QI}OF|JCH>€F<E9C7A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5€B6€B6€B6€B6€B6C7E6†J>ˆPD“`Sqe¯“Š¶¡ž¸¨¢¹§¡º¦¹£š»®¨¼»½À¿ÁÁ¿ÀÈÅÅÎËÈÓÎË×ÓÍÜÖÐÞØÒÞØÑÞØÒÝÙÑÝ×ÑÞØÑÝ×ÐÚ×ÐØÒÌØÒÌÔÑÊÒÐÊÒÏÈÏÌÅÎÊÄÎÊÂÑËÅÑÏÉÑÎÊÐÎÈÒÎÈÐÌÆÒÎÈÖÒÌÔÐÊÐÎÈÒÍÊÚÔÎÞÛÔàÝÖßÜÕàÜÔáÛÕÞØÑÛÕÏÛÕÏÕÐÇÑËÄОÎƽÌŽËžÊÇÀËÈÁËÈÁÌÉÂÊÇÃÈÅÁÈÅÁÊÈÂÊÈÂÊÈÂËÈÁËÈÁÉÅ¿ÈÅÁÇýÇÁ½ÆÀºÅ¿¹ÉÅ¿ÌÈÂÎËÄÑÎÇÑÎÇÏÌÅÑÑËÑÒÍÑÒÍÎÏÍÍÎÌÎÏÍËÍÌÉËÊÄÆÈÀžÁŽÁÇ¿ÄÇÃÅȾÄÈ¿ÅɼÂȺÀƹ¿Ã¶¼Ã¹¿Ã»ÁźÀĹÀŹÀŹÁǺÄǼÆɾÈÊ¿ÈÉ¿ÈÉÀÈÈ¿ÆÈÂÈÉÁÇÈÂÊÊÃË˾ÉÉÂÊÊÁËÊÆÌÊÇÎÍÊÐÎÌÑÎÏÔÐÓÕÑÕ×ÓØÚÖÝÞÙßàÛàáÙàáÙáâÚáâÚâãÛáâÚáâÚàâÛâãÛâãÛâãÛâãÛâãÛàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝàâÛâãÛâãÛâãÛâãÛâãÛàâÛáâÚßàØàáÙàáÙàáÙÞàÙßàÛÞÞØÜÝØÚÜÕÚÜÕÙÚÕÖØÔÓÕÑÓÕÑÑÓÏÎÑÎÎÓÏËÑÏÇÍËÃËË¿É˽È˺ÅÊ´¿Ä²¼Â®ºÂ¬·¾¬´½¬´º«²·«±¸«²·«²·ª±¶ª²¸­´¹®µº¬³¸¯¹¼³»¾´¼¿¶½¿µ½Àµ½À¶½¿·½¾¸¿¾¹À¿ºÀÁ»ÃüÃ¾ÅľÄÂÀÈÅÃÉÇÅÊÇÆÈÄÉÊÈÉÊÈÈÉÄÉÊÈÇÈÆÉÊÈÉÊÈÉÊÅËÍÉËÍÉËÌÊÌÎÊÍÏËËÎËÊÍÊÈËÈÈËÈÉÊÈÇÉÅÅÊÇÆÈÄÉÊÈÉËÊÆÉÉÂÈÆÀÆǾÆƼÄĺÀĺ¿Âº»¼¼··½¶´»®«µŸ˜¯„¥{ršl`‘^SYMWKŽZN‘_S•eZšnbŸul¥‚z©“©œœ¨Ÿ¡¦ £¢ž¤˜œ–“‡Œ†~ytxomnggmagm^dkS]cJV^FRXDOVAMUALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSBMTELTFLRJJPOILUHK]HHgMIoNIuPJ}QE„TIˆXLŠWL[O‘^S”bV˜h\˜h\”bV[O‹SE‡OA†L@ƒG;€D8C7A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5€B6€B6A5E9†L@ƒI=‚F:E9€D5A5A5€B6E9G;ƒK?…QE‡TIˆWOŠ^Uc\fa‘hb‘lf”ql–up—yrš}wœ|ž…‚¢‹‰ ¢——¥œž§¡¤¦¡¥§£©¨¤ª«£©«¢¤¬›š«–ªŠ¥ƒz£}t¡zp¡ynŸwnŸul£{p©‡~¯“Š²—µ¦¡³§¡­£ ©›—Š…˜ˆ‚—ˆƒ˜†‚˜…€–‚|–~x•zu’vpsmŒpg‰kd„fb`]}[W|WT|SM}QH}LD~JAH>~F:€D8A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5‚C6‚C6‚C6‚C6‚C6ƒD7ƒE9„F:‡N?“`S¢zl­Œ€¯„±‘†¶ž•º§ ¼­¨½·¹½¼¾¿¾ÀÄÄÄÌÊÈÒÏËÖÒÌÖÒÌÜÖÐÜÖÐÞØÑàÚÔÝÙÑÞØÑÝÖÎÛÕÏÙÖÏ×ÓËÔÑÊÓÐÉÐÎÈÐÎÈÍÊÃËÈÁÐÌÆÒÎÈÒÎÈÐÌÆÑÎÊÐÌÆÍÅ¿ÍÇÁÍÇÀÍÇÀËļÌÄ»ÑÊÂÚÖÐßÛÕßÜÕàÜÔàÚÔÜÖÐÙÕÍÚÔÎÔÐÈÐËÂÎƽÍÅ¿ÌÈÀÌÉÂÎËÄÍÊÃËÈÁÉÅ¿ÆÿÆÿÅÀ½ÆÿÆÁ¾ÉÅ¿ÇÄÀÈľÇÄÀÉÄÁÈÃÀÆÁ¾ÅÁ»Ä¿¼ÇÄÀÊÇÃËÈÁÎËÄÎËÄÍËÅÑÑËÒÒÌÑÒÐÏÐÎÌÏÌÎÏÍÈËËÃÈÈÀÅÅÀÃƾÁŹ¿Å»ÁžÄÈÀÅÈ¿ÄǺÀĹ¿Å¸¾Å´ºÁ¶¼Ã¸¿Ä¸¿Ä¸ÀùÀŶÀƹÃɸÃȺÅʾÆÉÀÈÈÁÈÇÃÈÈÂÉÈÃÊÉÃÊÉÃÊÉÂÊÊÂÊÊÄÌÉÇÍÊÈÐÍÊÐÎÌÑÎÎÓÐÑÔÑÓÖÓÖØÔÜÝØßßÙÞàÙàáÙàáÙàáÙáâÚàáÙáâÚáâÚâãÛâãÛâãÛâãÛâãÛâãÛàâÛáâÝáâÝáâÝáâÝáâÝáâÝáâÝàâÛàâÛàâÛàâÛàâÛáâÚáâÚàáÙàáÙàáÙààÚÞßÚÝÞÙÚÜÖÛÜ×ÙÚÕÖØÔÓÕÑÑÔÑÑÔÑÐÔÎÎÒÌËÐÍËÑÏÉÏÍÆËËÂÊʾÈÊ»ÈȹÄdz¾Ã±¼Ã¯ºÁ«¶½ª´º¨°¶¨°¶©°µ©°µ©°µª±¶©°µ«²·¬³¸¬³¸®¶¹²¹»²¹»·½Á¶½¿¶½¿¶½¿µ¼¾·¾À¸¾¿¸ÀÀºÁûÃüýŞÅÄÁÈÇÃÉÇÆÈÄÇÉÅÇÊÇÈÊÆÇÈÃÈÉÇÉÊÈÈÉÇÆÈÄÊËÉÊËÉÊËÉÍÎÌÍÎÌÊÍÊÇÊÇÆÉÆÇÊÇÆÈÄÇÉÃÆËÇÆÈÄÄÇÄÄÆÅÄÅÆÃÆÆ¿ÆȼÄĹÀ¸¿Ä¸¾Â·¹»¹·µ»µ´º¯¬¶¡›°‘‰§t rf•eY‘_S”aT—g[šj_šl`šod xo¥†~©–“ªŸŸ§Ÿ¢¤Ÿ£Ÿ£—™Ÿ’’›ŒŒ•„†~€‰symt~iqzcnu[clP[bIU[FQXFQXDOVDOVBMTALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSCMSDKPGJQKJOPHK]NNiVSuZU|[VYR…[RŽcX•i]šnb›ocœnbŸpc¡sg¡ugo`™i[•cW“`SYK‰PAƒH;E6€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€D5C4€B3€B3€B3€B3€B3€B3€B3E6‚G:ƒI=„M@‡QE‡UL‰ZPŠ^UŒaYŽd]f`’lc”ne–pg—qh—qh—qh™wpœy ‡„¢Œ‹£Œ£ŒŠ¤‹ˆ¦‹†¤†¡{rujuj™oc—g\•eY”bV‘]QŒUHŒUH’_Ršl`¡wk©…|­‘ˆ«”Œ¥„œ€wš|u™}t˜|s—yr–vm”ri”ne’lcjcf^Šc[‡`X„ZQWN€RI€PE€MB€I<G;F9E6€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3‚C6‚C6‚C6‚C6‚C6C4ƒE9…J=‹RCšl`®‡´™µ›’¶›‘º§ »®¨¾·µ¾¾Á½¼¾ÂÀÁÆÅÄÏÍËÔÑÍÔÒÌ×ÔÍÛÕÏÜØÐßÙÒàÚÔÝÙÑÞØÒÛÔÌÙÕÍØÒÌÔÑÊÒÏÈÑÍÅÐÍÆÎËÄËÇÁÊÇÀÍÊÃÎËÇÌÉÆÎËÇÏÌÈÎÊÄÊÄÀËÇÁÌÈÂÌÆÀÌľÊûÎÈÁÕÑËÛ×ÑÝÚÓßÙÒßÙÓÚÔÎØÕÎ×ÓËÒÍÄÐÉ¿ÍÉÁÌŽËÈÁÊÇÀËÈÁËÈÁÉÅ¿Åſ¼ÁÁ»Â¿»ÃÀ¼ÃÀ¼ÅÀ½ÅÀ½ÄÁ¾Å¿ÄÁ¾ÄÁ¾Á¿½Â¾¸ÀÀºÁÁ¾ÃÁ¿ÈÅÁËÉÃÍÊÃÐÍÉÐÎËÒÐÍÎÏÍÏÐÎÍÏÎÏÐÎÉÌÌÆÉÉÄÇÇ¿Åƹ¿Å²¹¾´¼Â¼ÀƽÂżÂƺÀÆ»¿Å¸¾Å³ºÂ³»Ä±¼Á´¼Â¶½Âµ¿Â´¼Â·ÁĺÄǼÄǾÅÊÀÈÈÂÈÉÄÊËÃÊÉÃÊÉÃËËÅËÌÄÌÌÂËÌÄËÊÆÎËÈÏÎÊÐÎÌÑÎÍÒÏÑÔÑÓØÔÕÙÓÚÛÖÝÝ×ßßÙààÚÞàÙàáÙáâÚáâÚáâÚàáÙàáÙàâÛàâÛàâÛàâÛáâÝáâÝáâÝáâÝáâÚáâÚáâÚáâÚáâÚááÛááÛáâÚáâÚáâÚàáÙàáÙààÚßßÙÞÞØÞÞØÝÝ×ÙÛÔØÚÖØÙÔÖØÔÒÕÒÐÓÐÐÓÐÏÒÏÍÑËÊÎÈÈÎÌÈÎÌÆÍÌÃËË¿ÈɼÆȸÃƸÂŵÀÅ´¾Ä¯ºÁ®¹À«µ»©±·©±·¨¯´§¯µ¦®´©¯³¨®µª°·¬²¹­³º®µº°¸»°·¹µ»¿µ»¿µ»¿´º¾´º¾¶½¿´½¾´»½¶¾Á¹À»ÂÄ»ÃûÃþÆÿÆÅÅÉÃÅÉÃÆÈÄÆÈÄÇÅÂÆÆÃÈÉÇÈÊÆÆÈÄÆÉÆÉÌÉÌÍËÌÎÊÊËÉÈÉÇÊÊÊÊÊÊÉÊÈÄÈÂÄÉÅÅÊÇÄÉÅÃÈÅÃÆÆÀÅÅÀÆǽÄƹÀµ½Ãµ¼Á³º¿´·»¶µ·º´¶¹¯­·£¯Ž‚¤znŸtg™k_•eY™k_žrfœrf vm¡wn¢|p¥ƒ|§‡¨•¥˜˜ —™™–™“š‹—…Š–~…‘w€Œp{ˆkw‚gs~bmwZdmP[bLW^KV]JU\HSZGRYEPWALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSCKQFLSJJPPMP]STm_^yda€d^„c^‹h`œ|s¬Ž…²–±’ˆª„x§}q§}q«ƒu¯¶•‰²„­…z¢wj˜fZYK‡N?‚D5C4€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3E6‚G:ƒI=„M@…QE†SHˆWO‹[PŒ]S_VaWbY’bWŽ\P‹WKŒXL‘aV•kb–pg—ph—la—ma—la˜i\`T[MYKŽWJ‹TGŠRDˆPB„J>‚G:‚F7ƒH;…K?ŠSF’_R—l_™oc”fZ’bV“dW”i^”h\”l`”mc’kah\e\bW‹_S‹\RˆXM…UIƒQE‚NBJ=G;‚G:E6€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3C4C4C4C4C4ƒG8‡N?UG\N›maª‡}´˜µš¶ž•»®«¼··¼»º½¼¾¾¼ºÃÀÀÉÈÇÐÎËÕÑËÒÐÊÕÒË×ÑËÙÕÍÞØÒÝÙÑÝ×ÑÝ×ÑÙÕÍÖÒÊÕÒËÑÎÇÒÏÈÑÍÇÏÌÅÌÉÂÊÄÀÉÿÉÄÁÉÅ¿ÉÄÁÊÇÃËÉÃÌÉÅÊÇÃÊÆÀÊÅÂÊÇÃÊľÊľÍÇÁÎÊÄÓÏÉÙÖÏÝ×ÑÝ×ÑÙÓÍÔÑÊÐÌÁÎǽÍÇÀÍÈÅÊÇÀËÈÁÊÇÀÊÇÀÈÅÁÄÁ¾ÁÁ¾À¾»¾»·À½¹¿½ºÀ¾»À¾»¿½ºÀ½ºÂ¿¿Á¾¾À¾¼¿½º½½ºÀ¾»ÀÀ½ÂÀ½ÄľÈÆÀÎËÄÏÏÉÐÐÊÏÏÌÍÎÌÏÐÎÎÏÍÍÎÌÌÍËÊÊÊÀÅŶ¼Â±¸À®µ½¯¶¾¹½Ã¼Àƶ¼Ãµ»Âµ½Ã´»Ã³ºÂ³½Ã²¼Â³½Ã³»Á±½Ã±¼Ã³¾Ã»ÂǽÅȾÆÉÀÈÈÂÉËÄÊËÄËÊÂÉÈÂÊÊÄÌÌÅÍÍÂËÌÄÌÌÄÎÍÈÍÍÉÏÍÌÑÎÎÓÐÒÕÒÔ×ÔÕÙÓØÙÔÚÛÖÞÞØààÚàáÙàáÙàáÙàáÙàáÙàáÙàáÙàâÛàâÛáâÝáâÝáâÝáâÝáâÝáâÚáâÚáâÚáâÚáâÚàáÙàáÙàáÙàáÙáâÚáâÚàáÙßßÙÝÝ×ÜÝØÛÛÕÚÛÖÚÚÔ×ÙÒÖØÔÖ×ÒÓÕÑÑÔÑÏÒÏÍÒÏÍÒÎÉÎÊÈÍÉÈËÈÇÌÉÄËÊÂË̾ÈʺÄƶÀô¿Ä¶¾Ä´¼Â°ºÀ°¸¾¬´½ª´ºª²¸¨°¶§¯µ¦®´¤¬²¥¬´¨¯·ª°·ª°·­´¹¯¶»°·¹²¸¾²¸¾³¹¿³¹¿µ»¿´¼¿´¼¿´»½¶¾Á·¾À·¾ÀºÁúÁüÃÂÀÆÄÂÇÄÃÇÁÄÆÂÄÅÀÅÅÂÄÆÂÄÅÃÆÉÆÇÊÇÇÊÇÈËÈËÍÉËÍÉÊËÉÉÊÈÊÊÊÈÊÉÇÊÇÄÇÄÄÉÅÄÉÆÁÈÇÀÇÆÀÇÆÀÆǾÄźÁ÷¾Ã³»Á³¹À²¸¿±·½²²µ·²µ·¯¯´¢ž¯„¤znŸtgocšnbŸtg vj xl¥v¦„{¥ƒz¥‡€¥‰€¡‡žŠ„™Ž‹”ŽŒŒ’„‹•|„‘u‘p|Šjw†gtƒbo{^juXbkS^eO[cNY`MX_KV]IT[FQXCNUALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSBLRFMRIOUTTWc]_tkjqm…roŠrl–|v®œ–¼¯¬Á´±Á²­¼¤›µ”ˆ²„¹›È´«ÏÁ½Ï¼μ¶Ä¬£¶“‰ tf‘]O‰PA‚G:C4€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3E6‚G:I=ƒK?„M@†PDˆQD‰RE‰UGŠVJŠVH†N@ƒG8‚G:ƒH;ˆO@ŠRD‰REˆPB‹TG‹TGˆPBˆPB‰PA„I<‚G:ƒG8ƒG8‚F7C4€B3€B3C4€B3‚F7…J=XKYK…K?‚H<„J>‡OA‹WKdXeZcWaU^Q‹[M‰WKˆUH†RD…NAƒK?‚H<‚G:F9C4€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3€B3C4C4C4C4ƒE6ƒE6…I:‰N?‰Q@’^PŸtg²’‡¸¢›¼ª¤½µ²½ºº½¼¾¾¼ºÁ¾¾ÅÂÂÇÈÃÐÎËÒÏÈÔÑÊÒÏÈÔÑÊ×ÓËÙÕÍÜØÐÛ×ÏÚÖÎØÔÌÕÑÉÓÐÉÓÐÉÒÏÈÏÌÈÍÇÁÉÅ¿ÊþÉÁ¾Å¿ÆÿÄÁ¾ÅÃÁÇÅÂÆÆÀÄľÃÀ¼ÃÀ¼ÅÃÀÈÃÀÉÄÁÈÅÂËÈÄÏÌÈÒÐÊ×ÑË×ÑËÕÏÉÏËÃÌǾÌŽÊÄÀÊÅÂÊÇÀȞȞÉÅ¿ÉÄÁÃÀ½À¾»º»¶¾»·½º¶½º·½º¶¼¼¹½»¸¼º¸»»»¼»º¼¹¶½¸µ¼¹¶¾»·Á¿½ÃÁ¿ÈľÈÈÂËËÅÎÌÉÐÎËÌÍËÎÍÌÎÎËÌÌÉËËÈÊÊÊÂÄƸ¾Â­µ»¬´º­µ¾®µ½¶¼À·½Á²ºÀ±¹Â²¼Âµ¿Åµ½Ã´¿Ä·¿Å¶¾Ä³»Á³½Ãµ½Ãµ½Ã¹ÁǽÅÈ¿ÆÈÂÇÇÄÊËÄÊËÃÉÊÃÊÉÂÉËÃËËÅËÌÅÍÍÃËËÆÌÊÇÍÎËÐÍÍÓÑÐÕÒÓÖÓÕ×ÓÖØÔ×ØÓÚÛÖÞÞØààÚàáÙàáÙàáÙßàØàáÙàáÙáâÚáâÝáâÝàáÜàáÙàáÙáâÚàáÙàáÙáâÚàáÙàá×áâÚàáÙàáÙàáÙàáÙàáÙÞàÙÞßÚÚÛÖÙÙÓ×ØÓÖ×ÒÖ×Ò×ØÓÕ×ÓÔÖÒÓÕÑÐÓÐÏÑÍÎÒÌÌÑÍËÐÌÇÍÊÈÍÉÈÍÊÇÌÉÃÊɽÈȺÄÆ·¿Â³»Á²ºÀ±¹¿¯·½®¶¼°¶½­µ»©±·¨°¶§¯µ¨°¶§®³¥­³£«´¤¬µ¥¬¶¦­µ©°µ­´¹¯µ¼±·½±·½±µ»±µ»´ºÁ²ºÀ³»¾´¼¿µ½À·¿¿·¿¿¹ÀºÁûÃýÄÿÄÄ¿ÅÃÄÅÃÃÄÂÂÄÀ¿ÄÁ¿ÂÂÂÇÄÂÇÃÆÉÆÆËÈÈËÈÉËÇÊËÉÉÊÈÆÇÅÆÈÄÅÊÇÃÉÇÃÆÆÃÈÈÁÈÇÁÇÈ¿ÅÉ¿ÄǽÂŹ¿Ã·¾Ã±¹¿¯¶»¯·½°´º±³¶³°°´­®µ¤¢±•Œ§u£{o¢xl¢xl£xm¡ym£{p¦€w§‰‚¨Žˆ§‹£‰š‚|”}x’€|Ž†‰†ˆŽ~ƒvs~lx†gsap]lxZfqXcmT`hP\dNZbLX`JV^GS[FQXDOVALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSBMTHPYQY__ciloruvw}xx„{z€}—…¢Š²¥ŸÀ¹·Ä¿¿ÇÀ¾Æ¸±Ã°©Ä°§Ë»²ÑÍÇØÕÑÚÖÐØÒÌÒÇÀË·®·–Š›l_‘ZM‹RC„H9ƒD7ƒD7‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚D5ƒE9ƒG8ƒH;„H9…J=†K>‡N?†K>„I<ƒD7‚C6‚C6C4‚D5‚D5ƒE6ƒG8ƒG8ƒG8ƒE6‚F7ƒD7‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6„H9ZNYM„I<‚D5C4ƒE6‡N?[OŽ^SŒ\P‹YM‹WIˆTF‰QCˆO@…L=ƒH;‚G:ƒE6‚D5‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6‚C6C4C4C4C4C4„F7„F7…I:ˆM>YJ¡vi±—Žº°­½¸¸¾¹¹¾¹¹¾¼½¿½¾ÄÁÁÇÅÃÌÊÇÌÍÈÓÐÌÔÐÊÑÏÉÓÐÉØÒÌÚÖÎÚÖÎÛ×ÏØÓÊÕÑÉÓÐÉÓÏÉÒÏÈÏÌÈÎÊÄÊÅÂÉÄÁÇÁ»ÅÀ½ÃÀ½ÂÀ¾ÁÁ¾ÃÁ¿ÃÁ¿ÄľÃÁ¾ÄÁ¾ÂÀ½Á¿¼Á¿½ÃÀ½ÈÂÁÈÅÁÈÅÁÍÊÃÏÌÅÎËÄÍÊÃÍÊÃËÇ¿ÊĽÊÄÀÊÄÀÈÅÂÈľÈÃÀÇÁÀÅ¿ÃÀ½¿½»¼º·ºº·»¹¶»¸´º¸¶¸¶´ºº·¸·¶¹·¸¹¹¹¹·µ»¸´½¸µ¿»µÁ¿¼ÃÁ¿ÅÃÁÉÄÁÊÇÃÎÌÉËÌÊÌÌÉÌÊÈÌÌÉËËÈÆÈľÁIJ¹¾­·½­·½±¹¿²ºÃ³»Ä³»Ä³ºÂ±»Á´¾Ä¸ÀƹÁÇ·ÁÄ´¾Á·ÁĺÂÈ»Âʸ¿Ç·¾Ã¹¿Ã¼ÃÈ¿ÆÈÃÆÉÃÈËÄÉÌÃÈËÂÈÉ¿ÉÈ¿ÉÈÃÊÉÃÊÉÆËËÂÌËÆÌÍÈÎÏÉÐÏÍÒÏÐÕÒÓÖÓÖÖÓ×ØÓØÙÔÚÛÖÜÝØÞÞØÞÞØÞÞØÞß×ßàØàáÙàáÙáâÚáâÚàáÜàáÙààÚààÚááÛààÚààÚàáÙàáÙàà×âßØáßÙàáÙàáÙàáÙßàØßàÛÛÜ×Õ×ÐÕÖÑÓÔÒÒÕÒÒÔÐÓÔÒÒÔÐÑÔÑÐÒÎÌÏÏËÎËËÎËËÐÍÊÏËÉÎËÉÌÉÉÌÉÆËÈ¿ÆÅ»Âĸ¿Ä´¼Â±¹¿°¸¾¯·½¬´º¯¶¾®¶¼«³¹¦°¶§±·¥°µ¨²¸§¯µ£«± ¨®¢ª³£«´¥¬´§­´ª±¶­³º¯µ»±µ½®´º±µ½²¸¿³¹À²¹¾±¸½³¹½µ¼¾¶½¿·¾À¸¿Á¹ÀºÀÁ¼¾À¾À¾ÁÁ¾ÃÀ¾ÁÁ½ÀÀ¾Ä¿ÅÃÀÆÄÁÇÅÃÉÇÄÊÈÆÈÄÇÉÂÆÇÂÄÇÄÃÆÃÄÉÅÄÊÈÂÈÆÀÇÆ¿ÅƾÃÿÄǽÂŹ¿Ã¹¿Ã·½Á³¹À²¸¿°·¿°³¶°°³³­¯³­¬²¨¦²ž˜®’‰¬Œ©‡~¨„x¨‚v¦€t¥u¥ƒz¨…©“¦•“¡˜…‚yu‰xw‡„€ƒwŒr}Œny†itbo{^myXgsWdpT`kS^hN\eLX`JV^HT\FRZEPWCNUALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSEPWS]celq}‚…“”’——’Ÿ™˜©¢ °©¤¶°¬¾»¸ÅÅÅÈÈÅËĿʽ·ÍÀºÑËÅÖÖÐÛÙÖÞÛ×ÝÙÓ×ÑÊÑÁ¸Â©ª‚t™g[[M‰Q@…I:ƒG8‚F7C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4‚D5‚F7ƒG8„H9ƒG8ƒG8‚D5C4C4C4C4C4C4C4‚D5‚D5C4C4C4C4C4C4C4C4C4C4C4C4C4C4…L=_S_S‰QC„I<ƒH;…J=…L=‰SD‹XKŠVHˆTFˆRC‡O>†K>†J;„H9ƒG8‚F7‚D5C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4ƒD4ƒD4ƒD4ƒD4„E5…G8†H9‡I:ˆL=ŽVH›l_±’ˆ»²±¾½¿½¼¾¿¼¹¾½¿ÂÀÁÈÅÅÊÈÅËÈÄÍËÈÒÏËÒÏËÒÏÈÒÏÈ×ÓË×ÓËÚÔÎÙÕÍ×ÓËÕÑÉÔÎÈÐÎÈÏÍÇÌÉÂËÅ¿ÉÂÀÇÀ»Å¾¹Ä¿¼À½½¿¾½ÀÀ½ÁÀ¿ÂÀ½ÃýÆÄÁÇÄÁÄÁ¾ÁÁ¾ÁÁ¾ÁÁ¾ÃÁ¿ÅÃÀÇÄÁÈÅÁËÇÁÈÅÁÉÇÁÉÇÁÊÇÀÌÈÂËÇÁÉÄÁÊÆÀÉÅ¿ÈÃÀÅÀÀÃÀ½ÃÀ½¿¼¸¹ºµº¹¸¹¹¶¹·µ¹·µ¹·´¶·²´µ³¶¶¶¶¶¶¶¶¶¹·´»·±¿¹³À½¹ÂÀ¾ÄÂÀÊÇÃÍËÈÌÌÉÈÉÇÄÆÅÆÇÅÆÇÅÂÄ÷½Á¬¶¼¬´½®¶¼²¹¾¶½Â¶¾Ä·¾Æ¶½Å´¼Â´¼Â¶½Â¹ÁǺÄǸÀ÷¿Â¸ÀüÆɼÆÉ»ÂÊ·¾Ã¼ÂÆÀÅÈÀÆÇ¿ÅÉÂÇÇÂÈÉÂÇÊÀÈÈÀÈÈÁÊÈÂÊÊÄÌÌÅËÌÄËÊÄËÍÄËÍÇÎÍÌÒÐÐÓÐÓÕÑÕÖÑÖ×Ò×ØÓ×ØÓÚÛÖÚÜÕÛÜ×ÝÝ×Þß×ÝÞÙààÚàáÙàáÙàáÙàáÙàáÙààÚáßÙâßØààÚÞàÙàáÙááØàà×àà×áßÙàáÙßàØßàÛÞßÚÜÝØØÙÔÔÖÒÒÔÐÒÔÐÑÔÑÏÒÏÎÓÏÏÒÏÎÑÎÌÏÌÊÏÌÇÍËÈËËÈÍÊÈÍÊÇÍËÈÍÉÇÊÇÂÇǽÂŶ¾Á¶½Â³»Á¯¹¿­·½­µ»¬´½­µ¾­µ¾©±·§¯µ¥¯µ¨²¸¨²¸¦®·¡©²Ÿ§°Ÿ§°¡«´¥¬´¥¬±¨®µ«±¸­³º­³ºª°·ª°¶®´º¯µ¼¯µ¼±·¾±·½²¸¾°·¹³º¼µ¼¾´º¾¸½À¹¾Áº¿¿º¿¿½Â½Â»Á¼ÁÁ¾ÃþľĽÃÁÀÆÄÂÇÃÄÈÂÄÆÂÂÅÂÂÇÃÃÈÄÂÈÆÂÈÆÃÆƽ¿ÁþÁļÁĶ½¿µ»¿´º¾³¹À³·¿°¶¼°³·®°³³­¯³­¬²ªª±£¢°žš°œ–­•­Ž„©‰€¨ˆ¨‰§‰€¦‘‹¦•“¢”“šŠ”…ƒ‹yu„vu}ƒ{Šr}‰ny†jvfr€_lx\hvWdsRamR^iNZeLX`KW_HT\FRZDPXDOVALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSCNUHSZNX^PZ`X`fpw|—™ ¦§¦¬­¤§ª§¨©®¯°µ¶·ººº½¾¿ÀÃÃÄÊËÉÎÎÌÎÊÎÈÂÎÆÀÑËÅ×ÓÍÚÖÐÝÚÓÞÛÔÝ×ÑÔɿκ±Á¨œ®†{¢vhšh\‘[L‹SB‰N?†H9„F7„F7„E5„F7„E5‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3†J;\O‘aSŽ]NZMŒXJŠVHŠTE‹SE‰SDˆRC‡O>‡L?‡K<…G8„F7ƒE6ƒD4‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3ƒD4ƒD4ƒD4ƒD4„E5„E5„F7†H9‡K<RCšk[³™“»´²½ºº¿¼¹¾½¼ÃÀÀÈÅÅÆÅÄËÈÄÎËÇÐËÈÐÍÉÑÍÇÒÏÈÔÑÊ×ÓËÙÕÍÚÖÎØÕÎØÔÌÓÐÉÓÐÉÐÍÉÎËÄËÅÁÊľÇÀ»Ä¾¸Â¾¸À»¸¾¼º»º¹½¼»¾½¼ÀÀ½ÃÁ¾ÅÃÀÄÁ¾ÃÀ½ÀÀ½Á¿½ÀÀ½À¾»ÀÀ½ÁÁ¾ÃÁ¿Å¿ÇÄÁÅ¿ÈÅÁÈÅÁÉÇÁÉÇÁÊÅÂÉÄÁÉÅ¿ÉÄÁƼÄÁ¾Á¿½À½º¼º·»»¸º»¹¹º¸¹¹¹·¶µ·µ²··´´µ³¶¶¶µ¶´¸¶³º·³½¹³¾»¸À¿¾ÅÄÃÌÊÈÍËÈÊÊÄÄÇÄÀÃþÀ¹¾Á±¸½«³¹©±·­µ»±·¾³ºÂµ½Ã·¾Æ¶½Åµ¼Á´»À´»À·½Á¹ÀÅ»ÅȽÅȽÅȾÈʾÈʽÇʼÂɸ¾Å»ÁžÄÅ¿ÅƾÅÇÀÅÈÁÆɽÅȽÆǽÈÈ¿ÉȾÉÉ¿ÊÊÂËÌÂËÌÄÌÌÅËÌÇÍËËÑÏÏÔÐÑÓÏÓÔÏÕÖÑÖ×Ò×ØÓØÙÔÚÛÖÜÜÖÝÝ×Þß×ÝÝ×ààÚàáÙàáÙàáÙàáÙàáÙááÛáßÙâßØáßÙáßÙááØâßØáÞ×áßÙáßÙáßÙßßÖÝÞÙÛÛÕ×ÙÒÖ×ÒÒÔÎÑÒÍÏÒÏÌÏÌÌÏÌÍÐÍËÐÍÊÐÎÉÌÌÆËÈÃÊÉÂÉÈÃÈÈÂÈÆÃÈÈÃÈÄÃÆƾÁĺ¿Â´»À¯·½®¶¼­·½©µ»©±·ª²»«³¼«³¹ª´º¨²¸¥¯µ¦±¸¦°¹ ª³ §¯›§¯¡¨°¡©²¢ª³¥¬´¦­µ¦­µ§­´¨®µª°·©¯¶ª°·«±¸®´»¯µ»¯³¹°µ¸±¶¹°·¹³¹º³¸»´ºÀ·¼¿¸½À¹¿ÀºÀÁºÀÁ»Àü¿Â¼¿¿»ÀÀ»ÀÀ»Á½ÃÁ¿ÅÃÀÅÂÂÅÂÂÅ¿ÅÿÅýÃÁ¿ÅýÃÁ½Â»ÀýÀüÁÄ·¾À´»À´ºÁ²¸¿°³º¯²¶®°³¯¯²°®¯²¬®±©©°§¦¯¤¡­ ¯œ—­–Ž«†©‰¨Žˆ¨‘Œ¦•“¡––›‘’”‹Š€†xw€xx|{ƒqz†my‡kvƒgr`my\iuWdpRakP]iNZeLX`KW_HTZFRXEQWDOVCNUALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSEPWeor}„‰y‡ow}„Œ›£¦¦­¯«±µ­³·±¶¹µº½·¾À¼ÃÅ¿ÇÊÂÊÍÈÏÑÌÒÓÏÑÐÐÍÉÑËÄÒËÃÔÎÈÕÎÆ×ÑÊÝÚÓßÙÓÝ×ÑØÒËÔÌÃμ³Æ¯¥º›‘¨~ršiZ‘[LTEˆM>‰M=‡I:†H9„F7ƒE6„E5ƒD4‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3C4‡K<ŒXJŽ\P[OŒYLŠVHŠTE‰Q@ˆP?ˆO@†K<…J;…I:…G8„F7„E5‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3‚C3„E5„E5„E5„E5…F6…F6†G7†H9ˆJ;RCoc´¡œ½¶·¾½¿ÃÀÃÃÁÂÃÀÀÅÂÂÊÅÅÍÊÇÏÌÈÏÌÈÏÌÅÏÌÈÒÏÈÓÐÉÕÑÉ×ÓË×ÔÍØÔÌÕÒËÕÒËÓÏÉÐÌÆÍÇÁÊÄÀÆÀ¹Å¿¹À½¹Àº³¾¸´»¹·¹·¸ººº¹º¸»½¹½¾¹ÁÁ¾ÂÀ¾À¾»À¾»¿½º¼¼¹¾½¼¼½»¿À¾¿¾½À½½Ä¿¿ÃÁ¿ÅÃÀÃÁ¿ÃÁ¿ÈÅÁÉÄÁÆÁ¾ÇÄÀÉÅ¿ÇýĿ¼Á¿½ÂÀ¾ÀÀ½½¼»½½ºº»¹¸¸¸¶·µµ³±µ¶´µ¶´·µ²·µ³¹·´¹¹¶½º¶¾¹¶¾¾¾ÂÁÀËÉÇÈÉÄÆÇÅÇÅÃÄÄĹ¼¿´º¾­³·©°µ¬³¸°·¼²¹¾³»Á³½Ã³º¿³º¿³º¿±¸½±¸½´»À·¾Ã¾ÅʾÈʾÈÊ¿É˾ÈʼÆɼÂȸ¾Ä¶½¿¸ÀúÂźÁƺÂ˾ÅʾÅʾÈÊ¿ÈɾÈÇ¿ÊÊÀÊÌÁËÍÃÌÍÄÌÌÇÍËÊÐÎÍÒÎÍÐÍÑÔÑÒÓÑÓÕÑÕÖÑ×ØÐØÙÔÛÛÕÝÝ×Þß×ßßÙßßÙàáÙàáÙáâÚáâÚáâÚáâÝâßÛâßÛâßÛàÞØâßÛáÞÚààÚâßÛàÞØßÝ×ÞÜÖÝÝ×ÚÛÖØØÒÒÓÎÐÑÌÏÑÍÏÐÎÍÐÍËÎËÉÎËÊÏÌÉÌÉÇÌÉÃËÈÃÉÇÀÈÅ¿ÆžÅÇÀÃÆ¿ÄľÄŽÃĺÁô»À²ºÀ¯·½ª²¸ª´º¨³º¥°·¥¯µ¨³º§²¹¦±¶§²¹¥°·¤®·£®¸ž©³›§¯œ§®Ÿ¦®Ÿ¦®§° ª³¢ª³¢ª³¥¬´¤«³¦®´¦®´¨®µª°·¬²¹«±·®²¸¯´·®³¶²·º°¶º³¸»³¹½´º¾µ¼¾¶½¿µ¼¾¶¼½¸»¾·¼¿¹¾¾¹¾¾»Á»ÀÀ¸¿¾»ÀÀ»ÀÀ¾ÁÁÀÃÃÀÁ½Â½Â¼ÁÁºÀÁ¹¿À¸¾¿¸½À·½Á¶½Â¶½Â´ºÀ±´»®²º®²¸®®´¬¬²®­¯°©ª­¨¨®§¥«¥¤«£ ¬¡ž­œš©”Ž©“Œ§‹¢‡¡’š’’–Ž‘‰Šˆ~xz|y|sxlwƒhs€fq~bn|\iuWdpS`lO\hN\eLX`KW_HT\GRYEPWDOVCNUALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSFPV^fl‘›ž¢¬¯”› –ž¡ ¨«§®°«²´±¸½³»Á¶¾Ä¹ÃɽÈËÆÍÏÊÐÑÍÓÔÎÔÒÑÓÒÓÔÏÖÔÎ×ÓÍØÔÎÕÑÉÕÎÄÙÓÌÝÙÑßÙÓÞÚÔÜÙÒÙÓÍÓžͺ°À¤™¯‡yœk\“]NŽWGŒTCŽSDRCŠO@ŠN>ŠO@ˆL=…I:„F7„E5ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒE6‰P>UGŒVG‹UFŠRAŠQBˆO=ˆM>‡K<…I:…G8„F7„F7…F6„E5„E5ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4…E4…E4…E4…E4…F6…F6†G7‡I8ŒP@•_P¢vh²—¼³²À»¾ÇÄÄÉÈÇÅÂÂÃÀÀÄÁÁËÈÄËÈÄÎËÇÐÍÉÐÍÉÓÐÉÔÎÈÐÌÄÑÍÅÔÎÈÓÐÉÓÏÉÓÏÉÎÊÄÉÄÁÊľÅÀ½Á¾»½»¸½º³½¸µ¼µ°·´°¶´µµ¶·¶¶¶¹º¸¼½»¿¾½¿À¾¾¾»¾¼¹½½º»¼º»»»¼¼¼º»¹½½½¾»»¾¼½¾¾¾¿½ºÀ¾»ÁÁ¾ÂÀ¾ÂÀ¾ÀÁ¼ÃÁ¾ÃÀ½ÄÁ½ÂÀ½ÃÁ¿ÄÂÀÃÁ¿¾¼¹ºº·¸¸µ¶·µ¶´²µµ²µ¶´¶´±··´¶·µ·¶µ¹¸·½·³¾¹¶À»»ÂÀÁÉÇÄËÉÆÊÈÅÇÈÃÄÄÄ»½¿°µ¸¬²¸­³·®µº°·¼±¸½±¹¿±»Á°ºÀ¯¶»¯¶»±¸½²ºÀµ½ÃºÁƾÈ˾ÈʾÈÊ¿ÉËÀÊÌÀÊÌ¿É˻ĿÄǽÅȼÆɼÄʺÄʺÂȽÅÈ¿ÈɼÅƽÈȽÈÈ¿ÉÈÀÊÌÂÌËÄÌÌÈÏÎÊÐÎÉÏÍÍÐÍÐÓÐÐÓÐÑÔÑÓÕÑÕÖÑ×ØÓÛÛÕÜÝÕÞÞØÞÞØßßÙàáÙàáÙáâÚáâÚáâÝáâÝáâÝááÛâßÛáÞÚâÞØáÞÚàÞØÞÜÖÝÝ×ÝÝ×ÛÛÕØØÒÕÕÏÔÕÐÑÒÍÎÐÌÎÐÌÎÏÍÊÏÌÈÎÌÉÏÍÇÍÊÆÌÊÂÊÇÁÈÇ¿ÈÆ¿ÈƽÅżÄÄ»ÀúÀÁº½À¹¿Ã·¾Ã³º¿¯¹¿«³¹¨²¸©³¹§²¹¤®·£®µ¥°·¤¯´¤¯´§²¹¦±¸¤®·¢­·žªµš§³š¦±š¥±™¥°›¦°›¤° ¨±¡«´¡«´£«´¢¬µ£­³¥¬±§®³ª°·ª°¶­±·­±·­±·¯µ¹¯µ»®³¶°µ¸³¹½´º¾´º¾¶»¾¶»¾µ»¿·¼¿¸»¾¹¼¿º¿Â¹¿ÀºÀÁºÀÁ¹ÀºÀÁ½ÀÿÁþÀºÀÁ¹¿À¹¿À·½¾¸½À¶¼À¶¼À´»À´»À²¸¾¯³»®²º¬¯¶­¯²¬®±­¬®®©¬­¨¨¬§§«¥¤ª£¡ª¡ «  «š˜¨•’£Œ„œ…€™‹Š•ŽŠˆ…ˆ‚€†{{tx€nvgrcp|am{\gtYesRamP]iMZfKYbKW_HT\FRZEPWDOVCNUBMTALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSALSJU\ksyŸ§ª›£¦˜Ÿ¡ž¥§¤«­¬´·²ºÀ²½Â·ÃɽÈÍÂÌÏÊÐÑÎÓÓÐÕÕÑÖÓÓÖÓ×ØÓÙÙÓÚÚÔÛØÔÚ×ÐÙÓÍØÒË×ÍÄ×ÐÈÙÕÍÝ×ÑÙÑËÒǽѿ¶Ë¶ª¼ž’­…w¡rb›hY˜dT—cS˜dT–`Q”]M”]M’[KXHTBŠN>„F7ƒE4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒE4„F5„F5…F6„F7„E5ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4„F5‰N?‰Q@‰P>ˆO=‡K;†J:†J:…I9…G8„F5„F5„E5…E4…E4…E4…E4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4ƒD4…E4…E4†F5†F5…E4†G7ˆI9ŠN>WE p_£wi±“‡¼³²Ã¾ÁËÈÈÐÍÊËÈÄÈÅÂÇÁÀÈÅÂËÈÄÍÊÆÐÍÉÒÎÈÒÎÈÎËÄËÈÁÎÈÂÏÊÁÍÊÃÊÇÃÉÄÁÅÃÁÃÁ¿Ä¿¿¿½ºº¹¸ºµµ¸µ²·´±¹µ¯µ³°µ³±µµ²µ³±···¼¼¼½½½»¼º¸·¶·¸¶·¸¶¹¹¹¶·¸·¸¹¶¸·ºººº¸¹»¸¸¹·µºº·¹ºµ½½º¾¾»½½º¿¾½¾¿ºÀ¾»ÂÀ½ÀÀ½À¾»ÁÁ¾¾¿º¹ºµ··´µ¶±¶¶³¶·µ··´´µ³µµ²¶´µ¶¶¶·¸¶º¸¶¼µ°¾¸´¿¾½ÂÁÀÈÅÂÊÈÅÆÇÂÅÆÄÀÁ³¶¹¬²¶­³¹®´º¯µ¹­´¹®µº¬´º«¶»°¸¾¯·½¬¶¹¯·½³»Á¸¿Ä»ÃÉ¿ÇÊ¿ÉËÀÉÊÁÊ˾ÉÉÂËÌÂËÌÃÌÍÄÌÌ¿ÉË¿É˽ÇʼÄʼÃÅ»ÂÇ»ÆɽÇƼÆȼÇǼÆȾÈÊÃÌÊÇÎÍÈÏÎÉÐÏÉÏÍÌÏÏÍÒÎÏÒÏÐÓÐÑÓÏÖ×ÒÚÛÖÜÜÖÜÝÕÞÞØßßÙßßÙßàØàáÙßáÚáâÝßáÚáâÝáâÝáâÚááÛâßÛáÝ×ßÝ×ßÝ×ÜÚÔÛÙÓÛÙÓ××ÑÔÔÎÓÓÍÒÓÎÑÒÍÎÐÌÎÐÌÌÎÍÈÍÊÇÌÌÇÎÍÆÌÊÂÊÄ¿ÈÆÀÈÈ¿ÆžÄźÁ÷¿Â·¾À·¼¿¶¼½¶¼À¶½¿²º½®¸¾«¶½ª²»¨¯·¤¯¶¢®¶£®µ¤®´¢­´¤®´¥°·£¯·¢®¶ž©³›§µ›¨´›¨´š¨±š¨±›§²š¥¯™¥­›©²Ÿ©² «²£ª²¤«³¦¬³¥«±¦­²¨¯´ª°¶«¯µª°¶ª°¶¬²¶ª°´­°³°¶º²¸¾±µ»±·½²·º´¸¾´º¾¶»¾·º½¸½Àº¿Â¹¿À¸¿Á¸¿Áº¿Â¹¾¾º¼¾¸¾¿¸½½¹¼¿·½¾µ¼¾µº½µ¹¿´ºÀ´º¾²¸¾°¶¼®²º­°·ª­±«­°¬¬¯¬«­¬©©«¨¨©¨§¨¦¤ª¡ © Ÿ¨  ¨¥–”ŸŠ„–{”†…Ž‰Œ‡†‹‚†{}ƒsz„ow€gr|anz^kw[grXdrQ`lO^hMZfKW_KW_HT\FRZEQYBNVBMTALS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRCNUPZ`{‚‡’šŽ–™—Ÿ¢¤«­¬¶¹²¼¿µÁÇ»ÆËÂÌÏÉÏÐÌÒÓÏÔÔÑÖÓÑÖÒÔ×ÔÙÚÕÛÛÕÛÛÕÜÚ×ÚÚÔ×ÕÏÖÐÊÓÉÀÒÈ¿ÔÌÁ×ÏÄÖÌÃ×ÏÆ×ÏÆÔÈÀθ¯Á§›¹—‹±‰{§{m§yj¥ug£se¡rb p_m\šgX—aR‘YH‹PAŠN>†H7„E5…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4„E5„E5…F6ˆM;VD‘XITB‹O?†G7„E5…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…F6ˆK:ˆJ;†G7…F6…F6…F6…F6…F6…F6†F5…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4†F5†G7†G7†G7†G7ŠM<WE•_Pžn`§~o³’†º¬¨¿¼¿ÌÉÉÔÑÍØÔÎÒÏËËÈÄÄÁ¾Ä¿¿ÇÄÁÊÇÃÍÊÆÍËÅÍÊÃÊÆÀÉÄÁÊľÊÄÀÉÄÁÅÃÁÄ¿¿ÀÀÀ¾¼½»»»º¹¸¸¶·µ³±´²°²²²³³°±²°´²¯³´²´´´³³¶¸¹ºººº¸¸¸´´´²´³±³²²´³³µ´²´³¶¶¶¶¶¶¶¶¶···µ¶´´¶µµ¶´·¸¶º··¸·¶º¹¸º»¹½½ºº¼¸½¾¹¾¾»»»¸º»¶º»¹··´¶´±´µ³¶·µµ¶´´´±³´²´³²µ¶´¸¶³»·±»¶³¾¹¶¾½¼ÄÁÁÈÅÂÅÅÂÁÁÁ¾ÁÁº¼¾®³¶ª°´¬²¶«±·«±·¨¯´¦®´¨¯´ª²¸¬´º«µ»¬¶¹®¸»³»Á¶½Â¼ÂȾÆÉÀÉÊ¿ÈɽÈȽÈÈÂËÌÃÌÍÃÌÍÄÌ̽ÈÈÀÊÌÀÊ̾ÈË»ÅȺÂźÅȼÆȼÄǽÆǼÆȽÆÇÁËÊÈÐÍÊÐÎÌÏÏËÐÍÎÑÎÏÑÐÎÑÎÐÒÎÓÔÏÖ×ÒÚÛÖÜÜÖÜÜÖßßÙßßÙßßÙßàØàáÙàáÙàáÙßáÚáâÝáâÝáâÚáâÚàáÙàÝÙÝÚÓÝÛÕÝÛÕÛÛÕ××ÑÕÕÏÔÔÎÓÔÏÑÓÍÏÑËÌÎÊÎÏÍÊÏÌÈÍÊÄËÊÃËËÁÉÉ¿ÈƾÆƽÅŽÂżÁĸ¾Ä¶½¿´¼¿´º¾³º¼µ¼¾´¼¿³¹½®¶¼ª´½¨°¹£­¶¡­µ ¬´ «µ¡­µ¡­µ¡¬³¢®¶¤¯¹¢­·š©³˜¥±™¦²™¨²›©²œ¨³›§²š¥¯—¦°˜¦¯™§°œ¨°ž©° ¨®¤ª°¤¨®¦ª°¦­µ§­´¨®µ¨®µ¦­²§­±¨®²ª°´­³·¯µ»°´º¯³¹±µ»±·½³¸»³¹¿³·½³·½¶»¾¶»¾·¼¿¸½À·¼¿¶»¾¶¸ºµ¸»¸¹º·º½·º¾¶ºÀ±·½³¶½¯µ»±·¾°¶½¯µ»­±¹ª°¶ª­±ª¬¯ªª­¬©©¬©©ª¨©ª§§©£¥¨¡¢§ŸŸ§ž £šœŸ””˜Š†’Œƒ‚ˆ„Š‚‚ˆ{}ƒsz„mv‚gr~`my\iuXeqWcqQ`jO^hLZcKW_JV^HT\GRYEQYDOVBMT@LT@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRCNUFQXNX^t~—¢§Š”—–¢§¯µ­·º°»À·ÂɽÈÍÃËÎÈÏÑÍÒÒÏÔÔÏÒÒÑÖÓÖØÔÚÛÖÚÛÖÛÛÕÛÛÕÙÙÓÖÔÎÔÎÇÑÌÃÓÍÆÔÌÃÕÎÄ×ÐÈÚÔÍÝ×ÑÛÕÏÕËÂоµÏ¼²Ë³¨¼·“…±Œ}±Œ}µ’…·”‡¹™‹°‹|¡pa—aR’[KWETE‰L;†F5…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4‡H8‰K:‰L;ŒP@“\L™fWm_žn`˜dVWFŠM<„F5…E4…E4…E4…E4…E4†H7ˆJ;†H9…G6…F6…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4„F5…G6†F5…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4…E4ŽRB“\L–_OXGVD”\K¥yk­Š}´˜¶œ“»±¯Ä¿ÂËÈÈÓÑÎÙÕÏÙÕÏÖÒÌÍÉÃÃÀ½ÃÀÀÅÀÀÊÅÂÊÇÃËÈÄÊÇÃÉÄÁÈÃÀÈÁ¿Ä¿¼Å¿¹À¾»¾¼º¼»ºººº···¶¶¶³²´°¯±¯¯¯¯¯¬®®®¬¯¯±±±°°°²³´³³¶µ¶·¶µ·³³³´´´±³²®°¯­¯®±±±²²²°°°²²²³³³³³³²±°³²±³³°µ³±³²±¶³³¶¶¶¶·µ·¸¶¹¹¹¹º¸¼»ºº¹¸º»¹¹º¸µ¶´´µ³²³±³´²µ´³µ´³´³²³´²µ¶´µ¶´·µ²º¶°»¹¶¼½»ÁÀ¿ÄÁÁÀÀÀ·¼¼¸½½µ¸»®³¶¬²¶«±µ©¯³¨®²¥­³£«±£«±¦®´¨°¶¨°¶­´¹¯·½²¹¾µ¼Á¹¿Å¼ÄǾÆÆ¿ÈɽÈȾÉÉÂËÌÂË̾ÉÉÃËËÂËÌÃÌÍÂËÌ¿É˾ÈÊ»ÃƽÄÆ»ÅȼÄÇ»ÅȼÆȽÈÈÃÌÊÉÏÍÌÑÎÍÏÎÏÑÍÒÓÑÒÓÑÑÓÏÔÕÐÔÖÒØÙÔÚÚÔÜÜÖÝÝ×ßßÙßßÙàà×àáÙàáÙàáÙàáÙßáÚáâÚáâÚáâÚàáÙßàØßÝ×ÜÙÒÜÚÔÜÚÔÛÙÓÙÙÓÕÖÎÔÔÎÓÔÏÑÓÍÎÒÌÊÍÊÉÎËÊÏÌÈÍÊÀÈȽÆǾÆƼÅúÃĹÁĺÀĸ¾Âµ¼Á³º¿°·¼°·¼²¹»³º¼³º¿°·¼«³¹¥¯¸£­¶ «µœ©µ›ª´š©³žªµ¡¬¶ ¬´ «µ¡­¸ ¬·š©³˜§±–¦¯˜¦¯™¦²š¦±™¥°™¥°™¥°—¦°˜£­˜¤¬™¥­ž¨®¢¨¬£©¯¤ª°¢ª°¤«³¥¬´¤«³£©¯¤ª®¥¬±¦­²©¯³­³·­³¹®²¸­³¹°´º±·»²·º°µ¸²·º³¶¹²µ¸²·º²·º²·º²µ¸°³¶±´·´¶¸µµ¸µ¸¼³¶º±´»¯³¹®´¸®´¸­³·­³¹«±·©¯µª­±ª©«¬©¬«¨¨«¨¨ª§§ª¤¦§¢¥¨¡¢¤œœ¢™›–—˜‘”‰‰‚‚‡ƒ€…z|‚rxlvgr|`my]jvZftVcoQ`lO\hLZcKW_JV^GS[FRZEQYDOVBNT@LT@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRCNUNY`V`fZbh€‡Œ «°¡©¯Ÿ©¬©³¶¬¸¾°¼Â·ÃɾÉÎÇÎÐËÑÒËÒÑÏÒÒÐÓÓÔÖÕÖÙÖ×ÙÕØÚÖÙÚÕ×ØÖÔÖÒÑÒÍÔÑÍÔÒÌÖÓÏÖÒÌØÕÎÝ×ÑßÙÓàÚÔÝÚÓÝ×ÑÛÕÎÛÓÊØÎÅÒ¿µÊ±¥Â¤˜À¢–Å«ŸÊ±¥Í¸¬Æ®£±Œ}j[—`P–^M“ZHŠO=‰K:ˆI9„F5…E4†E3†E3†E3†E3†E3‡F4„F5‹N=TBWE”]M™fWœm]¡rb¢sc o`šgX”]MŒQ?‡I8†F5†E3†E3…G6WE™eU™dS–`QVD‰K:…G6…E4†E3†E3†E3†E3†E3†E3…G6†F5†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3‡F4‡F4‡F4‡F4†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3†E3¤zn©†|¨„x¥zmŸo^m\­‡{¶ž•ºª¤¾¸ºÄÁÄÌÊÈÓÐÌØÔÎ×ÔÍ×ÔÍÓÏÉÉÄÁÈÂÁÃÁ¿ÃÁ¿ÇÄÁÈÃÀÈÃÀÄÁ¾ÃÀ¼Ä¿¼Â¼¶À½¶½½·½¸¸·¶µ¶¶¶³´µ²³´±²³°°°®­¬®«¨«ª©©¨ª§©«©®®©®®¬®°®¯°²³´±°²±±±®°¯°±²®¯°¬®­®­¬¯¯¯¬®­°°°¯¯¯¯°®±±±®¯­¯°®±°¯²°®²¯¯³³³³´²µµ²µ¶´´µ³¶¶¶···ººº¸¹·¸¹·¸¸¸´´´²²¯²±°´³²µ´³µµµ···´µ³µ¶´¶´±º·³ºº·¾½¼½¾¿·¹»µºº´¹¹±¶¹®´¸«±µ©¯³¨¬²§­±¦­²¥¬±£­³¢ª°¤¬²§¯µ©±·¬³¸°¶º²¹¾¹¿ÃºÃļÅƽÈȽÈȽÈÈÂËÌÂËÌÂËÌÂËÌÂËÌÂË̾ÈʾÈʽÅȹÃżÅÆ»ÅÈ»ÄÅ»ÃÆ»ÅȽÆÇÂÊÊÉÏÍËÎËÍÐÍÐÒÎÑÓÏÒÓÑÔÕÐÕÖÑ×ØÓØÙÔÙÙÓÛÛÕÜÜÖÞÞØàà×ßàØßàØßàØàáÙàáÙàáÙàáÙàáÙáâÚßàØßàØàÞØÜÚÔÛÙÓÚÚÔÚÚÔØØÒÕÖÑÔÕÐÓÔÏÏÓÍÌÐÊÈÍÉÆËÈÈÍÊÄËÊ¿ÆžÆƼÂù¿À¶½¿¶½¿¸¾Âµ»¿²ºÀ°·¿¬¶¼«³¹­´¹¯¶»¯·½¬´º§±·¡®´ž¬µš§³˜¨¶—§²–¦±—¦²™©´›ª´œ©µœ«µšªµ™¨²–¦±—¥®–¥±•¢®˜¤¯˜¤¯–¢­–£¯—£®•£¬—£®—£®™¥­¥®¡§« §¬œ¨°Ÿ©² ¨±¡¨°¡§®£©°£ª¯¢¬¯¥­³§®³©¯¶ª®¶®±¸®´º¯µ»°µ¸­²µ¯²¶¯´·­²µ®³¶­±·­²µ®°³®°³­±·¯²¶²²µ°³·®°¶­°·©¯µª¯²«±·«±·ª®´©­³¨¬²§©¬©©¬©¨ª©¨ªª¥¥©¦¦§¤¤¦¡¤¤ž  ˜˜›’‘˜’ŠŠ„†‡€€}}x{rxmu~hr{bny^juZfqVcoQalM\fLYeJXaIW`GS[EQYEQYDOVBNTBMT@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRIT[[ekksyt|‚Š”—¤¯´«¶½«¶½­¸¿¯ºÁ°»Â·ÃɾÉÌÆÍÏÊÐÑÍÐÐÎÐÏÒÔÓÔ×ÔÔ×ÔÔ×ÔÔ×ÔÔÖÒÒÕÒÐÒÎÑÒÐÕÕÒÖ×ÒØØÒØÖÐÚØÒÞÛÔßÝ×àÝÖàÜÖßÜÕàÜÔßÛÓÞÙÐÚÓËÖȿѾ´Í¸¬Ð¼±ÑÀ´ÔÅ»Óøĩœ¬rœiZ—`P“[JQ>R@R@‹P>ˆJ9…G6†F5†G4…G6…F3…F3ˆJ9ŒQ?‘VD“ZH—`PœhXœiZœiZj[›l\Ÿo^œm]œiZ—bQVD‰L;†H7ŠN;˜cR¡rb§}q¨€r¢te›hY•`OŠN;…E4„E2„E2„E2„E2„E2†F5†G4…F3„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2‡F4‡F4‡F4‡F4„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2„E2®Žƒ¯—Ž±œ–±š’­Š€¨€r´“‡¸¨¢¼·ºÃÁÅËÈÈÑÎÊÕÒË×ÔÍÖÓÌÓÐÉÒÎÈÉÄÁÅÀÀÁÁ¾ÃÀ½ÃÁ¿ÁÀ¿ÂÀ¾Á¿½¿½»¼¼¹¼¹µ»¸´¸·¶µ¶´³²±±±±±±±¯°±­®¯¬«ª«©§ª¨¦¨¨¨§¨©£¨«¥ª­©¬¯ª­°ª­­­®¯¯°±®¯°¬®­«­¯©¬¬¬¬©­¬«­­­¬¬¬«¬­©«­¬¬¬¬­®¬­®¬®­­­­¯¯¯­®¬¬®­¯°®²²¯³´²´´´²²²¶¶¶·¸¹ºººººº¸¹··¸¶´³²´³²²³±¶¶¶······µ¶·µ¶´´µ³··´¸¸µ¸¹·¶·¸°³¶¯´´¯²µ®³¶­²µ«°³¨®²¨®²§­±¦­²¥­³¤¬²¡©¯¤¬²¤®´§®³¨¯´«²·¯·½¶¾Á¹ÁļÅÆ¿ÈɽÈȽÈȾÉɾÉÉÂËÌÂÌËÃÌ;ÉɼÅƼÅÆ»ÅÈ»ÄżÅÆ»ÄżÃżÅÆ»ÄÅ¿ÈÉÃÊÉÉÎËÌÏÌÎÑÎÐÒÎÑÓÏÐÒÎÔÕÐÕÖÑÖÖÐØÙÔÚÛÖÚÚÔÙÙÓÜÜÖÞß×ßàØßàØßàØààÚßàØßàØßàØßàØßàØßàØßàØààÚÝÛÕÙ×Ñ×ØÓØØÒ××ÑÕÖÑÒÓÎÐÒÎÏÑÍÌÐÊÈÍÉÆËÈÄÊÈ¿ÈÆ¿ÈƽÅÅ»Á·½¾³»¾´º¾´»À°¸¾®¶¼©´¹¦±¶¦±¸¦°¶ª°·ª²¸¨²¸¢­´žª²š©µ–¦´”¥´“¤³’¢°‘¢±“£±•¥³™¨´š©µš©µ—§²–¦±•¥°•¤°“£±”£­” «”¡­”£­•¡¬“¢¬–¢­•¡¬—£®š¥¯œ¤­›¥®™§°™§°›¤°œ¦¯ §¯¡¨°¢¨¯¡©¯¤ª®¥«¯¤ª±¥«²¨®´ª°¶¬²¸«±·©­³ª®´ª­±ª¯²¬±´¬±´«°³«®±«®±©¯µ¬°¶®®´¬®´¬®±©¬°§«±§«±§­³§­³¨«¯¦¬³¤ª°¨§¬¦¨«§§ª¨¦ª©¦¦¨¢¤¥¢¢¤Ÿ¢ šœ›““—Œ‰’……Œƒ…„~€~y|wwzrx~ov~hr{bny\kuXdoRbmQ`lO\hLYeKWbIU`FR]EQYDPXCOWBNTBMTALS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRALSMW]alqv~„‰“–¨­¨³º¬¸À®ºÂ¯»Á°¼Â°¼ÂµÁǽÈËÃÊÌÇÍÎÊÏÏÍÐÐÑÓÒÒÕÒÓÖÓÒÕÒÏÒÏÎÓÏÎÓÐÐÒÑÔÕÓÕÖÑ×ØÓØÙÔÙÚÕÛÛÕÞÜÖßÜÕàÝÖàÝÖàÝÖàÝÖàÝÖàÜÔßÙÓÜÕÍÙÑÈÖǽÔȽÙÎÄÛÓÊÙÒÊÒÀ·¿ “¨{jiY–aOVDS@ŽSAŒP=ŠK8ˆI6‰J7ŠN;‹M<ˆI6…F3†H7ŒQ?TB‘VD’YG”_M–^M“ZH“^LšfV¢sc©~oªr¥yi p_šfV–`Q—aR qa«ƒu°Ž‚´“‡¯Œ¬„v¤xj“[J…F3†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2‡F4‡F4‡F4‡F4†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2¨„x®—°¢ž²§§±§¨µ¢·¤º­ª¾»¾ÈÅÈÌÊÈÑÎÊÓÐÉÕÒËÒÏÈÌÊÄËÉÃÇÄÁÃÁ¿ÂÀ½ÁÁ¾¾¾»¾½¼¼½»ºº·»»¸º¸µ¹´´·µ³³µ´³³³¯±°±±±¬®°«¬­ªªª¨©§¨¨¨¤¥££¢¤¢£¤ £¦¢§ª¥ª­¦©­©«®§ª­«¬­ª¬®¨ª¬¨ª¬¦¨ª¨©§©ª¨©ª¨¨©§¨©ª¨©ª¨©ª¨©ª¦««©«­§¬¬¨ª¬ª«¬ª«©¬®­®®«®¯­°°°­®¯®±±±³²µ¶·¶¶¶¶¶¶···¶¶¶¶¶¶´µ³´µ³¶¶¶¶·¸µµµ²³±´³²´³²µ¶´´µ³°³³¬¯¯©®®©¬¯©¬¯©®±¦­¯¨­°¦«®¤«­£«®¤«­¢¬¯¡«®¤«³£«±¦­µ§®³«²·¯¶»´»À·ÁÄ»ÂļÄǼÅƻĎÆǽÈÈÀÉʾÉɾÉɾÈǼÆŽÆǼÆȺÃĻďÄÄ»ÅǺÄƼÅÆÂÊÊÆÌÊÊÍÊÍÐÍÎÑÎÎÑÎÒÓÎÑÒÍÓÔÒÔÕÐÖ×ÒØÙÔÚÚÔÚÚÔÙÙÓÜÝÕÝÞÖÞß×ßßÙßßÙààÚßàØßàØßàØàáÙßàØßàØßßÙßßÙÝÝ×ØØÒÕÕÏÕÖÑÕÖÑÓÔÏÐÑÌÏÐËÍÑËÊÏËÈÎÌÇÌÉÁÈǽÆľÆÆ»ÂÁºÀÁ·½¾³º¼±¸½°¸¾¯·½¬´º¦±¶£¯µ¥°·¤¯¶£®µ¢­´¤¯¶¢­·ž«·˜©µ—©²“¦°£¯¡°Ž¡­Ž¡°¡°’£²—§µ—§µ•¦²•¦²’£²’£¯£¯ ¬ ¬’Ÿ« «’¡«‘ ª“¡ª’¡«“¢®—£±˜¤¯˜¤¯˜¤¯—£®™¥°›¦°›¤°š¦® §¯¡§®£©­£©¯¤ª±¤«³§­´¨®´¨®´¨®´¨®²¨¬²§¬¯§­±©¯µ©¯µ©¯³ª­°§«±¨ª°ª­´ª­´§ª®¨«¯§¬¯¤ª°¥«±¥«²£©°£©°¢©³£¨±¤§®£¦ª¦¤ª§¦¨§¤§§¡££žžŸ™›œ•–—Ž’……Š€…}€~y|vuwqtxls{fq{amu\jsWdpRamQ`jO^hLZcJXaHV_FRZEQYCOWBNVBMTBMTALSALS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRHSZYagq{~’œŸ¦²¸«·¿ª¶¾­¹Á®ºÀ¯ºÁ³¿Å·ÂÇ»ÅȽÅÈÀÉÊÃËËÈÏÎÌÒÐÎÓÏÏÔÑÍÒÏÌÒÐÉÏÌÊÐÎÌÒÐÒÕÒÔ×ÔÔØÒØÙÔÚÚÔÜÚÔÞÛÔàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖáÛÕßÜÕàÚÔÞØÑÛÔÌÝÖÎßÙÓàÚÔàÚÔÛÑËι­·”‡¦wgžjZ’YGTBQ>†G4†F2†F2‡H5‰K:‰K:†G4‡F4‡G6ŠN;ŠM9‹N:ŠN;ŒP=O>ŽR?WE˜bS£uf­‰{°ƒ®Š|­‰{­‰{¬†z«ƒu®‡z´”‰¶˜Œ¶–‹³’†®‡zŸo^WE‡G3†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2£ym«Ÿ­¨¬­«±±®±·®­º«¦¼³²ÄÁÄËÅÇÍÉÃÍËÅÏÌÅÍËÅÌÉÂÊÆÀÇÄÀÄÁÁÂÁÀÀÁ¿ÀÀ½¿¾½º¹¸¸·¶·¶µ¸¶³·µ³µ³±±²°¯²²­²²¬¯¯«­¯§ª­§©«¤¦¨¢£¤Ÿ¢¥›Ÿ¥™Ÿ¥š §›¡¥£§Ÿ£©£§­¤§«¤¦©¤©©¥¨«¥§ª£¦ª¡¦¦£¦¦¤¦¨¢¥¨¦¦¦£¦¦¢§§¤§§£¨¨¥§©£¦©£¦©¢¥¨¤§ª§©¨§©«©«ª««««««¨««¨­­«®®¯°±°±²°¯±²²²´´´µµµ±³²°²±µµµ´´´²²²°°°±°²±²³²³´®°¯«°°ª­­¨«®§¬¬¦¬­£ª¬¢©«¤©¬¡¨ª ª­¡©¬¡«®¢ª° «°¢ª°¡©¯¢ª°¥¯µª±¶­´¹±¸½²¹¾·¿Â¹ÁĺÂźÂÅ»ÂĻĿÇǽÈȽÆǼÆżÅƼÅƺÄƹÂúÂźÄƺÅȼÆȾÆÉÄÊËÈÎÌÊÏÌÌÏÌÌÏÌÎÑÎÐÒÎÑÓÏÓÔÏÕÖÑÖ×Ò×ØÓ××ÑÙÙÓÚÛÖÛÜÔÛÜÔÛÜ×ÝÝ×ßßÙààÚßßÙßßÙààÚààÚààÚààÚÞÞØÝÝ×ÝÝ×ÚÚÔÕÖÎÔÕÐÓÔÏÎÐÉÍÏÉÌÎÊÌÐÊËÐÌÊÏËÉÌÉÇÌÉ¿ÈÆ»ÃûÁ¹¿À¶½¿¶½¿²¼¿°¸¾¬³¸¦±¶£¯µ¤¯¶£®µ¢­´ ¬´žª²ž¬µ¡¬¶Ÿ«¶œ¬·™ª¶–§³•¥³‘¤°¡°Ž¡®¢¯£°’£²‘¢±”¥´“£³’¢²’¢°¡°¡° ¬Ÿ©‘žªŸª‘ ª‘ ¬‘ ¬’¢°•¢±–¢°—£±˜£°—£®˜£°š¥²š¥±™¤°š¥¯§° ¨±¡©²£ª²¡©¯£ª²¢ª°¥¬´§­´§­´§­³¤«°§­±§­´§­´§­´§«±¦ª°¦ª°¦©°§ª±¥©±¤ª±£ª²¡©²¢§°£¨±¡§®¡§®¡¦¯ §¯ ¦¬¢¢«¤¤ª¥£©£¢¤£ŸŸ——š’’—Ž‘‰‰Š€…}}~y|wwzqsvlrvgoxcmv\jsYepSblP_iN[gKYbKWbHV_FRZEQYCOWBNVAMSALS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@LRGQWP[`ny~š¢¨¨´º«·¿¬¸À©µ»ªµº²¼Âµ¿Å¹ÁǹÄɼÆɾÈÊÁÊËÄÌÌÈÏÎÊÐÎËÑÏÈÏÎÉÏÍÈÎÌÉÏÍÊÐÎÍÒÏÑÔÑÓÖÓÕ×Ñ××ÑÛÙÓÝÛÕàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÜÔàÜÔàÜÔàÝÖàÝÖàÝÖÞØÑÕɾɯ£µ‘ƒ¥ud—_NŽR?ˆH4ˆE3ˆE3‡G3‰J7‹N:O>‹M<ˆH4…F3‡G3‡G3‡G3‡G3…F3ˆH4S@—_NœiZ§|o³“ˆ¶›‘µ–Œ·™· ˜¶œ“¸š‘·œ’¸ —·œ’µ•Š²‘…°Ž‚¡q`“ZHŠJ9ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3‡F1‡F1‡F1‡F1ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3ˆE3Ÿui§¡ª¬«³²©«µ¬«¶³³º¸¹ÃÀÃÈÅÅÍÈÈÌÈÂÌÇÄÉÄÁÇÁÀÆÁ¾ÃÀ½ÁÀ¿ÅÂÂÅÂÂÄÁÁÁÀ¿¾¾¾¹¹¹µ´³¶¶³´´±´²¯±¯¬­¯®¨®¯¤«­¥ª­¥¨«¤¦©¡¤¨¡£¥œŸ£™Ÿ£™Ÿ£˜ž¤—£—£› £š ¦œ¢¨Ÿ£© £§ £§Ÿ£© ¤ªŸ£© £§¡£¦ £§¢£¤¡£¥¢£¤£¤¥££¦¢¤¦ £¦ £¦ £¦ £¦¡¦¦¢¥¨¥§©¥¨¨¤©©¥§©¥ªª¦««§¨©¨©ª¨¨«©«ªª­­°°°¯°±¬®°®¯°­°°¯°±¯°±¬®°­¯±¬¯¯¬®°­®¯©«ª©¬¬§ªª¦««¥ªª¡ª«¡§« §©¢©«¢ª­§®°§®°¢ª°¡«®¢ª°£«±£­³¤®´¦®´©±´¬´·­µ¸²¹¾´»½µ¼Á¸ÀúÂÅ»ÄźÃÄ»ÄÅ»ÄÅ»ÄźÂÅ»ÄźÃĸÂŹÁĻğÃĻĞÅÇÃÉÊÈÎÌÉÏÍÊÏÌÌÑÍÍÑËÍÐÍÎÏÍÐÒÎÑÓÏÓÔÏÔÕÐÔÕÐÕÖÑ×ÙÒÙÚÕÚÚÔÜÜÖÝÝ×ÛÛÕÞÞØßßÙßßÙßßÙßßÙààÚààÚÞÞØÝÝ×ÝÝ×ÙÚÕ××ÑÕÖÑÏÑÊÎÐÉÌÎÈÊÎÈÉÍÇÉÎÊËÐÌÌÑÍËÐÌÂÉȾÆƼÄļÂø¿Á·¾À³½À°¸¾¬³¸¤¯´£®µ «² «² ¬´Ÿ«³›©²œ«µœ«·žªµ›«¶šªµ˜¨³•¦²–¥±’¢°£¯Ž¢°¡¯ ¯ ¯¡°¡°¡°’¢²‘¤³’£²¢® ®ŒŸ«ŽŸ«Ÿ­žªžª‘ ¬’Ÿ®“ ¯’Ÿ«”¡­—£±˜£°˜£°—¢¯—£®˜£­˜¦¯œ§±œ§±§°œ§®›§¯ž¦¯¡¨²¢©³¤«³¤«°¥«²£©¯¤ª±¥«²¥«²£ª²¥©±£©°¥¨¯£©°¡¨°ž¦±Ÿ§²ž¦± §±Ÿ¨´ ¨³Ÿ§­ §¯œ¦¯›¤°Ÿ£«¡£©£ £¡›ž—™›’”–Œˆˆ‹‚„†~y{xvzqtxkqxdnt_ks[fpXdlSajO^hL[eKYbJXaHT\FRZEQYCOWBNVAMSALS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KREPWR]bnx{“ž£¦²¸«¶½«·¿©µ»¦°³¬·¼±¼Á³¿Å¹ÁǺÂÅ»ÄżÆɾÉÉÂËÌÆÎÎÄÍÎÅÎÏÅÍÍÅÌËÆÍÌÈÎÌÊÐÎÎÑÎÐÒÎÓÕÑÖ×ÏÙÙÓÜÚÔßÝ×ßÝ×ßÜÕàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖáÝÕáÝÕàÜÔàÝÖàÝÖáÛÕÛÓÊÕź̳§º™Š£sb”YGŒN9ˆI6‡G3‹M8˜_MžjZžjZ˜cQ’WEO:‰J7‡G3†F2†F2†F2†F2ŒP=™dS¥yk®Œ€¶œ“¹£œ¹£œ»«¥½³°¾±®¾®¨¾®¨½¯«¼¨¢¸ —·œ’·œ’®‰z¢ra“ZHˆH4†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2‡F1‡F1‡F1‡F1†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2†F2§‡~«£©««´°¯±¶µ·º¹¾¿¿ÂÄÁÄÄÁÁÉÄÄÉÆÃÈÅÂÆÁÁÁ¾¾Â¿¿ÃÀÀÂÁÀÄÁÁÄÁÁÁ¿ÀÀ¾¿¼»½·¸¹¶¶¶´²¯³³­±®ª¬¬©¦©©¢¨©ž¥§Ÿ£©Ÿ£©¡§›Ÿ¥™£›Ÿ™œŸ™ž¡› œžšœŸ˜ž¤™Ÿ¦™Ÿ¦›Ÿ§›Ÿ¥œ ¦›Ÿ¥ ¤Ÿ¥ ¤ ¤œŸ£ ¡¢ ¤Ÿ¡¤¢¡£¢£¤¢£¤ ¤ ¤ ¢¥Ÿ¤§Ÿ¤§ ¦§ £¦¢¤¦¡¦¦¢¥¨¤¥¦£¥§¢§§¤¦¥¦§¨¦¥§¤§§¨««§¬¬¨««©«­¨­­§ªª¨ª¬¨­­¨­­¨®¯ª¬®©«­¨ª©¥ªª¦©©£©ª£©ª ¨«ž¦©œ¤§¡§¨¢¨¬¤«­¦­¯¦­²¦®±£­°Ÿª¯£«±¤¬²¦®´¦­²§¯²¬´·¯¶¸¯µ¹³º¿·¿Â¸ÁºÂźÃÄ»ÁźÀĺÁúÁúÁƺÁƺÁøÁ¸ÀùÁļÃÅÂÈÉÆËËÈÎÌÊÏÌÊÏÌËÐÌËÐÌÊÍÊÍÎÌÏÑÍÐÒÎÒÓÎÕÖÑÖ×ÒÖ×Ò×ØÓÙÙÓÚÚÔÚÚÔÜÜÖÜÜÖÛÛÕÞÞØßßÙÞÞØÝÝ×ßßÙßßÙÜÜÖÛÛÕÜÜÖÙÚÕÖ×ÒÔÕÐÐÑÌÌÎÈÊÌÆÈÌÆÈÌÆÇËÅËÏÉËÐÌËÐÌÀÈÈ»ÂĺÁùÀ¸¿Á²¼¿²¹¾¯¶»ª²¸¥¯µ¡¬³¡¬³¢¬² «²Ÿ«³œª³š©³œ¨¶š©µš©³šªµ™©´—§²•¦²“¤³‘¢±Ž¢°Ž¡­ ¯ŽŸ®ŽŸ®‘¢±’¢°“£³’£²’£²¢®žª‹œ¨‹žª‹œ«Œœª«Ž›ªŽž¬Ÿ® ®“ ¯’Ÿ®”¡°•¢±–¢­”¢«–¢ª—£®™¤°š¥¯™¥­š¦®™¥­š¦®Ÿ§²ž¦±Ÿ¦® §¯¢©± §¯ §¯ §¯¢©±¢©³ §± ¥® ¦¬Ÿ§²ž¦±¤°œ§³œ§³œ§±œ§³œ¦¯œ¥±œ§³š¥±™¢®™ ªœ›£œ˜žœ”—š‘•ŒŽ‘ˆŠ‹ƒƒ†~~y|wtwoqtkoufmu`jp[fmWckS_gQ]eNZbKYbJXaHV_FRZDPXCOWBNVAMS@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KR@KRJTZ^hks}€˜¢­²ªµ¼ª¶¾«¶½¥°µ¤®±¬·¼³»Á±¼Á´¿Ä·ÁĹÃżÇǽÈÈÀÊÌÁÊËÀÉÊÀÉÊÃËËÅÌËÈÎÌËÑÏÍÒÏÏÒÏÒÔÐÕÖÑÖØÑÙÙÓÞÜÖßÝ×ßÝ×ßÝ×àÝÖàÝÖàÝÖàÝÖàÝÖàÝÖàÝÖßÚÑÞÙÐßÛÓàÜÔàÜÔßÙÒÛÓÊÕȼ̴¦¹•‡©{i¢q_›fTŽR?‘UB¤uc¯ˆx­…t¨{j¤saŸjY—bPVA‹M8‡G3‡F1‡F1‰J7—`N¬ƒtµ›’¹ª¢¼°ª¼²¯½·¶¿¾ÀÀÁÂÁÁÁÁ¿ÀÁ¿ÀÀ¹·½³°½±«¼¯©º¤±Ž o]O:‡G3‡G3‰I5ŠJ6ŠL7ˆG2‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‰E2‰E2‰E2‰E2‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1§ššª¨¬±±·µµ»¹¹¿½¼ÁÀÀÃÂÀÁÅÀÃÄÁÁÆÁÁÃÀÀ¾½¿¼º»»º¼¾¼½À½ºÀ¾¼¾½¿½¼¾»¼½ººº´³µ²±³±±®²¯«¯¬¨©¨§¦¦¦ £¦œ¡¤›¡¥š ¦™Ÿ¥›ž¢™ž¡˜ –™™››œ››ž™›ž•™Ÿ”š¡•›¢–œ¢—›£—£›ž¥˜œ¢˜›¢š¡™£›ž¢šŸ¢›ž¡ŸŸ¢Ÿ ¡  £œ¡¤› £œŸ¢œ ¦Ÿ¢¦Ÿ¢¦¢¥ž¡¤ ¤Ÿ¡§ £§ £§ £§Ÿ£© ¦§ £§¢¥¨¡¤¨¥§ª¤©©¢§§¤©©¥ªª¦««¥ªª§ª­¦«®¥ªª¥¨«¥¨«¥¨¨¤§ª¡¨§ ¦§ ¦§ ¦§ž¥§œ¤ª›£©œ¤ªš¥ª¢¨¯£©­£ª¯¡«® ¨®¢ª°¤«°¥¬±§®³¨¯´©±´¬³¸­³·±¸½´¼¿µ½À¸ÀùÁĺÁø¾Â·¾À¹¿Å¸¾ÄºÀĺÁùÀºÁûÂľÅÇÂÈÉÆËËÈËËÇÌÉÇÌÈÆÎÈÉÎÊÊÍÊÌÎÍÎÑÎÏÑÍÒÔÐÔÕÐÔÕÐÕÖÑÖ×ÒÖ×ÒØØÒÙÙÓÛÛÕÜÜÖÚÚÔÝÝ×ÝÝ×ÛÛÕÜÜÖÜÜÖÜÜÖÜÜÖÚÚÔÛÛÕØÙÔÔÕÐÑÒÍÌÎÈËÍÇÇÊÇÈÍÉÇÌÈÄÉÅÈÌÆÈÍÊÇÌÉ¿ÈÆ·½¾´»½´»½³»¾¯¹¼¬³µ©°µ¨°¶¥¯µ¢¬µ¢­· ¬´ «²œª³œª³˜¥±–¦±—§²š©³™©´•¦²–¥±“£±‘¡¯ ¯Ž¡­¡­ ¯Œ¬ž­ŽŸ®‘¡¯¡°’¢°¡°žª‰œ¨ŠªŒœªŒœª‹œ«Š¬‹›©Œ¬‹ž­­Ÿ¯ °Ÿ­’¢°‘¢®” «–¡«–¢­—£®˜£°˜£¯™¤®š¥¯š¥±œ§±œ¦¯œ¦¯ž¦±Ÿ¦°Ÿ¦°¡¤« §¯ §¯ §±¢§°£¦­ ¦¬ §±Ÿ¦° §±Ÿ£®¤®œ¤¯œ§±œ§´œ§´›¤³™¢®–ž©——¢˜”œ™“–˜Ž•‹Œ†‡Œ‚ƒ†|}€yzyvvqprjloeko`goZdjV`fR]dQ[dNY`KW_KV`GS[FRZDPXBNVAMUALS@JSAIRAIR@KR@KR@KR@KRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRALSNX^eor‡Š“ž£Ÿ§­©³¹ª¶¾¬¶¿ªµ¼§²·ª±¶­¸½­¸½¯º¿³¾Ã¶ÁĸÃƸÅȺÅȼÆȼÆȽÅÈ¿ÆÈÄÊËÇÍËÊÏÌÍÒÎÐÓÐÒÖÐÔÖÒÔÖÐØÚÓÜÜÖßÝ×ßÝ×ßÝ×ßÝ×ßÝ×ßÝ×àÝÖàÝÖàÝÖàÝÖàÜÔßÙÓßÛÓàÝÖàÝÖàÜÔÞÙÐÚÒÉÔŻ̵¨ÄªžÅ¬ ¼ž’£sb•]I©|k¸—ˆ¹˜‰µ”…³²Ž€°‹|§zi™dRP<ŽP;R>‘UB p_³”Šº§ ¼²¯»¸µ»¼º½¿Á¿ÅÆÃÈËÃÈËÀÇÉÀÆʾÄÅ¿ÀÁ½½À¿ºº¾±®º¢™®†x˜aO‘XC•\G—`NŸkXœgU‘UBŠJ6ˆG2‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1ˆG2ˆG2ˆG2ˆG2‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1‡F1¤Ÿ£­©¯´²¶¹¸½¹¸½º¹¾¿½Á¾¾ÁÀ¿ÁÂÀÁÀ¾¿¼»½ºº½¹º»¹·¸º·´¼·´¹¸·¹º»·¶¸¹¸º·¶¸´³µ¯®°°­©¯¬©­ª§©§¥¥¢¥ ¤žŸ £›ž¢Ÿ¡› ™œ —š”š›•ššššš˜™š•—š–š‘—’˜ž’˜ž•›¡–œ¢–œ¢•›¡”š –œ¢–œ¢–œ¢—›¡™œ › › žŸ œž ›ž¢› £œ ¦ §šž¤› š ›ž¢šž¤›Ÿ¥œŸ£š ¦¡§£§Ÿ£©Ÿ¤§Ÿ¤§ £§ £§Ÿ¤§Ÿ¤§£¦©¥¨«¢©«¤©¬¢§ª¢¦¬£¦©£¦©¡¦©¢§ªž¥ªž¥§ž¦©ž¥ª¤©œ£¨œ£¨—£©˜¢¨š¤ªš¢¨¤¬š¥ªž¨®¢¬¯¤¬¯§¯²¬³¸«µ¸¬³¸¬²¶«²·¬³¸¯·º²¹¾µ¼Áµ¼Á¶½¿¸¿Á·¾Àº¿Â¼ÁÄ»ÀúÀĹ¿Ã¹À»ÂĽÅÈÀÇÉÂÈÉÄÉÉÅÈÈÄÊÇÆÌÊÆËÈÇÌÉÇÌÉËÍÌÎÑÎÏÑÍÐÑÌÑÒÍÓÔÏÓÕÎÓÕÎÓÔÏ×ØÓÙÙÓÚÚÔÛÛÕÜÜÖÜÜÖØØÒØÙÑÚØÒÜØÒÜØÒÛØÔÙÙÓ××ÑÓÔÏÍÎÉÉËÇÉÊÅÇÊÇÆËÈÅÊÇÄÉÅÀÆÄÄÉÅÂÉȾÅĸ¾¿´»½µ¼¾³º¿¬³¸¬²¶¦®´¢®´£®µ ¬´¡­µŸ­¶ž¬µ›¨´š©³˜§±–¦±•¤°•¦²•¤°’¡­žª«­ž­ŒŸ¬ ¯¡° ¯Ÿ¯ŽŸ®ŒŸ®Žž®ŒŸ«Š©‰š©ˆ›§‡š©ˆ™¨ˆ™¨ˆ›ªˆœ¬ˆœ¬‡š©…™©†šª‰­‹°ŽŸ°ž­¡°’¢°’¡­”Ÿ¬• ­•¡¯•¡¯—¢¯˜£°˜¤¯›¦°¥®ž¦¯ž¦¯œ¦¯ ¥®£¦­£¦ª£¥«¤§®£¦­¤§®¢¦®£¦­£¥®¢§° §±Ÿ¦®Ÿ§²ž§³œ§´›¤³š¡­—œ¨—™¢•”œ–“•ŒŽ“‰Š’„†‹€€‡}~xz{uwsqukkndgk`fmZbhW_hR]dOZaMX_LW^IU]GS[EQYCOWCNUBMTALS@JSAIRAIRAIR@KR@KR@KR@KRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRALSKU[_fkt|‚”Ÿ¤¡¬±§²¹ªµ¼«¶½ªµ¼©³¹§±´¬¶¹¬·¼¯º¿°»À³»Á´¾Ä³¿Å·ÂÇ·ÂŸÂźÂŽÅÅÁÉÉÆËËÇÍËËÐÌÍÐÍÐÔÎÒÔÎÓÕÑØÙÔÛÛÕÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ßÝ×ßÝ×àÝÖàÝÖàÝÖáÝÕàÝÖàÝÖàÜÔàÝÖàÜÔÝØÏÙÒÊÖË¿ÓżÑǾ;´¼Ÿ¦we°‹|¾¦˜Á¬ À©œ¿¨›À¬¡À±©¼¦®‰zŸlZ£sb§xh¦zj±„¸£»®«½·¶¼½¾½ÀýÄÆÁÇÈÅÊÍÄÊËÃÉÊÂÈÉÁÈÇ¿ÆȽÄÆ¿Áÿ¹¸¾®¨¹ž”³ƒ¯ˆx´“„µ“‡·•‰±Œ}£tbšcQ‘U?ŠI4ŠG2‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1¨Ÿ¤­§©´¯²·µ¹¸·¼¹·½¼º¾»»¾¹¹¼¹¸½»¸»·¶¸·¸¹µ¶·µ´¶¸²±º³±¸µµ´´·³³¶µµ¸³´µ±±´®¯°­ª§­¨¥©©©¦¦¦¢£¤Ÿž œž¡œžœžšœž—š•˜›“™š–—˜’•˜”–™’—š•™Ž•š•™‘•‘—“™Ÿ“™Ÿ‘—’˜œ’˜œ”šž•›Ÿ”šž“™•™Ÿ–š ™£—£™Ÿ£™Ÿ¥˜ž¤™Ÿ¥›Ÿ¥˜ž¤—£•›¡–œ¢—£˜œ¢˜ž¥˜ž¥™Ÿ¦š ¦š ¦¡§¢¥›¡¥›¡¥œ¢¨£§¡¦©¤©¬¡¦©¡¦©¡¦© ¦ªž¥ª ¦ªŸ¥©ž¥§ž¥§œ¦©œ¦©›£©œ£¨›¢§˜¢¨– ¦– ¦– ¦•Ÿ¥š¡©›£©Ÿ¦«¢¬¯¨°³«³¶¬´·¬³¸ª±¶¨¯´§®³¨¯´¬³¸¯¶¸²¹¾±¹¿´¼¿·¿¿·¾À¸¿Á¸¿Á»Àù¿Ãº¿Â¸¾Â¸ÀùÁļÅƾÆÆÀÅÅÀÆÇÂÇÇÂÈÆÃÊÉÄËÊÆËÈÉÌÉÌÏÌÍÐÍÍÐÍÐÑÌÐÒÎÐÒÎÒÔÍÒÓÎÒÓÎ×ØÓØÙÔÙÚÕÚÛÓÚÛÓÙÚÒÖÖÐ×ÕÏÚ×ÓØÖÐØÖÐØØÒÖ×ÒÑÑÎËÌÇÄÆÂÄÆÂÂÇÄÄÅÆ¿ÄĽÄþÄÅ¿ÆŽÄƼÄļÄĺÁö½¿±¸½­´¹ª°´§¯µ¥¯µ¡¬³ «µ ¬´œ«µ™©´™¨´˜§³˜¤²”¤²’¡°¡°Ÿ«ž­Œ¬Œ¬Œ¬‹ž«‹ž­Žž®Ÿ¯ŽŸ°ŒŸ®‰ž¯ŒŸ¬ŒŸ«Š¬‡š©‡š©…š©†™¦†™¥†™£‡š§‡›«‡š©…š©…œ«†›¬‡œ­‰­ŽŸ°ž­ž­ ® ®Žž¬ ®“ ¯•¡¯–¢°–¢°–¢­š¥±›¥®Ÿ£« ¤¬ ¤¬£¥«¥¤©¦¤¨¦¤¨¦¤ª¦¤«§¦«§¦«¦¦©¤¦©¥¥«¢¦¬£¦­¡¦¯ž¦±œ¤±šŸ«™œ¦—™¢•”œ”“’Š”†ˆ’‚‚Ž‡||ƒvyytwtqtmmpfim`flZafT^dP[bNY`LW^KV]IT[GRYEPWDOVCNUBMTALS@JSAIRAIRAIRAIR@KR@KR@KR@KRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIRAIREOUMW]_gmŠ”—ž©®¢®´§²¹ª´º¦±¶›¦«‘˜¥¯²¯¹¿®ºÀ¯º¿²ºÀ²¼Â³½Ã³¾Ãµ¿Â·ÁĸÂĺÄÆ¿ÆÈÂÈÉÃÉÇÇÍËÉÎËÍÐÍÎÐÌÑÓÏÕ×ÓØÙÔÜÜÖÞÞØÞÜÖÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ßÝ×àÝÖàÝÖàÝÖàÝÖáÝÕàÝÖßÛÓÝÙÑÛÖÍÚÓË×ÐÈÖÑÈÒÊÁ˸®À¦š¿¤—ű¦È¸¯È¸¯Å¶¬Æ»´ÈÃÀÆ¿½¾¬£´•ˆµ–‰·œ’·Ÿ–º§ º­ª»²±»º¹»¾Á¼ÂƾÆÉÂÉÈÄÊËÆËËÆËËÈÊÉÃÊÉÂÈÉ¿ÆȾÅÇÂÀÁ·²À²«¾¯§¿«¢Á¯©Ã´¯Â¯¨¿§œº›Ž²‹{žiWP;‹H3‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1ŠF0ŠF0ŠF0ŠF0‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1¦™œª¡£­§©µ²µ¶µº´¶¹´¶¹µµ»··½¶µº´´·±³µ±³µ°²µ°°³µ²²µ²¯µ²®²±°³°³°±²®°²®°³ªª­¬©¦ª¨¦¦¦¦¢¢¥¡¡¡žŸœžœ››šœ—™œ•—™“–™’—š“•˜’•˜’”–‘––•••˜Ž”šŽ”š–š•œ‘—‘—ž‘—ž–•œ’˜œ’˜œ—œ“™•›Ÿ–œ¢–œ ˜ž¢˜ž¤—£šž¤˜ž¢•›Ÿ•›¡’š ”š¡–œ¢—£—¡–¢–ž¤–¢˜Ÿ¤™Ÿ¥š ¦š ¦™Ÿ¦š §œ¢©ž¤ª ¦ªŸ£©Ÿ£©ž¤«¤©£ª›¢§ž¤¨œ¤§ž¥§ž¤¨œ¤§š¢¨™£¦š¢¨–¡¨• §–ž¤–¥”ž¤—Ÿ¥›¦«¢¬¯¦°³©°µ©°µ¨¯´¨®µ¤«°£ª¯£ª¯¥¬±©°µ¬´·¯µ¹°·¼³¹½´»½µ¼¾¶½¿·¾À¸¾Â·½Á¶¼Â¶½¿·¿Â·ÁøÂÅ»ÂĽÃÄ¿ÅÆ¿ÆÈ¿ÆÈ¿ÈÉÀÈÅÄÊÈÆËÈÊÌËÊÍÊËÎËÌÐÊÍÑËÌÎÊÏÐËÑÒÍÑÓÌÓÔÏÓÔÏÖ×ÒÖ×ÒÖØÑØÙÔ×ØÓØØÒÙ×ÑÙÖÒÕÕÏÔÔÎÖ×ÒÑÓÏÊÌÈÂÄÀ¾Á¾¾ÃÀ¿ÂÂÀÂÄ¿ÅƾÅÇ¿ÅƼÂûÂļÃźÁô¼¿±¹¿¬³¸¨°¶¤¯´£®µ¡¬³ «µœ«µšªµš©³š¦±—¤°–£²’¢°Ž¡­Ÿ­ŽŸ®ŽŸ®ž­‰­Š›ªŠ¬‹ž­ž­ ¯ŒŸ®‹ž­ˆ¬‰­Š¬‰œ«†›¬„™ª…™§ƒ˜¤ƒ˜¤„˜¦…˜§‡š©‡˜§‡š©…š©…š«…š«‰­‹Ÿ¯ ¯Žž®­Žž¬«ž­“ ¯“ ¯“ ¯“¢®–¡®›£¬¤¬ £ª£¢§§¡£§¡£¨¡¢©¢£ª¡£ª ¡­Ÿ¡¬ŸŸ¬¡¡¬¡¡¬¡¡© Ÿ© Ÿ© ¢¦¡¥¤ ¦ ž¤œš ˜”š˜’˜•“•‹”„‡“‚Ž}|‹zy†wu~tuvprpmpggm`dj[ahT_fR\bNX^LV\KU[ISYHRXEPWFPVCNUCMSBLR@JP@JP@JP@JP@JP@JP@KR@KR@KR@KR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPBLRDNTNY^|ƒˆš¢¨¨­ ¨®¤®´¤¬²’™žsz’š¬¶¼°ºÀ¯º¿¯¹¿¯º¿°ºÀ²½Â³½Àµ¿Â´¿Â¸ÃùÄÄ¿ÈÉ¿ÉÈÂÊÇÄÊÈÈÍÊÌÏÌÐÑÏÓÔÒÔÕÐÚÚÔÜÜÖÞÞØÞÞØÞÜÖÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ßÝ×àÝÖàÝÖßÜÕàÜÔÜØÐÛÕÏÛ×ÏÝ×ÑÜÙÒÚ×ÐÕÒËÑÉÀÎù˽´Ê»±Ê¾¶Ê¿¸É½É½ÈÉÄÉÊÈÆÁ¾¿±ª½®¦¼®§¼°ª»±®º´³ºµµ¹»¾º¿Â»ÂǾÅÊÂÊÊÃÊÉÄÉÉÈËËÍÍÍÌÌÌÈËËÇÊÊÃÈËÅÆÇÅ¿¾Å¾¼Ä¼¹Å¹³Æ»¶Æ¿½Ç¼·Å¶®Æ³¬¿¤š¬~l˜\IN8ŠG2‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‹G1‹G1‹G1‹G1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1‰F1¡’’£™š§ž£¬§ª¯¬¯¯¯²¯±³®°³±°²³®±²­­²¬«±¬¬¯­®®®®¯®­±¯­±°¯°¯®°­°®­¯­¯²­¯±ª«¬«¨¥©¦£¢¢¥¡ ¢œžš›œ›™š˜—™••˜”–˜‘––”—“—‹’—Š‘“Ž“–”—“–•˜”—“™Ž”š”š•œ’›Ž•‹“™”™–‘—›’˜œ“™•™Ÿ”›–œ ˜ž¤™£”š ”™œ“˜›–›Ž•š‘—ž”š¡•›¢–š¢”š¡–œ£—¤•£–œ¢–œ¢˜ž¤–ž¤–ž¤– ¦˜ ¦˜Ÿ¤™ ¥›¢§œ£«š¡«™ ¥˜ ¦š¡¦š¡¦£§£§›¢§™ ¥˜Ÿ¤™Ÿ¦™ ¥—Ÿ¥™¡ª˜ ©–ž§™£©Ÿ©¯£«±¥­³¥¬± ¨® §¬Ÿ¦«ž¦¬Ÿ§­Ÿ©¬¢ª°¥¬±©°µ¬²¶­´¶¯¶¸±¸½±¸½³¹½³º¼´»½³»¾´»À´½¾·¾À¶ÀøÀúÂÅ»Á»ÂĽÅŽÅŽÆÇ¿ÈÆÂÈÆÁÇÅÄÊÈÆËÈÈËÈÉÎÊÊÍÊËÍÉÌÍÈÍÏËÏÑÍÏÐËÐÑÌÒÔÍÔÖÏÕ×ÐÖ×ÒÕÖÑ×ØÓØØÒ××ÑÕÕÏÓÓÍÓÕÑÐÒÎÉËÇ¿ÁÀ¾À¿¿ÁÀ½Â½Â¾ÄŽÂżÁĶ½¿¹¿Ã¹À·¿Â³»Á±¸À«²º¨¯·¥­¶£­¶Ÿª´Ÿª´›ª´š©³™¨´˜¤²”£­’¡­‘ ¬ ¯ ¬ŽŸ®ž­Œ¬‰­ˆ›ª‡›«‰œ«‹œ«‹ž­‰œ«†›¬†›ª‡š©†šª†š­„™ªƒ—§‚—¦‚—¨‚—¦ƒ˜§†™¨‡˜§‡˜§…–¥ˆ˜¨‡™¬†›¯ˆ®Šž®‹Ÿ¯ŽŸ° ¯ž­ŒŸ®‘ ¬’¡­•¡¯•¡¯–¢­˜£­œ£«¡Ÿ¦¤¡¤¦Ÿ ¨šªœ˜«œ­žœ®œ˜¯›•¯˜“¯˜“®—¯˜“¯˜“­–Ž­•Œ«”Œª–§•‘¤“’¡’’œ™‰‰—‡‡–ƒƒ”|yŒwt‡tqƒrpwooqkmigkbdj[agW^cQ\cNX^JTZJTZHRXGQWFPVDNTCMSBLRBLR@JP@JP@JP@JP@JP@JP@JP@KR@KR@KR@KR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPBLRISYQ[aszŠ‘–—¡§š¢¨ž¨«š¥ª–›ry~˜›¨³¸¯ºÁ¯ºÁ¯ºÁ­¸½±¹¿²½Â²¾Ä´¿Ä³¾Ã¸ÂŹÄÄ»ÅÈ¿ÈÉÂÉÈÃÉÇÆÌÊÊÏÌÍÐÍÐÑÏÓÓÐ×ØÓÛÛÕÝÝ×ÞÜÖÞÞØÞÞØÞÜÖÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×ßÝ×àÝÖßÜÕÞÚÒÚÖÎÜÖÐÝÚÓÝÚÓÝÙÓÛ×Ñ×ÔÐÔÑÍÑÍÇÍÇÀËļËÅ¿ÉÄÁÊÆÀÉÊÈÊÍÊÈÊÉÄÅÃÁÀ¿¾»¸»µ´¸¶´·¶¸¹¹¹¹¼¿º½ÀºÁƼÃÈ¿ÈÉÆËËÈËËÎÎÎÎÏÍÎÏÍÍÎÌÍÍÍÈÊÌÈÉÊÄÇÄÃÄÂÄÂÀÅ¿¾ÃÀ½ÅÃÁÅÀ½ÈÀ½É¿¼É¶¯½’¥ub˜]H’R=J5ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0‹G1‹G1‹G1‹G1ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0ŠF0¡‡ƒ¡Ž‹¤””«™•­Ÿ›°¦£±©¦²§¢³¤Ÿµ£Ÿ´§¤²ª§´©¤²ª¤°­ª°­ª°®¬¯­«®®®­«¬©«®©¬°¨­°ªªªª¥¢©£¢£¢¡Ÿœœ››ž™š›•˜›“˜›”–˜”šŽ”˜“™Š‘–†‘˜…˜†Ž—ˆŽ”““—‘“•’•“™”—”—Œ’™Œ’™Š‘™Š‘™‰“™‹“™Œ“˜Ž”˜–”™œ˜šœ˜›ž–›ž•›Ÿ–˜›‘—‘—žŽ••›Œ”š–›‘˜ ‘—ž‘—ž“™ ”š¡š “™ •›¢–¢•£”œ¢•£”ž¤•Ÿ¥– ¦˜Ÿ¤™ ¨–ž¤•¦–ž§–¥•£—Ÿ¥™ ¥˜Ÿ¤–¢—¤—ž£–ž¤—Ÿ¨™¡ª˜ ©˜ ©™£¬š¥¬œ¦¬›£©š¤ªš¤ª˜¢¨™£©™£©š¤ªš¥ªŸ¦«¡¨­£ª¯§®³ª±¶«³¶¬´·¬´·¬³µ®µ·°¶º¯·º°º½³»¾´¼¿´¿¿·Á÷ÁĸÀùÀºÁúÁýÄƾÅÄ¿ÆÅÃÆÆÄÆÅÄÉÅÇÊÇÇÊÇÉÌÉÊÍÊÊÍÊÉÌÉÊÍÊÍÏËÎÐÌÏÑÍÐÑÌÓÕÎÔÕÐÔÕÐÖ×ÒÖÖÐÒÔÍÔÔÎÒÒÌÑÓÏÏÐÎÇÊÇÀÃÀ¿ÁÀ¿ÀÁ½¿¾¼ÁÁ¼ÁĹ¿Ã·¼¿´º¾¶½¿µ½À´¼¿°¸¾­µ»ª±»¦­µ¤¬µ «µ›©²˜§±˜§±—¤°—¦²—¤³“ ¯Ÿ«‘ ¬Ÿ­ž­««Š©‹›«‹œ­Œ®Œ®Ššª‡™¬‡š©…˜§„˜¨„˜¨„˜¨„™ª˜§•§~”¦•ª€–¨‚˜ª…™©„—£…˜¢‡˜§†™¨…š«†›¬…š«†›¬‰°Šž®ŒŸ®‹ž­ ¬Ÿ«’¡«•¡¬• ª– ©š¡©œ ¦  ¢™˜¤—”§•ª–«–¬”‹¬’‰­“Š¯“Š®Œ€¬‡x¬†z«…yª‚tª‚t©‚r¨„x§†z¦‡}¢ˆ‚ †€œ„~™{˜|v”zvwqŠrl…qk~ljtjhkegecg]`dV\bQ[aMX_KV]ISYISYGQWFPVCNUCMSBLR@JP@JP@JP@JP@JP@JP@JP@JP@JPAIRAIRAIRAIR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPCMSLW\_gmq{~`jmemsŠ”—˜ ¦“›¡‹’—|ƒˆ€‡Œ£­³«·¿­¸Â¬¸À­·½«¶»°¼Â±½Ã³¿ÅµÀŶÀùÂüÄǽÈÈÂÊÊÂÉÈÃÉÊÉÌÌËÐÍÍÐÍÏÑÍÓÔÏØÙÔÛÜÔÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÜÖÞÜÖÞÜÖßÝ×ßÝ×ßÝ×ßÝ×àÝÖÞÜÖÞÛÔÜÙÒßÙÓÞÛÔÞÛÔÜÙÕÙÖÒØÖÓÔÒÏÐÊÄÍÊÃÈÈ¿ÉÇÁÈžÈÈÂËÌÊÉÌÉÈÊÉÂÇǽ¹¼¿¶»¾¶»¾·º½¸½À¹¿ÀºÁüÄÄÂÉÈÈËËËÍÌÌÎÊÐÐÍÏÏÌÏÐÎÍÎÌÍÍÍÌÌÌÇÌÉÇÉÈÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÄÇÄÈÅÂËÁ¾Èµ®º•„¬}k¡kV”XBŽM7ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/‹G1‹G1‹G1‹G1ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/ŠG/£{m¤w¦†}ª‡z®Žƒ°•‹±™²˜Œ´›´“´£¡²§¢³¤Ÿ³¤Ÿ±©¦°­­­­­ª¬««ª©ª«¬ªªª¨ª­©¨ªª§§©£¢¥¢Ÿ žŸšœŸ–˜ž–˜ž“—‘–™Ž”šŠ’˜ˆ™†Ž™„Œ•‚—„Ž—ƒ–„‹•ŠŽ–Ž‘•’“”’•Ž”•Ž‘•’–Š‘–ˆ”…—„Ž—„Ž—‡˜‹’šŽ”›’—š”–™™š››››•š”—›–˜›’—š–Ž•š•›Š•šŒ”š‹“™Œ”š”œŽ–œ——’™¡’™¡’œ¢“£’š “›¡”ž¤“ž¥“ž¥”›£”›£”œ¥”›£”›£”›£•›¢•£–ž¤”ž¡”ž¡•£”œ¢”ž¤”œ¥•£”œ¢”œ¢”œ¥•Ÿ¥–ž¤”Ÿ¤˜Ÿ¤– £– ¦– ¦—¡§™¡§š¢¨›£©œ¤ª §¬£«±¦­²¦­²¥¯²§¯²©°²ª±¶©±·©³¹¬´º°º½³»¾´¾Àµ¿Á·ÀÁ¸¿Á¸¿Á¸¿Á¹¿Ã½ÂŽÂżÃ½ÄÿÄÄÁÇÅÂÈÆÅÊÇÆËÈÆËÈÆÉÆÄÊÈÆÉÆÈËÈÊËÉÍÎÌÎÏÊÐÑÌÒÓÎÔÕÐÕÖÎÓÓÍÒÔÍÓÕÎÐÑÌÏÑÍÌÏÌÇÉȾÀ¿¼¾½»¾¾º¿¿º¿Âµ¼¾µ»¿µ»¿²º½²¹¾²¹¾¯·½ª²¸§¯µ¤¬² «²›§²™¥°–¢­•¤°”¡­•¡¯”¡°‘ ¯‘ž­Ÿ®Ÿ­Ÿ­­Œ¬‰š©Š¬Œ®‹°Œ®ˆœ¬†˜«…™©…—ª„˜«ƒ—§ƒ˜©€–¨€–¨—©~–©~”©~–¨™«†™¦‡—¥†—£‡˜§†šª…™¬†š­…›­…š«‰«ˆœ¬Œ¬ŒŸ®žªŽŸ«‘ ª‘¥”ž¤—¤˜ š™›œ–•Ÿ‰¤‰¦‡§„©‹«‹€®Žƒ¬Š~«€q¦xf¦uc¥tb¤sa¢o]¡n\¢q_£sb¤yj£}q¡}qzp›xn–vm’skŒqi‡mg€jfwfdoddgac_^`X[_RX_NX^NX^KU[GRYGQWEOUCMSCMSBLR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPAIRAIRAIRAIR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPCMSS[akuxisvQY_PZ`mwzˆ’•–¢•£Ž˜›ˆ ¨®¨³º¨³½ªµ¼©´»ªµº±»Á±½Ã´¾Äµ¿Â·ÁĹÃżÅƾÈÊÂÊÊÂÊÊÄÊËÆÌÊÉÎËÊÍÊÍÏËÒÓÎ×ØÓÚÛÖÜÜÖÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÜÖÞÜÖÞÜÖÞÜÖßÝ×ßÝ×ßÝ×àÝÖßÜÕßÜÕßÜÕÞÛÔÝÚÓÜØÒÚ×ÓÖÔÑÐÎÌÌÌÆÈÆÀÈľÇÅ¿ÆÇÂÉÊÈÆËÈÅËÉÂÉÈ¿ÅƺÀÄ·½Áµ¼Á¶½Â¸½À¹¿ÃºÃĽÅÅÁÈÇÉËÊËÌÊÎÏÍÑÑÎÑÑÎÐÑÏÑÑÎÏÐÎÍÎÌËÎËÊÌËÇÊÊÆÉÉÈÉÊÇÉÈÃÉÇÆÉÉÇÊÇÊÇÃÊ¿¸Å­Ÿ¼˜ˆ±…r¢jU”W@ŒJ2‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1ŒG0ŒG0ŒG0ŒG0‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1 oZ¡p^£tb¢q\¥r`¨{j«oª~n¯Šy²š‘² œ°¢ž´¡š±£Ÿ°¨¥ªª­§¬¯¦«®§¨©§©¨§¨©¨¨¨¨§¦§¤¤¤¢ ¡ ŸšœŸ•™Ÿ”˜ž‘•”šŠ‘›‡˜†Ž—†Ž”‡”ƒ‹”‹”‚Œ•‰’‚Š“†Œ’ŠŽ”‘’“”””’’’‘’’”Ž‘•Š–†’ƒŽ•ƒ–…•‰‘—‘”—”–™˜—™™˜š™˜š––™—˜™––™”—›’–œ‘”˜Œ“˜‹’—Š’›Š”š‹“™Š”šŠ•œŒ–œŒ—žŒ–œŽ•— š¡‘™¢š¡›¢™Ÿš ’š£‘™¢‘™¢‘™¢— — ™Ÿ’œ¢‘œ£”œ¢”› ’š “šŸ”œ¢“£‘œ¡’šš’š ‘œ¡“ž£”ž¡•Ÿ¢•£“Ÿ¥•Ÿ¥”Ÿ¦– ¦—¡§—¢§š¢¨š¥ªŸ©¬ ¨®¡©¯¡¨­£«±£ª¯¤¬²¤®´¦®·§¯µ¬³¸®¸»°º½²»¼´¼¿¶¼À·½Á¶½¿¸¿Á¹À¹À¹¾Á¼ÁļÂýÃÄÀÆÄÂÇÄÃÈÈÂÈÆÂÅÅÁÇÅÂÅÅÃÆÆÅÈÈËÌÊÌÍËÏÏÌÑÒÍÓÔÏÔÕÍÓÓÍÒÔÍÒÔÎÒÓÎÌÏÌÉÎËÃÊÉÀÃÿÁÀ¼¾½¹¾¾·½¾¶¼À³º¿²¸¾±·»°¶·¯µ¶­µ¸ª´·¤«°¢©«¨­™¤«™¤®–¢­”¢«’¡­’¡­‘¢±’¢°‘ ¯‘ ¯Ÿ¯ŽŸ®­Œœ¬Œœ¬ˆ›ªŠ›¬‰°‰›®‰›®†š­„˜¨ƒ—§„˜«ƒ—ª‚—¨‚—¨•§—©—¬}–ª{”¨—ª€–«ƒ—§„˜¨†™¨†™¨‡š©‡›«…š«…œ«‡œ­‡›©Š©Œ¬Žž¬žªŽž©ž§‘™¢’™ž“—•—™–““–˜ˆšŒˆ¡Ž‡£„¥‹‚§‰}©‰~©†y©s¦wg¡mZžiUŸhVgR™`K˜]HšaL›dR kW p_ qaœqd™qc•ocne‹lbƒg^{d_ra_f]\_\\YXZQW[MTYLV\IT[GRYEPWCNUDNTBLRBLR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPGQWMX]NX^LV\FPVQ[aksyˆ”•Ÿ¥™£©š¢¨ž¨« «°¤¬²¦±¶¨³¸­·½­¹¿±»Á²½Â´¿Ä·¿Â¹ÁĻĿÅÆ¿ÈÉÃÉÊÃÉÊÆËËÈËËÊÍÊÏÑÍÓÔÏÖÖÓÙÚÕÛÜ×ÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÞØÞÜÖÞÜÖÞÜÖßÝ×ßÝ×àÝÖàÝÖßÜÕßÜÕÜÚÔÚØÒÛ×ÑÕÕÏÐÑÏÍÍÊÈÅÁÈÅÁÅÆÄÄÅÃÆÈÄÅÊÇÃÉÇÁÈÇ¿ÅƺÁö½Â´¾Á·¾Ã¹¿Ã¸¿Á»ÃûÃÿÆÅÇÉÈËÌÊÏÏÌÏÐÎÑÒÍÑÒÍÐÑÏÑÑÎÍÎÌÌÍËÍÍÊÉÎËÈÍÊÌÌÌÉËÊÃÉÇÃÉÇÈËÈËËÅÌľ˼´Ç¯¤¾Ÿ’±…ržfQP8ŒH2‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1ŒH/ŒH/ŒH/ŒH/‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1‹G1š_JdNbM—[E—YAœ`J¡hSŸfQ¢r_¯ƒ²ž˜±ž—±Ÿ™¯¤¡ª¨©©§«¦¨«£©¯£©­¢§ª¢¥¨¦¥¤¤¤¤¢£¤   ˜›Ÿ”˜ ‘–Ÿ•›‹’œ‹’œ†Ž™„Ž—ƒ–„Œ•†•‚Š“‚‰“‰’‰’‚‰“‡ŒŠ‘‘’’’’‘“’‘’“‘‘’“Š”†’†•…‹’‡”Œ’“”•———™—˜š——˜—––—˜–—˜•—™•—™•–—‘–™•œŒ“›Š’›‹“œŠ’›†‘›ˆ’›ˆ“š†’š‰”›Š•œŒ”Œ—ž‹–— ‹–‹—Ÿ— ‘˜ ’™¡— — Ž–Ÿ‹•ž‹•ž™Ÿ’š ‘›ž‘™œ˜›‘™œ’™žš—š‹•—‰’“ˆ’”šŸ‘£‘£”ž¤“ž¥“ž¥’ž¤“£“Ÿ¥•Ÿ¥•Ÿ¥—Ÿ¨™¡§›¥«›¥«›¥«œ¦¬œ¦¬¨­Ÿ§­¢ª³£«´£«´¥°µ¦±¶«µ¸­´¹­´¹±·»³¹¿³º¿¶¼Àµ¼¾µ¼¾´»½¶½¿¸¿Á¸¾Â½ÂŽÃĽÃļÃżÂý¼ÁÁ¼ÃÂÀÅÅÃÉÇÈËÈÊÍÊÏÐËÐÑÌÑÓÌÒÔÍÑÒÍÑÓÍÏÑÍÌÏÌÉÎËÃÉǾÅĽÂº½½·ºº´º»³º¼´º¾±·¾®µº®´µ¨¯±©°²¤®±Ÿ§ª™¤©—¢§–¡¨–¡«“¢¬’¢­”¡°“ ¯ ¯Ž¡­¡° ¯Ÿ®Œ®‹ž­­Œœ¬Š›¬ˆš­‡›®Š›¯‡›®…š«„˜¦‚—¨ƒ˜©€–¨‚—¨~–¨~”©~–«}–¬}–ª|•©}–ª€–«—©ƒ˜©…˜§…˜§†™¨‡š©‡›«…œ«†›¬‡š©‹œ««‹œ¨¨¦š¡˜ž’˜Ÿ‘—›‘“–’’’•’’—Žš›ŽˆŸŒ… ‰¢‡}¥„x¤~r£xi o]œgSšaL™^I—ZC•U@•U@–YB˜\FšaL›cO›fUšjY–j\’h\ŒfZ„d[~bYr]WgYU`WVZWWRUYNTZIQWFQVGQWFPVEOUBMTBLRBLR@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JP@JPBLRCMSEOUCMSEOUITYR\bhruŠ”—”œ¢˜ ¦—¡¤ ¨®¡©¯§±·©´¹«¶»­·º±¼Áµ½Ãµ½À·¾Ã¹ÁĺÃľÆÉÃÉÊÄÉÌÇÌÌÊÌËÐÑÏÓÔÏÔÕÐ×ØÓÛÜ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÞØÞÞØÞÜÖÞÜÖßÝ×ßÝ×ÞÜÖÞÜÖßÜÕÞÛÔÝÙÓØØÒÒÒÏËÍÉÈÊÆÅÆÄÂÇÄÂÇÄÂÇÄÂÇÇÀÈÈ¿ÆżÂù¿À·¾Ã¶½Âµ¼Á¸¿Á»Á»ÃýÄÿÆÅÂÇÄÉËÊÍÎÌÎÏÍÏÑÍÐÐÍÒÐÍÐÑÏÎÏÍÏÏÌÏÏÌÎÐÌÎÏÍÍÍÍÉËÊÇÉÈÄÉÅÉÌÉËÌÇÍÇÁËÀ¹Êº±Æ®£¼œŽ­~l˜\FM5H1H1ŒG0ŒG0ŒG0ŒG0H1ŒG0ŒG0ŒH/ŒH/ŒH/ŒH/ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0ŒG0˜[D˜[D“S;M5M5‘N6•W?™[CbM§|j°›•®¡ž¯¢Ÿ­¤£ª§§«¨«§§­¢¨¯¡§«ž¤«›¡§¡ ¢¡Ÿ › –š ’— –””œˆ’›†™ƒŽ˜ƒ–ƒ–ƒ‹”‡”…Œ‘†Œ“‚‰“‚‰Ž†‹ŽŠ‘““–‘Ž—’“’‘‘’‘’Œ’‡“‰Œ“Š’’”•”“–—•™—•›––˜˜˜—–•———•–—“•˜’•˜‘”—Ž•šŒ”—Š’˜ˆ’›…š‚™ƒš‚™ƒ‘š†’š‰“œ‰”›ˆ“š‹–Š•œ‰”ž‹– Œ–Ÿ•žŽ–Ÿ‹” Š•Ÿ‰”žˆ”œˆ”œŒ–ŸŽ˜ž˜ž˜Ž˜›šŽ™ž™œ‹“–€‰ŠƒŒˆ’•—™ŸšŸ’œ¢“£‘£’¤”ž¤“ž¥”ž¤”ž¤”Ÿ¦–¡¨˜¢¨˜¢¨—Ÿ¨˜¢«™¡ª˜£ªš¥¬œ§®ž¦¬¡©²£«±¦­µ¨¯·¨°¶ª°·«²·®´¸®´¸°¶¼°¶º°¶º±¹¼±¹¼²º½µ¼¾µ¼¾·½Á¹¿Ã¹¿Ã¸¿Áº¿Â¸¿Á¼ÂüÄÁ½ÅÂÁÇÅÄÉÅÇÊÇÍÏÈÏÑËÐÒËÏÑÊÏÑËÎÑÎÍÏÎÉÌÌÃÈȾÃýŸ¾¿¶»»´¹¹´¹¼´º¾±·¾®´¸­³·§­±£«®Ÿª¯š¥ªš¤ª˜£ª–¢ª”£­”£­“¢®“ ¯‘ ¯Ÿ­ŒŸ«ŽŸ® ¯ž­Œ®‹ž­‹›«‹›«Šœ¯Š›¯‰š®‡™®†š­†šª†š¨ƒ˜©‚—«—©€–¨€–¨~–¨}–ª|–­}–ªz”©|”©—¬—©„–©†™¨‡˜§‡š§†šªˆ›ªˆ›ªˆœ¬‹›«Œœªœ¨Ž©Žœ¥Žš¢Ž™ Ž–œ——œ•™“–““–•’’–˜Ž‹šŒˆš†€š€w›}qšxl›pa˜eS—_J•YC“V?’R:‘P:’R:’T<•XA˜\F™^I—_K–bO’cSbU‡_T~^Su[UjWR`SPZTSRRUMRUHOTGOUEOUDNTCMSBLRAIR@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@JP@JP@JP@JP@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQAIRBLREOUJTZLV\NX^OW]T\bnv|Š‘––ž¤–ž¤œ¤ª¥­³ª°·ª±¶­´¹°º½²¼¿´»À´»Àµ¾¿¸Á»ÄÅ¿ÈÉÅÊÍÊÍÍÎÐÏÑÓÏÔÕÐÖØÑÚÛÖÜÝØÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÞØÞÜÖÞÜÖßÝ×ßÝ×ÞÜÖÞÛÔÝÚÓ××ÑÐÑÌËÌÊÈËÈÃÆÆÂÅžÅÄÀÃþÁĽÃÄ»ÂĹÀ¶¼Àµ¼Áµ½Àµ½À¸¿Á¹À¿ºÂ¼ÄÁ½ÄÃÁÇÅÅÊÇËÌÊÍÏËÏÐÎÎÏÍÐÐÍÐÐÍÐÐÍÐÎËÎÏÊÏÐÎÍÎÌÉËÊÇÉÈÇÉÈÇÊÇÊÍÊÌÎÊÌÊÄËſʾ¸É¶¬Ã©¶¢iT“S;ŽK3I0I0ŒH/I0N6“U=‘O7ŒH/ŒH/I0ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/ŒH/‘P7–T<M5I1ŽI/‘M4”R:œ_H¡fQ©}m¯™•®¡ž° š¯¡¬¤¤®££©¤¨¢¦®¡§®¡©šž¤™œ ™›ž–š ’˜Ÿ—¡Ž•ŸŒ“‰‘œ…Žš…Žš„Ž—„‹•‡”†Œ“‡‹‘‡‘‡‘‡Œ‰Œ‹Ž“•˜’Œ–‘Ž˜’Ž—’•”‘‘’‘‘‘’’’’••’—•“š—”›•”›––š—”—–•–––“•”–—•˜•˜”™‹•˜Š’˜…‘™„˜Žš€™˜Žšƒ‘š†’š‡’™‡’œ‰“œ‰•‰”žŠ•ŸŠ•Ÿ‹– ˆ“‡’œ†’š‡“›‡“›‰“œˆ”œŒ—žŒ—ž—Ž–œ˜˜˜Š”—ƒŒ„Ž…’„”„Ž‘†‘–‹–›Ž™ž›¢‘›¡‘œ£’¤‘œ£“£’¤“ž¥’ž¤“ž¥‘¥’§’§“Ÿ§–¡¨™¡ªš¤­›¥®¥®¡¨°¤«³¦­µ¦­µ¤«³¥¬´©¯¶«±µ­³·®´¸±·»±¸½¯¶»²¹»³»»³¹½´ºÀµ»Áµ¹¿¶¼À¶½¿¶½¿ºÀÁ»ÃüþÅÄÄÇÇÊËÉÊÎÈÍÏËÎÐÌÌÐÊÌÏÌËÍÌÇÌÉÂÉÈ¿ÄǺÁø¾Âµ¹¿±¸º²¸¼³¹½°¶½­´¹«±¸¨®²¢ª° ¨±š¥¬—£«•¡¬•¡¯“ ¬’¡­ ®Ÿ­Ÿ­ž­ŒŸ« ¯ ¯ž­ŒŸ®ž¯‹›«‹œ­ˆœ¬Šš­ˆ™­‰š«ˆ›ª†šª…˜§‚—¨ƒ˜©‚˜ª—©–ª€•©•ª|”©}•ª{•¬}–¬—¬ƒ˜¬‚˜ª†˜«‰™©‰™©ˆ›ª‰š©Ššªˆ›ªŠ›ªŽ›ªœ«œ¦Žš¢™¢Ž™ —Ž–œŽ–œŽ•šŽ”˜Ž‘”ŽŽŽŽ‰‰†…Ž~{uŽvmri‘na‘eU]KZES=Q9O7M5‘M4’P6”T<•W?–ZD”[F[GŒ\K‡YJ~XLuWKjTMcRP[RQSQRMORHNTFMRDLRBMTALSAIR@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@JP@JP@JP@JP@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@HQ@JPGQWHRXKU[LW\P[`OY_PX^W^cbjp…‰‘˜—ž£œ¤ª£«±§®³ª±¹ª²¸­µ¸¯¶»±¹¿³½À³»¾·ÀÁ»ÂľÈÊÄÊËÊÍÍÎÑÎÐÑÏÑÒÍÕÖÑÚÛÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÜÖÞÜÖßÝ×ßÝ×ÞÜÖÜÚÔØÖÐÔÔÎÍÎÉÊÌÈÄÇÄ¿ÂÂÀÁ½ÀûÀø¿Á·¾Àµ»¿´»À´º¾³º¼´¼¿¸¿ÁºÀÁºÀÁ»ÂÁ»Ä¾ÆÃÂÈÅÇÊÇÌÌÉÎÎËÍÎÉÎÎËÎÎËÎÏÍÎÏÊÎÏÊÏÏÌÍÎÌËÌÊÊËÉËÌÊËÍÉÍÏËÍÏËËÍÉÉÉÃȾȺ³Ä°¥»š‹¢nX•U=“Q7’P6N4N4’Q8˜[D¡kV™\EN4ŽJ1’N5ŽJ1ŽH0ŽI/H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.ŽJ1L3J0J0J0K2”S:š\D¡hRªo®”‹°˜±–Œ±š’±›”°–ª¡ ¡£© £ª¡Ÿ£šœŸ–š •™Ÿ‘—žŽ“œ‹’š‹“ž‹™‰š„™‚‹—ƒ‹–‡“ˆŽ’‡‹‘‹ŒŽ‹ŽŽŽŒ“ŽŽ•Ž—‹–‰š’Œš’Œš’Œ™‘Ž˜’Ž”‘Ž”Œ“‘“’‘–“™”‘›•‘›—‘–”œ–’—–•–•””•–‘“••˜“–•˜Œ”—‹“™ˆ“˜‡’™…’˜€™Œ˜‚Ž–‚Ž™„›„›ƒ‘š„’›†”ˆ”œˆ“‰”žˆ”Ÿ‡“ž„›ƒšƒ‘š…“œ…‘œ‡’œ†’š‰•Œ–Ÿ‹—•›‹–›‹—Œ˜ž‰”™„Ž~†‰v€ƒt|r|u‚~ˆ‹Š•šš Ž™žŽš Žš šŸ’œ¢’œ¢‘›¡’œ¢‘œ£Žš¢™¡›¤œ§‘Ÿ¨•Ÿ¨•Ÿ¨™¡ªš¢«›£¬ž¦¬ §¯Ÿ¦®œ¤¯¡§®¡©¯¤¬²©¯³¬³¸¯µ¹°·¹²·º±¸º±·»°¶º°¶½±·½´ºÀµ»Áµ»Á¶¼À·¼¿¸¿Á¹À¼ÂþÄÅÄÆÈÈÊÉÉÌÉÊÍÊÈÊÉÈËÈÈËÈÂÇÇÀÈȾÅÇ»Âĸ¿Ä¶¼À´º¾²¸¼²¸¼¬³¸©±·©±·¨°¶¥¯µ¡«´™¥°™¤±•¢®“¢®Ÿ«Ÿ­ž­ŽŸ®ŒŸ«ž­«ŽŸ®Žž¬‹ž­Šž®‰­‰­‰›®ˆœ¬‡›«†—¨ˆ›ªˆ›¨‡›©…š«„˜¨ƒ˜©„˜¨ƒ—§–§‚”§–ª€–«|–­~–«€–«‚–©ƒ—§†™¨ˆ™ª‰™©ˆ—¦‡˜¤Šš¨‰š©Š›ª‹›©š¦š¦Žš¥Žš¢Ž™ ˜Ÿ‹–›Š’˜ˆ–ˆ”Š”†‰Œ‚ƒ„~{{}vt~sp|lf~g_‚d[‚_U…ZK†VEˆS?ŠO:ŒO8M5ŒI1K2N4N4’P8’T<T?‰S>„SA~RBtQDlPGdPJ[PMTOOLLOGLODKPCKQBLR@JP?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JP@JP@JP@JP?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IOBLRLV\LV\ISYITYOW]Yagdkpjqvry~‡•”œ¢›¢ªœ¤ª¢©®¦®´¨°¶ª±¶«³¹¬´º­·º±»¾²º½´¼¿·¾ÀºÃÄÁÉÉÇÌÌÊÏÌÍÐÍÏÑÍÔÕÐÙÚÕÜÜÖÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÞÞØÞÞØÞÞØÞÜÖßÜÕÞÛÔÛÙÓØØÒÔÕÐÐÑÌÍÎÉÉÊÈ¿ÅüÁÁº½À¶¹½´º¾´º¾³¸»²¹¾²¹¾²¹»´»½·½¾¹À¿¹¿À»Á»ÂÁ½ÄÿÆÅÂÇÄÉÊÈÌÍËÌÍËÌÍËÎÎËÍÎÉÌÍÈÌÍÈÍÎÉÎÎËËÍÉÉÌÉÌÍËÍÎÌÍÏËÌÎÊÉÌÉÄÇÄÂÁÀý¹Ãµ®¼¡—¨u`™[C•T;–V>˜[D™[CœaL£oYª{k£nZ˜[D–U?–V>’N5J0ŽI/I0ŒH/ŽI/H.ŽI/H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.ŽI/ŽI/ŽI/ŽI/ŽI/‘N3š\DcL£oY§xf¨}kªm«}kªm«†w®›¥£ª¤¢©£ £ ˜›Ÿ’— —Ÿ–žŠ‘™†Ž™…œ‡œ‡Ž˜…Œ–…–ˆŽ•‰“ŠŒŒ’Ž’Ž’Œ•‹•‹˜Š™Œ™‘‹›‘‹›‰œ‘Š™’š“Ž˜’Ž˜’Ž˜’Œ™“™”‘••Ÿ”Ÿ•œ–˜–“–––“”•‘“•“–Ž”˜Ž“–‹•˜ˆ“˜‰“™†’˜„˜ƒŽ˜ƒŽ˜‚Ž–‚Ž™€™‚Žœ‚›ƒ‘š†“™†’š„‘„‘ƒ’œƒšƒšŽšŽš˜ƒ‘šƒ‘š†’šŠ”‹–‹–ˆ”š‡’—ˆ”š‡“™„Ž”|ƒˆoy|owzpz}qx}oy|x‚…ˆ“˜˜Ÿ˜Ÿ‹—Œ˜ž˜ŸŽ™ š ™ŸšŸ™¡™ŸŒ˜ ˜¢Žš¥›£“¦“¦”Ÿ¦• §–¡¨–¡¨–¡¨˜¢«š¢«§­ ª°£«±¦®´©±·¬³¸­´¶®µ·¯¶¸¯¶¸®µº­´¹¯µ¼±·¾³·¿±µ½±·¾´¸Àµº½¶¼À·¾ÀºÀľÄÅ¿ÆÅÁÈÇÄÇÇÆÉÉÆÉÉÃÈÈÂÇǾÅĽÅŹÃÆ·¿Â´ºÀ²¸¾²¸¿¯µ¼­³º«²º§±º¦®·¥­¶£­¶œ©µ˜§³”£² ¯Žž®«Œœª‹›«Œœ¬­‹œ«‹œ«Œ¬‰œ«ˆ›ªˆ›ªˆš­ˆš­ˆ™ªˆ›ªˆ™ª‡š©ˆ›§ˆ™¨…™©„˜¨…–§‚—¨ƒ˜©‚—«—©‚–¦•¨€•©‚”§‚–©ƒ–¥„•¡†–¡‡– ‰• ‰–¢Š™¥‹š¦‹š¦‹š¦‹—¢Œ˜ Ž˜¡Œ˜ ˜Ÿ‹–‹•›‡‘—ˆ{…|‚†|‚†x}€rtvmnokhhjbbl_\n\VqZRvWMyUI|QB€P=„N9‡K8‰I4‹I1ŒI1ŽK3N4M3ŒN6ŠN8…O:}M<vM>nMAeNF^MKULKNLMGJNCIOBIQ@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JP@JP@JP@JP?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JPGQWJUZITYKU[W_ehotov{y€…ˆ‘˜™ ¨›¢ªš¡¦¥«¢ª°§¯µ¦°³©³¶ª´·ª´·®¸»°¸»²º½µ¼¾¹À¼ÅƾÈÇÂÉÈÆÌÉÍÐÍÑÓÍÖ×ÒÛÜ×ÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÜÜÖÝÝ×ÝÛÕÜÚÔÚØÒØØÒÖÖÐÓÓÍÐÐÊÍÎÉÉÊȾÅļÁÁ¸º½³¸»®µº¯´·¯µ¹®µ·®µº®¶¹±¸º¶¼À¹¿À¹¿À¸¿¾»ÀÀ»Á½ÄÃÁÇÅÄÇÄÉÊÈËÊÉËÌÊÌÍÈËÌÄËÌÇÌÍÈÍÎÉÍÍÊÌÍËÉÌÉÊÌÈÊÌÈÌÍËËÌÊÆÈÄÀÅÅ¿ÀÁ¿½»À¶³¼¤™®m eP˜ZB™\E eP¤lW§wd­‰{°…«‰}¥xg kW™^I—YA“R9M2ŽI/H.H.H.ŽI/H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.I.I.I.I.I.“P5˜X@˜X@›_F`Iš]FœbKžeO¡iT¬ˆx«Ÿ§¡¤§¡£¢ŸŸ˜š ’–¡– Ž–¡‹“œ†Ž™…Žš…˜„™…˜‰–ŠŽ”‹“‹“ŒŽ‘Ž’Ž•–Š•‹™‰™‘‹›‘‹šŠœ‘‡ž’Š’ˆ ‘‡ž’Šœ‘Šœ’Œœ’Œœ’Œ“ ’‹ “¡“Œ¡“ŒŸ•š•’™”‘–•”“”•’“”•˜Œ”—‹•˜Š”—ˆ’•‡’•‡’•ƒ—‚Ž–˜~‹—€Œ—˜€Œš€Œš€™‚Ž™‚™ŽšŒ˜€›€™~‹—€Œ—˜€™€™ƒš…‘œˆ“šˆ“š„–€Šv€ƒv†ozblo^fl_fkX`f^ejdnqfpsw„‡’—Œ˜žŒ˜žŒ˜žŒ—œ˜˜›˜˜™Ÿš ‹˜žŒ˜ Œš£›¤Žœ£›£Žš¢Žš¢£“¦‘¥‘¥œ§“Ÿ§–¢ª›¥®Ÿ©¯¢¬²£®³§±´§±´©±´ª²µ«²·ª±¶©±·¬²¹¬±º­³º¬±º¬²¹¯´½±·½´ºÀ´ºÀ¶¼Â¸¾Â»ÂľÁÄ¿ÄÄÃÆÉÀÆÇÁÆÉÀÆÇ»ÂĸÁ¸À÷¾À¶¼À³¹¿²¸¿°·¿­´¼§¯¸¥¯¸¤®·£®¸¡ª¶œ©µ˜¨¶’£² ¯‹ž­ŠªŠšª‰œ©‰š«Ššª‰œ«‹›©Ššª‰š©ˆ›ªˆ›ª‰š«†šª…™©‡›©†šª‡˜©‡š¦ˆ˜¨†™¨„˜«‚—¨‚—¨ƒ—§ƒ—ª—©‚–©•¨€•¦•¥ƒ”£…”ž†“™ƒŽ•ƒŽ•…—†’šˆ–Ÿ‰˜¢Š–¡‰— Š–ž‰•‹–Š”šˆ’˜ˆ’˜‡•}…‹qx}gnsgnshotdjn_ei\_b\]^\YY^VVbURgTOiRJnNCsN?yN?}L:€H4„H2‡I1‰I1ŠI0‹J1ŒL4ˆK4„I4~J7xL<pM@gKB^JDWIHPJLHHKDHNCIP@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JP@JP@JP@JP?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IOBLREPUFPVLV\bint{€€ˆ‹„Œ•›•œ¡™¡§˜ ¦š¢¨Ÿ§­£ª¯§®³¦­²¦°³¨³¸§²·ª´·¬µ¶®´µ®¶¶³»»¹ÂûÃüÅÃÂÊÇÊÏËÏÑÍÖ×ÒÙÛÔÜÜÖÜÜÖÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÜÜÖÜÜÖÛÛÕÙÙÓ××ÑÔÕÐÐÑÌÐÐÊÌÍÈÊÌÈÄÇľÅÄ»Áµº½°¶º¬²¶¬²¶¬²¶¬²¶­³·­´¹®¶¹´º¾¶½¿¶½¿¸¾¿¸¿¾ºÀÁ¼Ã¾ÅÄÁÇÄÆÊÄÉËÇÊÊÇÉÊÅÊÊÇÊÊÇÌÍËÍÍÊÍÎÌËÌÊÉËÇÉÊÅÈÊÄÈÉÇÅÈÈÀÇƼÃÅ»Àü¼¼½·³¼©Ÿµ}©u_ eM fO¡lU§va­†v¯˜­ž™©˜–¥Ž‰¢‚yŸtglZšdO–X@‘O5K2J0ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/ŽI/J/J/J/J/J/J/’M1’O4”O3“P5“Q7–T:š]F¨|i­‚­Š}®š”§ŸŸ¢Ÿ¢™™Ÿ—¢‹“ž‹“žˆ›„™ƒŒ˜ƒ‹–„Œ•‰“‹•‹“‘’‘’‘“Ž‹•—ˆ™‰šŠ›‰›‰‘‰Ÿ† ‘‡ ‘… ‘‡ ‘‰Ÿ‘Š›“Šœ’Œ“’‹ ’‰¡“Š¢“‹¡“Œ¡•“œ”Ž—”•••“”•““Œ“•Œ“•Š’•‰“–‡’•†‘–…‘—„––Ž–€Ž—~Œ•‹–€Œ—|‹•‹™~‹—‹™‹™}Œ˜{‹™|‰•}Š–{ˆ”|‰•~Š˜€Œšƒš…“œ†“™‚’s~ƒgnsZbhPX^JUZEPUCNSEPUFQVPX^PZ`Yagu‚‡’—‹—‹—Œ—œ‹–›˜›Ž˜š˜›Ž™œŽ™œŒ™ŸŒ˜žŒ˜žš ™¡œ¢œ¢œ¢Œš£Œ˜ ™¡Ž™£š¤Žš¥›£” ¨—£«™¥­œ§®Ÿ©¯Ÿª¯ «°¢¬²¥­³¥­³£­³¢­´¤¬µ¥¬´¥­¸§®¸¦­µ¨¯¹­³º¯µ»²¸¿³¹¿·½Á¹¿Ã»ÀüÁļÃŽÄƾÄŽÅżÃŸÀõ½À²ºÀ´ºÁ³ºÂ¯·À­µ¾©³¼§±º¤¯¹¥¯¸¥¯¸¡­µœ«µ—¦²“¤³¢±Œ °‰­ˆœ¬‰œ«‰š©Š›ªŠ›ª‹›«‹›©‰œ«‹ž­ ¯ ¯Š¬‡š©„™¨†™¨ˆ›ªˆ˜¦ˆ—£ˆ˜¨‡˜©‡—§…–§†–¦…˜§„•¤‚–¦‚–©‚–¦„”¤…•£…”ž‚”‹‘Š‰Œ‰‚”„˜…‘™†‘˜‡‘—†–…•„Œ’ƒ‹‘‹Ž}„‰q{~bloV^dT\bS[aOW]MU[NTXPUXQSVUSTYQQ\OL`MHeMDlMCqM?tI:{J8J6‚I4…I3‡I1‡J3ˆK4„I4J6xI9qI;jH?aJEYHFPHHJIKFIMCIP@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JP@JP@JP@JP?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IOAIREOUOW]aknrz€~ˆ‹…Œ”š–ž¤œ¦¬™¥«œ¤ª ¨®¥¬±ª²¸©³¹©±·¨³¸©³¶ª²µ«²´«±²¬²³²ºº¸ÀÀ»ÃýÅÅÀÈÅÇÌÉÌÑÍÒÔÐØÙÔÚÛÖÜÜÖÜÜÖÜÜÖÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÝÝ×ÜÝÕÜÜÖÝÝ×ÝÝ×ÛÜ×ÚÚÔØÙÔÖ×ÒÓÔÏÑÒÍÍÏËÌÍÈËÌÇÈÉÄÄÇÄ¿ÅüÂ÷½Á´º¾¯¶»­³¹«±·ª°¶¨¯´©¯µ«±·­´¹±·»´º¾µ»¿µ»¿¶½¿¶½¿ºÀÁ»ÃýÅÂÂÇÄÆÈÂÇÉÂÇÇÁÈÉÄÇÉÅÉÌÉÌÍËÌÌÉÊÊÊÉÊÈÇÉÃÆÉÆÄÇÄÃÆƾÄŸ¿Áµ¼Áµ¸»º´³»©£¶~«ze¥pY¨t^ªzg­€l°Šx¯“ˆ¬•¤’Žœ‹˜ƒƒ–zt•qešgX—[E–U<“R9’O4K1I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J/J/J/J/J/‘K0‘K0‘L0’M1‘K0“N2“P5›]E¤uc¥ub«o®—§ž¢Ÿ¢–š¢‘˜ ‰”ž‡’ž†›ƒŒ˜…Œ”†•‡“‘Ž’‘’’‘”‘Ž—‘—ˆ™‘ˆ™‰›‰›‰†‘‰ ‡¡‘† ‘…¡‘ƒ¢’‡¢‘…Ÿ‘ˆŸ‘ˆŸ‘ŠŸ‘Š¡’Š¡’Š¡’ˆ¡’ˆ ”ŒŸ‘Š’‹™“˜“”’’’’‘Œ’“‹’”‰‘”ˆ’•‡‘”…•…‘—„–„‘—˜˜•‚—–{ˆ”|‰•zŠ•{Š”z‰•x‰•wˆ”z‰•|ˆ–{ˆ”|‹•{Š–}Œ–š„’›ƒ•w‚‡cmpMW]KV[DNT@JP?IO?IO?IODOTDNTDNTMX]mx}…‘—Š–œŒ—š‹–›Œ–™‹–™‹–™‹–™‹–™Œ—œ‹˜›Š—š‰•›‹—Œ˜žŽš Ž›¡š Š˜¡Š˜¡‰— Š–¡‹—¢Œ˜£Žš¢‘¥” ¨–¢ª™£¬—£«˜£ª—¢©š¥¬›§­Ÿª±Ÿª±§°™¥­š¥±ž¦±Ÿ©²¢ª³¤«³¨®µ«±¸­³¹±·½µ¹¿µ»Á¸½À¹¼ÃºÀĹ¿À¸¿Á»ÂĺÁö¾Á³º¿±¹¿¯·½¯·À¯¶¾¬²¹¨°¹£¯·¤¯¶¥­¶¥¯¸¡­µœ©µ—¦²’£²Ž¡°‹°ŠŸ°Šž¬‰«ŽŸ®‘¡±Ž¡° ¯Ž¡° ±Ÿ²¡²Ž¡°‰œ«‡š§ˆ›¨‡š§‰š©Š™¥‰˜¤Š—¦ˆ—£ˆ—£‡—¥‡—¥‡—¥…–¥„—¦„•¦„•¤„•¤…” …‘™„Ž”€‹}…‹v}‚r|v~„{ƒ‰}…‹}…‹|„Š{ƒ‰z†y‡y‡x€†rz€gouW_eKV[HSXGQWCMSBLRCKQELQJORLNQLKMPIJTIF]JEbJDiJBnJ>sJ;xI9}I6I4‚I4‚I4I5~I7xI9sJ;lI?dIA]ICTIFMJJHHKDHNAHM?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@HQ@HQ@HQ@HQ?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JPDNTHRXP[`ckqlvyt~‰Œ‘™Ÿž¨®¤¬²¢ª°£«±¨²¸­µ»®¸¾¯¹¿®¶¼¬´º©³¶¨¯±©¯°©¯°­³´±¹¹´»½¸¿Á¼ÄÄÀÆÄÃÉÇÊÍÊÐÒÎÖ×ÒÙÚÕÛÛÕÛÜÔÜÜÖÝÝ×ÝÝ×ÜÜÖÝÝ×ÜÜÖÝÝ×ÜÝÕÜÝÕÜÝÕÝÝ×ÛÜ×ÖØÑÔÕÐÓÔÏÑÒÍÍÏËËÍÉÈÈÂÄÆÀÃÅÁÃÄ¿ÀÁ¿¼ÁÁ·½¾²¸¾±¶¹¯´·­³¹¬²¶«±µ©¯³¥¬±¨®µ©°µ¯µ¹±·½°¶¼³¹¿µ»¿µ¼¾¸¾¿¹À¿»ÂÁ½ÄÃÂÅÂÅÆÁÃÅÁÃÆÃÅÉÃÇÊÇÉËÇÉÊÈÈÉÇÇÊÇÄÉÅÃÉÇÀÇÆ¿ÄļÁĵ¼¾³¹½²µ¸¶±±¸ª¦¶•†¯„r¬}k¬}k®‚o±Œ{°‚¯‹}ª…v¢‡–„‚}zto‘md•eW•]I”XB“S;’P6K1I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.‘I.‘I.‘I.‘I.‘I.‘I.’J/“M0“M0”N1’M1”N1–S8›]E¤pZ¬…u­”ˆ¤›šœ¡—šž– Œ”ˆ›†Ž™…–ˆŽ”Œ“’‘‘‘‘’”‘Ž˜‘Œš’Œ›‰‘‰‘‰ž‡ …ž‡¡‘†¡†¢…¢‘…¡„¢‘… ‘‡ ‘‡ ‘‰Ÿ†¡‘†¢…¡Ž‚¡†¢’‡¢’‡ ‘‡’‹œ’Œš’Œ•’Ž’’Ž‘‘‹’‘‹““‰’“ˆ“‡‘”…•…•…•ƒ•‚Ž––•‚Ž–˜€Œ”|‹•w†’wˆ”uˆ”v‰•v‰•v‰–uˆ”v‰•wŠ–z‰•yŠ–z‹—}Žšƒ‘š€Œ’r|gqtV^dKU[GQWBLRCNS@JP?IOBLR?IOBLRNV\mwzƒŽ“Š•˜Š•š‰”—Š•˜Š•˜‰””ˆ••‰”—Š•˜ˆ–—‰–™ˆ”šŠ—‹—Œ—žš š š ‹™¢Š˜Ÿ‹—ŸŒ˜ ›¤›££‘ž¤‘¥‘¥’¤›¢‘œ£’ž¦—£«™¥­™¥­–¢­•¡¬—¢¯™¥°™¥°š¦®Ÿ©² ª³¦­µ©¯¶®´¸±¶¹´¸¾¶»¾·ºÁ´ºÁ³¹½´ºÀ·½Áµ¼Á±¸½¯·½­µ»­´¼­´¼­´¹«³¹¨²¸¥°µ¦±¶¦±¸£¯· ¬·š©³“¤³¡±ˆŸ®†œ®‡¯ˆŸ®‰ ¯‹ ±£³£±£±Ž¢²’¢²‘¡±‘¡±Š¬ˆ›¨ˆ›¨ˆ™¨‡š¦‰˜¤ˆ–Ÿˆ“‡’œ†’ˆ”Ÿ‰• ˆ•¡ˆ—£†—¦†–¤†•¡…” …’ž„’›ƒŽ•€‹’~ˆŽw…oy|kuxjrxlsxlvyow}nv|jtwjqvlvypx~nv|fpsX`fMW]FPVDNT@JP?IO?IO?IO@HNDJQDJPFIMKHKOHIRHFZHD`IDeI@lI?pI<tI:xI9{J8|I7zJ9xI9rI:lI?fH?^HDXIGPHHJIKEHLCIM@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IODNTFQVLV\Yagepukv{r}‚ˆ’˜˜£ª¥¯µ¬´º¬´½¬´º¯·½²ºÀ±»¾³½Àµ½Ã¯¶»¨®²¦­¯§®°®³¶®¶¶°¸¸´º»·¾À½ÅÅ¿ÉÈÄÊÈÉËÇÐÑÌÓÕÎÖØÑ×ØÓÙÚÒÜÜÖÜÜÖÜÜÖÜÜÖÝÛÕÛÛÕÜÜÖÜÚÔÞÛÔÜÜÖÚÛÖ×ØÓÒÓÎÎÐÌÌÏÌËÍÉÈËÈÄÇÄÂÅ¿Á½¿À»½½·»»¸¶¸º³¸»®´¸­±·­±·ª°¶©¯³ª°·¨®µ¢©®¤«³§­´«±µ­³¹­³¹¯µ»±·¾²¸¼´º¾´»½·½¾º½À½¿Á¾ÁÁ¾ÁÁ½ÃÁ¿ÅÃÂÅÅÃÈÄÅÇÁÃÆÃÃÈÄÂÈÆÀÆÄ¿ÄľÁĸ½Àµ»¿³·½²´·´¯¯¶«¨¶ —µ—‹²€±‰x±Šz°‘„®’‡ªˆ|§|mŸv“|w’vp‘nfg[’_P’ZF”V>“R9‘N3‘I.H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-H-‘I.‘I.‘I.‘I.’J/”N1‘K0“M0”N1”N1’M1•P4”T9¡gP§|jª‰z¦“Œž˜š—™Ÿ’˜ž‘—’”š”—‹‘—Œ–Ž‘•’‘“–‘‘™’™’›“ ’‰ ‘‡¢‘…¡‘†¢‘…¡„¢‘…¡„£†¡‘ˆ … ‘…¡‘† ‡ Ž…Ÿˆ‘‰ž‡œˆŸ„ Œ Œ ‡Ÿˆ†›‰šŠ—‹”‘ŒŠ‘ˆ†……’„Ž‘„Ž‘„”ƒŽ“ƒŽ“‚Ž”‚’‚”€Œ”‹–{Š”v‡“s†’sƒ“s„“s†•uˆ•s†•uˆ—v‰˜wˆ—{Š–{Š–}˜–‹‘s}€hru]ekOW]FQVCMSMU[EOU?IO?IO?IOEOUU]cmwz€ŠŒˆ“–Š”–‰”—‡’•‡’•‡’’‡””†““‡’•‡’•‡”—†”˜†’˜‡•–ˆ•˜‰•›Š–œ‹—™Ÿ™ŸŒ˜žŒ˜ ‹˜ž‰—ž‰—ž‰—ž‹—‰•Š–ž‰•Š•œ™¡‘Ÿ¨” «• ­“ž«’ž©•¡¯•¡¬–¢­—¢¬™¤°œ¦¯£«´¨®µ¨°¶­³·°¶º³·½³¸»±·½¯µ»°¶½°¶½±·¾­·½­µ»®µ½«µ»®´»®µº¬´º¨²¸§±·¦±¶¥±·£¯·ž¬µ˜§³’¥²‰ ¯…­†¬…­…­†ž®‰ ¯Œ¡²£±£³’£²“£±’£²¡°‹ž­ˆ™¨‡š¦‰™§‰–¢‡“›‚Œ’~ˆŽ|„Š~‰€Œ”„˜‡’œˆ”Ÿ†•Ÿ†“Ÿ…‘œ‚Ž–€‹’Š‘|†Œw‚‡u}ƒlvyfmrblo_fk^ej_gm_gm]diYag[bgblogoubloX`fPX^HRXALQ?IO?IO?IO?IO?IO?IO@HNCIMCIOFIMIHJNHJQHGYHF]ICbHBiI>lI?pI<rI:rI:rI:pI<lI?fH?`IAYHFQHGKIJGILCIOAHM?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IOCMSFPVMX][ekfpvny€xƒŠˆ’›–¡¨¤®´«³¹¬´º¬´·¯¶»¶½Â¸ÀùÁĸÀñ¸½¬²¶«²´¯µ¹®µ·²ºº´¼¼·¿Â»ÄžÆÆÃÉÇÈËÈËÍÉÐÑÌÒÓÎÕÖÑØÙÑØÙÔÜÜÖÜÜÖÜÜÖÝÛÕÝÛÕÜÚÔÛÛÕÝÚÖÛÙÓÙÙÓÖÖÐÐÑÌÍÎÉÉÌÉÆÉÆÄÉÅÀÆĽÀÀ¼¿¿º½½¸º¹¶µ´³´µ°³¶¬²¶©°µ§­´©¯³©¯³¦­²§­´£ª²¢¨¯¢¨¯¤«³¦¬³§­´ª°·ª°´­³·¯³¹°µ¸²·º³¸»µº½·½¾¹¾¾º¿¿»¾Á¼ÁÁ¼ÁÁ½ÃÁ¿ÄÁÀÅ¿ÅþĽ»ÀÀ»À÷½Á²¸¾°´º°°³±¯°´«ª²§¢±¡›´œ‘³”‡±‘ƒ­’ˆ§„¥ƒw¡zj˜xotnneh\`R[I‘W@’R7’P6M/J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-J-“J.“J.“J.”K/–P3•P4–P3–Q5—R6—T9•U:œ`G¢oZ¥}l¦…y£Œ„¡Ž›”•˜“—”–™•—š—–˜—–•”•––”’˜“š“‘œ’ž‘‹¡“Œ£“ˆ£’†£’†£’†¤‘…¡‘†¢‘…¢‘…¢‘…¡„¡‘†Ÿ†Ÿ†ž‡›††œˆ›‡›†šŒ…›‰€œˆ}œŠ‚œƒ›Œ‚˜†–Œ†“‡‘ŽŠŽ‰Ž‹†Œ…ƒŒ‚ŒŽ‚Šˆ‰‹Ž‚ŒŒ‘Œ‘€‹‚Œ’Œ“‹“}‰”wˆ”s„“q‚“q„“q‘r…”r‚’rƒ’t…”v†–wŠ–}Œ–~—€™Ž”y„‰owz`glNV\EPUGOUDLRDOTCNS?IO?IO@JPHSXZafiqt|„‡†‘”‡’•†‘‘…‡‘“……’’…’’…“…“…’•„’–…’•„‘”…“†‘”„‘”…’•…‘—…‘—…‘—„–„‘—••„‘—ƒ—‚Ž–ƒ—‚‘™‚‘›†•Ÿ†–¡š¦‘œ©’ž©” «•¡¬•¡¬•¡¬˜£­›¥®œ§®£ª²¥¬´§®³«±¸®´¸¯µ»¯³¹­³¹«±·«±¸­³º®´»­µ»­µ»¯µ¹¯µ¼¯µ¼®µº­´¹¨³º§²·¦²¸¥°µ£¯·œ«µ˜¨³’¥±ŠŸ°†ž°‡¯†ž®†ž®…­‰Ÿ±‹ ±‘¤±‘¢±’¥´•¥³’£²’¢°Œœª‰™§ˆ˜£‰— ‡“›‚’s}€kuxjtwoy|s~ƒ{ƒ‰‰Œ“•€Œ”Š‘w‚‡s}€p{€nx{lvyeor_fk]di[bgY`eS]`S]`S]`OY\NX[NY^Zbh^fl[bgQY_NV\GRWALQ?IO?IO?IO?IO?IO?IO?IO@HNAHMCIOEHLHHKMHKPHHUHEZHD`IDdIAhI?iI>iI>iI>hI?eI@]HBYHFQHGNHJHHKEHLCIM@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IOBMREPUITYX`f^inju|s‡€Œ”˜Ÿ˜£ªŸª¯§¯µª´·°·¼·¿ÂºÃļÅÆ»ÄŹÁÄ·¿Â¶¾Áµ¼Á°¸»³»¾´½¾¸Á½ÆÇÁÉÉÂÉÈÇÌÉÊÍÊÌÎÊÑÒÍÖ×ÒÙÚÒÚÛÓÜÜÖÝÝ×ÝÝ×ÝÝ×ÝÝ×ÛÙÓÛÙÓÙ×Ñ××ÑÒÒÌÎÏÊÊÌÈÉÊÅÇÊÇÃÉÇÀÈźÁÀ¸¿¾·½¾´º»±´´°±²­²²ª°´¨®µ¥¬±£ª²£ª¯¤«°¥¬´¡¨²œ¦¯œ¦¯œ§®Ÿ¦®¢©±¤«³¥¬´§­³©¯³«±·­²µ®´¸®´¸±¶¹³¹½µº½µº½¸»¾¹¾¾º¿¿»ÀÀºÀÁ½ÀÀ¼ÁÁº¿¿¹¾¾¸»¾·¼¿´ºÀ±µ½®±¸­¯²¯­®°ª©¯¨¦¯¤Ÿ¯Ÿ™±˜Œ®‹~ª‹~£‡~Ÿ€xšym“shmdfZ‘`Q[I’V@’R:“P5‘L0‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.’K-’K-’K-•O2—Q4–P3™W:aHŸeN eM¢lW¢vc¤{i¥€q¢„{¡Š…ž‹˜Ž˜‘’˜’”™””š——›–––”• ”Ž •Ž¢”¤“‡£“Š¥’†¤‘„¥‘†£ƒ£„¢‚¢ƒ¡‘† …Ÿ„ž‡†œˆšˆ™Ž‡˜†˜Œ„–Š‚“„|’€w”~u”w–„{–‡}—ˆ~•‰“‰ƒ’ˆ‚Œ†ŒŠ‡‰Œ‰†ŒŠ…‹Œ‚‹Œ‚‰‹~‡ˆ~‡ˆ}…ˆ|„‡}…ˆ~ˆ‹|†‰€‡Œ€‡Œ‰Œ}‰‘~‹‘|Š“s„o‚‘np’rƒ’r‚’w†’xˆ“z‰•}Œ––”€“z…Šoy|cmpY`eGOUAIO?IO?IO?IO?IO?IO?IO@KPOW]aknq{~~ˆ‹ƒ‚ŒŽ€‰Š{ƒ†€ŠŒƒ‚‚‚ƒŽ‘…“…“„’“„’“…“…“‚‘“„’“„‘”„–„‘”‚‘’€Ž’‚Ž”‚•Ž”€Ž•~—–~•}˜Žš…”žŠ—£›¦©”Ÿ©“Ÿª—¢¬˜£­š¤­›¦­Ÿ§­¡©¯£ª¯¤«°§¯µª±¶«²·ª±¶©°µ©¯¶«±¸­³·¬²¶¬³¸®´¸®´¸®´»¯µ¹¬´ºª´ºª´º©³¹¨°¶¤±·¡­µž¬µ–§³£³ŠŸ³ˆž°‰Ÿ±ˆ ²ˆž°Š ²¡±’¥´”¥´”¤²•¤°”¤¯”£­‘žªŠ—£ˆ–Ÿ†’šŠs{~dloZbh\chbinfmrisvpz}u…x‚ˆw‡r|‚jrxdnqaknakn^ejU]cRZ`S]`R\_PX^MU[GRWGRWGRWLTZOW]T\bYagV^dMX]IQWFNT@JP?IO?IO?IO@JP?IO?IO?IO?IO@HNAHMBHNDHNFHKKHKOHIRHFXIG[HC]HB`IAaIC`ID]HB[HCXIGQHGNHJIHJEHLCIO@HN?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO?IO@JP@JP@KPFQVS]c\flbmtlx€w‚‰~‰‡’™“ž¥š¦¬¦°³¯¶»·¾ÀºÃļÅƽÆǽÆǼÅƻğÀó½À²¼¿µ½À·ÀÁ¼ÆÅÃÊÉÅËÉÇÌÉÊÍÊÍÏËÓÔÏ×ØÓÙÚÒÚÛÓÜÝÕÜÝÕÜÝØÝÝ×ÝÝ×ÜÚÔÙ×Ñ×ÕÏÔÔÎÎÎÈËÌÄÉËÅÉÊÈÄÊÈÀÈÅ»ÂÁ·¿¿¶¼½´¹¼¯¶¸­³´©¯°©¬¯§­±¤«³Ÿ§°ž¦¯ ¨®¢©±¡©²Ÿ§°™¢®œ¤­œ¤­œ¤¯›¦­ž¨®¡¨­¥«¯§ª­§­³©¯³¨®´¨®²¬±´¯µ¹°´º±·½´¹¼µ¸»·º½·¼¿¸»¾·º½·¹»·º½·º½³·½°¶½°¶½®´º¬°¶­¬®¯ªª®©©¬¦¥¬¢Ÿ«™«”Œª‡z¦ƒvv™zp’rik_ŽfZ`O’\G‘W@’R:’P6’M1‘K.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.‘I.”K/”K/”K/•N0—Q4–S5›[@žaG eM¢jU¡r`£wg¤xh¤{l¡€t†~›‰…›ŠˆœˆœŠœ’œ–’œ–’ –¡–£”Š¥”ˆ¥’†£“ˆ£’†¤‘„¤‚£ƒ¢‚¡„¡Ž„ ƒžŽƒœŽ…šˆšˆ™‰˜Š—‰”Š„’‡€‚|ˆyq~lcmd†vmŠzqŠ{sxŒy‰|vŠ€zŠ„€‰‡„‰‰†„‰†‚‡‡‡ˆ~…‡|ƒ…z€„v~x€ƒw‚x„x‚…y€…y€…y€…{‚‡{ƒ‰|‡Œ|ˆŽxˆ‘w‡v…‘t„’s„t…‘x‡‘xˆ“~‹‘~Š‹‘~Šwƒ‰oy|fps`gl]diMU[BLR?GM?GM?GM@HN?GMAIOFPVJRXW^cgqtu}€z‚…w‚t|ltwpx{t~w„x‚…z„‡}‡‰€‹„’…“„’„’„„’…“…“…“ƒ“‚‘“ƒ“‚‘“‚Ž”““€Ž•”|Œ•wŠ”v‰•}Œ˜…• ‰–¢Œ˜£™¤š¤‘œ¦’§• ª™£¬œ£«œ¤­ž¦¬ ¨®¤«³¥­³¦®´§®³¨¯´©°µ©°µ©°µ©°µ©°µ«±¸«±¸«²·ª²¸¨°¶©±·©±·§¯µ¤°¶£¯µ¢­´›«¶•¨´£³ ´‹ ´Œ ³¢³£³‘¤³”¥´”§³–¥±•¤®•£¬”¢«“Ÿª™¡‡“›€‹’t|‚dkpT^aPX^V]b[bg\ch]dicmpjqvmu{ltzfnt]ekX`fW_eW^cOW]LTZKSYMU[KSYGOUCMSAIOAIODLRKSYOW]RZ`T\bQY_NV\GOUBLR@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@GLBHNCGMFHKIHJMHKOGGRHFTIFUHEXIGXIGUHERHFPHHMHKIHJEHLCGMBHOAHP?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@JPIQWOZaS_g]gpfqxmxs}†{…ŽƒŽ•™Ÿ›£©©°µ³º¼ºÁûÄŽÆǽÆǽÆǼÅƹÂô¾Á´¼¿µ½À¶¾Á¼ÆÅÄÊÈÉÌÉÌÎÊÎÏÍÑÒÍÔÕÐÖ×ÒÙÚÒÛÛÕÜÚÔÜÝÕÝÝ×ÜÜÖÜÜÖÜÚÔ×ÕÏÖÖÐÔÔÎÏÏÉÍÎÉÈÌÆÄÉÅÂÈƼÂ÷½¾³¹º±·»°¶º«²·§®³¤ª®£©­Ÿ¦«›§¯™¤±—£®™¤°›¦°œ§±›¦°—¢¬—¡ªš¡«œ£«š¤­š¢«œ¤ª¡§­¤©¬¢©®£ª²¢¨®¥«¯¦­²ª°´«±·®´º°µ¸¯´·°µ¸¯´·¯´·¯²µ°²µ²´·±´¸®²¸«±µ¬²¶ª°¶ª­±ª©«¬©©«¨¥ª£¡©œ™§”¥‹‚¤‚v¡}o›xn–sf’kaŽdXŽ_O‘\H’V@’R:“Q7“M0’J/“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.“J.”K/”K/”L.–O1–Q3™X<›]B`FžfQœlYŸp^ ta¡ub¡xiœ}sš€z™…›†€‰€ †ž‡Š “¢”‹£”Š¤”‰¤”‰¤‘…¤‘…¡‘†¢‘…¡Ž„¡Ž‚ ƒžŽƒŠ€›‹‚™‰€˜Š–‹„”Š„’‹†‘Š…Š†Ž‰†Š€}€tnpc]i[Tk]Yymg€tn‚vp„ytƒyv€vs‚|xƒ€}ƒ‚………‚‚„„{‚x€ƒu}€sz|rz}rz}qy|qy|px{ov{owzowzr|x‚…z…Š|ˆŽ|ˆŽ|‰zˆ‘w†t„’xˆ‘{‰{Š’}‹’~‹‘{‡y…‹oy|^ejS[aRZ`MU[HPVBLR?GM?GM@HN?GMBIQHPVISYCKQCMSMU[_fkfnqiqtfnq]diX_dY`e_fkgorfpsgqts~ƒ€‹Ž‚ƒŽ‘‚ƒŽŽƒŽ‘ƒƒŽŽƒŽ‘ƒ„’’’‚‘“‚”‚”€”~Ž”Ž–|‹•wŠ”uˆ—v‡“v‰•}›~ŽœŽš†’†’‡“ž‰• ˜¤‘œ¦•¦•¦”ž§—¡ªœ¤ªŸ¦«¢ª°¤¬²¤¬²¥­³¦­µ¥­³§®³§®³¦®´¦®´¦­²¤«­¤¬²¥­³£®³¤®´£­³£®µ¢®¶Ÿ­¶—¨´•¥µ’¥´‘¢±£²‘¢®“£±‘¢®’£¯”¡­•¡¬“Ÿª‘¥›¢Œ—ž„Ž”x‚ˆmwz]diOW]OW]V]b[bgZaf[ci_fkcjoakn`jm\chV]bQY_S[aPX^JRXEOUGOUEOUBLR@HN?GM?GM?GM@HNGOUKSYMU[MU[KSYIQWDNT@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@GLBHOCGMDHNFHKIHJKHHNHJOHIOGGOGGOHIMHKKHKFHKEHLCGMBHO@GL?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNBLRHRXKV]OZaWaj^hqbnvkv}o{ƒv‹‚Œ••ž›£©«³¶´¼¿¹ÀºÃĻĿÅƺÃÄ·ÀÁ¶¾Á´¾Á´½¾¸¿Á¾ÅÄÆÉÉÊÍÊÍÎÌÏÐËÑÒÍÔÕÐÕÖÑ×ØÐÚÛÓÛÛÕÜÜÖÜÜÖÜÜÖÜÜÖÛÛÕÙÖÒÒÒÌÒÒÌÎÏÊÌÍÈÆËÄÁÇĽÅ»Á¶¼½±·¸¬´·ª²¸¤¯´¢¬² ¨®œ¦¬›£¬•¢®’¡­Ÿ«Ÿ«’Ÿ«˜¤²˜¤¯–¡«” «” ¨™ ¨™¡ª™¡§˜¢«š£¯¤®™¥­›¦­ž¦±¡§®£©°¥«±¥«²©¯µ«±µ©¯³©®±ª°´«¯µ«®±ª®´¬®´ª¬²¨¬²§­±¦¬³¥«±¦©°¥§ª©§¨§¢¢¦œ¤•¤‰£‚v¢zlœue—rc”l^dVŽ_M‘[F‘U?’R:“P5”N1’K-’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,”K/”K/•M/•M/™R4šY=›^DœaIgRœkVœlWq^r`švhšzo›v™{™‚z›„| ˆ} Š¡„¡„ ‘‡£“ˆ¡’ˆ£’† “‡¡‘†Ÿ† …ŸŒ‚Š~›Œ‚š‹™ˆ|•†~“…~‚{Š|u‡|u‡y‡}„||ytole]Z\TQ\TQ[SPf^[upm|wt|wtxurxurvtr{zy}‚‚|xw~€t|rz}nvynvyltwipuelqhpsfmrfmrhotnx{s}€w„z…Š|†ŒxƒŠ{‡{‡{ˆŽ{‡}Š~‹‘|Š‘~‹‘{‡q{~[ciS[aMU[EOUAIO@HN@HN?GM?GM?GM@HNFNTHPVCKQ?GM?GMAIODNTMU[PX^T\bNV\JRXNV\V^dOW]PX^PX^cjov†~‰ŒŠŠ€‹Ž€‹‹‚‚ƒŽ‘„’ƒŽŽ‚‚ƒ„’‚’’•Ž–|Ž”zŒ•xŠ“wˆ”v†”wŠ–v‰˜v‰•{‹™Žš„ž‚›‚Ž™ƒš†’Š•ŸŠ•¡Š•¡Ž—£š¤•Ÿ¨™£¬›¦­›¦­ž¨®Ÿ©¯¡©¯ ª°¡«± «²Ÿ©¯›¥«š¢¨š¥¬Ÿ§°Ÿ©¯›§­¨­Ÿ©¯¢ª³¢¬µœª³˜§³•¤³•¢±’¢­‘ ª‘¡¬‘ ª’ ©“ž¨œ¤Žš¢‹–†–‚Œ}„‰w…mwzZafOW]RZ`\ch]diX_dT\bX`fZafY`eY`eX_dRZ`MU[OW]LV\GOUDNTBLR@HN?GM?GM?GM?GM?GM@HN@HNBLREOUEMSCKQ@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@GLBHNCGMDHNFHKGGJHHKIHJIHJHHKFHKEHLDHNBHNBHO@GL?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNAIODNTGRYKV]NZbT^gZdm`krfrzmyu€ŠŒ“—›¢§§¯²¯·ºµ½À·ÀÁ¸Á¹ÁÁ¶¿À´¼¿µ½À·ÀÁ¼ÄÄÀÇÆÆËÈÈËÈËÍÉÎÏÊÑÒÍÑÓÌÔÕÐÕ×ÐØÙÑÙÚÒÛÜÔÛÛÕÜÜÖÜÜÖÚÛÓ×ØÐÑÒÍÎÎÈÇÉÂÇËÃÆËÇÄÊÈÀÈŹÀ¿¶¼½²¹»­´¹¦®´ «°ž©°›§¯™¤®˜£­•¡¬ «Ÿ«Ž©žª ®‘¡¯“ ¯“Ÿ­’Ÿ«• ª—Ÿ¨•Ÿ¨”Ÿ©–¡­—¢®™¤°š£¯›¤°›¤°§° ¨± ¨®¡©¯¥«²¥¬±¦¬°¦¬³¥¬±¦¬²¤ª°¦ª²£¨±¡©²¢©±¢©±¢¨¯ §¯¡£©£¡¥¢›œ “œŠ„‚x›zkšsc˜o]–k\’dU_MZF‘U?“R9“P5•N0”K/’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,”M,”M,–N0–P1™T6™W:š\Aš_G™dM›gQšiTšn[›r`™te™wkœ|q›v˜€wš€wƒw …{¡Š}žžŽƒ ƒŸ† ‘‡ž‡‘‰œŽ…›Œ‚™Š€™‹‚˜Š•Šƒ’†~yŠ~x‡}w}rktlfsmiyvsrpna\\USTOMNLJKKIJLJKTRSdcbtttwwwtttmmmlmnsvvuzzw|tz{u|~px{nvymtyipufmrckn\chV]b\chZafW^c\chfmrlsxt~v†w‚‡w‚‡w‚‡|†Œz…Š|‰{‡~‹‘~Š’~Š’|‡Žnx{X`fY`eNV\BLRAIO@HN@HN?GM?GM?GMBLRGOUEOUAHP?GM?GM?GM?GM@HNAIOBLRCMSGQWNV\LTZFPVHPVGQWQY_fpsoy|pz}v~{…ˆ‰‹‹€‹‹‚ƒŽ‘ƒŽ‘‚‚‘‚’‚’“€”~Ž”~Ž”z‹—w‹”uˆ’w†’v†”u…“uˆ”z‹š~™}Š–€Œš€Œš~‹—€Ž—‚—ƒš‚Ž™†’…“œ‰• ˜¢›£‘›¤“ž¥–¡¨™¤«š¥¬š¥¬˜¢«›£‰•‰•Žš¢“Ÿ§”ž§”Ÿ¦–¡¨–¡¨™¡ª›£¬š¥¬˜¤¬—£«”¢«‘ ªž¨œ§›¦›£˜Ÿ‹•›†–‡t|‚mwziqwhpvdkpW^cQY_V]bX`fX_dV]bPX^OW]NV\OW]OW]MU[ISYEOUGQWGQWDNTAHP?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@GLBHOBHOBHNCGMDHNDHNDHNDHNCGMBHNBHO@GL?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GPAIOCNUFQXJU\LX`Q\cV`f]endovmxw‚‰‹‘‹“™•Ÿ¢¢ª­­´¶³»¾µ¼¾´¼¿³»¾°¹º³¼½¶½¿½ÅÅÁÇÈÄÊÈÇÊÇÇÊÇËÍÉÎÏÊÑÒÍÒÓÎÓÕÎÖ×ÏØÙÑÙÚÒÚÛÓÚÛÓÚÚÔØÙÑ××ÑÑÒÍÈÉÄÞÃÈÁÂÈÂÄÉÅÀÈŸ¾¿´»½°·¹ª²µ¥­³Ÿ©¯›¦­™¥­–¢­–¢­’Ÿ«Ÿ©ž¨«‹žª««©’Ÿ®“Ÿ­’ž©’§’§‘¨’ž©“Ÿ­• ­–¡®˜£­—¢¬™¤®š¥¯š¦®›§¯Ÿ§°Ÿ§°¢©±Ÿ§° ¨±¡¨² §±Ÿ§²ž¦±œ§±œ§±¨²œ§±š£¯˜œ¤™—›™‘‘—‰ˆ–{•zp•qc•m\”hU’bO’]IXCU=’Q8“P2”N/”M,”M,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,’J,•L-–M.–N0—Q2˜S5˜W;˜Z?™]Dš_GœdOšfP›kXœo[›p^šscšwj™zp˜}s–|s™~t›uœ…{š‡}šˆ˜Šƒ™‹„™Ž‡™Ž‡˜†—‹ƒ•‰’†~’ŠŠƒŽˆ‹„‡yƒ|w|tqngefc`daaa_`[\]NPRGILEHLDGKDGKFIMNQTXZ\hmmmrrkmoikmhmmhnoiprntxqxzsz|px{jrubjm\ch\chY`eRZ`PX^OW]PX^T\bQ[^Zafelqlsxoy|u}ƒu‚t|‚v‚ˆy„‰z…Š|‡Œ{‡}‰}ˆyƒ‰mwz]ekRZ`OW]GOU@HN?GM?GM?GM?GM?GMAIOBLRBLR?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNBLRCKQ@HN@HNBLRIQWPX^X_dW^chrut|x‚…{ƒ†€ŠŒ‚ŒŽ‚ŒŒŒŒƒŽ‘ƒŽ‘ƒ“ƒ“‚•–Ž–Ž–|‹•wŠ”y‹”zŠ•x‰•wˆ”v‡–v‰•|Œš{Š–{ˆ”|‰•}Š–{Š”}Š–‹™€Œ—‹™Œ˜Œ˜˜‚™ƒ—ƒ—‡“›Œ˜ œ§›£Š–¡ƒœš˜„’›‰• ‹– ˜¢›£›£Ž™ Ž˜ž‘™Ÿ’œŸ‘œ¡œ¤›£™¡‹—ŸŠ–žŠ•œˆ™ƒ‹‘|‚‰px~gou\djW_eU_eQY_Q\aS[aW^cOW]OW]OW]NV\LTZHPVFNTEMSDLRAIO@HN@HN@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@GL@GL@GLBHOBHOBHOBHO@GL@GL?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@JPDNTEPWIT[KW_P[bV^d_gpfqxpz€x‚ˆ}ˆ‡•’š œ¦©§¯²­´¶­´¶¯´·®µ·°·¹·¾À»ÂÄ¿ÅÆÀÆÄÃÈÄÂÈÆÈËÈÌÎÊÎÏÊÐÑÌÑÒÍÓÔÏÖ×Ï×ØÓ×ØÓÕÖÎ×ÕÏ×ÕÏÕÕÏÎÏÊÂþ¿Á½ÀÅÁ¿ÅÂÀÆļõ»¼°·¹ª²µ¥¬±Ÿª¯œ¨°™§°—£®–¢­’¡­‘ ªž¨Ž©Œ›ª‹›©‹›©‹›«ŒœªŽ©Ž§œ¦Œ›§›¦ŒœªŒ›§‹›«Žž® ¯’¡­–¡«–¡«—¢¯—£®™¤±›¦°œ¦¯œ§® §¯ §¯¡§®¡§® §¯ž¦¯§°œ§±š¥±˜¡­’›§“š‹Ž…„Ž}ŒwqŽpgi\eV_L[EW?U=R7’O4”N1”M,•L-•L-”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,”K,•L-–M.–O.–P1—R4—U8˜X=™[@›^D›`H›eM›gQšiT™lX—n\—p`–ui”vj‘vl“xn”|s“v”w”z”„{”ˆ€“‰€’‡€‚|‹}vŠxŒ„~‡Š…‚†€||wt{uturodaaWUVRQSQSUOTWHNRCIOBHNBHLBHLDJNLRV_eiiprmtvmtviprkrtkrtcjlU\a`giksvovxmuxfnq[bgX_dOW]KSYFNTFNTKSYMU[MU[MU[S]`[bg\chfpsnuzmtymtypw|r|t„u€…u€…t„w‡nx{[bgNX[NV\HPVGOUDLRAIOAIO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMAIO@HNEMSEMSFNTNX[^ejmuxrz}x‚…}‡‰‹‚ŒŽŒŒŽŽŽŽƒ“’•€Ž•€Ž•”|Œ•|‹“{Š”{‹”wŠ”wˆ”v‰•v‰–wŠ–xˆ–v†”xˆ–x…”z‰•v‡“z‡“{Š–|‹•|Œ—~‹—Ž˜€Ž—–}Œ––‚Ž™…“œƒ‘š€™€™Œ˜}Œ–‚Ž™†’†’ˆ“‡’œˆ”œˆ“š‡’™„”‡•‰“™Š•œ‹•›†‘–…“„Ž”ƒ“‰{‚Špx~jrx`glV]bPX^MU[JRXMU[S[aV]bPX^JRXGOUFNTHPVFNTDLRCKQ@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@JPALQEOUISYLV\P[bXbh_gmisyoyu…|ƒˆ†Ž”–›˜Ÿ¡¤¦¢¨©¦­¯«²´°·¹³»¾·¿Â¼ÁļýÄÿÆÅÃÈÅÇÊÇÉËÇËÍÉÍÎÉÏÐËÒÓÎÔÕÐÔÕÐÓÔÌÔÔÎÔÒÌÒÒÌËÌǼ½¸µ·³º¼»»ÀÀ¼ÂûÀ÷¾À±¸º©°µ¡©¯œ§®›§¯˜¦¯–£¯”¡­‘ ¬ ®ŽŸ®‹ž­Š›ª‰š©Š›ªŠšª‰œ©Š›ªˆ™¨‡š©ˆ™¥‰™¤‹š¦Šš¨‰œ©‰œ«Žž®ž­’Ÿ®‘žª” ®–¢°—¢¯™¤®¤¬ž¤ªŸ£© £§¢¢¨¢¢¨ ¢¥ ¢¥ž¡¨› ©–§‘˜¢‘™ˆŠˆ‚……|{…vt…qk„ja…cW†]N‡XFˆU@ŠT<ŒP7ŽN3M2‘L.“M.”M,•L-”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,”M,•L-•L-–M.—P/˜Q3˜S7™V8šX;›[@š]C™`G˜cL˜eP—hV•jX“n_ocndŒpgŒriŒvmypŽ|v~vŒyŒ‚|‹ƒ}ˆ~xuo~rlƒ|w…€}„~€}zusqe``daagfhXYZKMPHMPEIODJNAHM?GM?GM?GM?GMEMSPW\Zafcknmuxovxhpsailbjm^egPW\MU[^eghpsdlo^ejQY_OW]JRXGOUDNQHPVPW\GOUDLRIQWEOREORFNTOY\X_dRZ`T\b\chjtwmwzoy|isvbjmhps]diJTWBLOAIOAIOEMSEMSEORAIO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNAIO@HNCKQCKQIQWISVNX[[bgcknksvx‚…€ŠŒ€‹‹ŠŠ€‹‹ŽŽŽŽƒŽ‘‚’’Ž”•~•{“{Š’{Š”{Š’xŒ•x‹’{‹”wŠ—u†•uˆ”u…•u…•v…”u„s„t…‘xˆ“|‹•|Œ—Ž˜€™€Œ—€Ž—}Š–}Œ˜Š—~Š•‹–|Š“}‹”~Œ•|‹•~‹—˜‚Ž™€Œ—~‰“Š”~Š’Š‘|„}…‹†Ž€Š€ˆŽ~…w…w‡x€†w…rz€ksyaioW^cOY_MW]JTZHRXKUXOW]OW]OY\KSYCKQ@HNCKQCKQCKQ?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?IO?IO?IO?IO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNCKQEMSHRXKV]PZ`X`f_gmfpsltzq{~{‚‡‚‰Ž‡Ž‹‘•–š™ ¢£ª¬¬³µ¯¸¹³»¾µ¼¾·¾À¸¿Á¼Ã¾ÃÀ¾ÃÀ¿ÄÀÃÆÃÆÈÄÈÊÆÌÍÈÏÐËÑÒÍÑÒÍÒÓËÑÒÊÏÐËÉË延²³±³¶³·¼¼¸½Àµº½³º¼®µº§®³Ÿ§°š¦®˜¦¯—¤°–£²’¡­Ÿ­ŽŸ®ž­Š¬‰œ«ˆ›ªˆ›ªˆ™ª‡š§†™¨„™ªƒ—§ƒ—§†—¦Š—£Š—£‰™©‡›«‹ž­ŒŸ®ž­‘ ¬•¡¬–¡«—¡ªš §š¡œžœœœ›œ›™šš••—’’•‘ŒŒŽŒŽˆŠ…„‰‚‚y{|sryliygcwb\z\S{XK|SAQ<ƒO9†L5ˆM2ŠJ/ŽL/M/’L-“M.”M,”M,”M,•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+–M,–M,–M,—N-˜Q0—Q2™T6™V8™X<˜[A–\B•_G”aL‘bPdU‰cWˆf]‡h^‡lb‡od†ri‡tm†vp…ys„zwƒ}y‚|x~wrvnkwro{ywzyxvvvnnncbd\\_WXYVY\KQUDKPAHM@HNAIO?GM?GM?GM?GM?GM@HNCKQEMSMWZdlogor_fkV^a]df`giZafX_d\ch`gl_fkX_dKUXGQTCKQCKQFNTOW]IQWCKQ@HN?GM?GM?GM?GMAIOCKQBINDLRNV\]didkphpsdloZaf^ejOW]DLR?GM?GM?GM?GM@GL@HNBLOAIO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMAIOCKQ@HNEMSHRUGQTFNTHPVNV\\chr||„‡~ˆŠŠŠŠŠŒŒ‚Ž‘Ž‘‚’“€”Ž“~•{“|Œ•zŒ•|Œ•|Œ•{“{‹”xŠ“u…“s„“v†”t…”t…‘v†‘v…‘z‰“y‰”}Œ–€Ž—Ž˜Ž˜Ž˜–|‹•|‹•|‹•z‰•wˆ”{Š”}Š–}Š–|‰•|‰•zˆ‘w„wƒŽu€Šu‰t€ˆq}…r}„s}ƒpz€pz€ow}jtzjrxku{mu{ksyfnt]ekQ[aLV\JTZHRXFPVHPVMU[KUXKUXHPV@HN?GM?GM@HN?GM?GM?GM?GM@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNAIOBMRFPVLV\NY^W_e]ekcmphruow}t{€v}‚z†ˆŠŒ’–™Ÿ£ ¨«§°±­¶·±¸º³º¼¶½¿¹¿Àº¿¿»¾¾º½½½ÀÀ¿ÁÀÁÆÂÄÇÄÉÊÈÍÍÊÏÐËÏÐÈÎÐÉÎÏÊÆÈĺ½º±´±¯´±³¸¸°·¹¯¶¸­µ¸ª±¶¡©¯§­˜¤¯•¢®“¢®“¢®’Ÿ®Ÿ«Ÿ­Œ¬‰š©‡›«‡›«ˆ™ª‡˜©„˜¨ƒ˜©€–¨—©•§„˜¨ˆ—£‰˜¤‡š©†šª‡›«‹œ«ž­Ÿ«“Ÿ§–¥–œ¢—™œ”“•’‘”ŽŒŠŠˆ‚xv{trvpouro{ut{xxywxvuwsppqiimcal^ZlZTlUMnSIrO@uM<xL9}J5‚J5†J1ŠL/L0M/‘L.‘L.”M,”M,”M,•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+•L+—M+—M+—M+—M+˜N,˜Q0—Q2—T6—V8•X=’Y@[D]J‰]M…]O‚^P„`RƒdWg^jb€mfpk~rl}rm|roxrqurorpnnmlmmmlmnjklaceWZ]QVYLRVKRTGNPDKP@HN?GM@HNAIO?GM?GM?GM?GM?GM?GM?GM?GMAIOKUXW^cY`e^ejbjm^ej\chfnqhpscknZafOY\EMSAIOCKQAIOEMSLTZFNT?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMAIODLRHPVS[aX_dPW\S[aNX[IQW@HN?GM?GM?GM@HN?GM@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNDLRDLRAIOCKQCKQEMSFNTOW]hpsv€ƒ|†‰‰‹‹€‹ŽŒ€‹ŽŽ‘Ž‘““•”~•x‹’wŠ–wŠ–|Œ•xŒ•x‹’y‰’w‡’w†’w†’t…”t…”u…“xˆ‘|Š“Œ’€“€Œ”‚•€Ž•€Ž—–|Œ•{‹”{ˆ”{Š”{‹–{ˆ—|ˆ–z‡“y†•vƒ’u‚Žt€‹s~ˆnz‚nz‚mykv}kv}it{gqwdntblrblr]gm\fl^fl`jm^ejX`fOY_ISYIQWDOTEMSEMSJTWGQTDLRAIO?GM?GM?GM?GM?GM?GM?GM?GM@HN@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMAIOCMSFPVKSYPX^U]cYag_gmdnqipujrunvyt{€ˆ‹’—“›¡œ£¨ ¨«§­±¬²¶¯¶¸²¸¹³¹º´º»µºº·½¾¹¾¾º¿¿¾ÁÁÃÆÃÇÉÅËÍÆÍÎÉÌÎÇËÍÉÆÉƽÀÀ´¶µ®³³¯µ¶®´¸©¯³§®°¤«°š¥ª—¢©—¢¬”¡­“ ¯¡° ®Žž®‹ž­Œœ¬‡›«ˆš­‡™¬„˜¨ƒ˜©‚—¨€–¨•ª}–ª~–©€–«†—¨‡˜§ˆ™¨‡›«‡›«‹œ«œªž§’œ¢’˜ž‘–™’”ŽŒŽ‹‹‹†„…€}}rqpheeb__\Z[^\]bachfgjikhgifccc^^`YW_US_ROaQKdOIgLBkK@oJ;uJ8yJ8~J4„L4ˆM2ŠL/ŒL1ŽL/‘L.’L-”M,”M,•L+•L+–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*–L*—M+—M+—M+—M+—M+•N-•P2’Q2“T6U;ŒV>‰XC†XF€WH{WK|YL}\M{_Txb[vd^vf`ugcrgbmdcia^a\\_\\\\\\]^UX[RWZRWZOUYJPTELQBINAHM@GL@HN?GM?GM?GM@HN?GM?GM?GM?GM?GM?GM?GM?GM?GMAHMCKQEORNX[ZafX_dNV\[bggoremp_fhS]`IQWFNTBINFNTEMSAIO?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMBINFNTGOULTZOY\FNT?GM?GM?GM?GM@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMCKQ@HN?GMAIOCKQCKQEMSJRX[bgoy|t~w„|†‰‰‹ŠŠ€‹Ž€Ž’“€”•~Ž—}“{‹‘x‰•{‹”|‹•|Œ•xŠ“x‰•x…‘v‡“w‡’w†’v‡“t…‘y‰’{Š’Œ’}“Ž”““Ž”–~’}Œ”x‰•wŠ–|‹—{Š–v‡“s„q‚Žp‹o|ˆnzˆnyƒjv~it{gs{eqydovalsakq]en[ciZdjV`fS]cR\bR\bQY_NX^LTZHPVEOUEMSCKQAIOEORCKQ?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@JPALQGOUJRXMW]QY_V^d\ck_gmdkpgqtmtyu||ƒˆ†’Œ“˜”š¡˜ž¥£ª£©­¦­¯©°²«²´°µ¸±¶¹²·º³¹º·½¾º¿¿¾ÃÀÄÆÂÉÊÅÊÌÈÈËÈÂÈƽ¶¼½¯´´®³¶­³·¦­²¡¨­Ÿ§­™¤«—¢¬“¢¬‘ ¬Ÿ®ž­ŽŸ®Žž®ŒŸ®‹œ­‰›®ˆš­†šª†šª‚˜ª‚˜ª€–¨}•ª}•ª}•ª€–«„˜¨ˆ™¨‰š©Š›ª‰š©œ¨œ§›£˜ž–›”™Š‘“ˆ‹Ž‚…ˆ|~€uwymoq_acWXYORULORNQTSVYWZ]Z\_Y[^WWZUVWSQRROOTNMVLIXJF\IBaJBfJ?kI=rK;vK9|L7L5„L4†L2‰L1ŒM/ŽL/‘L.’L-”M,–M,—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+™N+™N+—M+–M,–M,“M.‘N0O1ŒQ6‰Q9„S>€S?|TCvUFtUKpVMpYQn[Tm]Wl]Xi\Vf\YaXW[UTURRNMOLNPKPSHMPELQDKPDKPCKQAHM@HN?GM?GM?GM@HN@HN?GM?GM?GM?GM?GM?GM?GM@HN?GM?GM?GM?GM?GM?GM?GMAIOFNTOW]LTZZafdlofnqeln]dfNX[ISVHPVGOU@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GMFNTLTZMU[EMS?GMCKQDLR@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HN@HN?GM?GM?GM@HNDLRGOUX_dfnqhpshpss{~{…ˆ~ˆŠ~‰ŒŠ€Ž‘‚•Ž–•~•}Œ”{Š”|Œ•|‹“|Œ•z‹—y‰—z‡“v‡“v…‘w†’wˆ”v‡“z‰“}‹’~Œ“”€Ž•Ž‘‚Ž”‚•Ž”€“|Œ•{‹–{‹–wˆ”v…‘q„p‹m}ˆmz†my„jxht|frzdpxbnvals^hq[fmZdmWajT_fS]cQ[aOY_NX^LV\ITYHRXEPUDNTBMRCKQAIO@HN@HN@HN?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM?GM@HNAIOEMSEPUJTZNX^Q[aW_e[ciahpemsksypx~w~†}ƒŠƒŠ†’Š‘–‘˜–Ÿš¡£ £¦¦«®¨®´ª°´«±µ¯´·´¹¼¸½À¾ÀÂÂÅÂÄÆÅÂÇÄ¿ÅüÂö¼À±·»®´¸ª±¶¥­³Ÿ§­š¦®™¥°“¢®Ÿ­ž­ž­­Œ¬‹ž­‹œ­Š›¬‡›«‡˜©‡š©†šª„˜¨ƒ˜©–ª–§•ª€–¨‚–¦†—¦ˆ—£‰™¤‹š¦‹š¦Œ™¥Ž™£˜Ÿ‹•›‡Ž“ˆ~„ˆuz}mpschk]beW\_QVYKPSELQDJNELQHNRJQVJPTIOSHNRHMPHKNHJMIHJKHHOGGSHEXID]I@bJAgI=mJ=sK:vK6{K6L4‚L4†L2‰L1ŒM/ŽL/‘L.“M.”M,–M,—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+˜N,—N-–M,•N-’M/ŽM.ŒM/ˆN4„N6€O9}O=wP@sRCoSHkTLhUPfVPcVPbURaWT[TRYSRURRRQSQRSFIMDJNCIOAGN@GL@GO@GO@GO@GO@HN@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@HN@GO@GO@GO@GO@GO@GOAHMKSYT\bbikhoqiqtelq`fjW^cLTZBIN@GL@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GOBIQHPVPW\DLR?GMCKQFNTCJR@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GOAHPAHPCJRFMRQX]]cgV]bX^bailr|z‚…|†‰~ˆ‹~ˆ‹~‰ŒŒŽ”€Ž’Ž“}“~Œ•~•~•}–|Œ•|Œ•x‹•{Š’xˆ“|Š“{Š’|Š‘}‹’~’~•}–”Ž”“€Œ’Ž”~•}Œ”|‹•zˆ‘w†uƒŒn~‰k{†kz„ix‚hves|cowamu_ks]iq[goZdmXbkS_gS^eP[bOY_NX^LV\JTZISYGQWFNTDLRCKQAIOBIQAHP@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO?GM?GM?GM?GM@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GO@GOAHPCJREMSGOUKSYMW]Q[aW^fY`e_fkdnthrxmu{qy‚u…|ƒ‹€†„ŠŽ‡‘Œ“••›Ÿœ¢©¡§®¥«²§­´ª°´®´¸µº½¹¾Á¼ÁÁ¼ÂüÂ÷¾À³»¾±·»®´¸©°¸£«´Ÿ§°š£¯•¢®ž­Š¬Š›ªŠšª‰œ«Š›ªˆ›ªˆ›ª…™©†™¨‡š©‡š©ˆ˜¨ƒ—§ƒ—§ƒ—§‚–©•¨ƒ”¥…”ž†™„–…‘™ˆ”œˆ”œ‡“›ˆ’˜†Ž”‚‰Žry~fmrcjl[aeSZ_OV[KRWHOTELQBIN@GL@GO@GOBIQBIQAHMAHM@GLAGNAGMBHLDGJFHKIHJLIIQHGTGDZJD^ICcI@iJ=nK>rK;vK6yJ8}J5L5†L2‰L1ŒL1M-’M/”M,–M,—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+—M+”N,“N-’M/M/ŽM/‹M0‡M3L5|L7wL:rM<lNBiOFdQJaRM^SP\TQ[SPVPOVQQTSRRSTSUWQVYIOSBHNAGN@GL?FK@GL?FK@GL@GL@GL?FK?FK@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKAHM?FK?FK?FK?FK?FK@GLCKQPW\`fjiprlsuhotbhlW]aLSXBIN?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GLGOUKRWEMS?FK?FK@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GL?FKBINDJQHOTLSXKRWLSXPW\elqs{~w‚z‚…|…†}‡‰}‡Š€‹Ž€Œ’€Ž’€Œ’€“€“€“Ž“~Ž”}“|Œ•~Œ“|Œ’|‹“~‹‘Œ’~’~Ž”Ž“–€“”€Œ’Œ‘€Œ’€“|Š‘{ˆŽw…Žq€Šp~‡jz…ix‚iu€es|bpw_mv^jr\hp\foZdmXbkS_gQ]eP[bNY`MX_MU[JTZISYHRXFPVEMSDLRCKQAIO@GL@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?GM?GM?GM?GM?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GLBINCKQFNTJRXLTZOW]S[aYag\dm`jpdovhrxksymu{ovxpwyyƒƒŠŠ’˜˜£”œ§˜ ©ž¤«¤ª°ª¯²­²µ³¸»·¼¿µ¼¾³º¿¯¶»¬³¸©°µ¤¬²Ÿ©¯›£¬–¢ª’ž©Š›ª…š«…š«‡˜§‰š©‰œ«Ššª‰š©‡š©†™¨ˆ™¨ˆ˜¦ˆ•¡‡–¢†–¤…–¥„•¤„•¤…” „˜€Šz†w…{ƒ‰|„Š|‚‰x€†v~„pw|_eiPW\JQVGNSELQDLRBIN@GL@GL@GL?FK?FK?FK@GO?FK?FK?FK?FK?FK?FKAGNAGMBFLDGJGGJJHIMHHQHGVHD[IC_IBcKBgK@lK<qJ:uJ8yJ8~L5L2ˆM2ŒM/ŽM.’M/”M,–M,—M+˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*˜M*N.ŽM.ŒM/‹M0‡M3‚L4~K6yL8sL:oK=gI@cLB`MF[MIYOLSPMSNNONMLMNJLNMOQINQINQJPTDKP?FK?FK@GL@GL?FK?FK?FK@GL@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GL?FKAHMAHM?FK?FK?FK?FKELQDLRNUZagkkrtksvfmobhl[aeOV[AHM?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKCKQAHM@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKAHM?FK?FK@GL?FKBINGNSHPVHOTNUZ\bflsupx{u}€x‚…{ƒ†|„‡|†‰€‹ŽŒŒŒ€Œ’€Ž’Ž~’Ž‘€€‹‘€“~’€“‘€Ž’”€Œ’“€Œ’€‹Š|ˆŽw…Œw„Šs€†p|„lzƒhwet~cqzamx^jr]jpXfoXdlWajU_hQ]eP[bOZaMX_LW^JU\JTZHRXHPVFNTEMSDLRCKQAHM@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?GM?GM?GM?GM?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GLCIPDKPEMSHPVOV[QY_T\bW^cW^cW^cY_cW^cZ`delqqyz‚‹~‰Œ–‡‘šŒ”“™ ˜ž¤£§£©­©¯µ­³·ª±¶¨¯´¦­²£ª¯¥«—¡§—¡§’ ©Š©„™ª˜§‚™¨ƒš©†š¨ˆ›ª‰™©ˆ™¨‡š¦‡˜¤‡– ƒ—‹‘ƒ–„˜…’ž…’žƒš‹“}…‹u}ƒmtvelqdkpdkpbjmcknfmr]cgNUZDLR@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKAGNAGMCGMEGJHGIJHINHGQHGWIEZJD^ICbJAfJ?jJ<pK<uJ8zJ5L4…L3ŠM2ŽM.’M/”M,–M,˜N,™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+‹M0ˆM2†M4‚M3~K6zL7tL9pK<iJ=dJA^ICYJETJGQIIMJJLJKIILGILFIMDHNCIODJNDJQBIN@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GL@GLAHM@GL?FK?FK@GLFNTKRW[aeagk`fj\bfSZ_T[`NV\CKQ?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKAHM@HN?FK?FK?FK@GLAIOFNTT[`bhlfmolsupx{px{u}€u}€v€ƒ{…ˆ|‡Œ}ˆŠ€‹ŽŒ€€Œ€‹ŽŒŒ‘‘€€ŽŽ‘€Ž’€Ž’€ŒŠ}ˆ|‡Šwƒ‰t€†r~„p{‚mykw}gs{dpxamu]hrZfqXdlVbjS_gR\eO[cOZaMX_KV]KV]IT[HRXGQWEOUEMSDLRCKQAHM@HN@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?GM?GM?GM?GM?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK@GLAHMAIOCKQCKQCKQCKQELQELQHOTPW\`gljrxnv|qyt|‚v~„|‚ˆ€†Œ…ŒŽ•™—¡š ¦š¡¦š¡¦œ¢©š ¦–¢‘œ¡‘›¡Žš¢‹š¦ƒ˜©‚˜ª‚™¨‚˜ª†™¨‰™§ˆ˜¦‡—¥‡–¢†”~‰nv|ipunuzu}ƒz„Š{ƒŒs}ƒltzhot_fkZ`dW]aOW]PW\OV[SZ_Y_cPW\IPU@GL?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FK?FKAGMBFLCFJEGJHGIJHINHGQIFUHEYIC\IBaJBfJ?lK<rJ9xK7~L5ƒK3ˆM2ŽM/’M/”M,–O,˜N,™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+M4€M5}L6yL8tL9pK<lK<eJ@`IA\IBUHEPHELGGIGHFFIDGKCFJCIOCIM@GL?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FLAHM@HN>FL>FL?GMFPSPW\Y`bPW\FNTCKQBINCKQ@HN>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM>FL>FL?GM?GM@HNCKQJRXQ[^RY^W^c_fkfnqksvltwhpsmtypz}q{~s}€{…ˆ~‰ŒŠ€‹ŽŠŠ€‹Ž€‹Ž€‹Ž~Œ€€€ŒŒ€‹ŽŠ|‡Šz…Šv‚ˆu€…q|p{~nz€lx~iu{gsydpv_mv]ktZeoVbjS_jP^gO[cNZbLX`JV^JU\HSZGRYEPWDOVEOUCMSBLR@KP@HN?GM?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@GO@GO@GO@GO>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FKBINKSYS]`W^cX_dY`e^ej`glckniqtt{€…‹„‹†’Š‘–‹’—ˆ”„Œƒ„Ž‘ƒŽ“ƒ‘š‚’ ’¡~’¢”¡‚“Ÿ„“Ÿƒ’œ‚Ž™€Œ”|†Œnv|Y`eV]b[bg`glhotipu`glX_dRZ`NUZKRWHPVDLRCKQFNTLVYNX[JRXCKQ>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FKAGKAGMBFLDGKEGJHGIJHIMHHQHGSHEXID]I@bJAhI<pK:uJ8{K6L2ˆM2ŽM/’M/”N,–O,™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+™N+wK8vK9sM;oK=kK=eJ@aJB\IBXIDSIFNHGJGGGGJDGKBGJAGM?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@HN?GM>FL?GM>FL?GMCKQHRUBIN>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@HN?GMDLREMSCMPGQTKUXPZ]T^aX_dX_dV]bW^cY`e`glkuxv€ƒ}‡Š~‰Œ~‰Œ~‰Œ}‡‰~ˆŠ}ˆ€‹ŽŠŠ~‰Œ}ˆ‹{…ˆx‚…u€ƒt„q|oy|ny~lwzjuzhtzfrxdotams]io[fmXcjR^fP\dO[cMYaLX`KV]JU\HSZGRYEPWEOUDNTALQ@KPAIO@HN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@HNDLREMSFNTEMSFNTISVKSYOW]Z`ddkpjruqx}v}‚v}‚qx}hpslsxov{pw|q{t€ˆv…‘v‡“v‡“xˆ“zˆ‘wƒ‹t†px~iqw_fkPX^R\_W^cT^aX_dW^cRZ`MWZJRXDLRAIO?GM>FL>FL@HNEMSDLRAIO>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FKAGKAGKBFLCHKFHKGGJJHILGGOHFTGDYIC_I@fJ?lK<tK9{K6L5ˆM2ŽM/‘N-•N+˜N,™N+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+›O+oK=lK<gK@dJAaJB\IBYICSIFOHFLIIHGIEGJCFJAGMAGK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM@HN>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GMDLREOREMSGOUHPVHRULTZISVMTYNX[V]bjruv~{…ˆ{ƒ†|†‰{…ˆ{ƒ†{ƒ†{…ˆ{ƒ†z„‡u€…u‚t~pz}oy|nx{kuxisvgqtfqvfqvdotbmp`kn\gl[ekYciT`fR]dO[aMY_MX_KV]KU[HSZHRXFPVDOTBMRALQCKQ@JP@HN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FLAIO>FL>FL?GM@GLAIODNQHRUKUXQ[^\ch\chOW]LSXOY\S]`V]bX_d_gmhrxlx€mynz‚myjtz^flRZ`MU[MU[MWZOW]OW]MU[ISVHPVEORCKQAIO?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FKAGMBFLCHKFHKFFIIGHLGGPHEWHC]I@dI?lK<sK:yL5M4ˆM2ŽM/’M,–O,˜N,šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)šO)™O*™N+bJA`IA^IC[ICXIDSIFQHGLGGJHIGHICFJBGJAGK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@HN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM@HN?FK?GMCKQ@HNBINAIOEORDNQFPSFNTKUX]cglsut|‚t~s}€r}‚r|r|s}€s}€r}€pz}oy|oy|lvyjtwitwhrueorcmpblo`jm_gm]gj[ehXchVafT_dQ]cO[aLX^LW^JV\KU[ISYFQVDOTCNSDLRBLRAIO@HN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM>FL>FL>FL>FL>FL>FL>FL?GMAHMDLRDLR@HN@HNCKQEMSEMSHPVKUXQY_\dj^hn^in_joZbhOW]FNT@HNAIOJRXLTZGOUDLRCKQ@HN>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FKAGNAGMBGJDGKGGJJGGNHGTGD\IBcI@jJ<sK:yL5‚M3ŠM2ŽM/“N-–O,™O*šO)›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(šO)šO)™O*™O*—O+˜N,YICWIETIDQHGNHGLGGJHIGGJFHKCGMAGMAGK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM?GM>FL@HN@HN?GM@HN?GMCMPEMSFNTEORMTYZ`dcjocjl`glbjmdlodlogorksviqtckndlohruhrufpseorcmpbloakn^hk]ek[ehZdgXbeS^cT\bP[`NY^LX^LW\JUZHSXHRXEPUDOTBMRDLR@KP@HN?GM?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM@HNAIOEMSHRUKSYKSYOW]OW]JRXAHM>FL?GMFNTGOUAIO>FL>FL>FL>FL>HN>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FKAGKAGKCFJEGJIGHNHGSHE\IBcI@jJ<sL:{K6‚M3‰N0N/“N-–O,™O*šO)›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(›O(œP,™O*™O*—O+–O,”N,“N-OHFNHGLGGJHIHGIGHIDGKCFJAGMAGK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM>FL>FL?GMAIO@HN@HNIQWOV[NUZNUZMWZNUZMTYPW\T\_Zac[cf\ch_gjdlodnqbmpblo`jm^hk\fi\chXbeV`cT^aS]`Q[^OY\MX]MWZJUZJTWHRUFQVDOTCNSCMPBLOAIO@HN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?GM>FL>FL>FL>FL>FL>FL>FL>FL?GM@HNBLODNQELQ?GM>FL>FLBIN?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL?FK?FK?FK?FK>FL?FKAGKBGJEGJHGINHGSHE\IBcI@jJ<tL9{K6‚M3‰N0N/“N-–O,™O*šO)›O(œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+œO+›O(›O(šO)™O*—O+•O-“N-‘N-N/ŒN/HGIGGJGHIFHKCFJBGJAGMAGK?FK?FK>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL@HN@HN>FL>FL?GM>FL>FL@HNNV\[bgGOUAIOAIOBLO@HNEORHRUFPSMTYV]__gjaknakn^hk]gj[ehZdgXbeW_bT^aR\_PZ]OY\NX[LVYKUXJTWHRUGQTFPSEORBMRBLOAIO@HN?GM?GM>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>FLAGKAGKEGJHGINHGSHE\IBdK?lK<tL9{M5‚M3‰N0ŽM/’O,–O,™O*šO)›P*œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)œP)›P*šO)™O*—O+–O,“N-N.N.ŠM/ˆN1…M2CFJCFJBFLAGMAGKAGK?FK?FK>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK>EJ?FK>EJ>EJ>EJ>EJBINPZ]binLTZ@HN?FK>EJ>EJ>EJ?FK?FKBINOV[[bg^ej\ch\chZafX_dV]bT[`SZ_PX^OW]MWZMTYLSXKRWHPVHOTEMSDLRCKQBINAHMAHM@GL?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ?FKAGKEGJHGINHGSHC\IBdK?lK<sL:yL5M4ˆN1N.’O.•O-™O*šP+›P*žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)œP)›P*šP+™O*–O,”O.‘O-N.‰N0†M1‚M3~M4{M5AGKAGKAGK?FK?FK?FK>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK>EJ>EJ?FKGOU[bgcjoPZ]DLRAHM?FK>EJ>EJ>EJ?FK@GLKRWS[aX_dY`eX_dW^cR\_SZ_PZ]NX[MWZMTYLSXIQWIPUHOTEORDLRCKQBINAIOAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJAGKBGJEGJIGHMGFSHC\IBbJ?iJ=sM;xL6€M5†M1N0‘O-•O-˜P,šP+œP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)›P*šP+˜P,•O-’O,ŽO/ŠM/†M1L2|L4xL6tL9pL9>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK>EJ@GLPW\binbloX_dKRWDKPBIN>EJ>EJ?FK@GL@GLBINKRWSZ_R\_SZ_RY^OY\NX[OV[MTYLSXJQVHRUFNTGNSFMRCKQDKPBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJAGKBGJFGHIGHMGFSHC[ICaI@iJ=pL9wL7~M4…M2‹N0‘O-•O+šP+›P*žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)žP)ŸP(žP)œP)›P*šP+–P+“N-‘O-O0ˆN1‚M2|L4xL6sL:mJ;iJ=eJ=>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@GLPX^_fkakn\chRZ]JQVHOTDLRDLRIPUJRXGOUHOTLSXPW\PW\OY\OW]MWZLTZLSXISVHRUHOTFNTDLRCKQBINBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FLBGJFGHIGHLGGRHEXIA`I?eJ=mL:uL6|L4…M2‹N0‘O-–P+šP+œP)žP) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q)žP)žP)Q*Q*›P*šP+—P-”P,‘O-ŽO/‰N0„N3€M5xL6tL9nM;iJ=dK?`I?\IB>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK>EJ>EJ@GLOV[[bg_fk]diYadU\aU\aSZ_SZ_SZ_SZ_QX]OW]NV\NV\OV[MWZNUZKSYISVHPVHOTFNTDLRDLRDKPBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FLBGJEGIGFHKFFPHEWHC_I@eJ=lL;tL7|L4…M2ŒN/“P-—P-™Q*Q* Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q) Q)žP)Q*Q*›Q*šP+—P-•O+“P-ŽO/ŠO1†M1N3{M5uL7nM;iJ=dK?_I@XIATHBRHE>FL>FL>FL>FL>FL>FL>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK>EJ>EJ>EJ>EJFMRW^c\ch\chZafX_dW^cV]_T\_S[^RY^OWZOV[MTYMTYLSXKRWJQVIPUHOTGNSFMRELQDKPBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>FL>FL>FL>FL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FLAFICFIFGHJGGPHEUHB]I@dJ>lL;uL6~M4ˆN1ŽO/”P,™Q*Q*žP)¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q(¡Q( Q)žP)Q*›Q*™Q*—P-•O+“P-ŽO/‹N0ˆN1‚M2|L4wL7pL9jJ<eJ=`I?XIATGDPHEMGFJGG>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FK?FK>EJ>EJ>EJAHMGORSZ_X_dX_dV]bT\_SZ_PZ]OY\OWZOV[LTWLSXKSVJRUIQTHOTHOTFMRFMRELQDKPBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FJ@FJBEIFGHJGGNGETHB]I@eJ=mL:wL7€N4ˆN1P.–P+™Q*Q*¡R*¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)¢R)žP)Q*›Q*˜Q+•O+“P-ŽO/ŠO1†M1‚M2}L3xL6sL:mL:fJ<aI>\IBUHBPHEMGFHGFFGHEGI>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?FKJQVPW\RY^SZ_RY^PX^OY\PW\NVYNUZLTWKSVJQVJQVHPSHOTGNSELQELQDKPBINBINAHM@GL@GL?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FJBEIDFIHGFMGFTHB_I@fJ<nM;xL6‚M2‹N0“P-˜Q+Q*žR(¢R)£R(£R(£R(£R(£R(£R(£R(£R(£R(£R(¢R)¡R*Q*›Q*˜Q+”P,P.‹N0‡N0‚M2~M4xL6sL:nM;gK=cJ>]I@WHCQGDMGFJGGFGHDFIBEI@FJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@GLJQVPW\PX[PW\PW\OV[MTYLTWJRUKRWJQVHPSGNSGNSGNSELQELQDKPBINBINAHM@GL?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FJAFIDFIHGFNGEUHB`I?iJ=sM8}M5†O1ŒO.•Q-™Q*R*¡R*£R(£R(£R(£R(£R(£R(£R(£R(£R(£R(¢R)žR(Q*˜Q+”P,P0‰O/„N2~M4xL6sL:lL;gK=bJ?]I@ZHBTHBNGEKFFGFHDFIBEH@FJ@FJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@GLIPULTWNUZMUXLTWKRWJRUIPUHOTGORFNQGNSEMPELQDKPDKPBINAHMAHM?FK?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FJAFIDFIJGGPHEXIAbJ?jK<tL7€N4‡N0P.–P,›Q*žR(¢R)£R(£R(£R(£R(£R(£R(£R(£R(£R(¢R)R*™Q*–P,P.ˆN1‚M2{M5rM9lL;gK=bJ?]I@XIATHBPHEMGFHGFEEHDFIAFI@FJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJDKPHOTJQVJRUJQVIPUGORFMRELQELQELQELQDLODKPBINBINBINAHM?FK?FK?FK>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ@FJBEHEEHKFFQGD\IBdJ>mL:xL6N3ŠP0’P,˜Q+œR+¡R*£R(£S'£S'£S'£S'£S'£S'£S'£R(žR(›Q*–P,P.‰O/N3xL6pL9iL;cJ>]I@XHBTHBPHEMGFJGGFEGDFIAFI@FJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?ELCIPFMRGNSHOTFNQDKPBINCIPCIPCIPCIMBHOCIPBHOBHOAGN?FK@FM@FM?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL>EJ>EJ>EJ>EJ?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL>EJ>EJ>EJ>EJ?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL>EJ@FJDFIFGHMGFTHB]I@fJ<rM9yM4ƒN3ŒO.”Q.˜Q+R*¡R*¢S(¥R(¥R(¥R(¥R(¥R(£S'¢R)R*˜Q)’P,‹P/ƒN3yM4oL:iJ=aI>YI@THBOGDKFFHGFFEGEFGBEH@FJ@FJ>EJ?EL?EL?EL?EL?EL>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?FKAHMELQELQDKP?FK?FK@GL?FK>EJ>EJ>EJ>EJ?FK?FK?FK>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EIAFIDFIHGFNGEWHC`I?hK<sM8}M5†O1ŒO.•Q-šR+žR(¡R'£S'¥R(¥R(¥R(£S'¢S(žR(šR+•Q-ŒO.„N2}M5rM9hK<aI>XHBQGDKFFGGGEEHDFIBEHAFI@FJ@FJ?EI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?FK@GLAHMAHM@GL>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EKAFIEFGIGEOGDXHBbJ?jK<tL7~M4‡N0ŽP.–P,šR+ŸS)¢S(£S'¤S&£S'¢S(ŸS)›Q*–P,P-‡N0~M4tL7jK<bJ?XHBOGDKFFFEGDFIAFI@FJ?EK?EI?EI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?FK>EJ=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EI@EHBEHFEGKFFQGDYI@cJ>lL;uL6€N4ˆO0P-–R+šR+R* R(¡R' R(R*šR+–R+Q.ˆO0N2uL6mL:cJ>YI@QGDKFFEEHBEH?EK?EI?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>EJ>EJ>EJ>EJ=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EI@EHBEHFEGKFFSHC[I@dJ>mL:wM6N2ˆO0P-”Q+˜Q)šR+›Q*šR+˜Q)”Q+P-‰O/‚O4wM6oL:dJ>\I?SHCJGDFEGBEH?EK=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EI@EHDFHHFGLFETHB\I?eJ=nK9wM6N2ˆO1P/‘Q-”Q.”Q+”Q.Q.ŒO.ˆO1N2wM6nK9fJ<]I@TGANGEHFGDFH@EH?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL?EL?EL?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EL?EL?EL?EL=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EIADHDFHGFENGETGA]I@eJ=mL:uL6~M4„N2‡P0ŠP0‰O/‰O/ˆO1ƒN3~M4uL6oL:fJ<^H?TGAOGDIFFEFGADH?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH:@D;@C:?B;@C:@D>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EIADHDFHIFFNGETGA]I>dJ>lL9sM8wM6|N3N2N2~N3|N3wM6sM8lL;dJ>]I>TGAOGDIFFEFGADG?EI?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH:@D9>A4533424539>A:@D>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EIADGEFGIFFNGETGA[I@aJ=iL;mL:rM9sM8tL7sM8pN8lL9fJ<aI>[I@TGAOGDIFFEFGCEH@EH?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI9@B8>?34222/22/22/3428>?9@B=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI?EIADGEFGIFFNGERHBWH@]I>aJ=dJ>fJ<fJ<eJ=cJ;aI>\I?WH@RHBKFCIFFEFGCEH@EH?EI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI<CE:?B45322/22/22/22/22/453:?B<CE=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI@EHADGEFGGFEKFCPFCTHBWH@ZH?[I@[I@[I@XH?UG@RHBOGDJEEGFEDEFADG@EH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DF<CE;@C8;>12011.11.11.11.11.1208;>;@C>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI@EHADGDEFFFFHFDKFCNGBPFCRGBRGBPFCPFCKFCJEEGFEEFGCEG@EH@EH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CI;@C9>A9;=33311.11.11.11.11.11.11.4449>A=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI@EH@EHADGDEFFFFFFFHFDHFDHFDHFDGFEFFFEFGCEGADG@EH>DH=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CI:?B8;>13201/00-00-00-00-00-00-00-00-01/9;=:?B>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI>DH@EH@EHADGADGCEGDEFDEFCEGADGADG@EH@EH>DH=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH:?B8;>12000-00-00-00-00-00-00-00-00-00-00-1329>A=CI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH@EH@EH@EH@EH@EH@EH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG9<@33300-00-00-00-00-00-00-00-00-00-00-00-01/8=@=CI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH:?B7:=/0.//,//,//,//,//,//,//,//,//,//,//,//,1118=@=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI=DI=DI=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH<BF9<?021//,//,//,//,//,//,//,//,//,//,//,//,//,/0.9<?<BF>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=DI=DI=DI=DI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG=CG=CG<BF:?B6;;./-..+..+..+..+..+..+..+..+..+..+..+..+..+./-6;;:?B=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH<BF:?B8=@8=@7=>6;;/0...+..+..+..+..+..+..+..+..+..+..+..+..+..+..+/108=@<BF>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH<BF:?B7:=.0///////-.,,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*-.,6;;:?B=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG:?B8:<./-,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*.0/9<?<BF=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI<BF8;>000+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*),-+68:8;>9>A<BF=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI>DH>DH>DH>DH=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI>DH>DH>DH>DH=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI>DH>DH>DH>DH=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG9>A5::,-++*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*),-+00069<9>A<BF=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=BE8;>///*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(,.-79;:=@=BE>CF=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH>DH>DH>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>CF=BE=BE=BE=BE:=@68:+,**)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(-.,68:8;>:=@=BE=BE=BE=BE>CF=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>DH>DH>DH>DH=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CI=CI=CI=CI=CI=CI=CI=CI=CI=CI=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG>CF<BF<BF<BF<BF<BF<BF<BF<BF=BE:=@8;>7<<7<<8:<68:,-+)(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')('+*)...68:8:<7<<7<<8;>:=@=BE=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CI=CI=CI=CI=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CI=CI=CI=CI=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CI=CI=CI=CI=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG<BF;AE9>A8;>7:=7:=7:=7:=7:=7:=7:=6;;499...,,,,,,,,,*+))(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')('*+),,,,,,,,,...5::9>A=BE=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG;AE8=@6;>47:,-+++++++++++++++++++++++++*)(('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&,,,58;8=@<BF=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG<BF<BF=BE=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG;AE8=@68:,,,)*(('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&,,,6;><BF=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG=CG6;;7:=8=@<AD<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF;AE9<?499+++'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%***79;<AD<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF***,,,57969<6;;6;;6;;6;;6;;7:=9<?:AC<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF:AC9<?499+++'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%)('5799<?=BE<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF'&%'&%)))******************,,,4999<?<AD<BF<BF<BF<BF<BF<BF<BF<BF<BF=BE9<?499+++'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%,,,7:=;AE<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$***5797<?=BE<BF<BF<BF<BF<BF<BF<BF<BF;AE69<+++&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$)))5::;AE<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF=CG=CG=CG=CG<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$+++5:=;@C<BF<BF<BF<BF<BF<BF<BF<BF;AE58;)))&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$)))58;;@C<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#'&%4687<?<AD<BF<BF<BF<BF<BF<BF<BF;@C58;(((%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#'&%4687<?<AD<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#)))3887<?<AD<BF<BF<BF<BF<BF<AD7<?468'&%%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#***5:=;AE<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF<BF$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"***69<;@C=BE=BE=BE=BE=BE;@C69<***$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"&'%68:<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"&%$3578;><AD=BE=BE=BE<AD8;>357&%$$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"'''68:<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!)))5::;@C<AD<AD;@C7<<366'''#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!&'%588<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!%$#166579588588579255'&%#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!%&$588<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE"! "! "! "! "! "! "! "! "! "! "! "! "! "! "! $#"%&$%&$%&$%&$$#""! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! %&$579<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE<BF<BF<BF<BF=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE"! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! %&$579<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! $%#579<AD=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE=BE! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! $%#579;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD                                                                                     $$$468;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD                                                                                     #$"468:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD"""05569<:?B;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD$$$05538869<:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD=BE=BE=BE=BE<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD! %%%14769<:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD###14769<;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD$$$388:?B;@C;@C;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD .3325825838869<:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD !!!!!!###0555::;@C<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD###468:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD02458;:?B<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD<AD !/2547:9>A;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C<AD<AD<AD<AD;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C<AD<AD<AD<AD;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C<AD<AD<AD<AD;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C;@C 0245799<?9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A:?B:?B:?B:?B9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A:?B:?B:?B:?B9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A:?B:?B:?B:?B9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A9>A,-./13358357357357258469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469(+.*/2+.1+03-3906=17=28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28?28? (.4,29-5@09H2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J2;J (1=,7F.<N0=Q3?R2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S2?S'2>*6F+8L/@Y2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\2C\#%3E*9R.Ca/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed/Ed%%7N)@`+Be+Be+Cg*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh*Dh 0E"4N"7R"9Y%Aj'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl'Cl' 4V!@m"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp"Bp 2U=o@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v-O6c>w@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|@|'2\=x>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,R5i>‚>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„>„'0b <ƒ
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡
+>‡ /` <ƒ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ ?ˆ/] <€ >„ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡ >‡+Q5j>‚ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„ >„$1_>~?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚?‚.X=z?~?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*N4d=w>{@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@~@|@{@{@{@{@{@{@{@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,M2\5c=v?y@{A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}@{?x<j;e;d;d;d;d;d;e<j?x@z@z@z@z@z@z@z@z@z@z@{A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}A}#*K2Y6d>v>wA{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{Aw;i;b:Z,4?-39-39-39-39-39,4?:Z:a;`;`;`;`;`;`;`;`;`;d;i@vAxAxAxAx@zA{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{#+L2W6a>s?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u?u@vByA{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{ByBy@v=h:[+3<.1422222/22/22/22/22/222.14-39-39-39-39-39-39-39-39-39-39+3<:Z:_<a<a<a;b<g@vAwByByA{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{A{ByByAwAwAwAwAwAwAwAwAwAw ,J1S1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V1V3X6a>r@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@v@vBxCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCzCyBxBuBuBuBuBuBuBuBuBuBu@u<f<a :X-3:11111.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.111.14-17-17-17-17,3; :X;`;a<f@uBuBuBxCyCzCzCzCzCzCzCzCzCzCzCzCzCzCyBx@u<f;a;`;`;`;`;`;`;`;a<e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++I0S0S0S0S0S0S0S0S0S0S0S0S0S0S0S0S3X6a?q@s@s@s@s@sCvBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxAt<f<`;];];];];];];];];]:]!9W,3;/1411111.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.11.111/14-25,3;!9W:];]<`<fAsAtAtAtAtAtAtAtAtAtAtAtAtAtAs<f<a!9W,3;-25-25-25-25-25-25-25,3;!:V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++I0Q1S1S1S3U6]?nAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsCtCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvBuAq=d:Z,29,14,14,14,14,14,14,14,14,14,14-0300000-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-000-03,14,14,29!:V;];];];];];];];];];]<_=a<_;];]!:V,29-0300000-00-00-00-00-00-00-000-03 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + +G1O2P2P2P2P2P2P2P2P2P2P2P2P2P3U9]BpCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsCsBq=c!;X+17/////,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,///,/2,14,14,14,14,14,14,14,14,14,14+2:$9P+2:,14,14,/2/////,//,//,//,//,//,//,//,//,//,//, +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + #4RCnDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrDrCp>a!;U+17/////,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,//,///,.0/////,//,//,//,//,//,//,//,//,//,//,//,//,//,//,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +  4RClErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErErDm =[*16.....+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+..+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++@2L2M2M2M2M2M2M2M2M2M2M2M2M2M2M2M4O9ZCmEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpEpDmBi ;V*/2,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + 3NBgDlDlDlDlDlDlDlDlDlDlDlDlDlDlDlDlCjFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoCj!?^!<W#9N*//,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*,+*
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +,C2J3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K3K5P9WEj Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm Gm GmDi"@\#;P*04+-/++++*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0E9UCgDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDi Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Gl Ej"@\#;P)/3+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)+*)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .@3I4K4K5L:S Cd"Fj"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Gl"Hj"Ef#=T)/3****)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+     .@2G3I3I3I5L:S!Cc!De!De!De"Ef"Gh#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Hi#Fg$?Z#9K*+,)(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')('
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  +;2G3G3G3G5L9Q Ba!Db!Db!Db!Db"Dd#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg#Fg"Dc#<R(.2)(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')(')('                                                                                                               
+3IA^ Ca Ca Ca Ca!Cc"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Dd"=X#9K)*+('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&('&                                                                                                              
+
+
+ -?8P Ca"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef"Ef!Db!Db!Db!Db!Db!Db!Db!C`";Q&,2''''&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%  ,@6NA^!Db"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd"Dd!Cb!Cb!Cb!Cb!Cb!Cb!Cb!Cb!Cb!Cb!Cb"B`"=U";Q#;N#;N#;N#;N#;N":M$8F()*'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&%'&% ,@5M @^ Ca!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc!Cc Ca Ba!A_!<T!:P":M":M":M":M":M":M":M":M":M":M!7I%+1'),'),'),'),'),'),'()&&&&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$ + +>5L?] B_ Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba Ba @^!;R":O"7H%)/%(+%(+%(+%(+%(+%(+%(+%(+%(+%(+'()&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$&%$ )90C5M?[A^A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A`A` @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^ @^@\ :Q!7I$(.&'(%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#%$#
+        *=4K=Y?[ @^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^A^@\ ?[ :Q!9N!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K!9K 8J!6G$'*$$$$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"
+ +'8,@-?-?-?-?-?-?.C3H=Y?[?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]?]>Z9P 6K 5F#'-%')%')%')%')%')%')%')%')%')%')%')%')%')%')%')%')%&'$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#"$#" )92H;V=Y=Y=Y=Y=Y=Y=Y=Y?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[=Y 9O 5F"&,$%&#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!#"!                     (;1G;W>Z?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[?[=Y8N4E"%(""""! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "!  +'6*=+?+?+?+?+?+?+?+?+?+?+?+?*='6 
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +'6*=+?+?,A1G;W=Y>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z<X5J!&)"! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! "! 
+
+ 
+ '70E:S;V;V;V;V;V;V;V;V;V;V;V;V:S1G,A*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=&5
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ '70E:S;V;V;V;W<X<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y<Y;W4F"$&! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  $4)<)<+?0F:S;V;W;W;W;W;W;W;W;W;W;W;W;W;V;V:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U9R0F+?)<)<)<)<)<)<)<)<+?0F:S;V;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;V3E!#%                                                                                                                                   
+$3*>0D8Q:S:S:U;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V:U:S:S:S:S:S:S:S:S:S:S:U;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;T;T;T:R2D!"#                                                                                                                                    +&5.C8P9R;T;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V;V:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:S:R5J3E2D2C.= !"
+ +"2(;.C8P:S:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:S9Q4I2D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B/>#&!#!# !""1,A7O8P9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9R9Q3E/>!% " " " " " " " " " " " " " " " " " " " " " " ! ':5M8P8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8Q8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P6N1F.= #           "2+@7O8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P8P6N1F0A/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?,; #
+ + .$5&5&5&5&5&5&5&5&5&5'7*>5K6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N6N5L/? &
+ +-#3%4&6)=3J4L4L4L4L4L4L4L4L4L4L4K6L5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M0B+9#3#3#3#3#3#3#3#3#3#3#3#3$7(<2I3J3J3J5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M5M4K4K4K4K4K4K4K4K4K4K3I/C*:!2I2I2I2I2I2I2I2I2I2I2I2I2I2I4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L4L3H3J3J3J.B+>+<+<+<+<+<+<+<+<+<)7 3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J2H2H2H.?+<,;,;)7!3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J3J2H2F2F2F2F2F2F2F2F2F2F1F+>*:*:*9(42I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I2I1E*=+:)9)9)9)9)9)9)9)9)9)8'31G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1G1D0E0E0E*='30D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D/B*:(8(7(7&2/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/D/B)9%1.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.@'6.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A,A&6,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A'8".+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@+@*>'6$2$2$2$2!-*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>*>)<)<)<)<%5#2#/#/#/#/#/#/#/#/#/#/#/#/#/#/!,)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=)=):(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;$3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1". ,(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;(;&9#3 +':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':%8#2*':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':':&6#2!-!-!-!-!-!-!-!-!-!-!-!-!+)%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8&6&5&5&5&5&5&5&5&5&5&5&5&5%6"0++++++++++++++++++&%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5$5%4) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4%4#2) +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + "2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"2"1)(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&# +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + "1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1"1!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/!/)&!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0 .(%%# +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .)') . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .+-' + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------******&&***********----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*&! +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ******************************************************************************************************************************************************************************************************* +$ !                   ! +$**************************************************************************************************************************************************************************************************************%# +
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ ******************************************************************************************************************************************************************************************************' !  
+             +"(***********************************************************************************************************************************************************************************************************($ +
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +"  
+
+
+
+
+
+
+      +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))# + +                                                                        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&   %%%&&''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& !      
+
+                   !&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&                                 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$  +
+
+
+
+
+  
+
+
+
+
+
+
+
+
+
+
+
+ 
+ + + + + + $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ + 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +" 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+               
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+       +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ +$ # 
+
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +"           +
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+                   +" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +"   
+  +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +"             + + + + + + + + + + + + + + + + +    
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +     + + + !  +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" +" 
+
+
+  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  + + + + + + + + + + 
+
+
+
+
+
+
+ +  + + + 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +  +                 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !                                                                                                                                                                                       + + + + + +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +                                                                                                                                                    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+
+
+ 
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          +                               
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+ + + + + +                                                                                                                                                                                   
+                                                                                                                                                                
+   
+     
+  +   +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     
+
+
+
+
+
+
+
+
+                                                                                                                                                                                                                      
+ 
+                                                                                                                                                                                                                                       
+ + + + + + +                                                                + +                                                                                                                                                                                                                                                                                                                                                                                                                                                                               + 
+
+
+
+
+  +                      
+                             +
+
+
+        
+                   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +                     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +                      + 
+
+
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+
+
+
+
+
+
+
+
+  +                                                                                                              +   + + 
+  +                                                                                                                                                                                                                 
+ +
+ +
+ +
+ + +                                                                                                           
+ +                                                                                                                                                                                                            
+  +
+ 
+  
+                                                                                                 
+   +
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+                                                                                                                                          
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+  + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+                                    
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ + +
+ 
+                                                                    
+ 
+
+                               
+
+
+
+                                                                
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/esplo3.raw
===================================================================
--- rel_1_4/bca/bca_raw/esplo3.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/esplo3.raw (revision 1522)
@@ -0,0 +1,75 @@
+ÿÿÿÿÿÿÿÿÿ "ÿÿÿÿÿÿÿÿÿ5Si\cSO+3""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+,-@H2B-; +'A _n–D•JŽR žr)nVn`#O@ ++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=E‰Npy6kq5CC! "@b"t)´eÊ$͉(Й5Ɯ:©Š/oU=,5++&0.HGYU e_F>A9#ÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8@y~Fpt9fg.?;3%F) Io2œTºq
+ݖ"۝&љ џ&º’—x_Kxm~{ur |¥ž,¤™%º­;–ˆ%s'dZ%*%%!0( ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%#
+86..:81.]R“x3|P˜[ÃԒ؞Ó¥Ò¨ ã´&Í£ݾ%±œȽ#ÊÆ/¤Ÿ·±%¾³% ‘º«¼®)¬¡-†€ MJDAOJŒ1wd wf0H?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + ÿÿÿÿÿÿ'#~s3¡„6 r¹z¶sã¦Ú¨Ùµ!׸ æ¿"á¼γãÐȽ ÅÀÊÆ°«×Ï,¹»° À¶º´ ®ª%‹ˆ{“†•€±”6…hzh(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+&!PBvT‰U ´r°iÝ¡ܬ
+ÝÀк˳ äÎ"× +ʺÒÇ Ã»ÑÌÎÌ·¶ÇÈÁÃ
+»¼ËÊÙÖ1¾·¿°!¨œ¹‹½‘.¶˜B`PII ÿÿÿÿÿÿÿÿÿ%#?? +212,)]@X+ša͒
+ڥҪӹ ˺
+ɺ ßÓ³Ñà ÙÎÊÁËÆÊÊ
+ÒÖÍÔ ÌÐÝßßÚÓÈо¾¢¬µz¾{Ɋ ¿‘/²˜;‰ƒ+NTÿÿÿÿÿÿ* OF…ˆ~¨Ÿ&«Ÿ'œ‰¡‰Ç¥ϪÙ´б˴ŵ·Ƽ½°¿´ɾÊÁ
+ÐÌÑÑÕÙÒÖ××çß×Æؾ Ыϝ¾x´_½_Ðx΍'Ǟ4µ¨6¡¢-ÿÿÿ$1&tg ·)ÚÑ*ÐÉ#ãÛ:ìßE×Å'ÞÄÚ¹
+á»׳ÓµÔ»Ò¾Ƶ± ³¤¾²À¸ +ÊÅ ÏÌÆÀÔÈÝÊéËܳ à®Ú¡
+ޕÑq
+Ë]Ô^ØkÍzǐ¹¢ §¡ÿÿÿ%qh +¾¸&ÒÐÌËåà$éÝ)àÈéÃä´ê´ ç±ܯ Ú±ͤȢ¦ˆ“} ’¶­È¿È» +×ÀæÁÛ§ɉ»qÃtÆrÐq×` ÕPÚLÖRÇaǂ 䶫ÿÿÿÿÿÿÿÿÿTSœžâæ:êí,ÜÙèÕöÓ!ýÂ&æœãê–&à–ו̗۟¾—γ˼!¬¢©žº¨Ä¢Õ¡ǀ³]·WÆcÆaÊXÙO×>ß>àKÔ^р Ç ·¦ÿÿÿÿÿÿÿÿÿ1<MY¡® ÄÍßÛéÌñ¹àˆ¼O´8ÂEÀLÂ\ىô¸
+ùÌîÐáÐÔÊÉ¿½©Ë¦ÓœÆyº]Önñò ïpâJÝ5æ7òNîkæ‰ϟ!µÿÿÿ,1CHZ_…³µ áØâÀٜÅh¼H¼:¿:³2¾Lí– ý»þÌýÙóÞëÜ +ïâõãõÕ ñ½âœ؀ôŒÿ“"ÿ!ÿvå?Ý'â$ë;ïaò3ß©=æ0 _P«™E¢Œ®•¿§ÞÌ"× +Û»֦ω݅ã}ØkºJÄ]æ“ÿ¾$ÿÍ#ûÑþàÿï$þï"ëÜòÜîË÷Â÷®ÿ¢#û†ókâGØ(ØÚÖÕ= ßr/̐:¨†%D#‚` ´’'ïÊEäÀ*Ü»êÎ"æËáÂéÁé´ öµú¬ õŸ Ü~ë‘ܒ +ږޙ÷¸ÿÓ ýÖôÚñÜößîÎ ýËù°òÚ[
+Ô> ÇÐÞãÐÁ!ÂIUh77n@¶ŽÙ¶$ëÌ#ñÔëÑôÚ!åÈ
+áÀã¼ì¼ð¶ +î©ð£õ¨&ä¡í¥߃Ôtè“ÿ½ÿØ#þÜôÑþÒ +ÿÉñ›ßjÈ7Ì"Óë ÛßÚ Ä +¡uN]’Pŏ"Чݼ ðÒëÍçÉâÄß¿Þ¾äÀéÀê» +ëµë´â«ޜÛÖråþ·ÿÔÿâÿàÿÖùº +Ï{ÇY»4Ë)ÕÙä æÁ¬ £ {HzŸ@Éܤç»ëÆä»ç¿èÀèÄåÇãÊåÐèÓçÎâÅÓ¯ĕ֑ޖé«ûËõÙ ÿèÿåÿÙ÷À +яè•ë…ø|úaÒí#ÐÈ´$wLÿÿÿªBԂé¨ê¶Þ¯џاóÄ÷ÑôÙìÚêÝîâëßåÑëÌÕªïº üÅûÎÿÜïÔùßûÔ
+ñ¿å¬Քÿ¼)ÿ²-ÿ-üu#Ú-à Ç©Š 3$=ÿÿÿ€²Q +ã“"ë¨è®å® ܢܢúÆÿÛÿçøæ
+ñãõçõãð×÷ÎÞ­ð½÷ÇõËúÕ
+òÌÿÕ ÿÆæŸхπÿ²*ÿ­1ú’1èh!Õ4É°³)¢5w)U&ÿÿÿk +¡G â*þ±-ÿ¶!ö°ê¥
+ï±÷ÆÿÝÿíøëòå +ôçõâ
+òÖôÉ é¹ôÆôËôÑýÚ úÐÿÏè¢Éy´b»hو݃ Ïc º:¸#¼#®8­S;…G2C +ÿÿÿ_ ‡2 +Éo!ö—+ÿŸî”à‘ê­íÇ
+ñßôííìêæëâêÚçÏ æ¾ðÇ ïÌäÉæÌèÌä»ß©ê¦؍ЄٍӃÓv¾K ›¥¦0œ<$¢[G€QA&ÿÿÿ<d
+D ¼XÔkáߒâ­èÍêáììêëéãéÝâÔÞÇèÅ ÿÞõÝ ê×óàýãüÖóÁ
+ó¶ñ¯õ²ÿ·'åê„Û[¹1¢!˜$ + x+G#ÿÿÿÿÿÿÿÿÿO|.¬P¤?çŒ٘߸êÛäáëçïèïà ïÝ +éÙâÍðÓ õÚ +ðàïãóäõÝûÖÿØ"ÿÓÿÊÿË"ÿ¿+û›+õ|-ÝK»&Š +iV9'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@žSêš)í¦Þ®ðÖìâëåõçûåùÞúß
+öâ ïÜðØóßðäðçöçúã ÿÛÿÜ%ÿÚÿÓÿÎú²áyÈA º°“p V/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿK9„a¢wÏ ëÁõÝ#íÞïãóãÿàÿÜÿÖÿÜÿæùçúåøçòêðèôãöÝûÖýÕþÙÿÛýÈã“
+ÇQ°³ º·+v‡0P#ÿÿÿÿÿÿÿÿÿA2†t ž‡ŪÜÃ!ßÊôæ!ÞÔîàôßÿÝÿØüÒýÚýè÷ê÷êöêñíóìöçþåÿàÿÛôÔúÓñ¸ چËT°¶Â(Ë>ÀJ°W-s4)ÿÿÿÿÿÿ±Š#°ѵ&̵àÍèÚÛÏìÞ ñßôÞúß
+÷Ýî× îÞ ðéíéðêíéðî +ñïñä
+óß ñÖ äÇéÌéÂç«åãr¹8¶7ÃCècùƒCËr8Q"F"ÿÿÿÿÿÿµ Í¡ϳ×ÄèÞéÞèØ ÿìñÚðÜñßëÞåÙäÜ +éáæÝíßëÞñçõéòÝòÕëÊزâ¹ê´ êšä~ôz +ãeçuØi +ïx&áu,Çw8c0* +ÿÿÿÿÿÿ¾‡ʟ·¡ÐÅÝÖÛÒ èÑâÆïÔëÖäÜ ßÞÛØà× êÕëÌìÊéÆïÑ÷ÕøÍÿÑ"ÿÐ÷º
+ë¦ ä ÙgÚTÿoÿvÿ’6×rØq"°Xu;> ÿÿÿÿÿÿÿÿÿl>•r
+›‰×Ò0ÒÑîçì×
+õÛîÕæÕáÛ ÝÜÙØ
+ß×êÑëÆòÂèµç¶æ³
+ä¨
+ô±ÿ¶õ ü%ÄV¯*ÓDÿs$åd Ûp­U±aOƒY:'20"(ÿÿÿ! 0A5ÉÃGåã6åäüõ!äÚìßâÔáÖ×ÏØÑÞÔÔÅöØí¶â¢Ïè¦ ë£÷¥ò•ü“*ßkÇHµ1³0ÉQáwò™#ɄĐ ¥Õ¸6ÔÀG©ž2š–5OLOOÿÿÿ!(¿ºRÐÑ-ô÷.ééíêÖÐïèßÔÞÓèßâÛæÜÖ¼ +è¸ð±ù¶÷¬ÿ©&þ›&ãnÌJÀ4¯ ¯%!Òj õŸ(û¶+ÿÏ5Ö·æÑ&ÛÈ#ÿñSãØHæß[¸µDEDÿÿÿ%Œˆ%çéJâå$Ýßâã æã
+ÞÙÑÈìäÇÁÔÌæÚ,äÒ4¼œ ˝õ»5þ°2æ‚íséXÕ6Ø3òRÐ?ÇKò’"ؓ
+êºþß-äÐæØãÙèß*ùõL×Ö>¡£\`ÿÿÿÿÿÿÿÿÿ+)£¦ÌÐ#íî8àá!áßÊÆÙÓàÚ"ØÓóì;ź"Ž€gV“və3̃$à|'·;¿-Ä'íMüe0ùv2Òh·jº‡Ø»åÕòæ"ß×ñê*ëé2×Ö.ÍÐ9ˆ‹
+X]ÿÿÿÿÿÿÿÿÿXW‘•&½Á8ÁÃ2æåMàÞ>àÜ;Ü×=Á¼"ÕÑ0¶°§"g]-%'Q-q7ˆ43 ¯4ÇG$éjGïQ߁C›S}M±• +Á´Û×-ÛÕ%øòDÌÇ!¿"£¢œž!Œ$Y]ÿÿÿÿÿÿÿÿÿEGdd
+he‡ƒ š–*¤ž.w§ ,¬¦*zs‚)<4##ÿÿÿ-[’A,–=+ªO<•C+¨aAn8
+f@i—Š!®ª/Á¾9ľ6Áº5«¦(wtom^^PR ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&=33(D;wp „|1ma-;2ÿÿÿÿÿÿÿÿÿ8MQ!.1ÿÿÿÿÿÿ.+OLe]PHulA8e].& ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#;2"8+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*,"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/esplo4.raw
===================================================================
--- rel_1_4/bca/bca_raw/esplo4.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/esplo4.raw (revision 1522)
@@ -0,0 +1,51 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBJfa\[ H
+?)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&2KYYehslq=A87ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ33VT#;7A;'ÿÿÿ*%d$p$y)Š>œZ:šd>}U$gKI2ÿÿÿ ÿÿÿ#Zb t{ ˜ž¯³*’’~{KELDh^un&IKDLCHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHG‚@yy3{z:DA'>V"z=”U)ŒR"`(v1¬ˆ4 €-„f(2?-3&=6fa“²­»´¹¯Š~zmoasešŽ¹²-¯¯+¬°7op
+:8ÿÿÿÿÿÿÿÿÿÿÿÿCB|{;cctu/AB.+3'@(J$oCwH{S~b!x_Ÿ‚µ™.‡l\F–ƒ4xhui†®£ Ä·¹ª¼¬±¡“ƒ„v¸­ ÉÁ ƾ½ÊË2··5ª¦BRJ ÿÿÿÿÿÿÿÿÿA=/-86**XV#up8xk4~g5ƒg8gL!r[/nc+i`¡)´¡+·¦2·©/¾´1ƽ0«¢ÉÀµ·©¼ª
+ȸÕÇ&ÔÌ#¹´Ã»¹ßÝ(ÂÁéçDµ·(§¨3{z'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfd;•“`}vBpb5uc=m^?mc@YX*lm+†~˜¸¯.¹²$½¹ÇÄÑ͵­Í¿²Ÿ
+÷ ÐÇêç(äçéî ßß¼¸ÎÈÁºÕÑ:žŸ \`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ JH1QN+YU/bY<i^JlcTniUZ^;\a)…ƒ0|x ¬¬*¹¹%À¿ÆÆËÇ ×ÓÍÆÐÈÍÇÓÐãåâçÚâÞåÓÐã٠ŵɹÙÎ4—”syÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&! #?9+b[Sg`ZfcTimH^c)pn$‚ ››#ÁÀ2ÔÒ/ÊÉÅÁÒÍÐÉÙÓ +ÕÐÞÝÚÛÐÔ +äé+áß*ÝÐ"Ö»ğ¼™Ï´­ ŠŠNWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + +@7<`XUQL6po7€€:ld%~v+€x¥Ÿ#«¥ÇÀÔÊÒÉÐÆûß×ÓÍÊź³ ÔÍ4ÖÄ4Ï©"Ȓ À|юȔȦ¸®¢¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3)'UK0cYzq&i_"i`]U_V–Ž»²)¹®™Œ‚°¨®¦Ǿ3‹‡y‹|ž€²{³g¸YÐsʀșº§ ¥¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+B3Œx;‹y/TK
+^YG@\U{txp¢9mgRLE>QHXM o`P@ZHfAˆCž>´@ÍZ¼aº~»¡·±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+?*†h4sXVIUP \T_WG>GADB*(;2!4$
+C0_If<|-œ/»5ÔQ ÁY¿y½ ¹¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6 R,P-H8z)VNLD!$ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0J. l;9§1 +¼+ÚJ ×e +܎!ɧ)ª¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  !3CK3aQ_P1$% ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9 oJ-•Y5ž;²/½Ò2ÔRå‹+×­=¶£+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ +*4 EZ2sPR3YAG4' ÿÿÿÿÿÿÿÿÿL$
+vBžS,œ)¼&ÈÍÃ-ÕgƎ1¤„!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  + + + &%+>"g9p;yG_%£r/¿”E€^j]T(&! ÿÿÿÿÿÿG'j9r-Š( Ã
+ÒÕÄÉI¥Vm8ÿÿÿÿÿÿÿÿÿÿÿÿEB —’XNK40
+61;5J=fN…a½;Í7Õ¦LÁ9¡]¦c·‚Ä .º«6|x>;"5#!B" +m5z œÅ$ÁäÍÀ +¿- ~ÿÿÿÿÿÿÿÿÿÿÿÿ*]Muh™Ang!SLE@@7L?…p!¶™;Û³SϤ>Í£=¬{’M–NcÀ™ ʺ1‚|[TMEQF0J8$W6F‡*£$È(Í
+É×Æ—jÿÿÿÿÿÿ8 ]?W8tZt]’)\PMD50/-87idˆ}!š‡(¢Š*¦‰+•o„M†NŽa³”(ÑÅ=µ­&|n\J^K YA_B…U¦_!»U$§"¿'¹±¦^ Aÿÿÿ€W;¦|J¡y1µ‘3˜{Žv `N 4+#*Zaoshbk_sa‚f%sM qHuWua
+…¶ª0u Žp„f‚c¦‡4À›KďK”IŠ$Œ“’
+wI
+#[)}L!»‹KÑ¢TΣG {"rT ;$+'$8>>Idp.mw:]`5ZV1MD^O&UA P<N?A4TE„n"·’DȞJ¡u’n«Ž2•{'‘o/pBYim ‰(…-ŠE5O&ÿÿÿ@R"g8|Oc‡`>68) 4/NU"do3q}?Xb.RU:baOQO:GC*E?'C=#:6@:N@T;f<
+tB}L–lqaML8' +,7De$–[K„WD;$ÿÿÿÿÿÿ3R,:;:B" )@0( 11X^u{;dg2eaD`]NccYOQFLP?IN::>-<=-C6-A'_5i8{JzQgJH5
+ +!ÿÿÿ( .I#jG3X?)ÿÿÿÿÿÿÿÿÿÿÿÿ(4A%?$)<&'+ -)86QOc^4vlQSL<[[QV[TT_QS^PMWL>A6>6+]J9]>tM$~V%vQ$pS1#ÿÿÿÿÿÿ 45"ÿÿÿÿÿÿÿÿÿ;,=/C4F6K:&F7$D7&B7%>3A6 KA(QE-‚s^\Q=\[GahVYcXV`XRYQVYHLI&ha-se$q^~e,jO$D( ÿÿÿ
+   ÿÿÿÿÿÿÿÿÿÿÿÿF<f\9RG'KA&SH2F>)TL9h_PE;/;/!YL;VH.[R3]\=Z`FU]P[b[WZSSU?VT$‚:¢ Kƒ}'Œ~7{d2Y;#)/&  ÿÿÿ ÿÿÿ4$<-J=C:^V2XR2PK-`]>ZV9TP7TO;MH2QL/[X/_]-TS%PR-KP<MPEJH<LF0YS#‰…>¨¨PŒ/Š€)|ec?*E,3D*-9!!-ÿÿÿT:_G _L
+<,1%`Y+d`;``>ZZ6NO-QQ5VV>?>)FE)ˆˆbrqC`]0_]6TW<FH2HB,UJ,cU&€r3ˆ3”5˜‡-pR_'PP L I%B%! + -* -.!Œh‹irZiVoc[UqnEZY:^b?koNLO4-//0"(&A@,mlPuoKlgA_a<QQ+_X.tc7}e7†k<zc/qX~[’c•U–Nx-_QU(@8!C8GD +bb.TY#¾‘4²‹&•w’~ +‘„&g`PM"ggK`cHTXA57"  C>*YN2G?CDHKog&Šy4—y;šu@zU(xM‡RªgË{»bªSn\^)Y0G*SD XSkl3CF¤n&Á“=¹˜%¯› ¥™-zs"a^1UT?ZZN>=8ÿÿÿÿÿÿ -",.:?qnŽ'³’3­ƒ1^&š^*D™Bê‡*ê…-ãB™A‚3 p/ a0[9 :(>5
+62 +oB “m&Ÿ„¸§1¶¬9†#XUWS8DB6621 ÿÿÿÿÿÿ ÿÿÿ(%,A; HB‚s¾¢4Õ©@‰2ÁG—J‡0¤Fá~-Éi¹aœN”N{B +R;8&6.# ÿÿÿÿÿÿÿÿÿ?4µ­Hš—"™–+qm&FB51ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0!
+A. +O;gJ°‡/č0äžFÉw.¯U!…)xz#”C ·q,­r$¨x$¢}%‡i Æ°AÉ»Až––“ [Xÿÿÿÿÿÿ0,62²¯NŸŸ'~}a]WQD?B>%ÿÿÿÿÿÿ H?,N6jHŠY
+·u'Æw2œC ‚"_e hŒMˆU›s ƒ ‹ £•´« ØÒ<ÞÝEáàRª©3VU><vs"œ›1ÂÃC™š‡ƒc^ +KHMJKG".+B@ML ZZNH`SpV i?n7i#djoZo.xD
+šp$”v’| +£”œ“­¨»º"¿À'ÏÐDžŸ'IK$B?€}.Ž$º¼5ÀÁ7žž&Š‡Œ'op^^MM]^ŽB™Rƒ€;FGTS‡~;zf'`@?NOn+‰H,‹O-ƒP!Xp œˆ)¸ªA³©6y—•‘šœº¼?˜š/fhLF"}x6š˜4ÁÃ;»¾%àâP×ÛI¾Ä0 §{“–-‹‹'Ž3˜H?8'$ +6,@1;#5,X-†Z-«N yBnN`Hm!‘„5³¬T§¡A–“*†„‘’*€"yz,EGÿÿÿEAUQrollwt{{‹Ž +”™|~yz—”3|x!•ŠH>5
+ÿÿÿ +ÿÿÿ='K2O3 nQ%rV&G0,-<2SMˆF«¨[Ž;Ž;VW OP
+;;76ÿÿÿÿÿÿÿÿÿ ÿÿÿ&ÿÿÿÿÿÿÿÿÿ+ MF"B<qj&qj&m`)4*ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ& #NK\[#FE `^+$#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿA70'?2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/bca_raw/missile1.raw
===================================================================
--- rel_1_4/bca/bca_raw/missile1.raw (nonexistent)
+++ rel_1_4/bca/bca_raw/missile1.raw (revision 1522)
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿÿÿÿÿÿÀÀÀÀÀÀ€€€ÿÿÿÿÿÿÀÀÀ€€€€€€ÿÿÿÿÿÿÀÀÀÀÀÀ€€€ÿÿÿÀÀÀ€€€€€€ÀÀÀÀÀÀ€€€ÀÀÀ€€€€€€ÀÀÀÀÀÀ€€€ÿÿÿ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
\ No newline at end of file
Index: rel_1_4/bca/control.c
===================================================================
--- rel_1_4/bca/control.c (nonexistent)
+++ rel_1_4/bca/control.c (revision 1522)
@@ -0,0 +1,143 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: control.c,v 1.1 2002-10-01 10:25:00 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//**************************
+//* file: control.c *
+//* included by: bca.c *
+//**************************
+
+PID crea_soft_control()
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,CONTROL_PERIOD);
+ soft_task_def_wcet(m,CONTROL_WCET);
+ soft_task_def_met(m,CONTROL_MET);
+
+ pid = task_create("control", control, &m, NULL);
+ return pid;
+}
+
+TASK control(void *argv)
+{
+ int i, x0, y0;
+ int rect1_x0, rect1_y0, rect1_x1, rect1_y1;
+ int rect2_x0, rect2_y0, rect2_x1, rect2_y1;
+ char * str = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
+
+ x0=frame_control->x0;
+ y0=frame_control->y0;
+ rect1_x0=674;
+ rect1_y0=y0+19;
+ rect1_x1=758;
+ rect1_y1=y0+24;
+ rect2_x0=690;
+ rect2_y0=frame_control->y1-81+3;
+ rect2_x1=758;
+ rect2_y1=frame_control->y1-81+2+6;
+
+ while(1){
+
+ sprintf(str,"AEREI: %02d",aereo_count);
+ grx_text(str,x0+2,y0+18,FAB_white,FAB_blue);
+ grx_box(rect1_x0,rect1_y0,rect1_x1,rect1_y1,FRAME_CONTROL_BACK_COLOR);
+ grx_box(rect1_x0,rect1_y0,
+ rect1_x0+(rect1_x1-rect1_x0)*aereo_count/AEREO_N_MAX,rect1_y1,
+ FAB_yellow);
+ for (i=0; i<AEREO_N_MAX; i++){
+ if (aereo_table[i].status)
+ if (i==0) {
+ sprintf(str,"HARD vel=%04.1fkm/h",aereo_table[i].vel);
+ grx_text(str,
+ x0+2,y0+28+8*i,
+ FAB_white,FRAME_CONTROL_BACK_COLOR);
+ grx_box(x0+36,y0+29+8*i,
+ x0+45,y0+26+8*(i+1),
+ aereo_table[i].color);
+ }
+ else {
+ sprintf(str,"Soft vel=%04.1fkm/h",aereo_table[i].vel);
+ grx_text(str,
+ x0+2,y0+28+8*i,
+ FAB_white,FRAME_CONTROL_BACK_COLOR);
+ grx_box(x0+36,y0+29+8*i,
+ x0+45,y0+26+8*(i+1),
+ aereo_table[i].color);
+ }
+ else grx_text(" ",
+ x0+2,y0+28+8*i,
+ FAB_white,FRAME_CONTROL_BACK_COLOR);
+ }
+
+ sprintf(str,"CANNONI: %02d",cannone_count);
+ grx_text(str,x0+2,frame_control->y1-81+2,FAB_white,FAB_blue);
+ grx_box(rect2_x0,rect2_y0,rect2_x1,rect2_y1,FRAME_CONTROL_BACK_COLOR);
+ grx_box(rect2_x0,rect2_y0,
+ rect2_x0+(rect2_x1-rect2_x0)*cannone_count/CANNONE_N_MAX,rect2_y1,
+ FAB_yellow);
+
+ for (i=0; i<CANNONE_N_MAX; i++)
+ if (cannone_table[i].status) {
+ if (cannone_table[i].fire) {
+ if (i==0) {
+ grx_text(" ",x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ sprintf(str,"HARD vel=%-5.1fkm/h",cannone_table[i].missile_vel);
+ grx_text(str,x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ }
+ else {
+ grx_text(" ",x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ sprintf(str,"Soft vel=%-5.1fkm/h",cannone_table[i].missile_vel);
+ grx_text(str,x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ }
+ }
+ else {
+ if (i==0) grx_text("HARD ",x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ else grx_text("Soft ",x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+ }
+ }
+ else grx_text(" ",x0+2,frame_control->y1-81+12+8*i,FAB_white,FRAME_CONTROL_BACK_COLOR);
+
+ task_endcycle();
+ }
+}
Index: rel_1_4/bca/dummy.c
===================================================================
--- rel_1_4/bca/dummy.c (nonexistent)
+++ rel_1_4/bca/dummy.c (revision 1522)
@@ -0,0 +1,107 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * Massimiliano Giorgi <massy@gandalf.sssup.it>
+ * Luca Abeni <luca@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/* CVS : $Id: dummy.c,v 1.1 2002-10-01 10:25:00 pj Exp $ */
+
+/*
+ * Copyright (C) 2000 Fabio Calabrese <fabiocalabrese77@yahoo.it>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+//************************
+//* file: dummy.c *
+//* included by: bca.c *
+//************************
+
+PID crea_soft_dummy_radar()
+{
+ SOFT_TASK_MODEL m;
+ PID pid;
+
+ soft_task_default_model(m);
+ soft_task_def_level(m,0);
+ soft_task_def_periodic(m);
+ soft_task_def_period(m,DUMMY_RADAR_PERIOD);
+ soft_task_def_wcet(m,DUMMY_RADAR_WCET);
+ soft_task_def_met(m,DUMMY_RADAR_MET);
+
+ pid = task_create("dummy_radar", dummy_radar, &m, NULL);
+ return pid;
+}
+
+TASK dummy_radar(void *argv)
+{
+ WORD i,r,r_max,pos;
+ BYTE red[3]={250, 150,50};
+ int d[3]= {+10,+10,+10};
+
+ r = 0;
+ r_max = ballframe_radar->r+1;
+
+ while(1){
+ for(i=0; i<3; i++) {
+ if (red[i]<50) d[i]=+10;
+ if (red[i]>250) d[i]=-50;
+ red[i] += d[i];
+ grx_disc(ballframe_lucerossa[i]->cx,
+ ballframe_lucerossa[i]->cy,
+ ballframe_lucerossa[i]->r,
+ FAB_rgb(red[i],50,50));
+ }
+ grx_disc(ballframe_radar->cx,
+ ballframe_radar->cy,
+ r_max, FAB_blue);
+ grx_circle(ballframe_radar->cx,
+ ballframe_radar->cy,
+ (r+9)%r_max, FAB_white);
+ grx_circle(ballframe_radar->cx,
+ ballframe_radar->cy,
+ (r+5)%r_max, FAB_rgb(200,200,255));
+ grx_circle(ballframe_radar->cx,
+ ballframe_radar->cy,
+ r%r_max, FAB_rgb(100,100,255));
+ for (i=0; i<AEREO_N_MAX; i++) {
+ if (aereo_table[i].status
+ &&aereo_table[i].x>X0
+ &&aereo_table[i].y>Y0) {
+ pos = ballframe_radar->cx - ballframe_radar->r
+ + (aereo_table[i].x-X0)*2*ballframe_radar->r/500;
+ grx_plot(pos,ballframe_radar->cy,FAB_yellow);
+ }
+ }
+ r++;
+
+ task_endcycle();
+ }
+}
Index: rel_1_4/loader/shark/fsfinit.c
===================================================================
--- rel_1_4/loader/shark/fsfinit.c (nonexistent)
+++ rel_1_4/loader/shark/fsfinit.c (revision 1522)
@@ -0,0 +1,56 @@
+#include "kernel/kern.h"
+#include "fsf_server.h"
+#include "fsf_contract.h"
+#include "func.h"
+
+extern struct loader_contract loader_contract_list[];
+extern int total_loader_contract;
+
+void fsfinit()
+{
+
+ struct loader_contract *c;
+ fsf_contract_parameters_t contract;
+ fsf_server_id_t server;
+ union sigval no_sigval = {0};
+ int i;
+ SOFT_TASK_MODEL m;
+
+ soft_task_default_model(m);
+ soft_task_def_period(m,50000);
+ soft_task_def_met(m,1000);
+
+ FSF_start_service_task(&m);
+
+ for (i=0;i<total_loader_contract;i++) {
+
+ c = &loader_contract_list[i];
+
+ fsf_initialize_contract(&contract);
+
+ fsf_set_contract_basic_parameters(&contract,&c->cmin,&c->tmax,&c->cmax,&c->tmin,c->workload);
+
+ if (TIMESPEC2USEC(&c->deadline) != 0)
+ fsf_set_contract_timing_requirements(&contract,FALSE,&c->deadline,0,no_sigval,0,no_sigval);
+
+ if (c->local_scheduler != PAR_POSIX) {
+
+ switch (c->local_scheduler) {
+ case PAR_EDF:
+ fsf_set_local_scheduler_parameter(&contract,FSF_SCHEDULER_EDF);
+ break;
+ case PAR_RM:
+ fsf_set_local_scheduler_parameter(&contract,FSF_SCHEDULER_RM);
+ break;
+ }
+
+ }
+
+ fsf_negotiate_contract(&contract,&server);
+ c->server = server;
+
+ }
+
+ print_server_list();
+
+}
Index: rel_1_4/loader/shark/initfile.c
===================================================================
--- rel_1_4/loader/shark/initfile.c (nonexistent)
+++ rel_1_4/loader/shark/initfile.c (revision 1522)
@@ -0,0 +1,177 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/posix.h"
+#include "grubstar.h"
+#include "fsf_contract.h"
+
+#include "modules/pi.h"
+#include "modules/pc.h"
+
+#include "pthread.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/nop.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+ int grubstar_level;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ POSIX_register_level(RRTICK, 1, mb, 32);
+ grubstar_level = GRUBSTAR_register_level(FSF_MAX_N_SERVERS, 1);
+
+ FSF_register_module(grubstar_level, (int)(MAX_BANDWIDTH * 0.8));
+ dummy_register_level();
+
+ CBS_register_level(CBS_ENABLE_ALL,1);
+
+ SEM_register_module();
+
+ PI_register_module();
+ PC_register_module();
+ NOP_register_module();
+
+ PTHREAD_register_module(2, 0, 1);
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ return 0;
+
+}
+
+int device_drivers_init() {
+
+ LINUXC26_register_module();
+ PCI26_init();
+
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+void call_shutdown_task(void *arg) {
+
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+int main() {
+
+ return start_environment();
+
+}
+
Index: rel_1_4/loader/shark/shark.mak
===================================================================
--- rel_1_4/loader/shark/shark.mak (nonexistent)
+++ rel_1_4/loader/shark/shark.mak (revision 1522)
@@ -0,0 +1,13 @@
+ifndef BASE
+BASE=../../..
+endif
+
+include $(BASE)/config/config.mk
+
+PROGS = TEST
+
+include $(BASE)/config/example.mk
+
+TEST:
+ make -f $(SUBMAKE) APP="nload" BASE=../../.. INIT= OTHEROBJS="event.o initfile.o shark.o fsfinit.o" OTHERINCL="-I." SHARKOPT="__LINUXC26__ __PCI__ __NET__ __FIRST__"
+ cp nload TEST
Index: rel_1_4/loader/shark/shark.c
===================================================================
--- rel_1_4/loader/shark/shark.c (nonexistent)
+++ rel_1_4/loader/shark/shark.c (revision 1522)
@@ -0,0 +1,232 @@
+#include "func.h"
+#include "calibrate.h"
+#include <tracer.h>
+
+#include "FTrace_udp.h"
+#include "FTrace_chunk.h"
+
+extern int cal_cycles;
+extern struct timespec zero_time;
+extern struct loader_task loader_task_list[];
+extern struct loader_contract loader_contract_list[];
+extern int total_loader_task;
+extern int total_loader_contract;
+
+mutex_t mutex_table[MAX_MUTEX];
+int main_chunk;
+
+/* Runtime Calibration */
+int calibrate_cycle()
+{
+ long long i;
+ struct timespec start,end,diff;
+
+ if (cal_cycles != 0) return 0;
+
+ kern_cli();
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ kern_gettime(&start);
+ for (i=0;i<CALIBRATION_DELTA;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ kern_gettime(&end);
+ kern_sti();
+
+ SUBTIMESPEC(&end,&start,&diff);
+ cal_cycles = TIMESPEC2USEC(&diff);
+ cprintf("Calibration usec/[%d cycles] = %d\n",CALIBRATION_DELTA,cal_cycles);
+
+ return 0;
+
+}
+
+int get_server_from_contract(int contract)
+{
+
+ int i;
+
+ for(i=0;i<total_loader_contract;i++)
+ if (loader_contract_list[i].number == contract)
+ return loader_contract_list[i].server;
+
+ return -1;
+
+}
+
+void *get_task_model(struct loader_task *current) {
+ if (current->local_scheduler == PAR_POSIX) {
+ static NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_save_arrivals(nrt);
+ nrt_task_def_ctrl_jet(nrt);
+ nrt_task_def_group(nrt,current->group);
+ nrt_task_def_usemath(nrt);
+
+ return &nrt;
+
+ }
+
+ if (current->local_scheduler == PAR_EDF) {
+ static HARD_TASK_MODEL ht;
+
+ hard_task_default_model(ht);
+ hard_task_def_ctrl_jet(ht);
+ hard_task_def_mit(ht,TIMESPEC2USEC(&current->deadline));
+ hard_task_def_wcet(ht,TIMESPEC2USEC(&current->wcet));
+ hard_task_def_group(ht,current->group);
+ hard_task_def_aperiodic(ht);
+ hard_task_def_usemath(ht);
+ return &ht;
+ }
+
+
+ if (current->local_scheduler == PAR_RM) {
+ static HARD_TASK_MODEL ht;
+
+ hard_task_default_model(ht);
+ hard_task_def_mit(ht,TIMESPEC2USEC(&current->deadline));
+ hard_task_def_wcet(ht,TIMESPEC2USEC(&current->wcet));
+ hard_task_def_ctrl_jet(ht);
+ hard_task_def_group(ht,current->group);
+ hard_task_def_usemath(ht);
+ return &ht;
+ }
+
+ return NULL;
+
+}
+
+TASK finish_task() {
+
+ #ifdef __NEW_TRACER__
+
+ FTrace_OSD_init_udp(1,"192.168.82.43","192.168.82.20");
+
+ FTrace_send_chunk(main_chunk, 0, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+
+ sys_end();
+
+ #else
+
+ sys_end();
+
+ #endif
+
+ return NULL;
+
+}
+
+void end_simulation() {
+
+ #ifdef __NEW_TRACER__
+
+ int i;
+ struct loader_task *l = loader_task_list;
+
+ NRT_TASK_MODEL nrt;
+
+ TRACER_LOGEVENT(FTrace_EVT_trace_stop,0,0);
+
+ FTrace_disable();
+
+ i = 0;
+ while (i < total_loader_task) {
+
+ group_kill(l->group);
+
+ i++;
+ l=&loader_task_list[i];
+
+ }
+
+ nrt_task_default_model(nrt);
+
+ task_activate(task_create("Finish",finish_task,&nrt,NULL));
+
+ #else
+
+ sys_end();
+
+ #endif
+
+}
+
+void set_simulation_time (struct timespec *total) {
+ struct timespec end_time;
+
+ ADDTIMESPEC(&zero_time,total,&end_time);
+ kern_event_post(&end_time,(void *)((void *)(end_simulation)),NULL);
+
+}
+
+/* Set the zero_time and post the first activation event */
+void start_simulation() {
+
+ int i;
+ struct loader_task *l = loader_task_list;
+ struct timespec end_time;
+ PI_mutexattr_t a;
+
+ PI_mutexattr_default(a);
+
+ i = 0;
+
+ #ifdef __NEW_TRACER__
+
+ main_chunk = FTrace_chunk_create(10000000, 1000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+
+ FTrace_actual_chunk_select(main_chunk);
+
+ FTrace_enable();
+
+ #endif
+
+ TRACER_LOGEVENT(FTrace_EVT_trace_start,0,0);
+
+ kern_gettime(&zero_time);
+
+ while (i < total_loader_task) {
+
+ if (l->muxstatus == 1) {
+ mutex_init(&mutex_table[l->resource],&a);
+ l->muxstatus = 2;
+ }
+
+ if (l->act_number > 0) {
+ ADDTIMESPEC(&zero_time, &l->act[0], &end_time);
+ l->act_current++;
+ kern_event_post(&end_time,(void *)((void *)(loader_task_activate)),l);
+ }
+
+ i++;
+ l=&loader_task_list[i];
+
+ }
+
+}
+
+/* Activate task and post the new activation event */
+void loader_task_activate(struct loader_task *l) {
+
+ struct timespec actual_time,end_time;
+
+ kern_gettime(&actual_time);
+ group_activate(l->group);
+
+ if (l->act_number > l->act_current) {
+
+ ADDTIMESPEC(&actual_time, &l->act[l->act_current], &end_time);
+
+ l->act_current++;
+ kern_event_post(&end_time,(void *)((void *)(loader_task_activate)),l);
+
+ }
+
+}
Index: rel_1_4/loader/shark/func.h
===================================================================
--- rel_1_4/loader/shark/func.h (nonexistent)
+++ rel_1_4/loader/shark/func.h (revision 1522)
@@ -0,0 +1,123 @@
+#ifndef __FUNC_H__
+#define __FUNC_H__
+
+#include "kernel/kern.h"
+#include "shark.h"
+
+#define OS_SHARK
+
+#define get_current_exec_task() exec_shadow
+/* Return the PID/pthread_t of calling task */
+
+#define generic_get_server_from_contract get_server_from_contract
+/* Return the server_id from the contract number used
+ * inside .fsf file to define contract parameters
+ *
+ * generic_get_server_from_contract(int contract_number) */
+
+#define generic_create_thread fsf_create_thread
+/* Create a task/thread inside a specific server.
+ * it's very similar to fsf_create_thread, but we need a parameter
+ * to set the local scheduler task and actually it's outside
+ * the framework
+ *
+ * generic_task_create(
+ * server number,
+ * pthread_t of created task (-1 if failed),
+ * pthread_attr_t,
+ * task_body,
+ * arg of the body (must be "(void *)current"),
+ * arg for real-time task specification)
+ */
+
+#define generic_calibrate_cycle calibrate_cycle
+/* Set the calibration parameter "cal_cycle"
+ * only if it's initialized to 0. The calibration routine
+ * calculates cal_cycle from CALIBRATION_DELTA.
+ * This step can also be performed outside the demo.
+ * Inside calibrate.h you can set the calibration parameters
+ * for calibration step performed outside.
+ *
+ * cal_cycle is the number of cycles that are needed to
+ * make CALIBRATION_DELTA number of iteration.
+ *
+ * kern_cli();
+ * kern_gettime(&start);
+ * for (i=0;i<CALIBRATION_DELTA;i++)
+ * __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ * "cpuid\n\t"
+ * :::"eax","ebx","ecx","edx");
+ * kern_gettime(&end);
+ * kern_sti();
+ *
+ * SUBTIMESPEC(&end,&start,&diff);
+ * cal_cycles = TIMESPEC2USEC(&diff);
+ *
+ */
+
+#define generic_set_next_activation set_next_activation
+/* Set the next activation time. It's like fsf_schedule_next_timed_job
+ * but it don't return nothing
+ */
+
+#define generic_set_simulation_time set_simulation_time
+/* Set the end time of simulation */
+
+#define generic_get_task_model get_task_model
+/* Return a pointer to the struct that contains the
+ * local shceduler parameter */
+
+#define generic_start_simulation start_simulation
+/* Start the simulation */
+
+#define generic_fsfinit() fsfinit()
+/* Create the fsf_server */
+
+#define generic_task_endcycle() task_endcycle()
+/* The job is finished */
+
+#define generic_end_simulation() sys_end()
+/* Exit from simulation */
+
+#define printf cprintf
+/* Printf standard function */
+
+/* Mutex */
+extern __inline__ void generic_lock_mutex(int res) {
+ extern mutex_t mutex_table[MAX_MUTEX];
+
+ mutex_lock(&mutex_table[res]);
+}
+
+extern __inline__ void generic_unlock_mutex(int res) {
+ extern mutex_t mutex_table[MAX_MUTEX];
+
+ mutex_unlock(&mutex_table[res]);
+}
+
+/* TASK RUNTIME FUNCTIONS */
+
+extern __inline__ void start_oneshot_task(void) {}
+extern __inline__ void end_oneshot_task(void) {}
+
+extern __inline__ void start_periodic_task(void) {}
+extern __inline__ void start_job_periodic_task(void) {
+ task_testcancel();
+}
+extern __inline__ void end_job_periodic_task(void) {
+ task_testcancel();
+}
+extern __inline__ void end_periodic_task(void) {}
+
+extern __inline__ void start_back_task(void) {}
+extern __inline__ void start_job_back_task(void) {
+ task_testcancel();
+}
+extern __inline__ void end_job_back_task(void) {
+ task_testcancel();
+}
+extern __inline__ void end_back_task(void) {}
+
+#endif
+
+
Index: rel_1_4/loader/shark/shark.h
===================================================================
--- rel_1_4/loader/shark/shark.h (nonexistent)
+++ rel_1_4/loader/shark/shark.h (revision 1522)
@@ -0,0 +1,19 @@
+#ifndef __SHARK_H__
+#define __SHARK_H__
+
+#include "nload.h"
+#include "lconst.h"
+
+#define MAX_MUTEX 20
+
+int calibrate_cycle();
+void start_simulation();
+void *get_task_model(struct loader_task *current);
+void set_simulation_time (struct timespec *total);
+void set_next_activation(struct timespec *next);
+void loader_task_activate(struct loader_task *l);
+int get_server_from_contract(int contract);
+
+void fsfinit();
+
+#endif
Index: rel_1_4/loader/shark/makefile.in
===================================================================
--- rel_1_4/loader/shark/makefile.in (nonexistent)
+++ rel_1_4/loader/shark/makefile.in (revision 1522)
@@ -0,0 +1,14 @@
+#
+# Shark dependecies
+#
+
+os_specific_dep: out/shark.done out/makefile
+
+
+out/shark.done:
+ cd out; cp -sf ../shark/*.c .
+ cd out; cp -sf ../shark/*.h .
+ touch out/shark.done
+
+out/makefile: shark/shark.mak
+ sed -e "s/TEST/$(TEST)/" shark/shark.mak > out/makefile
Index: rel_1_4/loader/loadfile/load.fsf
===================================================================
--- rel_1_4/loader/loadfile/load.fsf (nonexistent)
+++ rel_1_4/loader/loadfile/load.fsf (revision 1522)
@@ -0,0 +1,75 @@
+# CONTRACT SECTION
+#
+# CONTRACT NUMBER:CMIN:TMAX:CMAX:TMIN:WORKLOAD:DEADLINE:LOCAL SCHEDULER
+#
+# YOU WILL HAVE A SERVER FOR EACH SPECIFIED CONTRACT,
+# SO IN THE TASK SECTION YOU CAN SPECIFY THE "CONTRACT NUMBER"
+# INSTEAD OF THE SERVER NUMBER, WHICH IS CALCULATED INSIDE THE
+# LOADER
+#
+# ALL THE TIME PARAMETERS INSIDE THIS FILE ARE ALWAYS EXPRESSED AS
+# "[SECONDS][MICROSECONDS]" TO AVOID FLOATING POINT CALCULATIONS
+#
+# WORKLOAD
+# 0 BOUNDED
+# 1 INDETERMINATED
+#
+# LOCAL SCHEDULER
+# POSIX - DEFAULT FOR THE FRAMEWORK
+# EDF
+# RM
+#
+# TASK SECTION
+#
+# TASK TYPE:CONTRACT NUMBER:LOCAL SCHEDULER:NUMBER OF TASK:DEADLINE:WCET:TASK ACT TYPE (PAR1,PAR2,...):
+# :TASK EXEC TYPE (PAR1,PAR2,...):CRITICAL SESSION (PAR1,PAR2,PAR3,PAR4);
+#
+# TASK TYPE
+# OS - ONE_SHOT
+# CT - CYCLICAL_TASK
+# BT - BACKGROUND_TASK
+#
+# TASK EXEC TYPE
+# EXEC_CONST(TIME)
+# - CONSTANT EXEC TIME
+# EXEC_MEAN(MEAN, DELTA)
+# - VARIABLE EXEC TIME WITH CONSTANT DISTRIBUTION
+#
+# TASK ACTIVATION TIME
+# ACT_SINGLE(START_TIME)
+# ACT_PERIODIC(START_TIME, PERIOD)
+# ACT_MEAN(START_TIME, MEAN, DELTA)
+#
+# CRITICAL SESSION
+# CRIT(RES NUMBER, BLOCKING_TIME)
+# NO_CRIT
+#
+
+TOTAL_EXEC_TIME:[20][0];
+# SIMULATION TOTAL TIME
+
+CONTRACT SECTION
+
+[0]:[0][3000]:[0][10000]:[0][3000]:[0][10000]:[0]:[0][9000]:POSIX;
+[1]:[0][6000]:[0][30000]:[0][6000]:[0][30000]:[0]:[0][0]:POSIX;
+[2]:[0][3000]:[0][30000]:[0][3000]:[0][30000]:[0]:[0][0]:POSIX;
+[3]:[0][3000]:[0][20000]:[0][3000]:[0][20000]:[0]:[0][0]:POSIX;
+
+END
+
+TASK SECTION
+
+BT:[0]:POSIX:[1]:[0][0]:[0][0]:ACT_SINGLE([1][0]):
+:EXEC_CONST([0][25000]):NO_CRIT;
+
+BT:[1]:POSIX:[1]:[0][0]:[0][0]:ACT_SINGLE([2][0]):
+:EXEC_CONST([0][16000]):NO_CRIT;
+
+OS:[2]:POSIX:[1]:[0][0]:[0][0]:ACT_SINGLE([3][0]):
+:EXEC_CONST([1][0]):NO_CRIT;
+
+BT:[3]:POSIX:[5]:[0][0]:[0][0]:ACT_SINGLE([4][0]):
+:EXEC_CONST([0][10000]):NO_CRIT;
+
+END
+
Index: rel_1_4/loader/loadfile/loadxml.fsf2
===================================================================
--- rel_1_4/loader/loadfile/loadxml.fsf2 (nonexistent)
+++ rel_1_4/loader/loadfile/loadxml.fsf2 (revision 1522)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fsf_framework xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../generators/java/fsf-schema.xsd">
+
+<simulation>
+<time>20s 0u</time>
+</simulation>
+<contract>
+ <cmin>0s 3000u</cmin>
+ <tmax>0s 10000u</tmax>
+ <cmax>0s 3000u</cmax>
+ <tmin>0s 10000u</tmin>
+ <workload>0</workload>
+ <localscheduler type="POSIX">
+ <task_section type="BackTask">
+ <number>1</number>
+ <act_section>
+ <start_time>3s 0u</start_time>
+ </act_section>
+ <exec_section>
+ <exec_time>3s 0u</exec_time>
+ </exec_section>
+ </task_section>
+ <task_section type="OneShot">
+ <number>2</number>
+ <dline>0s 0u</dline>
+ <wcet>0s 0u</wcet>
+ <act_section>
+ <start_time>3s 0u</start_time>
+ </act_section>
+ <exec_section>
+ <exec_time>3s 0u</exec_time>
+ </exec_section>
+ </task_section>
+ </localscheduler>
+</contract>
+<contract>
+ <cmin>0s 3000u</cmin>
+ <tmax>0s 10000u</tmax>
+ <cmax>0s 3000u</cmax>
+ <tmin>0s 10000u</tmin>
+ <workload>0</workload>
+ <localscheduler type="EDF">
+ <task_section type="CyclicalTask">
+ <number>1</number>
+ <dline>1s 0u</dline>
+ <wcet>0s 100000u</wcet>
+ <act_section>
+ <start_time>3s 0u</start_time>
+ <period_time>1s 0u</period_time>
+ </act_section>
+ <exec_section>
+ <exec_time>0s 10000u</exec_time>
+ <delta_time>0s 10000u</delta_time>
+ </exec_section>
+ </task_section>
+ </localscheduler>
+</contract>
+
+</fsf_framework>
Index: rel_1_4/loader/common/nload.h
===================================================================
--- rel_1_4/loader/common/nload.h (nonexistent)
+++ rel_1_4/loader/common/nload.h (revision 1522)
@@ -0,0 +1,46 @@
+/* Generic Struct for loader task */
+#ifndef __NLOAD_H__
+#define __NLOAD_H__
+
+#include "func.h" //Constant definition for loader and linux parser
+
+struct loader_task {
+
+ char name[20]; //Task name
+ int task_type; //Tast type (OS,CT,BT)
+ int contract; //Contract number
+ int local_scheduler; //Local scheduler for the task
+ int number; //How many copies of this task
+ int group; //Group number
+
+ struct timespec deadline; //Task deadline
+ struct timespec wcet; //Task wcet
+
+ int act_number; //Number of activations precalcolated
+ int act_current; //Actual activation number
+
+ int resource;
+ int muxstatus;
+
+ struct timespec *act; //Activation list
+ struct timespec *exec; //Execution time list
+ struct timespec *block; //Blocking time
+
+};
+
+struct loader_contract {
+
+ int number; //Contract number
+ struct timespec cmin;
+ struct timespec tmax;
+ struct timespec cmax;
+ struct timespec tmin;
+ int workload;
+ struct timespec deadline;
+ int local_scheduler;
+ int server; //Server number linked to this contract
+
+};
+
+#endif
+
Index: rel_1_4/loader/common/nload.c
===================================================================
--- rel_1_4/loader/common/nload.c (nonexistent)
+++ rel_1_4/loader/common/nload.c (revision 1522)
@@ -0,0 +1,315 @@
+/* FSF Loader
+ *
+ * Load and run a specific set of tasks/contracts
+ *
+ * This is the system indipendent part
+ *
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ * Michael Timarchi <trimarchi@gandalf.sssup.it>
+ *
+ */
+
+#include "fsf_contract.h" //Framework main header
+#include "calibrate.h"
+#include "func.h" //Generic function definitions
+#include "lconst.h"
+
+/* Activate task output debug */
+#define TASK_OUTPUT
+
+int cal_cycles = CALIBRATION_RESULT; //Calibration const, it converts usec to cycles
+struct timespec zero_time; //Zero time of the simulation
+extern struct loader_task loader_task_list[]; //Loader task array
+extern int total_loader_task; //Loader task number
+
+/* OS: Oneshot Task:
+ begin
+ - execution
+ end
+*/
+void *oneshot_task(void *arg)
+{
+ long long i,exec_cycles = 0;
+ struct loader_task *l = (struct loader_task *)(arg);
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ char tmp[20];
+ #endif
+ #endif
+
+ start_oneshot_task();
+
+ /* to avoid problem if the task start inside the create function */
+ if (l->act_current == 0) l->act_current = 1;
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"[ONESHOT]");
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
+
+ /* Execution delay */
+ for (i=0;i<exec_cycles;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+
+ end_oneshot_task();
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"[--END--]");
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ return NULL;
+
+}
+
+/* CT: Cyclical Task:
+ begin
+ while (1) {
+ - execution
+ - end_cycle
+ }
+ end (never end)
+*/
+void *periodic_task(void *arg)
+{
+ long long i,exec_cycles = 0,block_cycles = 0;
+ int act = 0;
+ struct loader_task *l = (struct loader_task *)(arg);
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ char tmp[20];
+ #endif
+ #endif
+
+ start_periodic_task();
+
+ if (l->act_current == 0) l->act_current = 1;
+
+ while(1) {
+
+ start_job_periodic_task();
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"C[%06d]",act);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
+ block_cycles = (long long)(TIMESPEC2USEC(&l->block[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
+
+ /* Execution delay */
+ for (i=0;i<exec_cycles;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ if (l->muxstatus == 2) {
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"C[LOCK%02d]",l->resource);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, RED, tmp);
+ #endif
+ #endif
+
+ generic_lock_mutex(l->resource);
+ for (i=0;i<block_cycles;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ generic_unlock_mutex(l->resource);
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"C[FREE%02d]",l->resource);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ }
+
+ end_job_periodic_task();
+
+ generic_task_endcycle();
+
+ act++;
+
+ }
+
+ end_periodic_task();
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"[--END--]");
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ return NULL;
+
+}
+
+/* BT: Background Task:
+ begin
+ while (1) {
+ - execution
+ }
+ end (never end)
+*/
+void *back_task(void *arg)
+{
+ long long i,exec_cycles = 0,block_cycles = 0;
+ int act = 0;
+ struct loader_task *l = (struct loader_task *)(arg);
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ char tmp[20];
+ #endif
+ #endif
+
+ start_back_task();
+
+ if (l->act_current == 0) l->act_current = 1;
+
+ while(1) {
+
+ start_job_back_task();
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"B[%06d]",act);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ exec_cycles = (long long)(TIMESPEC2USEC(&l->exec[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
+ block_cycles = (long long)(TIMESPEC2USEC(&l->block[l->act_current-1])) * CALIBRATION_DELTA / cal_cycles;
+
+ /* Execution delay */
+ for (i=0;i<exec_cycles;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ if (l->muxstatus == 2) {
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"B[LOCK%02d]",l->resource);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, RED, tmp);
+ #endif
+ #endif
+
+ generic_lock_mutex(l->resource);
+ for (i=0;i<block_cycles;i++)
+ __asm__ __volatile__ ("xorl %%eax,%%eax\n\t"
+ "cpuid\n\t"
+ :::"eax","ebx","ecx","edx");
+ generic_unlock_mutex(l->resource);
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"C[FREE%02d]",l->resource);
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ }
+
+ end_job_back_task();
+
+ act++;
+
+ }
+
+ end_back_task();
+
+ #ifdef TASK_OUTPUT
+ #ifdef OS_SHARK
+ sprintf(tmp,"[--END--]");
+ printf_xy((get_current_exec_task() % 5) * 9 + 34,get_current_exec_task() / 5 + 5, GREEN, tmp);
+ #endif
+ #endif
+
+ return NULL;
+
+}
+
+/* Task create */
+/* this function create the task struct in memory */
+void loader_task_create()
+{
+
+ struct loader_task *current = loader_task_list;
+ int i=0, k=0;
+
+ while (k <total_loader_task) {
+ k++;
+
+ for (i=0; i < current->number; i++) {
+
+ pthread_t j;
+ int err = 0;
+
+ switch(current->task_type) {
+ case PAR_TASK_OS:
+ err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
+ oneshot_task,(void *)current,generic_get_task_model(current));
+ break;
+ case PAR_TASK_BT:
+ err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
+ back_task,(void *)current,generic_get_task_model(current));
+ break;
+ case PAR_TASK_CT:
+ err = generic_create_thread(generic_get_server_from_contract(current->contract),&j,NULL,
+ periodic_task,(void *)current,generic_get_task_model(current));
+ break;
+ }
+ if (err) {
+ printf("Error fsf task creating\n");
+ generic_end_simulation();
+ }
+
+ }
+
+ current = &loader_task_list[k];
+
+ }
+
+ printf("Created %d loader tasks\n",k);
+
+
+}
+
+/* Main Function */
+int start_environment()
+{
+
+ extern struct timespec total_time;
+
+ /* Calibrate the exec time */
+ generic_calibrate_cycle();
+
+ /* Create the servers usign defined contracts */
+ generic_fsfinit();
+
+ /* Create the tasks */
+ loader_task_create();
+
+ /* Start the simulation */
+ generic_start_simulation();
+
+ /* Set the simulation end time */
+ generic_set_simulation_time(&total_time);
+
+ return 0;
+
+}
Index: rel_1_4/loader/common/time.h
===================================================================
--- rel_1_4/loader/common/time.h (nonexistent)
+++ rel_1_4/loader/common/time.h (revision 1522)
@@ -0,0 +1,65 @@
+#ifndef __TIME_H__
+#define __TIME_H__
+
+#define TIMESPEC2NANOSEC(t) ((t)->tv_sec * 1000000000 + (t)->tv_nsec)
+#define TIMESPEC2USEC(t) ((t)->tv_sec * 1000000 + (t)->tv_nsec / 1000)
+#define NULL_TIMESPEC(t) ((t)->tv_sec = (t)->tv_nsec = 0)
+#define ADDNANO2TIMESPEC(n, t) ((t)->tv_nsec += (n), \
+ (t)->tv_sec += (t)->tv_nsec / 1000000000, \
+ (t)->tv_nsec %= 1000000000)
+
+#define SUBTIMESPEC(s1, s2, d) \
+ ((d)->tv_nsec = ((s1)->tv_nsec >= (s2)->tv_nsec) ? \
+ (((d)->tv_sec = (s1)->tv_sec - (s2)->tv_sec), \
+ (s1)->tv_nsec - (s2)->tv_nsec) \
+ : \
+ (((d)->tv_sec = (s1)->tv_sec - (s2)->tv_sec - 1), \
+ (1000000000 + (s1)->tv_nsec - (s2)->tv_nsec)))
+
+/*
+ * ...and these not!
+ */
+
+extern __inline__ void ADDTIMESPEC(const struct timespec *s1,
+ const struct timespec *s2,
+ struct timespec *d)
+{
+ d->tv_sec = s1->tv_sec + s2->tv_sec;
+ d->tv_nsec = s1->tv_nsec + s2->tv_nsec;
+
+ if (d->tv_nsec < 0) {
+ d->tv_sec--;
+ d->tv_nsec += 1000000000;
+ } else if (d->tv_nsec >= 1000000000) {
+ d->tv_sec++;
+ d->tv_nsec -= 1000000000;
+ }
+}
+
+
+#define ADDUSEC2TIMESPEC(m, t) ((t)->tv_nsec += (m%1000000)*1000, \
+ (t)->tv_sec += ((t)->tv_nsec / 1000000000) + (m/1000000), \
+ (t)->tv_nsec %= 1000000000)
+
+#define TIMESPEC_A_LT_B(a,b) \
+ ( \
+ ((a)->tv_sec < (b)->tv_sec) || \
+ ((a)->tv_sec == (b)->tv_sec && (a)->tv_nsec < (b)->tv_nsec) \
+ )
+
+#define TIMESPEC_A_GT_B(a,b) \
+ ( \
+ ((a)->tv_sec > (b)->tv_sec) || \
+ ((a)->tv_sec == (b)->tv_sec && (a)->tv_nsec > (b)->tv_nsec) \
+ )
+
+#define TIMESPEC_A_EQ_B(a,b) \
+ ((a)->tv_sec == (b)->tv_sec && (a)->tv_nsec == (b)->tv_nsec)
+
+#define TIMESPEC_A_NEQ_B(a,b) \
+ ((a)->tv_sec != (b)->tv_sec || (a)->tv_nsec != (b)->tv_nsec)
+
+#define TIMESPEC_ASSIGN(t1,t2) \
+ ((t1)->tv_sec = (t2)->tv_sec, (t1)->tv_nsec = (t2)->tv_nsec)
+
+#endif
Index: rel_1_4/loader/common/calibrate.h
===================================================================
--- rel_1_4/loader/common/calibrate.h (nonexistent)
+++ rel_1_4/loader/common/calibrate.h (revision 1522)
@@ -0,0 +1,8 @@
+
+/* Nunber of calibration iterations */
+#define CALIBRATION_DELTA 100000
+
+/* Usec of exec time for CALIBRATING_DELTA iterations
+ Set to 0 if you calibrate during loader execution */
+#define CALIBRATION_RESULT 0
+
Index: rel_1_4/loader/common/lconst.h
===================================================================
--- rel_1_4/loader/common/lconst.h (nonexistent)
+++ rel_1_4/loader/common/lconst.h (revision 1522)
@@ -0,0 +1,36 @@
+#define PAR_TOTAL_EXEC_TIME 0
+#define PAR_TIME 1
+#define PAR_ACT_TYPE 2
+#define PAR_TASK_NUMBER 3
+#define PAR_EXEC_TYPE 4
+#define PAR_TASK_TYPE 5
+#define PAR_NOTHING 6
+#define PAR_DEADLINE 7
+#define PAR_ERROR 8
+#define PAR_FOUND 9
+#define PAR_CRIT_SESSION 10
+#define PAR_END 11
+
+#define PAR_EXEC_CONST 12
+#define PAR_EXEC_MEAN 13
+
+#define PAR_CONTRACT_SECTION 14
+#define PAR_TASK_SECTION 15
+
+#define PAR_ACT_SINGLE 16
+#define PAR_ACT_PERIODIC 17
+#define PAR_ACT_MEAN 18
+
+#define PAR_TASK_OS 21
+#define PAR_TASK_CT 22
+#define PAR_TASK_BT 23
+
+#define PAR_NO_CRIT 26
+#define PAR_CRIT 27
+
+#define PAR_LOCAL_SCHEDULER 29
+#define PAR_POSIX 30
+#define PAR_EDF 31
+#define PAR_RM 32
+
+#define PAR_FSF_SERVER 33
Index: rel_1_4/loader/generators/lparser.c
===================================================================
--- rel_1_4/loader/generators/lparser.c (nonexistent)
+++ rel_1_4/loader/generators/lparser.c (revision 1522)
@@ -0,0 +1,479 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "lparser.h"
+#include "common/time.h"
+
+#define PARSER_DEBUG
+
+static int find_break(char **buf, int find_type, struct timespec *time, int *val)
+{
+
+ int i;
+ char str[20];
+
+ i = 0;
+ while (((char *)(*buf))[i] == ' ' || ((char *)(*buf))[i] == ':' ||
+ ((char *)(*buf))[i] == '\n' || ((char *)(*buf))[i] == '\r') i++;
+ *buf += i;
+
+ if (!strncmp(*buf,"END",3) && find_type == PAR_NOTHING) {
+ *buf += 3;
+ return PAR_END;
+ }
+
+ if (!strncmp(*buf,"CONTRACT SECTION",16) && find_type == PAR_NOTHING) {
+ *buf += 16;
+ return PAR_CONTRACT_SECTION;
+ }
+
+ if (!strncmp(*buf,"TASK SECTION",12) && find_type == PAR_NOTHING) {
+ *buf += 12;
+ return PAR_TASK_SECTION;
+ }
+
+ i = 0;
+ if (((char *)(*buf))[0] == '#' && find_type == PAR_NOTHING) {
+ while (((char *)(*buf))[i] != '\n' && ((char *)(*buf))[i] != '\r') i++;
+ *buf += i;
+ return PAR_FOUND;
+ }
+
+ switch (find_type) {
+
+ case PAR_NOTHING:
+ if (((char *)(*buf))[0] == ';' ||
+ ((char *)(*buf))[0] < 32) {
+ *buf += 1;
+ return PAR_FOUND;
+ }
+ break;
+
+ case PAR_TOTAL_EXEC_TIME:
+ if (!strncmp(*buf, "TOTAL_EXEC_TIME:",16)) {
+ *buf += 16;
+ return PAR_FOUND;
+ }
+ break;
+
+ case PAR_TIME:
+ if (((char *)(*buf))[0] != '[') return PAR_ERROR;
+ *buf += 1;
+ i = 0;
+ while (((char *)(*buf))[i] >= '0' && ((char *)(*buf))[i] <= '9') {
+ str[i] = ((char *)(*buf))[i];
+ i++;
+ }
+ if (((char *)(*buf))[i] != ']') return PAR_ERROR;
+ str[i] = 0;
+ time->tv_sec = atoi(str);
+ i += 2;
+ *buf += i;
+ i = 0;
+ while (((char *)(*buf))[i] >= '0' && ((char *)(*buf))[i] <= '9') {
+ str[i] = ((char *)(*buf))[i];
+ i++;
+ }
+ if (((char *)(*buf))[i] != ']') return PAR_ERROR;
+ str[i] = 0;
+ time->tv_nsec = atoi(str) * 1000;
+ i += 2;
+ *buf += i;
+ return PAR_FOUND;
+ break;
+
+ case PAR_TASK_TYPE:
+ if (!strncmp(*buf, "OS:",3)) {
+ *val = PAR_TASK_OS;
+ *buf += 3;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf, "CT:",3)) {
+ *val = PAR_TASK_CT;
+ *buf += 3;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf, "BT:",3)) {
+ *val = PAR_TASK_BT;
+ *buf += 3;
+ return PAR_FOUND;
+ }
+ break;
+
+ case PAR_TASK_NUMBER:
+ if (((char *)(*buf))[0] != '[') return PAR_ERROR;
+ *buf += 1;
+ i = 0;
+ while (((char *)(*buf))[i] >= '0' && ((char *)(*buf))[i] <= '9') {
+ str[i] = ((char *)(*buf))[i];
+ i++;
+ }
+ if (((char *)(*buf))[i] != ']') return PAR_ERROR;
+ str[i] = 0;
+ *val = atoi(str);
+ i += 2;
+ *buf += i;
+ return PAR_FOUND;
+ break;
+
+ case PAR_ACT_TYPE:
+ if (!strncmp(*buf,"ACT_SINGLE(",11)) {
+ *buf += 11;
+ *val = PAR_ACT_SINGLE;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"ACT_PERIODIC(",13)) {
+ *buf += 13;
+ *val = PAR_ACT_PERIODIC;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"ACT_MEAN(",9)) {
+ *buf += 9;
+ *val = PAR_ACT_MEAN;
+ return PAR_FOUND;
+ }
+ return PAR_ERROR;
+ break;
+
+ case PAR_LOCAL_SCHEDULER:
+ if (!strncmp(*buf,"POSIX",5)) {
+ *buf += 5;
+ *val = PAR_POSIX;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"EDF",3)) {
+ *buf += 3;
+ *val = PAR_EDF;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"RM",2)) {
+ *buf += 2;
+ *val = PAR_RM;
+ return PAR_FOUND;
+ }
+ return PAR_ERROR;
+ break;
+
+ case PAR_EXEC_TYPE:
+ if (!strncmp(*buf,"EXEC_CONST(",11)) {
+ *buf += 11;
+ *val = PAR_EXEC_CONST;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"EXEC_MEAN(",10)) {
+ *buf += 10;
+ *val = PAR_EXEC_MEAN;
+ return PAR_FOUND;
+ }
+ return PAR_ERROR;
+ break;
+
+ case PAR_CRIT_SESSION:
+ if (!strncmp(*buf,"NO_CRIT",7)) {
+ *buf += 7;
+ *val = PAR_NO_CRIT;
+ return PAR_FOUND;
+ }
+ if (!strncmp(*buf,"CRIT(",5)) {
+ *buf += 5;
+ *val = PAR_CRIT;
+ return PAR_FOUND;
+ }
+ return PAR_ERROR;
+ break;
+
+ }
+
+ return PAR_ERROR;
+
+}
+
+void par_error(int line_num)
+{
+
+ printf("\nParser error: line [%d]\n",line_num);
+ exit(1);
+
+}
+
+/* result:
+ * 0 -> nothing
+ * 1 -> total
+ * 2 -> new task-loader
+ * 3 -> end file
+ */
+int line_parser_task(char **pbuf, int line_num, struct loader_task **last)
+{
+ struct timespec time;
+ struct loader_task *ld = NULL;
+ int val, res;
+
+ res = find_break(pbuf, PAR_NOTHING, &time, &val);
+ if (res == PAR_FOUND) return 0;
+ if (res == PAR_END) return 3;
+
+ res = find_break(pbuf,PAR_TASK_TYPE, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("TASK TYPE = %d\n",val);
+ #endif
+
+ ld = malloc(sizeof(struct loader_task));
+ if (ld == NULL) par_error(line_num);
+
+ ld->next = NULL;
+ *last = ld;
+
+ ld->task_type = val;
+
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TASK_NUMBER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("TASK SERVER = %d\n",val);
+ #endif
+
+ ld->server = val;
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_LOCAL_SCHEDULER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("TASK LOCAL SCHEDULER = %d\n",val);
+ #endif
+
+ ld->local_scheduler = val;
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TASK_NUMBER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("TASK NUMBER = %d\n",val);
+ #endif
+
+ ld->number = val;
+
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("DEADLINE: [%ld][%ld]\n",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->deadline,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("WCET: [%ld][%ld]\n",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->wcet,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_ACT_TYPE, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("ACTIVATION TYPE: %d (",val);
+ #endif
+
+ ld->act_type = val;
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->act_par_1,&time);
+ } else par_error(line_num);
+
+ if (ld->act_type != PAR_ACT_SINGLE) {
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->act_par_2,&time);
+ } else par_error(line_num);
+ }
+
+ if (ld->act_type != PAR_ACT_SINGLE && ld->act_type != PAR_ACT_PERIODIC) {
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->act_par_3,&time);
+ } else par_error(line_num);
+ }
+
+ #ifdef PARSER_DEBUG
+ printf(")\n");
+ #endif
+
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_EXEC_TYPE, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("EXEC TYPE: %d (",val);
+ #endif
+ ld->exec_type = val;
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->exec_par_1,&time);
+ } else par_error(line_num);
+
+ if (ld->exec_type != PAR_EXEC_CONST) {
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->exec_par_2,&time);
+ } else par_error(line_num);
+ }
+
+ #ifdef PARSER_DEBUG
+ printf(")\n");
+ #endif
+
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_CRIT_SESSION, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("CRITITCAL SESSION: %d (",val);
+ #endif
+ ld->crit_type = val;
+ if (ld->crit_type == PAR_CRIT) {
+ res = find_break(pbuf,PAR_TASK_NUMBER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("[%d]",val);
+ #endif
+ ld->resource = val;
+ } else par_error(line_num);
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&ld->crit_par,&time);
+ } else par_error(line_num);
+ }
+
+ #ifdef PARSER_DEBUG
+ printf(")\n");
+ #endif
+
+ } else par_error(line_num);
+
+ return 2;
+
+}
+
+int line_parser_contract(char **pbuf, int line_num, struct timespec *total, struct loader_contract **last)
+{
+
+ struct timespec time;
+ struct loader_contract *lc = NULL;
+ int val, res;
+
+ res = find_break(pbuf, PAR_NOTHING, &time, &val);
+ if (res == PAR_FOUND) return 0;
+ if (res == PAR_END) return 3;
+
+ res = find_break(pbuf,PAR_TOTAL_EXEC_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ NULL_TIMESPEC(total);
+ res = find_break(pbuf, PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ TIMESPEC_ASSIGN(total,&time);
+ #ifdef PARSER_DEBUG
+ printf("TOTAL EXEC TIME SEC = %ld NSEC = %ld\n",total->tv_sec,total->tv_nsec);
+ #endif
+ return 1;
+ } else par_error(line_num);
+ }
+
+ res = find_break(pbuf,PAR_TASK_NUMBER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("CONTRACT [%d]",val);
+ #endif
+
+ lc = malloc(sizeof(struct loader_contract));
+ if (lc == NULL) par_error(line_num);
+
+ lc->next = NULL;
+ *last = lc;
+
+ lc->number = val;
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&lc->cmin,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&lc->tmax,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld]",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&lc->cmax,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld],",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&lc->tmin,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TASK_NUMBER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%d]\n",val);
+ #endif
+
+ lc->workload = val;
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_TIME, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf(",[%ld][%ld],",time.tv_sec,time.tv_nsec/1000);
+ #endif
+ TIMESPEC_ASSIGN(&lc->deadline,&time);
+ } else par_error(line_num);
+
+ res = find_break(pbuf,PAR_LOCAL_SCHEDULER, &time, &val);
+ if (res == PAR_FOUND) {
+ #ifdef PARSER_DEBUG
+ printf("LOCAL SCHEDULER = %d\n",val);
+ #endif
+
+ lc->local_scheduler = val;
+ } else par_error(line_num);
+
+ return 2;
+
+}
Index: rel_1_4/loader/generators/event_gen.c
===================================================================
--- rel_1_4/loader/generators/event_gen.c (nonexistent)
+++ rel_1_4/loader/generators/event_gen.c (revision 1522)
@@ -0,0 +1,474 @@
+/* Event Generator
+ *
+ * Giacomo Guidi
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lparser.h"
+#include "lread.h"
+#include "time.h"
+#include "common/time.h"
+
+#define LOADFILE_DIR "../loadfile/"
+
+#define EVENT_DEFINE "event.c"
+#define ACT_LIST "event.c"
+
+int write_struct(void)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"w");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, "\n#include \"func.h\"\n");
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_basic_par_start(void)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, "struct loader_task loader_task_list[] = {\n");
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_contract_start(void)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, "struct loader_contract loader_contract_list[] = {\n");
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_basic_par(struct loader_task *c)
+{
+
+ FILE *file_event_header;
+ int muxpres;
+ char muxtemp[30];
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ if (c->crit_type == PAR_CRIT) {
+ muxpres = 1;
+ sprintf(muxtemp,"block_%s",c->name);
+ } else {
+ muxpres = 0;
+ sprintf(muxtemp,"NULL");
+ }
+
+ fprintf(file_event_header, " {\"%s\",%d,%d,%d,%d,%d,{%d,%d},{%d,%d},%d,0,%d,%d,act_%s,exec_%s,%s},\n",
+ c->name,(int)c->task_type,(int)c->server,(int)c->local_scheduler,(int)c->number,(int)c->group,
+ (int)c->deadline.tv_sec, (int)c->deadline.tv_nsec,
+ (int)c->wcet.tv_sec, (int)c->wcet.tv_nsec,
+ (int)c->act_number, (int)c->resource, muxpres, c->name, c->name, muxtemp);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_contract(struct loader_contract *c)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, " {%d,{%d,%d},{%d,%d},{%d,%d},{%d,%d},%d,{%d,%d},%d,-1},\n",
+ (int)c->number,(int)c->cmin.tv_sec,(int)c->cmin.tv_nsec,
+ (int)c->tmax.tv_sec,(int)c->tmax.tv_nsec,
+ (int)c->cmax.tv_sec,(int)c->cmax.tv_nsec,
+ (int)c->tmin.tv_sec,(int)c->tmin.tv_nsec,
+ (int)c->workload,
+ (int)c->deadline.tv_sec,(int)c->deadline.tv_nsec,
+ (int)c->local_scheduler);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int close_loader_task(int total_task_number)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"};\n\n");
+
+ fprintf(file_event_header,"int total_loader_task = %d;\n\n",total_task_number);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int close_loader_contract(int total_contract_number)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"};\n\n");
+
+ fprintf(file_event_header,"int total_loader_contract = %d;\n\n",total_contract_number);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_simulation_time(struct timespec *total)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"struct timespec total_time = {%d,%d};\n\n",(int)total->tv_sec,(int)total->tv_nsec);
+
+ fclose(file_event_header);
+
+ return 0;
+
+
+}
+
+int write_single_act(struct timespec *t, struct loader_task *c)
+{
+
+ FILE *file_act_header;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ if (TIMESPEC_A_GT_B(t,&c->act_par_1)) {
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d}};\n\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+ c->act_number = 1;
+ } else {
+ fprintf(file_act_header,"struct timespec act_%s[] = {{0,0}};\n\n",c->name);
+ c->act_number = 0;
+ }
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_periodic_act(struct timespec *t, struct loader_task *c)
+{
+
+ FILE *file_act_header;
+ struct timespec tot_time;
+ int period;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d},\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+
+ c->act_number = 1;
+ TIMESPEC_ASSIGN(&tot_time,&c->act_par_1);
+ period = TIMESPEC2USEC(&c->act_par_2);
+ while (TIMESPEC_A_GT_B(t, &tot_time)) {
+ c->act_number++;
+ ADDUSEC2TIMESPEC(period,&tot_time);
+ fprintf(file_act_header," {%d,%d},\n",
+ (int)c->act_par_2.tv_sec,(int)c->act_par_2.tv_nsec);
+ }
+
+ fprintf(file_act_header," };\n\n");
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_mean_act(struct timespec *t,struct loader_task *c)
+{
+
+ FILE *file_act_header;
+ struct timespec tot_time;
+ int next_act;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d},\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+
+ c->act_number = 1;
+ TIMESPEC_ASSIGN(&tot_time,&c->act_par_1);
+ while (TIMESPEC_A_GT_B(t, &tot_time)) {
+ c->act_number++;
+ next_act = TIMESPEC2USEC(&c->act_par_2) + random() % TIMESPEC2USEC(&c->act_par_3) - TIMESPEC2USEC(&c->act_par_3) / 2;
+ ADDUSEC2TIMESPEC(next_act,&tot_time);
+ fprintf(file_act_header," {%d,%d},\n",
+ next_act / 1000000, next_act % 1000000 * 1000);
+ }
+
+ fprintf(file_act_header," };\n\n");
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_block_const(struct loader_task *c)
+{
+
+ FILE *file_block_header;
+ int i;
+
+ file_block_header = fopen(ACT_LIST,"a+");
+ if (file_block_header == NULL) return 1;
+
+ fprintf(file_block_header,"struct timespec block_%s[] = {{%d,%d},\n",c->name,
+ (int)c->crit_par.tv_sec,(int)c->crit_par.tv_nsec);
+
+ for (i=0; i< c->act_number-1; i++)
+ fprintf(file_block_header," {%d,%d},\n",
+ (int)c->crit_par.tv_sec,(int)c->crit_par.tv_nsec);
+
+ fprintf(file_block_header," };\n\n");
+
+ fclose(file_block_header);
+
+ return 0;
+
+}
+
+int write_exec_const(struct loader_task *c)
+{
+
+ FILE *file_exec_header;
+ int i;
+
+ file_exec_header = fopen(ACT_LIST,"a+");
+ if (file_exec_header == NULL) return 1;
+
+ fprintf(file_exec_header,"struct timespec exec_%s[] = {{%d,%d},\n",c->name,
+ (int)c->exec_par_1.tv_sec,(int)c->exec_par_1.tv_nsec);
+
+ for (i=0; i< c->act_number-1; i++)
+ fprintf(file_exec_header," {%d,%d},\n",
+ (int)c->exec_par_1.tv_sec,(int)c->exec_par_1.tv_nsec);
+
+ fprintf(file_exec_header," };\n\n");
+
+ fclose(file_exec_header);
+
+ return 0;
+
+}
+
+int write_exec_mean(struct loader_task *c)
+{
+
+ FILE *file_exec_header;
+ int exec_time_usec;
+ int i;
+
+ file_exec_header = fopen(ACT_LIST,"a+");
+ if (file_exec_header == NULL) return 1;
+
+ exec_time_usec = TIMESPEC2USEC(&c->exec_par_1)
+ + random() % TIMESPEC2USEC(&c->exec_par_2) - TIMESPEC2USEC(&c->exec_par_2) / 2;
+ fprintf(file_exec_header,"struct timespec exec_%s[] = {{%d,%d},\n",c->name,
+ exec_time_usec / 1000000, exec_time_usec % 1000000 * 1000);
+
+ for (i=0; i< c->act_number-1; i++) {
+ exec_time_usec = TIMESPEC2USEC(&c->exec_par_1)
+ + random() % TIMESPEC2USEC(&c->exec_par_2) - TIMESPEC2USEC(&c->exec_par_2) / 2;
+ fprintf(file_exec_header," {%d,%d},\n",
+ exec_time_usec / 1000000, exec_time_usec % 1000000 * 1000);
+ }
+
+ fprintf(file_exec_header," };\n\n");
+
+ fclose(file_exec_header);
+
+ return 0;
+
+}
+
+void *start;
+void *end;
+
+int main(int argc, char **argv) {
+
+ char loadfile[100];
+ struct timespec total_time;
+ struct loader_task *start_loader_task = NULL, *current_t;
+ struct loader_contract *start_loader_contract = NULL, *current_c;
+ int err,ldnum;
+ int total_task_number;
+ int total_contract_number;
+
+ printf("\nEvent Generator\n");
+
+ if (argc < 2) {
+ printf("Error: event_gen loadfile.fsf\n");
+ exit(1);
+ }
+
+ printf("Read loader file %s\n",argv[1]);
+
+ sprintf(loadfile,"%s%s",LOADFILE_DIR,argv[1]);
+ err = dos_preload(loadfile,100000,&start,&end);
+
+ if (err != 0) {
+ printf("Error: File not found\n");
+ exit(1);
+ }
+
+ printf("Parsing file\n");
+
+ line_reader(start, end, &total_time, &start_loader_task, &start_loader_contract);
+
+ srandom(time(NULL));
+
+ write_struct();
+
+ current_t = start_loader_task;
+ ldnum = 1;
+
+ while(current_t != NULL) {
+
+ sprintf(current_t->name,"ltask%d",ldnum);
+ current_t->group = ldnum;
+ ldnum++;
+
+ switch (current_t->act_type) {
+ case PAR_ACT_SINGLE:
+ err = write_single_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ case PAR_ACT_PERIODIC:
+ err = write_periodic_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ case PAR_ACT_MEAN:
+ err = write_mean_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ }
+
+ switch (current_t->exec_type) {
+ case PAR_EXEC_CONST:
+ err = write_exec_const(current_t);
+ if (err != 0) {
+ printf("Error writing exec header\n");
+ exit(1);
+ }
+ break;
+ case PAR_EXEC_MEAN:
+ err = write_exec_mean(current_t);
+ if (err != 0) {
+ printf("Error writing exec header\n");
+ exit(1);
+ }
+ break;
+ }
+
+ switch (current_t->crit_type) {
+ case PAR_CRIT:
+ err = write_block_const(current_t);
+ if (err != 0) {
+ printf("Error writing block header\n");
+ exit(1);
+ }
+ break;
+ }
+
+ current_t = current_t->next;
+
+ }
+
+ write_basic_par_start();
+
+ total_task_number = 0;
+ current_t = start_loader_task;
+ while(current_t != NULL) {
+
+ write_basic_par(current_t);
+
+ current_t = current_t->next;
+
+ total_task_number++;
+
+ }
+
+ close_loader_task(total_task_number);
+
+ write_contract_start();
+
+ total_contract_number = 0;
+ current_c = start_loader_contract;
+ while(current_c != NULL) {
+
+ write_contract(current_c);
+
+ current_c = current_c->next;
+
+ total_contract_number++;
+
+ }
+
+ close_loader_contract(total_contract_number);
+
+ write_simulation_time(&total_time);
+
+ return 0;
+
+}
Index: rel_1_4/loader/generators/lparser.h
===================================================================
--- rel_1_4/loader/generators/lparser.h (nonexistent)
+++ rel_1_4/loader/generators/lparser.h (revision 1522)
@@ -0,0 +1,58 @@
+#ifndef __LPARSER_H__
+#define __LPARSER_H__
+
+#include "common/lconst.h"
+
+struct loader_task {
+
+ char name[20];
+ int number;
+ int group;
+ int server;
+ int local_scheduler;
+ int task_type;
+
+ int act_type;
+ struct timespec act_par_1;
+ struct timespec act_par_2;
+ struct timespec act_par_3;
+ int exec_type;
+ struct timespec exec_par_1;
+ struct timespec exec_par_2;
+
+ struct timespec deadline;
+ struct timespec wcet;
+
+ int act_number;
+ struct timespec *act;
+ struct timespec *exec;
+
+ int crit_type;
+ int resource;
+ struct timespec crit_par;
+
+ struct loader_task *next;
+
+};
+
+struct loader_contract {
+
+ int number;
+ struct timespec cmin;
+ struct timespec tmax;
+ struct timespec cmax;
+ struct timespec tmin;
+ int workload;
+ struct timespec deadline;
+ int local_scheduler;
+
+ struct loader_contract *next;
+
+};
+
+int line_parser_contract(char **buf, int line_num, struct timespec *total_time, struct loader_contract **last);
+
+int line_parser_task(char **buf, int line_num, struct loader_task **last);
+
+#endif
+
Index: rel_1_4/loader/generators/java/Application.java
===================================================================
--- rel_1_4/loader/generators/java/Application.java (nonexistent)
+++ rel_1_4/loader/generators/java/Application.java (revision 1522)
@@ -0,0 +1,856 @@
+//package first_filter;
+
+import java.io.*;
+import java.net.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.jdom.*;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.XMLOutputter;
+import java.util.regex.*;
+import java.util.Random;
+
+/**
+ * <p>Title: First XML filter</p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: Retis Lab</p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class Application {
+ private int numElements = 0;
+ final String LOADFILE_DIR="../loadfile/";
+ final String EVENT_DEFINE="event.c";
+ final String ACT_LIST="event.c";
+ private int servernumber=0;
+ private timespec simulation_time=new timespec();
+ ArrayList local_scheduler=new ArrayList();
+ ArrayList Task_Section=new ArrayList();
+ private int task_group=0;
+ private int task_server=0;
+ private int current_scheduler=0;
+
+
+
+ //Construct the frame
+ public Application() {
+ try {
+ jbInit();
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+ //Component initialization
+ private void jbInit() throws Exception {
+ }
+
+ public void process (String url) throws MalformedURLException {
+ try {
+ // Use SAXBuilder
+ SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
+ builder.setFeature("http://apache.org/xml/features/validation/schema", true);
+
+
+ Document doc = builder.build(url);
+ Element root = doc.getRootElement();
+
+ try {
+ // Funzione per il salvataggio del file XML
+ OutputStream fout = new FileOutputStream(EVENT_DEFINE);
+ OutputStream bout = new BufferedOutputStream(fout);
+ OutputStreamWriter out = new OutputStreamWriter(bout, "8859_1");
+ out.write("\n#include \"func.h\"\n");
+
+ processElement (root,out);
+ out.flush();
+ out.close();
+ } catch (UnsupportedEncodingException e) {
+ System.out.println("Non sono supportati i caratteri latini");
+ System.exit(1);
+
+ } catch (IOException e){
+ System.out.println("Salvatagio fallito");
+ System.exit(1);
+ }
+
+
+
+ System.out.println ("Total Number of Elements Processed: "
+ +numElements);
+ } catch (JDOMException e) {
+ System.out.println ("JDOM Exception: "+e.getMessage());
+ } catch (java.io.IOException e) {
+ System.out.println ("File Exception: "+e.getMessage());
+
+ }
+}
+
+// Recursive Function to Process Elements
+// Prints the Element Name and keeps a running count
+// out total number of elements.
+private void processElement(Element element, OutputStreamWriter out) {
+ numElements++;
+ String elementName = element.getName();
+
+ System.out.println(elementName);
+ List servers = element.getChildren();
+ Iterator iterator = servers.iterator();
+ /* get simulation parameter */
+ Element SimulationInfo = (Element) iterator.next();
+
+ Pattern pattern = Pattern.compile("[us\\s]+");
+ try {
+ /*simulation time */
+
+ String[] stime = pattern.split(SimulationInfo.getChild("time").getText());
+ out.write("struct timespec total_time={" + stime[0] + "," + stime[1] +
+ "};\n\n");
+ simulation_time.tv_sec = Long.valueOf(stime[0].trim()).longValue();
+ simulation_time.tv_nsec = Long.valueOf(stime[1].trim()).longValue() /
+ 1000;
+//float f = Float.valueOf(s.trim()).floatValue();
+ /* server section start */
+ out.write("struct loader_contract loader_contract_list[] = {\n");
+ int total_server=0;
+ while (iterator.hasNext()) {
+ /* get server */
+ Element server = (Element) iterator.next();
+ process_server_section(server, out);
+ total_server++;
+ }
+
+ out.write("};\n\n");
+
+ out.write("int total_loader_contract="+total_server+";\n\n");
+ iterator = local_scheduler.iterator();
+ while (iterator.hasNext()) {
+ /* get server */
+ Element loc_sched = (Element) iterator.next();
+ process_scheduler_section(loc_sched, out);
+ task_server++;
+ }
+
+ iterator = Task_Section.iterator();
+ int total_task_section=0;
+ out.write("\nstruct loader_task loader_task_list[] = {\n");
+ while (iterator.hasNext()) {
+ /* get server */
+ task_class tsk_sec = (task_class) iterator.next();
+ out.write(" {\"" + tsk_sec.name + "\"," + tsk_sec.task_type + "," +
+ tsk_sec.contract +
+ "," + tsk_sec.localscheduler + "," + tsk_sec.number + ","
+ + tsk_sec.group + ",{" + tsk_sec.deadline.tv_sec +
+ "," +
+ tsk_sec.deadline.tv_nsec + "}," + "{" +
+ tsk_sec.wcet.tv_sec + "," +
+ tsk_sec.wcet.tv_nsec + "}," + tsk_sec.act_number +
+ ",0,act_" + tsk_sec.name +
+ ",exec_" + tsk_sec.name + "},\n");
+ total_task_section++;
+ }
+ out.write("};\n\n");
+ out.write("int total_loader_task="+total_task_section+";\n\n");
+
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("File Exception: " + e.getMessage());
+
+ }
+
+}
+
+void process_scheduler_section(Element e, OutputStreamWriter out) {
+ Attribute t;
+ t=e.getAttribute("type");
+
+ List localpars = e.getChildren();
+ Iterator iterator = localpars.iterator();
+ while (iterator.hasNext()) {
+ /* get task section */
+ Element loc_task = (Element) iterator.next();
+ process_task_section(loc_task, out, t);
+
+ }
+
+}
+
+void process_task_section(Element e, OutputStreamWriter out, Attribute loc) {
+ Attribute t;
+ int act;
+ act=1;
+ int task_type=0;
+ int localscheduler=0;
+ timespec time = new timespec();
+ Pattern pattern = Pattern.compile("[us\\s]+");
+ String scheduler=loc.getValue();
+ if (scheduler.equals("POSIX")) {
+ localscheduler=30;
+ }
+ else if (scheduler.equals("EDF")) {
+ localscheduler=31;
+ }
+ else if (scheduler.equals("RM")) {
+ localscheduler=32;
+ }
+
+ /* get task section */
+ t=e.getAttribute("type");
+
+ if (t.getValue().equals("BackTask")) {
+ process_back_task(e, out);
+ task_type=23;
+ } else if (t.getValue().equals("OneShot")) {
+ process_oneshot_task(e, out);
+ task_type=21;
+ } else if (t.getValue().equals("CyclicalTask")) {
+ task_type=22;
+ act=process_cyclical_task(e, out);
+ }
+
+ task_class section=new task_class();
+ section.deadline=new timespec();
+ section.wcet=new timespec();
+ section.name="task"+task_group;
+ section.contract=task_server;
+ section.group=task_group;
+ section.act_number=act;
+ section.task_type=task_type;
+ section.localscheduler=localscheduler;
+ section.number=Integer.valueOf(e.getChild("number").getText()).intValue();
+
+ Element dl = e.getChild("dline");
+ if (dl != null) {
+
+ String[] dline=pattern.split(dl.getText());
+ time.tv_sec = Long.valueOf(dline[0]).longValue();
+ time.tv_nsec = Long.valueOf(dline[1]).longValue() * 1000;
+
+ section.deadline.tv_sec=time.tv_sec;
+ section.deadline.tv_nsec=time.tv_nsec;
+
+ }
+
+
+ Element wc = e.getChild("wcet");
+ if (wc != null) {
+
+ String[] wcet=pattern.split(e.getChild("wcet").getText());
+ time.tv_sec = Long.valueOf(wcet[0]).longValue();
+ time.tv_nsec = Long.valueOf(wcet[1]).longValue() * 1000;
+
+ section.wcet.tv_sec=time.tv_sec;
+ section.wcet.tv_nsec=time.tv_nsec;
+
+ }
+
+ Task_Section.add(section);
+ task_group++;
+
+}
+
+void process_back_task(Element e, OutputStreamWriter out) {
+
+ Pattern pattern = Pattern.compile("[us\\s]+");
+
+ Element act_section=e.getChild("act_section");
+ String[] start_time=pattern.split(act_section.getChild("start_time").getText());
+ Element exec_section=e.getChild("exec_section");
+
+ String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText());
+ try {
+ out.write("struct timespec act_task"+task_group+"[]={{"+start_time[0]+","+start_time[1]+"},};\n\n");
+ out.write("struct timespec exec_task"+task_group+"[]={{"+exec_const[0]+","+exec_const[1]+"},};\n\n");
+
+ }
+ catch (java.io.IOException ex) {
+ System.out.println("File Exception: " + ex.getMessage());
+
+ }
+}
+void process_oneshot_task(Element e, OutputStreamWriter out) {
+ Pattern pattern = Pattern.compile("[us\\s]+");
+
+ Element act_section=e.getChild("act_section");
+ String[] start_time=pattern.split(act_section.getChild("start_time").getText());
+
+ Element exec_section=e.getChild("exec_section");
+ String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText());
+
+ try {
+ out.write("struct timespec act_task"+task_group+"[]={{"+start_time[0]+","+start_time[1]+"},};\n\n");
+ out.write("struct timespec exec_task"+task_group+"[]={{"+exec_const[0]+","+exec_const[1]+"},};\n\n");
+ }
+ catch (java.io.IOException ex) {
+ System.out.println("File Exception: " + ex.getMessage());
+ }
+}
+
+int process_cyclical_task(Element e, OutputStreamWriter out) {
+
+ int activated=1;
+ Pattern pattern = Pattern.compile("[us\\s]+");
+ Element act_section=e.getChild("act_section");
+ String[] start_time=pattern.split(act_section.getChild("start_time").getText());
+ String[] period=pattern.split(act_section.getChild("period_time").getText());
+ Element deltatime=act_section.getChild("delta_time");
+ String[] delta_time;
+
+ long act_delta=0;
+ timespec delta_act_ts = new timespec();
+
+ if (deltatime != null) {
+ delta_time = pattern.split(deltatime.getText());
+ delta_act_ts.tv_sec = Long.valueOf(delta_time[0]).longValue();
+ delta_act_ts.tv_nsec = Long.valueOf(delta_time[1]).longValue() * 1000;
+ act_delta = delta_act_ts.TIMESPEC2USEC();
+ }
+
+ Element exec_section=e.getChild("exec_section");
+ String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText());
+ Element execdelta=exec_section.getChild("delta_time");
+ String[] exec_delta;
+
+ long exec_delta_long = 0;
+ timespec exec_delta_ts = new timespec();
+
+ if (execdelta != null) {
+ exec_delta=pattern.split(execdelta.getText());
+ exec_delta_ts.tv_sec = Long.valueOf(exec_delta[0]).longValue();
+ exec_delta_ts.tv_nsec = Long.valueOf(exec_delta[1]).longValue() * 1000;
+ exec_delta_long = exec_delta_ts.TIMESPEC2USEC();
+ }
+
+ try {
+ out.write("struct timespec act_task"+task_group+"[]={{"+
+ start_time[0]+","+start_time[1]+"},\n");
+
+ timespec time = new timespec();
+ time.tv_sec = Long.valueOf(period[0]).longValue();
+ time.tv_nsec = Long.valueOf(period[1]).longValue() * 1000;
+
+ long usecperiod = time.TIMESPEC2USEC();
+ timespec nextact = new timespec();
+
+ time.tv_sec = Long.valueOf(start_time[0]).longValue();
+ time.tv_nsec = Long.valueOf(start_time[1]).longValue() * 1000;
+
+ Random rd = new Random();
+
+ while (simulation_time.TIMESPEC_A_GT_B(time)) {
+
+ nextact.tv_sec = Long.valueOf(period[0]).longValue();
+ nextact.tv_nsec = Long.valueOf(period[1]).longValue() * 1000;
+
+ if (act_delta != 0) {
+ nextact.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_VALUE) % act_delta - act_delta/2);
+ }
+
+ time.ADDUSEC2TIMESPEC(usecperiod);
+ out.write(" {"+nextact.tv_sec+","+nextact.tv_nsec/1000+"},\n");
+ activated++;
+ }
+ out.write("};\n");
+
+ out.write("struct timespec exec_task"+task_group+"[]={\n");
+
+ timespec nextexec = new timespec();
+
+ for (int i=0; i<activated; i++) {
+
+ nextexec.tv_sec = Long.valueOf(exec_const[0]).longValue();
+ nextexec.tv_nsec = Long.valueOf(exec_const[1]).longValue() * 1000;
+
+ if (exec_delta_long != 0) {
+ nextexec.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_VALUE) % exec_delta_long - exec_delta_long/2);
+ }
+
+ out.write(" {"+nextexec.tv_sec+","+nextexec.tv_nsec/1000+"},\n");
+
+ }
+ out.write("};\n");
+ }
+ catch (java.io.IOException ex) {
+ System.out.println("File Exception: " + ex.getMessage());
+ }
+
+ return activated;
+}
+
+void process_server_section(Element e, OutputStreamWriter out) {
+
+
+ List serverpars = e.getChildren();
+ Iterator iterator = serverpars.iterator();
+ Element serverpar = (Element) iterator.next();
+ String current_value;
+ current_value=serverpar.getText();
+ try {
+ out.write("{" + servernumber + ",{");
+ servernumber++;
+
+ Pattern pattern = Pattern.compile("[us\\s]+");
+ /* cmin */
+ String[] cmin = pattern.split(current_value);
+ out.write(cmin[0] + "," + Long.valueOf(cmin[1]).longValue()*1000+"},{");
+
+ /* tmax */
+ serverpar = (Element) iterator.next();
+ current_value=serverpar.getText();
+ String[] tmax = pattern.split(current_value);
+ out.write(tmax[0] + "," + Long.valueOf(tmax[1]).longValue()*1000+"},{");
+
+ /* cmax */
+ serverpar = (Element) iterator.next();
+ current_value=serverpar.getText();
+ String[] cmax = pattern.split(current_value);
+ out.write(cmax[0] + "," + Long.valueOf(cmax[1]).longValue()*1000+"},{");
+
+ /* tmin */
+ serverpar = (Element) iterator.next();
+ current_value=serverpar.getText();
+ String[] tmin = pattern.split(current_value);
+ out.write(tmin[0] + "," + Long.valueOf(tmin[1]).longValue()*1000+"},");
+
+ /*work load */
+ serverpar = (Element) iterator.next();
+ current_value=serverpar.getText();
+ out.write(current_value+",");
+
+ serverpar = (Element) iterator.next();
+ current_value=serverpar.getName();
+ Attribute loc_type=serverpar.getAttribute("type");
+ String scheduler=loc_type.getValue();
+ if (scheduler.equals("POSIX")) {
+ out.write("30");
+ }
+ else if (scheduler.equals("EDF")) {
+ out.write("31");
+ }
+ else if (scheduler.equals("RM")) {
+ out.write("32");
+ }
+ out.write(",-1},\n");
+ local_scheduler.add(servernumber-1,serverpar);
+
+ } catch (java.io.IOException ex) {
+ System.out.println ("File Exception: "+ex.getMessage());
+ }
+
+ /*
+ fprintf(file_event_header, " {%d,{%d,%d},{%d,%d},{%d,%d},{%d,%d},%d,%d,-1},\n",
+ (int)c->number,(int)c->cmin.tv_sec,(int)c->cmin.tv_nsec,
+ (int)c->tmax.tv_sec,(int)c->tmax.tv_nsec,
+ (int)c->cmax.tv_sec,(int)c->cmax.tv_nsec,
+ (int)c->tmin.tv_sec,(int)c->tmin.tv_nsec,
+ (int)c->workload,(int)c->local_scheduler);
+
+*/
+ //processElement (kid);
+ }
+
+
+
+public static void main(String[] args) throws Exception {
+ System.out.println("Parser Versione 1.0");
+ Application app = new Application();
+ if (args.length > 0)
+ app.process(args[0]);
+}
+
+/* Event Generator
+ *
+ * Giacomo Guidi
+ */
+
+
+
+
+
+/*
+int write_basic_par_start(void)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, "struct loader_task loader_task_list[] = {\n");
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+
+int write_basic_par(struct loader_task *c)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, " {\"%s\",%d,%d,%d,%d,%d,{%d,%d},{%d,%d},%d,0,act_%s,exec_%s},\n",
+ c->name,(int)c->task_type,(int)c->server,(int)c->local_scheduler,(int)c->number,(int)c->group,
+ (int)c->deadline.tv_sec, (int)c->deadline.tv_nsec,
+ (int)c->wcet.tv_sec, (int)c->wcet.tv_nsec,
+ (int)c->act_number, c->name, c->name);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_contract(struct loader_contract *c)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header, " {%d,{%d,%d},{%d,%d},{%d,%d},{%d,%d},%d,%d,-1},\n",
+ (int)c->number,(int)c->cmin.tv_sec,(int)c->cmin.tv_nsec,
+ (int)c->tmax.tv_sec,(int)c->tmax.tv_nsec,
+ (int)c->cmax.tv_sec,(int)c->cmax.tv_nsec,
+ (int)c->tmin.tv_sec,(int)c->tmin.tv_nsec,
+ (int)c->workload,(int)c->local_scheduler);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int close_loader_task(int total_task_number)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"};\n\n");
+
+ fprintf(file_event_header,"int total_loader_task = %d;\n\n",total_task_number);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int close_loader_contract(int total_contract_number)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"};\n\n");
+
+ fprintf(file_event_header,"int total_loader_contract = %d;\n\n",total_contract_number);
+
+ fclose(file_event_header);
+
+ return 0;
+
+}
+
+int write_simulation_time(struct timespec *total)
+{
+
+ FILE *file_event_header;
+
+ file_event_header = fopen(EVENT_DEFINE,"a+");
+ if (file_event_header == NULL) return 1;
+
+ fprintf(file_event_header,"struct timespec total_time = {%d,%d};\n\n",(int)total->tv_sec,(int)total->tv_nsec);
+
+ fclose(file_event_header);
+
+ return 0;
+
+
+}
+
+int write_single_act(struct timespec *t, struct loader_task *c)
+{
+
+ FILE *file_act_header;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ if (TIMESPEC_A_GT_B(t,&c->act_par_1)) {
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d}};\n\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+ c->act_number = 1;
+ } else {
+ fprintf(file_act_header,"struct timespec act_%s[] = {{0,0}};\n\n",c->name);
+ c->act_number = 0;
+ }
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_periodic_act(struct timespec *t, struct loader_task *c)
+{
+
+ FILE *file_act_header;
+ struct timespec tot_time;
+ int period;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d},\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+
+ c->act_number = 1;
+ TIMESPEC_ASSIGN(&tot_time,&c->act_par_1);
+ period = TIMESPEC2USEC(&c->act_par_2);
+ while (TIMESPEC_A_GT_B(t, &tot_time)) {
+ c->act_number++;
+ ADDUSEC2TIMESPEC(period,&tot_time);
+ fprintf(file_act_header," {%d,%d},\n",
+ (int)c->act_par_2.tv_sec,(int)c->act_par_2.tv_nsec);
+ }
+
+ fprintf(file_act_header," };\n\n");
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_mean_act(struct timespec *t,struct loader_task *c)
+{
+
+ FILE *file_act_header;
+ struct timespec tot_time;
+ int next_act;
+
+ file_act_header = fopen(ACT_LIST,"a+");
+ if (file_act_header == NULL) return 1;
+
+ fprintf(file_act_header,"struct timespec act_%s[] = {{%d,%d},\n",c->name,
+ (int)c->act_par_1.tv_sec,(int)c->act_par_1.tv_nsec);
+
+ c->act_number = 1;
+ TIMESPEC_ASSIGN(&tot_time,&c->act_par_1);
+ while (TIMESPEC_A_GT_B(t, &tot_time)) {
+ c->act_number++;
+ next_act = TIMESPEC2USEC(&c->act_par_2) + random() % TIMESPEC2USEC(&c->act_par_3) - TIMESPEC2USEC(&c->act_par_3) / 2;
+ ADDUSEC2TIMESPEC(next_act,&tot_time);
+ fprintf(file_act_header," {%d,%d},\n",
+ next_act / 1000000, next_act % 1000000 * 1000);
+ }
+
+ fprintf(file_act_header," };\n\n");
+
+ fclose(file_act_header);
+
+ return 0;
+
+}
+
+int write_exec_const(struct loader_task *c)
+{
+
+ FILE *file_exec_header;
+ int i;
+
+ file_exec_header = fopen(ACT_LIST,"a+");
+ if (file_exec_header == NULL) return 1;
+
+ fprintf(file_exec_header,"struct timespec exec_%s[] = {{%d,%d},\n",c->name,
+ (int)c->exec_par_1.tv_sec,(int)c->exec_par_1.tv_nsec);
+
+ for (i=0; i< c->act_number-1; i++)
+ fprintf(file_exec_header," {%d,%d},\n",
+ (int)c->exec_par_1.tv_sec,(int)c->exec_par_1.tv_nsec);
+
+ fprintf(file_exec_header," };\n\n");
+
+ fclose(file_exec_header);
+
+ return 0;
+
+}
+
+int write_exec_mean(struct loader_task *c)
+{
+
+ FILE *file_exec_header;
+ int exec_time_usec;
+ int i;
+
+ file_exec_header = fopen(ACT_LIST,"a+");
+ if (file_exec_header == NULL) return 1;
+
+ exec_time_usec = TIMESPEC2USEC(&c->exec_par_1)
+ + random() % TIMESPEC2USEC(&c->exec_par_2) - TIMESPEC2USEC(&c->exec_par_2) / 2;
+ fprintf(file_exec_header,"struct timespec exec_%s[] = {{%d,%d},\n",c->name,
+ exec_time_usec / 1000000, exec_time_usec % 1000000 * 1000);
+
+ for (i=0; i< c->act_number-1; i++) {
+ exec_time_usec = TIMESPEC2USEC(&c->exec_par_1)
+ + random() % TIMESPEC2USEC(&c->exec_par_2) - TIMESPEC2USEC(&c->exec_par_2) / 2;
+ fprintf(file_exec_header," {%d,%d},\n",
+ exec_time_usec / 1000000, exec_time_usec % 1000000 * 1000);
+ }
+
+ fprintf(file_exec_header," };\n\n");
+
+ fclose(file_exec_header);
+
+ return 0;
+
+}
+
+void *start;
+void *end;
+
+int main(int argc, char **argv) {
+
+ char loadfile[100];
+ struct timespec total_time;
+ struct loader_task *start_loader_task = NULL, *current_t;
+ struct loader_contract *start_loader_contract = NULL, *current_c;
+ int err,ldnum;
+ int total_task_number;
+ int total_contract_number;
+
+ printf("\nEvent Generator\n");
+
+ if (argc < 2) {
+ printf("Error: event_gen loadfile.fsf\n");
+ exit(1);
+ }
+
+ printf("Read loader file %s\n",argv[1]);
+
+ sprintf(loadfile,"%s%s",LOADFILE_DIR,argv[1]);
+ err = dos_preload(loadfile,100000,&start,&end);
+
+ if (err != 0) {
+ printf("Error: File not found\n");
+ exit(1);
+ }
+
+ printf("Parsing file\n");
+
+ line_reader(start, end, &total_time, &start_loader_task, &start_loader_contract);
+
+ srandom(time(NULL));
+
+ write_struct();
+
+ current_t = start_loader_task;
+ ldnum = 1;
+
+ while(current_t != NULL) {
+
+ sprintf(current_t->name,"ltask%d",ldnum);
+ current_t->group = ldnum;
+ ldnum++;
+
+ switch (current_t->act_type) {
+ case PAR_ACT_SINGLE:
+ err = write_single_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ case PAR_ACT_PERIODIC:
+ err = write_periodic_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ case PAR_ACT_MEAN:
+ err = write_mean_act(&total_time,current_t);
+ if (err != 0) {
+ printf("Error writing activation header\n");
+ exit(1);
+ }
+ break;
+ }
+
+ switch (current_t->exec_type) {
+ case PAR_EXEC_CONST:
+ err = write_exec_const(current_t);
+ if (err != 0) {
+ printf("Error writing exec header\n");
+ exit(1);
+ }
+ break;
+ case PAR_EXEC_MEAN:
+ err = write_exec_mean(current_t);
+ if (err != 0) {
+ printf("Error writing exec header\n");
+ exit(1);
+ }
+ break;
+ }
+
+ current_t = current_t->next;
+
+ }
+
+ write_basic_par_start();
+
+ total_task_number = 0;
+ current_t = start_loader_task;
+ while(current_t != NULL) {
+
+ write_basic_par(current_t);
+
+ current_t = current_t->next;
+
+ total_task_number++;
+
+ }
+
+ close_loader_task(total_task_number);
+
+ write_contract_start();
+
+ total_contract_number = 0;
+ current_c = start_loader_contract;
+ while(current_c != NULL) {
+
+ write_contract(current_c);
+
+ current_c = current_c->next;
+
+ total_contract_number++;
+
+ }
+
+ close_loader_contract(total_contract_number);
+
+ write_simulation_time(&total_time);
+
+ return 0;
+
+}
+
+*/
+}
Index: rel_1_4/loader/generators/java/java_gen
===================================================================
--- rel_1_4/loader/generators/java/java_gen (nonexistent)
+++ rel_1_4/loader/generators/java/java_gen (revision 1522)
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+#if $CLASSPATH; then
+#echo Please define the CLASSPATH environment variable!!!
+#echo ...something like: export CLASSPATH=/usr/java/j2sdk1.4.2/jre/lib
+#exit 1;
+#fi
+
+java -classpath ".:$CLASSPATH/jdom.jar:$CLASSPATH/xercesImpl.jar:$CLASSPATH/xml-apis.jar" Application $1
+
/rel_1_4/loader/generators/java/java_gen
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/loader/generators/java/makefile
===================================================================
--- rel_1_4/loader/generators/java/makefile (nonexistent)
+++ rel_1_4/loader/generators/java/makefile (revision 1522)
@@ -0,0 +1,17 @@
+ifdef CLASSPATH
+all:
+ javac Application.java timespec.java task_class.java -classpath "$(CLASSPATH)/jdom.jar"
+else
+all:
+ @echo ----------------------------------------------------------------
+ @echo Please define the CLASSPATH environment variable!!!
+ @echo ...something like: export CLASSPATH=/usr/java/j2sdk1.4.2/jre/lib
+ @echo ----------------------------------------------------------------
+ @exit 1
+endif
+
+
+clean:
+ rm -f *.class
+ rm -f event.c
+
Index: rel_1_4/loader/generators/java/fsf-schema.xsd
===================================================================
--- rel_1_4/loader/generators/java/fsf-schema.xsd (nonexistent)
+++ rel_1_4/loader/generators/java/fsf-schema.xsd (revision 1522)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+
+<xs:element name="fsf_framework">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="simulation"/>
+ <xs:element ref="contract" minOccurs='1' maxOccurs='unbounded'/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="simulation">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="time" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="contract">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="cmin" type="xs:string"/>
+ <xs:element name="tmax" type="xs:string" />
+ <xs:element name="cmax" type="xs:string" />
+ <xs:element name="tmin" type="xs:string" />
+ <xs:element name="workload" type="xs:string" />
+ <xs:element ref="localscheduler"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="localscheduler">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="task_section" minOccurs='1' maxOccurs='unbounded'/>
+ </xs:sequence>
+ <xs:attribute name="type" type="xs:string" use='required'/>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="task_section">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="number" type="xs:integer"/>
+ <xs:element name="dline" type="xs:string" minOccurs="0" />
+ <xs:element name="wcet" type="xs:string" minOccurs="0"/>
+ <xs:element ref="act_section"/>
+ <xs:element ref="exec_section"/>
+ </xs:sequence>
+ <xs:attribute name="type" type="xs:string" use='required'/>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="act_section">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="start_time" type="xs:string"/>
+ <xs:element name="period_time" type="xs:string" minOccurs="0" />
+ <xs:element name="delta_time" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="exec_section">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="exec_time" type="xs:string"/>
+ <xs:element name="delta_time" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+</xs:schema>
Index: rel_1_4/loader/generators/java/task_class.java
===================================================================
--- rel_1_4/loader/generators/java/task_class.java (nonexistent)
+++ rel_1_4/loader/generators/java/task_class.java (revision 1522)
@@ -0,0 +1,26 @@
+//package first_filter;
+
+/**
+ * <p>Title: First XML filter</p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: Retis Lab</p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class task_class {
+ String name;
+ int task_type;
+ int contract;
+ int localscheduler;
+ int number;
+ int group;
+ timespec deadline;
+ timespec wcet;
+ int act_number;
+
+ public task_class() {
+ }
+
+}
Index: rel_1_4/loader/generators/java/timespec.java
===================================================================
--- rel_1_4/loader/generators/java/timespec.java (nonexistent)
+++ rel_1_4/loader/generators/java/timespec.java (revision 1522)
@@ -0,0 +1,37 @@
+//package first_filter;
+
+/**
+ * <p>Title: First XML filter</p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2003</p>
+ * <p>Company: Retis Lab</p>
+ * @author not attributable
+ * @version 1.0
+ */
+
+public class timespec {
+ long tv_sec;
+ long tv_nsec;
+
+ public timespec() {
+ tv_sec=0;
+ tv_nsec=0;
+ }
+
+
+ void ADDUSEC2TIMESPEC(long t1) {
+ tv_nsec+=(t1%1000000)*1000;
+ tv_sec+=(tv_nsec / 1000000000)+(t1/1000000);
+ tv_nsec%=1000000000;
+ }
+ long TIMESPEC2USEC() {
+ return (tv_sec*1000000+tv_nsec/1000);
+ }
+ boolean TIMESPEC_A_GT_B(timespec t1) {
+
+ return (tv_sec>t1.tv_sec ||
+ (tv_sec==t1.tv_sec && tv_nsec>t1.tv_nsec));
+
+ }
+
+}
Index: rel_1_4/loader/generators/makefile
===================================================================
--- rel_1_4/loader/generators/makefile (nonexistent)
+++ rel_1_4/loader/generators/makefile (revision 1522)
@@ -0,0 +1,9 @@
+event_gen:
+ gcc -o lparser.o -c -Wall lparser.c -I. -I..
+ gcc -o lread.o -c -Wall lread.c -I. -I..
+ gcc -o event_gen -Wall lparser.o lread.o -I. -I.. -lc event_gen.c
+
+clean:
+ rm -f *.o
+ rm -f event_gen
+
Index: rel_1_4/loader/generators/lread.c
===================================================================
--- rel_1_4/loader/generators/lread.c (nonexistent)
+++ rel_1_4/loader/generators/lread.c (revision 1522)
@@ -0,0 +1,95 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "lparser.h"
+#include "common/time.h"
+
+int dos_preload(char *file_name, long max_size, void **start_file, void **end_file)
+{
+ FILE *file;
+ void *buf;
+ long rd;
+
+
+ file = fopen(file_name,"r");
+ if (file == NULL) return -1;
+
+ buf = malloc(max_size);
+ *start_file = buf;
+
+ while(((rd = fread(buf, 1, 2048, file)) == 2048) &&
+ ((buf - *start_file + rd) < (max_size-2048))) {
+ buf += rd;
+ }
+
+ *end_file = buf + rd;
+
+ fclose(file);
+ return(0);
+
+}
+
+int line_reader(void *start_file, void *end_file, struct timespec *total,
+ struct loader_task **start_loader_task, struct loader_contract **start_loader_contract)
+{
+
+ char *pbuf = start_file;
+ int res,line_num,total_loader_task,total_loader_contract;
+ struct loader_task *current_t = NULL;
+ struct loader_contract *current_c = NULL;
+
+ NULL_TIMESPEC(total);
+
+ line_num = 0;
+ total_loader_task = 0;
+ total_loader_contract = 0;
+
+ while ((void *)(pbuf) < end_file) {
+
+ line_num++;
+
+ if (*start_loader_contract == NULL)
+ res = line_parser_contract(&pbuf, line_num, total, &current_c);
+ else
+ res = line_parser_contract(&pbuf, line_num, total, &current_c->next);
+
+ if (res == 2) {
+ total_loader_contract++;
+ if (*start_loader_contract == NULL)
+ *start_loader_contract = current_c;
+ else
+ current_c = current_c->next;
+ }
+
+ if (res == 3) break;
+
+ }
+
+ while ((void *)(pbuf) < end_file) {
+
+ line_num++;
+
+ if (*start_loader_task == NULL)
+ res = line_parser_task(&pbuf, line_num, &current_t);
+ else
+ res = line_parser_task(&pbuf, line_num, &current_t->next);
+
+ if (res == 2) {
+ total_loader_task++;
+ if (*start_loader_task == NULL)
+ *start_loader_task = current_t;
+ else
+ current_t = current_t->next;
+ }
+
+ if (res == 3) break;
+
+ }
+
+ printf("Total decoded lines %d\n",line_num);
+ printf("Total loader contract %d\n",total_loader_contract);
+ printf("Total loader task %d\n",total_loader_task);
+ printf("Simulation time sec = %ld usec = %ld\n",total->tv_sec,total->tv_nsec/1000);
+
+ return 0;
+
+}
Index: rel_1_4/loader/generators/lread.h
===================================================================
--- rel_1_4/loader/generators/lread.h (nonexistent)
+++ rel_1_4/loader/generators/lread.h (revision 1522)
@@ -0,0 +1,11 @@
+#ifndef __LREAD_H__
+#define __LREAD_H__
+
+#include "lparser.h"
+
+int dos_preload(char *file_name, long max_size, void **start, void **end);
+
+int line_reader(void *start, void *end, struct timespec *total,
+ struct loader_task **start_loader_task, struct loader_contract **start_loader_contract);
+
+#endif
Index: rel_1_4/loader/makefile
===================================================================
--- rel_1_4/loader/makefile (nonexistent)
+++ rel_1_4/loader/makefile (revision 1522)
@@ -0,0 +1,88 @@
+#
+# help can be found in readme.txt
+#
+
+# -----------------------------------------------------
+#
+# OS dependent variables:
+
+# all the OS dependent variables and dependencies are under $(OS)/makefile.in
+
+# This makefile will execute the dependency os_specific_dep to "fill"
+# the out directory with OS-specific stuffs; Then, the makefile
+# generated in the out directory will be executed with $(TEST) as
+# parameter.
+
+ifndef $(BASE)
+BASE=../..
+endif
+
+include $(BASE)/config/config.mk
+
+ifeq ($(OS),MARTE)
+OSINCLUDE=marte/makefile.in
+endif
+
+ifeq ($(OS),SHARK)
+OSINCLUDE=shark/makefile.in
+endif
+
+# -----------------------------------------------------
+
+.PHONY: all clean help
+
+help:
+ifeq ($(CAT),cat)
+ cat readme.txt
+endif
+
+all: out out/common.done out/$(TEST).done os_specific_dep
+ make -C out $(TEST)
+
+clean:
+ make -C generators clean
+ make -C generators/java clean
+ rm -rf out
+
+out/common.done:
+ cd out; cp -sf ../common/*.c .
+ cd out; cp -sf ../common/*.h .
+ touch out/common.done
+
+# note: the out dependency is present only in the "all" dependency
+# (there is some strange case with the updating of the out date that I
+# do not know how to resolve...
+out:
+ mkdir out
+
+# -----------------------------------------------------
+#
+# Testcase generation
+
+# .FSF Format
+# -----------------------
+
+generators/event_gen:
+ make -C generators event_gen
+
+out/%.done: loadfile/%.fsf generators/event_gen
+ cd out; ../generators/event_gen ../loadfile/$(TEST).fsf
+ touch out/$*.done
+
+# .FSF2 Format
+# -----------------------
+
+generators/java/Applicazione.class:
+ make -C generators/java all
+
+out/%.done: loadfile/%.fsf2 generators/java/Applicazione.class
+ cd generators/java; ./java_gen ../../loadfile/$(TEST).fsf2; mv event.c ../../out/
+ touch out/$*.done
+
+# other file formats
+# -----------------------
+out/%.done: loadfile/%.otherformat
+ echo Other file formats that are not specified yet...
+ touch out/$*.done
+
+include $(OSINCLUDE)
Index: rel_1_4/loader/readme.txt
===================================================================
--- rel_1_4/loader/readme.txt (nonexistent)
+++ rel_1_4/loader/readme.txt (revision 1522)
@@ -0,0 +1,64 @@
+FIRST Framework Evaluation architecture
+---------------------------------------
+
+makefile usage:
+
+$ make OS=<osname> TEST=<demo> all
+
+where:
+
+<osname> is the name of the target operating system and it can be:
+
+- MARTE for MaRTE OS
+- SHARK for Shark
+
+<demo> is the name of the test case that have to be compiled. The
+specification of the test case is contained inside the loadfile
+directory.
+
+Valid extensions for the test case specification files are:
+.fsf - old script file
+.fsf2 - XML version
+(other extensions can be added easily)
+
+For example:
+
+make OS=SHARK TEST=load all
+
+these makefile will:
+- prepare the out directory with the common files
+- add the shark initialization files
+- parse a file loadfile/load.fsf (the file extension is guessed automatically
+ by the makefile) to produce source code inside out
+- compile the resulting shark application
+
+-------------------------------------------------------------------------
+
+XML Parser & Java setup
+
+To use the XML parser (file extension .fsf2) you need to properly setup
+your system, and you need toinstall the following libraries:
+
+- JDOM BETA 9 - http://www.jdom.org
+- XERCES (Parser SAX with XSD support) - http://xml.apache.org
+
+On my Linux system, after installing the Sun's j2re,
+I did the following commands (as root):
+
+# mkdir j
+# cd j
+# wget http://www.jdom.org/dist/binary/jdom-b9.tar.gz
+# tar xvzf jdom-b9.tar.gz
+# cp jdom-b9/build/jdom.jar /usr/java/j2re1.4.1_02/lib/
+# wget http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.6.0.tar.gz
+# tar xvzf Xerces-J-bin.2.6.0.tar.gz
+# cp ./xerces-2_6_0/xercesImpl.jar /usr/java/j2re1.4.1_02/lib/
+# cp ./xerces-2_6_0/xml-apis.jar /usr/java/j2re1.4.1_02/lib/
+
+then, as user, I did
+
+$ export CLASSPATH=/usr/java/j2re1.4.1_02/lib
+
+Enjoy,
+
+Michael, Giacomo, PJ
Index: rel_1_4/loader/marte/makefile.in
===================================================================
--- rel_1_4/loader/marte/makefile.in (nonexistent)
+++ rel_1_4/loader/marte/makefile.in (revision 1522)
@@ -0,0 +1,7 @@
+#
+# MaRTE OS dependecies
+#
+
+os_specific_dep:
+ echo MaRTE dependencies here
+
Index: rel_1_4/mesatex/initfile.c
===================================================================
--- rel_1_4/mesatex/initfile.c (nonexistent)
+++ rel_1_4/mesatex/initfile.c (revision 1522)
@@ -0,0 +1,202 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/hardcbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ HCBS_register_level(HCBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ /* Create the shutdown task. It will be activated at RUNLEVEL
+ SHUTDOWN */
+ set_shutdown_task();
+
+ /* Init the drivers */
+ device_drivers_init();
+
+ /* Set the shutdown task activation */
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ /* WARNING: the shutdown task is a background thread. It cannot execute
+ if the system is overloaded */
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+
Index: rel_1_4/mesatex/mesatex.c
===================================================================
--- rel_1_4/mesatex/mesatex.c (nonexistent)
+++ rel_1_4/mesatex/mesatex.c (revision 1522)
@@ -0,0 +1,372 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <GL/osmesa.h>
+#include <GL/glut.h>
+
+#include <math.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <kernel/log.h>
+#include <kernel/kern.h>
+
+#include <drivers/shark_fb26.h>
+#include <drivers/shark_keyb26.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+#define WIDTH 640
+#define HEIGHT 430
+#define BYTES_PP 2 //BytesPerPixel
+
+OSMesaContext ctx;
+
+static GLuint TexObj[2];
+static GLfloat Angle = 0.0f;
+static GLboolean UseObj = GL_FALSE;
+
+extern void *video_memory;
+
+#if defined(GL_VERSION_1_1) || defined(GL_VERSION_1_2)
+# define TEXTURE_OBJECT 1
+#elif defined(GL_EXT_texture_object)
+# define TEXTURE_OBJECT 1
+# define glBindTexture(A,B) glBindTextureEXT(A,B)
+# define glGenTextures(A,B) glGenTexturesEXT(A,B)
+# define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B)
+#endif
+
+unsigned char *rgb_565_buf = NULL; //RGB 16 bpp Buffer
+unsigned char *video_buf = NULL; //Video Buffer
+
+unsigned long int RGB565MEM = WIDTH * HEIGHT * BYTES_PP; // Total video mem
+
+unsigned long int PERIOD_REFRESH = 30000;
+unsigned long int PERIOD_DISEGNA = 30000;
+
+unsigned long int WCET_REFRESH, WCET_DISEGNA;
+
+TASK refesh(void);
+TASK disegna(void);
+
+PID refresh_PID, disegna_PID;
+
+static void draw( void )
+{
+ glDepthFunc(GL_EQUAL);
+ /* glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );*/
+ glClear( GL_COLOR_BUFFER_BIT );
+
+ glColor3f( 1.0, 1.0, 1.0 );
+
+ /* draw first polygon */
+ glPushMatrix();
+ glTranslatef( -1.0, 0.0, 0.0 );
+ glRotatef( Angle, 0.0, 0.0, 1.0 );
+ if (UseObj) {
+#ifdef TEXTURE_OBJECT
+ glBindTexture( GL_TEXTURE_2D, TexObj[0] );
+#endif
+ }
+ else {
+ glCallList( TexObj[0] );
+ }
+ glBegin( GL_POLYGON );
+ glTexCoord2f( 0.0, 0.0 ); glVertex2f( -1.0, -1.0 );
+ glTexCoord2f( 1.0, 0.0 ); glVertex2f( 1.0, -1.0 );
+ glTexCoord2f( 1.0, 1.0 ); glVertex2f( 1.0, 1.0 );
+ glTexCoord2f( 0.0, 1.0 ); glVertex2f( -1.0, 1.0 );
+ glEnd();
+ glPopMatrix();
+
+ /* draw second polygon */
+ glPushMatrix();
+ glTranslatef( 1.0, 0.0, 0.0 );
+ glRotatef( Angle-90.0, 0.0, 1.0, 0.0 );
+ if (UseObj) {
+#ifdef TEXTURE_OBJECT
+ glBindTexture( GL_TEXTURE_2D, TexObj[1] );
+#endif
+ }
+ else {
+ glCallList( TexObj[1] );
+ }
+ glBegin( GL_POLYGON );
+ glTexCoord2f( 0.0, 0.0 ); glVertex2f( -1.0, -1.0 );
+ glTexCoord2f( 1.0, 0.0 ); glVertex2f( 1.0, -1.0 );
+ glTexCoord2f( 1.0, 1.0 ); glVertex2f( 1.0, 1.0 );
+ glTexCoord2f( 0.0, 1.0 ); glVertex2f( -1.0, 1.0 );
+ glEnd();
+ glPopMatrix();
+
+}
+
+static void gl_init()
+{
+
+ static int twidth=8, theight=8;
+ static GLubyte tex1[] = {
+ 0, 0, 0, 1, 1, 1, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 0, 0 };
+
+ static GLubyte tex2[] = {
+ 0, 0, 0, 2, 2, 2, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0,
+ 0, 0, 2, 2, 2, 0, 0, 0 };
+
+ GLubyte tex[64][3];
+ GLint i, j;
+
+ //Create the OSMesa Context
+ ctx = OSMesaCreateContext(OSMESA_RGB_565, NULL);
+
+ //Make Current Context
+ OSMesaMakeCurrent(ctx, rgb_565_buf, GL_UNSIGNED_SHORT_5_6_5, WIDTH, HEIGHT);
+
+ UseObj = GL_TRUE;
+
+ glDisable( GL_DITHER );
+
+ /* Setup texturing */
+ glEnable( GL_TEXTURE_2D );
+ glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
+ glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST );
+
+ /* generate texture object IDs */
+ if (UseObj) {
+#ifdef TEXTURE_OBJECT
+ glGenTextures( 2, TexObj );
+#endif
+ }
+ else {
+ TexObj[0] = glGenLists(2);
+ TexObj[1] = TexObj[0]+1;
+ }
+
+ /* setup first texture object */
+ if (UseObj) {
+#ifdef TEXTURE_OBJECT
+ glBindTexture( GL_TEXTURE_2D, TexObj[0] );
+ assert(glIsTexture(TexObj[0]));
+#endif
+ }
+ else {
+ glNewList( TexObj[0], GL_COMPILE );
+ }
+ /* red on white */
+ for (i=0;i<theight;i++) {
+ for (j=0;j<twidth;j++) {
+ int p = i*twidth+j;
+ if (tex1[(theight-i-1)*twidth+j]) {
+ tex[p][0] = 255; tex[p][1] = 0; tex[p][2] = 0;
+ }
+ else {
+ tex[p][0] = 255; tex[p][1] = 255; tex[p][2] = 255;
+ }
+ }
+ }
+
+ glTexImage2D( GL_TEXTURE_2D, 0, 3, twidth, theight, 0,
+ GL_RGB, GL_UNSIGNED_BYTE, tex );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
+ if (!UseObj) {
+ glEndList();
+ }
+ /* end of texture object */
+
+ /* setup second texture object */
+ if (UseObj) {
+#ifdef TEXTURE_OBJECT
+ glBindTexture( GL_TEXTURE_2D, TexObj[1] );
+ assert(glIsTexture(TexObj[1]));
+#endif
+ assert(!glIsTexture(TexObj[1] + 999));
+ }
+ else {
+ glNewList( TexObj[1], GL_COMPILE );
+ }
+ /* green on blue */
+ for (i=0;i<theight;i++) {
+ for (j=0;j<twidth;j++) {
+ int p = i*twidth+j;
+ if (tex2[(theight-i-1)*twidth+j]) {
+ tex[p][0] = 0; tex[p][1] = 255; tex[p][2] = 0;
+ }
+ else {
+ tex[p][0] = 0; tex[p][1] = 0; tex[p][2] = 255;
+ }
+ }
+ }
+ glTexImage2D( GL_TEXTURE_2D, 0, 3, twidth, theight, 0,
+ GL_RGB, GL_UNSIGNED_BYTE, tex );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
+ if (!UseObj) {
+ glEndList();
+ }
+ /* end texture object */
+
+ glViewport(0, 0, (GLint)WIDTH, (GLint)HEIGHT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ /* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 );*/
+ glFrustum( -2.0, 2.0, 2.0, -2.0, 6.0, 20.0 );
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef( 0.0, 0.0, -8.0 );
+
+}
+
+void program_end(void *arg)
+{
+
+ OSMesaDestroyContext(ctx);
+ free(rgb_565_buf);
+
+ sys_end();
+
+}
+
+void program_key_end(KEY_EVT *k)
+{
+
+ sys_end();
+
+}
+
+TASK refresh(void)
+{
+
+ while(1) {
+
+ memcpy((video_buf+40*WIDTH*2), rgb_565_buf, RGB565MEM);
+ task_endcycle();
+
+ }
+
+ sys_end();
+
+}
+
+
+TASK disegna(void)
+{
+
+ char text[100];
+ TIME disegna_TIME, refresh_TIME;
+
+ while(1) {
+
+ jet_gettable(refresh_PID, &refresh_TIME, 1);
+ jet_gettable(disegna_PID, &disegna_TIME, 1);
+
+ Angle += 2.0;
+
+ draw();
+
+ sprintf(text,"Hard Task Refresh PER:%6d us EX:%6d us",(int)PERIOD_REFRESH,(int)refresh_TIME);
+ grx_text(text,10,5,rgb16(0,0,255),0);
+ sprintf(text,"Hard Task Draw PER:%6d us EX:%6d us",(int)PERIOD_DISEGNA,(int)disegna_TIME);
+ grx_text(text,10,15,rgb16(0,0,255),0);
+
+ task_endcycle();
+
+ }
+
+ sys_end();
+
+}
+
+int main (int argc, char *argv[])
+{
+
+ HARD_TASK_MODEL ht_refresh, ht_disegna;
+
+ clear();
+
+ WCET_REFRESH =((long int) PERIOD_REFRESH * (0.45));
+ WCET_DISEGNA =((long int) PERIOD_DISEGNA * (0.45));
+
+ hard_task_default_model(ht_refresh);
+ hard_task_def_wcet(ht_refresh,WCET_REFRESH);
+ hard_task_def_mit(ht_refresh,PERIOD_REFRESH);
+ hard_task_def_usemath(ht_refresh);
+ hard_task_def_group(ht_refresh,1);
+ hard_task_def_ctrl_jet(ht_refresh);
+
+ refresh_PID = task_create("refresh", refresh, &ht_refresh, NULL);
+ if (refresh_PID == -1) {
+ sys_end();
+ exit(4);
+ }
+
+ hard_task_default_model(ht_disegna);
+ hard_task_def_mit(ht_disegna,PERIOD_DISEGNA);
+ hard_task_def_wcet(ht_disegna,WCET_DISEGNA);
+ hard_task_def_group(ht_disegna,1);
+ hard_task_def_ctrl_jet(ht_disegna);
+ hard_task_def_usemath(ht_disegna);
+ hard_task_def_stack(ht_disegna,30000);
+
+ disegna_PID = task_create("disegna", disegna, &ht_disegna, NULL);
+ if (disegna_PID == -1) {
+ sys_end();
+ exit(4);
+ }
+
+ {
+ KEY_EVT k;
+ k.flag = ALTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,program_key_end,FALSE);
+ }
+
+ rgb_565_buf = malloc(RGB565MEM);
+
+ gl_init();
+
+ video_buf = (unsigned char *)video_memory;
+ //video_buf = (unsigned char *)malloc(640*480*2);
+
+ memset(rgb_565_buf, 0, RGB565MEM);
+
+ group_activate(1);
+
+ return 0;
+
+}
Index: rel_1_4/mesatex/makefile
===================================================================
--- rel_1_4/mesatex/makefile (nonexistent)
+++ rel_1_4/mesatex/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = mesatex
+
+include $(BASE)/config/example.mk
+
+mesatex:
+ make -f $(SUBMAKE) APP=mesatex INIT= OTHEROBJS="initfile.o" SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__ __OSMESA__"
+
Index: rel_1_4/mesatex/readme.txt
===================================================================
--- rel_1_4/mesatex/readme.txt (nonexistent)
+++ rel_1_4/mesatex/readme.txt (revision 1522)
@@ -0,0 +1,44 @@
+--------------------------------------
+MESA Demo (tex)
+
+by
+
+Giacomo Guidi <giacomo@gandalf.sssup.it>
+
+Last update 17/03/2003
+--------------------------------------
+
+This is a simple test demo for the MESA (5.0)
+libraries, the low level graphic drivers is
+the SVGA (from the SVGAlib)
+
+See drivers/svga/readme for supported cards
+
+--------------------------------------
+
+The demo is composed by:
+
+MAKEFILE The makefile used to compile the application
+README.TXT This file
+INITFILE.C The init file
+MESATEX.C The MESA Demo
+
+--------------------------------------
+
+- To specify your card change the line
+
+#define CARD <driver name>
+
+- The demo calls the grx and off-screen Mesa functions.
+The resolution must be 16 bitsperpixel (64K colors) and
+the graphic access mode must be linear.
+
+- There are two buffers
+
+ The video buffer (video_buf)
+ The virtual buffer (rgb_565_buf)
+
+ copy_videomem_16to16 links these buffers
+
+
+
Index: rel_1_4/makefile
===================================================================
--- rel_1_4/makefile (nonexistent)
+++ rel_1_4/makefile (revision 1522)
@@ -0,0 +1,28 @@
+include ../shark.cfg
+
+ifeq ($(findstring NEW,$(TRACER)) , NEW)
+TRC = newtrace
+endif
+
+dirs := $(filter-out CVS cvs makefile readme.txt newtrace README.TXT, $(wildcard *))
+dirs += $(TRC)
+p_all := $(addprefix prefixall_, $(dirs))
+p_install := $(addprefix prefixinstall_, $(dirs))
+p_clean := $(addprefix prefixclean_, $(dirs))
+pcleanall := $(addprefix prefixcleanall_, $(dirs))
+pdepend := $(addprefix prefixdepend_, $(dirs))
+
+
+.PHONY: all clean
+
+
+
+all: $(p_all)
+
+clean: $(p_clean)
+
+prefixall_%:
+ make -C $*
+
+prefixclean_%:
+ make -C $* clean
Index: rel_1_4/tftptest/initfile.c
===================================================================
--- rel_1_4/tftptest/initfile.c (nonexistent)
+++ rel_1_4/tftptest/initfile.c (revision 1522)
@@ -0,0 +1,161 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+ PCI26_init();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+void call_shutdown_task(void *arg) {
+
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/tftptest/makefile
===================================================================
--- rel_1_4/tftptest/makefile (nonexistent)
+++ rel_1_4/tftptest/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = tftptest
+
+include $(BASE)/config/example.mk
+
+tftptest:
+ make -f $(SUBMAKE) APP=tftptest INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __NET__ __INPUT__ __TFTP__"
+
Index: rel_1_4/tftptest/tftptest.c
===================================================================
--- rel_1_4/tftptest/tftptest.c (nonexistent)
+++ rel_1_4/tftptest/tftptest.c (revision 1522)
@@ -0,0 +1,226 @@
+#include <string.h>
+#include <kernel/func.h>
+#include <kernel/kern.h>
+
+#include <drivers/shark_keyb26.h>
+#include <drivers/udpip.h>
+
+#include "tftp.h"
+#include "endian.h"
+
+#include "modules/sem.h"
+
+#include <kernel/kern.h>
+#include <ll/i386/hw-instr.h>
+
+
+#define LOCAL_HOST_IP "192.168.0.134"
+#define REMOTE_HOST_IP "192.168.0.133"
+
+sem_t m1, m2;
+int handle, handle2;
+
+int prog = 0;
+
+/* This function is called when the user presses CTRL-C (stops the systems) */
+
+void esci(KEY_EVT *k)
+{
+ sys_shutdown_message("Exit from the program...\n");
+ sys_shutdown_message("Ctrl-C pressed!\n");
+ sys_end();
+}
+
+void augprog(KEY_EVT *k)
+{
+ prog = 1;
+}
+
+void keyb_start(void) {
+ KEY_EVT k;
+
+ k.flag = CNTL_BIT;
+ k.scan = KEY_C;
+ k.status = KEY_PRESSED;
+ k.ascii = 'C';
+ keyb_hook(k, esci,FALSE);
+ k.flag = CNTR_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k, esci,FALSE);
+
+ k.flag = CNTL_BIT;
+ k.scan = KEY_A;
+ k.ascii = 'A';
+ k.status = KEY_PRESSED;
+ keyb_hook(k, augprog,FALSE);
+ k.flag = CNTR_BIT;
+ k.scan = KEY_A;
+ k.ascii = 'a';
+ k.status = KEY_PRESSED;
+ keyb_hook(k, augprog,FALSE);
+}
+
+TASK test_upload(void *arg) {
+ int i;
+ char msg[200];
+ int bytes;
+
+ i = 0;
+ while (1) {
+
+// cprintf("uploader 1\n");
+
+ sprintf(msg, "tftptest says: i = %5d\n", i);
+ tftp_put(handle, msg, strlen(msg));
+
+// cprintf("uploader 2\n");
+
+ bytes = tftp_usedbuffer(handle);
+ /*!*/sprintf(msg, "buffer %d ", bytes);
+ /*!*/puts_xy(BASE_X, 18, WHITE, msg);
+
+// cprintf("uploader 3\n");
+ i++;
+
+ task_endcycle();
+ }
+ return(0);
+}
+
+TASK test_upload2(void *arg) {
+ int i;
+ char msg[200];
+ int bytes;
+
+ i = 0;
+ while (1) {
+
+ sprintf(msg, "tftptest says: i = %5d\n", i);
+ tftp_put(handle2, msg, strlen(msg));
+
+ bytes = tftp_usedbuffer(handle2);
+ /*!*/sprintf(msg, "buffer2 %d ", bytes);
+ /*!*/puts_xy(BASE_X, 38, WHITE, msg);
+ i++;
+
+ task_endcycle();
+ }
+ return(0);
+}
+
+void wait() {
+ char ch;
+ do {
+ ch = keyb_getch(NON_BLOCK);
+ } while(prog == 0);
+ prog = 0;
+}
+
+int main(void)
+{
+ int err;
+ HARD_TASK_MODEL hard_m;
+ PID p1, p2;
+
+ keyb_start();
+ cprintf("main: Keyboard handler started\n");
+
+ tftp_init();
+ cprintf("main: Tftp library initialized\n");
+
+ err = tftp_net_start(LOCAL_HOST_IP, REMOTE_HOST_IP, 1);
+ cprintf("netval = %d\n", err);
+ if (err == 1) {
+ cprintf("Net Init from %s to %s\n", LOCAL_HOST_IP, REMOTE_HOST_IP);
+ } else {
+ cprintf("Net Init Failed...\n");
+ sys_end();
+ return(err);
+ }
+
+ sem_init(&m1, 0, 1);
+
+
+ if ((handle = tftp_open("test.txt")) == -1) {
+ cprintf("No slots available. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+
+ cprintf("Ctrl-A to proceed *** Ctrl-C to stop\n");
+ wait();
+ clear();
+
+ cprintf("Handle = %d\n", handle);
+
+ if ((err = tftp_upload(handle, 4096, &m1)) != 0) {
+ cprintf("Error %d calling tftp_upload(). Program aborted...\n", err);
+ sys_end();
+ return(1);
+ }
+
+ /* First we set the sender's task properties...*/
+ hard_task_default_model(hard_m);
+ hard_task_def_wcet(hard_m, 10000);
+ hard_task_def_mit(hard_m, 300000);
+
+ if ((p1 = task_create("test_upload", test_upload, &hard_m, NULL)) == NIL) {
+ cprintf("Error creating test_upload task. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+ if (task_activate(p1) == -1) {
+ cprintf("Error activating test_upload task. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+
+
+ sem_init(&m2, 0, 1);
+
+ if ((handle2 = tftp_open("test2.txt")) == -1) {
+ cprintf("No second slot available. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+
+
+
+ cprintf("Handle2 = %d\n", handle2);
+
+ if ((err = tftp_upload(handle2, 4096, &m2)) != 0) {
+ cprintf("Error %d calling tftp_upload(). Program aborted...\n", err);
+ sys_end();
+ return(1);
+ }
+
+ /* First we set the sender's task properties...*/
+ hard_task_default_model(hard_m);
+ hard_task_def_wcet(hard_m, 10000);
+ hard_task_def_mit(hard_m, 300000);
+
+ if ((p2 = task_create("test_upload2", test_upload2, &hard_m, NULL)) == NIL) {
+ cprintf("Error creating test_upload2 task. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+ if (task_activate(p2) == -1) {
+ cprintf("Error activating test_upload2 task. Program aborted...\n");
+ sys_end();
+ return(1);
+ }
+
+
+ wait();
+
+ tftp_close(handle, TFTP_STOP_NOW);
+
+ tftp_close(handle2, TFTP_STOP_NOW);
+
+ cprintf("\nProgram terminated correctly.\n");
+ sys_end();
+
+ return(0);
+}
Index: rel_1_4/pse51/ptest1.c
===================================================================
--- rel_1_4/pse51/ptest1.c (nonexistent)
+++ rel_1_4/pse51/ptest1.c (revision 1522)
@@ -0,0 +1,207 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest1.c,v 1.3 2004-05-23 09:07:28 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.3 $
+ Last update: $Date: 2004-05-23 09:07:28 $
+ ------------
+
+ Posix test 1:
+
+ the main task create 4 tasks, J1, J2, J3, J4
+ at t = 0.2 sec. it raise a signal to J1
+ at t = 0.4 sec. it raise a signal to J2
+ at t = 0.8 sec. it kill J4
+
+ J1: it simply calls sigwait
+
+ J2: it simply calls sigwaitinfo
+
+ J3: it simply calls sigtimedwait with a timeout of 0.5 sec.
+
+ J4: it simply calls sigtimedwait with a -long- timeout
+ (J4 will be killed by main)
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <signal.h>
+
+#include <kernel/kern.h>
+
+void *J1(void *arg)
+{
+ int sig, err;
+ sigset_t mask;
+
+ cprintf("J1 starts and call sigwait(31)\n");
+
+ sigemptyset(&mask);
+ sigaddset(&mask,31);
+ err = sigwait(&mask,&sig);
+
+ cprintf("J1 exit from sigwait(), err=%d, sig=%d\n", err, sig);
+
+ return 0;
+}
+
+void *J2(void *arg)
+{
+ int err;
+ siginfo_t info;
+ sigset_t mask;
+
+ cprintf("J2 starts and call sigwaitinfo(30)\n");
+
+ sigemptyset(&mask);
+ sigaddset(&mask,30);
+ err = sigwaitinfo(&mask,&info);
+
+ cprintf("J2 exit from sigwaitinfo(), err=%d, signo=%d code=%d value=%d\n",
+ err, info.si_signo, info.si_code, info.si_value.sival_int);
+
+ return 0;
+}
+
+void *J3(void *arg)
+{
+ int err;
+ siginfo_t info;
+ sigset_t mask;
+ struct timespec t;
+
+ cprintf("J3 starts and call sigtimedwait(29)\n");
+
+ sigemptyset(&mask);
+ sigaddset(&mask,29);
+ t.tv_sec = 0;
+ t.tv_nsec = 300000000;
+ err = sigtimedwait(&mask,&info,&t);
+
+ cprintf("J3 exit from sigtimedwait(), err=%d, signo=%d code=%d value=%d\n",
+ err, info.si_signo, info.si_code, info.si_value.sival_int);
+
+ return 0;
+}
+
+void uscitaJ4(void *arg)
+{
+ cprintf("J4: AAAARRRRGGGHHH!!! killed by someone...\n");
+}
+
+void *J4(void *arg)
+{
+ int err;
+ siginfo_t info;
+ sigset_t mask;
+ struct timespec t;
+
+ cprintf("J4 starts and call sigtimedwait(28)\n");
+
+ sigemptyset(&mask);
+ sigaddset(&mask,28);
+ t.tv_sec = 10;
+ t.tv_nsec = 0;
+
+ pthread_cleanup_push(uscitaJ4,NULL);
+ err = sigtimedwait(&mask,&info,&t);
+ pthread_cleanup_pop(0);
+
+ cprintf("J4 exit from sigtimedwait(), err=%d, signo=%d code=%d value=%d\n",
+ err, info.si_signo, info.si_code, info.si_value.sival_int);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int err;
+ sigset_t mask;
+ pthread_t j1, j2, j3, j4;
+ union sigval value;
+
+
+ /* main blocks signals for all the tasks */
+ sigfillset(&mask);
+ pthread_sigmask(SIG_BLOCK, &mask, NULL);
+
+ cprintf("main: creating J1\n");
+ err = pthread_create(&j1, NULL, J1, NULL);
+ if (err) cprintf("Error creating J1\n");
+
+ cprintf("main: creating J2\n");
+ err = pthread_create(&j2, NULL, J2, NULL);
+ if (err) cprintf("Error creating J2\n");
+
+ cprintf("main: creating J3\n");
+ err = pthread_create(&j3, NULL, J3, NULL);
+ if (err) cprintf("Error creating J3\n");
+
+ cprintf("main: creating J4\n");
+ err = pthread_create(&j4, NULL, J4, NULL);
+ if (err) cprintf("Error creating J4\n");
+
+ cprintf("main: waiting 0.2 sec\n");
+ while (sys_gettime(NULL) < 200000);
+
+ cprintf("main: kill(31), then wait until t=0.4 sec \n");
+ kill(0, 31);
+
+ while (sys_gettime(NULL) < 400000);
+ cprintf("main: sigqueue(30), then wait until t=0.8 sec \n");
+ value.sival_int = 300;
+ sigqueue(0, 30, value);
+
+ while (sys_gettime(NULL) < 800000);
+ cprintf("main: kill(J4)\n");
+ pthread_cancel(j4);
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/pse51/ptest2.c
===================================================================
--- rel_1_4/pse51/ptest2.c (nonexistent)
+++ rel_1_4/pse51/ptest2.c (revision 1522)
@@ -0,0 +1,137 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest2.c,v 1.3 2004-05-23 09:07:28 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.3 $
+ Last update: $Date: 2004-05-23 09:07:28 $
+ ------------
+
+ Posix test 2:
+
+ pthread_once + thread_specific_data
+
+ the main task:
+ creates a key
+ creates 2 tasks, J1, J2
+ at t = 0.4 sec. it kills J1 and J2
+
+ J1 and J2 will set and check the thread specific data
+ and when the die, a destructor is called (twice, because the value
+ is not set to null...)
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+
+#include <kernel/kern.h>
+
+pthread_key_t prova_key;
+
+pthread_once_t once = PTHREAD_ONCE_INIT;
+
+void once_init()
+{
+ cprintf("ONCE: (pid=%d)\n", exec_shadow);
+}
+
+void destr_key(void *arg)
+{
+ cprintf("J (pid=%d) destructor called with value %d\n", exec_shadow,(int)arg);
+ pthread_setspecific(prova_key,(void *)((int)arg/100));
+}
+
+void print_test()
+{
+ int val;
+
+ val = (int)pthread_getspecific(prova_key);
+ cprintf("J (pid=%d) printtest value=%d\n", exec_shadow, val);
+}
+
+void *J(void *arg)
+{
+ pthread_once(&once, once_init);
+ cprintf("J (pid=%d) starts and call setspecific\n", exec_shadow);
+ pthread_setspecific(prova_key,arg);
+ print_test();
+ cprintf("J (pid=%d) exits\n", exec_shadow);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int err;
+ pthread_t j1, j2;
+
+ cprintf("main: creating prova_key\n");
+ pthread_key_create(&prova_key, destr_key);
+
+ cprintf("main: provakey =%d\n", prova_key);
+
+ cprintf("main: creating J1\n");
+ err = pthread_create(&j1, NULL, J, (void *)1414);
+ if (err) cprintf("Error creating J1\n");
+ cprintf("main: J1 has PID %d\n",j1);
+
+ cprintf("main: creating J2\n");
+ err = pthread_create(&j2, NULL, J, (void *)3141);
+ if (err) cprintf("Error creating J2\n");
+ cprintf("main: J2 has PID %d\n",j2);
+
+ cprintf("main: waiting 0.4 sec\n");
+ while (sys_gettime(NULL) < 400000);
+
+ cprintf("main: kill J1 and J2\n");
+ pthread_cancel(j1);
+ pthread_cancel(j2);
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/pse51/ptest3.c
===================================================================
--- rel_1_4/pse51/ptest3.c (nonexistent)
+++ rel_1_4/pse51/ptest3.c (revision 1522)
@@ -0,0 +1,214 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest3.c,v 1.3 2004-05-23 09:07:29 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.3 $
+ Last update: $Date: 2004-05-23 09:07:29 $
+ ------------
+
+ Posix test 3:
+
+ timers...
+ it creates two periodic timers that queues signals, a periodic timer
+ that create tasks and an one-shot timer.
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <time.h>
+
+#include <kernel/kern.h>
+
+int count25 = 0, count26 = 0;
+
+void signal_handler(int signo, siginfo_t *info, void *extra)
+{
+ switch (signo) {
+ case 25:
+ count25++;
+ break;
+ case 26:
+ count26++;
+ break;
+ }
+
+ cprintf("Signal %d code=%s value=%d task=%d count25=%d count26=%d time=%ldusec\n",
+ info->si_signo,
+ (info->si_code == SI_TIMER) ? "Timer" : "Other",
+ info->si_value.sival_int,
+ info->si_task,
+ count25,
+ count26,
+ sys_gettime(NULL));
+}
+
+void task_timer(union sigval value)
+{
+ cprintf("task_timer: value = %d, time = %ldusec\n",
+ value.sival_int, sys_gettime(NULL));
+}
+
+int main(int argc, char **argv)
+{
+ int err;
+ timer_t timer1, timer2, timer3;
+ struct itimerspec timeout1, timeout2, timeout3, nulltimeout;
+ struct sigaction sig_act;
+ struct sigevent ev25, ev26, evtask;
+ pthread_attr_t task_attr;
+ struct sched_param task_param;
+
+ sig_act.sa_sigaction = (void *) signal_handler;
+ sig_act.sa_flags = SA_SIGINFO;
+ sigemptyset(&sig_act.sa_mask);
+
+ sigaction(25, &sig_act, NULL);
+ sigaction(26, &sig_act, NULL);
+
+ // set ev25, ev26, evtask
+ ev25.sigev_notify = SIGEV_SIGNAL;
+ ev25.sigev_signo = 25;
+ ev25.sigev_value.sival_int = 555;
+
+ ev26.sigev_notify = SIGEV_SIGNAL;
+ ev26.sigev_signo = 26;
+ ev26.sigev_value.sival_int = 666;
+
+ evtask.sigev_notify = SIGEV_THREAD;
+ evtask.sigev_value.sival_int = 777;
+ evtask.sigev_notify_function = task_timer;
+ evtask.sigev_notify_attributes = &task_attr;
+
+ pthread_attr_init(&task_attr);
+ pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED);
+ pthread_attr_setschedpolicy(&task_attr, SCHED_FIFO);
+ task_param.sched_priority = 10;
+ pthread_attr_setschedparam(&task_attr, &task_param);
+
+ // set timeout1, timeout2, nulltimeout
+ timeout1.it_interval.tv_sec = 0;
+ timeout1.it_interval.tv_nsec = 500000000;
+ timeout1.it_value.tv_sec = 3;
+ timeout1.it_value.tv_nsec = 0;
+
+ timeout2.it_interval.tv_sec = 0;
+ timeout2.it_interval.tv_nsec = 200000000;
+ timeout2.it_value.tv_sec = 7;
+ timeout2.it_value.tv_nsec = 0;
+
+ timeout3.it_interval.tv_sec = 0;
+ timeout3.it_interval.tv_nsec = 300000000;
+ timeout3.it_value.tv_sec = 5;
+ timeout3.it_value.tv_nsec = 0;
+
+ NULL_TIMESPEC(&nulltimeout.it_value);
+ NULL_TIMESPEC(&nulltimeout.it_interval);
+
+ // create the timers
+ err = timer_create(CLOCK_REALTIME, &ev25, &timer1);
+ if (err == -1) { cprintf("main: unable to create timer 1\n"); }
+
+ err = timer_create(CLOCK_REALTIME, &ev26, &timer2);
+ if (err == -1) { cprintf("main: unable to create timer 2\n"); }
+
+ err = timer_create(CLOCK_REALTIME, &evtask, &timer3);
+ if (err == -1) { cprintf("main: unable to create timer 3\n"); }
+
+ // arm the timers
+ err = timer_settime(timer1, TIMER_ABSTIME, &timeout1, NULL);
+ if (err == -1) { cprintf("main: unable to set timer 1\n"); }
+
+ err = timer_settime(timer2, 0, &timeout2, NULL);
+ if (err == -1) { cprintf("main: unable to set timer 2\n"); }
+
+ err = timer_settime(timer3, TIMER_ABSTIME, &timeout3, NULL);
+ if (err == -1) { cprintf("main: unable to set timer 3\n"); }
+
+ cprintf("main: waiting signals...\n");
+ while (sys_gettime(NULL) < 8500000) {
+ //kern_deliver_pending_signals();
+ }
+
+ cprintf("main: disarm the timer2\n");
+ err = timer_settime(timer2, 0, &nulltimeout, &timeout2);
+ if (err == -1) { cprintf("main: unable to disarm timer 2\n"); }
+
+ cprintf("main: timer2 disarmed, itvalue=%ld.%ld\n",
+ timeout2.it_value.tv_sec,timeout2.it_value.tv_nsec/1000);
+
+ while (sys_gettime(NULL) < 10000000) {
+ //kern_deliver_pending_signals();
+ }
+
+ cprintf("main: disarm the timer1\n");
+ err = timer_settime(timer1, TIMER_ABSTIME, &nulltimeout, &timeout1);
+ if (err == -1) { cprintf("main: unable to disarm timer 1\n"); }
+
+ cprintf("main: timer1 disarmed, itvalue=%ld.%ld\n",
+ timeout1.it_value.tv_sec,timeout1.it_value.tv_nsec/1000);
+
+ while (sys_gettime(NULL) < 12000000) {
+ //kern_deliver_pending_signals();
+ }
+
+ cprintf("main: arm timer1\n");
+ timeout1.it_interval.tv_sec = 0;
+ timeout1.it_interval.tv_nsec = 0;
+ timeout1.it_value.tv_sec = 13;
+ timeout1.it_value.tv_nsec = 0;
+ err = timer_settime(timer1, TIMER_ABSTIME, &timeout1, NULL);
+ if (err == -1) { cprintf("main: unable to arm timer 1\n"); }
+
+ while (sys_gettime(NULL) < 14000000) {
+ //kern_deliver_pending_signals();
+ }
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/pse51/ptest4.c
===================================================================
--- rel_1_4/pse51/ptest4.c (nonexistent)
+++ rel_1_4/pse51/ptest4.c (revision 1522)
@@ -0,0 +1,138 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest4.c,v 1.3 2004-05-23 09:07:29 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.3 $
+ Last update: $Date: 2004-05-23 09:07:29 $
+ ------------
+
+ Posix test 4:
+
+ the main task create 3 tasks, J1, J2, J3
+ at t = 1 sec. it raise a signal to J1
+ at t = 2 sec. it kills J2
+
+ J1,J2,J3: it simply calls nanosleep
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <signal.h>
+#include <time.h>
+
+#include <kernel/kern.h>
+
+void uscitaJ(void *arg)
+{
+ cprintf("J: (pid=%d) AAAARRRRGGGHHH!!! killed by someone...\n", exec_shadow);
+}
+
+void *J(void *arg)
+{
+ struct timespec t1, t2;
+ int err;
+
+ cprintf("J (pid=%d) starts and call nanosleep\n",exec_shadow);
+
+ t1.tv_sec = 3;
+ t1.tv_nsec = 0;
+ NULL_TIMESPEC(&t2);
+ pthread_cleanup_push(uscitaJ,NULL);
+ err = nanosleep(&t1, &t2);
+ pthread_cleanup_pop(0);
+
+ cprintf("J (pid=%d) ending, nanosleep returns errno=%d, t2=%ld.%ld\n",
+ exec_shadow, err, t2.tv_sec, t2.tv_nsec/1000);
+
+ return 0;
+}
+
+void signal_handler(int signo, siginfo_t *info, void *extra)
+{
+ cprintf("SIGNAL HANDLER: pid=%d\n",exec_shadow);
+}
+
+
+int main(int argc, char **argv)
+{
+ int err;
+ pthread_t j1, j2, j3;
+ struct sigaction sig_act;
+
+ sig_act.sa_sigaction = (void *) signal_handler;
+ sig_act.sa_flags = SA_SIGINFO;
+ sigemptyset(&sig_act.sa_mask);
+
+ sigaction(31, &sig_act, NULL);
+
+ cprintf("main: creating J1\n");
+ err = pthread_create(&j1, NULL, J, NULL);
+ if (err) cprintf("Error creating J1\n");
+
+ cprintf("main: creating J2\n");
+ err = pthread_create(&j2, NULL, J, NULL);
+ if (err) cprintf("Error creating J2\n");
+
+ cprintf("main: creating J3\n");
+ err = pthread_create(&j3, NULL, J, NULL);
+ if (err) cprintf("Error creating J3\n");
+
+ cprintf("main: waiting 1 sec\n");
+ while (sys_gettime(NULL) < 1000000);
+
+ cprintf("main: pthread_kill on j1, then wait until t=2 sec \n");
+ pthread_kill(j1, 31);
+
+ while (sys_gettime(NULL) < 2000000);
+ cprintf("main: pthread_cancel(J2)\n");
+ pthread_cancel(j2);
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/pse51/makefile
===================================================================
--- rel_1_4/pse51/makefile (nonexistent)
+++ rel_1_4/pse51/makefile (revision 1522)
@@ -0,0 +1,26 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS+= ptest1 ptest2 ptest3 ptest4 ptest5 ptest6
+
+include $(BASE)/config/example.mk
+
+ptest1:
+ make -f $(SUBMAKE) APP=ptest1 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+ptest2:
+ make -f $(SUBMAKE) APP=ptest2 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+ptest3:
+ make -f $(SUBMAKE) APP=ptest3 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+ptest4:
+ make -f $(SUBMAKE) APP=ptest4 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+ptest5:
+ make -f $(SUBMAKE) APP=ptest5 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+ptest6:
+ make -f $(SUBMAKE) APP=ptest6 INIT= OTHEROBJS="pinit.o" SHARKOPT=
+
Index: rel_1_4/pse51/pinit.c
===================================================================
--- rel_1_4/pse51/pinit.c (nonexistent)
+++ rel_1_4/pse51/pinit.c (revision 1522)
@@ -0,0 +1,104 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: pinit.c,v 1.3 2004-05-23 09:05:50 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.3 $
+ Last update: $Date: 2004-05-23 09:05:50 $
+ ------------
+
+ This is a minimal initialization file for the PSE51 profile.
+
+ It initializes the POSIX scheduler, the Hartik Ports and the Keyboard driver.
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+
+
+#include "kernel/kern.h"
+#include "modules/posix.h"
+#include "modules/dummy.h"
+
+#include "modules/pi.h"
+#include "modules/pc.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include "pthread.h"
+#include "time.h"
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ POSIX_register_level(RRTICK, POSIX_MAIN_YES, mb, 32);
+ dummy_register_level();
+
+ PI_register_module();
+ PC_register_module();
+
+ SEM_register_module();
+
+ /* for the Pthread library */
+ PTHREAD_register_module(0, 0, 1);
+
+ /* for the real time clock extensions */
+ TIMER_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/pse51/ptest5.c
===================================================================
--- rel_1_4/pse51/ptest5.c (nonexistent)
+++ rel_1_4/pse51/ptest5.c (revision 1522)
@@ -0,0 +1,93 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest5.c,v 1.2 2004-05-23 09:05:51 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.2 $
+ Last update: $Date: 2004-05-23 09:05:51 $
+ ------------
+
+ Posix test 5:
+ an alarm test
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <kernel/kern.h>
+
+void signal_handler(int signo, siginfo_t *info, void *extra)
+{
+ cprintf("SIGNAL HANDLER: pid=%d\n",exec_shadow);
+}
+
+int main(int argc, char **argv)
+{
+ struct sigaction sig_act;
+
+ sig_act.sa_sigaction = (void *) signal_handler;
+ sig_act.sa_flags = SA_SIGINFO;
+ sigemptyset(&sig_act.sa_mask);
+
+ sigaction(SIGALRM, &sig_act, NULL);
+
+ cprintf("main: alarm(5), waiting t=2 sec\n");
+ alarm(5);
+
+ while (sys_gettime(NULL) < 2000000);
+
+ cprintf("main: alarm(3) return %d, waiting t=6 sec\n",alarm(3));
+
+ pause();
+// while (sys_gettime(NULL) < 6000000);
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/pse51/ptest6.c
===================================================================
--- rel_1_4/pse51/ptest6.c (nonexistent)
+++ rel_1_4/pse51/ptest6.c (revision 1522)
@@ -0,0 +1,287 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ptest6.c,v 1.2 2004-05-23 09:05:51 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.2 $
+ Last update: $Date: 2004-05-23 09:05:51 $
+ ------------
+
+ Posix test 6:
+
+ message queues
+
+ main thread:
+ set a sigevent to sigev_thread on a mailbox (that creates thread 2)
+ creates thread 1
+ waits t=3.5 sec.
+ pthread_cancel(T4)
+
+ thread 1:
+ send a msg to the mailbox (the event fires and thread 2 is created)
+
+ thread 2:
+ receive the msg sent by thread 1
+ set the event to a signal
+ creates thread 3 and 4
+ waits t = 1 sec
+ send another msg
+
+ thread 3:
+ receive the msg sent by 2 (it blocks!)
+ waits t = 2 sec
+ send 5 msgs (with different priorities!!!
+
+ thread 4:
+ receives 5 msgs every 0.5 sec.
+ then receive another message that never will arrive...
+
+ non standard function used:
+ cprintf
+ sys_gettime
+ keyboard stuffs
+ sys_end
+
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <mqueue.h>
+
+#include <kernel/kern.h>
+
+struct sigevent ev25, evtask;
+pthread_attr_t task_attr;
+struct sched_param task_param;
+mqd_t mq;
+pthread_t T1,T2,T3,T4,T5;
+
+#define MESSAGE_LENGTH 100
+
+void *t1(void *arg)
+{
+ cprintf("T1: started, sending a message\n");
+ if (mq_send(mq,"Donald Duck",12,1))
+ { cprintf("T1: mq_send returns errno %d\n",errno); return 0; }
+
+ cprintf("T1: ending...\n");
+ return 0;
+}
+
+void *t4(void *arg);
+void *t3(void *arg);
+
+void t2(union sigval value)
+{
+ ssize_t x;
+ char buf[MESSAGE_LENGTH];
+ int prio;
+
+ cprintf("T2: value = %d, receiving a message\n", value.sival_int);
+
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+
+ cprintf("T2: received message: length=%ld, prio=%d, text=°%s°, notify...\n",
+ x,prio,buf);
+
+ if (mq_notify(mq, &ev25))
+ { cprintf("T2: mq_notify returns errno %d\n",errno); sys_end(); }
+
+ cprintf("T2: waiting t = 1 sec.\n");
+ while (sys_gettime(NULL)<1000000);
+ cprintf("T2: 1 sec. reached, sending another message and creating T3 and T4, \n");
+
+ if (mq_send(mq,"Mickey Mouse",13,1))
+ { cprintf("T2: mq_send returns errno %d\n",errno); sys_end(); }
+
+ pthread_create(&T3, NULL, t3, NULL);
+ pthread_create(&T4, NULL, t4, NULL);
+
+ cprintf("T2: ending...\n");
+}
+
+void *t3(void *arg)
+{
+ ssize_t x;
+ char buf[MESSAGE_LENGTH];
+ int prio;
+
+ cprintf("T3: waiting a message...\n");
+
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+
+ // mickey mouse
+ cprintf("T3: received message: length=%ld, prio=%d, text=°%s°\n",
+ x,prio,buf);
+
+ cprintf("T3: waiting t = 1.5 sec.\n");
+ while (sys_gettime(NULL)<1500000);
+ cprintf("T3: 2 sec. reached, sending 5 messages\n");
+
+ if (mq_send(mq,"Goofy",6,1))
+ { cprintf("T3: mq_send1 returns errno %d\n",errno); sys_end(); }
+ cprintf("Û");
+
+ if (mq_send(mq,"Minnie",7,1))
+ { cprintf("T3: mq_send2 returns errno %d\n",errno); sys_end(); }
+ cprintf("Û");
+
+ if (mq_send(mq,"Pluto",6,2)) // NB: different priority!!!
+ { cprintf("T3: mq_send3 returns errno %d\n",errno); sys_end(); }
+ cprintf("Û");
+
+ if (mq_send(mq,"Rocker Duck",12,2)) // NB: different priority!!!
+ { cprintf("T3: mq_send4 returns errno %d\n",errno); sys_end(); }
+ cprintf("Û");
+
+ if (mq_send(mq,"Oncle Scroodge",15,2)) // NB: different priority!!!
+ { cprintf("T3: mq_send5 returns errno %d\n",errno); sys_end(); }
+ cprintf("Û");
+
+ cprintf("T3: ending...\n");
+
+ return 0;
+}
+
+void t4exit(void *arg)
+{
+ cprintf("T4: AAAARRRRGGGHHH!!! killed by someone...\n");
+}
+
+void *t4(void *arg)
+{
+ ssize_t x;
+ char buf[MESSAGE_LENGTH];
+ int prio;
+
+ cprintf("T4: waiting t = 2.2 sec.\n");
+
+ while (sys_gettime(NULL)<2200000);
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+
+ while (sys_gettime(NULL)<2400000);
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+ while (sys_gettime(NULL)<2600000);
+
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+ while (sys_gettime(NULL)<2800000);
+
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+ while (sys_gettime(NULL)<3000000);
+
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+
+ pthread_cleanup_push(t4exit,NULL);
+ x = mq_receive(mq,buf,MESSAGE_LENGTH,&prio);
+ cprintf("T4: received message: length=%ld, prio=%d, text=°%s°\n",x,prio,buf);
+ pthread_cleanup_pop(0);
+
+ return 0;
+}
+
+void signal_handler(int signo, siginfo_t *info, void *extra)
+{
+ cprintf("Signal %d code=%s value=%d task=%d time=%ldusec\n",
+ info->si_signo,
+ (info->si_code == SI_TIMER) ? "Timer" : "Other",
+ info->si_value.sival_int,
+ info->si_task,
+ sys_gettime(NULL));
+}
+
+int main(int argc, char **argv)
+{
+// int err;
+ struct sigaction sig_act;
+ struct mq_attr attr;
+
+ sig_act.sa_sigaction = (void *) signal_handler;
+ sig_act.sa_flags = SA_SIGINFO;
+ sigemptyset(&sig_act.sa_mask);
+ sigaction(25, &sig_act, NULL);
+
+ // set ev25, evtask
+ ev25.sigev_notify = SIGEV_SIGNAL;
+ ev25.sigev_signo = 25;
+ ev25.sigev_value.sival_int = 555;
+
+ evtask.sigev_notify = SIGEV_THREAD;
+ evtask.sigev_value.sival_int = 777;
+ evtask.sigev_notify_function = t2;
+ evtask.sigev_notify_attributes = &task_attr;
+
+ // set pthread attributes
+ pthread_attr_init(&task_attr);
+ pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED);
+ pthread_attr_setschedpolicy(&task_attr, SCHED_FIFO);
+ task_param.sched_priority = 10;
+ pthread_attr_setschedparam(&task_attr, &task_param);
+
+ // set mqueue attributes
+ attr.mq_flags = 0;
+ attr.mq_maxmsg = 3;
+ attr.mq_msgsize = MESSAGE_LENGTH;
+
+ // create the message queue
+ if ((mq = mq_open("mq", O_CREAT|O_RDWR, 0, &attr)) == -1)
+ { cprintf("main: mq_open returns errno %d\n",errno); return 0; }
+
+ if (mq_notify(mq, &evtask))
+ { cprintf("main: mq_notify returns errno %d\n",errno); return 0; }
+
+ cprintf("main: created mq, creating T1...\n");
+
+ pthread_create(&T1, NULL, t1, NULL);
+
+ cprintf("main: waiting t= 3.5 sec., then kill T4...\n");
+
+ while (sys_gettime(NULL)<3500000);
+
+ pthread_cancel(T4);
+
+ cprintf("main: ending...\n");
+
+ return 0;
+}
Index: rel_1_4/newtrace/nosave/makefile
===================================================================
--- rel_1_4/newtrace/nosave/makefile (nonexistent)
+++ rel_1_4/newtrace/nosave/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = nosave
+
+include $(BASE)/config/example.mk
+
+nosave:
+ make -f $(SUBMAKE) BASE=$(BASE) APP=nosave INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __NET__"
+
Index: rel_1_4/newtrace/nosave/initfile.c
===================================================================
--- rel_1_4/newtrace/nosave/initfile.c (nonexistent)
+++ rel_1_4/newtrace/nosave/initfile.c (revision 1522)
@@ -0,0 +1,61 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include "kernel/kern.h"
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 0);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
Index: rel_1_4/newtrace/nosave/nosave.c
===================================================================
--- rel_1_4/newtrace/nosave/nosave.c (nonexistent)
+++ rel_1_4/newtrace/nosave/nosave.c (revision 1522)
@@ -0,0 +1,58 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <kernel/kern.h>
+#include <tracer.h>
+
+int main(int argc, char **argv)
+{
+
+ long long i;
+
+ int a,b,c;
+ struct timespec start,end,diff;
+
+ a = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+ b = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_JTN);
+ c = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+
+ FTrace_chunk_link(a,b);
+ FTrace_chunk_link(b,c);
+
+ FTrace_actual_chunk_select(a);
+
+ kern_gettime(&start);
+ FTrace_enable();
+
+ for (i=0;i<1000000000;i++);
+
+ TRACER_LOGEVENT(FTrace_EVT_next_chunk,0,0);
+
+ for (i=0;i<1000000000;i++);
+
+ FTrace_disable();
+ kern_gettime(&end);
+
+ SUBTIMESPEC(&end,&start,&diff);
+
+ cprintf("Logged Time %d s %d us\n",(int)diff.tv_sec,(int)diff.tv_nsec/1000);
+
+ FTrace_chunk_dump(a);
+
+ return 0;
+
+}
Index: rel_1_4/newtrace/udp/makefile
===================================================================
--- rel_1_4/newtrace/udp/makefile (nonexistent)
+++ rel_1_4/newtrace/udp/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = udptrace
+
+include $(BASE)/config/example.mk
+
+udptrace:
+ make -f $(SUBMAKE) BASE=$(BASE) APP=udptrace INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __NET__"
+
Index: rel_1_4/newtrace/udp/initfile.c
===================================================================
--- rel_1_4/newtrace/udp/initfile.c (nonexistent)
+++ rel_1_4/newtrace/udp/initfile.c (revision 1522)
@@ -0,0 +1,161 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+ PCI26_init();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+void call_shutdown_task(void *arg) {
+
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/newtrace/udp/udptrace.c
===================================================================
--- rel_1_4/newtrace/udp/udptrace.c (nonexistent)
+++ rel_1_4/newtrace/udp/udptrace.c (revision 1522)
@@ -0,0 +1,76 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <kernel/kern.h>
+#include <FTrace_chunk.h>
+#include <FTrace_udp.h>
+#include <tracer.h>
+
+int main(int argc, char **argv)
+{
+
+ long long i;
+
+ int a,b,c;
+ struct timespec start,end,diff;
+ SYS_FLAGS f;
+
+ a = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+ b = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_JTN);
+ c = FTrace_chunk_create(1000000, 1000000, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+
+ FTrace_chunk_link(a,b);
+ FTrace_chunk_link(b,c);
+
+ FTrace_actual_chunk_select(a);
+
+ kern_gettime(&start);
+ FTrace_enable();
+
+ for (i=0;i<1000000000;i++);
+
+ TRACER_LOGEVENT(FTrace_EVT_next_chunk,0,0);
+
+ f = kern_fsave();
+ __asm__("cpuid":::"eax","ebx","ecx","edx");
+ FAST_TRACER_LOGEVENT(FTrace_EVT_ipoint,1,0);
+ FAST_TRACER_LOGEVENT(FTrace_EVT_ipoint,2,0);
+ FAST_TRACER_LOGEVENT(FTrace_EVT_ipoint,3,0);
+ FAST_TRACER_LOGEVENT(FTrace_EVT_ipoint,4,0);
+ FAST_TRACER_LOGEVENT(FTrace_EVT_ipoint,5,0);
+ __asm__("cpuid":::"eax","ebx","ecx","edx");
+ kern_frestore(f);
+
+ TRACER_LOGEVENT(FTrace_EVT_ipoint,6,0);
+
+ for (i=0;i<1000000000;i++);
+
+ FTrace_disable();
+ kern_gettime(&end);
+
+ SUBTIMESPEC(&end,&start,&diff);
+
+ cprintf("Logged Time %d s %d us\n",(int)diff.tv_sec,(int)diff.tv_nsec/1000);
+
+ FTrace_OSD_init_udp(1, "192.168.1.10", "192.168.1.1");
+
+ FTrace_send_chunk(a, 0, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_CYC);
+ FTrace_send_chunk(b, 0, FTRACE_CHUNK_FLAG_FREE | FTRACE_CHUNK_FLAG_JTN);
+
+ return 0;
+
+}
Index: rel_1_4/newtrace/utils/list.c
===================================================================
--- rel_1_4/newtrace/utils/list.c (nonexistent)
+++ rel_1_4/newtrace/utils/list.c (revision 1522)
@@ -0,0 +1,88 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define READ_BUFFER 2000
+#define DELTA_BUFFER 100
+
+int main(int argc, char *argv[])
+{
+
+ char buffer[READ_BUFFER+DELTA_BUFFER];
+ void *p, *last;
+ int n,delta,size;
+
+ unsigned long long ev = 0;
+
+ FILE *input_file;
+
+ if (argc < 2) {
+ printf("%s: Enter the input file name [%s filename]\n",argv[0],argv[0]);
+ exit(1);
+ }
+
+ input_file = fopen(argv[1],"rb");
+
+ last = buffer + READ_BUFFER;
+
+ while(!feof(input_file)) {
+
+ //move remaining byte
+ delta = (unsigned int)(buffer) + READ_BUFFER - (unsigned int)(last);
+ if (delta > 0) memcpy(buffer,last,delta);
+
+ n = fread(buffer+delta,1,READ_BUFFER+10,input_file);
+ fseek(input_file,-(delta+10),SEEK_CUR);
+
+ p = buffer;
+
+ while ((unsigned int)(p) + 16 <= (unsigned int)(buffer + READ_BUFFER) &&
+ (unsigned int)(p) + 16 <= (unsigned int)(buffer + n + delta)) {
+
+ printf("%08d Type = %02x ",(unsigned int)ev,*(unsigned short int *)(p));
+
+ printf("TSC = %08x:%08x",*(unsigned int *)(p+4),*(unsigned int *)(p+8));
+
+ size = 16;
+
+ printf(" Par1 = %d",*(unsigned short int *)(p+2));
+ printf(" Par2 = %d\n",*(unsigned int *)(p+12));
+
+ ev++;
+
+ p += 16;
+
+ if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
+
+ last = p;
+
+ }
+
+ if ((unsigned int)(p) + 10 > (unsigned int)(buffer + n + delta)) break;
+
+ }
+
+ fclose(input_file);
+
+ return 0;
+
+}
+
Index: rel_1_4/newtrace/utils/makefile
===================================================================
--- rel_1_4/newtrace/utils/makefile (nonexistent)
+++ rel_1_4/newtrace/utils/makefile (revision 1522)
@@ -0,0 +1,28 @@
+#
+# util_linux -> compiles the tracer utilities under Linux
+#
+
+ifndef BASE
+BASE=../../..
+endif
+
+.PHONY: util_dos util_linux clean
+
+all:
+ @echo Targets: util_dos util_linux clean
+ @echo Note: udpdump and list are available only under linux
+
+util_linux: udpdump list
+
+udpdump: udpdump.c
+ gcc -Wimplicit-function-declaration -Wall -ggdb\
+ -I$(BASE)/include/trace -I$(BASE)/oslib udpdump.c -o udpdump
+
+list: list.c
+ gcc -Wimplicit-function-declaration -Wall -ggdb\
+ -I$(BASE)/include/trace -I$(BASE)/oslib list.c -o list
+
+clean:
+ rm -rf *.o udpdump list
+
+
Index: rel_1_4/newtrace/utils/udpdump.c
===================================================================
--- rel_1_4/newtrace/utils/udpdump.c (nonexistent)
+++ rel_1_4/newtrace/utils/udpdump.c (revision 1522)
@@ -0,0 +1,134 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <netinet/in.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <unistd.h>/* close() */
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+
+#define SERVER_PORT 20000
+#define MAX_MSG 10000
+
+struct tracer_udp_header {
+ char id[12];
+ unsigned int pkt_number;
+ unsigned int events;
+ unsigned int size;
+};
+
+FILE *output_file;
+
+int miss;
+
+void close_and_exit()
+{
+
+ printf("Closing...\n");
+
+ if (miss == 1) printf("Possible error receiving packets !\n");
+
+ fclose(output_file);
+
+ exit(0);
+
+}
+
+int main(int argc, char *argv[])
+{
+ int sd, rc, n, cliLen,count;
+ struct sockaddr_in cliAddr, servAddr;
+ char msg[MAX_MSG];
+
+ struct tracer_udp_header *pkt_head = (struct tracer_udp_header *)(msg);
+
+ if (argc < 2) {
+ printf("%s: Enter the output file name [%s filename]\n",argv[0],argv[0]);
+ exit(1);
+ }
+
+ // socket creation
+ sd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(sd < 0) {
+ printf("%s: cannot open socket \n",argv[0]);
+ exit(1);
+ }
+
+ output_file = fopen(argv[1],"w+b");
+ if (output_file == NULL) {
+ printf("%s: Cannot open the file\n",argv[0]);
+ exit(1);
+ }
+
+ // bind local server port
+ servAddr.sin_family = AF_INET;
+
+ servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
+ servAddr.sin_port = htons(SERVER_PORT);
+
+ rc = bind (sd, (struct sockaddr *)&servAddr,sizeof(servAddr));
+ if(rc < 0) {
+ printf("%s: cannot bind port number %d \n",
+ argv[0], SERVER_PORT);
+ exit(1);
+ }
+
+ signal(SIGINT, close_and_exit);
+
+ count = 1;
+ miss = 0;
+
+ while(1) {
+
+ printf("Wait packet...\n");
+
+ // receive message
+ cliLen = sizeof(cliAddr);
+ n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *)&cliAddr, &cliLen);
+
+ if (strncmp(pkt_head->id,"TRACER",6)) continue;
+
+ printf("Received %d, length %d(%d), %d tracer events.\n",
+ pkt_head->pkt_number, n, pkt_head->size, pkt_head->events);
+
+ if (pkt_head->pkt_number != count) {
+ printf("Miss Packet !!!\n");
+ miss = 1;
+ }
+
+ if (n > 0) {
+
+ count++;
+
+ fwrite((void *)(msg+sizeof(struct tracer_udp_header)),n-sizeof(struct tracer_udp_header),1,output_file);
+
+ }
+
+ }
+
+ fclose(output_file);
+
+ return 0;
+
+}
+
Index: rel_1_4/newtrace/makefile
===================================================================
--- rel_1_4/newtrace/makefile (nonexistent)
+++ rel_1_4/newtrace/makefile (revision 1522)
@@ -0,0 +1,10 @@
+.PHONY: all clean
+
+all:
+ make -C udp
+ make -C nosave
+
+clean:
+ make -C udp clean
+ make -C nosave clean
+
Index: rel_1_4/newtrace/readme
===================================================================
--- rel_1_4/newtrace/readme (nonexistent)
+++ rel_1_4/newtrace/readme (revision 1522)
@@ -0,0 +1,13 @@
+This directory contains a set of sub directories containing all the tracer
+examples and utilities.
+
+Here a short description of the contents
+
+utils - some small utilities:
+
+ udpdump - save on a file the logged events sent through network
+
+udp - a small application that sends its trace data through the network
+
+nosave - a simple tracer implementation without saving logged events
+
Index: rel_1_4/network/makefile
===================================================================
--- rel_1_4/network/makefile (nonexistent)
+++ rel_1_4/network/makefile (revision 1522)
@@ -0,0 +1,18 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = net talk
+
+include $(BASE)/config/example.mk
+
+net:
+ make -f $(SUBMAKE) BASE=$(BASE) APP=net INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__PCI__ __LINUXC26__ __INPUT__ __NET__"
+
+talk:
+ make -f $(SUBMAKE) BASE=$(BASE) APP=talk INIT= OTHEROBJS="initfile.o" OTHERINCL= SHARKOPT="__PCI__ __LINUXC26__ __INPUT__ __NET__"
Index: rel_1_4/network/talk.c
===================================================================
--- rel_1_4/network/talk.c (nonexistent)
+++ rel_1_4/network/talk.c (revision 1522)
@@ -0,0 +1,217 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * Copyright (C) 2000 Luca Abeni, Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *
+ * CVS : $Id: aster1.c,v 1.1 2002/10/28 08:13:37 pj Exp
+
+ This is the talkdx.c Hartik's example.
+
+ File: Talk.C
+ Revision: 1.00
+ Author: Luca Abeni
+
+
+ Simple Netlib demo: nothing of seriously real-time, only another Unix
+ Talk clone.
+ Read it to see how the UDP/IP layers of the networ library work.
+
+*/
+
+#include <kernel/kern.h>
+#include <string.h>
+
+#include <drivers/crtwin.h>
+#include <drivers/shark_keyb26.h>
+
+#include <drivers/udpip.h>
+
+
+WIN dbg;
+BYTE esc = FALSE;
+
+char talk_myipaddr[20];
+char talk_toipaddr[20];
+
+/*
+ This non real-time task reads UDP packets from the network and writes
+ them in a window
+*/
+TASK scrittore(void)
+{
+ char str[2000];
+ UDP_ADDR from, local;
+ WIN displ;
+ int s,n;
+
+ /* Connect on the local port #100 */
+ local.s_port = 100;
+ s = udp_bind(&local, NULL);
+
+ /* Open the window */
+ win_init(&displ,0,0,79,6);
+ win_frame(&displ,BLACK,WHITE,"Remote",2);
+
+ while (1) {
+ /* Clear the buffer for receiving the packet...*/
+ memset(str, 0, 1999);
+ /*...and receive the packet (block until a packet arrives */
+ n = udp_recvfrom(s, str, &from);
+ win_puts(&displ, str);
+ }
+}
+
+/*
+ This non real-time task reads strings from the keyoard and sends them
+ to the remote host
+*/
+TASK write(void)
+{
+ WIN wr;
+ UDP_ADDR to,local;
+ char str[80],tmp[5],ch;
+ int s;
+ IP_ADDR bindlist[5];
+
+ win_init(&wr,0,7,79,6);
+ win_frame(&wr,BLACK,WHITE,"Local",2);
+
+ /* Create a socket for transitting */
+ ip_str2addr(talk_myipaddr,&(local.s_addr));
+ local.s_port = 101;
+
+ /*
+ If we want the address of the remote host in the ARP table before
+ begginning the transmission (to eliminate a possible source of
+ unpredictability), we can use the bindlist, otherwise we set the
+ second parameter of udp_bind to NULL
+ */
+ ip_str2addr(talk_toipaddr,&(bindlist[0]));
+ memset(&(bindlist[1]), 0, sizeof(IP_ADDR));
+ s = udp_bind(&local, /*bindlist*/NULL);
+
+ ip_str2addr(talk_toipaddr,&(to.s_addr));
+ to.s_port = 100;
+ sprintf(str,"Local IP address %d.%d.%d.%d\n", local.s_addr.ad[0],
+ local.s_addr.ad[1], local.s_addr.ad[2],
+ local.s_addr.ad[3]);
+ win_puts(&dbg,str);
+ sprintf(str,"Talk to %d.%d.%d.%d ",to.s_addr.ad[0],to.s_addr.ad[1],
+ to.s_addr.ad[2],to.s_addr.ad[3]);
+ win_puts(&dbg,str);
+ while (1) {
+ /* Get the string...*/
+ while((ch = keyb_getch(BLOCK)) != 13) {
+ sprintf(tmp,"%c",ch);
+ strcat(str,tmp);
+ win_puts(&wr,tmp);
+ }
+ strcat(str,"\n");
+ win_puts(&wr,"\n");
+ /*...and send it!!! */
+ udp_sendto(s,str,strlen(str)+2,&to);
+ str[0] = 0;
+ }
+}
+
+/* This function is called when the user presses CTRL-C (stops the systems) */
+void esci(KEY_EVT *k)
+{
+ esc = TRUE;
+ sys_end();
+}
+
+int main(int argc, char **argv)
+{
+ KEY_EVT k;
+
+ struct net_model m = net_base;
+
+ NRT_TASK_MODEL m_nrt;
+
+ k.flag = CNTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,esci,FALSE);
+ k.flag = CNTR_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,esci,FALSE);
+
+ clear();
+ cprintf(" S.Ha.R.K. Talk! Ver. 1.10\n");
+
+ if (argc != 3) {
+ cprintf("S.Ha.R.K. Talk usage: talk fromIP toIP\n");
+ return 0;
+ }
+
+ strcpy(talk_myipaddr, argv[1]);
+ strcpy(talk_toipaddr, argv[2]);
+
+ /* We want a task for TX mutual exclusion */
+ net_setmode(m, TXTASK);
+ /* We use UDP/IP stack */
+ net_setudpip(m, talk_myipaddr, "255.255.255.255");
+ /* OK: let's start the NetLib! */
+ if (net_init(&m) == 1) {
+ cprintf("Net Init OK...\n");
+ } else {
+ cprintf("Net Init Failed...\n");
+ sys_abort(300);
+ }
+
+
+ //dump_irq();
+
+ cprintf("\n\n\n\tPress ENTER\n");
+ while (!esc) {
+ keyb_getcode(&k,BLOCK);
+ if (k.ascii == 13) esc = TRUE;
+ }
+
+ esc = FALSE;
+ clear();
+ win_init(&dbg,0,20,60,3);
+ win_frame(&dbg,BLACK,WHITE,"Debug",2);
+
+ /* Start the sender and receiver tasks...*/
+ nrt_task_default_model(m_nrt);
+ task_activate(task_create("aaa",scrittore,&m_nrt,NULL));
+ task_activate(task_create("bbb",write,&m_nrt,NULL));
+
+ return 0;
+}
Index: rel_1_4/network/initfile.c
===================================================================
--- rel_1_4/network/initfile.c (nonexistent)
+++ rel_1_4/network/initfile.c (revision 1522)
@@ -0,0 +1,161 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+ PCI26_init();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+void call_shutdown_task(void *arg) {
+
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/network/net.c
===================================================================
--- rel_1_4/network/net.c (nonexistent)
+++ rel_1_4/network/net.c (revision 1522)
@@ -0,0 +1,82 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <kernel/kern.h>
+#include <drivers/udpip.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/* Init the network stack */
+int init_network(char *local_ip)
+{
+
+ struct net_model m = net_base;
+
+ net_setudpip(m, local_ip, "255.255.255.255");
+
+ if (net_init(&m) != 1) {
+ cprintf("Network: Init Error.\n");
+ return -1;
+ }
+
+ return 0;
+
+}
+
+int main(int argc, char **argv)
+{
+ UDP_ADDR target, local;
+ char local_ip[20], target_ip[20], buff[10];
+ int socket, i;
+ IP_ADDR bindlist[5];
+
+ strcpy(local_ip, "192.168.1.10");
+ strcpy(target_ip, "192.168.1.1");
+
+ if (init_network(local_ip)) sys_end();
+
+ /* local IP string to addr */
+ ip_str2addr(local_ip,&(local.s_addr));
+ /* set the source port */
+ local.s_port = 100;
+
+ /* target IP string to addr */
+ ip_str2addr(target_ip,&(bindlist[0]));
+ memset(&(bindlist[1]), 0, sizeof(IP_ADDR));
+ /* bind */
+ socket = udp_bind(&local, NULL);
+
+ /* target IP string to addr */
+ ip_str2addr(target_ip,&(target.s_addr));
+ /* target port */
+ target.s_port = 100;
+
+ for (i = 0; i < 5; i++) {
+ strcpy(buff, "qwerty\n");
+ cprintf("Send packet: %s\n", buff);
+ udp_sendto(socket, buff, strlen(buff), &target);
+ sleep(1);
+ }
+
+ cprintf("The End.\n");
+
+ sys_end();
+
+ return 0;
+}
Index: rel_1_4/astro/makefile
===================================================================
--- rel_1_4/astro/makefile (nonexistent)
+++ rel_1_4/astro/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS= asteroid
+
+include $(BASE)/config/example.mk
+
+asteroid:
+ make -f $(SUBMAKE) APP=asteroid INIT= OTHEROBJS="initfile.o astro.o stat.o rock.o" SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
+
Index: rel_1_4/astro/rock.c
===================================================================
--- rel_1_4/astro/rock.c (nonexistent)
+++ rel_1_4/astro/rock.c (revision 1522)
@@ -0,0 +1,289 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+#include "asteroid.h"
+
+PID pid_RC;
+int nrock;
+int kill_rock;
+rock_pos rocks[ROCK_NMAX];
+
+void draw_rock(int x, int y, int r, int c)
+{
+ sem_wait(&mx_grf);
+ grx_disc(x, y, r, c);
+ sem_post(&mx_grf);
+}
+
+TASK rock(rock_ini* ri)
+{
+ int x, y, r; /* rock graphic position */
+ int ox, oy; /* rock old position */
+ int x0, y0; /* rock initial position */
+ float vx, vy; /* rock speed */
+ float vxo, vyo; /* rock initial speed */
+ float ty, tx;
+ float dt;
+ float rand_ang;
+ int rand_side;
+ int ab, ax, ay, i, l;
+
+ x = y = x0 = y0 = ox = oy = vx = vy = ab = 0;
+
+ i = ri->i;
+ r = ri->r;
+
+ rand_ang = ((rand()%120) - 60) * PI / 180.;
+
+ sem_wait(&mx_st_scr);
+ l = score / 50;
+ sem_post(&mx_st_scr);
+
+ sem_wait(&mx_mat);
+ vxo = - (ROCK_VEL + l) * sin(rand_ang);
+ vyo = - (ROCK_VEL + l) * cos(rand_ang);
+ sem_post(&mx_mat);
+
+#ifdef ASTRO_MOVE
+ rand_side = rand()%4;
+#else
+ rand_side = 1;
+#endif
+
+ if (rand_side == 0) { // Bottom
+ vx = vxo;
+ vy = vyo;
+ }
+ if (rand_side == 1) { // Top
+ vx = -vxo;
+ vy = -vyo;
+ }
+ if (rand_side == 2) { // Right
+ vx = vyo;
+ vy = -vxo;
+ }
+ if (rand_side == 3) { // Left
+ vx = -vyo;
+ vy = vxo;
+ }
+
+ if ( (ri->x == 0) && (ri->y == 0) ) {
+ if (rand_side < 2) { // Bottom or Top
+ x = ox = x0 = GB_XMIN + (GB_XMAX-GB_XMIN)/4 + (rand()%((GB_XMAX-GB_XMIN)/2));
+ if (rand_side == 0) { // Bottom
+ y = oy = y0 = GB_YMAX - (r+1);
+ }
+ if (rand_side == 1) { // Top
+ y = oy = y0 = GB_YMIN + (r+1);
+ }
+ } else {
+ y = oy = y0 = GB_YMIN + (GB_YMAX-GB_YMIN)/4 + (rand()%((GB_YMAX-GB_YMIN)/2));
+ if (rand_side == 2) { // Right
+ x = ox = x0 = GB_XMAX - (r+1);
+ }
+ if (rand_side == 3) { // Left
+ x = ox = x0 = GB_XMIN + (r+1);
+ }
+ }
+ } else {
+ x = ox = x0 = ri->x;
+ y = oy = y0 = ri->y;
+ }
+
+ sem_wait(&mx_rk);
+ rocks[i].x = x;
+ rocks[i].y = y;
+ rocks[i].r = r;
+ sem_post(&mx_rk);
+
+ tx = 0;
+ ty = 0;
+ dt = ((float)ROCK_PERIOD)/100000;
+
+ while (1) {
+ y = y0 + vy * ty;
+ x = x0 + vx * tx;
+
+ sem_wait(&mx_rk);
+ rocks[i].x = x;
+ rocks[i].y = y;
+ r = rocks[i].r;
+ sem_post(&mx_rk);
+
+ draw_rock(ox, oy, r, RGB_BLACK);
+
+ if ((kill_rock) || (crash)){
+ nrock--;
+ sem_wait(&mx_rk);
+ rocks[i].pid = NIL;
+ sem_post(&mx_rk);
+ return 0;
+ }
+
+ ox = x;
+ oy = y;
+
+ sem_wait(&mx_xy);
+ ax = astro_x;
+ ay = astro_y;
+ sem_post(&mx_xy);
+
+ if (dist_xy(x, y, ax, ay) < (ASTRO_RADIUS/2+r)) {
+ if (!ab) {
+ sem_wait(&mx_st_nrg);
+ energy -= ENERGY_GOT;
+ sem_post(&mx_st_nrg);
+ ab = 1;
+ }
+ } else
+ ab = 0;
+
+ sem_wait(&mx_xy);
+ if (dist_xy(x, y, astro_x, astro_y) < (ASTRO_RADIUS+r)/2) crash = 1;
+ sem_post(&mx_xy);
+
+#ifdef ASTRO_MOVE
+ if (x <= GB_XMIN + r) {
+ x0 = x = GB_XMAX - (r+1);
+ y0 = y;
+ tx = ty = 0;
+ }
+ if (x >= GB_XMAX - r) {
+ x0 = x = GB_XMIN + (r+1);
+ y0 = y;
+ tx = ty = 0;
+ }
+ if (y <= GB_YMIN + r) {
+ x0 = x;
+ y0 = y = GB_YMAX - (r+1);
+ tx = ty = 0;
+ }
+ if (y >= GB_YMAX - r) {
+ x0 = x;
+ y0 = y = GB_YMIN + (r+1);
+ tx = ty = 0;
+ }
+#else
+ if ( (x <= GB_XMIN + r) || (x >= GB_XMAX - r) || (y >= GB_YMAX - 2*r) ) {
+ if (y >= GB_YMAX - 2*r) {
+ sem_wait(&mx_st_nrg);
+ energy -= ENERGY_GOT;
+ sem_post(&mx_st_nrg);
+ }
+ nrock--;
+ sem_wait(&mx_rk);
+ rocks[i].pid = NIL;
+ sem_post(&mx_rk);
+ return 0;
+ }
+#endif
+ draw_rock(ox, oy, r, RGB_YELLOW);
+
+ ty += dt;
+ tx += dt;
+
+ task_endcycle();
+ }
+}
+
+void rock_create(rock_ini* ri)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+ int i;
+
+ soft_task_default_model(mp);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_group(mp, ROCK_GROUP);
+ soft_task_def_met(mp, ROCK_WCET);
+ soft_task_def_period(mp,ROCK_PERIOD);
+ soft_task_def_usemath(mp);
+ i = -1;
+ do {
+ i++;
+ sem_wait(&mx_rk);
+ pid = rocks[i].pid;
+ sem_post(&mx_rk);
+ } while (pid != NIL);
+ ri->i = i;
+ soft_task_def_arg(mp, (void *)ri);
+ pid = task_create("Rock", rock, &mp, NULL);
+
+ if (pid != NIL) {
+ sem_wait(&mx_rk);
+ rocks[i].pid = pid;
+ sem_post(&mx_rk);
+ task_activate(pid);
+ nrock++;
+ }
+}
+
+TASK rock_creator()
+{
+ while (1) {
+ sem_wait(&mx_rn);
+ if (rock_new.i == 0) {
+ rock_create(&rock_new);
+ rock_new.i = -1;
+ }
+ sem_post(&mx_rn);
+
+ if ((nrock < ROCK_NMAX/2) && (!kill_rock) && (!crash)) {
+ if ((rand()%ROCK_NMAX) > nrock) {
+ rock_new.r = ROCK_RADIUS_I;
+ rock_new.x = rock_new.y = 0;
+ rock_create(&rock_new);
+ }
+ }
+ task_endcycle();
+ }
+}
+
+void reset_rock()
+{
+ kill_rock = 1;
+}
+
+void start_rock()
+{
+ kill_rock = 0;
+}
+
+void create_rock_task()
+{
+ SOFT_TASK_MODEL ms;
+
+ soft_task_default_model(ms);
+ soft_task_def_ctrl_jet(ms);
+ soft_task_def_met(ms, ROCK_WCET);
+ soft_task_def_period(ms,ROCK_PERIOD*10);
+ soft_task_def_usemath(ms);
+ pid_RC = task_create("RockCreator", rock_creator, &ms, NULL);
+ if (pid_RC == NIL) {
+ sys_shutdown_message("Could not create task <RockCreator>\n");
+ sys_end();
+ return;
+ } else
+ task_activate(pid_RC);
+}
+
+void init_rock()
+{
+ int i;
+
+ nrock = 0;
+ kill_rock = 1;
+ for ( i=0; i<ROCK_NMAX; i++ ) rocks[i].pid = NIL;
+
+ create_rock_task();
+}
+
Index: rel_1_4/astro/asteroid.h
===================================================================
--- rel_1_4/astro/asteroid.h (nonexistent)
+++ rel_1_4/astro/asteroid.h (revision 1522)
@@ -0,0 +1,164 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <semaphore.h>
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#include <math.h>
+
+#define ASTRO_MOVE/* If defined then astro else defender */
+
+#define FRAME_BUFFER_DEVICE 0
+
+// DA CALCOLARE
+#define RGB_BLACK rgb16( 0, 0, 0)
+#define RGB_GRAY rgb16(127,127,127)
+#define RGB_WHITE rgb16(255,255,255)
+#define RGB_RED rgb16(255, 0, 0)
+#define RGB_GREEN rgb16( 0,255, 0)
+#define RGB_BLUE rgb16( 0, 0,255)
+#define RGB_YELLOW rgb16(255,255, 0)
+#define RGB_MAGENTA rgb16(255, 0,255)
+#define RGB_CYAN rgb16( 0,255,255)
+#define RGB_D_RED rgb16(127, 0, 0)
+#define RGB_D_GREEN rgb16( 0,127, 0)
+#define RGB_D_BLUE rgb16( 0, 0,127)
+#define RGB_D_YELLOW rgb16(127,127, 0)
+#define RGB_D_MAGENTA rgb16(127, 0,127)
+#define RGB_D_CYAN rgb16( 0,127,127)
+
+#define LIVE_0 " "
+#define LIVE_1 " *"
+#define LIVE_2 " **"
+#define LIVE_3 " ***"
+#define LIVE_4 " ****"
+#define LIVE_5 " *****"
+#define LIVE_6 "******"
+#define LIVE_X "------"
+
+/* GameBoard constants */
+#define GB_YMIN 65 /* position of the top */
+#define GB_YMAX 460 /* position of the bottom */
+#define GB_XMIN 5 /* min position X of the asteroid */
+#define GB_XMAX 505 /* max position X of the asteroid */
+
+/* Asteroid constants */
+#define ASTEROID_RADIUS 4 /* radius of the asteroid */
+#define ASTEROID_NMAX 60 /* max number of asteroids */
+
+#define ASTEROID_GROUP 2 /* task group of asteroids */
+
+/* Astro constants */
+#ifdef ASTRO_MOVE
+#define ASTRO_Y (GB_YMAX+GB_YMIN)/2 /* Y position of the astro */
+#else
+#define ASTRO_Y GB_YMAX-22 /* Y position of the astro */
+#endif
+#define ASTRO_X (GB_XMAX+GB_XMIN)/2 /* X position of the astro */
+#define ASTRO_MAX_VEL ASTRO_VEL_INC*5 /* Max astro velocity */
+#ifdef ASTRO_MOVE
+#define ASTRO_MAX_GRAD 180 /* Max astro angle */
+#else
+#define ASTRO_MAX_GRAD 80 /* Max astro angle */
+#endif
+#define ASTRO_GRAD_INC 10 /* angular variation */
+#define ASTRO_VEL_INC 3 /* velocity variation */
+#define ASTRO_RADIUS 16 /* Dimension of the astro */
+#define ASTRO_PERIOD 10000
+#define ASTRO_MOVE_PERIOD 5000
+#define ASTRO_WCET 300
+
+/* Shot constants */
+#define SHOT_RADIUS 1 /* radius of the shot */
+#define SHOT_VEL 35 /* speed of the shot */
+#define SHOT_NMAX 30 /* max number of shots */
+
+#define SHOT_GROUP 3 /* task group of shots */
+
+#define SHOT_PERIOD 10000
+#define SHOT_WCET 500
+
+/* Rock constants */
+#define ROCK_RADIUS_I 8 /* initial radius of the rock */
+#define ROCK_RADIUS_S 4 /* radius of the rock after one shot */
+#define ROCK_VEL 6 /* speed of the rock */
+#define ROCK_NMAX 8 /* max number of rocks */
+
+#define ROCK_GROUP 4 /* task group of rocks */
+
+#define ROCK_PERIOD 20000
+#define ROCK_WCET 500
+
+/* Statistic constants */
+#define ENERGY_INIT 200
+#define ENERGY_SHOT 2
+#define ENERGY_GOT 10
+#define SCORE_GOT 2
+#define LIVES_INIT 3
+
+#define STAT_PERIOD 400000
+#define STAT_WCET 400
+
+/* Statistic constants */
+#define LOOK_PERIOD 10000
+#define LOOK_WCET 4000
+
+typedef struct {
+ PID pid;
+ int x, y, r;
+} rock_pos;
+
+typedef struct {
+ int i;
+ int x, y, r;
+} rock_ini;
+
+double dist_xy(int x1, int y1, int x2, int y2);
+void draw_rock(int x, int y, int r, int c);
+void rock_create(rock_ini* ri);
+void frame_astro();
+void frame_stat();
+void init_astro();
+void init_stat();
+void init_rock();
+void reset_astro();
+void reset_rock();
+void start_astro();
+void start_rock();
+void reset_game();
+
+extern sem_t mx_mat, mx_grf; /* mutex semaphores */
+extern sem_t mx_pos, mx_vel; /* mutex semaphores */
+extern sem_t mx_xy, mx_rk, mx_rn; /* mutex semaphores */
+extern sem_t mx_st_scr, mx_st_nrg; /* mutex semaphores */
+extern sem_t mx_st_kil, mx_st_liv; /* mutex semaphores */
+extern int nshot; /* number of shot active */
+extern int nrock; /* number of rock active */
+extern int astro_x, astro_y; /* astro position */
+extern int astro_grad; /* astro angolar position */
+extern int astro_vel; /* astro velocity */
+extern int score; /* current player score */
+extern int energy; /* current player energy */
+extern int enemy; /* current player strikes */
+extern int lives; /* current player lives*/
+extern int kill_rock; /* kill active rocks */
+extern int kill_shot; /* kill active shots */
+extern int freez_astro; /* turn of control pad */
+extern int crash; /* astro vs. rock */
+extern rock_pos rocks[ROCK_NMAX]; /* rocks position */
+extern rock_ini rock_new;
Index: rel_1_4/astro/initfile.c
===================================================================
--- rel_1_4/astro/initfile.c (nonexistent)
+++ rel_1_4/astro/initfile.c (revision 1522)
@@ -0,0 +1,167 @@
+/*
+ * Project: S.Ha.R.K
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+#include "kernel/kern.h"
+#include "modules/edf.h"
+#include "modules/hardcbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrup Server */
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ HCBS_register_level(HCBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
Index: rel_1_4/astro/astro.c
===================================================================
--- rel_1_4/astro/astro.c (nonexistent)
+++ rel_1_4/astro/astro.c (revision 1522)
@@ -0,0 +1,575 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include "asteroid.h"
+
+int nshot; /* number of shot active */
+int astro_x, astro_y; /* astro position */
+int astro_grad; /* astro angolar position */
+PID pid_TR, pid_TL; /* pid of turn tasks */
+int astro_vel; /* astro speed */
+PID pid_SU, pid_SD; /* pid of acc tasks */
+PID pid_SZ, pid_FL; /* pid of acc tasks */
+int freez_astro; /* turn of pad*/
+int kill_shot;
+
+rock_ini rock_new;
+
+TASK shot(int i)
+{
+ int x, y; /* shot graphic position */
+ int ox, oy; /* shot old position */
+ int x0, y0; /* shot initial position */
+ float vx, vy; /* shot speed */
+ float ty, tx;
+ float dt;
+ float a_rad;
+ int a_vel;
+
+ int rx, ry, rr;
+ PID rp;
+
+ sem_wait(&mx_xy);
+ y = oy = y0 = astro_y;
+ x = ox = x0 = astro_x;
+ sem_post(&mx_xy);
+
+ sem_wait(&mx_pos);
+ a_rad = astro_grad * PI / 180.;
+ sem_post(&mx_pos);
+ sem_wait(&mx_vel);
+ a_vel = astro_vel;
+ sem_post(&mx_vel);
+ sem_wait(&mx_mat);
+ vx = - (SHOT_VEL + a_vel) * sin(a_rad);
+ vy = - (SHOT_VEL + a_vel) * cos(a_rad);
+ sem_post(&mx_mat);
+ tx = 0;
+ ty = 0;
+ dt = ((float)SHOT_PERIOD)/100000;
+
+ while (1) {
+ y = y0 + vy * ty;
+ x = x0 + vx * tx;
+
+ sem_wait(&mx_grf);
+ grx_disc(ox, oy, SHOT_RADIUS, RGB_BLACK);
+ sem_post(&mx_grf);
+ ox = x;
+ oy = y;
+
+ if ((kill_shot)||(crash)||(y < GB_YMIN+SHOT_RADIUS)||(x < GB_XMIN+SHOT_RADIUS)||(x > GB_XMAX-SHOT_RADIUS)||(y > GB_YMAX-SHOT_RADIUS)){
+ nshot--;
+ return 0;
+ }
+
+ for ( i=0; i<ROCK_NMAX; i++ ) {
+ sem_wait(&mx_rk);
+ rp = rocks[i].pid;
+ rx = rocks[i].x;
+ ry = rocks[i].y;
+ rr = rocks[i].r;
+ sem_post(&mx_rk);
+
+ if ((rp!=NIL) && (dist_xy(x, y, rx, ry) < (SHOT_RADIUS+rr))) {
+ draw_rock(rx, ry, rr, RGB_BLACK);
+ if (rr == ROCK_RADIUS_I) {
+ sem_wait(&mx_rk);
+ rocks[i].r = ROCK_RADIUS_S;
+ sem_post(&mx_rk);
+ sem_wait(&mx_rn);
+ rock_new.r = ROCK_RADIUS_S;
+ rock_new.x = rx;
+ rock_new.y = ry;
+ rock_new.i = 0;
+ sem_post(&mx_rn);
+ sem_wait(&mx_st_scr);
+ score += SCORE_GOT;
+ sem_post(&mx_st_scr);
+ } else {
+ task_kill(rp);
+ sem_wait(&mx_rk);
+ rocks[i].pid = NIL;
+ sem_post(&mx_rk);
+ nrock--;
+ sem_wait(&mx_st_scr);
+ score += 2*SCORE_GOT;
+ sem_post(&mx_st_scr);
+ }
+ sem_wait(&mx_st_nrg);
+ energy += ENERGY_GOT;
+ sem_post(&mx_st_nrg);
+ sem_wait(&mx_st_kil);
+ enemy++;
+ sem_post(&mx_st_kil);
+ nshot--;
+ return 0;
+ }
+ }
+
+ sem_wait(&mx_grf);
+ grx_disc(ox, oy, SHOT_RADIUS, RGB_RED);
+ sem_post(&mx_grf);
+
+ ty += dt;
+ tx += dt;
+
+ task_endcycle();
+ }
+}
+
+TASK astro()
+{
+ float astro_rad;
+ int ox, oy;
+ float s, c;
+
+ //leggo posizione
+ sem_wait(&mx_pos);
+ astro_rad = astro_grad * PI / 180.;
+ sem_post(&mx_pos);
+ sem_wait(&mx_mat);
+ s = -sin(astro_rad);
+ c = -cos(astro_rad);
+ sem_post(&mx_mat);
+ sem_wait(&mx_xy);
+ ox = astro_x;
+ oy = astro_y;
+ sem_post(&mx_xy);
+
+ while (1) {
+
+ sem_wait(&mx_grf);
+ //DRAW SHADOW ASTRO
+ grx_line(ox + 15.*s , oy + 15.*c , ox - 5.*c - 9.*s, oy + 5.*s - 9.*c, RGB_BLACK);
+ grx_line(ox + 15.*s , oy + 15.*c , ox + 5.*c - 9.*s, oy - 5.*s - 9.*c, RGB_BLACK);
+ grx_line(ox , oy , ox - 12.*c - 9.*s, oy + 12.*s - 9.*c, RGB_BLACK);
+ grx_line(ox , oy , ox + 12.*c - 9.*s, oy - 12.*s - 9.*c, RGB_BLACK);
+ grx_line(ox - 12.*c - 9.*s, oy + 12.*s - 9.*c, ox + 12.*c - 9.*s, oy - 12.*s - 9.*c, RGB_BLACK);
+ sem_post(&mx_grf);
+
+ sem_wait(&mx_pos);
+ astro_rad = astro_grad * PI / 180.;
+ sem_post(&mx_pos);
+ sem_wait(&mx_mat);
+ s = -sin(astro_rad);
+ c = -cos(astro_rad);
+ sem_post(&mx_mat);
+ sem_wait(&mx_xy);
+ ox = astro_x;
+ oy = astro_y;
+ sem_post(&mx_xy);
+
+ sem_wait(&mx_grf);
+ //DRAW ASTRO
+ grx_line(ox + 15.*s , oy + 15.*c , ox - 5.*c - 9.*s, oy + 5.*s - 9.*c, RGB_WHITE);
+ grx_line(ox + 15.*s , oy + 15.*c , ox + 5.*c - 9.*s, oy - 5.*s - 9.*c, RGB_WHITE);
+ grx_line(ox , oy , ox - 12.*c - 9.*s, oy + 12.*s - 9.*c, RGB_WHITE);
+ grx_line(ox , oy , ox + 12.*c - 9.*s, oy - 12.*s - 9.*c, RGB_WHITE);
+ grx_line(ox - 12.*c - 9.*s, oy + 12.*s - 9.*c, ox + 12.*c - 9.*s, oy - 12.*s - 9.*c, RGB_WHITE);
+ sem_post(&mx_grf);
+
+/* {
+ int xxx;
+ for (xxx=0; xxx<10000; xxx++);
+ }*/
+
+ task_endcycle();
+ }
+}
+
+TASK look()
+{
+ while (1) {
+ if (crash) {
+ reset_rock();
+ reset_astro();
+ if (nrock==0) {
+ reset_game();
+ crash = 0;
+ }
+ }
+ task_endcycle();
+ }
+}
+
+TASK turn(int i)
+{
+
+ while (1) {
+
+ sem_wait(&mx_pos);
+ if (i==0)
+ astro_grad += 180;
+ else {
+ astro_grad += i;
+ }
+ if (astro_grad < -180) astro_grad += 360;
+ if (astro_grad > 180) astro_grad -= 360;
+ if (astro_grad < -ASTRO_MAX_GRAD) astro_grad = -ASTRO_MAX_GRAD;
+ if (astro_grad > ASTRO_MAX_GRAD) astro_grad = ASTRO_MAX_GRAD;
+ sem_post(&mx_pos);
+
+ task_endcycle();
+ }
+}
+
+TASK speed(int i)
+{
+
+ while (1) {
+
+ sem_wait(&mx_vel);
+ if (i==0)
+ astro_vel = 0;
+ else {
+ astro_vel += i;
+ if (astro_vel < -ASTRO_MAX_VEL) astro_vel = -ASTRO_MAX_VEL;
+ if (astro_vel > ASTRO_MAX_VEL) astro_vel = ASTRO_MAX_VEL;
+ }
+ sem_post(&mx_vel);
+
+ task_endcycle();
+ }
+}
+
+TASK move()
+{
+ int dv, x, y;
+ float drad;
+
+ drad = x = y = 0;
+
+ while (1) {
+
+#ifdef ASTRO_MOVE
+ sem_wait(&mx_pos);
+ drad = astro_grad * PI / 180.;
+ sem_post(&mx_pos);
+#endif
+ sem_wait(&mx_vel);
+ dv = astro_vel;
+ sem_post(&mx_vel);
+ sem_wait(&mx_xy);
+ x = astro_x;
+ y = astro_y;
+ sem_post(&mx_xy);
+#ifdef ASTRO_MOVE
+ x -= dv * sin(drad);
+ y -= dv * cos(drad);
+ if (x < GB_XMIN + ASTRO_RADIUS) x = GB_XMAX - ASTRO_RADIUS;
+ if (x > GB_XMAX - ASTRO_RADIUS) x = GB_XMIN + ASTRO_RADIUS;
+ if (y < GB_YMIN + ASTRO_RADIUS) y = GB_YMAX - ASTRO_RADIUS;
+ if (y > GB_YMAX - ASTRO_RADIUS) y = GB_YMIN + ASTRO_RADIUS;
+#else
+ x += dv;
+ if (x < GB_XMIN + 2*ASTRO_RADIUS) {
+ x = GB_XMIN + 2*ASTRO_RADIUS;
+ sem_wait(&mx_vel);
+ astro_vel = - astro_vel - ASTRO_VEL_INC;
+ sem_post(&mx_vel);
+ }
+ if (x > GB_XMAX - 2*ASTRO_RADIUS) {
+ x = GB_XMAX - 2*ASTRO_RADIUS;
+ sem_wait(&mx_vel);
+ astro_vel = - astro_vel + ASTRO_VEL_INC;
+ sem_post(&mx_vel);
+ }
+#endif
+ sem_wait(&mx_xy);
+ astro_x = x;
+ astro_y = y;
+ sem_post(&mx_xy);
+
+ task_endcycle();
+ }
+}
+
+void pad(KEY_EVT *k)
+{
+ if (freez_astro) return;
+ if (k->scan == KEY_O) task_activate(pid_TL);
+ if (k->scan == KEY_P) task_activate(pid_TR);
+ if (k->scan == KEY_S) task_activate(pid_SZ);
+ if (k->scan == KEY_Z) task_activate(pid_SD);
+#ifdef ASTRO_MOVE
+ if (k->scan == KEY_A) task_activate(pid_SU);
+ if (k->scan == KEY_F) task_activate(pid_FL);
+#else
+ if (k->scan == KEY_X) task_activate(pid_SU);
+#endif
+}
+
+void new_shot(KEY_EVT *k)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+
+ if ((nshot >= SHOT_NMAX)||(freez_astro)||(kill_shot)||(crash)) return;
+
+ soft_task_default_model(mp);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_arg(mp, (void *)nshot);
+ soft_task_def_group(mp, SHOT_GROUP);
+ soft_task_def_met(mp, SHOT_WCET);
+ soft_task_def_period(mp,SHOT_PERIOD);
+ soft_task_def_usemath(mp);
+ pid = task_create("Shot", shot, &mp, NULL);
+
+ if (pid != NIL) {
+ task_activate(pid);
+ nshot++;
+ sem_wait(&mx_st_nrg);
+ energy -= ENERGY_SHOT;
+ sem_post(&mx_st_nrg);
+ }
+}
+
+void start_astro()
+{
+ freez_astro = 0;
+ kill_shot = 0;
+}
+
+void reset_astro()
+{
+ freez_astro = 1;
+ sem_wait(&mx_xy);
+ astro_x = ASTRO_X;
+ astro_y = ASTRO_Y;
+ sem_post(&mx_xy);
+ sem_wait(&mx_pos);
+ astro_grad = 0;
+ sem_post(&mx_pos);
+ sem_wait(&mx_vel);
+ astro_vel = 0;
+ sem_post(&mx_vel);
+ kill_shot = 1;
+}
+
+void create_astro_task()
+{
+ HARD_TASK_MODEL mp;
+ SOFT_TASK_MODEL ms;
+ PID pid;
+ int incr;
+
+ soft_task_default_model(ms);
+ soft_task_def_ctrl_jet(ms);
+ soft_task_def_arg(ms, (void *)nshot);
+ soft_task_def_met(ms, ASTRO_WCET);
+ soft_task_def_period(ms,ASTRO_PERIOD);
+ soft_task_def_usemath(ms);
+ pid = task_create("Astro", astro, &ms, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <astro>\n");
+ sys_end();
+ return;
+ } else
+ task_activate(pid);
+
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_wcet(mp,LOOK_WCET);
+ hard_task_def_mit(mp, LOOK_PERIOD);
+ hard_task_def_usemath(mp);
+ pid = task_create("Taken", look, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <Taken>\n");
+ sys_end();
+ return;
+ } else
+ task_activate(pid);
+
+ incr = ASTRO_GRAD_INC;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_MOVE_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_TL = task_create("TurnLeft", turn, &mp, NULL);
+ if (pid_TL == NIL) {
+ sys_shutdown_message("Could not create task <Turn L>\n");
+ sys_end();
+ return;
+ }
+
+ incr = - ASTRO_GRAD_INC;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_MOVE_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_TR = task_create("TurnRight", turn, &mp, NULL);
+ if (pid_TR == NIL) {
+ sys_shutdown_message("Could not create task <Turn R>\n");
+ sys_end();
+ return;
+ }
+
+ incr = ASTRO_VEL_INC;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_SU = task_create("SpeedUP", speed, &mp, NULL);
+ if (pid_SU == NIL) {
+ sys_shutdown_message("Could not create task <Speed UP>\n");
+ sys_end();
+ return;
+ }
+
+ incr = - ASTRO_VEL_INC;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_SD = task_create("SpeedDOWN", speed, &mp, NULL);
+ if (pid_SD == NIL) {
+ sys_shutdown_message("Could not create task <Speed DOWN>\n");
+ sys_end();
+ return;
+ }
+
+ incr = 0;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_SZ = task_create("SpeedZERO", speed, &mp, NULL);
+ if (pid_SZ == NIL) {
+ sys_shutdown_message("Could not create task <Speed ZERO>\n");
+ sys_end();
+ return;
+ }
+
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, 6*ASTRO_PERIOD);
+ hard_task_def_usemath(mp);
+ pid = task_create("MoveAstro", move, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <MoveAstro>\n");
+ sys_end();
+ return;
+ } else
+ task_activate(pid);
+
+#ifdef ASTRO_MOVE
+ incr = 0;
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)incr);
+ hard_task_def_wcet(mp,ASTRO_WCET);
+ hard_task_def_mit(mp, ASTRO_PERIOD);
+ hard_task_def_aperiodic(mp);
+ hard_task_def_usemath(mp);
+ pid_FL = task_create("FlipAstro", turn, &mp, NULL);
+ if (pid_FL == NIL) {
+ sys_shutdown_message("Could not create task <Flip Astro>\n");
+ sys_end();
+ return;
+ }
+#endif
+}
+
+void frame_astro()
+{
+ grx_text("Game", 10, 45, RGB_BLUE, RGB_BLACK);
+ grx_line(GB_XMIN-2,55,GB_XMAX+2,55,RGB_RED);
+
+ grx_rect(GB_XMIN-3, GB_YMIN-3, GB_XMAX+3, GB_YMAX+3, RGB_GREEN);
+
+#ifndef ASTRO_MOVE
+ grx_rect(GB_XMIN-1, GB_YMAX-1, GB_XMAX+1, GB_YMAX+1, RGB_CYAN);
+#endif
+}
+
+void init_astro()
+{
+ KEY_EVT k;
+
+ crash = 0;
+ freez_astro = 1;
+ kill_shot = 1;
+ astro_vel = 0;
+ astro_grad = 0;
+ astro_x = ASTRO_X;
+ astro_y = ASTRO_Y;
+
+ create_astro_task();
+
+ k.flag = 0;
+ k.scan = KEY_SPC;
+ k.ascii = ' ';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,new_shot,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_O;
+ k.ascii = 'o';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_P;
+ k.ascii = 'p';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_S;
+ k.ascii = 's';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_Z;
+ k.ascii = 'z';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+#ifdef ASTRO_MOVE
+ k.flag = 0;
+ k.scan = KEY_A;
+ k.ascii = 'a';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_F;
+ k.ascii = 'f';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+#else
+ k.flag = 0;
+ k.scan = KEY_X;
+ k.ascii = 'x';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,pad,FALSE);
+
+#endif
+}
Index: rel_1_4/astro/asteroid.c
===================================================================
--- rel_1_4/astro/asteroid.c (nonexistent)
+++ rel_1_4/astro/asteroid.c (revision 1522)
@@ -0,0 +1,110 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include "asteroid.h"
+#include <kernel/kern.h>
+
+sem_t mx_mat, mx_grf, mx_pos, mx_vel, mx_xy, mx_rk, mx_rn; /* mutex semaphores */
+sem_t mx_st_nrg, mx_st_scr, mx_st_kil, mx_st_liv; /* mutex semaphores */
+
+double dist_xy(int x1, int y1, int x2, int y2)
+{
+ double dst;
+ int dx, dy;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+ sem_wait(&mx_mat);
+ dst = sqrt(dx*dx + dy*dy);
+ sem_post(&mx_mat);
+
+ return dst;
+
+}
+
+void frame_main()
+{
+
+ grx_clear(RGB_BLACK);
+
+#ifdef ASTRO_MOVE
+ grx_text("S.Ha.R.K. - Asteroid 2002 RC1", 0, 0, RGB_GREEN, RGB_BLACK );
+#else
+ grx_text("S.Ha.R.K. - Defender 2002 RC1", 0, 0, RGB_GREEN, RGB_BLACK );
+#endif
+ grx_text("by Marinoni Mauro" ,24,16, RGB_GREEN, RGB_BLACK );
+ grx_text(" Scaricabarozzi Mattia" ,24,24, RGB_GREEN, RGB_BLACK );
+
+ grx_text("Ctrl-C, Ctrr-C: exit" ,300, 0, RGB_GRAY, RGB_BLACK );
+ grx_text("O-P : turn left/right" ,300,16, RGB_GRAY, RGB_BLACK );
+#ifdef ASTRO_MOVE
+ grx_text("A-Z : speed up/down" ,300,24, RGB_GRAY, RGB_BLACK );
+ grx_text("S : stop engine" ,300,32, RGB_GRAY, RGB_BLACK );
+ grx_text("F : flip astro" ,300,40, RGB_GRAY, RGB_BLACK );
+#else
+ grx_text("Z-X : move left/right" ,300,24, RGB_GRAY, RGB_BLACK );
+#endif
+ grx_text("Space : fire" ,485,16, RGB_GRAY, RGB_BLACK );
+ grx_text("N : new game" ,485,24, RGB_GRAY, RGB_BLACK );
+ grx_text("B : begin game" ,485,32, RGB_GRAY, RGB_BLACK );
+
+ frame_stat();
+ frame_astro();
+}
+
+void end_func(KEY_EVT *k) {
+
+ sys_end();
+
+}
+
+int main(int argc, char **argv)
+{
+ KEY_EVT k;
+ TIME seme;
+
+ k.flag = CNTR_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,end_func,FALSE);
+
+ k.flag = CNTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,end_func,FALSE);
+
+ sem_init(&mx_mat,0,1);
+ sem_init(&mx_grf,0,1);
+ sem_init(&mx_pos,0,1);
+ sem_init(&mx_vel,0,1);
+ sem_init(&mx_xy ,0,1);
+ sem_init(&mx_rk ,0,1);
+ sem_init(&mx_rn ,0,1);
+ sem_init(&mx_st_scr,0,1);
+ sem_init(&mx_st_nrg,0,1);
+ sem_init(&mx_st_kil,0,1);
+ sem_init(&mx_st_liv,0,1);
+
+ seme = sys_gettime(NULL);
+ srand(seme);
+
+ frame_main();
+
+ init_stat();
+ init_astro();
+ init_rock();
+
+ return 0;
+
+}
Index: rel_1_4/astro/stat.c
===================================================================
--- rel_1_4/astro/stat.c (nonexistent)
+++ rel_1_4/astro/stat.c (revision 1522)
@@ -0,0 +1,161 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+#include "asteroid.h"
+#include <string.h>
+
+int score; /* current player score */
+int energy; /* current player energy */
+int enemy; /* current player killed enemy */
+int lives; /* current player lives */
+int crash; /* astro vs. rock */
+
+TASK stat_write()
+{
+ char st[20];
+ int l;
+
+ while (1) {
+
+ sem_wait(&mx_st_scr);
+ sprintf(st, "%6d", score);
+ sem_post(&mx_st_scr);
+ sem_wait(&mx_grf);
+ grx_text(st, GB_XMAX+80, GB_YMIN+ 8, RGB_YELLOW, RGB_BLACK);
+ sem_post(&mx_grf);
+
+ sem_wait(&mx_st_nrg);
+ sprintf(st, "%6d", energy);
+ if (energy <= 0) crash = 1;
+ sem_post(&mx_st_nrg);
+ sem_wait(&mx_grf);
+ grx_text(st, GB_XMAX+80, GB_YMIN+24, RGB_YELLOW, RGB_BLACK);
+ sem_post(&mx_grf);
+
+ sem_wait(&mx_st_kil);
+ sprintf(st, "%6d", enemy);
+ sem_post(&mx_st_kil);
+ sem_wait(&mx_grf);
+ grx_text(st, GB_XMAX+80, GB_YMIN+40, RGB_YELLOW, RGB_BLACK);
+ sem_post(&mx_grf);
+
+ strcpy(st,LIVE_X);
+ sem_wait(&mx_st_liv);
+ l = lives;
+ sem_post(&mx_st_liv);
+ if (l == 0) strcpy(st,LIVE_0);
+ if (l == 1) strcpy(st,LIVE_1);
+ if (l == 2) strcpy(st,LIVE_2);
+ if (l == 3) strcpy(st,LIVE_3);
+ if (l == 4) strcpy(st,LIVE_4);
+ if (l == 5) strcpy(st,LIVE_5);
+ if (l == 6) strcpy(st,LIVE_6);
+ sem_wait(&mx_grf);
+ grx_text(st, GB_XMAX+80, GB_YMIN+56, RGB_YELLOW, RGB_BLACK);
+ sem_post(&mx_grf);
+
+ task_endcycle();
+ }
+}
+
+void reset_game()
+{
+ sem_wait(&mx_st_liv);
+ if (lives > 0) {
+ lives--;
+ sem_post(&mx_st_liv);
+ } else {
+ lives = LIVES_INIT;
+ sem_post(&mx_st_liv);
+
+ sem_wait(&mx_st_scr);
+ score = 0;
+ sem_post(&mx_st_scr);
+
+ sem_wait(&mx_st_kil);
+ enemy = 0;
+ sem_post(&mx_st_kil);
+ }
+
+ sem_wait(&mx_st_nrg);
+ energy = ENERGY_INIT;
+ sem_post(&mx_st_nrg);
+}
+
+void new_game(KEY_EVT *k)
+{
+ reset_rock();
+ reset_astro();
+ reset_game();
+}
+
+void start_game(KEY_EVT *k)
+{
+ start_astro();
+ start_rock();
+}
+
+void frame_stat()
+{
+ grx_text("Statistics", GB_XMAX+10, 45, RGB_BLUE, RGB_BLACK);
+ grx_line(GB_XMAX+8,55,640-8,55,RGB_RED);
+
+ grx_rect(GB_XMAX+7, GB_YMIN-3, 640-6, GB_YMIN+70, RGB_GREEN);
+ grx_text("Score : ", GB_XMAX+15, GB_YMIN+ 8, RGB_CYAN, RGB_BLACK);
+ grx_text("Energy : ", GB_XMAX+15, GB_YMIN+24, RGB_CYAN, RGB_BLACK);
+ grx_text("Enemy : ", GB_XMAX+15, GB_YMIN+40, RGB_CYAN, RGB_BLACK);
+ grx_text("Lives : ", GB_XMAX+15, GB_YMIN+56, RGB_CYAN, RGB_BLACK);
+}
+
+void create_stat_task()
+{
+ SOFT_TASK_MODEL ms;
+ PID pid;
+
+ soft_task_default_model(ms);
+ soft_task_def_ctrl_jet(ms);
+ soft_task_def_met(ms, STAT_WCET);
+ soft_task_def_period(ms,STAT_PERIOD);
+ soft_task_def_usemath(ms);
+ pid = task_create("StatWrite", stat_write, &ms, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <StatWrite>\n");
+ sys_end();
+ return;
+ } else
+ task_activate(pid);
+}
+
+void init_stat()
+{
+ KEY_EVT k;
+
+ score = 0;
+ enemy = 0;
+ energy = ENERGY_INIT;
+ lives = LIVES_INIT;
+
+ create_stat_task();
+
+ k.flag = 0;
+ k.scan = KEY_N;
+ k.ascii = 'n';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,new_game,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_B;
+ k.ascii = 'b';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,start_game,FALSE);
+}
+
Index: rel_1_4/input/makefile
===================================================================
--- rel_1_4/input/makefile (nonexistent)
+++ rel_1_4/input/makefile (revision 1522)
@@ -0,0 +1,28 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS= input speak key mouse joy
+
+include $(BASE)/config/example.mk
+
+input:
+ make -f $(SUBMAKE) APP=input INIT= OTHEROBJS="initfile.o" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__ __FB__"
+
+speak:
+ make -f $(SUBMAKE) APP=speak INIT= OTHEROBJS="initspk.o" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__"
+
+key:
+ make -f $(SUBMAKE) APP=key INIT= OTHEROBJS="initkey.o" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__"
+
+mouse:
+ make -f $(SUBMAKE) APP=mouse INIT= OTHEROBJS="initcur.o" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__"
+
+joy:
+ make -f $(SUBMAKE) APP=joy INIT= OTHEROBJS="initjoy.o" SHARKOPT="__INPUT__ __LINUXC26__ __PCI__"
+
Index: rel_1_4/input/input.c
===================================================================
--- rel_1_4/input/input.c (nonexistent)
+++ rel_1_4/input/input.c (revision 1522)
@@ -0,0 +1,452 @@
+
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <drivers/shark_fb26.h>
+
+#include <drivers/shark_mouse26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_spk26.h>
+#include <drivers/shark_joy26.h>
+
+#define RGB_BLACK rgb16( 0, 0, 0)
+#define RGB_GRAY rgb16(127,127,127)
+#define RGB_WHITE rgb16(255,255,255)
+#define RGB_RED rgb16(255, 0, 0)
+#define RGB_GREEN rgb16( 0,255, 0)
+#define RGB_BLUE rgb16( 0, 0,255)
+#define RGB_YELLOW rgb16(255,255, 0)
+#define RGB_MAGENTA rgb16(255, 0,255)
+#define RGB_CYAN rgb16( 0,255,255)
+#define RGB_D_RED rgb16(127, 0, 0)
+#define RGB_D_GREEN rgb16( 0,127, 0)
+#define RGB_D_BLUE rgb16( 0, 0,127)
+#define RGB_D_YELLOW rgb16(127,127, 0)
+#define RGB_D_MAGENTA rgb16(127, 0,127)
+#define RGB_D_CYAN rgb16( 0,127,127)
+
+void my_sysend(KEY_EVT *e)
+{
+ sys_end();
+}
+
+void no_note(KEY_EVT *e)
+{
+ speaker_sound(0, 0);
+}
+
+void my_note(KEY_EVT *e)
+{
+ switch (e->scan) {
+ case KEY_Q:
+ speaker_sound(262, 0); /* DO */
+ break;
+ case KEY_W:
+ speaker_sound(277, 0); /* DO# */
+ break;
+ case KEY_E:
+ speaker_sound(294, 0); /* RE */
+ break;
+ case KEY_R:
+ speaker_sound(311, 0); /* RE# */
+ break;
+ case KEY_T:
+ speaker_sound(330, 0); /* MI */
+ break;
+ case KEY_Y:
+ speaker_sound(349, 0); /* FA */
+ break;
+ case KEY_U:
+ speaker_sound(370, 0); /* FA# */
+ break;
+ case KEY_I:
+ speaker_sound(392, 0); /* SOL */
+ break;
+ case KEY_O:
+ speaker_sound(415, 0); /* SOL# */
+ break;
+ case KEY_P:
+ speaker_sound(440, 0); /* LA */
+ break;
+ case KEY_BRL:
+ speaker_sound(466, 0); /* LA# */
+ break;
+ case KEY_BRR:
+ speaker_sound(494, 0); /* SI */
+ break;
+ }
+}
+
+TASK my_getjoy(void *arg)
+{
+ int a0, a1, a2, a3, btn;
+ char st[20];
+
+ while (1) {
+ joy_getstatus(&a0, &a1, &a2, &a3, &btn);
+
+ sprintf(st, "X Axis : %6d ", a0);
+ grx_text(st, 100, 64, RGB_CYAN, RGB_BLACK);
+ sprintf(st, "Y Axis : %6d ", a1);
+ grx_text(st, 100, 114, RGB_CYAN, RGB_BLACK);
+ sprintf(st, "Buttons: %2x ", btn);
+ grx_text(st, 100, 164, RGB_CYAN, RGB_BLACK);
+
+ task_endcycle();
+ if (btn == 0xF)
+ my_sysend(NULL);
+ }
+}
+
+TASK my_getch(void *arg)
+{
+#define MYNCHAR 25
+
+ BYTE ch;
+ int i = 0;
+ char st[20];
+
+ while (1) {
+ ch = keyb_getch(NON_BLOCK);
+ if (ch) {
+ if (ch == BACKSPACE) { //backspace
+ i--;
+ //ch = 0x20;
+ }
+ if (ch == ENTER) { //enter
+ i = ((i / MYNCHAR) + 1) * MYNCHAR - 1;
+ ch = 0x20;
+ }
+ sprintf(st, "%c", ch);
+ grx_text(st, 340 + 10 * (i%MYNCHAR), 25 + 20 * (i/MYNCHAR), RGB_BLUE, RGB_BLACK);
+
+ if (ch == BACKSPACE) //backspace
+ i--;
+ if (++i >= MYNCHAR * 9) {
+ i = 0;
+ grx_box(315, 15, 623, 223, RGB_BLACK);
+ }
+ }
+
+ task_endcycle();
+ }
+}
+
+void my_mouse(MOUSE_EVT *e)
+{
+ char st[20];
+ char pressed = 0;
+
+ sprintf(st, "X Axis : %3d (%4d)", e->x, e->dx);
+ grx_text(st, 100, 280, RGB_YELLOW, RGB_BLACK);
+ sprintf(st, "Y Axis : %3d (%4d)", e->y, e->dy);
+ grx_text(st, 100, 320, RGB_YELLOW, RGB_BLACK);
+ sprintf(st, "Z Axis : %3d (%4d)", e->z, e->dz);
+ grx_text(st, 100, 360, RGB_YELLOW, RGB_BLACK);
+ sprintf(st, "Buttons: %6x ", (int)e->buttons);
+ grx_text(st, 100, 400, RGB_YELLOW, RGB_BLACK);
+
+ if ((e->x > 377) && (e->x < 401) && (e->y > 300) && (e->y < 360) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(277, 0); /* DO# */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 407) && (e->x < 431) && (e->y > 300) && (e->y < 360) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(311, 0); /* RE# */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 467) && (e->x < 491) && (e->y > 300) && (e->y < 360) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(370, 0); /* FA# */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 497) && (e->x < 521) && (e->y > 300) && (e->y < 360) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(415, 0); /* SOL# */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 527) && (e->x < 551) && (e->y > 300) && (e->y < 360) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(466, 0); /* LA# */
+ pressed = 1;
+ }
+ return;
+ }
+
+ if ((e->x > 360) && (e->x < 388) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)){
+ if (!pressed) {
+ speaker_sound(262, 0); /* DO */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 390) && (e->x < 418) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(294, 0); /* RE */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 420) && (e->x < 448) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(330, 0); /* MI */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 450) && (e->x < 478) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(349, 0); /* FA */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 480) && (e->x < 508) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(392, 0); /* SOL */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 510) && (e->x < 538) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(440, 0); /* LA */
+ pressed = 1;
+ }
+ return;
+ }
+ if ((e->x > 540) && (e->x < 568) && (e->y > 300) && (e->y < 400) && (e->buttons == MOUSE_LBUTTON)) {
+ if (!pressed) {
+ speaker_sound(494, 0); /* SI */
+ pressed = 1;
+ }
+ return;
+ }
+
+ speaker_sound(0, 0);
+ pressed = 0;
+}
+
+void graph_init(void)
+{
+ grx_rect( 4, 4, 634, 474, RGB_WHITE);
+ grx_rect( 14, 14, 304, 224, RGB_YELLOW);
+ grx_rect(314, 14, 624, 224, RGB_RED);
+ grx_rect( 14, 234, 304, 464, RGB_GREEN);
+ grx_rect(314, 234, 624, 464, RGB_BLUE);
+
+ /* Draw Teyboard */
+ grx_box(360, 300, 388, 400, RGB_WHITE); /* DO */
+ grx_box(390, 300, 418, 400, RGB_WHITE); /* RE */
+ grx_box(420, 300, 448, 400, RGB_WHITE); /* MI */
+ grx_box(450, 300, 478, 400, RGB_WHITE); /* FA */
+ grx_box(480, 300, 508, 400, RGB_WHITE); /* SOL */
+ grx_box(510, 300, 538, 400, RGB_WHITE); /* LA */
+ grx_box(540, 300, 568, 400, RGB_WHITE); /* SI */
+
+ grx_box(377, 301, 401, 360, RGB_BLACK); /* DO# */
+ grx_box(407, 301, 431, 360, RGB_BLACK); /* RE# */
+ grx_box(467, 301, 491, 360, RGB_BLACK); /* FA# */
+ grx_box(497, 301, 521, 360, RGB_BLACK); /* SOL# */
+ grx_box(527, 301, 551, 360, RGB_BLACK); /* LA# */
+}
+
+void start_sound(void)
+{
+ KEY_EVT ev;
+
+ speaker_sound(440, 400);
+ while ( (sys_gettime(NULL)/1000) < 1000);
+
+ ev.ascii = 'q';
+ ev.scan = KEY_Q;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'w';
+ ev.scan = KEY_W;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'e';
+ ev.scan = KEY_E;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'r';
+ ev.scan = KEY_R;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 't';
+ ev.scan = KEY_T;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'y';
+ ev.scan = KEY_Y;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'u';
+ ev.scan = KEY_U;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'i';
+ ev.scan = KEY_I;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'o';
+ ev.scan = KEY_O;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'p';
+ ev.scan = KEY_P;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = '[';
+ ev.scan = KEY_BRL;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = ']';
+ ev.scan = KEY_BRR;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+}
+
+int main(int argc, char **argv)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+
+ KEY_EVT ev;
+
+ ev.ascii = 'c';
+ ev.scan = KEY_C;
+ ev.status = KEY_PRESSED;
+ ev.flag = CNTL_BIT;
+ keyb_hook(ev, my_sysend, FALSE);
+ ev.flag = CNTR_BIT;
+ keyb_hook(ev, my_sysend, FALSE);
+
+ graph_init();
+
+ mouse_grxlimits(639, 479);
+ mouse_setposition(319, 239, 0);
+ mouse_hook(my_mouse);
+ mouse_grxcursor(ENABLE, 2);
+
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_met(mp,700);
+ soft_task_def_period(mp,10000);
+ soft_task_def_usemath(mp);
+ pid = task_create("Key_Print", my_getch, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <Key_Print>\n");
+ sys_end();
+ } else
+ task_activate(pid);
+
+ if (JOY26_installed()) {
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_met(mp,700);
+ soft_task_def_period(mp,10000);
+ soft_task_def_usemath(mp);
+ pid = task_create("Joy_Print", my_getjoy, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <Joy_Print>\n");
+ sys_end();
+ } else
+ task_activate(pid);
+ }
+
+ start_sound();
+ return 0;
+}
Index: rel_1_4/input/initspk.c
===================================================================
--- rel_1_4/input/initspk.c (nonexistent)
+++ rel_1_4/input/initspk.c (revision 1522)
@@ -0,0 +1,155 @@
+/*
+ * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ * Gerardo Lamastra <gerardo@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_spk26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ KEYB26_close();
+ SPEAK26_close();
+ INPUT26_close();
+
+ return 0;
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ SPEAK26_init();
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg) {
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/input/joy.c
===================================================================
--- rel_1_4/input/joy.c (nonexistent)
+++ rel_1_4/input/joy.c (revision 1522)
@@ -0,0 +1,76 @@
+
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <drivers/shark_joy26.h>
+
+TASK my_getjoy(void *arg) {
+
+ int a0, a1, a2, a3, btn;
+
+ while (1) {
+ joy_getstatus(&a0, &a1, &a2, &a3, &btn);
+ cprintf("(%6d %6d) %2x\n", a0, a1, btn);
+ task_endcycle();
+ if (btn == 0xF)
+ sys_end();
+ }
+}
+
+int main(int argc, char **argv)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+
+ if (!JOY26_installed()) {
+ cprintf("No Joystick found.");
+ sys_end();
+ }
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_met(mp,700);
+ soft_task_def_period(mp,10000);
+ soft_task_def_usemath(mp);
+ pid = task_create("Joy_Print", my_getjoy, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <Joy_Print>\n");
+ sys_end();
+ } else
+ task_activate(pid);
+
+ return 0;
+}
/rel_1_4/input/joy.c
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/input/initjoy.c
===================================================================
--- rel_1_4/input/initjoy.c (nonexistent)
+++ rel_1_4/input/initjoy.c (revision 1522)
@@ -0,0 +1,148 @@
+/*
+ * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ * Gerardo Lamastra <gerardo@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_joy26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ JOY26_close();
+ INPUT26_close();
+
+ return 0;
+}
+
+int device_drivers_init() {
+
+ LINUXC26_register_module();
+ INPUT26_init();
+
+ JOY26_init();
+
+ return 0;
+
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg) {
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
/rel_1_4/input/initjoy.c
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/input/key.c
===================================================================
--- rel_1_4/input/key.c (nonexistent)
+++ rel_1_4/input/key.c (revision 1522)
@@ -0,0 +1,106 @@
+
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <drivers/shark_keyb26.h>
+
+void my_sysclose(KEY_EVT *e)
+{
+ kern_printf("S.Ha.R.K. closed.\n\n");
+ sys_end();
+}
+
+TASK my_getch(void *arg) {
+
+ BYTE ch;
+
+ while (1) {
+ ch = keyb_getch(NON_BLOCK);
+ if (ch)
+ cprintf("%c", ch);
+ task_endcycle();
+ }
+}
+
+void my_pause(KEY_EVT *e){
+
+ TIME t;
+
+ cprintf("Start Pause.\n");
+ keyb_disable();
+ cprintf("Keyboard Disabled.\n");
+ t = sys_gettime(NULL);
+ while ( ( (sys_gettime(NULL) -t) / 1000) < 5000);
+ keyb_enable();
+ cprintf("Keyboard Enabled.\n");
+}
+
+int main(int argc, char **argv)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+
+ KEY_EVT ev;
+
+ ev.ascii = 'p';
+ ev.scan = KEY_P;
+ ev.status = KEY_PRESSED;
+ ev.flag = CNTR_BIT;
+ keyb_hook(ev, my_pause, FALSE);
+
+ ev.ascii = 'c';
+ ev.scan = KEY_C;
+ ev.status = KEY_PRESSED;
+ ev.flag = CNTR_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+ ev.flag = CNTL_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_met(mp,700);
+ soft_task_def_period(mp,1000);
+ soft_task_def_usemath(mp);
+ pid = task_create("Keyb_Print", my_getch, &mp, NULL);
+ if (pid == NIL) {
+ perror("Could not create task <Keyb_Print>");
+ sys_end();
+ } else
+ task_activate(pid);
+
+ return 0;
+}
Index: rel_1_4/input/mouse.c
===================================================================
--- rel_1_4/input/mouse.c (nonexistent)
+++ rel_1_4/input/mouse.c (revision 1522)
@@ -0,0 +1,95 @@
+
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <drivers/shark_mouse26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_spk26.h>
+
+void my_sysclose(KEY_EVT *e)
+{
+ mouse_txtcursor(DISABLE);
+
+ sys_end();
+}
+
+TASK my_putxy(void *arg) {
+
+ int x, y, z;
+ unsigned long btn;
+
+ clear();
+
+ while (1) {
+ mouse_getposition(&x, &y, &z, &btn);
+ place(10, 10);
+ cprintf("X: %2d - Y: %2d - Z: %3d - Btn: %4d\n", x, y, z, (int)btn);
+
+ task_endcycle();
+ }
+}
+
+int main(int argc, char **argv)
+{
+ SOFT_TASK_MODEL mp;
+ PID pid;
+ KEY_EVT ev;
+
+ ev.ascii = 'c';
+ ev.scan = KEY_C;
+ ev.status = KEY_PRESSED;
+ ev.flag = CNTL_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+ ev.flag = CNTR_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+
+ mouse_txtcursor(ENABLE);
+
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_met(mp,700);
+ soft_task_def_period(mp,1000);
+ soft_task_def_usemath(mp);
+ pid = task_create("Mouse_Print", my_putxy, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <Mouse_Print>\n");
+ my_sysclose(NULL);
+ } else
+ task_activate(pid);
+
+ return 0;
+}
/rel_1_4/input/mouse.c
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/input/initkey.c
===================================================================
--- rel_1_4/input/initkey.c (nonexistent)
+++ rel_1_4/input/initkey.c (revision 1522)
@@ -0,0 +1,160 @@
+/*
+ * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ * Gerardo Lamastra <gerardo@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ return 0;
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+void call_shutdown_task(void *arg) {
+
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
Index: rel_1_4/input/initcur.c
===================================================================
--- rel_1_4/input/initcur.c (nonexistent)
+++ rel_1_4/input/initcur.c (revision 1522)
@@ -0,0 +1,163 @@
+/*
+ * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ * Gerardo Lamastra <gerardo@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+#include "modules/intdrive.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_mouse26.h>
+#include <drivers/shark_keyb26.h>
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = 1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q, INTDRIVE_T, INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ return TICK;
+}
+
+int device_drivers_close() {
+
+ MOUSE26_close();
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+}
+
+int device_drivers_init() {
+
+ KEYB_PARMS kparms = BASE_KEYB;
+ MOUSE_PARMS mparms = BASE_MOUSE;
+
+ LINUXC26_register_module();
+ INPUT26_init();
+
+ /*keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ MOUSE26_init(&mparms);
+
+ return 0;
+
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task", shutdown_task_body, &nrt, NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg) {
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
/rel_1_4/input/initcur.c
Property changes:
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: rel_1_4/input/initfile.c
===================================================================
--- rel_1_4/input/initfile.c (nonexistent)
+++ rel_1_4/input/initfile.c (revision 1522)
@@ -0,0 +1,216 @@
+/*
+ * Project: HARTIK (HA-rd R-eal TI-me K-ernel)
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ * Gerardo Lamastra <gerardo@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://hartik.sssup.it
+ */
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+
+#include "kernel/kern.h"
+
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/hardcbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_mouse26.h>
+#include <drivers/shark_spk26.h>
+#include <drivers/shark_joy26.h>
+
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ HCBS_register_level(HCBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+ CABS_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ /* Create the shutdown task. It will be activated at RUNLEVEL SHUTDOWN */
+ set_shutdown_task();
+
+ /* Init the drivers */
+ device_drivers_init();
+
+ /* Set the shutdown task activation */
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task()
+{
+/* WARNING: the shutdown task is a background thread. It cannot execute if the system is overloaded */
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+}
+
+int device_drivers_init()
+{
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+ MOUSE_PARMS mparms = BASE_MOUSE;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ /* keyb_def_map(kparms, KEYMAP_IT);*/
+ keyb_def_ctrlC(kparms, NULL);
+ KEYB26_init(&kparms);
+
+ mouse_def_threshold(mparms, 5);
+ mouse_def_xmin(mparms, 0);
+ mouse_def_ymin(mparms, 0);
+ mouse_def_xmax(mparms, 639);
+ mouse_def_ymax(mparms, 479);
+ MOUSE26_init(&mparms);
+
+ SPEAK26_init();
+
+ JOY26_init();
+
+ FB26_init();
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ MOUSE26_close();
+ SPEAK26_close();
+ JOY26_close();
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+}
+
+int device_drivers_close() {
+
+ mouse_grxcursor(DISABLE, 0);
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ MOUSE26_close();
+ SPEAK26_close();
+ JOY26_close();
+ KEYB26_close();
+ INPUT26_close();
+
+ return 0;
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg)
+{
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+}
Index: rel_1_4/input/speak.c
===================================================================
--- rel_1_4/input/speak.c (nonexistent)
+++ rel_1_4/input/speak.c (revision 1522)
@@ -0,0 +1,208 @@
+
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
+ *
+ * Authors : Mauro Marinoni <mauro.marinoni@unipv.it>
+ * (see authors.txt for full list of hartik's authors)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <kernel/kern.h>
+#include <kernel/func.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_spk26.h>
+
+void my_sysclose(KEY_EVT *e)
+{
+ speaker_sound(0, 0);
+
+ kern_printf("S.Ha.R.K. closed.\n\n");
+ sys_end();
+}
+
+void no_note(KEY_EVT *e){
+ speaker_sound(0, 0);
+}
+
+void my_note(KEY_EVT *e){
+
+ switch (e->scan) {
+ case KEY_Q:
+ speaker_sound(262, 0);
+ break;
+ case KEY_W:
+ speaker_sound(277, 0);
+ break;
+ case KEY_E:
+ speaker_sound(294, 0);
+ break;
+ case KEY_R:
+ speaker_sound(311, 0);
+ break;
+ case KEY_T:
+ speaker_sound(330, 0);
+ break;
+ case KEY_Y:
+ speaker_sound(349, 0);
+ break;
+ case KEY_U:
+ speaker_sound(370, 0);
+ break;
+ case KEY_I:
+ speaker_sound(392, 0);
+ break;
+ case KEY_O:
+ speaker_sound(415, 0);
+ break;
+ case KEY_P:
+ speaker_sound(440, 0);
+ break;
+ case KEY_BRL:
+ speaker_sound(466, 0);
+ break;
+ case KEY_BRR:
+ speaker_sound(494, 0);
+ break;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ KEY_EVT ev;
+
+ ev.ascii = 'c';
+ ev.scan = KEY_C;
+ ev.status = KEY_PRESSED;
+ ev.flag = CNTL_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+ ev.flag = CNTR_BIT;
+ keyb_hook(ev, my_sysclose, FALSE);
+
+ speaker_sound(440, 400);
+ while ( (sys_gettime(NULL)/1000) < 1000);
+
+ ev.ascii = 'q';
+ ev.scan = KEY_Q;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'w';
+ ev.scan = KEY_W;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'e';
+ ev.scan = KEY_E;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'r';
+ ev.scan = KEY_R;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 't';
+ ev.scan = KEY_T;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'y';
+ ev.scan = KEY_Y;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'u';
+ ev.scan = KEY_U;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'i';
+ ev.scan = KEY_I;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'o';
+ ev.scan = KEY_O;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = 'p';
+ ev.scan = KEY_P;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = '[';
+ ev.scan = KEY_BRL;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ ev.ascii = ']';
+ ev.scan = KEY_BRR;
+ ev.flag = 0;
+ ev.status = KEY_PRESSED;
+ keyb_hook(ev, my_note, FALSE);
+ ev.status = KEY_RELEASED;
+ keyb_hook(ev, no_note, FALSE);
+
+ while(1);
+ return 0;
+}
Index: rel_1_4/mesademo/makefile
===================================================================
--- rel_1_4/mesademo/makefile (nonexistent)
+++ rel_1_4/mesademo/makefile (revision 1522)
@@ -0,0 +1,16 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS = mesademo
+
+include $(BASE)/config/example.mk
+
+mesademo:
+ make -f $(SUBMAKE) APP=mesademo INIT= OTHEROBJS="initfile.o" SHARKOPT="__OSMESA__ __LINUXC26__ __PCI__ __INPUT__ __FB__"
+
Index: rel_1_4/mesademo/initfile.c
===================================================================
--- rel_1_4/mesademo/initfile.c (nonexistent)
+++ rel_1_4/mesademo/initfile.c (revision 1522)
@@ -0,0 +1,202 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/hardcbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ HCBS_register_level(HCBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ /* Create the shutdown task. It will be activated at RUNLEVEL
+ SHUTDOWN */
+ set_shutdown_task();
+
+ /* Init the drivers */
+ device_drivers_init();
+
+ /* Set the shutdown task activation */
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ /* WARNING: the shutdown task is a background thread. It cannot execute
+ if the system is overloaded */
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+
Index: rel_1_4/mesademo/mesademo.c
===================================================================
--- rel_1_4/mesademo/mesademo.c (nonexistent)
+++ rel_1_4/mesademo/mesademo.c (revision 1522)
@@ -0,0 +1,367 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <kernel/log.h>
+#include <kernel/kern.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include <drivers/shark_fb26.h>
+#include <drivers/shark_keyb26.h>
+
+#include <GL/osmesa.h>
+#include <GL/glut.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+#define WIDTH 640
+#define HEIGHT 430
+#define BYTES_PP 2 //BytesPerPixel
+
+OSMesaContext ctx;
+
+extern void *video_memory;
+
+unsigned char *rgb_565_buf = NULL; //RGB 16 bpp Buffer
+unsigned char *video_buf = NULL; //Video Buffer
+
+unsigned long int VMEMLONG = WIDTH * HEIGHT * BYTES_PP / 4; // Used by copy_videomem_16to16
+unsigned long int RGB565MEM = WIDTH * HEIGHT * BYTES_PP; // Total video mem
+
+unsigned long int PERIOD_REFRESH = 100000;
+unsigned long int PERIOD_DISEGNA = 100000;
+
+unsigned long int WCET_REFRESH, WCET_DISEGNA;
+
+TASK refesh(void);
+TASK disegna(void);
+
+PID refresh_PID, disegna_PID;
+
+static void
+gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
+ GLint teeth, GLfloat tooth_depth)
+{
+ GLint i;
+ GLfloat r0, r1, r2;
+ GLfloat angle, da;
+ GLfloat u, v, len;
+
+ r0 = inner_radius;
+ r1 = outer_radius - tooth_depth / 2.0;
+ r2 = outer_radius + tooth_depth / 2.0;
+
+ da = 2.0 * M_PI / teeth / 4.0;
+
+ glShadeModel(GL_FLAT);
+
+ glNormal3f(0.0, 0.0, 1.0);
+
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ if (i < teeth) {
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ }
+ }
+ glEnd();
+
+ glBegin(GL_QUADS);
+ da = 2.0 * M_PI / teeth / 4.0;
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ }
+ glEnd();
+
+ glNormal3f(0.0, 0.0, -1.0);
+
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ if (i < teeth) {
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ }
+ }
+ glEnd();
+
+ glBegin(GL_QUADS);
+ da = 2.0 * M_PI / teeth / 4.0;
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ }
+ glEnd();
+
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i < teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
+ u = r2 * cos(angle + da) - r1 * cos(angle);
+ v = r2 * sin(angle + da) - r1 * sin(angle);
+ len = sqrt(u * u + v * v);
+ u /= len;
+ v /= len;
+ glNormal3f(v, -u, 0.0);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
+ glNormal3f(cos(angle), sin(angle), 0.0);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
+ u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
+ v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
+ glNormal3f(v, -u, 0.0);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
+ glNormal3f(cos(angle), sin(angle), 0.0);
+ }
+
+ glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
+ glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
+
+ glEnd();
+
+ glShadeModel(GL_SMOOTH);
+
+ glBegin(GL_QUAD_STRIP);
+ for (i = 0; i <= teeth; i++) {
+ angle = i * 2.0 * M_PI / teeth;
+ glNormal3f(-cos(angle), -sin(angle), 0.0);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
+ }
+ glEnd();
+
+}
+
+static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
+static GLint gear1, gear2, gear3;
+static GLfloat angle = 0.0;
+
+static void draw(void)
+{
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glPushMatrix();
+ glRotatef(view_rotx, 1.0, 0.0, 0.0);
+ glRotatef(view_roty, 0.0, 1.0, 0.0);
+ glRotatef(view_rotz, 0.0, 0.0, 1.0);
+
+ glPushMatrix();
+ glTranslatef(-3.0, -2.0, 0.0);
+ glRotatef(angle, 0.0, 0.0, 1.0);
+ glCallList(gear1);
+ glPopMatrix();
+
+ glPushMatrix();
+ glTranslatef(3.1, -2.0, 0.0);
+ glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
+ glCallList(gear2);
+ glPopMatrix();
+
+ glPushMatrix();
+ glTranslatef(-3.1, 4.2, 0.0);
+ glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
+ glCallList(gear3);
+ glPopMatrix();
+
+ glPopMatrix();
+
+ glFinish();
+
+}
+
+static void gl_init()
+{
+
+ static GLfloat red[4] = {1.0, 0.0, 0.0, 1.0};
+ static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
+ static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};
+ static GLfloat pos[4] = {5.0, 5.0, 10.0, 1.0};
+ static GLfloat h = (GLfloat) HEIGHT / (GLfloat) WIDTH;
+
+ //Create the OSMesa Context
+ ctx = OSMesaCreateContext(OSMESA_RGB_565, NULL);
+
+ //Make Current Context
+ OSMesaMakeCurrent(ctx, rgb_565_buf, GL_UNSIGNED_SHORT_5_6_5, WIDTH, HEIGHT);
+
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
+ glEnable(GL_CULL_FACE);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_DEPTH_TEST);
+
+ /* make the gears */
+ gear1 = glGenLists(1);
+ glNewList(gear1, GL_COMPILE);
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
+ gear(1.0, 4.0, 1.0, 20, 0.7);
+ glEndList();
+
+ gear2 = glGenLists(1);
+ glNewList(gear2, GL_COMPILE);
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
+ gear(0.5, 2.0, 2.0, 10, 0.7);
+ glEndList();
+
+ gear3 = glGenLists(1);
+ glNewList(gear3, GL_COMPILE);
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
+ gear(1.3, 2.0, 0.5, 10, 0.7);
+ glEndList();
+
+ glEnable(GL_NORMALIZE);
+
+ glViewport(0, 0, (GLint) WIDTH, (GLint) HEIGHT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.0, 0.0, -40.0);
+
+}
+
+void program_key_end(KEY_EVT *k)
+{
+
+ sys_end();
+
+}
+
+TASK refresh(void)
+{
+
+ while(1) {
+
+ task_testcancel();
+ memcpy((video_buf+40*WIDTH*2), rgb_565_buf, RGB565MEM);
+ task_endcycle();
+
+ }
+
+ sys_end();
+
+}
+
+
+TASK disegna(void)
+{
+
+ char text[100];
+ TIME disegna_TIME, refresh_TIME;
+
+ while(1) {
+
+ task_testcancel();
+
+ jet_gettable(refresh_PID, &refresh_TIME, 1);
+ jet_gettable(disegna_PID, &disegna_TIME, 1);
+
+ angle += 1.0;
+
+ draw();
+
+ sprintf(text,"Hard Task Refresh PER:%6d us EX:%6d us",(int)PERIOD_REFRESH,(int)refresh_TIME);
+ grx_text(text,10,5,color16(0,0,255),0);
+ sprintf(text,"Hard Task Draw PER:%6d us EX:%6d us",(int)PERIOD_DISEGNA,(int)disegna_TIME);
+ grx_text(text,10,15,color16(0,0,255),0);
+
+ task_endcycle();
+
+ }
+
+ sys_end();
+
+}
+
+int main (int argc, char *argv[])
+{
+
+ HARD_TASK_MODEL ht_refresh, ht_disegna;
+
+ WCET_REFRESH =((long int) PERIOD_REFRESH * (0.30));
+ WCET_DISEGNA =((long int) PERIOD_DISEGNA * (0.55));
+
+ hard_task_default_model(ht_refresh);
+ hard_task_def_wcet(ht_refresh,WCET_REFRESH);
+ hard_task_def_mit(ht_refresh,PERIOD_REFRESH);
+ hard_task_def_usemath(ht_refresh);
+ hard_task_def_group(ht_refresh,1);
+ hard_task_def_ctrl_jet(ht_refresh);
+
+ refresh_PID = task_create("refresh", refresh, &ht_refresh, NULL);
+ if (refresh_PID == -1) {
+ sys_end();
+ return 0;
+ }
+
+ hard_task_default_model(ht_disegna);
+ hard_task_def_mit(ht_disegna,PERIOD_DISEGNA);
+ hard_task_def_wcet(ht_disegna,WCET_DISEGNA);
+ hard_task_def_group(ht_disegna,1);
+ hard_task_def_ctrl_jet(ht_disegna);
+ hard_task_def_usemath(ht_disegna);
+ hard_task_def_stack(ht_disegna,30000); //VERY IMPORTANT FOR glCallList !!
+
+ disegna_PID = task_create("disegna", disegna, &ht_disegna, NULL);
+ if (disegna_PID == -1) {
+ sys_end();
+ return 0;
+ }
+
+ {
+ KEY_EVT k;
+ k.flag = ALTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,program_key_end,FALSE);
+ }
+
+ rgb_565_buf = malloc(RGB565MEM);
+ video_buf = (unsigned char *)video_memory;
+
+ gl_init();
+
+ memset(rgb_565_buf, 0, RGB565MEM);
+
+ group_activate(1);
+
+ return 0;
+
+}
Index: rel_1_4/mesademo/readme.txt
===================================================================
--- rel_1_4/mesademo/readme.txt (nonexistent)
+++ rel_1_4/mesademo/readme.txt (revision 1522)
@@ -0,0 +1,25 @@
+--------------------------------------
+MESA Demo (gears)
+
+by
+
+Giacomo Guidi <giacomo@gandalf.sssup.it>
+
+Last update 17/03/2003
+--------------------------------------
+
+This is a simple test demo for the MESA (5.0)
+libraries, the low level graphic drivers is
+the Linux 2.6 Frame Buffer Driver
+
+--------------------------------------
+
+The demo is composed by:
+
+MAKEFILE The makefile used to compile the application
+README.TXT This file
+INITFILE.C The init file
+MESADEMO.C The MESA Demo
+
+--------------------------------------
+
Index: rel_1_4/jumpball/makefile
===================================================================
--- rel_1_4/jumpball/makefile (nonexistent)
+++ rel_1_4/jumpball/makefile (revision 1522)
@@ -0,0 +1,24 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS= ecp ern rrp rrn
+
+include $(BASE)/config/example.mk
+
+ecp:
+ make -f $(SUBMAKE) APP=ecp INIT= OTHEROBJS="demo.o ball.o jetctrl.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
+
+ern:
+ make -f $(SUBMAKE) APP=ern INIT= OTHEROBJS="demo.o ball.o jetctrl.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
+
+rrp:
+ make -f $(SUBMAKE) APP=rrp INIT= OTHEROBJS="demo.o ball.o jetctrl.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
+
+rrn:
+ make -f $(SUBMAKE) APP=rrn INIT= OTHEROBJS="demo.o ball.o jetctrl.o" OTHERINCL= SHARKOPT="__LINUXC26__ __PCI__ __INPUT__ __FB__"
Index: rel_1_4/jumpball/rrn.c
===================================================================
--- rel_1_4/jumpball/rrn.c (nonexistent)
+++ rel_1_4/jumpball/rrn.c (revision 1522)
@@ -0,0 +1,219 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: rrn.c,v 1.5 2004-04-19 13:45:15 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.5 $
+ Last update: $Date: 2004-04-19 13:45:15 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2003 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/rr.h"
+#include "modules/rrsoft.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include "modules/nop.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ RR_register_level(RRTICK, RR_MAIN_NO, mb); // this module remains empty!!!
+ RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ NOP_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+void app_mutex_init(mutex_t *m)
+{
+ NOP_mutexattr_t attr;
+
+ NOP_mutexattr_default(attr);
+
+ mutex_init(m, &attr);
+}
+
Index: rel_1_4/jumpball/rrp.c
===================================================================
--- rel_1_4/jumpball/rrp.c (nonexistent)
+++ rel_1_4/jumpball/rrp.c (revision 1522)
@@ -0,0 +1,219 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: rrp.c,v 1.5 2004-04-19 13:45:15 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.5 $
+ Last update: $Date: 2004-04-19 13:45:15 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2003 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/rr.h"
+#include "modules/rrsoft.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include "modules/pi.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD);
+ RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_SOFT);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ PI_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+void app_mutex_init(mutex_t *m)
+{
+ PI_mutexattr_t attr;
+
+ PI_mutexattr_default(attr);
+
+ mutex_init(m, &attr);
+}
+
Index: rel_1_4/jumpball/ern.c
===================================================================
--- rel_1_4/jumpball/ern.c (nonexistent)
+++ rel_1_4/jumpball/ern.c (revision 1522)
@@ -0,0 +1,220 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ern.c,v 1.5 2004-04-19 13:45:15 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.5 $
+ Last update: $Date: 2004-04-19 13:45:15 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2003 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/rr.h"
+#include "modules/rrsoft.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include "modules/nop.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ RRSOFT_register_level(RRTICK, RR_MAIN_NO, mb, RRSOFT_ONLY_HARD|RRSOFT_ONLY_SOFT);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ NOP_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+void app_mutex_init(mutex_t *m)
+{
+ NOP_mutexattr_t attr;
+
+ NOP_mutexattr_default(attr);
+
+ mutex_init(m, &attr);
+}
+
Index: rel_1_4/jumpball/ecp.c
===================================================================
--- rel_1_4/jumpball/ecp.c (nonexistent)
+++ rel_1_4/jumpball/ecp.c (revision 1522)
@@ -0,0 +1,216 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ecp.c,v 1.5 2004-04-19 13:45:15 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.5 $
+ Last update: $Date: 2004-04-19 13:45:15 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2003 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "kernel/kern.h"
+#include "modules/intdrive.h"
+#include "modules/edf.h"
+#include "modules/cbs.h"
+#include "modules/rr.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+
+#include "modules/pi.h"
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/*+ sysyem tick in us +*/
+#define TICK 0
+
+/*+ RR tick in us +*/
+#define RRTICK 2000
+
+/*+ Interrupt Server +*/
+#define INTDRIVE_Q 1000
+#define INTDRIVE_T 10000
+#define INTDRIVE_FLAG 0
+
+void call_shutdown_task(void *arg);
+int device_drivers_init();
+int device_drivers_close();
+void set_shutdown_task();
+TASK shutdown_task_body(void *arg);
+
+PID shutdown_task_PID = -1;
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ INTDRIVE_register_level(INTDRIVE_Q,INTDRIVE_T,INTDRIVE_FLAG);
+ EDF_register_level(EDF_ENABLE_ALL);
+ CBS_register_level(CBS_ENABLE_ALL, 1);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ dummy_register_level();
+
+ SEM_register_module();
+ CABS_register_module();
+ PI_register_module();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+
+ HARTPORT_init();
+
+ set_shutdown_task();
+
+ device_drivers_init();
+
+ sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN);
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
+void set_shutdown_task() {
+
+ NRT_TASK_MODEL nrt;
+
+ nrt_task_default_model(nrt);
+ nrt_task_def_system(nrt);
+
+ shutdown_task_PID = task_create("Shutdown Task",shutdown_task_body,&nrt,NULL);
+ if (shutdown_task_PID == NIL) {
+ sys_shutdown_message("Error: Cannot create shutdown task\n");
+ sys_end();
+ }
+
+}
+
+int device_drivers_init() {
+
+ int res;
+ KEYB_PARMS kparms = BASE_KEYB;
+
+ LINUXC26_register_module();
+
+ PCI26_init();
+
+ INPUT26_init();
+
+ keyb_def_ctrlC(kparms, NULL);
+
+ KEYB26_init(&kparms);
+
+ FB26_init();
+
+ res = FB26_open(FRAME_BUFFER_DEVICE);
+ if (res) {
+ cprintf("Error: Cannot open graphical mode\n");
+ KEYB26_close();
+ INPUT26_close();
+ sys_end();
+ }
+
+ FB26_use_grx(FRAME_BUFFER_DEVICE);
+
+ FB26_setmode(FRAME_BUFFER_DEVICE,"640x480-16");
+
+ return 0;
+
+}
+
+int device_drivers_close() {
+
+ FB26_close(FRAME_BUFFER_DEVICE);
+
+ KEYB26_close();
+
+ INPUT26_close();
+
+ return 0;
+
+}
+
+#define SHUTDOWN_TIMEOUT_SEC 3
+
+void call_shutdown_task(void *arg)
+{
+ struct timespec t;
+
+ sys_gettime(&t);
+ t.tv_sec += SHUTDOWN_TIMEOUT_SEC;
+
+ /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN */
+ kern_event_post(&t,(void *)((void *)sys_abort_shutdown),(void *)0);
+
+ task_activate(shutdown_task_PID);
+}
+
+TASK shutdown_task_body(void *arg) {
+
+ device_drivers_close();
+
+ sys_shutdown_message("-- S.Ha.R.K. Closed --\n");
+
+ sys_abort_shutdown(0);
+
+ return NULL;
+
+}
+
+void app_mutex_init(mutex_t *m)
+{
+ PI_mutexattr_t attr;
+
+ PI_mutexattr_default(attr);
+
+ mutex_init(m, &attr);
+}
Index: rel_1_4/jumpball/demo.c
===================================================================
--- rel_1_4/jumpball/demo.c (nonexistent)
+++ rel_1_4/jumpball/demo.c (revision 1522)
@@ -0,0 +1,198 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: demo.c,v 1.7 2004-04-18 18:48:22 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.7 $
+ Last update: $Date: 2004-04-18 18:48:22 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2000-2003 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "demo.h"
+#include <kernel/func.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* useful colors... */
+int white;
+int black;
+int red;
+int gray;
+
+void app_mutex_init(mutex_t *m);
+
+static void version( void )
+{
+ cprintf( "S.Ha.R.K. Jumpball Demo 1.0\n" );
+ cprintf( "---------------------------\n" );
+ cprintf( "by Paolo Gai 1999-2001\n" );
+ cprintf( " <pj@sssup.it>\n" );
+ cprintf( "---------------------------\n" );
+}
+
+int myrand(int x)
+{
+ return rand()%x;
+}
+
+void reverse(char s[])
+{
+ int c, i, j;
+
+ for (i = 0, j = strlen(s)-1; i<j; i++, j--)
+ {
+ c = s[i];
+ s[i] = s[j];
+ s[j] = c;
+ }
+}
+
+char * itoa(int n, char *s)
+{
+ int i, sign;
+
+ if ((sign = n) < 0)
+ n = -n;
+
+ i = 0;
+
+ do
+ {
+ s[i++] = n % 10 + '0';
+ } while ((n /= 10) > 0);
+
+ if (sign < 0)
+ s[i++] = '-';
+
+ s[i] = 0;
+
+ reverse(s);
+
+ return s;
+}
+
+
+void scenario()
+{
+ grx_text("S.Ha.R.K. Jumpball Demo 1.0", 0, 0, rgb16(0,255,0), black );
+ grx_text(" by Paolo Gai 1999-2001" , 0, 8, rgb16(0,255,0), black );
+ grx_text(" pj@sssup.it" , 0,16, rgb16(0,255,0), black );
+
+ grx_text("Ctrl-C, Ctrr-C, Enter: exit" ,320, 0, gray, black );
+ grx_text("Alt-C : void statistics" ,320, 8, gray, black );
+ grx_text("Space : create noise ball",320,16, gray, black );
+ grx_text("Backspace : kill noise balls" ,320,24, gray, black );
+
+
+ #ifdef JET_ON
+ scenario_jetcontrol();
+ #endif
+
+ #ifdef BALL_ON
+ scenario_ball();
+ #endif
+}
+
+void endfun(KEY_EVT *k)
+{
+ sys_end();
+}
+
+void zerofun(KEY_EVT *k)
+{
+ int i;
+ for (i=0; i<MAX_PROC; i++) jet_delstat(i);
+}
+
+int main(int argc, char **argv)
+{
+
+ KEY_EVT k;
+
+ version();
+
+ srand(4);
+
+ k.flag = CNTR_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,endfun,FALSE);
+ k.flag = CNTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,endfun,FALSE);
+ k.flag = ALTL_BIT;
+ k.scan = KEY_C;
+ k.ascii = 'c';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,zerofun,FALSE);
+ k.flag = 0;
+ k.scan = KEY_ENT;
+ k.ascii = 13;
+ k.status = KEY_PRESSED;
+ keyb_hook(k,endfun,FALSE);
+
+ /* init the graphic mutex */
+ app_mutex_init(&mutex);
+
+ /* useful colors ... */
+ white = rgb16(255,255,255);
+ black = rgb16(0,0,0);
+ red = rgb16(255,0,0);
+ gray = rgb16(128,128,128);
+
+ scenario();
+
+ #ifdef JET_ON
+ init_jetcontrol();
+ #endif
+
+ #ifdef BALL_ON
+ init_ball();
+ #endif
+
+ group_activate(1);
+
+ return 0;
+}
+
+
Index: rel_1_4/jumpball/jetctrl.c
===================================================================
--- rel_1_4/jumpball/jetctrl.c (nonexistent)
+++ rel_1_4/jumpball/jetctrl.c (revision 1522)
@@ -0,0 +1,236 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: jetctrl.c,v 1.4 2004-04-18 18:48:22 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.4 $
+ Last update: $Date: 2004-04-18 18:48:22 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+
+// JetControl
+
+#include "demo.h"
+#include "kernel/func.h"
+
+TASK jetdummy_task(void *arg)
+{
+ TIME now_dummy, last_dummy, diff_dummy, slice;
+ struct timespec now, last, diff;
+ int x = 0;
+ int height;
+
+ NULL_TIMESPEC(&last);
+ last_dummy = 0;
+ for (;;) {
+ task_nopreempt();
+ jet_getstat(DUMMY_PID, NULL, NULL, NULL, &now_dummy);
+ sys_gettime(&now);
+ task_preempt();
+
+ SUBTIMESPEC(&now, &last, &diff);
+ slice = diff.tv_sec * 1000000 + diff.tv_nsec/1000;
+ diff_dummy = now_dummy - last_dummy;
+
+ height = (int)(JET_DUMMY_HEIGHT*((float)diff_dummy)/((float)slice));
+
+ TIMESPEC_ASSIGN(&last, &now);
+ last_dummy = now_dummy;
+
+ grx_line(JET_DUMMY_X+x,JET_DUMMY_Y,
+ JET_DUMMY_X+x,JET_DUMMY_Y+height ,black);
+ grx_line(JET_DUMMY_X+x,JET_DUMMY_Y+height,
+ JET_DUMMY_X+x,JET_DUMMY_Y+JET_DUMMY_HEIGHT,white);
+ grx_line(JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y,
+ JET_DUMMY_X+(x+1)%JET_DUMMY_WIDTH,JET_DUMMY_Y+JET_DUMMY_HEIGHT,255);
+
+ x = (x+1)%JET_DUMMY_WIDTH;
+
+ task_endcycle();
+ }
+}
+
+
+TASK jetctrl_task(void *arg)
+{
+ char st[50];
+ TIME sum, max;
+ int n;
+
+ PID i;
+ int printed = 0;
+
+ for (;;) {
+ for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
+ if (jet_getstat(i, &sum, &max, &n, NULL) != -1) {
+ if (!n) n=1;
+ sprintf(st, "%6d %6d %10s", (int)sum/n, (int)max, proc_table[i].name);
+ grx_text(st, 384, JET_Y_NAME+16+printed*8, gray, black);
+ printed++;
+ }
+ }
+ while (printed<JET_NTASK) {
+ grx_text(" ",
+ 384, JET_Y_NAME+16+printed*8, gray, black);
+ printed++;
+ }
+ task_endcycle();
+ }
+}
+
+TASK jetslide_task(void *arg)
+{
+ TIME sum, curr, max;
+
+ TIME total[JET_NTASK];
+ int slides[JET_NTASK];
+
+ PID i;
+ int printed = 0;
+
+ for (;;) {
+ // Fill the total array in a nonpreemptive section
+ task_nopreempt();
+ for (i=2, printed=0; i<MAX_PROC && printed<JET_NTASK; i++) {
+ if (jet_getstat(i, &sum, NULL, NULL, &curr) != -1) {
+ total[printed] = sum+curr;
+ printed++;
+ }
+ }
+ task_preempt();
+
+ while (printed < JET_NTASK)
+ total[printed++] = 0;
+
+ // Compute the Max elapsed time
+ max = 0;
+ for (i=0; i<JET_NTASK; i++)
+ if (total[i] > max) max = total[i];
+ if (!max) max = 1;
+
+ // Compute the slides width
+ for (i=0; i<JET_NTASK; i++)
+ slides[i] = (int)( (((float)total[i])/max) * JET_SLIDE_WIDTH);
+
+ // print the data
+ for (i=0; i<JET_NTASK; i++) {
+ grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
+ JET_SLIDE_X+slides[i], JET_Y_NAME+23+i*8, gray);
+ grx_box(JET_SLIDE_X+slides[i], JET_Y_NAME+16+i*8,
+ JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+23+i*8, black);
+ }
+
+ while (i<JET_NTASK) {
+ grx_box(JET_SLIDE_X, JET_Y_NAME+16+i*8,
+ JET_SLIDE_X+JET_SLIDE_WIDTH, JET_Y_NAME+20+i*8, black);
+ i++;
+ }
+ task_endcycle();
+ }
+}
+
+
+void scenario_jetcontrol(void)
+{
+ grx_text("System load" , 384, 45, rgb16(0,0,255), black);
+ grx_line(384,55,639,55,red);
+
+ grx_text(" Mean Max Name Slide", 384, JET_Y_NAME, gray, black);
+ grx_line(384,JET_Y_NAME+10,639,JET_Y_NAME+10,gray);
+
+ grx_rect(JET_DUMMY_X-1, JET_DUMMY_Y-1,
+ JET_DUMMY_X+JET_DUMMY_WIDTH, JET_DUMMY_Y+JET_DUMMY_HEIGHT+1, gray);
+
+ grx_text("100%", JET_DUMMY_X-40, JET_DUMMY_Y, gray, black);
+ grx_text(" 0%", JET_DUMMY_X-40, JET_DUMMY_Y+JET_DUMMY_HEIGHT-8, gray, black);
+
+ grx_line(JET_DUMMY_X-1, JET_DUMMY_Y, JET_DUMMY_X-5, JET_DUMMY_Y, gray);
+ grx_line(JET_DUMMY_X-1, JET_DUMMY_Y+JET_DUMMY_HEIGHT, JET_DUMMY_X-5, JET_DUMMY_Y+JET_DUMMY_HEIGHT, gray);
+}
+
+void init_jetcontrol(void)
+{
+ SOFT_TASK_MODEL m3, m4, m5;
+
+ PID p3, p4, p5;
+
+ soft_task_default_model(m3);
+ soft_task_def_level(m3,2);
+ soft_task_def_period(m3, PERIOD_JETCTRL);
+ soft_task_def_met(m3, WCET_JETCTRL);
+ soft_task_def_ctrl_jet(m3);
+ soft_task_def_group(m3, 1);
+ p3 = task_create("jctrl", jetctrl_task, &m3, NULL);
+ if (p3 == -1) {
+ sys_shutdown_message("Could not create task <jetctrl> errno=%d",
+ errno);
+ sys_end();
+ }
+
+ soft_task_default_model(m4);
+ soft_task_def_level(m4,2);
+ soft_task_def_period(m4, PERIOD_JETDUMMY);
+ soft_task_def_met(m4, WCET_JETDUMMY);
+ soft_task_def_group(m4, 1);
+ soft_task_def_usemath(m4);
+ soft_task_def_ctrl_jet(m4);
+ p4 = task_create("jdmy", jetdummy_task, &m4, NULL);
+ if (p4 == -1) {
+ sys_shutdown_message("Could not create task <jetdummy> errno=%d",
+ errno);
+ sys_end();
+ }
+
+ soft_task_default_model(m5);
+ soft_task_def_level(m5,2);
+ soft_task_def_period(m5, PERIOD_JETSLIDE);
+ soft_task_def_met(m5, WCET_JETSLIDE);
+ soft_task_def_group(m5, 1);
+ soft_task_def_usemath(m5);
+ soft_task_def_ctrl_jet(m5);
+ p5 = task_create("jsli", jetslide_task, &m5, NULL);
+ if (p5 == -1) {
+ sys_shutdown_message("Could not create task <jetslide> errno=%d",
+ errno);
+ sys_end();
+ }
+}
+
Index: rel_1_4/jumpball/ball.c
===================================================================
--- rel_1_4/jumpball/ball.c (nonexistent)
+++ rel_1_4/jumpball/ball.c (revision 1522)
@@ -0,0 +1,247 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: ball.c,v 1.6 2004-04-18 18:48:22 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.6 $
+ Last update: $Date: 2004-04-18 18:48:22 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*--------------------------------------------------------------*/
+/* SIMULATION OF JUMPING BALLS */
+/*--------------------------------------------------------------*/
+
+#include "demo.h"
+#include <kernel/func.h>
+#include <stdlib.h>
+
+#define R 8 /* dimension of a ball */
+#define G 9.8 /* acceleration of gravity */
+
+static int ballexit = 0;
+static int npc = 0; /* number of tasks created */
+
+/*--------------------------------------------------------------*/
+/* Delay function for jumping balls */
+/*--------------------------------------------------------------*/
+
+void my_delay(void)
+{
+ int xxx;
+ for (xxx=0; xxx<BALL_DELAY; xxx++);
+}
+
+/*--------------------------------------------------------------*/
+/* Periodic task for ball simulation */
+/*--------------------------------------------------------------*/
+
+TASK palla(int i)
+{
+int x, y; /* coordinate grafiche pallina */
+int ox, oy; /* vecchia posizione pallina */
+int x0, y0; /* posizione iniziale X pallina */
+float vx, vy; /* velocit… della pallina */
+float vy0; /* velocita' pallina al primo rimbalzo */
+float ty, tx; /* variabile temporale */
+float dt; /* incremento temporale */
+
+ y = oy = y0 = BALL_HEIGHT;
+ x = ox = x0 = BALL_XMIN;
+
+ vy0= sqrt(2. * G * (float)BALL_HEIGHT);
+ vy = 0;
+ vx = BALL_VELX + myrand(9);
+ tx = 0;
+ ty = 0;
+ dt = ((float)PERIOD_BALL)/100000;
+
+ while (1) {
+ y = y0 + vy*ty - .5*G*ty*ty;
+ x = x0 + vx * tx;
+
+ if (y < 0) {
+ y = 0;
+
+ if (vy == 0.0)
+ vy = vy0;
+ else if (vy < BALL_VYMIN)
+ vy = vy0 * (1.0 - myrand(50)/100.0);
+ else
+ vy = 0.9 * vy;
+
+ ty = 0.0;
+ y0 = 0;
+ }
+
+ if (x > BALL_XMAX) {
+ tx = 0.0;
+ x0 = BALL_XMAX;
+ vx = -vx;
+ x = x0 + vx * tx;
+ }
+
+ if (x < BALL_XMIN) {
+ tx = 0.0;
+ x0 = BALL_XMIN;
+ vx = -vx;
+ x = x0 + vx * tx;
+ }
+
+ mutex_lock(&mutex);
+ grx_disc(ox, oy, R, 0);
+ ox = x;
+ oy = BALL_Y - y;
+ mutex_unlock(&mutex);
+
+ if (ballexit && i!=0xFFFF) {
+ npc--;
+ return 0;
+ }
+
+ mutex_lock(&mutex);
+ grx_disc(ox, oy, R, i);
+ mutex_unlock(&mutex);
+
+ my_delay();
+
+ ty += dt;
+ tx += dt;
+ task_endcycle();
+ }
+}
+
+void killball(KEY_EVT *k)
+{
+ ballexit = 1;
+}
+
+void ballfun(KEY_EVT *k)
+{
+ SOFT_TASK_MODEL mp;
+ int r,g,b;
+ PID pid;
+ char palla_str[]="palla ";
+
+ if (npc == BALL_MAX_P) return;
+
+ ballexit = 0;
+
+ r = 64 + myrand(190);
+ g = 64 + myrand(190);
+ b = 64 + myrand(190);
+
+ itoa(npc,palla_str+5);
+
+ soft_task_default_model(mp);
+ soft_task_def_level(mp,2);
+ soft_task_def_ctrl_jet(mp);
+ soft_task_def_arg(mp, (void *)rgb16(r,g,b));
+ soft_task_def_group(mp, BALL_GROUP);
+ soft_task_def_met(mp, WCET_BALL);
+ soft_task_def_period(mp,PERIOD_BALL);
+ soft_task_def_usemath(mp);
+ pid = task_create(palla_str, palla, &mp, NULL);
+
+ if (pid != NIL) {
+ task_activate(pid);
+ npc++;
+ }
+}
+
+void hardball()
+{
+ HARD_TASK_MODEL mp;
+ int r,g,b;
+ PID pid;
+
+ r = 255;
+ g = 255;
+ b = 255;
+
+ hard_task_default_model(mp);
+ hard_task_def_ctrl_jet(mp);
+ hard_task_def_arg(mp, (void *)rgb16(r,g,b));
+ hard_task_def_wcet(mp, WCET_HARD_BALL);
+ hard_task_def_mit(mp,PERIOD_BALL);
+ hard_task_def_usemath(mp);
+ pid = task_create("pallaEDF", palla, &mp, NULL);
+ if (pid == NIL) {
+ sys_shutdown_message("Could not create task <pallaEDF>");
+ sys_end();
+ return;
+ }
+ else
+ task_activate(pid);
+}
+
+
+/*--------------------------------------------------------------*/
+/* MAIN process */
+/*--------------------------------------------------------------*/
+
+void scenario_ball()
+{
+ grx_text("Noise", 0, 45 /*BALL_Y-BALL_HEIGHT-15*/, rgb16(0,0,255), black);
+ grx_line(0,55,383,55,red);
+ grx_rect(BALL_XMIN-R-1, BALL_Y-BALL_HEIGHT-R-1,
+ BALL_XMAX+R+1, BALL_Y+R+1, rgb16(0,200,0));
+}
+
+void init_ball(void)
+{
+ KEY_EVT k;
+
+ hardball();
+
+ k.flag = 0;
+ k.scan = KEY_SPC;
+ k.ascii = ' ';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,ballfun,FALSE);
+
+ k.flag = 0;
+ k.scan = KEY_BKS;
+ k.ascii = ' ';
+ k.status = KEY_PRESSED;
+ keyb_hook(k,killball,FALSE);
+}
+
+/*--------------------------------------------------------------*/
Index: rel_1_4/jumpball/demo.h
===================================================================
--- rel_1_4/jumpball/demo.h (nonexistent)
+++ rel_1_4/jumpball/demo.h (revision 1522)
@@ -0,0 +1,183 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/**
+ ------------
+ CVS : $Id: demo.h,v 1.6 2004-04-18 09:45:27 giacomo Exp $
+
+ File: $File$
+ Revision: $Revision: 1.6 $
+ Last update: $Date: 2004-04-18 09:45:27 $
+ ------------
+**/
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+
+#include <ll/ll.h>
+#include <kernel/types.h>
+#include <kernel/descr.h>
+#include <math.h>
+
+#include <drivers/shark_linuxc26.h>
+#include <drivers/shark_pci26.h>
+#include <drivers/shark_input26.h>
+#include <drivers/shark_keyb26.h>
+#include <drivers/shark_fb26.h>
+
+#define FRAME_BUFFER_DEVICE 0
+
+/* Subparts */
+#define JET_ON
+#define BALL_ON
+
+
+/* CPU Speed Selection
+ --------------------------------------------------------------------
+ 1700 - Pentium 4 1.7 GHz
+ 1300 - Centrino 1.3 GHz
+ 400 - Pentium 2 400 MHz
+ 133 - Pentium 1 133 MHz
+*/
+#define CPU 400
+
+/*
+ *
+ * WCET, Periods and Models
+ *
+ */
+
+#if CPU==133
+#define WCET_JETCTRL 10000
+#define WCET_JETDUMMY 300
+#define WCET_JETSLIDE 2000
+#define WCET_BALL 250
+#define WCET_HARD_BALL 1000
+#define BALL_DELAY 10000
+#endif
+
+#if CPU==400
+#define WCET_JETCTRL 7500
+#define WCET_JETDUMMY 200
+#define WCET_JETSLIDE 2100
+#define WCET_BALL 100
+#define WCET_HARD_BALL 380
+#define BALL_DELAY 10000
+#endif
+
+#if CPU==1300
+#define WCET_JETCTRL 4500
+#define WCET_JETDUMMY 100
+#define WCET_JETSLIDE 1300
+#define WCET_BALL 100
+#define WCET_HARD_BALL 650
+#define BALL_DELAY 100000
+#endif
+
+#if CPU==1700
+#define WCET_JETCTRL 4500
+#define WCET_JETDUMMY 100
+#define WCET_JETSLIDE 1300
+#define WCET_BALL 100
+#define WCET_HARD_BALL 410
+#define BALL_DELAY 100000
+#endif
+
+#define PERIOD_JETCTRL 100000
+#define PERIOD_JETDUMMY 100000
+#define PERIOD_JETSLIDE 100000
+#define PERIOD_BALL 10000
+
+/*
+ *
+ * Global Stuffs
+ *
+ */
+
+extern PID shutdown_task_PID;
+
+/* graphic mutex... */
+extern mutex_t mutex;
+
+/* useful colors... */
+extern int white;
+extern int black;
+extern int red;
+extern int gray;
+
+void init_jetcontrol();
+void init_ball(void);
+void scenario_jetcontrol();
+void scenario_ball();
+char *itoa(int n, char *s);
+int myrand(int x);
+
+/*
+ *
+ * JETCONTROL stuffs
+ *
+ */
+
+#define JET_NTASK 35
+#define JET_Y_NAME 170
+
+#define DUMMY_PID 1
+
+#define JET_DUMMY_WIDTH 210
+#define JET_DUMMY_HEIGHT 80
+
+/* the point (x, y) is the top left corner */
+#define JET_DUMMY_X 428
+#define JET_DUMMY_Y 65
+
+#define JET_SLIDE_WIDTH 50
+#define JET_SLIDE_X 576
+
+/*
+ *
+ * BALL stuffs
+ *
+ */
+
+// x and y corners are specified whithout consider a border of 3 pixels
+#define BALL_Y 450 /* position of the floor */
+#define BALL_HEIGHT 385 /* initial height of the ball */
+#define BALL_XMIN 10 /* min position X of the ball */
+#define BALL_XMAX 370 /* max position X of the ball */
+#define BALL_VELX 5. /* horizontal ball velocity */
+#define BALL_VYMIN 11. /* min ground speed */
+#define BALL_MAX_P 60 /* max number of balls */
+
+#define BALL_GROUP 2 /* task group of the balls */
Index: rel_1_4/jumpball/readme.txt
===================================================================
--- rel_1_4/jumpball/readme.txt (nonexistent)
+++ rel_1_4/jumpball/readme.txt (revision 1522)
@@ -0,0 +1,94 @@
+----------------------------------
+Jumping Balls demo
+
+by
+
+Paolo Gai 1999-2001 - pj@sssup.it
+
+----------------------------------
+
+This demo was created to show some S.Ha.R.K. functionalities in the course
+of Informatica Industriale , University of Pavia, Italy.
+
+The demo is composed by an application (derived by the template application
+distributed on the web site) and two init files.
+
+The demo is composed by:
+
+MAKEFILE The makefile used to compile the application;
+ demo is the rule to compile the application with a CBS scheduler
+ demo2 is the rule to compile the application with a RR scheduler
+README.TXT This file
+DEMO.H Some constants used into the demo
+ECP.C, ERN.C, RRP.C, RRN.C Various initfiles
+INITFIL2.C The EDF initfile
+INITFILE.C A makefile that cover either EDF+CBS and RR
+BALL.C The Jumping balls part of the demo
+DEMO.C The main() function and some other utility function
+JETCTRL.C The JET part of the demo
+
+The demo works as follows:
+- It works at 640x480 16 bit colors
+- on the left, there is the jumping ball arena, on the rigth there is the
+ statistics about the tasks into the system.
+
+- the tasks are guaranteed using CBS and EDF. The wcet and mean execution
+ time on my portable after a few minutes are (us):
+
+ JetCtrl 7400 max 7500 CBS met
+ JetDummy 135 max 200 CBS met
+ JetSlide 2100 max 2100 CBS met
+ Balls 276 max 380 EDF wcet for hard ball,100 CBS met for soft ones
+
+ The system should go overloaded with 40 soft balls.
+
+- The idea is the following:
+ - first, an edf guaranteed ball is created.
+ - then, create a set of soft ball using space. since their met is < than the
+ real met, they posticipate the deadlines.
+ - if they are killed, they remain for some seconds in the zombie state
+ - if a set of soft ball arde created (i.e., 10), and after a while all the
+ others are created, the bandwidth is fully used, and the task posticipate
+ their deadlines. the first set of tasks stops jumping when the bandwidth
+ is full utilized by the newest balls until all the tasks have similar
+ deadlines.
+ - Note on the left the slides that represents the relative ratio
+ between the tasks.
+ - Note that in overload conditions the EDF task is still guaranteed
+ - Note that PI is used with EDF, also if no theory says that it is good:
+ - S.Ha.R.K. allows that, it is the user that have to choose if that is
+ a non-sense
+ - PI is independent from the implemnentation of the scheduling modules
+ - if the second init file is used, RR is used instead of EDF+CBS.
+ - In overload condition RR perform differently from EDF+CBS, giving to
+ each task an equal fraction of bandwidth
+
+ - note also:
+ - the redefinition of the standard exception handler
+ - the redefinition of the keys and the initialization of the keyboard
+ - the myend exit function
+ - the main() that terminates
+ - the two parts (ball and jet) can be excluded using a #define
+
+If You have any question, please contact the author...
+
+Update (2003/12/19):
+Just some more notes...
+I usually show the four demos in the following order:
+
+(first of all, tune the demo depending on how fast your notebook is; see demo.h)
+
+ECP - EDF with CBS and PI... the white EDF ball still work also in overload; CBS balls just slow down but they still get their guaranteed bandwidth
+
+RRP - Round Robin with Priority inheritance ... the EDF ball is at the same level of the others, all slow down...
+
+RRN - 2 levels of Round Robin, without Priority inheritance ... when
+there is overload, the white ball works ok, but the other have an impredicible
+behavior (they execute many instances in one RR period)
+
+ERN - EDF, RR, no priority inheritance - the white ball misses his deadline
+just when there is an overload (all the other balls are queued on the same
+semaphore, so the blocking time increase, and when there is overload the EDF
+task misses also if it has not consumed his bandwidth). Note that it happens
+also if the EDF task consume just a few microseconds... Real time does not
+means "fast" :-)
Index: rel_1_4/pngdemo/makefile
===================================================================
--- rel_1_4/pngdemo/makefile (nonexistent)
+++ rel_1_4/pngdemo/makefile (revision 1522)
@@ -0,0 +1,18 @@
+#
+#
+#
+
+ifndef BASE
+BASE=../..
+endif
+include $(BASE)/config/config.mk
+
+PROGS= pngdemo
+
+include $(BASE)/config/example.mk
+
+OBJS= "initfile.o"
+
+pngdemo:
+ make -f $(SUBMAKE) APP=pngdemo INIT= OTHEROBJS=$(OBJS) SHARKOPT="__PNG__ __OLDCHAR__"
+
Index: rel_1_4/pngdemo/pngdemo.c
===================================================================
--- rel_1_4/pngdemo/pngdemo.c (nonexistent)
+++ rel_1_4/pngdemo/pngdemo.c (revision 1522)
@@ -0,0 +1,110 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Giacomo Guidi <giacomo@gandalf.sssup.it>
+ *
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <kernel/kern.h>
+#include <png.h>
+
+void read_png_file(char *file_name, char **buffer, int *width, int *height, png_byte *color_type)
+{
+
+ int y;
+ png_byte bit_depth;
+
+ png_structp png_ptr;
+ png_infop info_ptr;
+ int number_of_passes;
+ png_bytep * row_pointers;
+
+ char header[8]; // 8 is the maximum size that can be checked
+
+ /* open file and test for it being a png */
+ FILE *fp = fopen(file_name, "rb");
+ if (!fp) {
+ cprintf("[read_png_file] File %s could not be opened for reading", file_name);
+ sys_end();
+ }
+ fread(header, 1, 8, fp);
+
+ if (png_sig_cmp(header, 0, 8))
+ cprintf("[read_png_file] File %s is not recognized as a PNG file", file_name);
+
+ /* initialize stuff */
+
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+
+ if (!png_ptr)
+ cprintf("[read_png_file] png_create_read_struct failed");
+
+ info_ptr = png_create_info_struct(png_ptr);
+ if (!info_ptr)
+ cprintf("[read_png_file] png_create_info_struct failed");
+
+ png_init_io(png_ptr, fp);
+ png_set_sig_bytes(png_ptr, 8);
+
+ png_read_info(png_ptr, info_ptr);
+
+ *width = info_ptr->width;
+ *height = info_ptr->height;
+ *color_type = info_ptr->color_type;
+ bit_depth = info_ptr->bit_depth;
+
+ number_of_passes = png_set_interlace_handling(png_ptr);
+
+ png_read_update_info(png_ptr, info_ptr);
+
+ row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * info_ptr->height);
+ for (y=0; y<info_ptr->height; y++)
+ row_pointers[y] = (png_byte*) malloc(info_ptr->rowbytes);
+
+ png_read_image(png_ptr, row_pointers);
+
+ if(info_ptr->color_type == PNG_COLOR_TYPE_RGB) {
+ *buffer = malloc(info_ptr->height * info_ptr->rowbytes);
+ for(y=0; y<info_ptr->height; y++)
+ memcpy(*buffer+y*info_ptr->rowbytes,row_pointers[y],info_ptr->rowbytes);
+ } else {
+ cprintf("Image is not RGB\n");
+ }
+
+ fclose(fp);
+
+}
+
+int main (int argc, char *argv[])
+{
+
+ char *Image = NULL;
+ int ImgWidth = 0;
+ int ImgHeight = 0;
+ png_byte ImgColor = 0;
+
+ read_png_file("test.png",&Image,&ImgWidth,&ImgHeight,&ImgColor);
+
+ cprintf("Image ptr:%8d\n",(DWORD)Image);
+ cprintf("Image Width:%d\n",ImgWidth);
+ cprintf("Image Height:%d\n",ImgHeight);
+ cprintf("Image Type:%d\n",ImgColor);
+
+ free(Image);
+
+ return 0;
+
+}
Index: rel_1_4/pngdemo/initfile.c
===================================================================
--- rel_1_4/pngdemo/initfile.c (nonexistent)
+++ rel_1_4/pngdemo/initfile.c (revision 1522)
@@ -0,0 +1,182 @@
+/*
+ * Project: S.Ha.R.K.
+ *
+ * Coordinators:
+ * Giorgio Buttazzo <giorgio@sssup.it>
+ * Paolo Gai <pj@gandalf.sssup.it>
+ *
+ * Authors :
+ * Paolo Gai <pj@gandalf.sssup.it>
+ * (see the web pages for full authors list)
+ *
+ * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
+ *
+ * http://www.sssup.it
+ * http://retis.sssup.it
+ * http://shark.sssup.it
+ */
+
+/*
+ * Copyright (C) 2000 Paolo Gai
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/*
+ * CVS : $Id: initfile.c,v 1.2 2003-03-20 14:59:20 giacomo Exp $
+ *
+ * File: $File$
+ * Revision: $Revision: 1.2 $
+ * Last update: $Date: 2003-03-20 14:59:20 $
+ */
+
+#include "kernel/kern.h"
+#include "modules/edf.h"
+#include "modules/rr.h"
+#include "modules/cbs.h"
+#include "modules/dummy.h"
+
+#include "modules/sem.h"
+#include "modules/hartport.h"
+#include "modules/cabs.h"
+#include "modules/pi.h"
+#include "modules/pc.h"
+#include "modules/srp.h"
+#include "modules/npp.h"
+#include "modules/nop.h"
+#include "modules/nopm.h"
+
+#include "fs/bdevinit.h"
+#include "fs/fsinit.h"
+#include "fs/bdev.h"
+
+#include "drivers/keyb.h"
+
+/*+ sysyem tick in us +*/
+#define TICK 1000
+
+/*+ RR tick in us +*/
+#define RRTICK 10000
+
+dev_t root_device=-1;
+dev_t temp_device=-1;
+
+int __register_sub_init(void)
+{
+#if defined(EDFSCHED)
+ extern void BD_EDF_register_module(void);
+ BD_EDF_register_module();
+#elif defined(PSCANSCHED)
+ extern void BD_PSCAN_register_module(void);
+ BD_PSCAN_register_module();
+#endif
+ return 0;
+}
+
+int choose_root_callback(dev_t dev,u_int8_t fs)
+{
+ if (fs==FS_MSDOS) return dev;
+ return -1;
+}
+
+int choose_temp_callback(__dev_t dev,__uint8_t fs)
+{
+ static int flag=0;
+ if (fs==FS_MSDOS) {
+ if (flag) return dev;
+ flag=1;
+ }
+ return -1;
+}
+
+int __bdev_sub_init(void)
+{
+ BDEV_PARMS bdev=BASE_BDEV;
+
+ bdev_def_showinfo(bdev,FALSE);
+ bdev_init(&bdev);
+
+ root_device=bdev_scan_devices(choose_root_callback);
+ if (root_device<0) {
+ cprintf("can't find root device to mount on /!!!\n");
+ sys_end();
+ return -1;
+ }
+
+ return 0;
+
+}
+
+int __fs_sub_init(void)
+{
+ extern int libc_initialize(void);
+ FILESYSTEM_PARMS fs=BASE_FILESYSTEM;
+
+ filesystem_def_rootdevice(fs,root_device);
+ filesystem_def_fs(fs,FS_MSDOS);
+ filesystem_def_showinfo(fs,FALSE);
+ filesystem_init(&fs);
+
+ libc_initialize();
+
+ return 0;
+}
+
+TIME __kernel_register_levels__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+ extern int __register_sub_init(void);
+
+ EDF_register_level(EDF_ENABLE_ALL);
+ RR_register_level(RRTICK, RR_MAIN_YES, mb);
+ CBS_register_level(CBS_ENABLE_ALL, 0);
+ dummy_register_level();
+
+ SEM_register_module();
+
+ CABS_register_module();
+
+ PI_register_module();
+ PC_register_module();
+ NPP_register_module();
+ SRP_register_module();
+ NOP_register_module();
+ NOPM_register_module();
+
+ __register_sub_init();
+
+ return TICK;
+}
+
+TASK __init__(void *arg)
+{
+ struct multiboot_info *mb = (struct multiboot_info *)arg;
+ KEYB_PARMS keyb = BASE_KEYB;
+ extern int __bdev_sub_init(void);
+ extern int __fs_sub_init(void);
+
+ HARTPORT_init();
+
+ KEYB_init(&keyb);
+
+ __bdev_sub_init();
+ __fs_sub_init();
+
+ __call_main__(mb);
+
+ return (void *)0;
+}
+
Index: rel_1_4/pngdemo/test.png
===================================================================
--- rel_1_4/pngdemo/test.png (nonexistent)
+++ rel_1_4/pngdemo/test.png (revision 1522)
@@ -0,0 +1,373 @@
+‰PNG
+
+ +IHDRÈÈ":9ÉbKGDÿÿÿ ½§“ pHYs. . ÕtIMEÓ ÿÅ IDATxœì¼ùómÙUط֞Ît‡ï÷ûæîVOzjµf 4€(3ÉNÇ®Æ8ÓONŠ vå—üI¥R•TBœCBœªT\6B˜l™…µ‰žÇ×ݯß{ßáÞ{¦=®µòÃ}ï©5`‚ ¨ÜhÕ÷{ëÞ[ûܳÏޟ³ÖÚk¯uPDà­&ûkÂòÏüÌÏ~Ó7}ã}÷]AõÕîÔ_0yˎ·ˆ@)¿Ú½ù‹'oM°˜xžg"úWþòÖ öjŠ™ßŠ¶þ_y˂…ÀÌÌüÕîË_Dykƒ%D$ò5°¾
+ò–ë ¶ïkë«%oI°¾ _ó±¾ZòKäv ‹ˆJÉøµÖWCނƒŽ"""9ç”2"~Meýù‹ùjwàÏBP)¹m
+åk1Ò?oyëi,¹» üšƒõU”·X"p—%PJ)õV»Æ%ä-9è"€ˆÎ9­5~Íþ¹Ë[¬Û!*cŒÖú«Û›¿˜òÿƒóþÇú1øGk `Ü7¹Ó
+áÍ1Î;-¿âoˆ¼ùÇEöž:f!A•ÀÖ™% ºAo+9`¾ýX@áµ¼s6($H 4* +€œ@)û›Uà „_|¸ñµì— €òÅ÷:ßþâîúC„ PÁ~ЀH¢VÀˆ·Jî !Âz‚„PˆŒÖ,‚w¦Fö.€B`±ê+iäÎ_JRYw¦¾TGý™¯
+ÿT€(ÄýD¾é»¯ÔÞ@¿ +³ÞOÔÝs "
+ð!!(«€ î-‘RH)DTû£ïLŠ‚Rû‹€€B*ŒJ)@L¢´ƒ¹Ë ‚h‚BDáÛx‰ªý„ï‡ÿ6 _¸‹”ÚŸE¡ÜÍ$+¥à~X´ª@ÔmîT­ôþæCD¸¡3 Â"J©Â¬‚ˆ0+¥ö7±Ò ¡(¾3€R¨Dª;cÄ€ˆ@$ˆˆˆ¢4#X»o&1€‚ʾy¾þ¬ÀúãxÚ_/ßn)À{RD@ÝñÀ÷è¶Ï¤E„åN›Û +@ÉÙßÔŠ²
+ÊÔN±zù¹§·7Ÿ7h꺑R
+‹8k™¹Úÿ8"*­µÖLDDˆXJÉ97MSJQÊZk k,3ÏólŒa…‘U«µC*µ’ºÂ9Œ"ÐÖMŽ‘ )D¥À8s÷*ˆˆ™•6š™‰ÈZ‹ˆÞûº©BÊ,Ò4-(-€©ä˜BS- :!Ì A!צÍ9³°°ä’…¥­£Íèg4V¹*bPZD8ÇÖUN«¼F¥-ÌÞW•Ûw)çl­K1c”R¥3Õu]raDPJ§”œ³MÓâÞG_€Ð,šJÂÐhb(²^\yÿ׿y~ÿÌ5Ö ¾Ôfíwñ˜Š€ˆìGJ@ùv¢ž߁‹(ïÃû×Û0íßÞ>ò¶î(9GžmӍ;¸öüÓÏ~ö“a¸á”R1ÆýÙµÖ,L…ˆ¨”¢”ªªªª*æR¨TU…ý0Xk©ëjcL¡®ëÓìg­M ;xš2fBdXÔvÙR¯µ>X-£÷@Ei…€®ª˜y¯„bˆ1ÅåÁÚ97Žã<Ï®ªœµ³÷—.õý˜Y–‡çÚÅ*î‡)R6Ú9å*­Ê)î(-&†hŒ±Îúyö!4UU¹j 1²^¸,ÚlúÁìùÈéüziû¾¯ÆmŒÑ:kŒQ¨B‹E'ÄÔ6m)e×ﺶË9û˜@ÄU•ÖºigmJùx;Üê“ÕÕu#óŅQÖ"«ûï{ð?ÿßòÏ ,ù‚Ö¹ +"ÞÝlÙ߯B¥ìú1\@XöTÝþ¸¤}ºýÏ·Íã>Î~:P #Gá­Ó1ϭ惶 +>(EÎ9"R(Z"U
+ÄDR[hkMLT n”sÎJ(9ëF#’)•;[¦Ö¸B2o|‰DdSA"¡R ӁK­mmaS+£1„R'‘©ªª¬í©Ud Ð\i® ØJ9
+5æ0sÕP¢£m›‹ÑTÕÎ@ "JҔŒ¶V4×Õ È¡VBTÈÊa@S¥Ak„œ²•„qn”‚£ +„ VZ‡ëÆ*«¢ä‹‚2†Drݶ˜eš³°(&¥QȤRäJ‰`¡"èKfÿÏ
+¬½™“7ɛ?Ò*
+è6Nwá…˨nǔå6UDDÄ,,oËíß,…™¬8{wA’—5pɱ”h4֕ +¬5Î9ï½vms.9‚T•Sb-*Èu­gŽÝ¢Æ˜RTJi- ÔÔõ¶ÆyfJªKX‰R 2ÌÁ„Ñ)•cHa¶­câæÊZ­5—äºÆ™*GïçI + ueQ"E¡ÄiDA`ÇLY͡ԍžcĊqJžKªœA`d­8'¡âœ[/L¬B“àì£Odk•D-›V@â¶m9ykM×u)%f®*£AŽÑk*Æ؅s ç8禪÷›cÀœS¢B ,M»ŠTQ
+`Hkur¶5¦®êöÏ ¬7côfãµÿ¸7@D$% %x“zʁ)ß±–·ùRpÇxQ)Ä,̉øntïQ)lPR.¬ÂD
+(ûY™T/—{oFk=Ž£1Æ9BPJ-—Ëa†a`fcœR8ÏsŠYk­P·M+¬D¸®ë¦iBÎY^®F}æÌ$JRVP)ëªÆ—´®ªJ €6ÆX#J+TJŒ5p'¥'ç¼ïÌÂQ|J@Y"™b±Ê²vhjFcªµªªjšw…Éj¥µÖ‚`Œ›â´Ýõ!Ay¢/\²B´Ï‘c^w«aR*«•ÈÌ µÕÚ*ÔÒU +*Í"uÛ¸ªŠ› +ƒTUM¥0@Îe¿K–
+IeSÑ!Ñ…‰*ü¥ ®?XoŽ,¼Ùgº½j}“D!f@ÔÄ̔51û˜AécHI˜KNÎh)‘r¬­æ’gŸµ­™)¦YDJÉⴚ¦Ñs×Ó"¢8ûº®sʈ`­Ýl¶µsXé>l›åaÊÐÏÁ-Ve0i¥Cò…sa=OSœÃ¹ó版2;<—SžyVJ±Ö:‡r°<äɇâr¹N‰b–4Ÿ1D¨)ÓbÑñ<Æä,k™[GMc7}TÆç8ù\¢u6„`¬ªšÅn×[ëDd+¢î–nðñúñëT-YòªÔf<¾nlå#§@ +Bí
+˜8£«Ê#±Á„ì–m֜‘L[é
+5ÃnܬœµÊŸìòT<•“~K…D&d–£­QW(Z|Œ…8g,Ji0T$ÆbLÕ¶õ<Ï»'°TR[kš}Uk·\”qljÔ͗&½ýKj¬/‹ÝÖ7w”ŒhÄRÊ]ëFDDYC&–œ ƒòÞO>å\Yƒœ(6H9Î>(¥ *ÌD” BÐZ‹H¿ë)g\,BûŠÓ®xU öaB<=)›[7j73Û˜¹ªª‚bnË1R(…R@Î+F*¹¬W«RJˆ!ÇÄuUWm‰¾¤P‚ÏDÑÏÖVP(Ffkµ¶”RÊÙº…caUréû‘šºÑ bµʔ£¡…r,iÑuBُýj½ŽsŠ!H!%hµQPr)¹­¬Ñj³Ý8ÉRxŽá… 9¥Íé®ëºR‚ºqUs6x?Ž  ¦çP5N¡iºVˆ je•ÕŠxf‚‚¶ÎXìws!i«vÇq7)ÑõaŒR •<ù]½Ð­«£8Ѳ]TVçþT`}Š›ý§½W.ÌàŽ/tÇ~QFŽ,3e’ižÇٗR(ggµ.iö(”Ål´.”RŒˆP(ÅÛÚ óTÊ4MÖXcÌØ襤)¦ÄDܶ¾ïA Á‹à¼ f£‹Q TDؔÑ¥[…%†¼Aœ’ŸKÉе%†4ÏD4î¶J¸¶¦$M9Qaƒ`
+ d"sJ9À8ÏљRË<‡R-ÆY`"ƒ¦1…"¨MŽ@ÜÁºï{aV 1Ê<% +•Ñõªî,©œ
+°&@¥YJÊY!¬sÉÞS9D®juv6@TYh]kk›óæd·3Ö*­´Ñ
+!à4ŘÈ4Ñç¹$aîÚÖÙÚFß-¬ Œc4Ö± 6M‡Êìú‘YÖ«ƒâËöd@VÎãn¨šÖi•BúSõå0ÝýxW]ÝՈì×ØwE˜€CÊ%äbö>Ì1¦”JŠV«JcŽ³âL9aJJ ”S`&¢äý|txÂ^1d¨ªŠ™‚ÑÏû3†y†A£ò
+Å1šú\ŒB£tô¡ C)¨výˆ" pš§˜’³ÖÇ8oCôsÐÆ6m7 ãÙv×Ö5‘Œ£'A MS ©
+)öÞS!Ô*)SkیÉ07«&ÌÁƒU,‚ bʅX)]4Q™BÞöór¹œCâݘ2©
+­³µhT0úÂ,((Ä@"(Æd†$öµ[­µsÍà©[ÕsŠ4LÞԈ ÑÇ8ÇΚ£ 1ŠP5ËÕîx¢]•cÈRHXRÓê]ßǜ‡!SJ©ëLˆ‹ÔM—JÙn·Î¹ƒz(€ŠYH %ò#Kí¬ñO ֗¾Ü%ß+()¥ÄSJDB”gbHyò!Æ …r
+ ±˜â 9göˆA8Sb"@Ž!Páyž•Rû’ÖÞ97Íó¾$•Y`œF«mm,;žR?ö:f´±Àͳ @œãªªˆôœ2@KŠˆX €=ÞÌ9烃ƒ¦ZúÍF¿^™!H.‘mUK’ÍgæÌ
+­Ê‘´±ËÕ¡62‡b”b|.ÅÂ>¶]„Y!§ª^lNN6þXDT‹S?”$‰8‹Š1¹a$¥cŒ>„˜Ù9nëF”îÇÙk$U>ÇÖëP Œó¶šŽ ЅèoÛ¦Ù{K)f¡A¨äm
+d0ÛÊ{:i›ŽJلDÛd®ëåÈ܇ ´aÈ Žó\rc‹@zO¨êšõT¢@I)­í9ó¥²bçýËåMƎöʉJáE$çBˆ1–R„K
+ƒ1&ç9¦œî€%TZ§S˜8G +ÆX2[«‰2Q1VåœÊ閙\UYcÇqTJYk#åÓ¾âYDæyÖ¨×ÝR,lG¢Åœp7—œóf&ë,Zj-YJ£ÑûÈÂÎ:•r.¹mÚ³]œçÙëeÞEØô)¥2ç¹0°¨LbQ)ÏvŽU­ c,"¢R1Ì%e"äãÓ +Új;¦Pk$NÆ(¥ ¹U'3•ÅbAm¶žYŒs™‹¾l6¢Õ8Í%§ ±*ÄxôÞ: M,ºnF¥sάԨ´/d¬%m¦TI1gTi•)‚”%ø1±g9ÔÚZQz;{*Ô3dT‘yB¥@g–ÊDdÒØ6 2"²‚¢=hÕ¹Š¹”\°mÝ¢ûӁõÅhí—g9ç»ê*çœK¡Râ8îÁòއr)ÂŏۘS&gB )Ç(璓w*…™S0
+¦!¥È®29ǜ“±šJ™¦¡ª*£c.ÅÏsÓ4
+ZK&â£RègO…¶C4:َκÓÁaFŒ™mƒõ4Mû3Ÿ?wè ŸÚÖ JL%"McJ:ã¦>ZϹ€6퍛·Úv¡´žcÒAªºNbD!P)!ÆNkmm¦òڍ›G Gp·uÍC$2Z@RË ,!$Ó.O§4³ªêeT.$Ii«ØXŸ’P%Q–~j@ÅsŒJƒ©êî`í ‚³ ÑX³X.—MS˜•Ö¦­½S
+Ó<#'@ÛìbX,šÕ¥‹ÞOþ´¯—KH…<*[WÜDµZP@Œ«Û–P«œƒ1f¹\„BJ‹Å¢[,ú1Œ·¶»)Ýxé܅ 5Mg}oW hÿ°ÞG¸+w]õ/ Bw
+ªQ@H˜Hr¡˜bÌ9æäcL9©Ì£Ÿ#å)øÄäSœç¹L>¡Ì)¦¾ß¦Ñ[Aa)ª6c…Úšde
+#†’CàBV.êÎX+…„dŠ ƒ¯meZ=Ž±Bĺ®ÆœEÒ GªqÑh¸Ñ‚[]Ò¥ºfqìaÕ­¹…˜âŒº;Zn·»VE¨9<ðMM:MÞßbÊZ/¦äÒÑ;=@˜æ샤rÔvÔ4#¬§Mß×ΐˆgŒR÷ž÷ÆúiѺzšF£u1þyæ\_:P€4y¥Ûõò€D¦n=k%
+Ñâá•wsŽ³o«\cŸ¦©—S)(¡ÌFÝwoY.^öÓÄ<ÎÑ&Q¶™$Ÿ;X­zÛ­×^âeÝ‚9f¶­Œ}[¹¤øù×ßxàÝïcfÛlu2¢Öë~núpéÒúún÷ÒÞ7_¯zè¡[·n]¿~}Uw)#2.H'ÑQôåf1ª¦XkÚÏ®uzq´cëÐE\þËh¬»îÔݺõ»Á¤RJ
+¹¥RBŽs>øœ3Å4zO±äÄԏÃ4Œ˜ÙSÎÀÃ8–”cŒg譙cPÞÊ z¦q¬«jž'h›6sa°Ú£pI(qš»F¬Å©ä=è%£çˆÃ0¶«ÀRJBkÛÕ2ÌóX’Ql +S§©«Î¸“oë-s­Ë,»\í 0W¶ò1ljìš6:äÎeN4‹‰ò”µÑ ‘€€¶Vœc­Éê€AbÉ9W9å\È(Ä«DcÔÆ$ +)Ǻm‘­>wî܍ëoÄB³”œCœ'®ô–³qF4²”›Ó®F\¬W%Dh«ZFïmSS.§ý®ÖÖu­'Ó¶ƒŸKÝ4Ï.gý1£RvóÈ(®ivÓ¨S
+•'ÎeÕ-^+Eˆ‰|Š T1è›Úø˜GÉzÙBã"2—˜…—m­ëêO ÖÅÍîºSw=ª˜
+³¦œsˆÁ‡Sœ†qšç")ÑϳŸ}?O9 ³Ã8ÂÉ뮉)IŽ¢ÐZÛTM§“~·^­“°€”¥Ä"MÅV¢™(p±
+çX+í¬£K1 ‘Ák"%‹”Î>NóŒme–- { b@º®JÙ(i*[W™9娜ò A˜uʵsÍER4œ.•)Q—/¨Äg7O@t•®ìÄ¥¶Ú®œKœ1…È‚¨+m3¥ U]˜:ëšÃƒ2Ø4Ä@È.ÛâÃÎP5 (3RéšÅáÅó¬Ôéñ±6F¡ªŒe£À55 ĜëÅRˆ‡akgê:ƒm‹U=—d“IrLW._ž¦É{Ï(1çœUzï¤VÊ.^«[,l$Œ`[æ4r6fÍɨƒ{..Öˬ$SnºÖÕµ˜/MßúcÀú’=b.Tö;M_pՙY¤pITR)1E#­+[Jö1ùççvýnL¬&Iyú)ÅYKŒQ¡j»¶Q!­ua™R„ÂTJrMU;7úÙ)S/ºª®)¦’òٰݏKJÅ*Ì(Zëº^²Ö…´5 +6U£•òeöTŠmÓ*çÆyY·ïzඪ¶ý®ŸÒMÛ®–\ˆs!æyö•s–0í|ãªÖ5n½X¶‹ÍæÌK¶UCsl–mÚ1DR˜A„Š˜§ ­vv‘| Y S·è€T µ\(†¦iÀYpFˆvó$’—‹EÈØkº«­Òu×Ã`œó9§œ˜¹ÖzêLjØ."œbŒ1èºY.”ö[Já\²6¬©l¥­æIçÜ-º8M”²Óf&©´‡jë KŽéâŋçW몪ÞvéÊf³ ™8³-,·=–9ÅÜv]eÝns¡,Ž.
+Ñà§?X{žnÇ<E˜9SÉ9çœïj¬œsfITbLsôÓ<÷ã0{ÏÌ$B(!§až‡yúq·Ù% Òj±\ÄL±p&6»ÊÚ¦²•®łœ²R­„,P¹ÊÛoz»X6u»¬ÛÆVã8ž½0¨BR
++%Jk+Ÿ£VÖµëonÚõÅ+WÎÏg7oÝÔZ×u5‡btl.¬._¹<‡@½'6,ÊbuîhBœ¦¹”<Í#‘,LëçÙvêÒå —Î_X/W/e¼QúØO‹¶»ò®K¨Ì3/¾T4äÂÎê¢÷i½\i¥*ÔÑrõ®«ôÃ𹧟<Þn¬Õ%Ó@³6F+k]=ÍÓZ¹{Ö綼u‘¦qÌ>EçêÖ5ëåÊÏs îpÝ)£ófÌjÅÌ]ÕhÌXBBfI\<8*)ŸMs"îŒVh4`mí¹ûîí¯ßR™ªªmm›¦yýõ×mÛÝwñò<û?|ü‰+W®¬êî$ uJ+ƒ* +óºmëeHœ‡Ygº¼:tֈ ÊÃîٍãæäìÿ+X{¤î¨ölåœSJûðÁþ}ÎyÊeš§ižCŒs ýÐ÷Ã0ú9QQFG.Ex7ý¦/‰TåŠp"N$$èCÆÑøä1rm]Iyœ¦JYE*ë@Î<ÏsÃ9nÆ­­ººqÆ1ɧº®ÓP&*dœVÐbÝ4ªÈîÆñ™ÔµR I1£8eÅ\[WætëädŠa˜Ç˜“¶F+¼ÿàâááÑÃ˯^;[W5Y¤*dQSÌÈB1Ýܽ~ãõësÍiðJWëªãRÒäU[Q,Õ²VV© KÈá`µ¨´ª„;t’÷ý™Z4Mëc¨m“}Ì)ä¿üíýÐþ`!Š! »áɧžü'?ù“oŸ½ûÑGÿí¿õCΝ·¨Î­nÞ¸ñó?ÿ³¿ö{ŸÚ%¯þ­ïÿëßðþ|úsŸÿÌÓO»]:¯^}øû?ñW®½üÊOü“Ÿûͺ]rÈ>Ç{ŽŽþÆ'þµïøÈ7ÏãT7 +•’KÙívÿ¿ÿûßû=ß½\.ôGôÒ¥Kÿáÿ0‹üèOüħŸ}J<@¡š÷ßøïúøw|ê³OüÿËO\Z¯ÿ³þ»GëÉÏh ù©Ÿÿ~ãñO°¾|I(w²Uö©vû (a.…r¡\(•bòÞÇï7ÛÝ4ϱ$Â0Ž»¾ÏÈ>„LT€Må|ˆ1¥ «£zÑíÂT
+Íã˜üÜTÕáúmÎÚ³ã
+‰¶gg³÷ËõƔ­©ºÊ €5URvÜö³€,:Š±®ëºqµÑϝoêz×÷gîkë¶rh”s.R`SÌg›ÓXQ[×"clšÆ8Ûdz>ûy(ã<bUcÓtÃnDsŽ7oޜR\ž;DyöS:ú9Å×ßÆauá@‰š½?ÛlDrjì‚+…° 8û ›ÚQ ×^}9ƒkêœÒÁz]ÙúÊŋ‰Š­«Ý8mê÷=põ‘+÷ýæ§~ç•k×¾îCúæ¿ùCvÿŏüHçªw?üÐîl÷;ŸúÔò`Í9ûq^T­­ªnÑ}ïÇ¿ó‘û°ºúñÀM¥®û֏~äÓ(GËUŒIˆ+WéÚõ}ÿô“OÚ>\¹x黾ë»~÷÷ï—ÿù¯ŽÞß¼yóýïyo,iÇó¼ó<¤Œ~웿ù7Ÿüm´A¬´þðû>øî޾ۍ‹ºjŒ}ÿ#ï|兗ž{êÉ(EP÷§›U÷e«Bù² ÏېyŸ–IL™Ê>¤>‡2ǔ 1•Ýì}ðÃ0ߺu*$<Îay;‡!z¥U.%æÜ«J­éH9ŠC¹~¶ÕF¯ºÅÑrJž­„ÍÔßêρ2zÕ-:ƒGMe)™\u±ŸŠ”‚Ô-iœ-åH/<X¯Ûʼn5u«ÙšKj±:°Ú¹—_Ú^ºtwXÕK½°€J+£µ5Ú¥õºj(åT¨i;mlˆYã¸É~˜Æ1E´ZD´Ñëvu|z"Z +ƒNñyè–mœr¢¢e)gÇ')ùZ³i-CA*R"(1]5ç(‰Gâ2Nu‘¢§»•–k©qdëvwÕºnµõÃðË¿ò˟úô§?÷ðÿÿà¾[4ÅÀã'å—ÿá?þ?W÷]J1×35•Cà«Wï½ïüÅž{n­ÔñsÏ?õÊ3›þlsóºßmCœãÜw•ÃT€Û¦eøü Õã8äð—žyæé_úµ^êêV™e¤¬–í¹Ãs2Æ?xáÙ·?ôàҘ³qEîyøí÷<ðÀ>ó\Öà +-…ËOþß?óS?÷³ö`Á…«®kW_Ù~yÈjÿöÍ&ˆb,1¦ÙûÉÏÃ4 +ÓèCð>ö}Ï"Êê˜Ò<Ï)%öq
+^[Û¶m&PR‚×ÏNÞ؞úµ³½ŸŒµ‚ ´žü¹d*ž’[v©÷Y0 2Bˆ‰ÐtέÖk¥a±ê–Ë…s¶ŽÒ²·§ÓÉIÒZ
+BJ[¼+¾&1Ii2®R•5ÎTÚZ¥ÕÁŚH¬s ô4‡˜ÊüæÖIÉIJQ
+À 6U}iupϕ+„pãôxœç®®±ÉÏ,Ò4biªÊ¢Ê9kPX€³0#hkNOÏVUÛuÝéÉÖÚ µ6ښºÝö½EFyÊõÙñ髯½:NÓSO=uíÚµEÛ +ã8ŽcÁY TŠŸfÜõ‚8ÞÍ%ÿí~øå×_ý…_øù¿ñWÿõ‹/l>û;ûˆÄ˜BJ¢µ5&û©ß­WTògŸüüÙv³emÈ)£¸¶a£tL)å„ZýêoüÆ÷ý›í?ü¿ý[ÆÚoyì±ÍnûÒSO^xÇP×µÄOÏNUšq6çòe%v_äc}Ñþ SþbªˆHD`a³Ùl‡~œ¦ižç9ìv;VÖøÇq )Æ~œ§©n›Æ8QYb’\6ÉRN™h·ÛicúÁLÞûœs™Jâbj'sÎ"1…ÆZM™R–ÆÙ¶ª4[2ŒI˜ã6N>QκrÐ8ö™f5)eÓ´÷8UÉSN‚Z)­³ÆYeŒ©«е‹f¢– IDAT±Ô¨.¬Wp°~Û¹óÁû·nÞ<¾sn¬n­qÆ´]§Œ9=;+1ÕuÅ,ÊÙ2û0LuUuU“­óPP´JÂèLgŒ!ˆkö[æ¥d­uL±Ÿ'VÖ`e0Î>Ŝµ«ÞñÎwV‹îc} ý ¿ôKÈÂDZéw=ú®ïüøwrçÆà_øü3¯¼üÒ}÷]ùà‡¿ážøì§ÿýïþøwÞwß½J©Ã4M1¥œs¤”³TJ;™ƒêÚèçÓí)£D.u×f¦~ ¶­Kʬ¸äœJ1•ûüÓO~{ü¾÷¿ë=æqíìG>ü‘k×®m¶Ûóðྖ$~ä‘G{ì1ªŒQæ7û·WŽþH°îRu#æ”Óݝ¾Û
+h|ÌÃ0lw»Ív;L£~³écŒ¨PúC™Êît“J¦”SLU]ç’7CÏFá9Æyšº®[­V!„aY¤ªkF#€5ºvnµì–ë…UJ¥\ÆY˜0G¢©ÑVÆj…h•`FRÊXE…Ør.%ËK]Q¥[‹PŒ&fÊ J*A)­Æ +…Rn(m]Õt‹eÕ4çÎ/Û®{Ûý—ΟówÖ(Ò§ílžƒäƦ]·”˜+ç¦úàUí¦Zt‹a³ +ã¼^.©Ð²j˜%%¯µ©ªÊ9BšCtÖø0V¥qm„—Ž.‰ÀùóþÓ¿÷wÑ¢®_zö…O~ò“ÊgªŒúø·ûG?öVú¥×¯ÿ؏ýøõ×_}ôÑGÏ>þÄÊhâ‡?ü‘÷üîo}úӟa&&bBQßvùòQ·èûmîýhœÝßXçÖËU†°í5*Ò֊´z.é©gŸùº÷¾ÿÏ]8å҃÷ßÿ?þô¼÷שׁªm;fnk÷×ÿÚ÷Û_þNÓÔg»Ýÿ½ÿ$‘èw7²p{(‰ˆ9çcœç9„ཟç9؍ÓÙæl˜Æmß÷ã@L›Í&ç"™ ‰ѶïJ,Ùç~ÒÆd¦~\Ó´m³¨›ƒvñ¡÷½ÿá‡ÚìvŸûÃÏß:>Ωh£«ªiÌA±íªE,±ïyâcuÐ4(`¨ÒªµR[6ˆY0§9)£q jV šE³(bæ, ´BD`’œcfc®ò)†%ÆñìµyU^\­ևM×®W«ÕÁÚ9wv¼}áÅú³ +3)ƒhµÖÖ\½ïsõÒ>}íÅt—ï¹ò‘÷¼oq¸~öüó¯^{uÝtM7çøʍ7ú~èºVk[
+圸î. 목ëæá‡ßþØÇ;=;þ/ÿ»ÿö÷ÿÌ×àCÿÑßù÷¿çû¾÷þÒÏÖÎåX~ùŸ}òõWn…áú­›Û7NJHßð óËÏ>?ôۗž{á»?ñ‰«W¯þÎïüŽµÖãœ5ÕÊÜ{áÂ7}ðC
+ñ•›¯=þÔçn܈˶sJu¶úºw½7!>ùÌÓ]]G‚¦iLå2õûæ±üwέ>ôþ(¥üñw½ý* žw]HåÇÿçðýâÏéU‹¢^¼öÊ=ÝÿÀzsžÂÞäåœsÉ>„½­ !Œã8ŽãÊév»ëûÂ4 Ãv·E…óìSJژªm®\8ïªê•×^úátØ"[9J%¤˜J¶Ùp4Ð=nߐkE3ÅaRF¯ÚEÛ.ªº²ÙÇ0̛±ä„1]hË£¥±„•f+dJR‰€H
+“fRˆZ+(B̝ˆb‚”J ÙV¨ +j·«Ã£"”R  ˜Xˆ‹$³I¹ßžigÛÅâèÜÑÑáÑzyîêƒOÑ~~íÆE81¤’oÞ¸YÜ`AÍÃT×uœæWŸz®^/Cœ×M·²õåÅÁµÓ[Z› .P‘Rx»Ý¥T4B*̂ĐS)¥¼ôüKO?ûìoðÖññsÏ='ÄðŽw>²øv¹X®WK«µòó|zó8îÆ«<ô‘~ÝAÓþ{ûßR"W.\vÖ.—˺®µ6Z«¦iªº
+!Þºy³Ñö±oþÆ˽ŸyÛó_ý×R4ÇJ°f¬¬{àÂe·Ëw«`NñÚk¯ÍÃøMùèÕG}ⳟDZ†B”r.ªh…›ÍÙ /¼`Öݸ.Ýwߗ?ÇàN
+9 Q)D…8•s1Ìó<Žó<Ï)çqŽýàûÙ÷Ó´†BҐs 1ŽãÈÌm×vMsß=÷v‹…Ñú¥W^q'•C¬›ÆX3 îßqÎ {Ä^¡Ç7"t‹õásև|È2¢øƚºS®®–¬$ރÏD™™A$šŒ…}õ±Úç@µ¥TSc½h")9§B$Ä""À‚¹¢b₨4 ¦’ršæi»9{£m»ÃÕÁÁáÑѹ££Ãƒƒínwëôd˜ý'»©nÛ®=îÏ¢Åa@ã‰NŽ3SÛ4»²Ûmú76·Š…ûο­­»œ‹¦©,›•J>”œç~è§)å2õ£SFJ,M·HS
+sH™®ß¸ù‹ÏçJ;­Äšûï½÷¾ËW~ýWóÕ×_C…¯\{M×îý<Z 2‘Ò*§”û1ÆøÂføßþñ?úäoÿ†íª^¿& %%4z7ö/¿úŠ«›L¥¤Œ”%”’ !bÍ“ׯ_ÿΏÜvÍ?øñK1æ”Ê‚Û¾P ÔÖUö!¥è¾¸   “¤\2"Š¹Ì!ÎÁûï‡aJ¹lΆÝnÂäSæy& +!Žã¸ŸR*¹”” ¦¸ú¦ªœsËåòúõë¾µA"šæ*c;[Umc¨„m_bhëzÑAmœÐ̊ÎI]¥,èۏ-@©¥”VZïí 2bæ†T–êèâš1QÁ”SÉeÿäœC*6—”sN A@ˆÊ>¦Ç"‚˜¤dJq7œß8]œ¿ty}xxÏÑù£nyãÖ7óÉgnL±ˆ
+gߐA)Å̾ð4MÖZ¢¹âÔT®¶º2ŠSPh$—PŠµ¶®kT:&ãäX!†9”X4j¥´Æ"ý¶Ï¹ž;÷àƒºUsëôô¥ç_~û;®vm÷s?÷óϾøÂéØ÷›³aÿæüÀ¹váç ^:þ[>øá~žDä¥k¯\ö©º©‡q<\ÖΩÚõ9¾vzSiBa˒·Cœ£ r†át÷ùçžþà7}¤ŸÆ_|±ªêª®Ï5Ý{¯¼mÓïœ1WßõÈG¾ñËÃCDýÒõ×ë/߄އ«
+ñ~{&…C ý^Y;‡yò›Mï}Ã8ÎÓ8Ž9çív;Ž#ìŸ1Æq¯_¿NDUU3{cû”b…DSŠmëºj*wÔ­¹ÄPr.­ƒ +»lt¢™A3JÑ
+´V¦TN´VZ­µ1Zk¥Ð!(¥´ÖJ©}!†Çy€º®)»sçÏ75"ï :øn%
+1MÓ´_ÕïCŒY´² €V™T(yšç7nÞê–Ë˗ï¹péâÃ=|xîÜÍӓPò²jÀ(òiê{ç¬1V •ª’µ¼þúo¼ú†åG|Ìû‡6^¾|¹”rýúõ®[ø”±ÅwýØuÝÞË6V}ûwü¥¯ûƯ×Î\?=þ§¿øÏÞÿ®wÏ!>ðàƒ÷=üà¯üÖ¯ß|íÕ§ž|JP}Ë·~ë3Ï<3ŒãÇ>ö±÷}à“Àô~ú§?óÙÇcJÕ}÷ôÑ÷xïSH±”(”s%E‡31ÅZm¦‘ Î\>óÔ~Ûñ͗_~éÕë¯Ç’ØÏܬ–Õj Ö~ß_ù«û¶o7Z‡Rþ§ŸøñO}ö÷¿,œ¦‰™S¢˜bH)•4?NÓ®ïÇqÇi'fúišæÝØŸ—Rö F˜æ¹®ë”Ò8Ž{˜bJÎ¥”´ÖûõišêºZ¤VmsáÜ!pQ ~Pòª©N-+hŒ`IšX£å«
+u­ËA­”VJi­Ôž$ +y_*¨îNc8Ù¼ê¬M¡šFz÷{l+±wÒ™¥PùÂFgʹäcß÷ý®¿µócH1%F­´1Êè²R‰µuݲ{Ç;Y,—¦r>Å×®_æéôt3ûÔ¶-37MCDÞ{4°:X¤TÂäK,À€ öªhšæ‘GyßûÞÇÌO<ñÄË/<{õêÕgŸ}6Æh­}ûÓȋ×^×Õ«ßò‘æ2”Óqûò믝o*ԍ¶Ο?¼xá÷?÷Äk¯¼²lÚ˗¯„àoݺuõêÕår§éҥ˟øÄ'^»ñÆéæìÕ×^cïùÆoÆq¦ßüÌï>ñ̓fÑܺñƇ?ðÁÚUŸý½ÇEÔ#ï~×s/½ÌÀÎáÕû¼qýúÙé©kšÃ‹çÏ-V7^z…ˆºúv¬ëzÇÕzýÌË//þÓ_û"°v»ǔ}Œ>Ÿâ4MÃ8î†~†aœ*W]¾|B3MóÉÙÉgÿÌÓO?­µN)m6@¥´ÖûLŒýŠ:¦¤kçœÛW€µmÛ÷}NåÂÑÅE[/k %λSgteÕ²­ÛÚAXBe@eÀ6ƵbkÖš”ujÿ\¼ý¢[äý7ú¶¥tŠe˜oߧ'Ç?ú>g’½»4aÚë#b¦RˆIX
+Ñ<MÃ8 SžfßOã8ã< +û‹jWû•
+K»lÛ®»ïÞ{¾úöåryº9{æù®]¿qtx´^¯ËÅ4NÛív;„0Ž£A£DÃ<ÎÊ(ç3¯×ëx@kýÒK/í¶'9gX.û s×uÃnüÐ×Ãßókt,ቧ>ÿ¹§ž¤H…´èº@¥êš’‹džçùʕ+§''TJ»XhfkL×uSðËõjáðèpuÝ4/¼öŠR]ÅVŸmN»U“·ÓÅՑ{Öï¢Bpêà £ÑóAÄ-»lLf?ÏÌg¿/gµÎvGë+ÝÿëÿëÿñE¦°”’Kñ)ùè§|ðý8ã°íûqƒOã4‡Tˆ$§2ûéììlžç}ñ8ŽUU-‹ižSJÖÚý£/ꪺµ9;wî\ÎÙ9·^¯ëºæËçÏ%Ž3Ó´jeÕh«Ðªb ´eã”5dÛJlF3PJ,ïõ•ÖJ©½)Üçš+­õþkZ[kÄVÔ¶ÍP£ÖÑÙªm +jŸLÆD€¨”á»*«”¢m[wçJÎ)MÞOó´íwǧ§›íf7g*D¨Ik´VÈ~ž‚Ÿâ4‘äÃo{ç£ëvIüY­õ}÷\yà¶ÛíµW^ñ¯Æ)%$æ¢ÓÎZ¢ßï¡Ý¼yóääd¯×«J·]ç½÷!Ló¼^¯A)ÕµÏ>÷ì Ï<cµjWmTäêzL“Óúðüù³ÓSp­‘BژåjÕ±TMKÄh”}6ìcðÑûãt#Šuî¬ß®Ž¬¶$p¸>êÓnµèÞùÐÛßÿèûžù¥'žnã{«UæÞû.7®ŠžxñY0fYwyöuÝ"h`Q
+0„Ø÷ýWpÞ÷õ™>üÿË֛Yv•w‚ç;ë]ޞùr«ÌÊÚ7 í¢$V ±Áj3 Œm<Ø`›žŽw8Æa;¢;fbzbºgbº{¼LÝÃ`ÀÝl‡QÆFبÁ!´«JURíU¹oïåÛîzÖùãdf•$nTdÜxùÞ«›÷~ç[~ßïü¾,ÏÒ,M²4ÍÒ<χ£´ßëeY1&E^–e‘¦ !d8*¥c¡^¿/„ ”ú~"”eI)Š„þ­fCC™'ÌÉJˆcÂ96ÔZÐH…§axdE˜cBcp#‡‘£Ø BȎ +aL0Á(BÆVǔpe‘&c\ðÀ!°ˆäÒ2Æ¥„ûG18g´1Fi¥”ÖJcP™¨²¨Ä¡ÔÕñ±æÄÄx’$+á`8èF…T€%` µªt֕yvùâ…l4šÝ·/®Õg§§‹¢èw»ép¨”ÚÜÜôú$
+[ÍÖT{Ê(%£tm}%˳ jµš”RJEQ^$€ ®µA€´ÑÂX•…ѐꢐŠq®¥2ÖXçjµj¡”TºVýn(ceœRÈÜT"gt‰ «FYžGqT*MÃÐ:$¨àœ­omð˜S©E +Ýyìd¥ÙúÁ‹ÏäÃQ‹£söMM_\Y0EIbj²² £˜
+¤²B)C)!”óQT©²”¥ÔR™4É£QVäE©´¶iVôûýQ’ÊRæy6 +“Q‚cBüí‚@㜓Rú%xSí©"k(c‚Ѐ2„ ívõ`¹‰z(Bd©Ò9ËÄ0¢ s¡u3Œ1BØ9F©ßÀÁ¡xý§­
+¹¬(B¹(c!«±THe‰"Bhç£^{¼ +qÁ1ÆÃáÐÙ#ŽS+‡´6Ji+Y`´2KÒ(vQTÍ+ùäXžæùÊÚÆêúæÖvßmю’4(Ïóþ(¹±²2>ޞÝ`ßԔTòҕ+›€1Å`¥¬×›wßvrj|"¥çΞÛX[¤¬UœÅÈ@ÄY-Ë0Ä(!È9)eˆl”
+ÊhX­ ©ƒ Òeâ”Áˆ(m+µš‘&`Té¼È³R–•¸àdYˆ@P ÖYYäÒh¿õÙY£TA0 8oÖœÂH¦ÉºL ++Ë++kß"”N­±ÈÑ^Qþã‹/A˜ki5ÄÀ­ÔeQypA±@‚°@„Ñ[DAr%‹²(²¢(Ë,ÏÓ,Ïó<ͳ,˳,ÏóBJ™y^dƃZúý9ÆZmŒ1†RjŒñËŇ$À`ªWkq”‚–Z*S&ís‚„³Ø`çˆAH!!iŒ F”8J8g‘³^¯c‚À€1AÂÈ:gÊ9ßÉÙç„RÆ)E8 *”‡ížqŠ‰€3Ò0ªR‰¬µ„€R²ßß6V·›œ΁1Vë‚1Õ&Š"”f<‡””Zéb´V …`´=>¾¶ÙÙêöÖ6;FKJ)PF(‹’<Wëe¡ò4Û`þðÁƒ(IS0¬4fccíé§~Ðnaën\¿®µ Ïó¼,s_Ü` ž’ëõ½RˆQšb¢• D ‘ X@±ÒÄA˜…±ÖDŽ8Ž¡E‘sÎ)%ÆDP‘çʔQœƒÁyY–• P…N“Q„ãc­©‰vÀÄÔx{m)-µJt±õ¶·»a³Õ*ØÙH’eŒRd@fE‡‘ºÝn£Ù4Æ0Æ +e-çoVâ¤yžçy‘¤iVäIšfY6HFÃÑ0IÓÑh”ç¹Ö:I’Á`à±#_
+!!>7/Š‚1橾ȏI\©6ZÍ8(½¢×«…l¬)"ŒŒAÚ! x„!Ê !{2‰àË=‹Æ^ !Dñ&‹1„&V{“6RJŒq¥Ri6›àÅČ6Qq\”ʘ5Îy%+k-¥4 ò,“d”QFÅ`0 µjq‘eiX‰½ÆšÕF+G¤ +«5­aL"n¬®cV”¶FKc·6×{ýn^¦ÇOœ8vôÈÚúêÒV‡R2 +/^»²°¼pž&)åÂK/yàÃW"aú”ÔËüEQ”çy½û•F-d‘Ù<gBT  +kÕjos£R«UÂ@kÝïv‚ PJ@EEYhkc“Qš#@< Y–¯Ÿíõ³çµ¦¤HF­J +œMGC=FS!g¥”VËHð4I9
+ȝŽ†Œ1dÍ ÛqÕëõj½¢KF£ŸlXY‘’d˜Œ†i2LFƒÑ(Ͳa’¤I¤ÖYQ8ä8á^ŠÎ»
+ßò)”×}óON1њÀFŽºªò¦À­GÄ8­œÅˆR$BT f€1AÈyy €1ÆÈy‰»;¸KkMÑhY°y¤Ã#066æ±’rsm½5Öª·ZãQ2rÎaŒ aþÄû×$Iò¢ØÜÜ’“'oBDQ†¡¢j…Û[­L­ZU¥”¢Ž–´,Âp8=Áæf÷µÆZ뛝¬,A¨CØkV]¹xAÊòØñcӓ D/Ë·»Û€1ÖRBB‘g…pŽ1æ·Ý:çò<o4~Ã#Bȋ—8c¸3oﻃ@divcaauei~ÿþV­±´´”g gÀž8yœ¼pc! ‚ûï»gnnn0èŸ?~amµZ¯Ýwï½F­ôX­Q¯ÕE_¹|y0˜›GÎœGqÜrs[+ëP¨ûî¾[i}mi¬ +sR!çZÕÚ©S'û۽ͭn¿Fá‰ûîÝ·o8.-/K«SU¾uª -v$I†Þ¶F£,Ï Y¦yšd;¬)¨(KPðû›½aÙ]7èœ ÃÐ9A¥R¯…ݍžÉ†ÍJÐ®Ä ³l”PÎaÀÄE¨Bˆ8K£]íT´;r×"»'üïu=ù“1r€•R¾VÀE῁Rš%i¯×«Õë„ÀØþK|yQ–åæææÙ³g«µxs]¿¶°oßÜì윒Ë\„¡”jyu•bR­Ö(çš8Ž £Š1RJkLEµZmb||©¾²º¾Ñë¤RÁÄ:k¬]¸~­,‹ƒ‡NO"ËC©Ô`4TZ—e©”ŠÂcìk(‹Â/ŒÁ`àóÔ$Iî¹ûîÏ|úS·ßþ6­¥ô駟þwÿîߟ¾ÿþÏ|êW>ÿùÏ?ùä“õjuvvö·~ë·þæoþF•å§?ýéÓ§OûGðòË/ÿþÿûǓ33¿ò«¿
+ÖÕ¢J£Vëw{©Ñ_ýêW·;Ýßùíߎ£(KRŒñF1üêŸý9ÕöŸýÆo´ÆZñø㹒„ÅŅ×ΝÿØ÷ÑÇ>úÑååå?ÿòŸŸ9wöãìxÄ{Ùõõõ?ý/ÿùåó¯NLM½%yOÓ,/¼£ò¬âþpP*Y;ñ‘(i­‚ck­–Ú»(¯ë;žÑl69çQQBòؚͅ V³Z**–ˆRǘlœ¶Èa„bÞ®º¹ƒÑx¼Ó²ÖA µÎË 9çb´§´æ½·ïÌʲ4ÆpÎcBð"/ŒÑ”Rkʽ¾¡^­ÅÝn×Çn\8‡BHáP\©
+Æ)〳ç™,2ã
+!AIGÈ9Áh†ÕJeaqy}cSj²Za¨”¼~õrž%·Ývg½Ö:2³}k´¦£’PĐô¾|ö…—ƒCyÙjµú裏¾ãí§¿üÕ¯\¾|ù§úƒþéŸùîßÿývg«V­<øÀéüþ÷ŒVï~×;§&'—ßóîw}ô#ù¾ðê™3¼óþЇÏ]¿òý§žúŸ~¡Q©~äg=0³ïñ¯üå•õÕs¯¾zôð‘ãǎýýßyùŗ8çe€¶ÖWÎ˜žh·Ûí>ò¿ûÎÖU`Í{ßó®±FM9§Ôé{ïý…Ç{öÙçžxâ‰|òé½ï|ç…Ë—ÞªÝM‹¢È²l8%YšæY’¦£$QZeE‘æY)wUD00ÁÁa)¥ŸøàcJyž{t2ŽcŸ"l÷{#‰ âÕ¥2”`*"Ë+@Àb§AÈ
+F°ÅVÛðvvÃrJ&¾aî÷ïsÎc9BJkg­Ú}ûÜjy÷5„·6Ƙ±ÆGY(oX¾CàE¶Š¢˜™™ñù™CŽx,µ
+£øȑc”-rŽA8̲¼‡³ss ’…Ö†RJ ‹ãj­V£xmks˜$c£ÁXpÖïu_yþ…ãGN=v̔2äÂ*¹Ôk<ùëñ·Ž Q…Ÿ£aŒ‡qßqÇÝ­­o~ó7nÜȲôÓŒµ~ðýï¿üÒK÷Ý{×ÖÖ>øS?õ쏟¹qýÚÏü1¥äW¾òå¥ÅÅ4Ïî½ûîÉ©É4Mo¤×:¢Š2¥g_9óò¥ JëÛNž€žþ™§¤µÆ`{}óøþƒƒþ`iqiöðÁ—_ziiii0èŸ:qrvzæÉxò¾{ïéw:'Ž?ØûÆã?ýôÓ333§Ž¯×j”ÒŸ
+³"Ïó¼ÌËd˜Ã</­qE^–y)ˆV&£$g8p”h
+
+£¡Ì±Â¥,§„«Qbãr9è× ®ÒY‚œZpK¨C90Pp4`À^LÜúÖ2dÎ­ôy_ÖY–…aØl6ûýþh4jy ¶®ÄÀ΋ýi£•Îg)†F`Â$UŽ1ô:ØIçŠ<O|Pˆš¶(2NÌ1Æ\¥iY"‡´ÑXÃÍ + 8œ˜Ä„rÎÍ(aºT¡átÆT8«….¿>L´v€H RÊdpùÆ%ÉôÌl,UVI–;n”ÖÎAVŒ2e*æšØ\–œ i4°@lt¶ßu×é{OWhØ køtæüë›Iö§Ÿyûén;røØþ¹Jµöµ¿{b•ÝN¯ŏ¼ï‘¯üÕ_]\ZúçÿÓ¿äX¤½üÝï|ðm·ÝÞl·AP$HcÅÚ4jÕã§NTµ¥Õ•Í•u + þwßý‡ÿáÈ?}õÒíÜéw¼Ãa8wþüÛï»aº¸²–òý?õÓ?~þÅÅåÕ?ü,Iò”ÆÁ› +k4¥ižŒ’$I²4%£RÉ</ƒÁÞCõq'Ïóf³ŠÕëŒsº[¬ ÕF=®‡YÚW£¤òÈú¡€1XB¡SdgvBs~ƒóó|ÅçUé­³hWe™1æ«?/—…a2JŠ¢ ‚ ßïqJ©,Kó<gT0ÆÃ(´ÎXkå7¯ÁYëv6´•e™&¤J IDAT£0Yšp΍¦ÖÖ [ç¬VGÃ!#˜Rª•|úGO©,¿ãÎ;£j¥Þl +‡©2Žñ°ÑÀJJ¥JÎc4Ã@0.è…ËW–ÖÖ­A4 µ¡4O¯\¾¤­9vüTµv‡Öv©Ó¢ÁXg4
+œµÆ¡ ”:甔aåiöŸ¿ôgþåÌïþÎï\½péÚõë—®7šæ õÜ />÷ ìコgŸ}öüÅK˜³'¾÷ä¡£G~ïwïþò_ÿÕ¥×(F›gŸ}îêå+ŒÀäÄ8— cJ(rî¡÷¾÷£iÀ/_½º¾¾îRZ½~፠ïø}_ÿö߶[c÷¿ýí?þÑ3ÃáЧ§ßûþ÷oûë¯}ⱏaø¹Ï}nkk ( bñVå:Ó$ FÃá(KÓÁp¨–Jù’ÕGw«˜¶sk@BXçXTêÁ–È2ÄdœÜZí4‚ A„ì]pÈù"ðæÁ½pvsšsÀçCžX’e™OãªÕj2¥iÒ¨7¼ì-c””þ
++•ŠÁ^òç¥=.ìCg’$£dT‰ãÑh4>ޞ˜h{˜ƒ‚€X FkB@©’|åê¥çž{îðþùWϞŸœ8|ô8••5]µ8ŠE5Ž"ƨ·zG@90¾ÙÝÖÎ
+ ÚY«e·»%µn6Æö˜?x`N9×ÙÞÖ ƒ àŒ”eYJGdIB†³ö̙3ÿößü›O|ì±Gzˆ ñÔ³Ï\½r•Á ?øñ³?þÐïþ.#øsÿå˪,ãV}m»ó•¿úK+õϼÿ‘#‡áϾôÔs/@·Óéoo÷kíh4rÖæyN)!&&ڙ,c½ññ( BQQJøÃ~øÑGï¾ýŽÉ‰‰}“S_ûê_ÆQèBollüɟüÉÖÖÖ'éo;uêñÇÿΓßMµ4Zÿ„ä=I³Ñh”eiQ–eQhc´5ތ|=¿‡)XcŠ¢ ”ªReQ‰ã0 ãjXäIÑïUmryŽÓ@„%@(ÂØ9ì[¿;CFö4'½áúÄÈ>`{ÀŒ1&„ð¹Ñp8œœœ¬T«Eš:çâ(΋!Ê9”繧."C»IL­^"°Öë¤I"K)ZÍÞhûèÔd£Ñ4|÷Ð!ŒEÆ9gýþK/½EA¯½öÚCÓSqQR.¯¬4ªÕj­æ8JET œ;tèhT©_¸tiayQM „(F£~ïüùWµQcã탳³`,ãüÐÑ#ýÁàÒÕËëkëÎÚfkl~ÿ~Œq–eN—`üú… ÿößþï/<óÜ/}ò—þég?{c}õêâb†Þ…ôºýÍÍJ­&µnOMNMO_¹|Y§ù±ãÇÿÇßüôÿûÓ'¾û$‚`†¡‡ñ8ù`(¥,
+ùÕ¯þåwžü{ˆRÊÍ­­#‡y2Ï /¼ðéÏ|æŸýÚo0Ɯ±W¯\¹çž{†0
+›­V–eŸÿüç/\¸ð ŸøħõWE|ó¾CÞ2z繧³gE^H)µÆîˆ2xbŒ/͊¢PJi¥U!ÒN§ §¬Yk i§ƒ³´Š€h‰Œ´H+Š5ÁcØ!켣ڙ7q“ +½ç´ì-êHÞ¦õneŽ1Ã!4”RzZEE¾í]E)%c<‚jµºof_E> 5Í0 0x¸ÕB’4Å;ë¬ucããƒsΫ•]5çÔYC)¾~ýêöööá#777§gfŽ=*„À0ÆkO0.&Â0Šƒ¨DÕ0ªNOO;rhßD›ƒÅβ X2ì-\¿6ì÷ZµÚ¡¹¹GßuÇíGªÕ*ˆ"#u»ÕºÿÞûÞ~ïýãͱf½þ ÿùN?¦é_í¯¿ø¥/ÍÏÏ¿ï}SBŠ<ïm÷úýÞõ7Ö×× @@èƒ÷Ýúžûdš÷»ßýãÿôŸ²ï~Ï»cmñhÙn£‚`L„‹‹‹—.]^\XØØÜôëÜ×I‹‹‹K7ÌÌÎÏÌ^zýÂúúz^äA¥Z}ä‘G>ö±Åqü /üÁüÁÕk×Þ÷ðÃSZ©7V–eišùñy–yõ<Ï}õça·‹æYcsÎX‚q­ZmÔêQ&›$ÏÇy#„µ!£17@q`rvLÊ7ÿÞH´ß;$»û}JäeÇιá`À9ã(Ë2C„/)¡µ@í‰öØØ£ÔƒòŒqB‰w¢ŒeYÊk)­ !1Æ!‡‚;°kk«çοZ«Wü­xÇ;lµZžû%„Ø7»¯ÞlaÊDsE ˜ÆÕZ­ÖŒâJ(¢}ÓÓ·8¾f&
+˜µÚÍ£ÃAïúÕ+ùh0^¯úýþàôÌÓ[Û[q5²Ö úƒ…ë7®\¾ÜítãŸøùO¼ï}—E‘§é…¢,i–YçF£Q–eI’ † 8æÁƒwÜslÿo~ýëßþö·Ïžus0 ”ùŒÅ_¶WoÑFSεVÞÇSƲÑHkí9>2t»Ý_|±WBÆ/_¸˜¥YžÆÙþpp÷ÝwÿÚ¯ý¥4I’­N§»½Mõ*o…eYyžE^¥’VÊCŽQy?á‘$„5Öû³3ÆÒ4M·»û[cUB@„aiµ2Ȳx7w~f8ðg·÷òVå;ŒØ ƒ1ñd˜½¦‡¢V«Y>%ã­±(Š†ƒ¡R2ŽãZ­^«Õ ”!çŒÆ„E Á„%µÑ†`W9¥$Ëó¨5›MOXÃÚZd0%œÒ¥âÜùsW¯^¾í¶S/¿üÒCï|ߝwÞ%æ„…bŒZ‹*•j‚'¤ÛݼtõÚüì¾F«%Ôæ¬G0£(8x”–eRt1`UËI–å*“§O?
+qíÊÅ•Í +K1á´È‹•••Õµµ"Ï˲´Jݸ~ý]ïxǯö7:«ëúð϶õoýíßfY&Xà3N@yQô†K—®¾ïS~ö×?ûú•‹w>øöƒ'ýÝÿó¹ín×hÉ*ËÒZ#„ˆ£XAa­8}útu¬Y*©¬=÷ê«>€pΕR/¿ôÒg~ñ—W××®^¹jwᛲ”¯¾úêGýÙßüÍß|öÙgOŸ>ýðCïýηŸØît'ٰ̾EÏAQ…Dõz#ív í8 r”rÎUšW«UlQQ$Š ÀF—µfußd{ØëæY²¿]‹ë€’’aI0Óà ~Hš¯œÃa‡ Á€1„¬CÚ`J1c-GCy*½§NXçj­fž$½á QoÌ:H0®Dq­VóI˜µv4:ëJ´©)’¢•[Ë+­VgXåpmõú‰·ßvò.bFꂇJ¦ŒRÆXY–œÒÚNgãÕWžŸßêÜhó·¿û¡DYQέµœSYZF™s.͋ñ©©æÔ$ÌIXʬQofœ †hjnÿ;ƒø…‹¯^UF#L +2JË͵¥‹ç·ßqû±B„Ýî0M2‡œuº,(eV!ÿÛ¿ÿ¿ó/~ó—þû_ŒôúƒßûWÿók¯œ (p¹C¯otz£|˜•”ÒÜýù—zÈüüG~îøCýþà‹ÿñsßþú×vŒ3„a0v¶ÚaZ:«Vfayég~öÃÿ„þe\¯Ûùý?ü¿Mi–—V8Ós/}㟔R¾tñu…10¾¸².¥þöF•_þå_þ™þTž—ÿõßúò_ÿÅÊ C†•7|öwÿUo0HÒtaaÁ÷L”Riš–y†¬aŒ +‡C')¥ ¡A §íf½‰Îújˆ6%Ô8l1ŒÎ4Ãغ½„éæAnviö?¸Ñû-ßøÛíî¯rAǔsÎ9ˆ‚0
+CŒ€Q¡¯þöܸ5®Uo8œ"„Ö–“óç®>ðàµz…à€P»ÕYþ‡ï~ç=ï~øöÛîæ"
+£˜Rêë_Ï-Ëó¢R‰¿öø_^¹zajº½¼|ýλÞöþ÷ÿ"öuŒ'å9‡´tŒÑ•Õ¥sçΞ<yb¼=†,*“ÀZ§Ê2Žú£Ñ`4v¶:¯œ;wùêU"D¨qŽ(ˆÂèè‰SûÌoõú—®]“Æ,®mÄq¼‹î‚sÖhݬĵZ +c\E¯ßOÓ´1ÖF³4m·ÛVéÕ¥åf³©¬é +ú•(ž™šÂ0ÀúêZ©•\˜çy«Õª×ëÛÛÛe–k­ÆäÄd’$>'„loo˲Ü7;»°°PEÇ" 0@še”Òd8<täÈÊʊֺR©„ah”Š*•Á`ê ²oÿÜ«ß|â +kn~ÿDQv66LQr΄ãííÞÕëW·۔áÌð›Ê-r˜àV£ VŒF倂0BÖx†€C€Foåv’«›3ÀœsÖÙ½~Ž‹>Íô×[Ø.#3J΄Š g;òÉ;¿eŒsŽ1©UëÊ ‚I‡Éf£911I. #Ýîõ8­±1Ê(ìÑÈ<f1朾öúùóç_›˜K“¬^¿ÿ¾ýo÷0J©5Ö½¶ºøƒïo«³Á’åÜD{"h¿?bŒPʝ!"¨8tüðÑ4Ï·º=m,`  +“áµk—Y(*µÆôD»74êµ¢(5„p‚±µÈ"”¤ép4²ÎY^«×Â(ocÆV¥\\XˆÃh~~¾Ùl@háFgs“267³o¬Ù £hu}-Ësk,¦D½¾¹á¬ã(G2+Ëë 7œsI‘úý½ùhmap n§ãœ ÂÐÏÖ[\\dœ,,• ‡ªÈ©8ça#Æ¡ðÕÕ­™>|tyyyc}ͽoß¾æÃ0Èó¼ÓëöFC„¡,K„6ȉ0¨V¢F­Jê4«
+Ν£`‹±%ÔŠ0~ *¼q’ÅŽŒé-©:Ú¥Ìã[fÍ{[ñ¿eŒ…aìšŸVê1Û,#„øñIADQT‰«Œ¥2ÆØæú@It×Ý·sN­A„¢K—^p'ŽŸTÊPʃ Ü!í"v„Âæ榵6KÓµµ‡zøè±ãJaƘwicÎ9£t»³ùÝï~§ÛÝ<tèÀ¹ógûýíÇȲ\\Z€z½n¬#˜"k¬Ra3!zý~2J1`Æ(!$/ò²(ÚãíƒTãJW†Ã¡*ËF£~èÀýs³adEfBxTªÕ¬ÌOÝ~ûô¾™~¯Õkõûî¹÷h·Ö·6G£¤R©œ8yâ®;ïäœoúÛýžEŽrAY…”Q)­)¥åLJɁ…qä*dY©V¥ÒžÌsò,&@œq–2F/eéâa@«Ök¿þØ'Þà±——:Ý-­Ê²(֖â8J³¬,
+ ¢0§<
+=˧Z­Œ7&ËT–EŒD„ ¥°u–bC°¥0ÁÎǞmy±-Ÿ’ïÙÍÞ¨ç[QçœoÍúÃ?xg­vŽ¶Ö*+ué”Rþ¾}ë%½`JGˆ TْR’é`8¬×ëιÞvÏZL(óh +ZkÀöر£ss³/¾øbµZ?pਖØ!ä¯Á·öcÝNç©ïÿ·«—/ž<y|yé§À¼øÂsûff£(ˆã<¤˜ck±³8ËggfzýÑ(ɤÖÖYB vv4äÉpß䝷Ÿ8ùÌùsëë+E6Š?uòØÄÄę3g¶û=©‡ªÔq[䔔Ú%•/ž´Ö¾ˆ»²p½ÛïQÎJ)—–ª•êúÚZQ–Rëjµê5Ã@\‰ó¢ˆâØST€¶†NœC˜¼(Š²dœ‘(¹ËŒÀÄ9WJé{š!ã,`àœ ñ¢ßØD[Z…9¤iª¤”à ƒ8®‹
+Òlw ÄN +XCÐé÷9 ˆq¢u±°F#Ä&  7Z•^{¾ÚqW·Hb|³íC›¯–ý¬s˜ǘRÊÃ)ó•¿RÊ7<2¢”´cËRyø-IÓR&ZÙ^o;IFss3”±j•eYfìV½^÷j`8§F㡇J’ŒQÎY¨åN)îÿ¢•••ïý·'_|þ™'Nlm¬¥Ùèرcׯ_ÍÓôÔ©“íñ BøhY‹ id6Æ:‹êǏɊâÚÂB©
+ë ¶Ö,/-^¹ðú]wÞUä)%8Ž¢4]¿vu4,/-ù'êYCYžkkΜ9#•ÔRqÆ´TO=õ”5&Ӓ„‚‡A™¯¿þúúúº5Vã—Äp8B„QDÙn" ”RçhÜô덆߸Uâ$Kƒ ”€ÅžV–%çÜ9'ËÒâÀ0„:´vg(éOà¼+)KYZ‡ ¸°VÅcÎÊ¢ÀFGaÄ9 „(‹;ת×µJwc +¬‰ÃIé§Z; À:d-´Ã#ö³Ówf¹»QøÝÙêàv:„;cэ1;ÌvÓ)B<Üï‘'ŸÖ8çœuFk­´sÎGÇ0³,óô
+Ÿœc)ÃHQH„0 „ ¡Îé,ϬƒJ¥@*Õ
+J*Sî`ÂVáãœ"ÀyQ2ƚ͖s ”æ\8g}y¿½ÝýáS?xþ¹gï¾ãmeYdYvûío»xñõ4Ï~öç>²þ ,•”Z„¡BIm A@‚0B„:„O;6ì–·Ö|Þ&µ\^^.²2I²”‚à¼9ÖÚÜÚzúÙg㠒R†a^Zë¸ZÍËÂhMSL‡N§C9#°Öim‚0aDy=ä˜P©d5¨zqÁe–sƜ±iš6 +çÜh4€jµš%iQ–QaB¡J¥šçYY¨Rë 
+Y:„ rˆ`‡œ5V–oÒDªãZ«\ª4ɵÒÉ(1Ú‡#™•H»~wM¬ueYT9Üؤ¥ªî,’ec@„"â÷[k¥0B!Œ€8„ÑÎLt #ç»Ã8â_÷½ßE¿—¹#„ÅDJ©µ‚€ a¬AÖíЬB0Æ# Hk—er0ì2›³Ni—½ræL2Êï¸ã^JÎðRÉÊ"+r/ó‡)Á”:D1æ„r‡°TZjm‘+”¶ÖXg’Qÿß{ò¹gŸ9qüȨ×éõzsûç¯/,!Ì?ú±_˜?ªÃ,Ú:gúƒîÚÆJW˜ˆµqÎ8âPH ÖjmsÓ:@;L¡Ã²Á÷OLÁ½"O-Ò@+q#Ž±•¥¤„ZmT)¥Qi­±EÄXØ ‚‰0ƒ8¡lvvÿñ'jf2 k1£”Q*ÿ’¨gZJ£µ®ÔX»[­—yN+òœ(SZBc-•3N–¥$ B­5<Ïs‹\”QðÏ?ù©7x¬~¿OŒ]©¤ÒÎ9 P kÑv¹Ή™É´,!i’$}™ +G܂$
+‚ínvîéÅÞ+ù9Íè–ÐG=´Kæ»"w£áÍ4ºµåsóu?²ÑcžžZÇ18ð„É¢(ƒÁØØ¥ÌïïðlgÖrI’ô¶· ¡ApÆöÍišöz=çÜÎGìÍæÒ-|/§µ–²|þ¹çΜ={ìØ1%Ë^¿?½oßòòŠÒæя|ôä©S£´ðS}¢(,R³±±1ÇÇځƒ0@£dfÙäÔÔüüüՅ%ÆÄ8‹ÞX[;uàÐd³•+ +·mUÛ[ÝËK÷øٜs?ãJ…s!8wÛ] ¶Åã1Ãï<uÛäÄdÐßÞ\W²ôÁÔRbÀ9£µCˆX·orúm'N½¶puqqcƱgJ¶ÆƓ$µÆhc‘µ­Fóη½íâ•ËK뫾ÉF1Ás.´Ö¥”µ·i*Ë2ŽâãGOÔjÕ8Ž¥Tׯ_;{öl^J„ Æ~–
+¸(‹Â”9,õù6"`á&QÁÝba·Ê-Çšƒ·V‚o0£7ŽìñOÚˍ„aèi¢J)ç\-ˆBAÝiœsc,ޝíÝ^QªN§3 Z­6ñ”RF×66ʲtέ­­ù€ ˆ¼ÑʝsA ”Œ¢x~~¾ÛédY:¿ÿ@¯ß«µw¿ç½§n»=ÍKʘE9«µbŒíß¿!T©ÔŒ2¥Âi–u»ÝííN½Z9yüØ(KÖFçIrãê•Ûî¼ëøÜ|«:Üàp%®­7×7oìŒéðTf¥ÔÑ£GO>:ÕßX_ÿþÓ?Ô2?4à»ï/Šâå—^~핳gµÖZ’žos!„ön5g4Ïrì‚b0<|ààïüöoýÑ¿°²²â­OÕÓ41Z2ŠU)‘ss³ÓŸúÔ'¿ù­o­|㛜2ÊÙh8„(!J*Â(coIÞw–©R ì2ÆjÃ0IµF…B¨RÖ+Õz­:ô‰E•0b±nðçÀÛÖN#v?I‰!|‹ay—»ð­†å¬»kùUèWí^õw«ÁyÕóîÓ4B`LŒ5>ý÷`U¿ß[]]õ†%¥¤„æy¾µ²|ùê•V«577çõŒ1¾Ãè»=WÁ(ÅZ­Ö»Þõ®(àO<ñÄÜÜ\·Û)‹òÑþ̱ã'¥6"K©³ˆ‘’eQÚheÌV§síڕÁö6B&-òúXkÿìÌÆښ4š2á,²a%
+ëͱQoxñÕW;ýa§ßKŠd/ÑÜÉ;•VZaÀZë~¿ßëõH$Æyš¥iÚÛÞÞÜÜôgË\©¥¿ >§”ÚRɲ ŒRY¥§&¦}#د՝%Z–#«£„S
+Ύµš¡~§"Žã¼(œ¶žþV‹RJGÉè™ÿXk=J¯¾åon%Šf¦&9œmkt‘¦€a‚¤6Æ @Ú:Ë ØÜ»¶µWúÝ
+eYg÷š€»/Y„ñžC;¸ÃNò¯ìîÚ0į[é»Ë»z +doC‡WŒã
+ìb¥¶úýþ`0ôÚ'AxF¹'0ÎÏÏ{~ÄÄÄDš¦ý~¬ÕF·ÀoþDM K’„|çwŽ=ñÄRé=ús‡³€BE)1¡Œ!øh4xúé§_={æðáÃwÞs/ƒ0Š¦gf&&ÚqÈ˲ØìnMO¶g¦'WV×0F@‰6zm{ëâՋǏÇà:[ËÝîöhÄAí1—(¥RÉK—._>9ˆã(ÏsdÕËg^9wö<p9F‚Cdv€@ßËG>˜"ˆÂ°°F0vÇ=÷ž>}9411177·ººêazÐzþð¡ZYÞÛÞÞX[ãœSŒ àcGJW×Ö, F)ìÒÁµ~3»J)±†B.µB6B"Džç“JÕ«µF£Ê)ÙÚèsÎ+8 Ú(0˜PK°6ÊZDA€È®[‚[Bár¬½l̹=ƒÛÃ|oM§ü©{ãaµÄîy»R +ÙaƒxܼR© J)F¹åç9`‚ó<Œƒ pÎåE¡•³È9sFqûí·GQä©5oʱBA–e”`¥”àôàÁƒ÷ß?çüäÉSˆ© ¬”ÆVk¥^~é…K¯¿&Ë¢V«õû}cÝòÚÊôÄd ˜,²µõ5YäÓ“Gê÷Ã$£œ[cBg.œÃ˜ŒMŽMŒçœtdæMʻϢ(â8æŒF PК3†¡&ÈœE¥ÏÏpÎI)sYZ«)ޑ[÷8ñ ɒ¡,Êv»}êäÉf=n·ÛιZ­V–eQïyÿû?ù‹Ÿ˜j%£Q»÷ûÿáÿêv6’|àýïx×»'¦&_~å•/|éK+ë«!Ž…ÖVýDvƒÂ)`ċ☋€&©U¦Ð*—eEýîV¿Û Gœ[äFØap;ssy{¦ñ^ßfÇÎx>²sE»² ŒÑ-ôQoC¾Yfó‘ÐZ¤•ƒ$Þ3í¹½d4bŒA¥‚(cœ έuZkJý‰UJ Ae™'£!8k” +Î:gQb»ßO’Q«Õäœk­Ò4á<à"Ø©@€µ†bA %kµ³oàYZj‹0ÂþÚ)ÁÎÖÅ ¯]¿vuksSp…õn·såÒåæاÜY7&£A_k7>>GÑܾýëë[/_±Æ`ÂØh0ÜÚܜ™;8¿ŸÖâÅÕegœW+‹ÒiË0µÎi0ŽJ9„¬±ã@pJÈÔd»ÝžÖèÍÍõ²,uÖ:J(cœbR˜YÀË¢¸ôúë/½üÒCïyçâÂÂÕ+W<×HpþÈûßOéOÿtfjúSŸú•‡zèGO?…!Âä[_ý‹Jµúé_ûÌõ…ë_üâ«õ:ç¢tá7 §RJ!¸.KF ‚ `B˜çœÃP–e{[í¤MdÁ·)²˜`†ܬ r»=BB|n׏sÈYoÈZ„‘·0çސHì@Ö"laì,RÖ0
+;õ¥{¸¼ËJUʑú=gÎXJ)&”`f- G!ÖÉõõ¥"IFµ,¶·6Á$DՉ‰ñýûg+•Šb4RÆè4Kkõº±Ác§„)5Æa>,•sH ç¢(ÖF•eqùòÅ=ýÔêòõñññ}Óׯ_眏/-, wÝuäy^‰ª³³ÀšÎÖf«Ù>zôD§ÛÛêt0Ò(À,&¦”ó‡fƒ8ZÝ·tcuÃhc‘Ã8¦ÔaÆs„Pª­É•2q.b."!0ƽ +Pj8‚’”±\J£”*ˆC[ Dð´¿æ IDATÊòâÙó¯J«Ód„•EÞjµ†ƒþË/¿ôŠ³£Œ`Çq„E^üð™g¾ö_¿Fûð£>zä0#$ä\–’p
+o5,Œ1ò̅B–R²R2Q*m 9—ç¹’%Ç9!ŒX„ÀX‡Þü­»Ù•{#ŸÝ"€ØÁ³”w Ô[ߏòÉìòþ`‡i(È.Ü»4ÀJµ²Súqê0(g”2 Uš–aPõ2–+++ £4" ”"!‚F£Ñh·£jÅZg­ñN¶(JB_îýG»ýI¸µ‹`µÖ‚¥’Ýî֏ü£ ^³FÕëõ²,Ó4õ^–eÈáÁ`0§¦¦üq)¥‘E†¥V­V³Ýno÷z@j +GËËˍññ²(ªÕj½ž­­¬:ʵ£´EB@ ­1Îƽá€2vpÿü‘C‡0ÆÏ?ÿü~ô#ßÐ *‘1¦Ÿç€\½Vkc‡[ŒQ«Q
+ŒåŒ‹çãã"BqN¶Û<òÑ4IÆh4ò +Y pÛm·—eÙïõg÷Í<x0MSBˆ¢þ¾Ñ°(¥A$ƒ~V”˜RŒU¦Ýž8tàÐx³q¶²p-ív¨3BØ!ì:övÖü„ãͶ…CœÛÁEÁC¨·¤VþÄX‹oæì7wÙc¼£áy2”ÒSJ `R(ä=­”µ~©…ÕªÊò¬(‹‹—//.¯X+…²@Y{jº^kDa ”PB5e,pgiêIϞƒw70îYó^‚„ÜZ»´´øõ¯?Þl<x`ksmey©Ùl>|xeeåƍûöí ÃðƍBˆ±±1_óSJ‘!AÈTW*•™™™åÕÕÁ`Àãŀ777××72g˲lT+e£&8oÔq
+.œµÖš0Š[ãcVsemuqi)͒íAŸ2ÊRmm‡Áh%n6ª!¦&&õºT
+0PJ‹,ç˜Ô+Õ©É)Np½R½ûλöïß¿°¸0?ü¡÷{ÛÿëÿùÎÿõÿò¯çææz.c¬W&Ûmk]œ‹£‡mÍJw3K~ÒX¹"/@$„l´‚7*ՙÉÉöØx™%Vi
+˜‚#€ `„°EØx C,؟è±öý®…ùHˆ;¼ëœ,´ hÝ4,cüGöNBZ+Ï7÷e³/îr©UšyÎ;A 8'€’\®omw;Û¥Ñí~©5lœ£\0¡Òg\HhFçœ5n4J‚0Ø3å[°Ù\Þÿ-Î9k]ž&„àZ½ròÔ±+W.mmmôz½ÉÉÉjµzéÒ¥$IŽ9b­ív·£¨Òn·àâŋeYÎÏÏSB<(E žžÞ733 ¬µ¥.yćÃáÆúzsf:Žãl»33=Å)sƀ³Î¨²(Á1G14õµµÕkׯ{í5̈́Rí¬)eÖKÚíñƒóûeŒ2£¤)KD¨  ;䌇\€ƒ€ñ8³QB„LLŽóñÇ_={ö=ïzW«Ù¬V«¾²™ÝWæ…à|fjúêÕ«JÊñVKÁH©|sK‡r΋,õzm8 +G‰Vöêå+ýno¬Ùrªì®¯… 3Á|*tÓª;ð>l—Íþ˺ùln>ßÕq€œÏè1Dêr;Ÿ¸ rbŒ½XƒÇu¼~Ä “@0ᜋ@XÊnc½»²¼Þï+ÕPÊ´(ˀq‡°”zqi™&”2*D€1„a(„hµÆؽmû{&µ§°p‹aYB€FÑ}÷ݳ´tcyeißôôö֖7¯V«µ¼¼Üjµ~øáƒ×ëõ~¿? ¼|&e!Ä9sªÕêìììòÊÊvš˜Bb‡2 ¼Q¯U«E‘W+xØïk¥¨W—#D+¹º²²¹µÉ¸ˆÃpnv¶Óë'IâKÂ,Ëc„àj7ëuU*«5ˆÂÐÇ)Ӕ:c àPFðÝwÝÙjµœ³ý^ÿëßøÆ¥K—{ì±0‡ª×ë~ Ǐ?öя58ŒÎ¾r&£~ðƒŒóþ7Ó«kKozþ$k!g)BBJiJi¥ZwÎ1ÆCYZfI#Ž9%Èh Ôbì ÀÎÿC?ÉctÓcíþƒv†€ý „áÖ÷x›th—•µ÷%€œïäøîÍÖÖÖææf?+”ÑcL å<Šã 0re¡”2EQ¶Ûc"dZ+„€ ±ov?c¼”
+0!”à­³(eÖZçL­VÛKïöÕ­—·³lœ# +½n§µZ-O¸¸ãŽ;yä‘C‡Žxª^¯·Ûí0 1BJIƹCÎ÷úý~2d˜bÀÈ¡Rªj«Ùj3F0rV+i‰„hÔk33ÓõF0H)³,Tˆ¬,ó¢R–RúëmÖ«³3Óa ´–ÔÇt/ºjŒ’’SF0f”µ+õêììì¾é™8ŽÎ½zîå—_ž™™™››ÕJw»ÝÅ¥¥A¯_­T××7DÆaðâ‹/½ôÒKŒÐóóJ«ÕuQ‰>ùèϽÁca‡y#3)ÑJaˆ×j5FÁ”®Y BF0–Qå!8äq…½vÎOH±ô¬|Syçý¾«ˆÀoz¶ÎbŒ€ß÷çÏ1äQڟmcI‘õ†ã,"aƒBˆf³9==ÕnOÄqŒ!%ÌÚ<ÿÿ){Ó-IŽãLÔÌÜ=<–\«²Ö^Ð +ˆiHŠ$F"ÅQþ̣݇˜s_áÎm££s¥{ÏAj(‘¢7 ÷ªÊ=3ßìþðÈèì®&©‰Ô©®%*3ÜÜÜì³Ï>³î?X®æi6ÒR˜ºIóìôìääøŒúƒa¢” ŠmwHT×õj³TJ€Rª;;{Úgõ "e­ +tªß}ïk_=~2Ÿ­âÒݹs÷;ßùÎÙٙÖÚ:n¬ˆP1€³6iêêZIH7,†§‡'÷>$3
+¬›j=½ü胯e.泺©ƒ"Ë. Ëx~û®µ6ÏC]5•«¼”8îììóíF€ç|?ïé$eF!`nŒYÌ˲ö!H¢³£ã~ž}õìñÿ?ÿ»Öé;wHŠ'ϟMó/_>ü?¾:;:Šâ±!xdøë¿ÿŸ_=}º)«ª*Mcnœßúów“ Û“7 @&R9ëLðˆ˜·Ui½ÓZ“ I¬´ Þ *ä½ú^äé]Ï Îèĉâ
+ÐN±â)‰<ïnéîv»”„BB`Œ«ê¦¬() BLÆ£;wîܽ{7²>Œ1„8î{Öpµ)/^<Ët‘& 2ƒñx49š4Ö1¢gOÎ"K2­Uš&ñ¨íLêÊAgaà™£Ü¼s¡×¾ÿþGWW¶.¿õ­o}ôÑGÃᰭӑŠœsÀÌDÎ9•¦¤ÔÚù‘„ÄŸNŽs7¦‰01³¯6kÅAªd%•I‚EWm«Çϟ?{vñübFÈ£á@'R’ˆÖ{-Ež$"¢€LZ§yVx‚` ÌUÝ̗ËiY{R%³,˲T%j¶˜'B…jg¿|úxºX£aY×eYåyá}+fë/ž¼x~1ŸoÖ%eÖëé,…`ºq¿§¯g…Ƙª©PRäˆn6›~¿ppp0KBޚºÙV ‚øºªÈï»øuºßÄkÀÝסCS»ø,bWËåz:ŸyïIIçBQÿéƒ?ú³o'B1ðê÷ûyži)½Cï0ÍsÇÁ«$aæ^¯‡DuÓÈDÇò‹Ú±¾ªªZ­V/^¼˜L&´”Û7/Ø{I‘ÔÖµnÇžžžþàÿeØËNOO1‹Å"jïØQPkµ.//§ÓËÓ“B
+qrrrzzòðÑ£ˆç!bY–ëõúp4ÖZk„Mc®®®æ‹…±Ülø捳Û7o¨D†à˜G ÄYDyžçY_s|8ëõz:¡„÷aµZ‹üèð Y¾|ñl¾^>}ñbUm
+è G“É$MÓ°›Þµ^¯W˕÷^'Iáêêª_ãá(n³ëÛOƸS#´ˆI’ ƒÙ”Á9èˆ~ǸÿÚÓþ bǐyݶZp+02`äc Âø~ººÞjµz9Zç¼÷Ê'·oÝúøOþä›ßúZ³Z­Œ1ý~ÿðð0Ë2æ`MC@B©$Ռ •ŠèÛd2AÄét::8‹DÈØòkˆý~ÿüü<ÊRtøB—œvïö<n[ë +!„çù»w•À²®Mc„P.0{Ç( ÆìñúüóÏg³«¯øáx0”BJ!-Ñh4ºuûöWÇ¿kvÓ«éÑá$I7u$"‘: Î5Ö¸àن¼HT’$iª“$±¶$Ė=B,†FU°º®“aî¼3ƗˆBÈóósáÙô
+´äT-êreëUµ=>>î
+eÉóÞWuå˜S:kçóùáøà`4FŽCñša !Œ3̇%÷ûýBÓ4ÓË«zµÔYbœõ¶õ,×E¶~yµ+´g—Ýš… #ÄX¸ŽÄÀV“8nßÕj5ŸÏ¦…JÞ¹}ûßÿþûïଝ.½^ïää$Òi¼÷ñãyw #ažç‡‡ÃÁ i‡pyy™&Iš$цbWqô+Ïè®.3…]ãZ´§¨ƒ>þEk3&Yµ1€ Æ‹-t‹Åâìììììäh2ÁÀÎZí +OON‹¢X­V•õÞÏfÓ(š%¥ŒNa“êTé„=ÇF!j‘«èn£ü3a,TÄ~n­u¯ß¯ëÚ5Gãq–èÒÚÍvë9yÞ+
+Ï¡ßëÁ.)Ž÷tÎqà8üJJ¹-«²,s2‘ô¶€A‘s^ç:r}², Ãá0TMh+`©$‰]Dû2©}̽5§kÖ°Ã*Z<0€9tšq«Q/·Á¿ÿîÿðGï¾sÇÔMµÙž¥i9}¶•à€àƒsµ5Æ;<x_Y’$*Iúý¹\­#ñ-òIb¾»}ºvntaûkŒÖ]÷z‡·‘Lì˜*ÑqzO<¬§Óé¯ýëû÷ïôÑGï½w—šªŽ6¤”*Ër4ƒHŽz±\.—ËÞä Mu÷­µÒ{•HãlV2qŒµ ‘R!Muš¦Õ1 "5I’  !¥`çËœ'O²D›M)gBö‡MUUÆÐnÑ⣈JÁ„±1­1Î9-´àW|¯W†eŒ ¡ +ʲd惃¥TS6Z)%bX…ž9ÿñãðZäÛ1_}÷­½÷9W±,£µ®9|ó¾ùþç7oÜ*ËÒÕͰ׏4 Ž±Ç,¢ÀÈZo¬v †ÃaÔ ""¥õáabªz>›¾|ùr4 +‡Ãxu³{ûb㼑‹ j­a·­ãïú(­ÀŒ™H¶Ÿ~ú駟~ºÝn[çŠÛ_ É[…03‚^¯;!„¨ÊjµZ‡ˆ-ÏGI•å¨śí6Š1xgLt$Ñ}î4Ì!úª=Ÿ
+Ƙ¦nØ9 \WՋç/`·nßÎýéjá­»œ^±q>õûu!Ñ ØÆÄÞ|!"/ášË‘eY«DZÇc£"
+µ›ÊlVh+©o‚G)3¾µ,øŠä·g6Й0¶±¥,Gÿ÷#†Ø€È ‘=âr»Ý4.Šív{÷üæûÑ_¾óÎíõjÌi‘%i"¥ŒpÌ%‡“$qÎ``bðƲs©L8ØÁ`PEt3DT7õrµÇñ迸¸ˆ°Et“boœXgî=qÇx~=¨ Ñï½ÏÒ ®®.þ¯?ý_?ûé³gÏÎÏÏÿòÏðõ¯]km=7$Œñ…ðBh”7NϾø⋦i„L¸5õ²ÚžpÀÀèC¯(jc2…ÀÌB$ ÖBpA2£sž¬³ ^%$ Ðyo90¡H”³Œ!8Ó8ÓXd\Ti‡LL«åŠëU¹Ùø²B;JZ•×€b% °õÞY‡ ®1J)ã\míIfÏשÉiš’$ãBòÎYc¥yš’II@*ïØCWï㷁 oý
+¿fU­ îútÚEzÅÒzU?Á£¤( î¼wUuxtôÃÿú_oœyë€9˳xî¼qà‘āØGtcÄÕ+zãñ¸1&B÷SA¤µöÎ/‹“““Åb‘eÙ.öUØÏLcœ´oXÑMî¿øèf¤”UY~ùèу>ýôÓËÏÇÃýÅ?øàƒ<ÏgÓ«²,=‹Ë«i¿ß?>>fĺi<30ƒ^¯·X,â
+–«UUÖ €Ù9ë9x瀄@òƙº­¥ RB 3Æ£3á­õΣ ­µ"º g€YU]͖sË¡4ÍÅŅ'PZåyî¼o¬‰“
+æ‹ùzµ‰Ób¢’s ѺøšÇ’ŠA¢$ĺtι<Ëó<G×HE"P,^ûµÿÈõBŠðÊavñ
+ì…\¯Ì‹9Äié»F€oûÛßýîwÑz½ÖZG èêÄ~7 £õùCà]¯%'JMŽ&Ãáp[–JëD)ǐ$É­[·œ51‘ŽÑn÷ÂZm€ˆ1±êx­]ØN»¦mÞUŸ¼÷=úôÓO˲ì÷ûïÝùÓóӓ££‰RÉz½Ùn·!ø2ê™o·[ï}Y–eYj%´ÖÃÁ`¹\:ïBXÍëå2ë÷”¦i‚ó‰Þ;/ ÄQ¸X* u]3s¿ßÏ"Làƒ±ÞsPDÎXkŒJ’¦ª”R’Te³6xÏ>Ô¾ª›Ú#˜¦nš&ë½¢UûýÚ×U|@€8e-²bá(v^Ä1joV–„ŒÒû „R4MÓÔ5°;ړìĺfUÐÆæ×2ˆýh&.’˜WÒí~øá·¿ýí¨Ôílÿ·âZvC ¼w»û´§Õ`0˜L&Zk"Zë˜H
+©µFàõzñåˆÙ@wv¥;õâçíMcÞ0¬.‡üq\EÈÈÁ9ï#=L43;Ï*ÑP×u üs¦.™9¥ñÎEð¹©êÍj¥´FöA
+‘¤ÚZÛ4•e‰À;cLp-&w29JoÜDĪ®MÝb@pÎXdˆ£b©”@[WÞÚ¦®Áï=
+JÓÔO ì=ø€!°5¦)+NTBXFRIס·wʲû†eŒÑ)Jk]äxï—Ë¥Ùl@¢dÆðÌá­ ûï0¬×m‹™ß‚¤]ÿIf¿ÝncˆÓëõ¾ùÍožŸŸ7ÆÄi%‘dó)ØÁHÝ҆À ì}hLE¤²<ôI’(­k7ÛMÑë#âv³^]J)ûý~¯×‹¾=V »vxUØ]‘G.¼±=âãÆ]'w̤‚÷ÑU·Í܈­X—÷C馉ÆÚT[ç]ך#¡³v9_(­­1XI!ItÞ: ÌÞ9kMÓ8$"’Ri•¤Zc›ªr@‘–Þpc€ÞÚ4IR•(%L¢ÙÔ +0;ëPP`¶Öç«myùâ¥k’b[UÆ;"ÂÀìƒ콯ªŠwú€ùO×á!P) D±é9R1=Øö¨òÀ!€ ×:¼þÃ×ë öcÞÓòÛÿID´ÆZk£×½qãÆ»ï¾+„pÎfY&v| ª<D?ÌÓ4õz¹\­Ê²4Ëå2â7ÖYcLÑëQU6ÆÚÚØíj]UÕÑÑQ§ûÐy©7Bõ(ۍ išªª¢pW̕öÙZÝ}ºö‡.öïîÉÌ^}+ö°3s]n¬³Ý›rÁ ¦®§Ó)JYm¶Bpì+‚öÀXW%„ÀÞ#Éø‹Qè°e!Y(Èz×Tu„Wt¦œµY yç«Í’·¡njã}Á{uuՄD(˜0oV+`Èów)m„^1RÒ[ k2™¤Y¾.+èD©<M{½^šh§(aj¼Õ<Â=fËÿ¦mµŸ¼Ù¯÷J¯aÿrÞGǙ¦é;wF£QgL1¨ŠÉ`œÇ »q&qù7›Íý÷§WKӄétZ–ÛõjµX,\cT’è<oWUÕ|±dç&“<ϵÖι¸ÿº½‹ÿ:ÊêŒÑª"Ã"Á©vŒÓΤ"°é£øޙOÀÁûªªÂnú†1ÆÛ¦Ù +7hŒiœUR‹åb™è´*+ï¼ã`½Šâß«ÊÒ6MšhfgBl7›Õz]äùp8d! Æïœ5¨©«Ú§‰5 +¬×k`H¤„g®­«ª1ÍF(­ú¾ªA(¬µB*¥”1&fßm?Y×tä¦ÆMµa6 +»Ú5§ÇG¬¼­
+éµ÷F±A4!¸`Eã컙·Y[ëHÚQ¦»He¯Á+ª*D\, F“çVÍ3y„@£bø‡|” ´Îi•#Hi¥HJ’`]YÕ +©$]m«él6ÍÏ+ã‚öÙòjíÌƹʣ©Ls18 +ëåb<eyžèTJigƪ6̜e:¶—Å·Ï)Øª¦ÓiÓ4‹Å‚™ãSî0Õ" ¼oÃ5`lšvö,3Džѩ¼ºº¼ÿ~–e·n݊hS´àÅbå\0µÅ(ÁŠ‚K3›-³à=8§8$ÈÞôÁm·Bkë½ç`#H+ðà '¥´ër|@jnj¹Æ°5ÖÕ̼*ÛΔíf¥T‚ í¦Œ¡–VXßøͪhó\ᤳ–|p¶j¼À:QÖÔiš$Z&©’òaÿMÃê +2g a‚¶¶Á†c­ôÅæ2ŠP¹¶²" ÅPí +tç·»1ÜËó"%FÄ󸵬6à/w‡‘õ†ÁêTß}÷Öd2
+ÖÖJå@ž¡=h!1ç…Ï~¹š?{ùòååÕr¹.K“(YÖuµÝ¢·v6›i­Ë²,²|Ðëõz½¢(²¼€ŽÈBL*«²ìpü؎=J<¸«ªZ.—ëõz½^¯V«ý£°›ïÖõ3£5.Ñ:xo­“R m8örE•Xkm< +™y»ÝFì’1Íf½vBÖö.¸¶|O¢^Á®ÀŠˆDM òâk‹&ßQ·6{Ùtƒ ]”-f„,K•RÑÖ)ò
+½·Îzfä}‚P*ÚA8Á^SM–iªjï$
+”‡ „tÖÛÚZÌHL#/‘HF{‰½Q1ðjá×ׯBÛ- -͔v3(Z‰¿Àb4ƒÞ³s Êx»óÇE/a¶R1 a)€Ý©Ì¬µT‰¨SÎÖW—/¯®®Ê²ö +Àìêª\¯µ \nÖ±;숨Èò4ÕÌ!¾6±'nà ±|×#bîÑJ"èǀǣp6›Eƒˆ‘ß?ˆ»5F$ï_cq”u¯*ŒËå2Þ?®ML"HFDŽ º`}ð!x!´1I´ŠÀ2D6|è¢i$ÑåL1Gf @¥{šÀ†LðÌ!t4'I`gÙ‹Á9R² D€’P’u–˜ƒ ò¾µJX 2®×ÛB$R(‰@€“$8•@lÒ–°'®»¬˜ÚQ‡2Ī0bK!m=0 T‚B $§d"…ÐZÇȺªê.ˆ€.¹efç< Yã¶Û²ª`R2k7ë±?”À³£ã$MƒEQ ‡Ãè"“•vÞ(Æ
+B­UG
+ˆ‹·Ýnct_|tfMÓl6›ËËËä´õo!xڝòÑ0·»(&›°;µE`+—Ýöe)ÛwëbF +Àˆ´Îº°MvßbDˆ­Ðoœ'í ‚ ÁyD°{ßiµ<1HoÕ}™¼$%APpÖ9v¶aöÁû$IH\«®W%@­©+[¥Jso="N”`ŽŒ<Ž´vcî"Ö·^ûF°;1aKµ ~vö×þWU6Mð`<Ž¥È8ØKA­# q(3"9K!ðfcÊ­sbd[zcúy¶çŒ!yš•äy^–åÓ««ƒñÁÉñI¯×»l6›M§Ó4MgÓ˦i†Ãáx<®ª*΀˜ÍfϞ=»¸¸€ù|þøñãív3ÄXGÚ>ð+•€Îl)†\ØV¯ vþ©#3µŽ‡[NUçð8x@’\)4e£
+î@¿«/ŇûÊ®÷–[v×r(Bà RÆÖ/ã9
+ÌaçÀ
+=°pŽ«ÚéܽÅce遭+ÓÔÆX[7~蚦©·¥NJ‰Ÿ‘Ö+$Þw©8D’Õ[c,"ü¶ê~ÀöŠ<íVŽ(yDz„€ xâ ¥,ªÒ/æeÝ8BªÊ­‘±i›¦ … º2Æúùr¹\oUðP×õfµ°MI2U%«í:-r@2Æ̧³Ç_~y<Y†Ãêً“ÉÄ{ÿþýÓÓÓÉdrqqÙ4õh4Ún·?ÿùÏ£@RQËåòêê*_,B´*Þûñxüãÿøæ͛e¹Yo–Î9æ$IÔ@ìõúÌüøñãétöòåˋ‹ $!`YVŸ ¢¯D§(vS¥”J‚ÒIÑëYï·UÙëõ>þîÇ·o¼³¯Ž ;ZH·Ï»Ø—wÝÀ¯fÏþº/ù`«ª¬ªJ
+9"3[JÕނ ‘=R€(”DA:ˆ£a@üÍýûkS½iXç'7.ž?]-WZ'ÆÖ̰ݔ۲L\b·ka‰J‡@ vÖ.Ôðm®·[d~EiÚÙ}°Öíïؽ­øy|”MÓ¸ºY“X¯)þZIiŒ‰°x’$Z벪6ë +sH´žOySVÖº€äB¨ÊU
+ëà}ªÕj¹xçæ-[׶1:ë'Ig¤}Pó IDAT“€à‚{ùò¹ÖÉG}´Ù¬ÏÏÏÇ㑱4™6M3›M#íäìì,V~ò<¿¸¸(Ër2™D^$½üO¿÷'~øÁ|1kLåBE1 tªs³Ù¬èå³Ù|r4Q¿Q›Í˜„1ö€È’ˆU#Ú €1³dLŁ‰Dë$ÕãñøÃ?üÑ_üx0H!iGD¢6nEnÝPÏvϹEÒbô±ïÍ1@X.æ³ù÷{ƒýx£;—cÿLc­‚¤ð¬s Õj½ž?zð¦aiv¡*ÁY+<IÈD2Hó&/¤ÒÌÑ¡°(< ÙC§k°ûè¼{e,]Ê·ËØß&Þ8=¡M0#î¿Z­V‹EªõíwnþèÇßÏ´&âÉáam,Çãù|~yy‰ˆumàñ“'«õÚ±Ÿ¯–OÖª©kL"ziŠÎÖÞÛ€HÈ$ËOoÝ}õàž¤ðâù—ïÜ:…ДÛû¡RˆˆËÕÌ{r:™Ïç—/^ó~«°ÈBè÷ûBc} AeµÚ”ÓÅúEí™ê,Éb$·Ø.Ö/×e¹>½÷èѓwn¿û­¿û«_~öòéó]úF°½uþfw”)¬We<"gÍì¯ÿúï8Óþƒÿ’ë”+ `Ï!ƵƘ®l
+×.ÞE&{FƒRR ·ØÌ( $°Do¬]wëø68ÓÖHçw$ó=ÃúìÁoLU)-ƒÅ°tr|4Ϫ&#їÒZ †É¹,î2áî.´äþ¯[ÕõïB]܅±r>³4í÷û'§§Ã~o»Y@’$1¬ÑZŸœœÄÍ]×µó>MShœY—Û¦iR•Ï!p6ʓ$ +€J%‘ƒ§óósD<999?;©«Z*uz~ž$‰óa29ªªÊ—åÙ;·ß¹yãæùٍ¢(š¦9<<ôÞgY–ç¹16â#˜ˆƒÁx<ÆÕÒ¸¶ò3Ng³€ù|>_,’$ùì³ÏÆ£ƒ³³³rµY/W]²É»v´†°“YÛ_Ñ°›üâùóøû¿×B~ÿOþtÔxc ر÷>–¤:˜÷z¼oU¯¾S[ÛÏÆ6ZÑ^SËïBÅ}RÊmY¾iXƒì¥‰•+“~¦òDj%”ÄÀ¸kž »Œ¡•Ú·•º¾qu_|«…uïYPLh°c·i­µRÉNT=Ïrkêà\D}─¸ÒÖڃƒ¨¹¸¼\^¬¯®®f³ù»7ŽOÏnnÖëTë^š÷{=¥Ó˜”E+ÛGýwzy¾^¯‘Pg…sξsç=Ó4BH­%S)Ådr²Ý–!„Á`‡tL&“ù|±-«ø0¤”EQ¤©Þ>Ûþú‹{Ƙ÷ß¿(Š~¿ˆBùà³Ïî=zôe¿7ô®­àÆçÐ7­†ïnlBWëí,,„LøÍgŸ/¯æ³‹Ëÿè/ÏNOƒ>j|†‰È~7ýæ·ÙD„Aä[βÂǪeS+©$%¯<çÛ¼C»¾DBŠõvó¦aMNêª´‡dyM0L¢T ‚ˆ*ÈáU­ûè÷H5ûâ-/b÷[{d_¤:þŠRŠ¥8p‡ B)eTSŽéz\QD¡’dõüù³gÏ>¿ÿÅý‡Ö«eszüÎ{_“$´JêªrƒTûÂñ!„<Ï `¹Ù´âð‚œóQw.ÚL$¢žïÈÁBˆÌÒ®Ë`µZ½xñr:®V«¦iñøøx׿°eæõzÓ+†?üá?ùÉ'?ÿù/`WԎÈ0ïʦû¨{’Ý&lŸ'¶öâùóÿñý/}ùƒüà¾ñŸ&ñ7¶óvÝF}‹aí¾´o[€t’‡k·²¶öAÈß» ñá-Ö«èž_3¬ÞïË'_-šuªûù¸OB JˆG`‰Úؐw Þëïs‡Œ¼ñW¯¿%ܕý÷ƒ0Bh«Èq§j­mÓ‘¾®*f$¬õÎ;)Ûi(ÒDDk›ÙlöàÁƒÏ?ÿüÞÃû/./ƒJ *I´c˜-6ÃÁ ?{Dç\l1€PÎ Z§Ì\Wµ”ÂËÖfÃQ|Áiš{ïëÚÄàvHi"ç–ê¦yùò% ®ªª×띞žžŸŸ+¥6›Íjµªêm€¿¸÷E’䇇“4MËfÓ­S|=Ä;Lcùv¼6fb–€D´Y¯?ûì3”‚%ýñ}c\ô1Ö(ߨ‹¿¶.׬Š™‘0éT cŒ¥55)}ýD¾~‘ ÅjUÛkÚ +Ï¿|ll¹¢TðP”Š »“0æÀäZ1í×Ïï.¿Ø?ã®ûOܓêº GDl²­©ÕËÕÊ{/„¨*W/W:Mc¥"&D´^oýùçOž>mLã³DëÑÁQ’æBJÛ@&)®×ë¸BËår<+¥¤P‡¦q›Í&¦œ/_¾4Û*ÜÜ%ꈫÕêñãÇ:J©étzuuU×õt:¿‹Rˆ`­MÓl87ÎÇrçÅÅE” +Áê´xï½÷>üê“O~zqq¹Ùl¨…îà•¹ì¼Tlèè(]ÆÀ;ŠlÔS$,<üÕ¯?¾÷ÇßÍó¼óX¿û|öãƒI–æeS7¶&ÈcûÝou~ñ>uSǍ÷šaÍ×KÊU’¥BUUH‚³ !PHB ÀŽƒ‡ø•aÁ®¦œ8Ê«™mT€-Š¸+3Å/wð 2‹hjB4¶Õ¶iª§OŸžŸœ zE¹)+k»6.9\\\Ü¿÷EÝԉ£A¿®¶y’ {=…D€¶m1PιífíœK¤X.æ:QiªY¥„ÀÞo7kï|š¦åfcëj³]Õuµ\®Á;¿^/Ê
+ò¼0¦vÎ:gŒ©×›UU™à="*™L&Ç7Îo‘¤ÕfÕÔÍv½ŽÂ‚Þ‡¢èFýùl©“´©~ùðށ‚ùu–N|2€pxrtttôèáCϞ™Ûj${„BãÁÁØ:3Ÿ-˜¡Z¯ÞûâäÆéÍããmUé,c±Ç=¼n¸WÀU6À¨|Fq“(©—ú`7$€:e¼·Vð¡ns]ƒ´d×ËzR·.x¯3¥E)—Ö;LH @öˆ,(0ÆIô…êD¨×·x2²BB`ÂNõ€ bµ0D,M‡¶M
+øÊUiš\\\<{úlôÁ‡‰H¶uBˆû8deY~ùè¾i¶x¯ ÆE~ûöí›G§
+…ªf€™ÖyžVeÖ4ÍhÐïùp8BɑÈÂj1÷E‘H¡
+¥SÌòžµ1FH,úí¸ò,×E/ôƒa¯¬¶ue@ràAo˜Èl:»¨Í‘”Jtšã¼÷½bH(­sÞ7‰‰àLˆ¥½7V E"oÿÁݓóÓ¯^>í \͖±C>@à¸Þ`üßxWeêù£—Oï=©·U9ŸÚ±&á)‘,fü-ñ´ð4Ân[ŒD HADXH“µMc7B°‹„‘~ø&„ADJJk®Öz½ž®Ç"yïëªÊ… )ŽÀ£6˜ÇáwaÓ[ßÃk à~ºÿOA½­qO2i%Ó4ÑÛíöòêŠ?€¼×ۘŠˆò<oš&Ò>§Óév»å=Núd2ù裏ÎÏÏcÎô´ÖY–Ÿ{ï‡Ãa4Šxpôz=DLÓÔ{oMÙ+úyž÷{cLYUiš@Ó4Ö¸ºn8@“›A¿¶†7›•÷!:§ˆ—E€Rª,-U×µq!XKDÖØBš¦Óæëë˜F£áååe–e“ãÓ¯¬_,¶ž= î÷‹ÁAÿäôèäôd0|íö¿}þÿþßÿ÷þüƍç7âëÌ<í1÷¯_ûQ
+ì ÿý,2ž'¡ÒBܯJ½fXˆ©Ö‚®ué(ÙöXv¿B@c¬^M$(vfÅ&å’ŝíá5t ZÙQD ÂXi‚]µ4ê§!²@IJ A*צγÜZ[7uešÑp8ðƒÈ;ˆíêÓéô«¯¾ŠñGœƒ"¥<==}çwúý~ŒØ"í¿×ëEÈ•RDhŒ%A‚D<Ucí¥ +ò ¯uŒDRk¡”ÎÒ|>Ÿs@¥ÒD¥B"E$»ÐG)Õëõ†Ã!
+v¾ººš"R‘÷­µÆØ8d/MõF
+ï}”ò²Ö^W ÞEaŒùÅ/~‘&z4Ý·Vjé­ïõzï}íÝ»ð
+HÒ$Ïó›Ç·ú“§_>¹œ½¼{çÎíwމ(ƒ‚(Ê #·“·XU¼öcßî»ñŸ2Ș?yï˜$Š-æס%ì7¯µ@&:±ÖÊD`Þ:áf@2¡dò°kl š­ß¢kÏhgw;ç Û1¾ˆ1þGmøNJP*ñ“BˆÀÏMpN'Éj³yðå£?üP*ËsZëívûèÑ£Ùl¶Y/ãÓ ý~ÿk_ûÚdrè=w-J¼Ó`FŒ"zì\ð>¶=µ3§ã’Ä‹a¬A9çšÆ´û‡„¬uñ¿ny¢DV]UËõôáÇUUÅ Ks!(æÓÓ³ƒÑpúrvÿ‹¯Bo +ƒC‹ù|µZE¿¼¸œÏçIQôÅÁѨ7ìÉDnʕ]ÚñxœeéùûgßûÞ÷~}ïӃÃC­“È¡…À]iä-^ñµzõÝëṐq{k­V'mÿ–û˜ª~‹Td¯×WJŔØ{¼g¥”R*ÐǸ»µ—Ý!¸{it½¬ €Ñ?¦8÷±•R&"ˆŒ7)âp$)!2AHJ%ý¼·)·,D@x~ùòèÆéÑpÄ!ÄCg:>þ<„%\ò</Š¢(Š““ØSv4ÆD½
+)b¤i@„¦0v,Å7ÑÍÂB(©Ø9À"¬«˜‘&$¢މÎÚ(ý°X,['I²Z­­1ãC!¤gŠPèŠ0Ïsh“phêë֕fÙz³€?þøþoî]¾¼LS
+ûãþÁÑáp<̊t¶ºš¯æ½¢Ð;<¸}ðWõWßýÓo§µÙl³dˆˆÖ[ ,®‹ÿvÛzk¤Á¦•72Rñ®_2¶&úk¢ ·nݚW«e]‘”R¶TC!„PJ#I!‘‰BkP]Qsÿ£ˆÂÚo¾jÆMÛ©_݁ñˆ‚â(0„(ÅF”ÉÁ6ΪD-×믞<f92{ï///ïÝ»‰.wïÞí&eFºUÜ¢•Êoˆ’Åvœ>ï]ŒCŒ1°C’¼ ¥‚ƒoùBž#Ñ»à£X±$ASzæ][‡ÖZ&¦Ùáá$Ž@W*±>€àÍvñôÙÓ(?,¥Äæ-ëÙ|~|vZUeL{Q`¢“^¿7>ݼ}+ë§óù,QêÞ÷¸äÿü™Ü§÷µÝšoþ‘Šú¹R„#òw:­îöÁØÖÈâKuŽ#o‹‚–B^?´äv»f𠜤ZqÒl›ª±ŠTåüŠ›ƒŒÐ1¡P"5 ¸3Ž}ӊRîÝ{h?!äÀm]ˆARdÌ·Ýp„RäXI¡„ˆ
+@“Y±®ª@dB¸|~y9<<šÔuýðÑýç/÷é͛7½a’$BHã\¯×'¥­u E JBŒ`Q ¾B†¢´.ƒç¶æˆÄì¼ ì}ð­ê6{¼uÖyë¼eñ[!´” ʲ,˲Ñè€Á'‰–R ÷Áû`­Ñ©ÏYRŸœß\=zøeY‡Ð!Fúó‡_nçËùlÆޓ ‹ +“Gb%“^Ú/N‹”ò^‘-gëËÙź\s€zm./ž¾8>ô%¦B(ë\(q¯ÿeßz~¯©Å‘¦J
+˜½BÀ~VØe`,Ð!ãõàýáýûƒ£§ÀÀ$e€„ Ú{tõ M%{,-c,x¶7îÄ÷"“š»W…1.ǀ E `E‚Z{°2"’B+‘¡‚FH)ϼ÷[k `³XÝ¿÷ WäOÕëåç7Nûýbܟ©˜a¹Ù‚Æ@˜¡õ>Ò;½÷Á;xÕßÜ)¡FN,3 †VÁ2Xg¤”$Ð9vÎ:ïB`ÏÀûà|ðÐÎ\$"MS­užñy !꺎R+Rgœ"]äýÑèàûö½^¿÷Éÿ÷¿œ¯ eðÞZKB(%…Dï½oìå³û¼‘:Ž¥Ä——«ç_>À^Ñ’Š|pûüŽ±›‹«¯Ng§‡wƒg’à-9Õï÷aÐú-@Ñ‰Ç¡8|­²ÙÚ+!H‚ë-ö1ô Ý (N̂ëÆ5ÖÉHGæ ‰<r'ÕÙ†oϲ:ÐO ÉxrBëG8rc‘ƒN¤Ìt"%!1KD„ò4uÀv½¶¦Q’–«ùO~ò/«Õr<>8¿qÖëeJ©A€·ei­c4ÆØ4Í"n7ÛÕj•H©¤bºö@q—2un €=ì¥ßÝ£Œ¹wè:cCˆ!턽Qðºž…6½’˜&MÓÙlV½ápø³ŸýkYUž AŠ (Ú2o³PBfY¯×FãÑ(ÏrŒ€¿ùÍY–ÿÉþ^¿ß‡@§gg†7Ÿ?øìÁýû§“[ BH”òþMZòÖó;Œl?üŠÄÃØ͋×:h|Jªëq½T‰hóh ùe¹-²Ao8ô„NS¤à`Pȝêîù§è :É>ÄøpgR’D °:üŠ‘Q2j!´<¸ i)” lL‰¨çs”òÅ˗ÿòé§wîÜùþ÷¿7…ZkoAš§y1Œ²4óÁÕu½Z­¶›Mïø8ÑÉuâl»%àÍÇë€҃{ +†­Q`nšz7ÊÀÇÁ{ 5Ê¢(BqXµ”IUUUՌLJ<¸wïJ¤Î´w¾iç!3…¶Ì±«I€ÎÒÁ¤wûöí[·nŽÇ1Sùèÿðød2ßÿƒ÷¥ÔθAt~vûjquyyqqñìdrB°†~GßYÕïv`Ý{ïãHÇ=<2R0Ó$iú¦aA" Xßx‘$$$cEOŒÆ‡[ç¥RJ
+_Ռ,[¨öõׄ-Ü°³'l͔¨¢ˆØóÚIŒHR Ü±CD"S©¹Ü¬«ífS–B''7o£Qã‹ç//ž?zxx0V«Í`p0•e¼­kCBfE‘å}AÒïÍgYš¦i›H_÷Xaù*þØ{Ö¸«ij­csf¼[ìÒéªéÝåCˆ’Q«Õj<GPJ靑Bõ{ƒ'Ÿþò¿
+žûÃþh<îõ{ëõz±XÔU½Ùl@Rì…B"0ë, ‡'''ÃáZëó³ó““ã,̓‘© +҉êÛ7ïTåçOž>šJ•z ‘7~ݤÞøø;Œ¯{Û»i¯L ®ê,Ëß4,ìkJí:¸”R¦jÖëµj¹©h[êB«H¡Œ§~Ô mƒvD±¿í B’‚ÚÚ#±@"D‰ª;‘2!’D((Q¼_¯W³éåf³rÞ{ÂM]Ý¾„Øn—Ãá`8gYV×f¹X#$išIæFÊ$ª´;¼€^1Ùy)×\Œéùu.¶Z-*þdôRñiF傪ª¢æ‡sQ
+@ !цpuuõ³Ÿýìôôô[ßú–”2Ëòí¦ÜnË{÷îÿÃ?üÏ/^23 H‹ìÎѝ¯ôõ<ϧÓé?ÿó?+™–ei¬enõÃÒ4†iš‘R`QJòŽ¥LbåLˆäð`2?šn·Ëårz0:"p oiR~êð÷U¬;Ï´OˁJ €¨ÕóšaQOK¥Biœ³ˆ”§™©Ýf³‘EŸ‘Œk|P
+€D˜é;ìÎÐ×E@PB† ìÆVÄ( ;I%8x”’¼1MµÙ4UÅÁK °˜_­«mÿ`|498Q©±^IM(–˵÷¢È­’ι0Js¤6´='ÎZçœR²Wôª²d~‹»‚»Ú/~!¶ò7¼Qnð;a¤o))ºgr·`™N§EQāÂI¢“qú“Ÿüäoÿöïž={=úǏ€÷þã?þàƒ˜ùé“çWWÓÍfÛ¯#G-=Æ4Š$"Öu½˜-ñèè80+!¬uÆ[&HÓìääøÙÓêêêe–Œò4¿»Ã5/õ»Ö~"ÙÙVt۝ž$Z÷zś†•¥ýªi@©"Ë«õ¶ª×¡´eyÚÏ·+ǹPä}•(`¯=«@ÂSL1I0zl;rڒ"`T¨–ˆ’! š$‚j.ÀÞÕ +/j‘'*¯êz]¯,yÔÒÏ Þùz³F¢~Þ;:™¬7U`(Mpf³±Í•Öio8TiF Øc°>˜óòž5uÝ4¤" ±±§ÓVèfÇí?bÂ×ÎÇ´Zg€!8oªj«A‘9… VœÞÿý[·ni­•RÀø䫧ŸþòWóٌ•”Þ{AiðÕã  ¬qôÎÝ;ÿ‡úgŸH©ž<y‚ ]`ë•Lc(ՅçPÕõb±l6u®ò~ÚcÌ%JoÓÃÞ¹ñÅŋT?»yC Ë ]™XûðZµ8¾ÓèÔ»”^2a\úÐÌæ——‰N‡ý‘T*QI¢u¦õÁøàMÒA¤R;Û$L(X»Y®›m•)=й P5v˜¦€€ZäH(L0'ä8ÊKÄÎ!8/””J¢ dïÆZbIJ ÷Ö90ˆèQpž€¶›í—ɼwçÝ?HtV7~[5Ö9$®Mm¬Í§Þ³:Ï{q9›)­µN]Qò‰¢Ô¥@Š¸¿N°nŸ&bt$Þ{ç\´˜<×uõôéÓØTÈišn·ï=ýŠqÁŸÅšRUU¿ùõÿþo¿¸ÿ~ð!øÐ5=gEá|˜Í‡“ãO>ù×Õ¦ú³ï|K'ɳ§OÜ¿Œãñôê*Ü ˆâ½»ï&GI¬„<<œ¨1õò{ïv…W™¢€DWýíl:-ËMU¯SÝG”bŽûÄ ùGyrû.ª{,¼w•åöùó§/_¾œLŽ&GyÞC¤PÇF£× k»XJš1T•0žkÛ`\½®2LPˆùv=,T&%¡#Dì‰bO"´ìŒ$ˆ‘&€’ŠIyð!
+I„D’(j¹ !Œµ±F M‚g"¼ ÎÙÍf{ÿÞ½ÉÑÑáäD% Hα\,«r!抭75í,c¹X.–K¤Ýpò= +­}GõÆÓ´Ö$Jᮼ^Z¿sîôôt:>~üD‰ý±ä‹¢ðRê4]­VDâêòêŸþéŸþíçÿ^×u—9J)µVU¹Mól¹œo7«“³Ó_üÛ¿¦àß}÷7/^¾¬·år¹,úE"51ŽRÎ§ó£Éñ³óLêN6"bÞ"IDy^L&“ÆTe¹•"ˆ9@
+>ÐÛ¢©ý­µ¿ÙxWhßyq išFc"ŒqN¸®š\ÏV®1IÀà}SÕì<{¯]¯ËF¥R&«ÕfÓ­´ˆ€$€$£¤E`ˆCcAáeï¡RB²5F „ ¥$@òÁ[ke¢TÔ$B$)Q +ì "Q
+q6½œM§EÖÓy1‚ÇmYrÞ«Ëf1Ÿ%JND’DÜ¥¬ªõf¶-ËñÁ±í¶ëR›.UÞߎñiò[$kCÔ
+dæ²,cy>oQ+Oª”R*RI)çóùÅËË¢(^¼¸¸¼¼Z¯×û€5ï²@H•¼ÿ ª¾þá'?ýd³YߺuË5æ§ÿò|¿ß?žœxŠ£ƒ£\EÖk'‘îÁ]ØÇDནRŽ^¾|vyy)DÚï +ã@÷”Ä·„óû}AûdA¶/;Ï{‰¾ ŒZ§DÂ;&"oÑâéW%{ï°+›8MS¥´i¬³~|p°ñMÍ!´l$µ*!’Qpû9
+@ë€ ì¬dD‰
+‚cïiGmhÙôD(È5Î{Ÿyâ“ !I¸|ðÐâãìØApƚZ§i¢4H8ÍÔ1¸¸xùòųr»ÒZ AØzï&ZG½nï¼Ø +MÝo[¸¿GL!º–Xp”RÎÓº®G£ÑÁÁÁÓ§O«ª:<œlVkˆ‚q˜êÕÕL%iUU10 Ÿ~úë«Ë+nÇеJeÞûÈ騷›þh$õà‹{ï½ûîÇßýî¯~õ«?þøßøÆÃ{÷‹EU–?ýÉOïÞz÷ý»ïY¯ÈŠD&̾kƒæœ‹ˆÎyD,ò<I’Ùìªß_y!郏ñ%FHýÚQعÞÎ1óŽMÙ9ï]ÆÎyk}ðQ!†Bpo)!ý¶VRJï½ڑ7. õI'é[·–¹¤r…$‰‚§8Í«=
+c„×…­ÔUðRˆ$‘‰’ØYBЉTJÆ%Aÿw»%ç8!RUƒ÷@38ëœ÷§Çǃ^!%!pðIi)•Òâ˜x±œ.f—Ûr#¥ +&ižç½A¿?ˆcëáu ½3¬ý0b—Åö©H_qÎÝ¿±XL&“ãããív MÓ´…³8÷g?ûÙ¿ü䓪²u]Ïf³¢(ŽŽŽ–Ëåf»8jDŽC!+ro›á°Ç¨¯.^üÅÄÌïݽûñÇÿã?þcUÕC]֋Ù›ëÄ5N¡ò•(\4‹¢”‚r4WÕv»ÝlòõX©ÈAXË IDATîô +®c »ó´=^÷žÆ«~*@%"6uÎ+%cYNì†k¼fX©”€¤uºÙn„R!PU•¨UO¥y–ŸÝ¸Ùï%³¯²ŽbÕÆX»ÞÕØÝùð„€*IP R¬& ¥U ùFæ
+Šô=ç\cš–Þ‰„$ˆ[ë Ëóã£I¯(¤ AÄÌAdÏZéÉááhÔ«ªMUo”Tމ,/t^(•xï¥Tb‡w«»Z›Þ›ã*£mUU%@Ò4Ýn·óù¼ªªº®{½^Y–Þ»(]ä½øðÑ¿ÿû¿}òÉτH¥”ˆtyqõèáWBˆN¦ë´‰)±”¢.K‘¨ÙtÚ +… 'Ož|ýë_ÿå/¹^­ÿøÛ¼Ýnÿæoÿ&fÖØÕb¹]—ä… ‘´§V¾&¢Ì(¥’RXç‚E‘F£¯¾z,„èõ
+Â(¬J°#‚¾qÅ2”ߍPÐZÓN¡dC†àE¼ÏN—Ú‘hG½i¬ÅÁ¡Ê8kÝÿÏ؛5Iš×bîáñ­¹UUVU¯Óݳ÷`°ò‚Øš—0#ïå¥ìJfzÓ/қL¿B÷‰&M&Ҍ¤¡ b#H3ƒž­÷Ú+³rÏo‹Åõ™ÙÕË@ȗήÊÊíóˆp?~üÓ4µ"²e™& 8¨J3›MSMGê\Äi’K']¡$j”Âc$c…Jy¯5€BÐÀš½VÌYƒ7]©$‰)
+$jҊ”bÔ¨b]4ÕÅdì<
+'±$µ·»ÛÎÚy’½qýÆN?kw⬤ 4>蘡Œ´Ž’4k·;;Y¾•·{i֊ãT)-•"ÁŒì7üBÀ!è)8O²'DdOBcÚ¾\.<x°³³³e/˲€/´Z­ÙlÆ̳éÜZc­Cä÷ßïììl4i¥˜]]•$€m¼óBÈu]°Ò{"ŠStÆ ¦Ùdæcyûí7¯ß¸>™NËÅroïãßüV(©çcw¯[ˆBgZ
+-” sÎZD$ž"Â;!)9>}øäÙçÛÛÝ­­­°!XËᴀµ:\Ì ºQ„5Ýh³êÂÚ`ïع­~,ž]Ì'ÿã_þç+ímúÛfWtÌq{ÇUYåB ³7Õb¡eR 3IMB"£äálD 0ă(hÅ=f!P’Rü½@*)c +AMQ(ÁˆEY•e§iÞjÅY§±’Qdy¾³ÓßÙÞÉ;E€Ä ˆ(µŽâ˜??ÀĊ|h¨b—¾x ×¢.›Q>^³þ™™Ë² bÝççg'''­V+ f-—ËÉx2 š¦F„$ïÝûQžç?AŠË«ì'@äx)©y^s­ûE¡ê†y½¼qýúµ+ךªœŸ{猵Ãá nš­í­k7®9v,ØÔ&¢8Š"‚mˆ—áù7<OD,ÊéááµÛ=)u0Ñ "€qÞpâ‡äD¬§6©ÛK›Ðº¬yᇈâÑÓ§ÃWKj­ó¼–ŒÖZoooK)›Ê„‹b<çY^–Å¢6uª„"Lk1úœ@*°@D‚Ù*%„@Ff`@Rº1 9ύ© kçY«éx¼œ5¶‰’„ˆúý}%µÒ:Šc’RhM¤™Ù1[kéE{ßðïånæ*©ZC/Ÿa`ß³qÛ"†Áù(Šž<yÂ0‚¨,Ë@auÞi­›¦fï}Y–×®]ë÷ûG‡'!ßßÀô—£êrx…Ã1ԛj.¾ü싷oÝyëÍ7›²Z.—ùWÿy¶œœž\¿vm1Ÿÿýßÿnݹùf÷k½V«.õªõôâ¼rˆ’+û×>½ÿðàøêþqÔò`šº(Ë*|Ò\©ðn/§›—Ãèµož_°Aç<¿Bˆ•Zë¦1eU„¿ét:wïލ¢¨XÌа/' uÔꖍ]«cM€Â³ ðƒÁ !œ2¡ÃC„ž¤´:‚W<eF®MÝX' J±,KcŠã¸•ÇIJR5‹¦öžÓ4ËÚ­ÁùHî'üÛ;„ðõÁ iøúÎó¥v\ØÄSøÕ%acŽ¢È{? æóy¿ß9ݸq£Óé4¦
+äcïý|>?;;‹tEqYÖÚ ÎöÖ[o}÷?|÷ÿü}Q-¤µïáWÝüÚ¯€ƒH®ä/?ÿüw{û?ºwï÷ÞýüË/®Ü¼þõ¯½1&˳£££Ï>û,íd·oÜÙ\]ç]°BK…¬Y qœ_½zÓ;pƒa0Š£L)ºbí·‰’ð]m¼×FÕåDpÞ½ú`ÞGh©ìíííV«Äqæuqÿ‹Eí9IۓÅùp^fª““uè%€B6°Â®×h†) !€äj2‡C¿Z€qMc +’ -Œ3eUFIšµZ(PH%µÞÉúµm¦Ó¹Ž"kmY•qœÌfÓ,oÅR!" B©ü+ÌÕW>üóóoÇðZC¬ØC¶1 6³Ú!òâ8€ù‚˲ â“ÉäììŒH²ó¡Ü‹¢¨ªêápøλïüö·=~ü8ÔVAQü’©Åk¢Ê¯E¿š¦Q€çǧ?ùçŸt{½üð‡ó²˜/—Wö÷Ó4œΆç{»»»»»ôŒ+¬‚íà«×Hè[·Þi·ZA~â8Ö*‚6Õæ¯6ߛxΈ|
+Ò¥Gnv,¿úz9°Â²ËÑÑh­Ó8®›
+#5˜Œ"¥¯î좊/“^¤z ‡„Ö;„•@àCT NtLöd Œdh¼w!ª’<„¢,1É2éÆZ©¤T
+5¡&c:½žw~6›9çG“YY5i–m÷w“4%|ž`^^s¯@—1åÍV–%,—Ë£££pܽ{7ˆy´ÛmXKÍn”ˆ¨×ëíííY³ú61Q¤?ùä“o|ý›yž‡c¨iš¯Zô›wv‹$Iò<_,¦©LUü◿|óÝ·¯½qãè𨷵¥µzúô©Ewíæõv»¦i˜gGD¯GB^ºäÌì"‚\Û²”Ä^n¶m±v¢³—üQù•N×K¿ºüBv,÷šÕ³ªöIˆ À`0xòôÉùàüôìlxqÑ4Íðb<šÌ<ÉEe&ËÂZ‡ì€-؆¸š†i’@/aÈáÆåÙg»(Ž²<³ÞÕ¦ÖqN"¨£HQ×5 è÷ûívGu{½eQxZ1¢¼iŒ1+)ª¦1á“zïCâ=¯R¾‚•À.0ƒµ.ì4ÇÇÇ¿úÕ/?ýô¾w®©ëÑè¢,‹ûŸÞÿä“OfóYG$ ¶Z­ Ç6°n·»··wãÆ +­C‚BƘëׯ/‹gÏBraïýFû¥¿¹B¶ÕjÅq¨S’è‹/>ÿÉO~2N·w¶ÛíV«Ý$ú;;q))³4(Ø{b¥­ðJ„ÀRJK©wÉ{®ëƘ& EáBí²I+ñéêµÛÕK·Ijûû¥Sÿú +©¬E¹$­¢8òȨ¥NRg]1_֋B¢ÈҬ樲˜Eª +M$0’’V‡ @I¤”")IøðfIRI2c÷>ÒQœ&Ö¹ù|Á€­N‡¤ÒQ§)
+¡”TJi-·[!ÈZ×ÞÚ)ª&J’«W¯7Æ5uëtx~ñåƒÛÛ;KÓévË¢
+bhÀP% ""Ïl7Ɩeùùç_ C"™Är<:+—ó÷ß'àØ7o\óÌ»{»×¯_cöa‰/‹°0ÆÖU3O‹¥³¾,+!i±œIñÿé/º­Utrr‚k·_k­R:Ô}!§ ´“°€ƒ¥÷þÚµkY– +†çaóޝŸ›ª~ÿwâ\Ö¦X,gI¬v¶Ú_ÿà½ë{û©Ì¥ )ž×¼¯îŽ¸ê™Z”¤„ ­"ïá…m¾:Im`…ô+œàá”Ò¿ü·_ŸŽ†ÿËÿô?_~°lµZeU³… ¡µ,îr•eQe ¹}óV¯ÓÌFƒå¢«R’"'– +9D´¢Ô·Ì@mBDøܘ˜¤”‘À¦i‰<K²,A ÐZKR)­¼Àªi¼­âlooË(qÎ/—…iœ÷ žŽGçƒÁÉ`¸½˜/”R»û½§Ïo½õÖÙéÙb¹"€yÞÒQ2ŸÏÒ$ýü‹ûoÞ¹“¦ºÛmݺuçó/>¿ºÝ-L’d§¿T¸µ!øœÇÑښU)Üx3‡*ÒZÇìoݺõäñÓ “PPcÌƨlS!n&‰Ã.(„¨ªêɓ'ûûûqWumLÃeY~üÉ'ïß½sçΛeY.‹9‘ˆt”$ÙFÅi‘¼¶ö 'Ý&Œ6ïäÕdô¿mJNõ +„ûÒ#¥ ¾FÔQá݈°+rÇíVËTMSUeYnïïöw:fx|aÝV»M€‰ç…gƍA¬TˆÅjv"0ä=" ¥¤RÖ»Ê4Rë4ː(H
+Hdœ›Lfq’Ø¢˜†ú+Š" êt:Q ”qœÑ|¶Ÿõ¶['§Ï–‹Åo¼q>8MΈèË/ëÉdzûÎíùÜ<<9å¼ÕuÖÞýà.IŽbr\×M´µÝï÷§ÎƒÒqšµ¤Òa º,ËóósfnµZMÓ”›
+.\ŒÍze檪ÏNÏî~p÷÷ŸÜuÒjµF£QÇA¿$8¾„­…Ú6eA¸NA†yooo2N¦ShšæÙ³g¿úÕ¯®\ݾ~ý&3?xðeY.Ð+ԆU±2žxM'ƒœÉK¨Ç+IÒ^›8B„RFk-„r΅N× %IJ’yžWM-˜„$@l¬)‹"Š’kW¯îïí!Ãxx1ê²Üí_Wó£áY73I¤5{bdÈ^¬b ‰ƒw¢`(ˆ¤TŠêÆxæ(Ž¤RÆ;DÁ€JÅÖ»‹Ñ°¬ë7ºÝÁàâìtÐëmµZí^o ‘”R’¤÷ µ"’]½ºEÑx<ÎóÔØæ“O>RJcŸ<%"fÇì:Ý6
+B +£Hïìl +/€|õêÍ­­·nQc-r̶®ƒPÖ?üÃ?яüã|£[;ŠoΑÀu–Ÿ>{úíï|ÛZc…ºuëÖp8Ü\ÔËGU¸®ÍæWÁ]g<giÇqÒ4µm¬µeYŽ.FŸö@J½³³;NŸ5 ݗ +žyùöÚÀzé”|)È.׆dlø4­ˆ˜¦óÙüåÀJ³”Áz˜Í2ªª’$‹ãX)©¢(ªëÚŸ&(8‰Æ^<Û»Ûä­˜mp‡†ÕF!ž‚éÊ
+.$Yï,;¥•Š"¤UC›a6ŸŸœžîîícŽëÚÔu3ó¼ÅŽµŽ¢(F!¨ifÜêõ¥”Û[»u]Ïçó8ÊC#o6›Eñé§_Ë¢Ûíìlííôw[y·•w¿ñõoyÏyž«(ñ(â$åPÙ%)xÓ8綶¶ööö~ñ‹_(¥~ô£m"¤JÞûªªÂå‘RAX»vçàÙQ¿ßoµZÁŒžW'bƒk„;Q…gظÌK)'“‰Ž"ðγ÷骮<x`Œùæ·¾qçÎ[MÓ8ëÅfm“®ÁëR¥ð€°$‚êóæ@ܤáüÔùÿskçÙ!_RJ óÙìåÀ"AJ*©Dc- ¨›Æ:Ã ¢/%Q]”ιÊãÒ´ß¼­öÙüâÉd¬Úñ>Fèy=,Iøu«A!$!‰UÛAg +¢ˆ³IXö(€ÆƘñlÊq’Eqõêõ³ÓsDlšˆ•ÒeY,E’äR*I:ɶà ,ø*Ún'×k­Vª1Ƴ,
+"ÑÊ[ èöv¯7M“g:ŽcD"cmY•«Æ¾fà ×ëýõ_ÿ5"þìg?›L&?øÁò,Wkà*PÖݏ$‰³,€Ý½½ùéÏ{½Þw¿ûݟüä'¿ðÞ~é¦ +—øO›ÿFÒ:0@`IôzÓÓ³ßrÿ»ú'ßøÆ·NN몆øeªçk#cÃO¿\â½6Çÿ#+,­Ð'2Á°Ñ·¯h7ä­\HєuœÄÖ»¢ª‚;¬ËÒ;Ÿ¥);üƒKoPJ7év‚  +ÇZöwòT‚`Àƒb™z!Ð#†D³gÌI(Jiá ¶2ÁÞ7uÝÊsx~>ÈóVš¤ÌÐét•ÔBj8:<zðàA·ÛÛÝÝÕ:γNÇZi(ˊˆŒ­…ŠÒí$·ÎVuMDÆÙÆADR.ŠÂ9»X,–Ų×ÛÂÀRbDBˆ(ҋÅ"I’¿ø‹¿ðÞÿÓ?ýS·Ó½{÷®R’™Ù{")I"€@ Þ+Û[;À˜¥™µv6›Ý»wïéÓ§Ož<‘RZë€YëP0xfk¬R+âW¸öÆ€ZGÖùÚ4ì|S5Ëq f¼ýö[ßøÆ×Bµ¬áÅ|ü«"cpaÓº Šn6ª¯N°pÑðJ£ +ÀXÓÔUc ‘dö‚ˆ=›¦fï€^– ‘YžÂ XÍç¡öÖ)A$u{«MDóù¼µ·7™L–Å’ÑÖÃó¬Ìúýþ¬¿›àUÍ{1ÄX_“O¬W£XJ@d!; (4€%•T
+‘…` D”DeY¢wY¬—‹…spãÆÍÑŸª¥""‚¼õÓÉxp~2ŸF£“ù|¶½3Ï[o¿õ.‘LÓÌy@vÖԛï®iš<o10 še]ŸŸ}ôÑGÓÑÅb>ÿó?ÿñ7™1֚™a¨æœsI’üð‡?lšæW¿ük«ë×n†’Æ˞Ù;à d¢ß~󽝭½³“A–e<¸}ûöÝ»w=zÔ4 +Iå<3€cŸÅyÓ4ÈB*¹>(Åó݋¹iŒRJK퍥6ãÙîíí +χO>iå©^Á ¾ª*ôk3öð¡ÄZþ«ÚÌ/=k 6SUËÆTZÇY¡`çŒ@’l ˜W÷VžIÏhš†½WR¦IR23Ãv¿ÿÞ{ï%IR–%"~öÙg?ªª*Š¢ù|6ÃÅbñû£©¸±ÝdìDô¾ŽbM©†Ð‘`$A(X IH„bÕáwkòÉdz¢gƒQ¿ßÏóüÁ—‚Ÿ@˜33ÆÌçsiçÜh4*Šei›ºÉ³ö•+W­ud­ýÕ/1L¬µíNg±X|ï{ßët»Œ&H`8~òÉ'[öÅÅðg?û—ÿú_·³¬}y móÕommÝ»wo:~üÑGÃÁè­·ÞLÇãÉ
+EŒãxgg§×ëåyž¦ét:ýéOúçþçwîÜyðàz/¥tÞj­ú»;çççh!L;^.þy=P~¸IÌ«eQGÑñёwV*ñáw;½®Dyy»úª]góۗp9¿*(/…,„ão>ŸWUE:Žb)•sA”$„óž_•leYš$iKP‘Œu”D±>jÐU_K¬4þ˲‡Î¹V«õtQ|z>^p$TŒˆ,$Æ
+[XE‘#!HJ¥‚¿#8fë½unƒ%-õù|îœÛÙÙiš¦,‹v»– QÅd2ÕJ#bUUqwZíb¹DÀ,Ie¨C™ÏNŽ?ûôþ'ôôñ£Ï?½_.Z’$’‚””­,ßêö´Tiš\¹ºÿðá—GG‡q¬¼·Î™ +D2ôº®“$¹wïޕ+Wž={öÑG-—…”j±\ºµ_WÈG‰¥”³Ùììììììloo/p†Ó4vÎJ)nÝz£ßßöޅÑÊË\Íp1xöB-i]µ,烣££g‡Ór¡’À%üJùڗëuÈü xí“lž<‹EQÎ{)•R{®dÂå¥?I]b¥I¦Q\é̔¤ZÚé|þ›ßü&„W8¤T¼aºRvóöÁà4.£ýíLÑԊ½—N‰” aA0
+RP0¢ãPú’”:VJÇcÓë[;{Nûä䔙»Ýî*b4Íçó(V¡qýú5¢ÔÆ~I Q{/…`"ètZMS–ÅB+)UÄ̱Ò̼³µµ³µµXÌ~ðƒïÍç³ßüæß>øàƒN·[× +B°1¤P²1søì÷þìÏþõWÿöÙgŸ[ë"Òº“}¢Üßßû«¿ú«,Ë>ûì³û÷ïÿèG?zÿý÷ÏÎO÷¯ì;g¼÷7n\cupð”P¬‡2üæBPû…¨&@SÖK1·Ö4®Ù¹ÒßÞÚMQÁ¥ó—uFüå`
+·?œfʨs«F{{£(bFc]h©xÌV)ùªvƒH’$Ž¢8Žó,Ëó<I’HG±Öq‡­bCÙafæ xÊDΣñx,³í…Ì~{<üh8žÕ…fhJ_-]]²³ À‚#2 DÁÅt“$I²µµ<m•ÒívK)ÅuUœœx者 Ëz_IBŠP(©´ÔR{'عD«÷Þ~{:{k‘9]·Ý¹uóùlº·×ÿñÿãÑñáÇd­‘’<¯Ì™$ŒÖuÝjµÞÿý÷Þ{¯Óé ¢Rz³g„¯(Š¢n·{íÚµo~ó›wîÜ©ªj0|ÿûßëí·²<MÒ¸(—$Å·¿ó­7¯Gq¤µÞWx=‘¶A%V¨&ËÞ;kåòøôä|<b~úká«Ë»Î姅y›=éeX3a¤¬ßïommEQ̘‘HPXø:-]‘¥i;oµò<MÓ,M[yž& 9g‰(MÓ@ª Š±º
+ïÀ,—˃ãsˆ[&ï~1š|1V
+,yôÆ5U]MS¯òD!<{&2ˆ‚-­lÐ]·ÛmµZyž÷ûý4M˲ªëºÓi‡þ4Í‹óóó8NP`pÜßß÷k ¼sÁ«]
+¡ˆœ1ðî;ïÔeÉÞ# ”Ò+‰Ò$¹}ë¶Öúððàk_û`k«û/?ûé“'‚ÚEþ¼zJÓt¹\âÊA(%é¾Pç\UUÌ<™Lþîïþîÿñ1J©?þøË/¿¼zõê›o¾ùÖ[o„}ÿúõëaѾX/]éÖR[W%0’ãñøôüÜ]¢©ü3ñrw9€þp!ì¦B¥$‘§–µ.D•Ö‘Ò;BH©Øó«žÐ¢•¦Vžgi’D­VîıneٕþîÖVk«¿½Ýëv»ÝÎN¿ßív%
+°N I…©§ƒ¡³.ï÷Ë(ùôdüð¼Z¸¶@pԔ¢œaS2³ô¸ž†&Q”b¤€¬wŽ™”²tœf­¢œL¦UÕt:="å¬GÀù|TV³4ÕsÞÞÞi·ºÎ9ï€'Bï÷Öy[›ÊxcÙÔ¦Ú»²»,‹bnlÝ4ucë€ØÞéçyûÑÃǒÔûïÝ=;=ýò‹/¼3›ä=4ÚVô@ˆÂ{^.—Ãá`±˜Ï“ÆԌ’G½˜}ôÉ£GŽg³Ùb±øå/ùåœåïï‡ßþ֟(ŠØ¡ºÝîQžçᐢµóå&6[‘
+i¨©d˜&ƒ“Së,‡ØwÁÖõ«iBð"ñ^F]ß,sx$8ç½wD’H[ƒ¦¡ºÄÉxY×Á³¼7ˆ^FBTôª+¸Ì¢ˆ+ë:KöÎ:g”$o½·\T•SÒZëØk­{!„bäÆxÀª®¡®«ùd,VIV4öÑÈ To_Rp 8aJ»œ9R”¤‚Ø pÞyd¯™H €(Œsž!ŽR¥!¤Vº×íµZm!p2æ­HiEºªªÝþž÷`$P98À$ %‘$!¥q6måãéäéÁ³v·ç¼W*vì­ç¼ÕÙÛ½òøñ—'ǧÜýàÑÃGŸ}öé»ï¾sûöÛ¼¶ˆ6Æ\\\‘Jâ̵øæ͛ˆ8›Í˜½RÒû•oă¿øüÁÿûßÿy4…>®I)ŸÞÿìèðäÞ½{oܸýÎÛï¥IΊ4M«ªJ’$l?â/8f¶Îo­wZkg,“$FëœTj%/ÐlzÎYØs—됿šõ‡‡‘D"Á±Î…Q,X¹˜0(©e±¬ƒažÇûû¢`vHèÙ[×"i/V–9æ$€¢k§ç\UÖuÕX`>Ì# [U¦©3vYW¦ª”5†Ër8´­N¶½Õ]Õ¯ž@Ò{c»+¤©¨.¢97…yS¢lã¼%Y"RXUyž+µ<jµZÌahØ)%«ª:99‹£´,«(Ò¦qÝnÏÛ4͆_+Ċ«ÈžPI€ì¹ªêÃÃÃ?üFȗÂkµZï½÷Þ§Ÿ~|ppðýïÿÏþìÏþæoþæç?ÿùNÿ
+¢H’Ä{¿\.ÿõ_ÿ5I’÷ß}/‰µ\.•R䄈Ìî׿þÕãǏ‡ÃsçsNIhBJ=ŸÏÿîïþ®ÓéTU%¥ÜÞÞ>99ÙÝÝýýïßn·1‹ÅbÓX|uË úiˆ¼N7$‚Þ{N¼njôœz—¡Š0Êæ=#¶K3E,PGgg'³éRʽРÚЗ±išWeëåÖÖVœ¦2If³YÈ[CÒ0 IR«ÒÔeUÙºN³ =G ²$YT•ž•¶b!Ec̬,)Òq¬q§÷‹'§Sƒïïövu&}ͳ‚°…Ë©ÛŠ“´VPÖµ0Fs˜)E­f.ËRÉÈ{þlIœ`]×Wö¯4¦ †eÑX념qœY¦¡òZ8…q¢ªšÑh‚HÁ©ÛíE­µD´··ïœ¿ÿ³?üú;ï¼û§ú½ápxtttûö +e4tZ6)gäýÓ IDATV‚1¦ª*)•÷¬µdh¤â»¼ÓétÃLp¢+˲®ŒµÞsvvö·û·¿ýíowww½÷;;;yž—e™¦é¦¡ûêµÁa‡™™¹×ëµZ­p@‡1›À¯÷>”F¯©ò.'ø—·±K1ÇU¹¼”Ô[[;ZIf/I9ÎÕ¶ªFã³ßüöJãí[wwww74²׃^£ÝÐëõrçd’¬Œ™N§±¤4–¥/¼D‚H+ÕÎòëý}b8Y‚³ñ…’ oÜx<Ͳtw»_ÖõýÑ©ù›7÷û#Ѥ$çMi§V°Ó "ÉPb˜  h!bƒtqDB@‹ +¬ž4MoÞ|c<™ìö¯L§óªª£(QJ‡ePו±”RU]K©˜!0K… V«ýðÑ£§OŸîììjísÎ6ˆDBÞz㢘M—’¢ÿð'ß;;;ýâ‹/¯]»¶­õw¾ó!DSÕ!⏎Ž‰*Ï[MmÃ¥™/fO»½öù/ÿé;ßùnQÓéäøøäáǏ=<<8©ëe(Aš¦yúôé³gÏÚíöþþþ7þýßÿ½ÕjEQt9ù½|Nyv(˜…vgoook{;°¬ìÚêAðœm¼ÙŠ6ÏsùˆÜœ³—«QçMSWJ*¥È³ñã8ãfó…1åd2š/æo¾ùÆí[·Ò¸x6Œ?Ax¹þ<°¢(ÎÅƤiVj€©<`Y5Æ;_,¬s%1pG½­x.MÓj·+oKSWU-˜„Cklåê"ª³|‡eu<­àéÅû7{W{[µ«ÀוZWZÑ3:MXiÞ¢óB`à@Èm£(jËÞ%I2MªºzëÍ·÷÷¯9ç#,eÇ·nÝ"’ÆIè½öEqS7ZGÀ¸³ÓúìÙ|>7¦ Öu];ç•ÒßþöŸ!ÚíNUÕqœôzÛÕgŸEÑn·7'²÷¾©êÊ”e¹\.sIGQ2™N|Y–'§‡w?ø×oìø8ÖD="am³\Îçó¢ª 37M†½§þñãÇ~øáÖÖÖl6  F€Ý_º<ô›eæV»%¥DX̓a•™ ÚDË«çéåMksÃ0óì‹b':oeZ+çØZWVÅl6³¶Éó–ŽnK©¯^½’g[¦q›" ”ó(èµ#BÝ&é‚L[žçŒÂø¹TŠÖ¼?ç¬Öq]׏=*ˆ]˜ê•s>"À@$%””Èò-8_ŒÇŸ?{÷ö›W·Z¶Ž¸j\9ijC;]ê(«ŠÈ¯•3Â; “ÖAxïÛínæ¬s^)¥d”$éï~÷ñ•+W>øàtÖzÔ`Ô׿þwªwƒš£µîÝwÞÛÚÚ¾ruÿâ⢪L¯×Õ(<{v¦ÙíÛwŒqMcºÝÞðà ÷ªý`öt2úý~Ó4“ÉÄé6ç…fèõ:~ýƒ^¯Ó˜Úk•Š:Ýöövo0ÍgEY–pi‡Ã¡ÖúîÝ»?ÿùÏ{¹K³¹ÃÞ㪿Ëy–{ï­5¬žO­6*| +¼þêÅ~ýO˜›¦év{i3{"
+žiw»4͊etýZÚjušÚ#BHݚƒˆ¦iì«ì%¥÷>‘£¨AÄv[, f_šZ”¤‘ã”4Íçށµà.ŠÉ¢X
+ãg‰‚•’¬k’4ÎsM`PãV¯§¢þà´þݳ¦b÷A©Š¬kj¬&p65ót¯Fíd¹G žµX±SÐ9Ȉž™{[[Bc¬s†£ñd:Û»òV§»]WµTêøøäþýûúÝ?ýðÃCîrpppÿþýo}ë[W®\D<|òäé½{÷Ò$6¦Ñ$÷vv­µÎº$I˜YéhÿJ ‘
+D"%%×U(„ŠtÖÊÓ<GãÉx:#²g„Ûo½wý·vQÌ˲`öe5“´:i2ŠÊj!8ãWƒëº~øða°ä¬ªj#”â8ÀiÎ9&,êJÆ*înõ®Ý¼$9k­@Ð2*KÛ4ŽµQZíV»i¬$éü>xŽ£nK: î|p®‚Þ)f?™ŒóE'y«+I6Æ9ïÉpX‡ìƒì»@ÏÞ5 ¤æúj²$É
+Ò8êVÈ ÎykBfMQ,­3 PÖÒ9S¥"RIã­sN¡dYJc­|˜HÂjÆŠºð#×Î[ý«7ËÅò‹'ÃJ-o߸²ÓÉ0× i7ܔ†ŠN´»—uw ”¯-£RJ%Á{¶×¶š/A!Hk(Þ~û$I¬õ‚¤”*I’,Ëx±XÄq콪“ɤÛí¥*ÚêmUei­”D„Všóëß0Æ䝶6ֆ)¥4Óc%ÉV«ôæ‹ùl6;???=;›Œ'ì\½t¬Þ}ÿîöÎ~]Þ6Ëb9NÙ±Sš½óÆy'XXð€ P`S7ƒÁ `ÂËuç1D@ØÂ6™D±Ž5 Dqűuîðè¨Ì;ý~_JÕË ÖzÖ¸j±(’4õÞecç™ùá«`f#„0MžÝxrqzz²ÕÛ1n6›9k[íN’¤UÕ9ĕÁCPf!„ó.”VZkg¹,ªW›Ð+ùT†$¤`´¶¡:²¦1‚H’,”òαçM­€‰8ŽGËÂXk­ÓR.,T¦Iâx¾XÌg³þN?Ï҅m¾Çίo·nö;½¸ã\%L%še±<ŽâN¿ÓÛïtv(îºÕð…"R¡Ani‘dd{{[ª>ÂÌý~?xÇÛ&´â«N§sïÞ=(˂Hîïïïîînr¸¢(¥Rq–:`c¬Ä´–5 ݅F„цû÷ïþùçÇÇÇË刈„<o½ûNç¬*=‚qn¾\VuI˦®MíH‘·>8œ
+¡”šN§“ɤÓé„Sòèè(Œ'l& ”VÆÏ^HêAc 3Αs\• +±WËb9¼8žNg{{WHHcÄÕ Xy̬X_ˆÇQ¨“f³ùd<îtÚ»»»‚èâ⢮ë~¿Ÿ$IÓØÍÐDx3aç z»P–eQ̼˜“éäU„V*¥P¬Ô¸ÃŠ ORVÖ6u½Þ<)”!:Šqó½7MÇ1˜¦ qŠ!=òÂ8W™º\ιý½ý¤Ó£´3¾,.–ÅÕN²·•o©HÕUäëeuîÌl±ÈIw?Ê»qšGi†$õ>V¤@1³$HA¬6d­u»ÝŽãèh8F½^/À•»»»D²,Ë8ŽÃ’X©ŸjY諸öÀ$€„aô>à ƒÁàäää÷÷?~öìÙÁÁÁl6 lOӘG˜C†D$¼CfDË岪 çŒ Ñêæžíb²`tŽQ€°µ‰âx±XœœœÜ¸qãêÕ«aß
+̎ +&.¥dDç\’%ýÝ~p–ÜÝÛS¬«¦Ñ*ÎÛ=f6Ɲýþ÷¿wŽ¿ño§IìÍÄڒfÓ¡
+™tUՀÌ̋ެª<υÒDÞîæ€8[E! \®ªªºQÅ`08??Çÿ=›.ø蕪ˆÁós`,&* –¬¼ö½D€`­ +Y¬$‰Q‰èŒ +ÒWÞùƚf¹lêZJR.Ë¢¶NeVϕÉÑàøxxqcÙ³Ÿí¨˜˜ yh–óårîƒ(iõvö:;ûI«‡*AM픒a»
+m`tÞ®¬×Z ‘Ö£Ñh2™Ü¾}ûÁƒ÷îÝëõ¶¼¯.ÖñBcokãØë$RڀZ眛L&Ÿ|òÉÇóÅ‡¥o­õìÙs¸tÞ¹º®‰H-ÊbQ Ð#̖ ­(ʒ —EŠ;ŽäêdÇÞûápØjµB.,VÚ|Ö{ï¼#)A)DZuöøøx>µ³ŽV‘Vq§ÓãTE2k¥aÒ?¬1"DØpÓ,Â5IßyG$'“ñãǏNNø¸r9öìÁ9[%0xã–Ëåt:Çãñx±X‘° Ø"ç µlš4é¾Xa»“ò9±âcÕÆxç WiBje½ %@ ÍYk+fç9Žc53{öu]Of3­2BB‘u®jfÊÖ­4•J&ÝíÙT|z:9Ïov³½Vk;I$8ï+džͲ\LÊÉàüø él%íí8m%N·Û“J:ëCÛYÎîÍ*gæÍH®÷¾(ŠgϞ +‡Ã^o+ÀE¼žÁ""@€‚= Œ’¸¬ëÅb1¿/F'''ÇÇÇGGGMÓX·ò ì4ˆtdØxvž½µn4yï‰Ú4EYÖuˆÎûªq΁ŠTœF2’Ö:Î[šaq£Ã`7 ¡­¤"É5‡…°aŒ.†¦®´Žœõvw{»åÊÕN+ïv»ÏžZkIX\É¢ãŽßœEEQ´Ú­ÙlòÑGýâ?^œ3sÒÞyóÎ’r6Î‹ñhT•¥­Íx<¾¸¸˜N§
+l%¾4m†ˆ+ pz EDH@/– ¬1á¾g–J¢¶~%“¿9¹ç(•R,جmšHÉpT8f ŒàÉ.«em={2ïú(•åä¸èâòf;½½×É2%ف1lmU-çÓÉùى£HëÎÎîþ•½½ý^w«Óé‘5^G:€›åND7oތã8lÔ×®]Ûß¿’†Ml9ÏRGƚñlztvúäɓÇOŸ>=/‚°Œ[“q-l!„ÐZ{ïuJ)cÙ;_ÕÕÉÉIQEœ$ p±\6¦qÞ-3ç!M[B’RjÁCÌy^33C$ÈqÓÔ ˆ—sÎ׫=<:|røä?úþ;ï¼å]U•USÅóå(žÈþvÇ{? êºVR—e‰(´RJª +m׃Fpÿþýÿþßúôécç÷î¿ýÿíΝ;0NCÏÀ4 +8¶¥ð ›mO¬guVÇ«wDôO蕆©µ~í„J(¬s(ê,K=
+R¨BӜp °qÉXƒÚK%Ó<3Aˆh¨ê’P`–„ˆ¥r ‚k°ìàb4@Iy»‰H¶ZE]|r1?m\¿×jçI u¤<HƪĦ¶°Ö\ N&O¿x’¤QÚj÷ú[;»y»w¶‰„RZk¥µV(¼qZë›7o6Móµ¯}íʕ+{{{iž¦ŽŒ1MSc˪,Šr¹,çƒÃ£Ã³³³‹‹‹ÅrIì|¨pQŽ›Ö‘ -]í4É$Ž­1uݔeÈ)É;_•UY–­V¯cL§ê4aÁŽXÅ©ŠbŠ£vUÔÃӉášY"¬.Ø|ºÌòƒµ› 5npv‘¥™±æŸþï~üæ³o~û[·nÝi·ÛíNg<>yz’µ{Ýíñ|抲h·Ú¥W¾âHGyž¼¨§¦ôsøÙÏ~ñӟþôÑ£g¡y`Œg(?ûøþMA=†ˆÂx;3³c€k®£¤Ê4¯:Ø=7s „$
+¥£V*Ž"ï= ‰Š cm]×À¬¥,ËR
+êšO§°sˆb!­4ÓZ"x&!ÀÏ/æЋ\ÍèN«—Dqkw:Ÿœ™–¦D©XS¬QÊh- nS•uU +‡?ö PÈÒ£’rãޛ$‰Ò:‰’° +„p>Ÿúùç³bZU“ɤ(Šåri­c†PÕú€r΂VZÑ 锐‘RJ+ëH+].–ÖxÆ9ÇÈW®íßýàn»Ý6Y.ç‘Ö[[ÛóùT’Ò³4Ó±² +KŠ¼÷l½"åÁ¯mŸâ/¡—›t¬±UUyïëªþÝï>ú×û÷^¯wãƍþð‡{{{eYi-«ºžÍç_~ùežçƒÁ`±X GD±³³³½½MDEQEñùïF#cÌz—ι•A†/n¢ֈ¾¼¶§|ñÆpÖ~XáŸçGææ¿W/%VT]Bi]Uu¥t¤õBiÂh½Ílk£V2Î
+I)bàsRÇRp¾1&°äŒ1X×ÞÕ¶¶I¬w{´Õ2ŠØÙژ²¶¾¬ª8ÒJx#00dô–gŒ¢ªÝræΟwк•Ÿ{Àˆ›¦qìA®L÷6Œ^ç6*°&”öÞ3
+ˆ¤’(QRfÝ.!5u-Ù²oŒu«$Á#¢iÌx<N’”¹1ƚš‡çãó³Ñx4õ$©•wˆeÅÕ¢6MõU6¸¯\29®÷¾®ëUœ$ççÃáùÙYw7˲½ÝÅröìÙ³‹áŸž]\\xÀ$Iƒh÷~¹\4Mcµiš@ÖÝäõ_Ù¼&¾Ú,ºü0±RÎ}%°6ºÙœŸÇì%,DiT*AVGœ7²)=7í: óe)%¶³|UÚHł²4Ýîvcóóù<”Wá=I)ÙÛÉdIàÓ$Q:ӊ< u¼\ÎG£ ·\(IÈ~+d'eðŒ‡(ÐðŽïE8þ1ø›·Ö+;­_K„v)â†ô›8(3si")¥l·[JiÅeQ,–E]TÀZ&© ®ÃözˆÖZ%ÅéÉÁ¯ýë³Ó³ápXVe]׎Pô:ÍÞÎ^+ÍMe—~a_±æþªÐ
+—Ö¯}(C&…@AƘÃgOŸÅqœeI]WÖ­¦ëªöÞ )Ëe1äA¹X:ï—Ëe]×äå:q=›‹þR ]~ÀWŖs6؂¾X/=i8D‚> ®Ä/@ ()%Õ„d­ +hnY–•ßñÞ¹))°Þy/Zí²©‘YÄ12ÄJ! w^K ˆ>h;)E‘`´uÍΕU½¨ê8ŽRE2BŠ­¯ÊÂyç­.w6֘¥
+™¼ó$H±Þyr.°a‡RÈx0èM*ã½Çà‡à}€å²,#¢$˴֝N7äÎDTUÕp8*Šbx1vÆ&Q$¤Š$•B@.Šb413€_œ>yøèìtä,£`$5֍‡Wy­µ©jo›K)ʺ…~ó梀”IÓ4¦nÒ4a†¦¬lӏï<H!…1f>›Ycˆ(Œ7·ãuCúÛ7a´ †Ë—´Þ¤@×ø×ô
+_xÐzß ‰a*Ìp…V¼RJI) +Ba­‘(„óUUY¥Qpž‘Â$mU c#­Ë¢ðÞGq$¼ÔQ„γ1iI¥¢$Ëò–u—EY–K¤ 0KŽeYT}M䛪©kBôÖxc™YH)‰4¡7›EÒ,ã,H
+xúÇ
+*#!þÚíööövEY«€RªÉtrqq¾X.†ƒÁ¢® išXGQ;ç¼µ:Š–å2´"ö÷÷÷ööêjî\mšÒ$-˅÷ŽHˆ¬oóe¬8ÿh—MŸ`s*%I|óÆͪªŽÃ" ‡¸¶Æ€–S”õ`±Ö;G(@€àÕ!΢_Þ¢^>µ^Ô[{9°.EÞWÖåØ
+#äÂ{@ç°t$@h©5ɊÊH*%=ÆP9#"³ŸÏæƚ¤MF“¦iØ9‰B VP1sÀúk|Uc")“$öž¥RÛÛÛW®]wÞ[S?yúøøpà­SRDŠZ­¨LfQ–DÝ<×ÔÅØ/–‹Æ®*g-1I Š"ˆÆÏ,µ@É%Q’¤Q¤QI¥£HG10kò,ït;RÊÆòl>/Šâôôô|0@€ÅbR
+
+KJ‘V ‡èRJ5¦©ë¦,«Å|ÑԋýÝÝXǦžKdg|”hc=Æ:µ¶6֒ç, Úؾ_>høpÌvÞ¬ï}S׃!I2uÃkíg@‚HFg¬”Òz¸bÍӄ5À 5%ç,âªÊ¹|d1û Ì̛xXYÕû—Ú‚ˆ$åkà†W#qõˆ="H” ¢"éœÓRZk#‰º®%°„Ž×¤"ªMS[µ“d™窪¢X–e¹Á™âڈÂJ¥£‹ÊÛ‘H¦¬b­½u£óticL½X´ãt:Ž'S­õrQsb{;•Ûqwwvœs~ÐF€$I‚ +²m¬•R–uåVUå›)-•j·ÚQ¤…”äIÖ͝ÍæÅÂøᢐRÚ:ð^œcX֕Š"™gf¾D’H*¦m“8BoíhÄ—Óòû_ÿ÷ÿóöÿÕnåÓñÅáё5FªQèq¡Ò–R%‰@ PJ
+ĺnš¦A„«³{uˆ3WÍjxy}’0OÆ#@Ɓ¸¢0{ör8灐”fk]@øœ³èXJU75H¥B)¬©PÂ?—@F
+QUÕIš\½vSFéùÅÐcœ%%‘Hz¶ŽµzÕú«o4Œ×sþzmmÐá0OY’åyU׍1Y™fij¬5Î6MSEUU€˜Ä±âyí¢4qö‚A‰bi4M3™LœsuUm:Ù~m=åœ 
+áՃštȍB;<ônó<ˆ¼qVi-K]šÚZ+”–J1³ÎSAb6›5sSÕMQÕ'''“É$Ïóv»çy¬4¬›k!?óë~Q˜~ tx)„t”ÄUY!QQ÷?ýTjÉàm0åöÎ tΑµ"” D…pÆTÆ-Ë®Z.hT*ô§Ù{ï1Ø;ÖXöì™b'i•}°óÜø-‚„ $ë=8ög½±5¬'ʄøÿÚ»¶æ6®äÜ}®s@”hɖwµãT’ÿÿòd«¶R›ÝTù¶²E"qË¹ôé<4K+×®í*å%쁃™ž>}º¿þ>e) ŒEÄRf¢£Îçs‚uŒQ1j­÷‘Q窺FÄ\(Q.œsQGößëXçØxi¥ÅJcNÀ’låÃA²ÚL102„C¯ŒÅªÖŒ€0ŸÍWMº_o6Zëù|>æ8Æ ¡mÀ(í­«¼×§Â‡ÖZž$g䅔*¤fRêû^[,ËåÒhm£ÖÆÚûõÃêþÍ8ŽÖ{ùŸŒ½ŒÂ2ǐ¤>D'8e¯Öš¦i çlœ“© +y–ˆH!Ô]»¼¾ÚívÆØ¡?pa´šµò¨P$ƒrNµ«Úº‘Œgyy9ŸÍbŠ÷«»»»»qô ýg­¹¾º–“ìg‰Ê~¿ËP´ÒTˆ 7M³¼\6uS2ňÊz½îûƒTõg³®ëf2‡ˆ1¦ín›(mX`ûWWWõ Ã0®×ë£uN8Ê{úróùüâ₨h­›®#€D9 ÃJ&Òå ù ÞÅPqž\ðĔ"Ÿ];ídЌƒÒ@%¥„ÄÊ13C¦TQI9£RUUÍf3—+΄Ä\
+2+PxÊ%ōªª$‰ Á¸
+(Oê:ÌÜ÷½t-÷û}]×uUMÃX55 R¦c{ ‘ªªŠ9'"böÞOý4 ƒÌ#œ܄pr,W×ͦXŠ3FI›åxÑK©g]f”•RŽ éÊ# ²ÆkÎë梛IÂþôéÓår9cÊe?ŽÈHäàb­»¼z
+•¨+ŽãbfJÆ ¬”êÝü¢ò•V*¦cìCcRJ)kªn~ýÑ +¢J)CL)#Žãh­EÀ)LUU-¯ž4uCOº»{s˜&´N)ÌÆZD”¥ÙKD¨ÔÕӏn>º!¢œÉ;™¨hkµÑ‘ˆJÑJUû~®cÁ[ """©è—·”òjë-j£”QÊëuÆxc¦qªŒ˜^Ή@å=1‡œë¦q\J"U€R"cKÊÖZý#ú@I€•È/0è³0•,ÇçY¼s}Öu%kfÎ)9ï‹•BDu]_ÌÞؔPáLÖuSëÓ ‰lY„m £sŸ§i2æ¸è«ÓkÎ 4FÊS Jk팓 3€ÖÆ9Dž§IÇGh×4M»Ý®ïûÛÛÛC?C. „À)—˜§!„¦nXèË +BJÆû0R¦ ¼¯›¦3ÆDeÏ… +]sá\˜Q+¥
+(¥°nÜl¶˜¦¸ÛŒÑÎù®›Ïf   +`¦2†˜ (csJ…Ùx­´NãTJÑÖ”rD?*ÔÊ(£Â"ˆZ¡Â AfåÜßßþ +ߒR™:E²·¼M±s&£töTyïŒ5ÚTÖ ë¤tsSʃ³zè'J`UÈ)OQN!@á4…¦i¼s}ßK=°ë:ɮ伅ÓA•èÀäœÛ¶`¤¬1ź©1¦dY,»ýžbjsŒ¹µR–X§€Ã0 û}UUhÛ¶q2MUŒ6UU×1fCܶíYÀ{Ÿ)÷aâ” jNûž *¯ +hàœ¡”œ3(4֚BŒ(÷ã°0ÊûætUKŒq½Ù,s`æ¦iš¦yùê‡ívk­/uÓçŒrޏ”RÀ” +tFWÎ{Ÿ P)¾®®ž>ÉDQƊf³‹å²ªë¢¬€Ãz=æV3"¢Ñˆ`uA«5S{Uì4MŨŒÇþ (F+­˜˜„C)­š•äg9œË¢T¯e'Éj0ÖXkR¡:'o¬¯\NGÕ²C¡BDZ™ºu6ª¢9å:禙¦‰bžÜÐÔuåýUÒum]W¢VÅ ¢L$ȍcc¶Þëœs9¥œ30Îi¥6 /——¹‰—í §)ØÊmµ6%R±B|ëg"mM)%)¥…Ãb1Ÿç1Tþ¤r€(4¤ë‡uˆÉUøªVFã,”\´ÒušWEkƒJ£Ò 4Þym¬µ€cL)&kínì实cˆã8 {"[  WIDATÑm×þ¶rëõÆhÝv¬8Zkmt]×µó@e»Ý†ú0)k³ùr¾xPfLµº\\|úü“Ý~7ôƒ1ÚZg­­Ú¦jêÃá0 +£wžrVZf£µPYZçXTÙ´–ڐµ&§,ÒmˆÈTŠC ÌFëÊÙòSˆæm¿ùûq D¡0¥µUb)Å¢A:¥Œ`µQ9goMålJ•À6µµ1F¬ñR: ÑÅàlpvGï´ÖÚ{g­.Dr ?ùø"ö}¿ÝbLÎ9Ñüˆ1¾zõ* ®r¾˜ÍçÝ,§´º}ZÍ®¯=êyÕB)÷û +£.…–Ý•Úl6©PŠ¡h½ÐîŸ綇ýÝúÁ¶­­ªfÞÝÜ|”BØn·Ò¡»¾X.‹£Ü?fnÛVŸ‡¾'FTà*ÿ鳏=èïøa7¨•º¹~2kÛû»7Ê(ëk¥Ô‹§c¶Ûía˜èáAkýüù󋋋iš¾ýöÛRÊ.MŨ/^è¯n_M%çR../¿øòK­µ sêº*‰ÆðüÙ³ùâŸV«×www~õ6êÉÅå—Ï?Ý.®¶¿Y¯rÿõ‹/ç‹Åý›{Q:ô‡Ënþù?~q?«›®mÿûOB­r)‚€ª®û¾1
+Ï㔡’¼5Œ¨µvÖƼ6Ã0 ³õõ>é½&ÕύXï¸×»2ÝREê%ÆÖJòn}ÖB.E;ctÖc¬1!„˜RJ)Ä¿`öM+­†®ënnnªª†áÕíªïa jšæp8ÄõRŒÿð›ß>½¾æÂw­nW¯}]]´Ýož}Œ óõ}þö«Ãþpss#÷›õêþMÊùæÙó'—Wßß¾:üþ÷E#)¾þèæ“O>Ѩöû}ß÷›Íf¾X¼øôÓRÊjµÚn6ã45MsuuõäéӘҫû»ûý¶éÚÏ>ûìæâry¹üúûï§a$¢Ÿ¾øü³ßýðòåv¿-\J)ϟ?ŸÏç/_¾Ül6BÖ4͋/f³ÙÓ§OW«Õ}ý?ˆXUՓ‹Ë¦mï÷Û7÷Ì|yy9ŸÏEc,„°Ýn¶Ãa»Ûm†Ãï>ÿœ­Þ ‡Cß3Â7ß}Û)k#U°À4M?ÜÞƜµÑ®ò‰ò0Ž1„¯¾úêaýЏc˜BÎy짦mNg”³<WÀœb¢“Øq)$€lÙëè“nÀO°Íü2Çz;°ýØ[TÇÈó8ÖDÙë¬Ë9e*\åcªœ÷ÖUօ3嘳èGȈmŒQÒjéa;ÖWWWÖ:©/țóù|‚mŒãþ°õV×U=_tSvÓ¦0MSí«ªªJáÝ~¿Z­ÔIù²ïûÍv{èwO®}ßS¬\¦qõænáê®nd/9Ž£Rj»Ý6Mc­­êzœ¦û‡*EàóM]¯ûý~¿ùýË2ق +ÜÃðõW_SÌF)kl.™™ʲÝneúcš¦ï¾û.¥ôìÙ³ív»Z­J)¯^½úÃþð鳏}割ô¤^¿~-Û^¥Tß÷›í«×·ýÐÿp·z¹º­«úööUÈIkóÇ?þñõ7ñuÕ\]´WKx½Zݾ¾˜aŒQiý§?ÿy½Ýl¶iÈ‘V:Œ“RX
+#¢mo€Â Ò¡/åHYXŽX1!y”B@kø½Õð—ñÇ¿mç?$>ê#œQ—R‰)"‰žr¦L9S)1QÊI¥B1§)„‚œ±øÖq†ˆ'´nˆy'8•ZÊy(qFι²N˜Œ ð˜²lŒ»¾¼JPþí÷ÿ¾^o–Ý •ÚívÛÃ~ S.E{çj_J™¦i>›ç”b‹ºuÆ€ðÚ;ç.BËÁ¥<<¬Ö”³lbtåú‡i¬´]6³q)m¬1J@u±¼hºF™y³Ùô}/Å^Dìº.„ððæ +·^Ì}ÝXoí./ÚùL
+rU¼ê͛7Ûýî0MÓÈb]×1FÑѵ ¬R™¨j››ŸÀ¶n¬µ’•Ê…ýËW_'§CPÖk•V›ûuå=†º®C¨5)@€«åòæê ­aß÷«Õj°ÖŽãH)×]»¸Z~ûÿù¶{üâ¥ðG—<wàXG=ï•RF*C†Žƒ1¥CDÎ眫|•)g¢”SŠ)ÆS$¢B4¥OØꔒ€ÁÀLnR¡ifF›aШ(§’õN…ˆ™Â0…çÕjµÛí8¦œó8M„l¬ÅRåÝ.hÀÊúeݶ—M¿?l»Ýn7M“¨âh­×»í0 ÖZ`î‡A)å¬UZPÚZÅÇ2Û4G²Ö’€yÖ´Z©õ›ûa”VZë3Û¢TAe{;HKÞûv6‹Z&ºó>D"z8쪶É!úª’N³÷>çlµ¹š/q"NTòr `”Fk•5…Ëv»Ýí÷gš‚3P½”R×ÍÜ»ãaè§CŒuÛ8k«ª’8}\ˆ
+å°~X§)¤˜€9B­ëº¾¾¾†ÓÜpèA¸I~½c£ÔÛk¢B<÷**BRJ1þƌÖY"2†‰È[9],¥HWV¨išäd.S ò»Ä0D¬]<”ù÷âQ+]{g¤õA…]H˜©Ô±mZ]²1všÂhFç}Û¶¬° „‘²[R6…=êÖxßÀö°2µ˜ó8 *•âÍ1„ååeݶZ©Z[Ò¸î÷! Š™¤! âŒ‘^…¸Žd$²#M‡s Aî(ÔVDVY˜¦)ä”Æi¶XH K:V,%§}œÆép8(4Úsˆ¡EÊpÿð •jÚÆûª®«®ëè0çbJó‹Å~ÞÜ¿¡L
+‘Ë‘–)Řb4Î)£´R…Š¬0ÀÌuÛ
+94žFjS‘Hh›~½c+üæëˆå@ÐJ1¢bf.(<M¥¨B\ ‘¡BÎY*”sN9KF坕ðNÀ>º˜"paÁ—‚½Råe¡L¹NH…Èji PI)7uÙƒÖz®pÑ4C×µm{œ©¢Ni§´Rj*ã°?|óÕב g£
+S!N¢a]röÆ**Üøª2 …)E&1C"ßTÄSÌ\œsZÙB¡l¼uóNJe璲TéÚ¶µÖî÷{YY8$Ð &*!gm5tÝl¹XXk°PÑFk……¡nëë©öŒz¦Â¬0§$i“ÕÚûŠ*ïçó¹HH ¢F…ÐJ)µ¼X pLéaQÄZ °2† ‘$¢ ±
+ mº'W×]Û Œ)%asùkÈïÛþõ;p¦X<NžvŽ"q ;I$Ióu)%-\$2Bj´òΓ3„L$+ ÈÌ$3ä||“O`½TˆÞÒN’,óÄ¯Æ¯UeCë2 RR€J)ÊÔ +\«RÊéŠrÎ1ÊßJEÞra§ôl6«}Å̍¯¦iJ1©\lAgÌ0M l”BYF
+5]×u]Û´Z))ážÁr&Î9av•Õ97ŽcˆÑZ›J®”­½Ÿ5í¼›ÃöÑç5'Èh¿´Wü€ã0ŘSJµ1Òó¥ àb6_Ìғ@Ä$’àÌclÛöúòj‡ínZ•BVäì!"K‘$—”ÖmÛ¶uÌ)FYЭ6ƒbÄþ—:Ößp¸wÃØ[Ð.é-ËÈȞâÜ«9cˆåe"’éÅóD”ó‘*ø] ¼ oíà-%Y¡â¦ íŽ3¬ôü¯ä˜º®Q–¤üVh‘tû<E}†n øìüÅѝµF듚œòÞw]§På”díÆÓìx9qC2³vNí©!çvyu¥ùH"tg9gã à±¥&€‹ÅbŒ1î%o¦¤œó|qqæ‹;‚ËOB½rNºiI0Ž3g§ +¾´Þåß6M³X,d+pÞT‰KåœÊ{[À_¿+üö“ŸõWoòQððôãÇßO«í{/ßyó=Ǒr†SŸà§¿¯èŶó„F:?#ü6¨ò<©‚ïLœ‘DAðxBP1%«Þ~‰ˆò›<RçKq<IÄ÷iòÎ-ç|úD\|.¾G‹…€|¢P8^)|粋Àýû__Îô!~‹s›OW p91L^-—ïœãÿ¥c=ÚÿûÛ2=öh¿ÒëÑ>ˆ=:Ö£}{t¬Gû öèXöAìѱíƒØ£c=Ú±GÇz´bŽõhÄëÑ>ˆý/”Au•ËF¶•IEND®B`‚
\ No newline at end of file
Index: rel_1_4/pngdemo/readme.txt
===================================================================
--- rel_1_4/pngdemo/readme.txt (nonexistent)
+++ rel_1_4/pngdemo/readme.txt (revision 1522)
@@ -0,0 +1,27 @@
+--------------------------------------
+PNGlib Demo (only open a png files)
+
+by
+
+Giacomo Guidi <giacomo@gandalf.sssup.it>
+
+Last update 20/03/2003
+--------------------------------------
+
+This is a simple test demo for the png lib.
+The "test.png" file is loaded and saved
+into a buffer
+
+--------------------------------------
+
+The demo is composed by:
+
+MAKEFILE The makefile used to compile the application
+README.TXT This file
+INITFILE.C The init file (with fs initialization)
+PNGDEMO.C The PNG Demo
+TEST.PNG The test png image
+
+--------------------------------------
+
+- The file system is initialized as read only