summaryrefslogtreecommitdiffstats
path: root/scripts/mod/file2alias.c
blob: cea4a790e1e97170459576b8b68c94daf3e95cc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
/* Simple code to turn various tables in an ELF file into alias definitions.
 * This deals with kernel datastructures where they should be
 * dealt with: in the kernel source.
 *
 * Copyright 2002-2003  Rusty Russell, IBM Corporation
 *           2003       Kai Germaschewski
 *
 *
 * This software may be used and distributed according to the terms
 * of the GNU General Public License, incorporated herein by reference.
 */

#include "modpost.h"

/* We use the ELF typedefs for kernel_ulong_t but bite the bullet and
 * use either stdint.h or inttypes.h for the rest. */
#if KERNEL_ELFCLASS == ELFCLASS32
typedef Elf32_Addr	kernel_ulong_t;
#define BITS_PER_LONG 32
#else
typedef Elf64_Addr	kernel_ulong_t;
#define BITS_PER_LONG 64
#endif
#ifdef __sun__
#include <inttypes.h>
#else
#include <stdint.h>
#endif

#include <ctype.h>

typedef uint32_t	__u32;
typedef uint16_t	__u16;
typedef unsigned char	__u8;

/* Big exception to the "don't include kernel headers into userspace, which
 * even potentially has different endianness and word sizes, since
 * we handle those differences explicitly below */
#include "../../include/linux/mod_devicetable.h"

#define ADD(str, sep, cond, field)                              \
do {                                                            \
        strcat(str, sep);                                       \
        if (cond)                                               \
                sprintf(str + strlen(str),                      \
                        sizeof(field) == 1 ? "%02X" :           \
                        sizeof(field) == 2 ? "%04X" :           \
                        sizeof(field) == 4 ? "%08X" : "",       \
                        field);                                 \
        else                                                    \
                sprintf(str + strlen(str), "*");                \
} while(0)

/* Always end in a wildcard, for future extension */
static inline void add_wildcard(char *str)
{
	int len = strlen(str);

	if (str[len - 1] != '*')
		strcat(str + len, "*");
}

unsigned int cross_build = 0;
/**
 * Check that sizeof(device_id type) are consistent with size of section
 * in .o file. If in-consistent then userspace and kernel does not agree
 * on actual size which is a bug.
 * Also verify that the final entry in the table is all zeros.
 * Ignore both checks if build host differ from target host and size differs.
 **/
static void device_id_check(const char *modname, const char *device_id,
			    unsigned long size, unsigned long id_size,
			    void *symval)
{
	int i;

	if (size % id_size || size < id_size) {
		if (cross_build != 0)
			return;
		fatal("%s: sizeof(struct %s_device_id)=%lu is not a modulo "
		      "of the size of section __mod_%s_device_table=%lu.\n"
		      "Fix definition of struct %s_device_id "
		      "in mod_devicetable.h\n",
		      modname, device_id, id_size, device_id, size, device_id);
	}
	/* Verify last one is a terminator */
	for (i = 0; i < id_size; i++ ) {
		if (*(uint8_t*)(symval+size-id_size+i)) {
			fprintf(stderr,"%s: struct %s_device_id is %lu bytes.  "
				"The last of %lu is:\n",
				modname, device_id, id_size, size / id_size);
			for (i = 0; i < id_size; i++ )
				fprintf(stderr,"0x%02x ",
					*(uint8_t*)(symval+size-id_size+i) );
			fprintf(stderr,"\n");
			fatal("%s: struct %s_device_id is not terminated "
				"with a NULL entry!\n", modname, device_id);
		}
	}
}

/* USB is special because the bcdDevice can be matched against a numeric range */
/* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipN" */
static void do_usb_entry(struct usb_device_id *id,
			 unsigned int bcdDevice_initial, int bcdDevice_initial_digits,
			 unsigned char range_lo, unsigned char range_hi,
			 struct module *mod)
{
	char alias[500];
	strcpy(alias, "usb:");
	ADD(alias, "v", id->match_flags&USB_DEVICE_ID_MATCH_VENDOR,
	    id->idVendor);
	ADD(alias, "p", id->match_flags&USB_DEVICE_ID_MATCH_PRODUCT,
	    id->idProduct);

	strcat(alias, "d");
	if (bcdDevice_initial_digits)
		sprintf(alias + strlen(alias), "%0*X",
			bcdDevice_initial_digits, bcdDevice_initial);
	if (range_lo == range_hi)
		sprintf(alias + strlen(alias), "%u", range_lo);
	else if (range_lo > 0 || range_hi < 9)
		sprintf(alias + strlen(alias), "[%u-%u]", range_lo, range_hi);
	if (bcdDevice_initial_digits < (sizeof(id->bcdDevice_lo) * 2 - 1))
		strcat(alias, "*");

	ADD(alias, "dc", id->match_flags&USB_DEVICE_ID_MATCH_DEV_CLASS,
	    id->bDeviceClass);
	ADD(alias, "dsc",
	    id->match_flags&USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
	    id->bDeviceSubClass);
	ADD(alias, "dp",
	    id->match_flags&USB_DEVICE_ID_MATCH_DEV_PROTOCOL,
	    id->bDeviceProtocol);
	ADD(alias, "ic",
	    id->match_flags&USB_DEVICE_ID_MATCH_INT_CLASS,
	    id->bInterfaceClass);
	ADD(alias, "isc",
	    id->match_flags&USB_DEVICE_ID_MATCH_INT_SUBCLASS,
	    id->bInterfaceSubClass);
	ADD(alias, "ip",
	    id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL,
	    id->bInterfaceProtocol);

	add_wildcard(alias);
	buf_printf(&mod->dev_table_buf,
		   "MODULE_ALIAS(\"%s\");\n", alias);
}

static void do_usb_entry_multi(struct usb_device_id *id, struct module *mod)
{
	unsigned int devlo, devhi;
	unsigned char chi, clo;
	int ndigits;

	id->match_flags = TO_NATIVE(id->match_flags);
	id->idVendor = TO_NATIVE(id->idVendor);
	id->idProduct = TO_NATIVE(id->idProduct);

	devlo = id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO ?
		TO_NATIVE(id->bcdDevice_lo) : 0x0U;
	devhi = id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI ?
		TO_NATIVE(id->bcdDevice_hi) : ~0x0U;

	/*
	 * Some modules (visor) have empty slots as placeholder for
	 * run-time specification that results in catch-all alias
	 */
	if (!(id->idVendor | id->idProduct | id->bDeviceClass | id->bInterfaceClass))
		return;

	/* Convert numeric bcdDevice range into fnmatch-able pattern(s) */
	for (ndigits = sizeof(id->bcdDevice_lo) * 2 - 1; devlo <= devhi; ndigits--) {
		clo = devlo & 0xf;
		chi = devhi & 0xf;
		if (chi > 9)	/* it's bcd not hex */
			chi = 9;
		devlo >>= 4;
		devhi >>= 4;

		if (devlo == devhi || !ndigits) {
			do_usb_entry(id, devlo, ndigits, clo, chi, mod);
			break;
		}

		if (clo > 0)
			do_usb_entry(id, devlo++, ndigits, clo, 9, mod);

		if (chi < 9)
			do_usb_entry(id, devhi--, ndigits, 0, chi, mod);
	}
}

static void do_usb_table(void *symval, unsigned long size,
			 struct module *mod)
{
	unsigned int i;
	const unsigned long id_size = sizeof(struct usb_device_id);

	device_id_check(mod->name, "usb", size, id_size, symval);

	/* Leave last one: it's the terminator. */
	size -= id_size;

	for (i = 0; i < size; i += id_size)
		do_usb_entry_multi(symval + i, mod);
}

/* Looks like: ieee1394:venNmoNspNverN */
static int do_ieee1394_entry(const char *filename,
			     struct ieee1394_device_id *id, char *alias)
{
	id->match_flags = TO_NATIVE(id->match_flags);
	id->vendor_id = TO_NATIVE(id->vendor_id);
	id->model_id = TO_NATIVE(id->model_id);
	id->specifier_id = TO_NATIVE(id->specifier_id);
	id->version = TO_NATIVE(id->version);

	strcpy(alias, "ieee1394:");
	ADD(alias, "ven", id->match_flags & IEEE1394_MATCH_VENDOR_ID,
	    id->vendor_id);
	ADD(alias, "mo", id->match_flags & IEEE1394_MATCH_MODEL_ID,
	    id->model_id);
	ADD(alias, "sp", id->match_flags & IEEE1394_MATCH_SPECIFIER_ID,
	    id->specifier_id);
	ADD(alias, "ver", id->match_flags & IEEE1394_MATCH_VERSION,
	    id->version);

	add_wildcard(alias);
	return 1;
}

/* Looks like: pci:vNdNsvNsdNbcNscNiN. */
static int do_pci_entry(const char *filename,
			struct pci_device_id *id, char *alias)
{
	/* Class field can be divided into these three. */
	unsigned char baseclass, subclass, interface,
		baseclass_mask, subclass_mask, interface_mask;

	id->vendor = TO_NATIVE(id->vendor);
	id->device = TO_NATIVE(id->device);
	id->subvendor = TO_NATIVE(id->subvendor);
	id->subdevice = TO_NATIVE(id->subdevice);
	id->class = TO_NATIVE(id->class);
	id->class_mask = TO_NATIVE(id->class_mask);

	strcpy(alias, "pci:");
	ADD(alias, "v", id->vendor != PCI_ANY_ID, id->vendor);
	ADD(alias, "d", id->device != PCI_ANY_ID, id->device);
	ADD(alias, "sv", id->subvendor != PCI_ANY_ID, id->subvendor);
	ADD(alias, "sd", id->subdevice != PCI_ANY_ID, id->subdevice);

	baseclass = (id->class) >> 16;
	baseclass_mask = (id->class_mask) >> 16;
	subclass = (id->class) >> 8;
	subclass_mask = (id->class_mask) >> 8;
	interface = id->class;
	interface_mask = id->class_mask;

	if ((baseclass_mask != 0 && baseclass_mask != 0xFF)
	    || (subclass_mask != 0 && subclass_mask != 0xFF)
	    || (interface_mask != 0 && interface_mask != 0xFF)) {
		warn("Can't handle masks in %s:%04X\n",
		     filename, id->class_mask);
		return 0;
	}

	ADD(alias, "bc", baseclass_mask == 0xFF, baseclass);
	ADD(alias, "sc", subclass_mask == 0xFF, subclass);
	ADD(alias, "i", interface_mask == 0xFF, interface);
	add_wildcard(alias);
	return 1;
}

/* looks like: "ccw:tNmNdtNdmN" */
static int do_ccw_entry(const char *filename,
			struct ccw_device_id *id, char *alias)
{
	id->match_flags = TO_NATIVE(id->match_flags);
	id->cu_type = TO_NATIVE(id->cu_type);
	id->cu_model = TO_NATIVE(id->cu_model);
	id->dev_type = TO_NATIVE(id->dev_type);
	id->dev_model = TO_NATIVE(id->dev_model);

	strcpy(alias, "ccw:");
	ADD(alias, "t", id->match_flags&CCW_DEVICE_ID_MATCH_CU_TYPE,
	    id->cu_type);
	ADD(alias, "m", id->match_flags&CCW_DEVICE_ID_MATCH_CU_MODEL,
	    id->cu_model);
	ADD(alias, "dt", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_TYPE,
	    id->dev_type);
	ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL,
	    id->dev_model);
	add_wildcard(alias);
	return 1;
}

/* looks like: "ap:tN" */
static int do_ap_entry(const char *filename,
		       struct ap_device_id *id, char *alias)
{
	sprintf(alias, "ap:t%02X*", id->dev_type);
	return 1;
}

/* Looks like: "serio:tyNprNidNexN" */
static int do_serio_entry(const char *filename,
			  struct serio_device_id *id, char *alias)
{
	id->type = TO_NATIVE(id->type);
	id->proto = TO_NATIVE(id->proto);
	id->id = TO_NATIVE(id->id);
	id->extra = TO_NATIVE(id->extra);

	strcpy(alias, "serio:");
	ADD(alias, "ty", id->type != SERIO_ANY, id->type);
	ADD(alias, "pr", id->proto != SERIO_ANY, id->proto);
	ADD(alias, "id", id->id != SERIO_ANY, id->id);
	ADD(alias, "ex", id->extra != SERIO_ANY, id->extra);

	add_wildcard(alias);
	return 1;
}

/* looks like: "acpi:ACPI0003 or acpi:PNP0C0B" or "acpi:LNXVIDEO" */
static int do_acpi_entry(const char *filename,
			struct acpi_device_id *id, char *alias)
{
	sprintf(alias, "acpi*:%s:*", id->id);
	return 1;
}

/* looks like: "pnp:dD" */
static int do_pnp_entry(const char *filename,
			struct pnp_device_id *id, char *alias)
{
	sprintf(alias, "pnp:d%s*", id->id);
	return 1;
}

/* looks like: "pnp:dD" for every device of the card */
static void do_pnp_card_entries(void *symval, unsigned long size,
				struct module *mod)
{
	const unsigned long id_size = sizeof(struct pnp_card_device_id);
	const unsigned int count = (size / id_size)-1;
	const struct pnp_card_device_id *cards = symval;
	unsigned int i;

	device_id_check(mod->name, "pnp", size, id_size, symval);

	for (i = 0; i < count; i++) {
		unsigned int j;
		const struct pnp_card_device_id *card = &cards[i];

		for (j = 0; j < PNP_MAX_DEVICES; j++) {
			const char *id = (char *)card->devs[j].id;
			int i2, j2;
			int dup = 0;

			if (!id[0])
				break;

			/* find duplicate, already added value */
			for (i2 = 0; i2 < i && !dup; i2++) {
				const struct pnp_card_device_id *card2 = &cards[i2];

				for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) {
					const char *id2 = (char *)card2->devs[j2].id;

					if (!id2[0])
						break;

					if (!strcmp(id, id2)) {
						dup = 1;
						break;
					}
				}
			}

			/* add an individual alias for every device entry */
			if (!dup)
				buf_printf(&mod->dev_table_buf,
					   "MODULE_ALIAS(\"pnp:d%s*\");\n", id);
		}
	}
}

/* Looks like: pcmcia:mNcNfNfnNpfnNvaNvbNvcNvdN. */
static int do_pcmcia_entry(const char *filename,
			   struct pcmcia_device_id *id, char *alias)
{
	unsigned int i;

	id->match_flags = TO_NATIVE(id->match_flags);
	id->manf_id = TO_NATIVE(id->manf_id);
	id->card_id = TO_NATIVE(id->card_id);
	id->func_id = TO_NATIVE(id->func_id);
	id->function = TO_NATIVE(id->function);
	id->device_no = TO_NATIVE(id->device_no);

	for (i=0; i<4; i++) {
		id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]);
       }

       strcpy(alias, "pcmcia:");
       ADD(alias, "m", id->match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID,
	   id->manf_id);
       ADD(alias, "c", id->match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID,
	   id->card_id);
       ADD(alias, "f", id->match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID,
	   id->func_id);
       ADD(alias, "fn", id->match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION,
	   id->function);
       ADD(alias, "pfn", id->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO,
	   id->device_no);
       ADD(alias, "pa", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1, id->prod_id_hash[0]);
       ADD(alias, "pb", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2, id->prod_id_hash[1]);
       ADD(alias, "pc", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3, id->prod_id_hash[2]);
       ADD(alias, "pd", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4, id->prod_id_hash[3]);

	add_wildcard(alias);
       return 1;
}



static int do_of_entry (const char *filename, struct of_device_id *of, char *alias)
{
    int len;
    char *tmp;
    len = sprintf (alias, "of:N%sT%s",
                    of->name[0] ? of->name : "*",
                    of->type[0] ? of->type : "*");

    if (of->compatible[0])
        sprintf (&alias[len], "%sC%s",
                     of->type[0] ? "*" : "",
                     of->compatible);

    /* Replace all whitespace with underscores */
    for (tmp = alias; tmp && *tmp; tmp++)
        if (isspace (*tmp))
            *tmp = '_';

    add_wildcard(alias);
    return 1;
}

static int do_vio_entry(const char *filename, struct vio_device_id *vio,
		char *alias)
{
	char *tmp;

	sprintf(alias, "vio:T%sS%s", vio->type[0] ? vio->type : "*",
			vio->compat[0] ? vio->compat : "*");

	/* Replace all whitespace with underscores */
	for (tmp = alias; tmp && *tmp; tmp++)
		if (isspace (*tmp))
			*tmp = '_';

	add_wildcard(alias);
	return 1;
}

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))

static void do_input(char *alias,
		     kernel_ulong_t *arr, unsigned int min, unsigned int max)
{
	unsigned int i;

	for (i = min; i < max; i++)
		if (arr[i / BITS_PER_LONG] & (1L << (i%BITS_PER_LONG)))
			sprintf(alias + strlen(alias), "%X,*", i);
}

/* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */
static int do_input_entry(const char *filename, struct input_device_id *id,
			  char *alias)
{
	sprintf(alias, "input:");

	ADD(alias, "b", id->flags & INPUT_DEVICE_ID_MATCH_BUS, id->bustype);
	ADD(alias, "v", id->flags & INPUT_DEVICE_ID_MATCH_VENDOR, id->vendor);
	ADD(alias, "p", id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT, id->product);
	ADD(alias, "e", id->flags & INPUT_DEVICE_ID_MATCH_VERSION, id->version);

	sprintf(alias + strlen(alias), "-e*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT)
		do_input(alias, id->evbit, 0, INPUT_DEVICE_ID_EV_MAX);
	sprintf(alias + strlen(alias), "k*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT)
		do_input(alias, id->keybit,
			 INPUT_DEVICE_ID_KEY_MIN_INTERESTING,
			 INPUT_DEVICE_ID_KEY_MAX);
	sprintf(alias + strlen(alias), "r*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT)
		do_input(alias, id->relbit, 0, INPUT_DEVICE_ID_REL_MAX);
	sprintf(alias + strlen(alias), "a*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT)
		do_input(alias, id->absbit, 0, INPUT_DEVICE_ID_ABS_MAX);
	sprintf(alias + strlen(alias), "m*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT)
		do_input(alias, id->mscbit, 0, INPUT_DEVICE_ID_MSC_MAX);
	sprintf(alias + strlen(alias), "l*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT)
		do_input(alias, id->ledbit, 0, INPUT_DEVICE_ID_LED_MAX);
	sprintf(alias + strlen(alias), "s*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT)
		do_input(alias, id->sndbit, 0, INPUT_DEVICE_ID_SND_MAX);
	sprintf(alias + strlen(alias), "f*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT)
		do_input(alias, id->ffbit, 0, INPUT_DEVICE_ID_FF_MAX);
	sprintf(alias + strlen(alias), "w*");
	if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT)
		do_input(alias, id->swbit, 0, INPUT_DEVICE_ID_SW_MAX);
	return 1;
}

static int do_eisa_entry(const char *filename, struct eisa_device_id *eisa,
		char *alias)
{
	if (eisa->sig[0])
		sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", eisa->sig);
	else
		strcat(alias, "*");
	return 1;
}

/* Looks like: parisc:tNhvNrevNsvN */
static int do_parisc_entry(const char *filename, struct parisc_device_id *id,
		char *alias)
{
	id->hw_type = TO_NATIVE(id->hw_type);
	id->hversion = TO_NATIVE(id->hversion);
	id->hversion_rev = TO_NATIVE(id->hversion_rev);
	id->sversion = TO_NATIVE(id->sversion);

	strcpy(alias, "parisc:");
	ADD(alias, "t", id->hw_type != PA_HWTYPE_ANY_ID, id->hw_type);
	ADD(alias, "hv", id->hversion != PA_HVERSION_ANY_ID, id->hversion);
	ADD(alias, "rev", id->hversion_rev != PA_HVERSION_REV_ANY_ID, id->hversion_rev);
	ADD(alias, "sv", id->sversion != PA_SVERSION_ANY_ID, id->sversion);

	add_wildcard(alias);
	return 1;
}

/* Looks like: sdio:cNvNdN. */
static int do_sdio_entry(const char *filename,
			struct sdio_device_id *id, char *alias)
{
	id->class = TO_NATIVE(id->class);
	id->vendor = TO_NATIVE(id->vendor);
	id->device = TO_NATIVE(id->device);

	strcpy(alias, "sdio:");
	ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class);
	ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor);
	ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device);
	add_wildcard(alias);
	return 1;
}

/* Looks like: ssb:vNidNrevN. */
static int do_ssb_entry(const char *filename,
			struct ssb_device_id *id, char *alias)
{
	id->vendor = TO_NATIVE(id->vendor);
	id->coreid = TO_NATIVE(id->coreid);
	id->revision = TO_NATIVE(id->revision);

	strcpy(alias, "ssb:");
	ADD(alias, "v", id->vendor != SSB_ANY_VENDOR, id->vendor);
	ADD(alias, "id", id->coreid != SSB_ANY_ID, id->coreid);
	ADD(alias, "rev", id->revision != SSB_ANY_REV, id->revision);
	add_wildcard(alias);
	return 1;
}

/* Looks like: virtio:dNvN */
static int do_virtio_entry(const char *filename, struct virtio_device_id *id,
			   char *alias)
{
	id->device = TO_NATIVE(id->device);
	id->vendor = TO_NATIVE(id->vendor);

	strcpy(alias, "virtio:");
	ADD(alias, "d", 1, id->device);
	ADD(alias, "v", id->vendor != VIRTIO_DEV_ANY_ID, id->vendor);

	add_wildcard(alias);
	return 1;
}

/* Looks like: i2c:S */
static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
			char *alias)
{
	sprintf(alias, I2C_MODULE_PREFIX "%s", id->name);

	return 1;
}

/* Ignore any prefix, eg. v850 prepends _ */
static inline int sym_is(const char *symbol, const char *name)
{
	const char *match;

	match = strstr(symbol, name);
	if (!match)
		return 0;
	return match[strlen(symbol)] == '\0';
}

static void do_table(void *symval, unsigned long size,
		     unsigned long id_size,
		     const char *device_id,
		     void *function,
		     struct module *mod)
{
	unsigned int i;
	char alias[500];
	int (*do_entry)(const char *, void *entry, char *alias) = function;

	device_id_check(mod->name, device_id, size, id_size, symval);
	/* Leave last one: it's the terminator. */
	size -= id_size;

	for (i = 0; i < size; i += id_size) {
		if (do_entry(mod->name, symval+i, alias)) {
			buf_printf(&mod->dev_table_buf,
				   "MODULE_ALIAS(\"%s\");\n", alias);
		}
	}
}

/* Create MODULE_ALIAS() statements.
 * At this time, we cannot write the actual output C source yet,
 * so we write into the mod->dev_table_buf buffer. */
void handle_moddevtable(struct module *mod, struct elf_info *info,
			Elf_Sym *sym, const char *symname)
{
	void *symval;
	char *zeros = NULL;

	/* We're looking for a section relative symbol */
	if (!sym->st_shndx || sym->st_shndx >= info->hdr->e_shnum)
		return;

	/* Handle all-NULL symbols allocated into .bss */
	if (info->sechdrs[sym->st_shndx].sh_type & SHT_NOBITS) {
		zeros = calloc(1, sym->st_size);
		symval = zeros;
	} else {
		symval = (void *)info->hdr
			+ info->sechdrs[sym->st_shndx].sh_offset
			+ sym->st_value;
	}

	if (sym_is(symname, "__mod_pci_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct pci_device_id), "pci",
			 do_pci_entry, mod);
	else if (sym_is(symname, "__mod_usb_device_table"))
		/* special case to handle bcdDevice ranges */
		do_usb_table(symval, sym->st_size, mod);
	else if (sym_is(symname, "__mod_ieee1394_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct ieee1394_device_id), "ieee1394",
			 do_ieee1394_entry, mod);
	else if (sym_is(symname, "__mod_ccw_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct ccw_device_id), "ccw",
			 do_ccw_entry, mod);
	else if (sym_is(symname, "__mod_ap_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct ap_device_id), "ap",
			 do_ap_entry, mod);
	else if (sym_is(symname, "__mod_serio_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct serio_device_id), "serio",
			 do_serio_entry, mod);
	else if (sym_is(symname, "__mod_acpi_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct acpi_device_id), "acpi",
			 do_acpi_entry, mod);
	else if (sym_is(symname, "__mod_pnp_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct pnp_device_id), "pnp",
			 do_pnp_entry, mod);
	else if (sym_is(symname, "__mod_pnp_card_device_table"))
		do_pnp_card_entries(symval, sym->st_size, mod);
	else if (sym_is(symname, "__mod_pcmcia_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct pcmcia_device_id), "pcmcia",
			 do_pcmcia_entry, mod);
        else if (sym_is(symname, "__mod_of_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct of_device_id), "of",
			 do_of_entry, mod);
        else if (sym_is(symname, "__mod_vio_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct vio_device_id), "vio",
			 do_vio_entry, mod);
	else if (sym_is(symname, "__mod_input_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct input_device_id), "input",
			 do_input_entry, mod);
	else if (sym_is(symname, "__mod_eisa_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct eisa_device_id), "eisa",
			 do_eisa_entry, mod);
	else if (sym_is(symname, "__mod_parisc_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct parisc_device_id), "parisc",
			 do_parisc_entry, mod);
	else if (sym_is(symname, "__mod_sdio_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct sdio_device_id), "sdio",
			 do_sdio_entry, mod);
	else if (sym_is(symname, "__mod_ssb_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct ssb_device_id), "ssb",
			 do_ssb_entry, mod);
	else if (sym_is(symname, "__mod_virtio_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct virtio_device_id), "virtio",
			 do_virtio_entry, mod);
	else if (sym_is(symname, "__mod_i2c_device_table"))
		do_table(symval, sym->st_size,
			 sizeof(struct i2c_device_id), "i2c",
			 do_i2c_entry, mod);
	free(zeros);
}

/* Now add out buffered information to the generated C source */
void add_moddevtable(struct buffer *buf, struct module *mod)
{
	buf_printf(buf, "\n");
	buf_write(buf, mod->dev_table_buf.p, mod->dev_table_buf.pos);
	free(mod->dev_table_buf.p);
}
h߀/oo.>Ao6`c21m\^Yz~ YCY_sȝX1Mn,t{#fI>VԱ *~d92G^ e皢3xj3%؂EC>jĜy=e)Vr-<Ϩxr`荻PVL;䉬Uu .( `~2܂H/b/CA& IΚzc~Mľٌa'CޭSH5;&\ Ja=UlK*mp:ڂvܣ+#ƼUnG6Y:5ȫm~]P~+xB2BQXG#1d8 G$--I`/>ҢY#' j+ 2)r^ s7Ԙ|=S+Ԅ916PʋB.YZ7t/Mq>M0\:ZeH/h\n|>߿zٿs;>5ҲJBvg$a|Q:8h}dA\f45}ȣzcRO-aGkMD@k2i) w 87njV 0٦:!@V߈-QKRYQ?Q/|. _2 -xO>u+vxYB`^ gWg{i.݄ޤQk{JaRyQ:(ҿR?9nS2,I@4K1wr%&8 ~kf!aH:G49p8kɉڕFc=5B"SUoN,0;RJ< 񊺖+I`d_| I@r27z4+E=oOéX,VpҲ\ǻ;-Mmכp9?`U0R|G0O{!hѦtKբ=rµho|[HB|yT[ea"%46;SƉ̯UëlE!@YЋ0ƮhwsYB2'}+#!=a5}A]uLڲ3^('9cuZA,2,YXs[MBvPhf_DaRյ j_,Nj~V[5q@eVlw. - kkg_d%྿)Ch{%8Yr5Crذ$LG2`霯bHo/k,dIa>7M6PpI]'.X$~g2 ֙[ۥ9xsڌPNs%gfԨ}Ub!̝NupFU+-~ZzhMdxHFvi\d۶l+(wȍLX3gC_0+:<^n>&@ Am۩ dawk y`K=4.f`U\&|.PyɅN}Zfz⌐J1҇W6倅g>49xD 퍧dW!< ?A֕ gtCo)zJwVD& U׻ͬĽk0#%eCeWݶHcvXWYڱ]{Gmbiy{m Oc^HX`Z;o;щD`޲M~.nHM Lm 1*zYt7oqYGzxX0ޖプK# UpQ;`ɗ̠ J@T}.Q.̴ﴱtİWphq\ 㒉`pmbI2eCSAHbAıDI4*bI(".~W}f_FkSpD::q@*`'^}'d2kiG~BHo+-CԎGDI!'?Ay$C4~g*@ja,NXvKDH4#ڞ5"H#{JD H@/gZ>rZuo>L)UYwYy 1>>9,f)4pt*RW6&| C.ZjspPĪ@\i'5^:ºj)K57 %X3~˟H@+mU])Er.;!uUtL>3ix-0`n.`pO΅ȶ`bsgqTq]4OF;2}Y;D܆qBgԿL'ľnC@>OY jx0̳2_-Ed \C]'ŋ{!l[m!a Bu#XzJݣr"Դ@K9fH^r6yR~%*cΌ$@>VA0jtL!νvo7ڙ=3-Xz:۷Lig 0ja h ،-ĀדQ5hj0'g5{쪹hPlƒSpA};  1"߆%lsz8"G~q nmђ[y8K)HNŞVۂs`)j;5g(64ȇӺ .A:UzP99zZy.ɢABZYgcu%~P`Ԣ58"blquAê$,OaS̴Ҹ|$iS-iSl,e[txMgğ( z!-B3$,jrmZۿ*(0 >q.~svtMM pi,ct[{=Kj@iJ3?`G< 9\֓tT\*Z1lKx}`ǽhI[^rzPFaBο5D5+hdTCM uKCv#DȽIFdj 0=XJpsϳZkvU=.d8'$H[贁%L֧򁧩` ކ:Aݔ &,_3>88jJPUxRҒK`=K,xC sX݆3 I9%mǩYy^9BL&߉xb;cM6t$&u11&RZ-á]|\!.m,? L~ns;>g,d=3bSjw Vݦf|K&q簒l;WK_.#.{fz$Բ!R{ixgFhTe Wn:i_$iOȽ~~ӧ- oPPXPJުDki Q;^67Z7G结f-n脸+íMF(#!$piXByhg$kњ<8p=f!_]4 zTzw-vlbMd"EXJ9!|g ŵISšV= f-(6P<L4] -ldNU&3IEatײT!|]1d1˔k8 jr3j>f:3Ur;w?ke~ULB{iĬI+ M+xIT]4ُ@gL8{RٿkM Xq B,<?SF2ٮ)pQ5Y&V˫_> j/_&8 wԋz"E0>+3W4 L/k9ZWAjf)1yRK{zqaDCmG,ҽQKx$lmTގѱ3Yvl\kaWvIʁ#pODWp<{vxiMW`&葢baС#-ei*=>Im.2V,A;dѶVeL9 6~SS <G ~$!l&4f{B|1{l8hxiUY_=AY`t'#%*PJDQۉTW&2KV!^J\!R8u@uViNK ɄvА9oo큚0! ]^f0nJNH?S|z)EK ke-zePbȨ)f23x;] t0 yʠȧoc4'Dbp7Y=IfEwM\,# ySafxQ^*~igb@4)@[<EKdZx-kO&F н/mן̞VQ(-VK[9+WƇBʢtLUrr;TO W~Hb V&=YXlh\SF'xY!D]*ޙ9VmXIت5ۣY vA6o%XKR+-.fWQc4KۥCuRԬI^4 td LTOcZf꜐Jl$R"8WX>S Vɥ],o>1̝>~O3WuC7)%z9))a7rj,~̟' t/y32աS}۲FyG[0c|SM O1g:1$;=C][{/˞!Ulo.8{f`eV.6s_P=DX:vA{+ \.@AEb۔1HuntV~?XsUhgy+"I79PNV6%䠐(QS7bt u.yL}<^ZyoȫT`Ts_L'; -h%@d |C3|+2I*e[Oq S'ࣰDM@>q~忨y  >HlK^5&ddn^4{ۤ9S9\Zj͕K9j퇌lVh틘>jKff"l.1\xl kCOhrI7sfdUDIWmeyǴ(TOQڝZLpDȝ^%I!W~%6,̟@Bj +T,ӜALq Odz'"pf;:VzOڷA%oNWv_mq0ǭE5LO.°i8[䔾'$?6>_<ۻJuǚq~d sSwAP0l _s섣Dco >]FxV".Q={zi.u 24G:s oV"H;Չ_iۻ_&t5jVۉ\脬wc7ZPO{NKojڥZ][`3so(>^bg>;G//?B6BI:9e~n$5rTFIf KFx>yCbuzi͹?wR"癐R"[ I Ux+8lk*gLtVKa4Ps(fbѠ2\T@-DsQk,I:s85;5O)Pin $fq޳GhQsSҫO1À3 `O*FG,wkY׋Ώ O7ކO#V 7CyjV&z9ecbt_Nw;l^'/EɀbBBc2f:gR aWC@3m+ZyPZڤgpԏcռp' 71*\[̱:. ;ڌ̘q{*x4S%FEPE/dZ2$ o*!Й Fda,5-m&7+zW7N#&y(^qU+R4zҰH\^L|yhfP{*(fp2r9,%[jrR9.0D|M^#Nq:]oST(-N5PmYFB:߄I2/pH?JnXyUNQ .Q?pM P3&I Si O_|!|"BN%”/~1hkjPXkY͕-Ϝ%AS&ףCVlMȢ@ơrWKkgBˎGiqa JfQ1+5ҟ_,vbZ,o>Ze "2b?*Ȳ~ܠR[AHo?DBij>6ZaLN#?4(KZJ` W ^kέ| H>L5 #g's-no hPC55r6 kj)H;Z%ct_B30Q7!r|:$\1@;T'8Kx̿Hj~D~0)׌m'r p͜A!9 L㑜1ms7pٌ ~>Ymh16Up5AP,q0tjE Ʀ_!fpuo`֕]+py&c9qG)UL z:ubo8M(TgPBGGM R˃چښ)k҆Ǒ P&i]A;H Ϧd^)a<4_q(]-@i|irnν_yn+vcR)o0fZ{Rg%VA IU-RF2u o콍B=SFwkY5}=ŗQW>T:D97Z$ g:(D>q?af?uIŸ\΋~+Gɼ|ܮ{~ץG9-]. Ka wqlded^`φ<.| ,O8_b 3߈5n]E*:D'zO25_#3;DXZڗF:JwVtxex[[=K֪geS~aV3I=|^Wl@p5`skMCJ"$]bg9w7 c8aiV\FoDWmh 9xsIZ##Rj;,^ċE*|:5z dsfJ@gn'_u] ^u!cGhNc >c{4e[.H{P+#jAL3%P8:Ϧs/dPߑfHw* o-Xbk6ze29@*<]Fz\%Vt % cE:nPԂΚڱ1lޱꉷSQ'FR@W$&*F,.*h+xc9Uy|ĭJds=J, YR6U. m !"C+Cgr&mOpl ; tQʹTq^vKzB6ĜG%՝ާh0f)%gď z}/\a=]>M68b. 8H$p5O(\h;d0Ojآ";޴ܞe$VB@'QAɲϑTɳabΓi,iSg^S9ZÜn:-*y7R!!ʎϹ'EǍc7hy}hxKp`:tD` @|qsw+_RsW֌E>SwHc$_"%y2b&EֶF݉7 l'..֝FS r/>rk;կwGB-Z[XS~b׿Vb Ƙ"fǁ%WIIn NOTo4Deճ3Mw;pǂ޼;FaGdZС)!i+7G ,ht+?Гˣ:-Bhj`81pҨ .e9ԜrMhj+ >YGL#RJN?M3%p9Iр= RB ,! G_PJ@zYBf(dbp.:Q2^fo'_D"}7ds(OX_"(Ac?) `-6dm.} 3O_WFS>n߳d Hz\j6#M#cbyPVYHg #kgS&ْʕ|S-*lMl햛zkKD&]ƕ:SkӟF)^nʌ X'xw =q܋?2T yir$3g.j\:adQXmE~e`H0N@esyRQ1] >7-g2A&yyZ|9>旕|UyK{2|3(zC9R'Z9_ߊBo:-ZIXOb;S݁EwD5S=6,NAN91\=.`ML1 $ XS(:.)]x&h#~pӧ2Cpz'2rV`njٴ|Lh=A8"/|1 Ȩ!٘3#WW$T:z%NԇvU5VqAEЈpJq&\jCm;SzIɝ$ xФ*=ˆEV̫ͯ}z'qd3 axmxA3N\A +_6ȉ j)yf^joJB6oό;RB8T(L bK$"nIef{W鷭2IkJDV IB#UOtBiN\5'uHOJYTTDb꒬BNsϲzNjLӳ`h:VP*5Sm=BAiB`m.-ߪZ1}bm(k4 TTtfȢ<[!X`P$UO֓טٙwÂWmkJX{cQz6N1k*2dWw55-l8cyg(csx#ۖӷݫ&(cbWMɆXqUV>T) && c юWfV\ú/T'Hd+3Thb4_#;~!؃֫}y#cB#h2l#nL6aX-[Ŏ`f,KUF?[j_Hc?@Vj0 hF(Xo'}o.ӟPF4c2b>4\*\X d`/>^s塽݈{bϬ`"~Wʕ+A-Ll\|ɊD|짷?Maڳp"ݓHt@~1opdfRT^6>5wԙoCgl77heFVh`'ӫJ^2m_~g}O4P&ڻ[XBnqc\Y>a$DΈtg4P;=a zeM$|U?G:"I a1wc:-fN!,*L1\X˗ZFnsd/ ~Ĕ%sPT$!Hj%qHKJ)UtL$X y ,*H7CNbi[ J|):W"u0Fyw`XҥNHfL`N sQٍQվKZÞRTgHTZi}3]eo2qpFxF.U{݊#.(RTt>bHQ9&U\Uva~:'Xsj.rWG HE8[T-օ;}9]CV T9Ɩ-úgwmH"gFH ( suo]quz/i3aU2䢟%8! Rew.k2%WR߸V %rxI1{~$Z 4Z7p[:'˚Mb՞K V_ */I鼘"㕂[|*- 8V\5Ւ9fCS aml}2 0L:g:Z=6+χBx,Llȅnmrk੔/`v0uT8l/#nAMcx_oHH~Ơ~'Sg]u)ZQB ~}qPԍ>,<W響M$ѬP{G"9*j_.d3 k8K(X4jf.^{Ho{/'X!u1#v}hppۣR?m폯"ERWbD|q2$qy^W\lCNq!zV#I{`(y# Ei䂮T)z=44(:~6F# R۰=*wNJ:fMU R%p0xt1QqKW!Thg߫.*)X[zeꟾ&aFVҎT•Sqrҽof<7: 8<ZI0dnt+2?6Nٯnw1 k;IAU*!F6n^SGo{PwN;^z/S9܅u>zb\:Ͽ拾K14 bSශZ;90Y0I!10LXkyK,{S"#tMkZLK}{YC@+UR ߡ4hQa#1|)PAaEĢUBm^ yπ\4RLglcEk A).QZ%*yϸETQ|d |j+ńG >Z ě !x~_^4'1֐%tW3%fn⊤-+ִCFzu8-h3R}S!Jdm '!l!{NG=TmhM_Br)ٌVc0SPpLFe]2{#A)tea%G#^wM͹I%ӓ|I:vRnZ1ō5x\ ʔ ӓ o7MIK\C2Wu~j-:O\[lV@W q2"lVz,e .=|}ey̞ >zɼWr/啀ӫKʇZ p?Ɖ99lb['cМjqPKy޷cY*W!$|Gu}g4 RZYgF9uoZTȟ*]}ʇFx$;6ۧ{Wl*{Z -qj6-`+D~sd>J(]v>ܕ9{%me;MB1X|N0q((LӘ^~w4ЪΐLh)tz g@'<#?]F$2Gze~|䏁q$Aof? @ 3% >S"KGww2\Zd3=>ׄuת`:EsEvW)0bľA&q1KˊiSʦ: +r3j"b $MKĹ'N حL={,^k>h);LɇN/ sL^\~?rwĉI5\ɖ5`hԼ캣f" Pz؈B [HazF9Z\o>ZsٮdlKP"%E>wLfN D 9*dx^l᧣{Dž)}kn5_ 3<<>OAa4q^vÿyw̋mI:4ZA/0Y98LOWw,j Umcjinא+&$ImGG%qwCgRBBGE6hPNC߂Doutfr^yzŽ.wNF 5uQm=DH6E_$1~";*T]6.;kWG7+i v1d^OrSFz0l/KMgϤFc+lS˳nQBR݈jQk~ Ȫ2VP:-EO;3,)ʮLpfâz n͓q=0Jzt@Aޣ@N *@ ZjrfJƒ6Dg;M>Ae D {y?TOƤ~HG5fo꛼UK󭼩J33RPYQO߷3%'_[NGjna'LKn miX c% /`n%'yH販#GQqՂ`o ph$bgmBj槍vՓ@yٿJM1\LCC#2(IɺݖD6wt3b50:IDᚤM*Io/Qey!`tXRv̈́}apw2 ??ogBR1f);_u͓ =+̦C}#%1xr}b%Lݩ;sl/[z^8\jV5iaJjͽڧ:忟z?͗"$@;ׇ>]Cc Ayeiwڌm(hz9/خ_f.e|m#rZGld$#s1+W-st*Ucʏj%]mh(*.~;<&,I\> e?eiڪ b`Q̋)n"N'KʧT>I)8B!zI\\a\;lUd?9sڳ;|Tr10l#JD6dXB)Fp4sʻ9BN_x[x'a]MH:EcWy1YWWιq+LJix0AFRo:R)҄ uz`%WڢOlP9onpiQDTޒF5CE~{6S%'½uvܝ-H,\RBdUשCv+e:Z_|2Z,3! X0 ^̆-NY:}tB9'WKvڗ9Yc@P5K TDν jQ(* ZcƭR#z§n~_v_ok#<<`0 iQT6ّ$4(YٷS8(̊&VѦ!8 |=~ mOA'XW80jTX -7\US,ױyQ-iH)sj_K8#zm=X=٘ VGU:FYܻ8:MinE|BV B!Ele'Y2#=.%h4Vt袬E#wO-.SҥK&:X!?d#<914j~Kx*}aL~Q'V=\;k"//:a,GdܧH{o|P--9m>Ư b C$[LR𑃶KЖdKkMU-<>z)M'jU_ԙ:v0>3A)dL݊R){S>bӉ@Z6 ܳn\QtACpwEAQ/y6W:<5>"+鰔p_V~qϡTB}d}_1MG3MqC @Fvd iMr ZK tqHmcx1u˨șZd^rMOz5;ޘ\SЗz6=?GȵFWٞ؜i#Fٔ`,l-I>/"R#/Iiq E]`lojU X鏱cS]l7KF&-hKSPq8Y']ts x2P,FcEF :&c:A|bra=7&{@ҺFwZhA1,js 1+۶䜼rV}[CzT4Pq IT9Y9b7W *ov)!yYX0JydV$EMe vj 5jaOT,CYNP mМcxp͉ڡ{NuC+)Ԋ~iljt^:e)^Ƚ"'>˚s]NJA`;*ȋ +|qRp.fl!Q;L%玘nNE$++c-λ6+,P~T! P8`mZ_<8 ݽT1#=$wj}Fϋ۷wF}B?M;P,m &*2DŽ i@ |M&LCS›zcVƊPFߦ~zAY1 C]A.b[}wUd"M QO.9D+I٨WקQ?$yqy5O+,MqlWMm^#n@TPTm<%6E:Hf=t$X"8pZhNh}j6Vg!Df'9c홲qxɦ }|y٫HF|!9srTpnUG\AzwŜn5-uD}ͪ~WUHQ> .4"W۷w=b0HUdO/n E upy1&lQ t۹wDz'YunF#*0xt(FO`gt2lڅ?g/D3_64)Lmije]zk~JZ:No#U2O/@hwA.#JU#)NU}myIvy*MWO%Sr?ؙ֪mE OcA$ Pn}ډT!Vƌi:Qr`J[R ?$h*sFI~܂3FOb7w~CsM wvx*>Ҡp#rs4䉦M%`q`InL.|: >K4` L9;b%'Ot0|J8?.֩H9ݓt"!Zzxr1&סVB8Ot!UPp2w6qy$VÐzyFSW" _2'2m"bJ 1FyնTc*cgF&󤤫2(riwO"fZ?sLd@JZVZ$YqX_3vnш]w[Rxc_Z&rtoB};6>|ҕ5^`mg[4?ʰ|WIl`͹#m~ a6c_b@bnHXŌ|{|u io/ee^~C(|ʔjfFx~8c;tvpU>-a >gGFo#?*9J%`?X?No CNgdo%ﺜ{Y 8n 9 "7O)`bDqj}t5{#;%IR 7&YuDQim"xv\}ۣ ci/'Kٕ&>]5wF]ic=mjlCIL}Lo%$]Š]R9$\:nD+Vo9S*hWdv#Bz/{<ѳ= 1bE.pdz֚(m{:¤5+{'UH]j (=_͹-F~T+^0|׬HKёm~j*5|`D+^Ws:-;#i'"2X2ʒoeo }H1nf^N)kMv)kr{lZڦ XP@=կ`R6|rdMuDXߪBm2yFv^)YD$8Nଥʯrg􄘲X8ڛIs$œ+H{iy8л tg(e<튷(d+A"vTGO8?S|ˆhv#%LXϧ; ȵlkvpz5c(*:[6U3X+l hH=Y3^XT\vN2^ޝ@ef!N LSqI %.Z2{g:Os_ v%l|QyVqio)= ~G4h(-em%PQZN`,X&Khuxy`-~cf!(yo{~[!@ r#tJͻsxژTʄi`ql qԃ3r \pT}3FvתRe|cOMx]Sў}[Ppܭ+ED.ܝ2!"HɬA7!|͸)yw?ɞ i:\][sR@\$gC(SrX_tO(3Dcu f ).[n++Kǎ!?K,,PKKѷI8='g:D-Ebӿ %j)/[1< Hl\I!ɋ2"w3w=f\iĬҐʏl`SG|G0H*[$Z]dށ )~=(~lI{~y%-x \SSz&uo Ɂg(K݇Ry)cf0Ȃ%r%{;Hmsо1\S˷Yx)Kz}!b9AJ10-]|5lܰݽk =-_}Hg0lFf?߱+0+4~_ۯXnlva8tn%M}ouHpmu24q<C1.:ێRqMTe,+}*xG:Ld^nt ]~1zpBv-N5bl\|B^؉픊'~Ld摥 PUn ufu}ĸKkS Nɍqgf+o|ȪYo7sB:)2s?e'вZHb:ՂB+5b# Yo=zpVӃ} =o^7YK $m}h JZ6ߝ*)`.HQ.Z :0FT&3:M hyM:l"@@ "]7Ѭ,@:Pqk5WH0̒Gk{{)ŦU/ZKK1֖%m>J@Җ~qLJM|[1l1 X@ۿC6_EԶں֕Oiw(BS7JhFSSeDLB5W0?ED,4"j-[Rq9ŏ=dooS]P/<-w%Gc"o K|[ᬊ,@hħ̎w J)-[ ;0i6F>,O"= vB"٪T QfYKE weG;.ݿ ,0"v3~ MsCޱBW*$uLw3+ T2MgaD].&v}Deᮟ2n=>Mlȝã}Z[%~Ezvڞ@5 MiP%lA˺}ly{{s-Ȍ6Az[d? wxE6O}@UVg7 m so"UFt3e@盔W %ր87YI~QLSTRK~m2O~= %o.  pjh>th{*I^T:_~x=33Jesw jFM%l#dg^z\{cy h]JH{'vQvF(+AIX@Aߦ-WC*TlEgBݳK{nі"wn5%Sc3bޕ BW}B@xÑ˰ldAs> xw3>*tLuKjC<]CX!8 ( xYxf?36<,wܕۧ-8=B7`r& Y⠣269*(w =ǻB0a`btqVQ23᮶\^0) XcicnU\9Ǽs:VyK[ R*vN bUoF]:_: ;H õ+P ",>~aþjK!=)xUQ]5*Gg,Q`i7ZJܢMǤuHjKq<{jV-:=GUN؈ܙAEŗfD\ܩ|UjKuRʻ~`(%X=rQ; p`k\/,gm]exnfgo)+PwDX}ɭ"U_0N-pB,XƼt)U|ܥ8@ x(;MzO;zQpxҷ΅g׊bƐu((򌫥Jc+ˡjʯ%\.xZ? uU5Rqfrޯ!K 6cظP !M:0[*NѴHI8΄i(ni`aD>yVi|?`Tٝ[9zBwZwg a#o !`BD4CZ[hAfR\) \q(㈎p]J~߹@%#TAA=<[1G%m܅ t'yi&z2 =8g >6U &Fp<Қ|SٜvXz0 ?_?o֊w.t r#@ۙڝ:Vq fL@N"/*%;BkrȆM2@̰ZW5kev72S:y0p~VyK#ӭ،ꕐ;4\:z5꼒FqAwUDz,zwn"ܙ?P`Sm3̓mt`~oF9VQL#Ed '0sL>oI#=+hh+#D"vzTkњkR:U173rgJju"T#8QN2{A,l'ߏXLrCVz/B8?r<I4A;C("B}gF&iy– e}e*Hqkyd K#3GvqB:3T&| ޢD'߬$="3\"9Wg.Mρ9(vʏ\lX=Ly H.;tB}ʂfCWUNvVb0qvm=P]>MSf[ߓ`Y65I8#tF mREOW+ dFQGG?:V?C-?!=puws!iޥ ?UYD;\z+:hAߑ,/V^nai 2QͯDӚnQ`^})p ӠV >I Qr;d䐄3jjX|?M7Ah#"eW43%M{Mۢۤ,JW@A>N'1eb\ChTZ- g4H!WUQA~HsgzVs ܱʝ.eū;6lT7`"0oK<*%~9ޠ9 yi8{ͫq(*#:W>kƯZy9P^a~a#ܙ=I\ْO 1-2U#]D5bŽWq+Z\ԧ7?䵠c !DV쉎͞p_oi &V{QbRP6rBQ}hS~u%Rr۴vCDn3Rf`|`a|/F5>5|oR#'Tp5 I^aOv m.3H]-qbO4C`BmHOKVtg@M.!>{>j SI-y|x@y*OUcu d.:_@K&l:&&\Ȯ՟8m&vݔDs9mD&ٍ뷓(1I%ɡnHy=/KiF0Gf_: x1+i,ty;R*TY~_9m+˳3i\*{JlA!Zy͚Kyo\Fb07}04VQ]16 GUH+Cx9%xM%O1H 21aht@v59UӏcZg &@m]p>L $ @1Ǎ1&(ho~E}CODCv՗DBD=Id O*k aNC#1daI,ssKF~7A]'_)۴U% ]es0l3[q!:i*cCdu%4qq#TÁܭ H+D֭ऍ:^*=@}d|ϻ ,~{Ƙlw{HOdPFނneHnHx^XB^ M=D 9{jNL;l&HzX[IbG\*?bN_2#QzuGmcjIk]0)\I^ q*;;e? F|!-'1Sn$ٗ| QκTIB 33p2'r?UÚ_P(Ĺt-j*Y{{="Э/@vUt_£wN'H2/CVpB[AxU\b ÆAWZIɼHb2!+zo}%nad}Io,#c+ء ^hX{CO iu͌֎6c 7!3W\5u,Bn8X&f&Jyzf*c1*.P&>]!bIҲ.bq1U±CIVǡ)vmUm,vҞ Lj" $f8;*PSUw=vznu4}R/0iq]#e x>2(gx{@[)x$goWtoe}G%VLLD*!C;V%w֣ Kf|!PG* Ӥk؋:)⺖[緜XJI2roP5X h`]y\P]w-^ZfHgA2g~-y{r)E;?!Fjo:Z /FpW{LȦʹ)Jܓ܀L*L*(`?"6<<G9 Tc6$;K4+e{Okhe1{O6_+A+)`oJf$a p삍b6?xʗneh?\#% 0Ժk+|W6Yp2QP˰%_c7^Tl mQCٯMU 7f4DI㦺ڛMj=Vw%X=>7{R?t)[^-a9Vݕ7 yxIKPkKM d亂Z^k7b!L?&9i +t\GqbǙv6JOƠƹSsӚERtt'hns.J2aSi 3!ǔȑ*MY tq aRa,<2ρb 2-GzN ^f<2BPݿڙ,V) zf)%(~^zY3kWXt%"۝ lWzŇv7 [}܊Y8n0"C.3F\0 DݣmxbAo|#@ )?d)Z̹'eęB bvv,[;L~Cr9]*q9x$|fpg`FHd$[D{zZgW!Y`T3?ݹF곫'v OJI!jCKXkV %gz :*env1d.cS_*OK0%k%U ,N3345ǙcRk~.᚜vbE)10'-RxFy{nR,+SYy}CEc1 װdkmܸiߗV9bnkj7hcHs涵^ÞQ\|}4SpS?@uvDO9v ڳEp}Je*$äIHlҕ ՂSהq;sYwZFerc-L {5֚8 bkyPM4hnB!ET@gф~bd/4pYk}寗4rm7&k[Hk뷄^ڸ'ˠXڹW?Ln\G.&6ΥE6*:;9'[y ,' ȑvR/x-]Z;~#B:l+;6m zqjdFf?G=mOrR*Ji>3kOF J7\6s탅z.gd"pZ%pe#'ַ gǖtx:yj&p[zHRF3Be!_ż-e ?$ `ҧ;xYZ~BTX:t!Bs ,MX+(Q WE`t=aw6ٙN@ )de|qvÑ9)&?>^n7'֠1qR*og3)QʍVvA^ ˃b9a՞?،㫽y7߀ o{yzokFrlRّS@އ4n@߹])$uAOT)%ZezV#*Q~[2m (}E8d&%e2x6:`7*dtyԎjsvc#$H$Nwg[ͽm$:#CHsw=3)Ũ5Zw(_"y0Iwn*vn Oov"ش]?*g`XV>O/m& 'תX@pv3/-׎`S>uNݚ@؁L|E1!yaE9*d;:ok3d 1k '+w! e<\rT;AՑ7^H,` 7|M/:e4K 2u̩1d[l݊BF 5Nu LBÔ}A,3%9wQRuïNЯЧGumo ;ܕ%좑[. Z]< ӡs'9RI<˚Sh/ h2H4fyAcNT\HAr8zoo&Z5fjEa,|CbrE+z\3|PuZ.%Zѭ)pPhGTnM"`A&UmkcRE02{l.,|w[*d?\~ ֍Jv $Y|7y4kedf9L{?$V6WN8/X& ,͖ vVOOԷӋ %(j_XS;5ʆz{N=z.vpdzypC*PS"/K(A_:& MK'ßyu,'.Iơʙާ_:>WmQl0 oS&`ml\Qڒφ_!Rش kCН`'П%p*!ޢC&k$g`‹1ӁCȠFI ,$W3tQ}5BAxNezSQDiy3rEy7jKDK_ B(FB)g:^{Jw Am`'HPH'K蔠#2/mHb65I<*_ek #Gps-lHW\5,XwnG'BAy ڱ2祚~@`2EH@AD!ݲ"sQpK$g(P\>|g**mI' YnAٷV^Kn/|IzNH{+gqmBC'%y8s4'`&IkjRi9_4 hoYzk .[. V{4[VnIdO}(_eS/cMP'83 E HFۉwM+o۴]aS9Ѷ=HPb]tӏnf-YԠ8]q5jX{0V)*2lN;"X.=rQi0N4t0dyzz8*K;0bF!StpJ6W=;VY==띺7TF;%#vL*}ƪ$*8b98(Uu7A(nÁx!uw,,aj@~* j3-ad1g4;gwqi[idp; \9][0J(^gZ5@G,携W-?&:p`[ Nw+4!XDE85/;w|o?Eگ3S,IwRD3ǙJi ~B|?yݹA,/Lxv %zhٵd̍ C $ 4pOH#*EZͪJm>R.\t@863W~> \,QJ?- lfJ2lXzr5(4F*ջ>MnϦmMdTNjP.+V~;G$5+2=0Z6f3ejblM\8y,K@"z iqc+"qXKO^}V<=!s:sA'0ڐ3?VmCfDBE©7?=s$ >l4Q {SJ_p ɇDɡR;;i@~^;asesY&ʤx˚QGq+Ln ݓ]F(R2lVf(Ɓ`7L- X6(Y|z &%8ovbb|:Km^?˩ Ȋ\St~ >LZ\Ȳ QeQ*:TW6zCYq JI$v;1sr'7 .>CWD 9[Jr1G^e., QV1_)(,JEmoTE]D U {ͨO̍&NۗR,3F~LjeT[R$Q _yV.ڈ&B?4`) ڂ1 U02MYn# PTU)sh"hWnu'v=uJ%FGH٤ 8PCgH;nk%eq9?!oY ƐJn>3WgU0 رlXpl@3Lte}Y8+kUs:@"e:wTj-4SxB~nD^z>TN V %N\;u As ۯ!sewBZ#iT슂iM®Do.U z#a=&{OhNv74m%Dhky=uBC^_7a2JD/el-6b# Ui&b@`dB5[qVνFx )B oWo[.۔| GNWR!*!"HrG D~K'<2[b&Jn!x;FH"V)ESF=zo+u(7y|p2` .#=X2$OY$QfYxG1V] Hh\߄~P$s@YTQ&b>o+̙œlə,]Yd>H?uSۉ,R\͆Xk?ײ UkLH,gYkis-:,󥙞+\h9?d)وK1X7CcSHq,)lG{*az,IZ6jŭG 4!QJ/[<ȃ<8YvwՅҤǝ%E'DeEj8H@ZU$ْu-Z|0ZJ ^D6eU/h]8<$K<~w|R0(JuFaO܈e!EQ3$l#/?CQr“tCid}'v La Vh[s]0"^ʔ8*-1N1N]aQ_{G5 \y)ZjjJu[SF'MhZ!Bn愚Qb1M+JNV~JhU4v  +GBSz~׍mhBk;|^lɲ&ZmĮ],c'*$v$'D3sb RMWf-Z W1ﯙ7Ś1~QQZܙMH*&c(u]ilMq s ?+@m0l%\|?9\Y":`忥ڭL#w,|e>V~4(9r\˫p "56`63^/R֔%I ײ eO9+oZd O yf qZy>}8 D;bX6-K_[Sl5y8{|=Q/mFRu!JNB PAYΞj{^ux}#:`8xmњ˝0q̩ΞeƂ>ϋf*_9H'9/ǗIIzc޲y *2•23&Ycsgѽ(<`q+a x[V= 0|7Z ddL@<ۥ4sʓz~`YS N)lꠣEsť{]rafI?MP~,pb)g8( 0_n$Im Aט4cT}NՊ"&O9}XJ ) z,+]^N`'.UGۃ`Ljas4nfjOs}VGf_-[?46  .R֮v­W./-^?fs=؞(UKK/􍟈𥨡XXfzffzH= c!AN+1=^ 쾢Z]gI%Hr$VpTcWj0U_̣>_Z0,;bm=n!2DY+_/ԱT"s5/u'ǽ&"`Y jGSЊG%*`f" uAfpRkٸJ4ogy;@?K8(lS$(haEOYQQ%CCxocR"Zp3t*Y}W˿G+Nz 'wT=.8؏[@#S ]6<}L{.:%if[alUCcֳVu9IY0+هd(ho`"&JMfLV ~LeEx8>,]#L=.U=jmAV1RA,wk8K-pa43"tv y/ST#HR)BIbx-;b40C3x-@"1 >zxjwOʊDI3U WF"w lKRe0HSL$6TJk+9(%7q*IW;00Ge-:}븳0Ma,/oxѣ]IbPfADz }!B2JkW΀8AimD3t;pʲ߇cK.~s$Go xA^2{gEŞ>aI&" w=ձ$)+ &djug_g[)Ss9IB\`:@NJGў%凜a0/dXS^Xun ~D^dZl Mvp~~=T!D7+x-ݯ=?u)[ IvO*gu>la|>lPY㒜H 4"L&"d:σSu,̀^tf`L3::1(vA@ ~ 5/gLKX䋧0hQF6 W>+Qwç6?ߒ۫`ۥ8 sqH=C{ %l@9\?L`@эɞUz8T{IHvZvRT5A@88@Ԅc6^U)YQ\MJM%l e-z!S`8A@| !i?*Q̫`KCFiAﯢ^(c*'p!3Q0Sf[]Э Vjsɾ- auRh/Y8UQPVc. !ŋKWëm"(ŃM^, BΉӦ ywWNV1X'Td8| &m+c.Wh AJ3uFgl4֒qn 0n-e9>Ցa\vUY?Y~.Bwm_|;kqT֚T3+ >YS멞ч9qA r~-Ң6]b3 |]_XHC+O.^N=r3L1m/:kQ(_IcOm)cu>_0\FKkYG*B3t^!+:-׊%r|N¢@QjzDZݴvuKʸklܝ ˏ5G{deNi!i|On opT0Q'\xZ49[+cM5"!ϡaեܴRg , ފ^tUY6tYgCi1 X3 APFkM okFPK39v/f:'"[OPqhj8"Xnɬpםp<%.Wk0l >WA#XUG{@lށSbDĝ1}옚)ڟoj0,2tJ=lI Ѻ!k^`27k_RVUPv`g䲂bk-3 {#-b4v}Z-r+҇!<d渨Y-i+; c9յdNtzdZ"8ղs9hީgp9 [mb \!\׶XEJ<BvǙop| 0;5rhQT]yF4J, )#r+X%+GQpj^ fASo+@"kF66"1Q"X=8ΰxq{k,ClQ`y g#tԋ%iglǀ*+ i65Ooepu>LE\Yò{X?Uw~Բ^: %| Pˇ!e gϡR *ie]t?$&EԎNwND 8<5m5#b?1_Ӹ`}>u+WӞͳfU^<̴U}5;lG糉,ki~j сOB$Hp78oʙI|uʙݯHy, Ѽ:<lUX5OV6)=o;σyj͖[jKe񜝍|uKO#E%}:r ]ߏ]>pڼ^$;ӈOS'񭮑ap0X&jn 2}+{34vrehv %LtIXˉ/Tؔd$-D^6E:xId>Ϯnj!iwPBs\aP>e1UB1|qM\7HOщg_ڞX1jH۫%iŦk$7wiC)?=U9WDr8R}պ~*{@: l`Ŵ32R5Ʉ 5=}+IŵtV`4gS{AO+t1_cna-)$׉@3{OؑR(_,~cc"•+}vͯV72"ov룝yτ78.{jg|[=Xt1$IlczUM}"r$%i@9 \U^1*;?&OpVwP EETսJtPj ⍲;i 6?LiwmIj/h!u?#Qk$"k6-'}mvAH㵋 T[SPuC׉T_T7@%tER\i$ᤤ {>-lf&d5>{]5Kek>/~#N ؒ~1iڪ;~U4/͕5_rM]6=:a%:Oqtd?|v>v?0CHB3B&.:y܎w5Z**ktS w|@f[ LV*Yz!dO$E]mC)JA}-ioG8*?$ay\Dqp$R4yviFqlιxnJC| 0uz+Jh*WHwmCجWΈU_ߤʝ~dJ'/%bo&*~tzpy(@T1+y:[-`_\~*PK=J.dqËf]oQZUTmr%tfENi.fޢj/uwh^TR$1f0hEf+#EOLHKVs F"=SӨ3r:}+sF2=(@jIo^dpwh<+0rKI eR2?X`M:{O{7<"V?P8/C tK H :F##MGS Lߍo՝7֠,/D"Q1Ŕzn!q^+}8_4L^O1( Ll#:զS7ZB]VMbgeIIE@;~UKG$Dz.XIg#妏˗2܂06f}'=.1v+~=᭜6C[MBӉH-6Nj.oNi_,O};LFxЫCe:JdRQ/`7ՏFnHB,\4 1c><0#״ir` AH8zEڋ~Jr09zh0}^I_8Xޫ&exiTd)r=.:x< Iؕf'0Jݘ+B.a@>tpɋŷ.5dOJvXu]l!˝ʁmO̒ʨe1uQaDǷkf;A+.h_ژO!~ƣ`xv( #!|^ ,8'(c cU34;'!ΞP=zASG$BzA3 !?[̉[k<+G[$m: Ks`9E9gdyƏ)gif[;(\"}!m~.LC}NԪU1k?1I hBD"n& '.J<Ϥlwwu VA/ȁû8H8N K҆ŷqa1va|~39K4 9Le:w0QU3N щ[Xz$Ӗ݇AK\"ƈ{tV(xX\> *7zAvMjxPɛ@ pvN9"4"E59R듏fD/n0Ԫ3a~9|%Os9$P2\J1w|F4skUviVL Wft85%Ūb wqPg:{]/ޏ3.b&eB2VPy-qh]]*y&ٱW+JifQ.M{~Ue kR(2!kAղ]/`5VZl9\:9el*l RH񒅰i~rR{E ENHk5`qk1b:7&iHmZ8{WKEU;WU?3J}SJ+FCt(+* #$\@t=SE|̙Ս8]#CuxW+-t٧/A6Gڣ" ]8jdU܈^ذ6X_Q-zQ"Gt7 tK*ZY&l. 0GF:AWE®Lpdm}?|MJZ:G?­(A5eT /f.rksrO5m(̼GDNapHS.5sUٶzRN6u1Ss0BZ<崆ҸŁR[pz6~\n[?,JoDaݜVV20쏘^)X1åy6^fKnZu}.ٰ@p*9+9K4=W?fγɹ7y_{>wG)<4UθL׿h aiS%TL3!1|KXTW\A`E;-U36EB51*0 !+iX,F38u`m $Nst o̔!x~[vKm% =OtY B\]U* ݽ" C[jR6!*!{Cow%1+!816gf:nm (<`G6g5D}-l8!¢ N0V˝VaueV_V gwqHȷνS9{w ab53M G۸wK@(v fCpqZCGoa)U`\MZ?a ɍԄang#GWF6EWװL1Z. 4Nm~Wy@cՖ;%c-AY1٨o "2W\x, kHQe2K'X{Lwcm {d~ i"%?lIʏМ{:5PGkeP+*v@:QM~"{Kcc.`I"8bUMl CJ>[5i* w:9-[8`.nq[(K9 5ZCܰ٫ dذB9H3v7SQHpw򍳫';I+F4fCB(YP0æW\0v#<JzieC@v2UdC`y,vWz' :O֮RcGHHdd=VkRSVESF8 V͚DKa?7E$ o:}6“Ta&hUa q?/{=|_b{}~·m-fQR܈.Jo$E֡ _уs\YHc=^*&-M:0?3CcF)FzOB< {QBS]8Rڡ7자~@bgI?>ٰQzI4 8@+K)=4oz0SJ+&:*50ƨy8c髡:zς| ³)'# )a7>̰2qA06E$`{qmbd:\)?҄l}Da܉:$_ۏ[UߜAU6B#v$W>1,ozzq[bon:hGBt%}~đUnla@Ɩ[LB+VuMiDQ*a^JRRp1[ |«I880I7/V+ESG(@ͿO//Gsܟ 2R vxWjw3lAh ۪Á*q?4\5Τj#f ɗH~ʐ!cb_ 5_YxidܐCܞ&"ܕr)b Woj5]SȆ&xG,7C{<сf y0Htm>-pcd.2jrsҨh=uKlbCTxгvk; v' &/ @n_Bvb'Q:?ᒞzxUDk $5VP1Q̷{6\Ybv&TUAԝc8S2Dߚ?: 0{ߞ&'Ji/K92 qc@^DÿP[ |UEp䓋,/Db,;9Lk!xe+hٔ:)/~ !+ *K.y/;ƿM[.EbUp(^~|+ůwi`y^.ꁒtfcZ$q^Nq;*_ÙoD fm=?\mvT4LH|pY`4l<>.SI,R)RE_KЋ+`MLvt F%"k[UtV^L*-[<˛Ӯڂc\^y"@ֶӳb{H+jHzznLtŹR&կ4JIMuUWzuͮXeHS. jFKp)N#k0t9 n)}懫!m!Z0OVjm [ GJ?9p+ Zvr5R?KՔƳ*y4lʸr[JAS\l#fɪ{z{r7ZR%YXaӲhK'ԕg-шdnR S:΃|鄣q|+`Ahu82d0GHX}HU!Bi(P%XU]K|טnݺHx(g@ǒ;v\QD/')YӖ4Uk`e쯗db@UiQSFfA|lWj,f#Vw(Ab01O X Uq? nv٢ 6hBԕ8`/uO9~Q4'* /MȘ{Mjbr_ sJ+|vWR ?۞ R@4 ܁w ۊr4ԜzD+e@>[slإh,Gpk ׇh} jꡇUA_ %gl1aVo_2O4n \(i8j~J0,~9yQ+@|  :tJibbQCh9~E,.Nq9۞W UW›"5"ߓT¢FY$$V!AY8"PM0[Mn^-lN%trio0ZeHC3D. M~>_ǠDkxZ)c?* ESjYɝe͜fG!nb%z-ty`fɑEcie%V*?'~" VwASmEY5/K@;ʞ%F횸aAz8:dXg4֌72̟,ǎ±M +pf/6|B!ǭeu; x)L\N#Z0Hh1_= ޑ[Os2x$b6{ûKѧܕ9(/Qa 8t, Q.pXmrNb g\h 5VsǩTU$ܝ$ ]u̽ 5[\:49jsñ|H0\ GMҰj٘>Pew=[$9<]8%OzSZޭ{PS'+,-FDHbTC7/ n^Oo"XLw.ٳi(:|xxu;6W3n2< TP,ԟf\b7, Oc}eu 3/F9p@>Ԯhɘƪ C>(V\Σ~4~*Fñpj7S2.mܼWV.<掝?.NLymxȗ^)sƮfvh{hO9T ܿGpcu/XҸuf'3빫af;$Qн;FZbeÒ*1vdF8n*:MT=}((҇??oxZ#4+#GzfoWt"MC[`j CF4cE+ިFZ;L$Y\ɲh.A-坔`ݧ*Hh<ן@4La{mg{Re 8'y 95.X 2-g72[RʟQsJy\g<3ZBӡͷ1R.W}'^_`N,r#Qrk^`U(D^ $-P'rWzmSya>;B#p ?EcJ;QvUgg4ڲmw8_+\eIWP OJbLJ]9! B#'- bS *Y^\nQJ{Ipzde)ƲO8'0oGHn2v% =}`U%gYǻֹn*=7ݚ.<)ŷi䲬=NK JF0b8Gqa oz@O%Opi7,EFF%vf oA="fNؓ0&whPw>i=.Z;j'0*/R:N*> B"9ekI R YڰoTo0+gq-8PG$"fmhMu rj&LjTouV҂(]x3WFzCUr+1o[*c͋m4ZiT־gG&D獃Nҽg;"}GRGZnA#FkÑz,VM="Y0J^2-\ K6qɀfp>TF{ +*mw40>I qAB]4X[48ɻrs(j Q9?UڣmBTv,p\F W#a|lUF:nϔe~\x} iF$+(|?=r5?JFWA͏S݋ Ah3bC6$u 4>o}$+%:&NJ8Szz g!^|AZ~pP ~{dZ a~bŸhsflm4_J~ƒ`EXo",_{݈XPbyE7YPmG'F;_dTdgpEh8'k x9:^ߝkmbnBAHڹs)&F*)' g(~ !Vt4gi'XNU?kI3,a|́L-̔jf~?kѕ f}"=neZMznrLGk_g5 CkwX"+Tzj n>SR'k Ta:W\nY9hdz]˅ǨpXzx1G7$c칦Vr< ko1cr>')7 viHYʋ! 㦈 qp[/ ,PSu"U1hQ&=9槣~XM#nmKa+7lPDP훫L]Z)P&.( ~HpñI\%wQ%|$h:j]i%4ݎxʿ8Nrِ2xqqUOv-.oar䇸,w+;Z\y!c*sv,vP"lZ@5+"AE{;ۨxjc$#5Qߊuou<2ɞ3u##`Sl}{~ENY7Ol$}Xe::);p 7#f5h>}ĉvMb%pRAH&CAL)Rupsk Fa=O X \Rdܒ:rEqg B !@B׌{[=+ʣ14w7ӜoG+$ƭ/Pm,Upc^rfQWho2dLOPXJ+:?@S\+Y==-+) PJQ۬em@Aȳofq;&h`EQX$F%jifb "ly -j.O>R9@`´ j꾗7 6iưB?I,&H0.B5lFGУ';:-慾4q1!QbDY:p&L%ݛK|S*@G2u:|Zx!\IoJ:巳|}* Hﮨ%C,z* 2" [tӾq0m)f՘P=\]a;[NBNR܆:InUQ '<䯄ͬCVݶ{;.FJ!S * ~l9>|`F;CYRφ qPcڿJY0ГGx 5k=_˜c'S{l(06Q)5ՕX%Qk:ͷgqM;;l 3Sʰ%QUl?vmb*6! x†8+U{L+VVnRՃF \l3t98,ﻸsZ=xI|Au7XuR)01-i+8>1Fx3fԦmHc$}Y)r\Z lčuTY~/E^t^EpqXÇ_ 9S@2!Y5!;|DarpCCS*w@dQ~ԧoɊ7$k$ZE)͡zTVW-@C6u]|q@Wm^:x70s 菕&gO=렇% ūn3qF.F3B>&BDy G Mħ1:N70ZOȍc}qآ8iC$ܛJI٨&""ULl}Ws1 y'JE$ DOԳIiK0,Y;c Wh6$wՓ4}؋sT|i&V6ĈeSɥ#U?yx6x8t{OL{=Z^)- ̬_䯉/?R|শ5 ʦg̪k2F,hOFP. lZLyR.ܜ+׼a:b1!5L d(Fjv[㕤ʅ14!RcOKqHa'E/颟4y$lpŸ`^bK\m.z̈́ 1) drȈ ǿ&\g>@-@GUtByrdICi+5pID2=*QHȻdy8r`x"B C7PGTXULz6%$1  6eObU^RDZ(شv SN4dϢ]P.Pڙ& K74VA슓5R 8_IhFJ+8nzoOř%sf&)~$h}S:s ˭){绀 pߞU:m&x!;.B0ld;g̝stLI[e~э`JVh2wW\CͫPr!=6"WRŲډLZ?  p7Ș݋Áد]p^<m:q%鏂ME#}KOu jGVʺ3op7^7U!G/{8M!g='cT ] *vy,;N_@SECׇ/z^;uJmGRGic XW 325< Iq" 7G/!\sK\}xlE4&xf(h@j묝' ޸l?XSE4Y߰gfH(J]!қCuJcL ?4@ t7;SwH×`, =.TT+"!O1yfU^JR'ha"vG9h,aygN7]u)Si]%ȧ\nҠvqٚ, ln}? )Jm0y7b*/tn-)Zv[q2Ѿf^}f2<Y٪&dÔv@`4Fj|*Jl|=wRI.CAC#?OC*|Et`nE-Cq\}e^s>~fЍt_U!!L5CS ~C s + q=cN|~׊aW)f! x0j;][6b2IgPJ PCTl~2̓&dCy z&(=5p@ZMJֱ`(N?cH&L#JJ韨4f_難BITݧ'S"rvoa5 V&gkc!ڵԨw<7ߥY?_>{&悒BGQbzу:[f0v[anP^k>ĥhugX9laI.RF$cr>g9^+ Bmh>O+ ם$)FV]o3eugw=GW#0cO&R*jW&(AcvU(za IXEmV6Cmag5k p~3n :NҨs4]ߺfULN>AՖPAx 꼭?ki(=iDž MQ E} x,Qkwz\6VM]Ulywt8 S`vN8d[H=[W %t}o"[rjj:Tl"!څu 3bYfrX'>n-팁Lf7C$wɞ00QܛupL|j!J 3[ Kʬ1{FXLzʌZ@r®=Lޑ$G5um%ܹax oD4 VG˩~4)V B|A=qj)2u MODl`{K{0}YDPO|R2PsX,i=da\SWt:KH )IN#E Z"]vO_.gwu庽؈$48'>AVfU*Tz}0]Ξocwxc]$m{>Ɂ|&%djG !%z.) 5 heP}+rZIi K,*sR>-vnD˂CaMؖB0^_qbUZv7@}a̕ 6g1cdP AnwZnW'O g\VC&,?U6BXBp w!8>;569,~'yDsUپ wPY?GP?)z*JNC>~`bUFt"9NT{:pMyp5ܹb G=qu7ph%a9(j~];BkȗjuK!:IT*DX7 ÚMa+ 8 >{ǣv5&\{,V*N4O܂6+|\^]"EaVr?G.TYޠͽR\ >Ces&Uŷpd 3OO V1~JSyL=9 1UgC֛V0z@*iSW &oT L@'F:L~z&53="g'+}͛8= $%kt9/Z#L9N DWV> i#Sw#WrٸTw䤁ȭ % P7 kKsg:p[gKߎ'(IFD񁖙a9RETa9 x,.nU_8'$|"-!ƃVΕ)Y /^uJcaz 0Uj&,I{~E> n|#jES7_wvA8 X!XTԙ˓LŖ/t SSL" ~Im{1'j+\@\]/i;ҏ 魱ٻZ/@%ֿq|!lz݇M'|a{Zq7gX`0Ll靍: gbs|Gx*fb`E֩dxq}u5 $ !?w~NhcjT^)\Ϸ6Uׯm> w~>jcPMv6aTw t/OT\;a/UVc\\.*}7"ɉYH:̓:ܑgZȏJT"O"sxXԶ1}˪X2Ƌ -8~tl%sNG%oe*no7)@9bl͗}.QC^)x{YfbIC:=}r29Ws%pOtZc=' 0HO sRv[|Pdb0F5NH yfp\Wb(30چP E%pbs}B sRF*`jOLava#;6>1(! lc7m0"UR'ψ!2s)2COklt$n}+0qim۶یzaKr) Dq%h hwԄ^u/_֤+aKe/&&;P7MQ؊E?a)q棠Qq٦. ־~| =vKb툹Irz6NRݩ|i0vl,e˥>&UEcP_$v=/7D!B&$EU~:66D~KMK)ID,rSߨJ9f%S`=g nWRU NjFK=āCy'##驞K W`Tvqq3j=,1+q8@h%^YbC!TGٰ-2"?쌻 4]()oFtuzo.kGy\~,/J*tx㢷K]a!8F W *t3k&#ԫlq1zxytOϴ+H\嬳SPhx9.ςF*V;061X/ 8BXB0de\]uBhW~}7ԐQ~ yzqVs{PٮڶA>X;&F!z&6ˁҟcjHmqh1q$Z "{43Z_HnJf[L y=:O殗;L*E¸yM$ng7BK&q20LmE]bo@GQ'8V+rLt0砪QWirz {x3;_r"9Ty9UӘ.j>uN?+lȄ8!˾ϑg#=&*[9/hIjA \ Op1ǴǠ F塻N?uWYiZ\RqPeΚ '.>Vc\կg5>cKSlq3AuHy~yw]瓑T+r4g)Ǔ)t>N.y'͆9Z4AVKiV?cAX ɠkO cz'࣌l7b3[.j 8؜^S#Ty}V<&랛a+e^r99?~*k0ү%WIkCi7-|aČ^Hd`\غR4SPD# oZZXqnJpoRmVaV̚Ìn<.UXʆ>Hi =&zx~`zjI~<_ta褈K'#udn??工ӁV =]'$x {(KM{S*bw(bN9 pLH?|-F5/8squ=KF ɩ$WL. fնJG刹އdG/Qe^o}-F τsY,;M8e[Cz7;<n?;S)?VֳMgiPE}$,ywܘhw nr(x rYу4o&$ ( wpN8Di΍~6hڄyBoϔFQKU"ʻlwff+JWg  pLR-(I1/Sz%ں!/ 4 ^$~ )G^wAzm56cӄG&Ǵt1_J}:   "C#L桥\F+0+:5l`0SF3ROO :oie\Y*rB<^-/B8Gf^<}b׆]@l%6O9i\`Ц7lr@smd~@ǵ2B1 %O)E(*zVm`H"\-Qd#޲}#Ξ)CyR.ݕheUqR.=/a&k ;o][x`7#r;Ek/Ad )9Mʼ' , 7> ); E%m¦oL:}F"-LD3s*o;2TW}44ܻY8{X.O dFC!rFdc%ߺU p"T#RXy,1]o6D$Z/tܤz x՜- 47UU+8Ikr¹4cʸV?8N_@e%eee)52*}$LQ%gدS"ح=Ȉbg96XEx7,4' .`c.ic"ˉO\TўJT\3?ot2s /!C-JNJ'ݬfg:#2N7qt=@A77]+Wҥ8s1 *s9HF'EG舼i9퇰h~d2weLipZnja+>vNTh)Ek!dѺ%‡F`LyBE>fqOx=zAޡGOGE*3 !yشoMAqp]hgLu2[JSvIegP*olvRdKU䯍N6rwh?E(p$K](1C -,p  `l]"!~*CdbQBAߞZl0}md`wn# tG%ل(|xW'>ۀ>uq+LZXIRWQ/PM)kN.pI0Q\] ̮ޝ4[\FtY? .ƦZ0H% 'C=q,^t)AZDyp""m[rH2A Q) ՟jn^Gd#CWVLB$>"ر}eK8>fIaDXR05R9)IK;_t1dA2Kuε_'Vk+6Śu)p$L@- %Yʇ(:#ɴϩdܓ(+&ͽ#m5c޻N-RJS x'!9z `/SPUN2N;'CY9Z , c<EOV=n] eS7؃<t~ڮ;n<^oz7F4<2 e ; /~?HM1X^<6p/#Q3}QD3Yk٫nE9=G9^JMk'ݷI(Cf<˧)6y9zC(}BO1ܹۡ([ڼ׈zݏW_1%:Qq򦬾G#lU <6^(itE7׶Quy1C.f' /2\]urq꩛B wq0TQ"]t*9@iЌW\< =O}sc@ JS`۩,Pr 6U||?J 2z##yCrȲ~~=e9b.4ɉf;/G(oF$Fh\O=?W㠞[AvyES${=/Gyjh2|M~FG0L!yKg$ATq94U6 `{w*Л[& E{}Sy`ZDE&{po'c\m$PT!=c=GvDxJdPII!P V* X /oLyzJYD!.sf ^qB“bc!~aH28@y^"k!aJ7o:-abN&%c!leAUK&0(xn d){KZbDy <;Bхm~|cT;f䠻 [͕)Vs!C M4T~5r{po6": $D~& 0:z`k|RlI/*qqj唂6SƼ ɬz}:LXSȡygHz,r7nrYϾ43c Ԅ5-ޕF~Pvei aKltw֞W*[,jMV[@8XOF֠خK?sk*N<{Jen1Yˀ]5ɸpbZZxI 1kiǸ@PH): _ep ZoAoR2 Ԟ:z8DuE+[$Sj*+M2 uG;y[JL*N}`nJ`Ҏ,-4sS.p\M]E^]^TG>$>AB ?DwT0. ]h C1ܯ˽w>w* )6Y۔1_ϙ5ASV[pjV}@^qF 큢`еk>0-;&qirY/cgbbb4r#?5>Gۢ$Fc$PS.-W6@/V1?91j/[qlctR&GE@mDM1GH6WcCh$~9bgk6X Er!,Q22'׻Iף\uf:E1 v<3u.x$h~J0ow7Fڸs~&aSxjIR3¦c(ܮ/jPr=@iY%iM д/UDxo_Qn~W𤸅x$іZ3zd>cQ"Q?=3#fKjf&)lx .Ϗ5P\KK" R*;7J-dAA%\%Zc͂o~nhsV e!0e'O21ٸ1V^ <+Ws_a`E}> m6κ:Ņ}yiޢLh53 L\QCw%]w&ǒgr*F!k5;$^cX&[u<yQU&s ~pH⠢Ǔ](,6 k)D VoM ^)g\ѧ!L_ʌ`)Z*"DDfR8 :_ Fep˔BXޒN^p0V18ֻhэ]biVdO}O)HWiIIQv}_6٣JBaa[` s[[&J h? v;{NR^5*%xʉ< 3u‹{}@#XJ)H3殮oCzEE"dߡ*wl2/Nr؆${`Cgm݆ʀ}Ńl+UV2ĸŽxS)Z w}HPKvItQ@f\ ? l04Y-j:PZ|D^xyHNC7J^@Ξ1S"TqaTP^t YӤ!LClCK G켙n@D])+XJ`.dILJ80Ԏ Jwo;Ơ4@?]) 5(TLT2jcM35/j X.#+\X%THnum uIlvw DXP ws?}0bJ% aTDv.m`'ԯPg<ϜQև 9m+AsKB|`HƓ2{ǔ5ΏO".! Բ]^#ƽ<" @ coz1LP .Ll߽q\fۄ~hZz>0 ufZec(;;D _0o f[95$qm74alpkzz0tw0<ƻuuQ/X;G2BL8c:u {$Ϗc4%Zt6:c(ٗ8nhio?)5,{W˴!%~ dg#USnLƓ*V f%Wh kH=/?[H' Vˈ;M5/I1 ]]L 4b8 -d?=cNsvO= yplA[ лj\N "7.#;˕nYiTbkm]Zo׶a"@;< Z7AO 6 lxIA6LԪPܑ!d+OCe85Pt@1u6*dΑb w3r)ఊ0$)UT0ipO6';HDqU HMTNE#Uv.|AJvۡ2Di3Pv<&)Xĵ Pzg^"ZHC}0Wi+ K"*7rW=k8G;xŇ_o`7MF;|[&*B)Q,HԤ9J&3\:_䙣 6nС UM G)R碼G 5sOXRvi25[r0 >Z])/+VCӧ,omucganY8y͢Nfy(O݇uɘIe7#Wcc^В`?ˆaCT= $ Ŝ[slʔ((!j81VKUFfbm%˟#\t@,l\!>s^ izc FjJ ^]bƲX0 f`p=
iBO$ R&#xI) s*gϦM'2XC0%#x5)>J YbaUyM(ʻk݌vW,{ѽWrWyLϺW}~v-2)&Q 氐Ww9Q`1Z_ TrǻՃDcB>N"pC R /| 3Gp.tYm p17z Ө ^K`WLeXŕL XQCXKw,?,.ja`ejU%GTI*}DxS,>՘~NY沽'G֕>˟/]m#89ϙC;FҞJS+3޻}ߍ)Fsn:X725 X,®pƟ cKq!.l'"Dώ95 [/29FƘP0J0'8Yډ x*":lBdx:5L+qwz;^jDې07 ~O -윜T0q\RP"plك:1%nTN^-™z&` QﳻhD✺* EnūorUv=nl&צ.i&U~!$tQ[WjdI'wOy-u X?3άyOL8կ B|~2l`S>Gk-JwľN8WHH ^T JXēu :Wr fSj^zW宩~3L_k@B?̨]5v?W]E13IܘeP/-Ezo~Do6:Yݖ 0+7<'?JTAK[IĔC^,< m,Ys:?uSKk#n7Z= erEwiƝx)vנ!.>a#G0&K“:M=8qNL_#O k>21Zmld|HP`Ub3{ >rou}$x(K;l75K_LlE-x]GtVO|a ,sY RbuBO(V-d#˒sV:B{_dY᧣p5iVՆ'` 1ZF*v H&Mw~h{ _?RES j+f!u<#~| 8pxMFG%O%=]H ^? ) MldY/ ^Dk?t@wE}2X5kp8r0kT*.&LYd1{ˏiwy;XurMǻ%~UyP 20C,)L_07||[X}s=zh ?,[WtFr3X=52 Վf]K+)l;J ʙY.Ǚ'}mbYݬ=lIdblE\ NCXMB]7kB|8pA谭\4;N۴r?2p >{gw˔vQ\lQz xbV"C)-&iĠbzx] >p`^ȩGHDz @G%*.-qN2N'O&GG}[X@ eύ(k ri21-?PaVW{ j) h7W9za5qR08VNqY$R8>w$9u r9k!I{[#Kǥ%jr;/"?h45ͣݢJ>M;pU&n䅳t - % 3tz%+y;0 c+1ۄ%CAMWvvg54y)̇4a:Jf{0U6#ijz:0ą2mc/8J.nEv?t7oϡݯwbǮ-!yhޥM£%$,5 Yo[.J8/#hdK"v먧Jm |G b[pS 3Ba uXznk}#'%΍N,ɡ%,05$8S'mn`X3[gR~ޚYFmi6i [@ۺ&ʌg KU2&(g^<@.=rqhNHANNpvҐADfshTA>'[F=iO}b,,'QRjcv8QDHUqWϱմVO7G YFȚ1ՄλeCuJBăI\8R.烮0$ Y*q+S'N9Qqμ[{9zT\Zw8͹ 1Ŀ!M`u8% TVP _`fciZt%۹ 'Q) Ot "CӂD1RYܪ;8=/ǔl}z! ;H4w:RLP+7"? z!# 0"kz֨s{{ \pv-E-5*Q-D|J>yLvQZYit?]; i#^Viw`wRN|OLl8Q,1ӾGG}7÷/6!Wg rxKru 㐤*T%T5/_%nhS#KF?PUcN$h{Hʻ"S"Ǽ.|nh "Q}= 9,vP Q b6j~vȱ-e~kAb(oBD}J< %DDOw\.u(UHLb,{*bp8@ ƛ4!FV [[YS C│YݿmJq&(p YVz :%[EG SZgE5kCHtcM Ӛ(Z3V}|h>Ұ\׺cnM=or~옹Ϯ-:] WSG/DԗR2ܪϚMMxo<RvH_b H$D ax@q7?TR"<.PQN 'ΤsU(gaj{zfW g<,8ku8i*ͧFa5n^).vZZ' @읣ܦo2#T#Mո'pU%`_P5ߍV{++ w9p I+D-TmEklcp?YTٻn{?2#_7$ɽN!R E-iŎ, =` X8kkCM`\h lāxw ? Z| $E9"M'9/!H4DN 8|YЉIpCaBح0-S +$6ąێa8"IJ i uM0@N斁5.dAr^f=< !t!侐p?]N2CYeEMWS斱YɖB@ێNwGɤ1TJ7N]>ЇSޒZ?Xc\@~! 4p<Ӏ~KH%3ノùԔj9DxqűGw.M~>#A^ Y+W G( w  ^1붼nָC*1٨M ctGu=N2'NL&p&!rNeLخgNq>ߐ _hzzZ mN}*!+r'7wC;\@-_`!=?)eNĹ`ᐡo_܎:ejWчx5-TOt]e&K1^wӜ|5`ȓWd2zѶiղ]v?@*'w+[p[X/OJ%3u@ bZa.:Z S2Ш-q1o϶t4HL#PWjqAù#n1ֲvuV k(Fg`7e]fD` fXl,Ԡo#FaQLcxID eyk,Q?I$g#v歚x1a:p'D—ՕfN9^}co[o,V r'0]m_SM:iM2!Zj1UL}3CpUHVa$Ks*}p7o7e#d&lLUJ1}\O8b"?ϯO$1 쓫=ٮ1WWʵc ֣

@'N6>¤yXn:KEHDUW@H3ئa)*5Q!Ȕp)~BldѦu΅L%L@ M [mfVe` 9 +_] KvEO%=aF#{oPll05ѝ|ts$g&YAӬ#Kb^l OvC9ݞ3exy2ɗ@}hNwS_ /0vKXrKE0qFwqۏE0)B`>µrB!tQ!ǪTJ vNG)[Ǵn-qs)I/qoÈ Q}_!4Nm j0i8IHNRvEb[_0Kԩv7zƘ~d_ps~6C:1fMwlCP" ty &LX9ewɌ{bqel sNOTpoW &˫GPKD=&t=FD8:?6ɰSy}*c8T~0@_kĔ0?aݯL\ pPl[Ob 5y<Ϡj˨{X٠f=,*DC7ڄy8j dAa@yE*tj'K>E4VoI2id?SmM7`Sj( R&%Ƈ=h6 ~^OH-5y/)Bg«!78x @N&{TF,RΪ Nq9h9ùaNڨK.6<'YD%HWNA(hGZG{Њ:Z`b -Pa$?Gh1ymя(g@h^k"_XJ1o _@:00: 57i2SZ]4ǘrĽWO8#m=VqQoK :}o̼Rg~9M-p^z8HL6 z=D7(RZD2]az/MfzRAjdQ|lќ:-1*ry佴 Hlɤ JV s٭l,+>pgL@R~u´*e. =>A|4!B'l4cwwoc+ýpjXfoeB%%Ldxq\{Aa>c$DӕK HiA < ]iOCN>x{!. {pZͲV󂠵 *PB݇8=^:qi@ 4&D83+HqY煮a&F4XZ톖i<$xs͠;{Im,lsȮq"5~*2 ¶] yf^ƸThZEqJ_—JSSNJHEgQS[H O`'ghz8u}=Re`]ٶl\< fBdLEbҺ9ުqR.yGTӚyҾx#H ~vI6{S'352 K|恳B偂 !&޴fwgʤ&3$L}h`* Ӏ|ՀߊO|[_CcDBd@J"O螄\ _xMĨ47t`;/90ٜA8archwxYGBU8xE0ċB tSSFC=YZS15loϗ&#a TȔ֦-?Oݨuyj/BgF,|%Ph+-a|^ʓ@2YuRl6?O> # zePm5{2OG mvwq7^@tS $L-K#`,#vk|xn)F^4g]9HToyJ[so줁:UW 3W]R @=^R8WIafy{oQh]+Cz^1NB,PsWLxaκ}.^RlJjkiccJ3&O̓C,dWlZƧ"C1jd};UHOB@RwCWqG}z>РsV-qkgq>B.'i .T:wf bg0=*ޏ5BB1_AMrPBnlZYbh @d&,VudzUh[ڂ8.!V(l g UpI[Oy _{m)\c+S,_wcs1Ak*ȭ<}⻔Ou"obs &:;.[+LԖ0'^pQ`Oַ-rN^zFuw—UX}l '$Ok ԡ{BO9f"%#َ@MVKg'_5}C}TVqKs^;!]s59~46N\ Od鏷=b\Dn?/Y++˭]CQxW9`I&cc´jAM } }mu9?'s^QXiĩ05܃X452k0sk$h}`ޝAPG-YԓVuXݗ~l5Ht-l^bz͙` %AмZ.Hn Հ '{@ `ݑ[ X7J-Nv0eFV1;Z%gW5]g[Dq  =+6<=cx̏WB.7ƠԕyV8Z(fiЂ25k[aidNu@nE`>W:M%#N;M%YΎ%M<0դE.QM<>]=إ4 ZVjAam:w+x$; {TvDr=wq S0N3DBdQutng{fpYX+EFZ){$Hi4>ȍ_Def?G(77ڻM,ġ?Xpc|JK/*גĕd8CgVM*IkRx|g< ZC뻻s 9Nq5uoa$dh2/JnI;.ΨGH1ގ|}dzG\W)\ zXҺ OF65De-s/ִ"ɵN&,L* ¾rSP"|e!GVmnBP/ jHμr2 EM~O\~Q)xF|\J?y]*f3b',.RB E2aklzahj1uaur( eIJG2Mm=DSDž{ڛ q X-߀Z-fQ0 ȓy|ǟj V#,h` +ΌټU?N{N#t"(y_I;zcE+hd3Te6}?L]&#A͔7)C 5UԑJϞBᅧ p$rRE$bW5yaJ[КP\M8t{7x[#A2Uv6@n-ze\ӹ% lf؊W|Xpe4?`1NT~@zz@5/ O2lOx[S=fS}4[inx\92KgD,"ej(9Oe7o*'tl sJ^3ab7M(hbόʷJHȌ>B#̲_B@rAcIf׏vGKTT*͠)fRn`@?):Ҽ03=DeK#VoD0 shnmVXLA7x^K,..F*x A-etֳTKgsϼ&Ӊ"eq ۜk7ъ5Ԧ"<IHP&u^bɪĪ*!YI`A͊CbãoH"E5*KfrtVQEa5ƪK-"U p~P^ňm 8|{LB!cqu.'KhvD/z{hLas&oQ2Tj\Jc6 yeN0KE%s!ؗԍzOR'\zFXWQ#-+r/+AsCcL2Z>E[ 7e!/4eXV3JfI>RWi.L]pݣ^V%/6LuIsίTqr1@J_5H>Vwx0QrL m~mkHp"2 4vx7i`zAcjǂ45/+J4 @3|z ph|Q(?Ur׹V TЏ_@.'ϹqI2x3݂#ӁZ0tC}mܟI~5~?I}aYjcG0$ICO=羶yfIAZI|i - HR)jr; r7Se::ap22< W:!Oz-F獾;JV2C#?( ͨhcaKh 9m4N;sGPukjNbtQO3кA2 En+U54fXO{iVm0+38LdZ> ݓ#*"?FЃFZ~ i+tՒ:mBv}ͻT"silU:;Mcx}aV\u\>`6yZpĸ*#d^q}Cod+w0B+e_Á fltn_A\b E`cO{귾!c<:jDŷ%PY4lq4y`؈;iBQ4gZN+o <}n4SƉ/q8[tQLGDZ ~hMֶ`gJ%XҰ^!bLse(Ȃ5OK컱QѲ5ub w ^s &'5}Q!ضrkO'_Rڧm=h$ngbWnkKΨ~V$(}|1H[So;#6a%HTP藙O݁ABs/ȍI m& }×h,}y. LM/n>>ȺR, ":26]x/8MӇtS2ԍv 8OF@feH%5Ի 8CyfMMJxS^M~RY2L KR1=t0SK"6D .e49=gQ;0VTrJșygDɲX![J:1,;P9 UO$ґ&ļ:2yr@3wֲRUc)ctfi^g3ڶ I_ sC-BHT KUcY7.F\an^aـջ[IllDI:\6g|͢=ˀw!̠(7 AJ|6uu|R|t*uM)ԞˆU"<@fKq-C D_, 4A?`juq8F?jn~,6yW7SFC70BeTs7Dt2 A㷜Fi/?,ƅT$ޚXcd!<ح.ZOZ#D{FuJ\%F39Ё |h%Uj3y~ M l?b;,"2&$6vaĹ?.=JS f#ϧaFaLbT8HzFa |OڨKGk/P(Rl1ȁ`zVQ˛<\RX]I q9?^+Mqr?$2 K~F^HaY7&m*_7+R_=|w_Pxc^MJDvX!P)&> عmQ.q$"y5r!38 |dPAU(j&oDAޟڥ,+S6C +Q (6L'bZ6ُ, 1Lko6k8G'w:YDO(":_$~rO8S"+D d<ϐ3؈(rtBegk։N2Cg!RI ꫥ^xqg8W%}Gdk=ښ3Z$fSbc#SOԆ~nr~ YfPΎR$!KԵ`2H/[s'+&hBj}-HcNѾ% ڿ:{DpmeDs $T)u-.2<4bk=Lw?GDpGֆ_k(`(oΚA{ KwjiY*oykjl֐d B@AK7*=mref#+6gA I2)2KOgc%ic3(x2*YPPJ 9c6 ;WВ O6炜yJ~W꯶ewɶ"H2|ΗbWR,juW z<+>2q K+'DCd UGk ᐴM(F (j _kUDSC ^7уam+. hǭh Kɛ#Zw9pN IfV 2tӹ E@[;b0Ytf?Gm  w1NWdB&_KXύH0ճ1t^Gm|]ubũ.50s;9+A+ph8Q +y,L[j'>4]l>U,@L[Jy{PjCz.{!80Lx%06"il7'&̖|̜8Ȁeԫ%'e+E@L* '׷R4?#fݥK(nzVt P]¥qhՖzs59zbn"Fͽ(b…AHPYMk EKD\oO<2_vEAŠ&tF]HmzͤRzЈnߍd5.6K)@uu9I}rƞ *xʴg0lj*]]yYkUr,Б"g5Yh[3IE'p d=i!]5]\.wB&6|E;ԟ}dex<r{!U&YCuʬRش XE1ZY01oem >[eVYxrTL ә6v5?[m;  \O~`V&o8Vխ,xZz5Yns3S <E$-~9 d4[J}i֤Q->6!ZI8J`jк83?( 6$%GVL^H ?D-) =Ñj9Z3160Iu#[oNw湴q?# h"REBD #ՎfG@2IqmSj*e?LR173 <+̖'t7*9 db\ ,^ $7 X a~ X5۫>*%;e&9AhKйLؖAyƔqR"7B笽t^μΤ6f@V౫aݬkkh5aU…@r?} KN2Butʾ%5xy}e(NGoˮ$ItRu՘k*6$q]wȷ=xӤtDSRz*&wfזK ~A\KC*N:CƼOKxZI7ɹ0_N{Փ?/b56?C /)x wJF%LiX@ TKZeE#LQ;kЭOFbBu E tInRNY pͅz)J=ĸxTϬnrG;uV~[w| UG錫" <~;i}~1jm = "K/8pEP{&3Ёb-|ݭ.~pE[=vu' \w`ϞT#p>{T(^ Y9w\.^Qs:O%0;I,T+IZ#É^RZ.S7MT w*A$*YnR_7Vc@+2(?Og"/% JH3-{H[()%nnNT:Bכ`YŊ{FnJL&V߱E$7}!^OC~dfJwR2a29m@Y˺KhD ~"#ef-Ausq8Ÿ! #&=^]Sy,;[a!쨶+<;oP!ǪỦ1.r~<É9c ͭxq kf$LTՇiճmfI> |<,ɿ֯e$8$ykT=ʁ~*/*3HlҟQ_IZ^ɻCVa2ϔjJ"pDŌ ǰaW"/ vbɭSh'E)JS*ق3/g?q`Q^:!7l\3 Ducu.!KzOCACDIMAEB|KXTET]<",:Ex3WϦXP0ںf?H/͏D£V ςa9"Oo(&pP1?K(sԊm匤b\t[,r˜h+w*E)Y90sgGcC}AN|/V6ZLU>Ap1R>oa #ŗкb?@P(腙n #, |n2Caw!.z) /5S .;5~ϙFͅ{}VߔoZΆ 0IcC|>Yw\֒=ZlV 0A QN#*eAؒo5w9L!Xz\t^M8؊(SaDAw+yqF {W[9WԺ;3fƝ.(QLicÓGN w5*12G >4΃&>ȯoW:x6_o utc#:C\-.y/J]{?ܜޤd_o<]FY6،ekO"d զ/1BEۈ'0J2}{ VRB  )6WR&Rv8Us%6%Ehm1M.:T,~z=@R,pgMª~[$K oV4D/ 1⫥GvMy+^ߍ9'gFԭ& 1Hд=a~$wy`ɔi4{2?Be|\,4ڿRZ,Tk&yT{"4]ȟwrA@V$2BTR p=#? o\CU-u6>%`I`DwD6Pc.`Q5DL%!P5z$4Dk?BETB ǧ.QRÛ5Ye'B[䥘0;)I ZZB[p!3J9؆X`xc# >%~֊6;ThYt1!bnxaowOkfc;i:?4vO|FZmQj+gG_t"?ց^j@\Ő (o>?;ͦF}NBZ( e$ʀ!I`V9Ƽv;čcks֑.SCqےHd/_U% ~+}&vhVtiTeSd˷ =h7(;0bi,A=w9 Hy{ji?#?ݳ} JlQS4zvu%g@H*5 ep?:qRd& .cӮFΗe.L`҅VLKwV\`Ak t'!Ӊ~a9iyi : \&ĝyd:$"nU^<2*f2GKGx,T'ViމŽ,pV?qP=> nҊe-RGI\mw)} Vh%BUTQY.mf;Z資hy^t3+msswU_zPwbvQCW$r*; `KRvj*0]Ʉf!a,@[);CjM"x2cd Oi/{bi]-[e5Bq#?% 33oo9.vfh152n0,)WduwLm"r)ɲnr'B01opUIXI#rTQEN/HJIcAZh]ABշOqzHBrr/ⴅB瓭|2:VP ewg1 4la:gm ,ōk[@ɸ 9b{Uܹ] uC8+NZ:-=3ewfo4S.ؖ?FdQihM;x&Y@[KìĴA4¡]/b/POm(Ll ioeߐnȲe|}{*zS+Zɕ 7eA*p[ߥE,oS&U6ƶ&&Z1|S]@Y8:??y/v9(7vuȼyCO,8+eR^ۗ ~a9䫚}]9<>,1*ۻPpV)ȒyرvUPЃO{0 ű84ľcf`B]]gZQg˸2R=P2zȪ2$]HRV HzPgZ F&y!p GMtWX`fQ!@Iq12[_ҏ>]fB}okڧ^+{Ăp'SexP{f9%I3-@,e׻ٯ&tmõ\RHcSFC[3~K7!Iס}J tX L_\킣b]%֊im+T6(%8nR@8i,-R{!΃(;JaLDT N0r<ڿ}3D_3̨"ziiJ/cNZtLMLTݘGq a/D*N/ @ZJD y 2^ f‚@NCNڻdW~jɏ5&f*{b$L0s>}Ļ/b̚]8q/.0%舗j4je:Oy ӄ V٨EO:zI#PqgKOZ$m(,GVaUQ.PɥæF/ Vx7P81Q X)YܘOLُ|i;;\5k*8= 0{W# c{ 4vn6\YKhr$d?7ìPCʕc#>JV.qj+g$=sOb"h2ypp<ʔa>"M^|ku$qLW'#tH]f0tT u35gMedہ@r5cn1bT,yӉjM"4%$ vt ?3QE2Nxy'R.h~R Vj; 'Su]ULas]11HDcǩqu7m׌B1>c!lVl`oXܛ}^ @ajCS>C=OH'Y 1!)_*VjJEFApy^&t;0OS -0*qt熲KY $ev_ k ]AQ,8 F4Y`!G6UVSEmEWZ Cw;HA!3;e'/PEQPUe6`6!9zi \2.5F~ZH$aEJ~xH  qJ&N k}؃Rho( (O|l/:W]6@+S {!*9h &|9:r5#y]ʛvF߱t6jD{ 'b7f7k,HX``+Vd{Ug5H̟]vJ$܇l;l*~)adF3=L ۼTFO ҏw E^IM6. :yiW[{&0=VV" noِE {yՃqwYMW7F3P|N$EU$h\z: ,>N7@5CMI@,`9حX<ڏ{w*3Ud <D7=AF|#3|S4F:kDs!ϯEGؼd,.^@ ͪ`X9%_h y71ߵBㄎPzA3Nfc?Y5ԕ\شӄBC2)eM{w̳yJ+sZs𑉆23GdPK|>[(W5DY D0#ڡvk担ڮq% RyPf^組U"b>ݎ Q \m-T*3owT^|2 T7CG)؈T;$_̓7Nܽ6k|7-ِ$-^sVUwx=D~7Œ0mT!5ZE{AZB;-rVG3+lF2_xr]ER%̞(bgWh{Nw##?aREJn2;pX4*~rx5 I7M MmYҜ@i:"&?b6ܴ&ts[O\6T~_~җ'OXգȣwGGdR)KO٠M`cRBƢ]8!ʫ* ^8Ua֦'X謉y%kDciGNbp+:eۍx`!N THgNH;UTx :KdO%#ʼn眷`pk y6j:1u>UNkwXY0E&gXˊ὎5՟B]@BnES1-VxrrGBc4G8hz ݺbWu͂ľAZ3}\Bp %?)< Z4!wJm45CV̤L lم/L_yi Ц7vvzM %b ,#^'Z"7L%rke+ `hRn*@V1<ʯL㸏 07ͨS}e xQ1vE2QaT{sCJ; Y/VpD!<8yv8z#cM ֈe|>n)~vWLlDs-p`mKC+j P, E=!U*<ҎsAܚp3@2GrXrVN'8 `kܓ[):9]QV7[VoL]lVjv QTR_0*@Mm1{9^[u-^^"3L-䵣@fn&FͫAy+F(@gX3WѶ c@! )4 b$j#[=C=Bq4"C*% yVHvWXRP"