diff --git a/doc/AD5940.pdf b/doc/AD5940.pdf new file mode 100644 index 0000000..57ceff6 Binary files /dev/null and b/doc/AD5940.pdf differ diff --git a/doc/Application Notes/AN-1557_Rev0.pdf b/doc/Application Notes/AN-1557_Rev0.pdf new file mode 100644 index 0000000..d1ae62a Binary files /dev/null and b/doc/Application Notes/AN-1557_Rev0.pdf differ diff --git a/doc/Application Notes/AN-1563_Rev0.pdf b/doc/Application Notes/AN-1563_Rev0.pdf new file mode 100644 index 0000000..cd429c3 Binary files /dev/null and b/doc/Application Notes/AN-1563_Rev0.pdf differ diff --git a/doc/EVAL-AD5940-UG-1292_(Rev. 0).pdf b/doc/EVAL-AD5940-UG-1292_(Rev. 0).pdf new file mode 100644 index 0000000..9d5b8f4 Binary files /dev/null and b/doc/EVAL-AD5940-UG-1292_(Rev. 0).pdf differ diff --git a/doc/Schematics/AD5940/AD5940 Z Test .pdf b/doc/Schematics/AD5940/AD5940 Z Test .pdf new file mode 100644 index 0000000..d33c839 Binary files /dev/null and b/doc/Schematics/AD5940/AD5940 Z Test .pdf differ diff --git a/doc/Schematics/AD5940/EVAL-AD5940BIOZ.pdf b/doc/Schematics/AD5940/EVAL-AD5940BIOZ.pdf new file mode 100644 index 0000000..85c4daf Binary files /dev/null and b/doc/Schematics/AD5940/EVAL-AD5940BIOZ.pdf differ diff --git a/doc/Schematics/AD5940/EVAL-AD5940ELCZ.pdf b/doc/Schematics/AD5940/EVAL-AD5940ELCZ.pdf new file mode 100644 index 0000000..461179d Binary files /dev/null and b/doc/Schematics/AD5940/EVAL-AD5940ELCZ.pdf differ diff --git a/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ-RL.bxl b/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ-RL.bxl new file mode 100644 index 0000000..d2ed390 Binary files /dev/null and b/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ-RL.bxl differ diff --git a/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ.pdf b/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ.pdf new file mode 100644 index 0000000..8c5be61 Binary files /dev/null and b/doc/Schematics/AD5940/Footprint BXL/AD5940BCBZ.pdf differ diff --git a/doc/Schematics/AD5940/Layout/AD5940 Z Test.pdf b/doc/Schematics/AD5940/Layout/AD5940 Z Test.pdf new file mode 100644 index 0000000..5aea671 --- /dev/null +++ b/doc/Schematics/AD5940/Layout/AD5940 Z Test.pdf @@ -0,0 +1,3375 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/Metadata 2 0 R/Names 5 0 R/OCProperties<>/OCGs[6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R]>>/Outlines 19 0 R/Pages 3 0 R/StructTreeRoot 20 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2018-07-03T12:27:01+01:00 + 2018-07-03T12:26:59+01:00 + 2018-07-03T12:27:01+01:00 + Allegro Design Publisher + + + uuid:6ae8eea1-94b8-4924-b643-14534af3736e + uuid:45f4cd5e-a670-4403-bc1f-bc89ee88304a + + + application/pdf + + + Adobe PDF Library 10.1 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 5 0 obj <> endobj 19 0 obj <> endobj 3 0 obj <> endobj 20 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <> endobj 30 0 obj [27 0 R 28 0 R 29 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R] endobj 31 0 obj [73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R] endobj 32 0 obj [200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R] endobj 33 0 obj [216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R] endobj 34 0 obj [284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R] endobj 35 0 obj [360 0 R] endobj 36 0 obj [361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R] endobj 37 0 obj [424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R] endobj 38 0 obj [492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R] endobj 39 0 obj [553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R] endobj 40 0 obj [620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R] endobj 620 0 obj <>]>>/K 0/P 81 0 R/Pg 834 0 R/S/aa_layout>> endobj 621 0 obj <>]>>/K 1/P 79 0 R/Pg 834 0 R/S/aa_layout>> endobj 622 0 obj <>]>>/K 2/P 77 0 R/Pg 834 0 R/S/aa_layout>> endobj 623 0 obj <>]>>/K 3/P 87 0 R/Pg 834 0 R/S/aa_layout>> endobj 624 0 obj <>]>>/K 4/P 85 0 R/Pg 834 0 R/S/aa_layout>> endobj 625 0 obj <>]>>/K 5/P 83 0 R/Pg 834 0 R/S/aa_layout>> endobj 626 0 obj <>]>>/K 6/P 95 0 R/Pg 834 0 R/S/aa_layout>> endobj 627 0 obj <>]>>/K 7/P 93 0 R/Pg 834 0 R/S/aa_layout>> endobj 628 0 obj <>]>>/K 8/P 91 0 R/Pg 834 0 R/S/aa_layout>> endobj 629 0 obj <>]>>/K 9/P 89 0 R/Pg 834 0 R/S/aa_layout>> endobj 630 0 obj <>]>>/K 10/P 99 0 R/Pg 834 0 R/S/aa_layout>> endobj 631 0 obj <>]>>/K 11/P 97 0 R/Pg 834 0 R/S/aa_layout>> endobj 632 0 obj <>]>>/K 12/P 75 0 R/Pg 834 0 R/S/aa_layout>> endobj 633 0 obj <>]>>/K 13/P 46 0 R/Pg 834 0 R/S/aa_layout>> endobj 634 0 obj <>]>>/K 14/P 49 0 R/Pg 834 0 R/S/aa_layout>> endobj 635 0 obj <>]>>/K 15/P 52 0 R/Pg 834 0 R/S/aa_layout>> endobj 636 0 obj <>]>>/K 16/P 101 0 R/Pg 834 0 R/S/aa_layout>> endobj 637 0 obj <>]>>/K 17/P 54 0 R/Pg 834 0 R/S/aa_layout>> endobj 638 0 obj <>]>>/K 18/P 123 0 R/Pg 834 0 R/S/aa_layout>> endobj 639 0 obj <>]>>/K 19/P 56 0 R/Pg 834 0 R/S/aa_layout>> endobj 640 0 obj <>]>>/K 20/P 103 0 R/Pg 834 0 R/S/aa_layout>> endobj 641 0 obj <>]>>/K 21/P 121 0 R/Pg 834 0 R/S/aa_layout>> endobj 642 0 obj <>]>>/K 22/P 107 0 R/Pg 834 0 R/S/aa_layout>> endobj 643 0 obj <>]>>/K 23/P 125 0 R/Pg 834 0 R/S/aa_layout>> endobj 644 0 obj <>]>>/K 24/P 105 0 R/Pg 834 0 R/S/aa_layout>> endobj 645 0 obj <>]>>/K 25/P 129 0 R/Pg 834 0 R/S/aa_layout>> endobj 646 0 obj <>]>>/K 26/P 111 0 R/Pg 834 0 R/S/aa_layout>> endobj 647 0 obj <>]>>/K 27/P 127 0 R/Pg 834 0 R/S/aa_layout>> endobj 648 0 obj <>]>>/K 28/P 109 0 R/Pg 834 0 R/S/aa_layout>> endobj 649 0 obj <>]>>/K 29/P 133 0 R/Pg 834 0 R/S/aa_layout>> endobj 650 0 obj <>]>>/K 30/P 113 0 R/Pg 834 0 R/S/aa_layout>> endobj 651 0 obj <>]>>/K 31/P 58 0 R/Pg 834 0 R/S/aa_layout>> endobj 652 0 obj <>]>>/K 32/P 304 0 R/Pg 834 0 R/S/aa_layout>> endobj 653 0 obj <>]>>/K 33/P 117 0 R/Pg 834 0 R/S/aa_layout>> endobj 654 0 obj <>]>>/K 34/P 115 0 R/Pg 834 0 R/S/aa_layout>> endobj 655 0 obj <>]>>/K 35/P 119 0 R/Pg 834 0 R/S/aa_layout>> endobj 656 0 obj <>]>>/K 36/P 135 0 R/Pg 834 0 R/S/aa_layout>> endobj 657 0 obj <>]>>/K 37/P 60 0 R/Pg 834 0 R/S/aa_layout>> endobj 658 0 obj <>]>>/K 38/P 317 0 R/Pg 834 0 R/S/aa_layout>> endobj 659 0 obj <>]>>/K 39/P 359 0 R/Pg 834 0 R/S/aa_layout>> endobj 660 0 obj <>]>>/K 40/P 131 0 R/Pg 834 0 R/S/aa_layout>> endobj 661 0 obj <>]>>/K 41/P 137 0 R/Pg 834 0 R/S/aa_layout>> endobj 662 0 obj <>]>>/K 42/P 143 0 R/Pg 834 0 R/S/aa_layout>> endobj 663 0 obj <>]>>/K 43/P 145 0 R/Pg 834 0 R/S/aa_layout>> endobj 664 0 obj <>]>>/K 44/P 139 0 R/Pg 834 0 R/S/aa_layout>> endobj 665 0 obj <>]>>/K 45/P 141 0 R/Pg 834 0 R/S/aa_layout>> endobj 666 0 obj <>]>>/K 46/P 62 0 R/Pg 834 0 R/S/aa_layout>> endobj 667 0 obj <>]>>/K 47/P 325 0 R/Pg 834 0 R/S/aa_layout>> endobj 668 0 obj <>]>>/K 48/P 327 0 R/Pg 834 0 R/S/aa_layout>> endobj 669 0 obj <>]>>/K 49/P 329 0 R/Pg 834 0 R/S/aa_layout>> endobj 670 0 obj <>]>>/K 50/P 147 0 R/Pg 834 0 R/S/aa_layout>> endobj 671 0 obj <>]>>/K 51/P 149 0 R/Pg 834 0 R/S/aa_layout>> endobj 672 0 obj <>]>>/K 52/P 163 0 R/Pg 834 0 R/S/aa_layout>> endobj 673 0 obj <>]>>/K 53/P 167 0 R/Pg 834 0 R/S/aa_layout>> endobj 674 0 obj <>]>>/K 54/P 64 0 R/Pg 834 0 R/S/aa_layout>> endobj 675 0 obj <>]>>/K 55/P 68 0 R/Pg 834 0 R/S/aa_layout>> endobj 676 0 obj <>]>>/K 56/P 169 0 R/Pg 834 0 R/S/aa_layout>> endobj 677 0 obj <>]>>/K 57/P 153 0 R/Pg 834 0 R/S/aa_layout>> endobj 678 0 obj <>]>>/K 58/P 155 0 R/Pg 834 0 R/S/aa_layout>> endobj 679 0 obj <>]>>/K 59/P 165 0 R/Pg 834 0 R/S/aa_layout>> endobj 680 0 obj <>]>>/K 60/P 151 0 R/Pg 834 0 R/S/aa_layout>> endobj 681 0 obj <>]>>/K 61/P 175 0 R/Pg 834 0 R/S/aa_layout>> endobj 682 0 obj <>]>>/K 62/P 157 0 R/Pg 834 0 R/S/aa_layout>> endobj 683 0 obj <>]>>/K 63/P 171 0 R/Pg 834 0 R/S/aa_layout>> endobj 684 0 obj <>]>>/K 64/P 159 0 R/Pg 834 0 R/S/aa_layout>> endobj 685 0 obj <>]>>/K 65/P 173 0 R/Pg 834 0 R/S/aa_layout>> endobj 686 0 obj <>]>>/K 66/P 161 0 R/Pg 834 0 R/S/aa_layout>> endobj 687 0 obj <>]>>/K 67/P 66 0 R/Pg 834 0 R/S/aa_layout>> endobj 688 0 obj <>]>>/K 68/P 181 0 R/Pg 834 0 R/S/aa_layout>> endobj 689 0 obj <>]>>/K 69/P 179 0 R/Pg 834 0 R/S/aa_layout>> endobj 690 0 obj <>]>>/K 70/P 177 0 R/Pg 834 0 R/S/aa_layout>> endobj 691 0 obj <>]>>/K 71/P 187 0 R/Pg 834 0 R/S/aa_layout>> endobj 692 0 obj <>]>>/K 72/P 185 0 R/Pg 834 0 R/S/aa_layout>> endobj 693 0 obj <>]>>/K 73/P 183 0 R/Pg 834 0 R/S/aa_layout>> endobj 694 0 obj <>]>>/K 74/P 195 0 R/Pg 834 0 R/S/aa_layout>> endobj 695 0 obj <>]>>/K 75/P 193 0 R/Pg 834 0 R/S/aa_layout>> endobj 696 0 obj <>]>>/K 76/P 191 0 R/Pg 834 0 R/S/aa_layout>> endobj 697 0 obj <>]>>/K 77/P 189 0 R/Pg 834 0 R/S/aa_layout>> endobj 698 0 obj <>]>>/K 78/P 199 0 R/Pg 834 0 R/S/aa_layout>> endobj 699 0 obj <>]>>/K 79/P 197 0 R/Pg 834 0 R/S/aa_layout>> endobj 700 0 obj <>]>>/K 80/P 70 0 R/Pg 834 0 R/S/aa_layout>> endobj 701 0 obj <>]>>/K 81/P 72 0 R/Pg 834 0 R/S/aa_layout>> endobj 702 0 obj <>]>>/K 82/P 704 0 R/Pg 834 0 R/S/aa_layout>> endobj 703 0 obj <>]>>/K[83 778 0 R 780 0 R 715 0 R 704 0 R 750 0 R 740 0 R 821 0 R 811 0 R 792 0 R 782 0 R]/P 27 0 R/Pg 834 0 R/S/C0402>> endobj 704 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[84 702 0 R]/P 703 0 R/Pg 834 0 R/S/C22>> endobj 705 0 obj <>]>>/K 85/P 707 0 R/Pg 834 0 R/S/aa_layout>> endobj 706 0 obj <>]>>/K[86 776 0 R 727 0 R 717 0 R 719 0 R 721 0 R 723 0 R 725 0 R 707 0 R 709 0 R 711 0 R 732 0 R 713 0 R 762 0 R 752 0 R 754 0 R 756 0 R 758 0 R 760 0 R 742 0 R 744 0 R 746 0 R 734 0 R 748 0 R 833 0 R 823 0 R 825 0 R 827 0 R 829 0 R 831 0 R 813 0 R 815 0 R 817 0 R 736 0 R 819 0 R 804 0 R 794 0 R 796 0 R 798 0 R 800 0 R 802 0 R 784 0 R 786 0 R 788 0 R 738 0 R 790 0 R 774 0 R 766 0 R 768 0 R 770 0 R 772 0 R]/P 27 0 R/Pg 834 0 R/S/R0402>> endobj 707 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[87 705 0 R]/P 706 0 R/Pg 834 0 R/S/R17>> endobj 708 0 obj <>]>>/K 88/P 709 0 R/Pg 834 0 R/S/aa_layout>> endobj 709 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[89 708 0 R]/P 706 0 R/Pg 834 0 R/S/R18>> endobj 710 0 obj <>]>>/K 90/P 711 0 R/Pg 834 0 R/S/aa_layout>> endobj 711 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[91 710 0 R]/P 706 0 R/Pg 834 0 R/S/R19>> endobj 712 0 obj <>]>>/K 92/P 713 0 R/Pg 834 0 R/S/aa_layout>> endobj 713 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[93 712 0 R]/P 706 0 R/Pg 834 0 R/S/R20>> endobj 714 0 obj <>]>>/K 94/P 715 0 R/Pg 834 0 R/S/aa_layout>> endobj 715 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[95 714 0 R]/P 703 0 R/Pg 834 0 R/S/C21>> endobj 716 0 obj <>]>>/K 96/P 717 0 R/Pg 834 0 R/S/aa_layout>> endobj 717 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[97 716 0 R]/P 706 0 R/Pg 834 0 R/S/R12>> endobj 718 0 obj <>]>>/K 98/P 719 0 R/Pg 834 0 R/S/aa_layout>> endobj 719 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[99 718 0 R]/P 706 0 R/Pg 834 0 R/S/R13>> endobj 720 0 obj <>]>>/K 100/P 721 0 R/Pg 834 0 R/S/aa_layout>> endobj 721 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[101 720 0 R]/P 706 0 R/Pg 834 0 R/S/R14>> endobj 722 0 obj <>]>>/K 102/P 723 0 R/Pg 834 0 R/S/aa_layout>> endobj 723 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[103 722 0 R]/P 706 0 R/Pg 834 0 R/S/R15>> endobj 724 0 obj <>]>>/K 104/P 725 0 R/Pg 834 0 R/S/aa_layout>> endobj 725 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[105 724 0 R]/P 706 0 R/Pg 834 0 R/S/R16>> endobj 726 0 obj <>]>>/K 106/P 727 0 R/Pg 834 0 R/S/aa_layout>> endobj 727 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[107 726 0 R]/P 706 0 R/Pg 834 0 R/S/R11>> endobj 728 0 obj <>]>>/K 108/P 730 0 R/Pg 834 0 R/S/aa_layout>> endobj 729 0 obj <>]>>/K[109 730 0 R 764 0 R 806 0 R 809 0 R]/P 27 0 R/Pg 834 0 R/S/R0603>> endobj 730 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[110 728 0 R]/P 729 0 R/Pg 834 0 R/S/JP1>> endobj 731 0 obj <>]>>/K 111/P 732 0 R/Pg 834 0 R/S/aa_layout>> endobj 732 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[112 731 0 R]/P 706 0 R/Pg 834 0 R/S/R1>> endobj 733 0 obj <>]>>/K 113/P 734 0 R/Pg 834 0 R/S/aa_layout>> endobj 734 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[114 733 0 R]/P 706 0 R/Pg 834 0 R/S/R2>> endobj 735 0 obj <>]>>/K 115/P 736 0 R/Pg 834 0 R/S/aa_layout>> endobj 736 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[116 735 0 R]/P 706 0 R/Pg 834 0 R/S/R3>> endobj 737 0 obj <>]>>/K 117/P 738 0 R/Pg 834 0 R/S/aa_layout>> endobj 738 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[118 737 0 R]/P 706 0 R/Pg 834 0 R/S/R4>> endobj 739 0 obj <>]>>/K 119/P 740 0 R/Pg 834 0 R/S/aa_layout>> endobj 740 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[120 739 0 R]/P 703 0 R/Pg 834 0 R/S/C32>> endobj 741 0 obj <>]>>/K 121/P 742 0 R/Pg 834 0 R/S/aa_layout>> endobj 742 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[122 741 0 R]/P 706 0 R/Pg 834 0 R/S/R27>> endobj 743 0 obj <>]>>/K 123/P 744 0 R/Pg 834 0 R/S/aa_layout>> endobj 744 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[124 743 0 R]/P 706 0 R/Pg 834 0 R/S/R28>> endobj 745 0 obj <>]>>/K 125/P 746 0 R/Pg 834 0 R/S/aa_layout>> endobj 746 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[126 745 0 R]/P 706 0 R/Pg 834 0 R/S/R29>> endobj 747 0 obj <>]>>/K 127/P 748 0 R/Pg 834 0 R/S/aa_layout>> endobj 748 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[128 747 0 R]/P 706 0 R/Pg 834 0 R/S/R30>> endobj 749 0 obj <>]>>/K 129/P 750 0 R/Pg 834 0 R/S/aa_layout>> endobj 750 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[130 749 0 R]/P 703 0 R/Pg 834 0 R/S/C31>> endobj 751 0 obj <>]>>/K 131/P 752 0 R/Pg 834 0 R/S/aa_layout>> endobj 752 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[132 751 0 R]/P 706 0 R/Pg 834 0 R/S/R22>> endobj 753 0 obj <>]>>/K 133/P 754 0 R/Pg 834 0 R/S/aa_layout>> endobj 754 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[134 753 0 R]/P 706 0 R/Pg 834 0 R/S/R23>> endobj 755 0 obj <>]>>/K 135/P 756 0 R/Pg 834 0 R/S/aa_layout>> endobj 756 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[136 755 0 R]/P 706 0 R/Pg 834 0 R/S/R24>> endobj 757 0 obj <>]>>/K 137/P 758 0 R/Pg 834 0 R/S/aa_layout>> endobj 758 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[138 757 0 R]/P 706 0 R/Pg 834 0 R/S/R25>> endobj 759 0 obj <>]>>/K 139/P 760 0 R/Pg 834 0 R/S/aa_layout>> endobj 760 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[140 759 0 R]/P 706 0 R/Pg 834 0 R/S/R26>> endobj 761 0 obj <>]>>/K 141/P 762 0 R/Pg 834 0 R/S/aa_layout>> endobj 762 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[142 761 0 R]/P 706 0 R/Pg 834 0 R/S/R21>> endobj 763 0 obj <>]>>/K 143/P 764 0 R/Pg 834 0 R/S/aa_layout>> endobj 764 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[144 763 0 R]/P 729 0 R/Pg 834 0 R/S/JP2>> endobj 765 0 obj <>]>>/K 145/P 766 0 R/Pg 834 0 R/S/aa_layout>> endobj 766 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[146 765 0 R]/P 706 0 R/Pg 834 0 R/S/R6>> endobj 767 0 obj <>]>>/K 147/P 768 0 R/Pg 834 0 R/S/aa_layout>> endobj 768 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[148 767 0 R]/P 706 0 R/Pg 834 0 R/S/R7>> endobj 769 0 obj <>]>>/K 149/P 770 0 R/Pg 834 0 R/S/aa_layout>> endobj 770 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[150 769 0 R]/P 706 0 R/Pg 834 0 R/S/R8>> endobj 771 0 obj <>]>>/K 151/P 772 0 R/Pg 834 0 R/S/aa_layout>> endobj 772 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[152 771 0 R]/P 706 0 R/Pg 834 0 R/S/R9>> endobj 773 0 obj <>]>>/K 153/P 774 0 R/Pg 834 0 R/S/aa_layout>> endobj 774 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[154 773 0 R]/P 706 0 R/Pg 834 0 R/S/R5>> endobj 775 0 obj <>]>>/K 155/P 776 0 R/Pg 834 0 R/S/aa_layout>> endobj 776 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[156 775 0 R]/P 706 0 R/Pg 834 0 R/S/R10>> endobj 777 0 obj <>]>>/K 157/P 778 0 R/Pg 834 0 R/S/aa_layout>> endobj 778 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[158 777 0 R]/P 703 0 R/Pg 834 0 R/S/C11>> endobj 779 0 obj <>]>>/K 159/P 780 0 R/Pg 834 0 R/S/aa_layout>> endobj 780 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[160 779 0 R]/P 703 0 R/Pg 834 0 R/S/C12>> endobj 781 0 obj <>]>>/K 161/P 782 0 R/Pg 834 0 R/S/aa_layout>> endobj 782 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[162 781 0 R]/P 703 0 R/Pg 834 0 R/S/C52>> endobj 783 0 obj <>]>>/K 163/P 784 0 R/Pg 834 0 R/S/aa_layout>> endobj 784 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[164 783 0 R]/P 706 0 R/Pg 834 0 R/S/R47>> endobj 785 0 obj <>]>>/K 165/P 786 0 R/Pg 834 0 R/S/aa_layout>> endobj 786 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[166 785 0 R]/P 706 0 R/Pg 834 0 R/S/R48>> endobj 787 0 obj <>]>>/K 167/P 788 0 R/Pg 834 0 R/S/aa_layout>> endobj 788 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[168 787 0 R]/P 706 0 R/Pg 834 0 R/S/R49>> endobj 789 0 obj <>]>>/K 169/P 790 0 R/Pg 834 0 R/S/aa_layout>> endobj 790 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[170 789 0 R]/P 706 0 R/Pg 834 0 R/S/R50>> endobj 791 0 obj <>]>>/K 171/P 792 0 R/Pg 834 0 R/S/aa_layout>> endobj 792 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[172 791 0 R]/P 703 0 R/Pg 834 0 R/S/C51>> endobj 793 0 obj <>]>>/K 173/P 794 0 R/Pg 834 0 R/S/aa_layout>> endobj 794 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[174 793 0 R]/P 706 0 R/Pg 834 0 R/S/R42>> endobj 795 0 obj <>]>>/K 175/P 796 0 R/Pg 834 0 R/S/aa_layout>> endobj 796 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[176 795 0 R]/P 706 0 R/Pg 834 0 R/S/R43>> endobj 797 0 obj <>]>>/K 177/P 798 0 R/Pg 834 0 R/S/aa_layout>> endobj 798 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[178 797 0 R]/P 706 0 R/Pg 834 0 R/S/R44>> endobj 799 0 obj <>]>>/K 179/P 800 0 R/Pg 834 0 R/S/aa_layout>> endobj 800 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[180 799 0 R]/P 706 0 R/Pg 834 0 R/S/R45>> endobj 801 0 obj <>]>>/K 181/P 802 0 R/Pg 834 0 R/S/aa_layout>> endobj 802 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[182 801 0 R]/P 706 0 R/Pg 834 0 R/S/R46>> endobj 803 0 obj <>]>>/K 183/P 804 0 R/Pg 834 0 R/S/aa_layout>> endobj 804 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[184 803 0 R]/P 706 0 R/Pg 834 0 R/S/R41>> endobj 805 0 obj <>]>>/K 185/P 806 0 R/Pg 834 0 R/S/aa_layout>> endobj 806 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[186 805 0 R]/P 729 0 R/Pg 834 0 R/S/JP3>> endobj 807 0 obj <>]>>/K 187/P 215 0 R/Pg 834 0 R/S/aa_layout>> endobj 808 0 obj <>]>>/K 188/P 809 0 R/Pg 834 0 R/S/aa_layout>> endobj 809 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[189 808 0 R]/P 729 0 R/Pg 834 0 R/S/JP4>> endobj 810 0 obj <>]>>/K 190/P 811 0 R/Pg 834 0 R/S/aa_layout>> endobj 811 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[191 810 0 R]/P 703 0 R/Pg 834 0 R/S/C42>> endobj 812 0 obj <>]>>/K 192/P 813 0 R/Pg 834 0 R/S/aa_layout>> endobj 813 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[193 812 0 R]/P 706 0 R/Pg 834 0 R/S/R37>> endobj 814 0 obj <>]>>/K 194/P 815 0 R/Pg 834 0 R/S/aa_layout>> endobj 815 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[195 814 0 R]/P 706 0 R/Pg 834 0 R/S/R38>> endobj 816 0 obj <>]>>/K 196/P 817 0 R/Pg 834 0 R/S/aa_layout>> endobj 817 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[197 816 0 R]/P 706 0 R/Pg 834 0 R/S/R39>> endobj 818 0 obj <>]>>/K 198/P 819 0 R/Pg 834 0 R/S/aa_layout>> endobj 819 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[199 818 0 R]/P 706 0 R/Pg 834 0 R/S/R40>> endobj 820 0 obj <>]>>/K 200/P 821 0 R/Pg 834 0 R/S/aa_layout>> endobj 821 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[201 820 0 R]/P 703 0 R/Pg 834 0 R/S/C41>> endobj 822 0 obj <>]>>/K 202/P 823 0 R/Pg 834 0 R/S/aa_layout>> endobj 823 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[203 822 0 R]/P 706 0 R/Pg 834 0 R/S/R32>> endobj 824 0 obj <>]>>/K 204/P 825 0 R/Pg 834 0 R/S/aa_layout>> endobj 825 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[205 824 0 R]/P 706 0 R/Pg 834 0 R/S/R33>> endobj 826 0 obj <>]>>/K 206/P 827 0 R/Pg 834 0 R/S/aa_layout>> endobj 827 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[207 826 0 R]/P 706 0 R/Pg 834 0 R/S/R34>> endobj 828 0 obj <>]>>/K 208/P 829 0 R/Pg 834 0 R/S/aa_layout>> endobj 829 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[209 828 0 R]/P 706 0 R/Pg 834 0 R/S/R35>> endobj 830 0 obj <>]>>/K 210/P 831 0 R/Pg 834 0 R/S/aa_layout>> endobj 831 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[211 830 0 R]/P 706 0 R/Pg 834 0 R/S/R36>> endobj 832 0 obj <>]>>/K 212/P 833 0 R/Pg 834 0 R/S/aa_layout>> endobj 833 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[213 832 0 R]/P 706 0 R/Pg 834 0 R/S/R31>> endobj 834 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 10/Type/Page>> endobj 933 0 obj [936 0 R] endobj 934 0 obj <>stream +H‰´—]‹%·†ïçWôerá^}€1Ä»Npˆ‰qæ>,Câ°9C $˜üû”º%Õ+u©sn²ËÀ9Ï)½Uª®R©¿}}ùðÇÛ‡>ªíÛO·µ•ÿÿüùåÃë«Úôöú׿'«s>~hŸ]L»³¹|Êz÷åãöúþò«ßüôºýöû?ü°}µ}þüçÇçÿüãßÿúõë’ýÊé=ê ýöúim÷ÝÃw=(Aýô;úðËöâœÞlJ{ÌÅÿûñÝ”(èkÚ/>ÙÝ(¥V”×>&­ÇËß^þô×·ÇšL[ÑÛúûýF‹ýfsì.ïÑtñ²¬0“«6*Ò>›DVl"|Ÿ-MÊì—,ù{M‡5ƒšóñâ£Yæþ ïè´#þ÷öÓîJ$-G2Ç|”Q­!sÖЇ?¿ýýóÏÙ¾þšà÷Ÿ6ï·o¾©åõ •×ú+¢Ôé!E…¾‡XãÒ®l )2µ[SÁÕ½½xëwЬÖºz};Ôð˹¼ÄwOs@‘)AWu]oîœRƒ%°,ì&÷Ý´ôÎ Õ¹%Ô¥V˜C—ž ZZpgÏE·[?æË]½ž9i9,îY£EÀ×U—sX"H”/‹–À²°§ÿCZ½6»:×EËu¨Ón©æ"P`Áµ'Ç«;£ç®èü>wÇ–Ì@ñê»VãðK¯FA£EÁ×E·³åüÌ[2Å«ïu&½ë™4~¡m0P‹”M9;ˆŽuåƒÙ`iC¯)¹›ì:bµ‹×šB«ve´KÇyh\̦Äcõîh:z ÈhMŠ©´)¯n¬„”vŸ4í,±âÕwÊÏgaé]ûòéÌe$Z Ò0³ä¤PGVʬ ¬÷=æ°¢åAØó4gRÃÌÕ‚‚ïV¦×yûRŽF›Ó1épÂL'{Ru>G³´oôj?fV¹ØS™£“íaWSü ûF¯öMé]TÁy;·`R½‘F{3Ö| †#EÖ+VCÍû¼ë4YcÅ«ïZóžjQ;ž t«Hê£ÜÌÀzÏÃj8¼Û³)2V¼únQµÃm¨Š€Ìcœz†)4]$mj»¤ ÚðZPìVXPè;ŽlAAw,Ó¹»¢ß3Õ¡» èdïé¢Fu¾¶Ÿº ìñ \U.öØ]@§ndÏ û©ÁºQP¹ëFûõ,Æ]Óc0CÝ—Wº FЬU3®æºwM4³%3V¼ún—4švÔ§z8#½Põ Yë|\Íg™ï9M–ÀXñê»FEW:=Ë%)Ž>Žã )7£!MÍa–šNQñ¼ßˆÊ”›"[PP¨ÛÐÔT.‡=ºvÈ´¦B:Ù“?ºF·´› +íÇÜÏ*{h*¤c‚ç…ýØThÏM(©Ü6¡íMH×D%gÇr÷ôy.w`½ˆa5”»£7Œ4Rd¬xõ]ËÝz1½ åMw>€õ†‡Õp4еAÓ1 Kf¬xõÝ¢¢ÞÑã*QÑPÎã1ý(t\ mê ·¤ØÉ”$"l ^» ÐkÓ‚‚ïU¦s_‘G}íC “==7ãÛ•A²Ÿú +ì1÷W•‹=öЩÙóÂ~êC°‡>TîúÐò0Lô´ a3™|ºR“eìdò?Rdº+—©Ã‹+¢zOt!Š“#–»:n“0×™|œ½ïjçöãðtV“L­nóà + jÚœ¡™cm}Ò + +ÞúÚO2ÅÈXaEí>®x@b´%_Ê”>‹ç\.«Êi È½´c6\ÝØÛñüéü³ƒaG]Oð\¯ë´Ó³þËžÎÙñ>íô¤ÉÞê6;ÞE•fÏY—ì™¶ÅZÿhOeñK*KqJösürÿ…ÞÞ©Í&W«¬¼d†i§Àb™Û±èüøvd(†óEáü•H ›úè*;:¬¼Üò¢Ã‡YPéߊkUfM¨»y[Hš¤0$ÄesI°sËÇ¢–rÀ%7íà œ—õýqñ<€¾Ùæ·©8zq4ŽÁ¦³*ÄnÖ )÷V"t…”ކô»²þ¸*yö¨uDú@ª]'œ:Þ%YA¦ psys¹‡¤)±ä&€à’"Á0ºa:Úd + +w!q#iz˜äÆLY¢+ úÉM§C ]A¦OfÉ÷TÜ3¹qS–Êe*7¹ée™>—¥ÀŽÎ†@2ôÌmKõû@χeÁ”é]Õ©°¤Má!êÞ†ä-fÉL;§”Û-ÉÄiçbîXA¦Ï=88”‡|œý4dɵÎò!Ó®ðuïCâZ7¾îë} ¦ffp³ Má!êÞ‡d…,ÑÒ³ Ç,¥ZÒ£™6…9ÐFoBJZȽ5žm;f)ׯ݈´+ sMΆ00À‰LaŒ\Uïâ1Z Â)^`^° â ToRB“áa¤vZP+4ÙSĨ %ÈàûZ§2ÌR?5>Œr×áô`h¥2]P%ÔùS³Ã(¡¢qt0 Rí.¨*ú©Áa´ð…â!Ž Aõ¶åM?¦]jG+Î ¤<"\nîŠòŒtï'‡ÇÉ¡¦i@!å(¼§æIWésï!ÆKYâѦäC¦0&$ÝûúÝðð@Ês•) +I÷>$-d æRèF¦<+$ÝÛl²Ýð°@7"…i!éÞ‡$u ¤Aê­µRÇ=÷b½”%#£s¡d4KEÿÜ{ˆµB–`’ µRÉ.¨’Šþ¹÷+•7 ¤A*äµRy?÷â´ðà`œ ›(²LatHºw!ñÒy·;ÒÓã< +“ƒŠ"“¿¤0OÝûy'e¨[牭IçI§09@A¦OÍ“¬¤$Á8aŠƒƒÓ!S'‚î]D)qDì¦ P˜§Lašº·y!G8L€ÂØ/2…a"èÞ_nA‡ ¸±nDŠÃDнIj7&@ƒÔX j¥v{n˜(%e †Éà\(ØÍRÉ?5Lr’„³¨• +vA•TòOÍ’¤ˆ¬TÜ84À·L­TÜÏ„dž£ÜD©ŒeŠ£Dн Éó‹€9 =ÜÞ´C] xåg™>÷" ákZY°ÌSÌ8:Å Ã +2…»,õˆ¢¥^ö¶¼™ÒÕù¼N†Ý'[Æz§%AA¦¬P"*¿8çm<~qúÑN@éÀóܞū1¶Ôžѫ}SzU®ñÈöc<‹Œ¦~C÷1ï.Ò¹ohÂ'ïsyƤSJ4ÄxÔñA•sæ >Ø©Wé2[ óÚäFM¹¼Jܨ“š@ +4¤ß˜Öù´ÔÖøX©v1ªÊZÓlUŒ¡KãÌ&­Uú°õ{rѹƒ¦=åóAcСÂDƒü4 ‰žy¥ÑY}BE9¨0¸èÍA©4T¬ÔS\þ .o+uô/œTûš®´[©K µÁÙFIúT°F馠uPg`&™*å™&©Ó|>7FR1WCÊg¸F“q¥ÁŸ3ІseÞšä*Õ!Tê(ãUõ¿tWA–l· +›g19ÆØØ¬#›øƒŸýO#, *¯_f}Ô·0Æ ‰qF};ýÌüV¼Ï’;N¦¥nuÖ0ö P³|HûÓ7¾áuÇØ+Ñ‹ã]±1=xêKS¸5Œe\ L’èÆ!gëòÂhìÕb(kò[ž Ù38¢{ï8Ÿ²™èã–jÁ³dܳëÕº‰ònhh]…ËA ŽúöœuÁá•v¡ Iæà`ÁVÎ9Oä æ[ÞÒ{Æ|3ÆK¥¤×®=bŠ~«|íèÖªµêư8¶ +×ÝŸÂi2€žÔu1…½Šˆ#±õ +NsŸ“ç_àI ø©Â"z_·$ºAÌK§åhÃ@=™:ÊAê÷ðþ·ßwQK`ÁaOºæzÚ {×·s<ºÁ +°ìÓx—(°Û?z…q±O›Ûi ww›ã…¶e4H3ï€'—/£ñ† +èþ´î{ñ[Û” Ð¿[¬r2i[ý‹Üà ” ±ê[…KŽ…j|‘[¨Üø¡DTúCDˆªT„3pŒP­‹6Æ«O¢° …§ s¸Ö*e$¯†¢—ȈQR=zÿCCÇ-K†ò+^›oyá‹5—O'zàãZ¼|m– yz ‚áe\(¥UbxŠÇ8xxÐPåÖƒåݨR¯aø„§Á{{­‡0jÊ&Q­â ;elF˜H¦–FÎâëÞu?k£æ% (V¦“bq,(v%Š/Gõ†bzW¹Y‡á÷ÎY…aî2 ™G-¿ \qžyz<Ô$„U™]s¬_ösVÍJô®Þ0‘íHÐEZ|rÖnl¾«wIµ{“f£h7á`9ÛøÉ”ÁâØésc÷oëëN¾AÅçÕæ®R(¤¿]*,5 3eWóûÑüö®”3oö#–ÉUßÂ5eócÛ5ÛG¦‹IÓ2ðat=Ñvõ ývÔÞÀCÉ‚Ön¯/äâHlÜJ» ì¼ÄlÀ#Ñ5nqKÐAF@=*îØ3¹%¶ÅbHØ%_YóÑ’ïp(ÌwÈÔB/Tïîgx±)ùâ¡ÓFs!¨¹áÜâÍ3-Õçâ/+6…ÇÊÖC£÷Ї°‡¨|øØF +Ämô>‰a®‘ðÖ‰}¹s|<ÔFSêp‰v>glK´¾ðÆØ$ +ŸÐ߆x(ˆýUÎZo[£¶9å­zöšbžØ Ÿ4£ãO£^*Žd>w³$4‹u¾¾“`ùg—ËLJ>Ø¿% ¦ùÎ7Œ‰êÈ»au:ÚO±Ò¡Lôl£›¨Ô:ÒXž:Uu\˜O?=ºDyä¸këJþ~~5<šgµq»Évy¤ùñ«˜ì£éœjˆ6…ârºyáxÓ{¹v\89áû`o£>/ë¶ß¢÷ȯt öqïÞ-÷h`ïo¨WzÅXbŠqãôýwAãJÁ„2-»â†çâið%EóNOÖ{ÿò×±3Y>FŸ˜îŠ·ªÁ—ÐÙZ0U¡»v„M“´6rûÁ¿\‹÷Šb”ÔÍKS ´wHHº"÷‘SYÁàlþ´î-•w*ï…÷’Jˆ“r%ÃÚ:Kl±ä&ϘBlœ;Ý>­ªxË\+}ì: 3ë‰ÎX˜=¹ÞM¿ð¿?þú“{¦ÍÂþþB!sQ%r–ál(üú‰ðÿ߯ÍÏ„K¡¨(¡ÿŠ Â,»÷¥›ÞùöóÏÔ„PAíµAeçVö{iç9ýóPl [~Íæ¿Ð®Õoî^ï€Þ6•Ì`­ûª(ž=2Ì)·Bý…OŒo=Qì3Å‚7„s¨r‡ >s2i G# 9V¡S8 + ¦C Ô04…À’ó ÌAý³tú ṵ́kU(ä"Ã~È¡°XûäJ,´G …¼FG1UO¡K`s +ƒÓ§Á Û +m…F݉îû9 «É#X ’4fAMn|ÐÛ9…%›ÌAá|yápÄöh èÊÎÂÙ`É :¸CÚã %ˆÌKļÛNTsºu(9f +±ìQÝ3éÿ,6‹±y“I-V´] $`\T²Ž³ Ùî: QèïÀI-õDÅ£G‰Jí@—Ll¢õf~f%¦³^C—€fç’3ð*\\€â’Õ A”ÌâT‡é‘KbÏß@a²y pPw#OÖqsL¢O&Ï–%*só%D½/< ˜~¯Zÿì”5,¹ö5“9ȘVƒ†.ÎBÂBÓ ÅH[7P¯IMç¿S¬óE“F1¼Û†fVxÿtèEÞv-­ßÃ6Kæj&ÅŠÝ,Ïr¹uô—G'Ìv劋+s@…:/9ã&û,B’‡T;ðDf Øo*ƒ1ÎbTÜõðÒüv£û T4+‹ã., +re„`\)4ü|¶3¤xØiáay±½”˜üCwdYÖ¢@xþ¯¢WÐGEA×Ñ›èIíÚ¾¬ÌÎÕ‹ô*"D4DÖNü³VŽÄhÁü09S ˜õ]¬O'ÆGí­Å›Ž”OÑ^§©ùs-“ÃÓ Š8¬V[èóQåïèAk>h‘°i•¨FìÿŠ)`l{Í“LO(­ÕD7ÈNf£ÅÔÝ~£²ÂÂÏ&/0ä;‘©»žÑȸÐ{Æp¸'^ï)Õ!öµ¶¥-¦Âj•ò£9úÙª +eJií¶Û«0Ø*`‚8%qØ[‰£öÙ¯˜wÏIŒQ@ŸžÎžó + ?jºa‡ l­½¶õø{Ÿúœs®+ñH>=¶Z»Rvœñí¡Ô_€ç¬×úr{ÔÛj<‘·pÿ~+È¥÷zI=ô&Zù¸Û*Iªœm’`›OÍ—Ž¼Á%ódÊ1GæÃ]Ñ=<Ò"°¶ö,ºK+U†ÎÖ¸ÐÜR¼ì“S¼ü|j-Sçìù4c×ZäM5_q|ÄeɈ£Î[1»¶C¯Žf¥º$[2%9zN„ GŸή Nç¼’Í–%»¨éïû ½UyÏšš³ÊÉúÔ®Oω1ï‹=]åDwfl÷ù<ä±âÕö’ò”g(†Ðj_zPb±ó¼Êpú¿(» +¥15ÖBøÏ>`½ov½0[¥Üwfta%wwoƒ‹ªžçÌP‚(²=–Ôó¸:ÄxóYÃ`yâ¿BŽ Åªb˜Â8 …ýzÛ;g¸þQîíáÆ`·ZµÄ^o)¥Yüq4Àþ‘cºväã‹ô + wѦZk±PK2®qj[Z±õ¼Cæ^Ô\Ûå5{ßÄÚ­öŸ`³Õ¨…ñ!á­ùk¾aEmĶÔÏ`xªI}¡ÓFò¥ÔjW¡rcWF•^:‚ím²ô‰!æ!Ëf jÅø©#‹T‹†]«l$ãqXí7Z´¹y³$Á±hj[ +%9rÅñ&̵¤ëƒ-DEcÛ¹k²2÷ŒH§ì™§±ÄPlÖkjÙíá •Û=³kýŠ–xÿ÷Ÿÿðqy•¯)þ:}Ný ê»0}Øê‘L-Ÿ®Ð(¿¢ô Ñ…ßPqÇ’ÖdXP‘H§ÜßK!¨Õ_UGÿáç%êzTÓ¿Âøó âYÇr*Öùè/.YPäø;ˆ¨D¼_?ÿ? ÃØZ½nV1ý†¾‡X^g*ö ú=cß3¹YNæýxÞ5³Ò…†ç÷€ÿª[?¨ækÁ<ùÕß¿»›Åóý«/è—'ýÎô ø÷RT±_Qýö­¾'w'Ûð†Ÿ/ÿü…7;ÿç7*ZrrW§ÀßЯWþynFd—2%®/X7"óØñò…Bç¹´?¡œC¡}^Lˤ›ûÓ†Wt®‘‡Ž ´”r¶³û=+ËÅÜNœÛ` wdg:ÜÅ8Êpa3Q¯ÈyQª¼ÕÚ‰6Êì6k-ô|bß9窨ÿq.ºÐZ‹ÅµXËÕBº@¹Ø²@±ñqš{ô‹Ú,`.B-Öb~4A¬ñŠKìÕO¡p~öÑ´WöïÕ]=‚h'ʼ%qK30šX}̺èžAŸ>\ŒöD‘¨»Tyý•Âç´y³àèL?é“ÞɳNUBŠ…9v¢k¸ÕºèÒ0  ôõÉ;Œ0AÇå™{_$H…Úó)}î©}f†Drwºc·Xè*<¢f5ÐUŽ˜Ò5>_(þLTeŽX»šåQü»kyÆì)þÏ<WðWè‰ +1ê;C(š·EÈóÉ@Ñ•H#”$ò?¢y¨öY·èÝmÎí¦›: þì=í¤‰q”‘O’´ðœ>œ$ê‘K¡Ú³Ó¸EÖ(è¼FûãÔVRý m|Ða·F…÷]ãˆïLð dÚE™‰ÔÞYv«qð÷~Þ¶Êe‘‡BŸÁnŒz£rÃø#Á„lÛ+»Í4@üìGëÃV(ßX% ãß#„Á¿Z;&þ颎©§ÄÛJ )¯BŸ3.•Lè+‘Ýnót<櫸û¦k0N«m©W õP(¨3¼¥]”¯fÕãVwDŽÒ‘R(Ãe6eèk’²†3­–:»‡‚QºV&Ý'GÝëTSNy¨o\m eÄ…éïV§é&Á¡(ôõ,OzêLMµê¯= +½2f¢2‹Ü:ùKqÆ¥ÕZX©<íôBá«Hä5úÁ™«­ ×§±âWØ1QüCq&|2âd¦csÚ>A t‡ñ7üo$}ͧtôêŽ`?í?Ð'Â.µôûþä-‘§Ÿg¿¢Ã›f?í7”ùçÅÛàÝè¨‘¨(C‰êå};pÙŸC•í4bë½9Mw&iOíN-"˜vJ{p-›uÌw1ïžXJî’?æ‰t8Щ³ôäYhµÔ¶ÐùŽmÇl/ØE'ÊdXµ°z‹Ë³OÁ±™‚.Gk©Ø–â…6_1ž+>ðÂo)çθB³2æGäÅ¥Vqµ³óm˜xŸ`>‘Zô·ú ª-—·Z{ZMsi¢S««ÉGÞ µ¨öÅhî +M–¬«ÉÈÎ\½Ç}uÖaKÂÜ€ÎQ>‘ÕH=ý–ÎÞzæûó½ÌSœ;!šå3.-¦ ³æ„«TX0AnË{<¶êŒÁ”6j­û³X‹|¸qŽH"¿ë0Ò™½ ­?[¡™-uKV jVýaÅã0ºÅùvdÕ÷<ìŽó7nôÃãˆi´è8§vØÓâ±HOè·è”Nkú6ÞÃŽög6õÒ¿IïWô©´oÚW8æ=ñP¬âEáòþÐ5fX쩼´ŒþÐù9Œ/Oѵv8}µXbY†m¶t%H÷Ë¢9 ]3¤ž¶á‘­ý—h˜†Æ^u+K¢§üµ1ÃË2€ÌOÁÀR–¹_¯’›–ОՋÔlH?àÖgD…¸%ýÚÇàâÆò8¬§»T_„uŽ<׋kiŸZÐu¤+Üt›5C¹ÀŽuÍmµ®µí>jƒFe]Bªhy›¡^uA'´xl‹£Ùo rãôï,”¡ÑjÛU’Ù­å¬D§iñ7Õc>™µ–]wF»äCŸÞÐÝ\›µÃ”½r‡&O-Vë;3n"E”ëyá#õ=±Ç‹S’§Îâíòû€Ô®p_Ú[¦=)R†êO–Þòé•»À@™njßMÕªÚ¬ÖBs#*A›¼†Òw# öÐÓ®ŒÑ Œ-5s¶ÑÒû3ˆ¼¹·á›c­¬¹ŸFçÏÝ£÷qÅXóëÖÇÁøímðq‰iXe½÷ý•m%Iܽ<Û\ú¥?—}ÛágŒ½a¸Ò8­þITvÐ2OØT“«}žLcÔWòúL¢µ3Ó»•ã"è:éè6T÷Ö¢'ùgÔa̩顴nÜGh)X+§:ÐIvSÚ¦½µõHÔU(~®Å¾°Ó®è°³R]?§awÊ‘mKbõ<µœÊ°Ñ§và BòƱºƒ{è´Œ«½Pyèh©¤¤éN´÷5™g{¡½§êöµ­Ö"õÍÒ½Iyòd§œµö?¾Ë%G·¤ÂsVqWù~H¨Ð ´ÄÐb@×þ§|N;ò?õêYUü>N§Ó‡—Ь,¤­²ØL™2K D°‡D]½h°’¡¹*†ÆlBã‹ÍŒÐ#<_Qdeṵ̂ӢRçYIw¶ªLÜK—èS—PŸÛ…gˆPd|è·Qâ)ÙS;CÌÑ]b‰dOÝ3„øù(ÀÉ塃„Y^Qç!¿’Rc+mïzô‘MWF9Vº@ ¤~H5ZT¶tD ¢/Éo¯3­£äº4rÓ͋š>9 µ¾ÀšW4·©B™{‚ÝF‡Õ•CG³ UÆ›E¸»¥ÜTääðfO-æh q¿/Þê&Ön¾ëjí‰^µf>“ °Tûã ZazOjk9±Óã¿eãÐ}«ù^µ…&Ëé:miUŸ7uŽöÊà¡ìr“½<ªž8V¯•jŒR(>)Ù,†9D5}_–ìn)”' 9kR\ƒU&fñ£PrÕwÏf"÷¾  ·]Œhy€J0žX¶hv©„¶ÊmnæùÚKšfªEJ%¤…ÁD¢ªïh|É2šâ¶sõ,˜(*CDS­I% nëÓÄR†,M”ÒŠdÕží¹Ô-4ËCç>C"°)²ÑK¸¥¼ÅI”\ +6“¼Îå[ÚS¬ÙTR‘Uɵ –Aê[´¸W—,cRi¥&²Ñä[Ã!¢9©Å@ùÌklžïÐmõì9i¼„¨?Úœb%[[r­Ô;{iˆUcì)´¡ Ü¯í#fÆP!×zOw ._Wi‰Ý^#9«v)øÇôÞÍc¨cèhŽåÉ©É$x Kê²T® ˆ‰¤°ªP&Üöèˆk;rì Ž”„¹¬òY×HñpÑ<Îü}*C©³7=¢°ë¯2¦iVƒ2‚]ó…jì!‚§bƘ²­!yø/’fü“B»‘ÿ&[¸¡…Þh*?Û@!Ã][¦¦—cöQ0ËŽÑ•òܺCê%´%ßõÌÃ3áŽÒ’Þm-WÆ>MÕåtw0,KJ0›‡›ö»¬Ø[”^²m/·…lûºuº<$×-ÞÒ[/Ž–«mê{ˆèÛ)pTÐÖ“gQa›ûÕ +szé!€w½¤7ØP<®,}gZ¹d¹ËAÝ û@KÕa‹î(-sEL›ò°‡@–’í×EöKÆ©4—ë¥ç¥‘Är–=‹e§`7²?Fõå€|WÙöû¼uí"ê‡Köµ+m(;‡°å€Û,¿ÔÔQýftuÓø¢>·£“4y’í|ÛCX­t¡èÕÈÍ®+u¡ —Ђ+Û‰ÛjTcâäÓ’#Ûaeî]2ZÒFQû^l–ªºo­ z[ÍuÐÌk yzó­Û|Éòí»Goº4•‚,Îb(gíšç‰^v2åê›úrÛºöÖG°,£!ZzÞ÷,4—3!%Àukr¯¼óõêíy†D.E¦£ÔÞ¤.njW +eP>ƒ¸ÅozºuúðÍÌ yd¢VGKO¡6¨ ”¢Zý”dJC ÕºU‰e÷ñË8¼-BEm·e{¼ +—ù¾ëA©Ï$-ØXlÜvVñ¢TÀŠtu#ì7£j³b q7„–À ¹2a¥˜wÿh+4ÈîõªHc‡íYé‚(¶+Ð}©ŠcWp–»oµYÂÁ–J5Í_šçf¯¹ïv‡˜ Sôa‚%¥ðÐVã§úlgK4HZ®mØp–9Gd¦–&®÷}ѳw8@óakË£¨¯)^‡ER~ÙECàu~V\ËVEGD¯ù”RH±ÆŠ»'éP4yÓXÍk¬@š±g9EZS“)ËÐòÀR ndÛu]òJ íF“{‹-$Œl+²Ä{d¬•Ûì%Ã5ß/Ú}m°4Ï‘â%v“2«Nëž‚IõÊW¨É4×½ÃKÀ\Fù¬jBïtòQ WNT z§s6³¢<Ðßß¡/É9àáá=JW1- Í0} ”fd8(ŒZE!ÓÍɳº:Ïm Â<×7eZe„¹©9Žíú³uÊa54wolC»×AWGõZ˜õ “Ro¢Cûv4Ï,[$­ƒ YúcØ ¥ê²ÑPë´,”Yâ¶Û€¿¶ÛÖSòBðn y8Ll`6©à„lMÈk™2;íÉ&¤ªÜ@ÆÃ8(C¶]´ÏÁ4yçk¢¡¬­ù Œü—í`@´W[#塜GŸ÷|¡Õ˜ÐP´ÄšBóêî·ÐÃ÷fÛ¶CCÑòSo6š¨dÅ@‹·yŠ”W: ò81 8+eÝ¢›z>(Dv_¢ñÏ>èØ{+ç-Û^tм—l)Å…1ãÝfu³móæi¹ÝAK!'­ðGõ jV¹ÝÆŒe±Ê¨Êg_nŠB)j)%{èÑ%t2–£µ¿P[ÑNÿîå³ÞºïôþA‹YšeÚÒRŸ}¤jÝd$}!Ö_È2:VÇù’õE?õ~:؆ÞíëÕÌã¦<J†®¾o9•‘’åš„2†³…u= ›Ó’xèÑF³È íÍxQÅÛ§3||Ë1¢Üoµe,P~¯ÎX¥xwŠs´¸Eæ\¡VnNC´û”ÚÍÞîk,Ÿ  ´~qršuøzb(ë‰Ó[G +ÈCcV¹ßÖ·ëjCéÌ ºJ~;šÌ=ä™’üÒέcä­x*5°Ué¬>Mïj(ùžÕ§g×þŠ!zÐ\¼Yi¤v=t(ÐÛ¿(bÝ #—Êvz"{c#Ô-[Üö¦Xe E[÷ŠvgXò[kt0§óÛÁ+E¯æ 2ÎÝ©«ÛÐYÌöâóV¾™IdW«Ü²3[ééˆÍÄVå±Óœ1CÁs³½,Р´ê‘6[(æ5ª°ºßÞ²¸©æ}˜µ +ÕLCøìКÆ-¼¹Ûb™n§¡®Ý¶0çÁ,®ŽÞ‚V¿šý½ x¢ŸxA„ad•}!3áêò‘{¶]Ç‚†ª”S}õú»o?píŽh ½iç³JI?Pg‹¸=°J{|¤IŠdÿ„B¤±o"¡tmÀúz.Þÿ)¾¼Á7y~(Nä•ÒŽ;³ q|tuØ¼ç¿ø^žmë:4õ eÊ@þÿøÿ»‡üì)ލk%/ü‚x.vÀ"ŠžZôû‚ÈÐmÛ3r¿ý½ŸÛAÿøíï?þô—ýûçÿþýßÿüøë_ÿòÛßÿùë¦ô/¿üíW~Â;ìz6ÙÅö·-M,¶ôbêÿ¢lÂÈÈøýä[ÛŸN­¼ì.ôp÷ùàŸžž2¶%’ûÛ‚wÒÃó/¦l} lšRLËκ__ì矚‹µOPBØÃãç³QeægËGLÓ'b¦Š•B³áV†-Iß Ô| +"&3H¸â”h¡ýtºº$kÊš¿CŸ ++è4îú}EF÷‘Ó”_£¯ ÿþU¼Î¾ºôÛ7—V:ç4ÿý+”÷ö¨[D'ùÿè%ì ÛT¿¶¡íŸñ|åEöŸSùö¥—ÏöÊÄÛ7âöŸŸõí›gý`‹ãí›âð|~.±·oJìƒý3ž/ õc=|iÿ!ž¯y +éy‰ÊD@·mÔŽÂu>h³Ô¬##(·ñ-*¿é÷Cê7¤ +©ó$å}Hôqx9k¢¼oÐGH_øýÃЊRÛéÓ1oïЗC{¢ÏÇ<ÑW _ùýÃÒ}8Tà§Çx{‡>Ÿý‹Çx¢¾ðûG!!õnIÁ0¶*DÌPcÇ&óB10TŸ:ð3v‰ÿ³_í8²í60÷*fÇúë(vö{†Ñ“ðöM}(%ußvô‚ÛÁsªIŠ¢ÄbiÚö%Ç\Q¿t%@«J€¶j%¶ˆëÉHÂÃR0·,ùýâjÉ1šJPUgBÑê!Tñy +X/¸rÑi½˜¦Áø‚ûb½\ú—V®Hòc¹˜EÐ9pÄPuîR.À8ܲä‹r%¹d¤Ç ½`( _E`î‚AP—i¾ºöŒðþÊôRµOÀéÿ8F}Ù‡ù˜ÕÔÖÎQ y[5}[Áâg”#<Žq_¦TŒ4bO8U#A¡‰&×ÉÄ¢¾Jˆtù)!¨ P XüŒBq_ÖÈdôþþ (Å7õ­ü „Zb¾ÌƲ‘ú(…À•Ϩâõ%“»™N,×Mw¯èê +•¨cªò8aXœCÌWÙ”pʪ(B–>‚PœCÔ—§åqçJ] kG…kÇ»e‚ ŸÐýϨx•O–|b/=¦ãîQdLG@µ0»ÁC2=£üí‹Rñ_-‡¿þýŸÿ™¹ùy“, XKÿß/ûõoúûƒŽ³Ê +SLÛŽt±­Ç)hN„ÖA1$o•,1¶m@ÑDm?£°D¦×kmn¡ý…íIWøTê ´—KÞøÖ|{–ìDE%e¿ØïQº½¡ÍÚ¼©›Æ_ô&iÎôæp¹¿¨ðÁ„¦ß} š A!eñÀ€öB9ºÑÞÖ_Hš´È¡)hÝÄ + 4‚i¤7T¼•û‡çÌ‹óÆÒc0´'J¼ê«*¶-"b%?®g¢A—}|aßÑaOOFoHÃB¤ŸUöôøJ.¶ÇÝ3û7òy'>•˜ú&Úfï(JSk“èždrð?Ýg¯R|ôíBzrn3Ðû²™Hä‹„ž9Ú'{“¬”(’ÐöNÔ]Ùåêëœ0öþ>æÉÛ§ÆèuÕ`¾œ£®_rŽá ¦ógTçϨ¿ÒÉ–9@:û%GIþSþ?¯üДùʶs%‰›Z‘šPÄHWS_…/ôfì»1iˆd«,“ˆûÚßKN‰ŠŠo9‘Mîë3ŠX}w…ú|oƾÛp!Áà“²L"îk¯9}êô¢N@çP'{_%ÐðÆ]6wÞP'Kw;¹*öÀR0‰¸¯½æu²MW«M 4÷¾P%h´¸ä”¥`p_ùS¥÷«4G}®z¨Œ*¢A–ÉKcjT +ŒÕûMCÀÕÿÁR0ˆ¸¯½æDú=Œ„ iµÄ‰„GR©4 ÖÆÐ#Ll&ÀQ–•>%9—„Ó’ž¿€N±`Èɤ&O `@a:ŬsÂ`òäLYçT? +rÄ;ýÒ w (î@Щ`†;Øóä|ÎàÏ>ƒÃk2¿zMFj®bî^4gŠm¯+As"Ô~3Å®èMUñºSIÚzÆ`M\š‘Wæ[6ŽM8SÃØö_›<{~§Þ1“_¬÷§Ç^´4jÒ]$\¹‰µÄÊer¸  …æ+QÞåÏØ¿Æð,%º.úŒË¦Ó E°õ5*èÑ\®PŠq =¬¿_,)3klºáþBSžú¦X·lÕ†åζmé.¹×óe³Çú¢œêOas1Ùê:‘d¾MʺLÄ*‰ÿR¥P(ÍâœVÝô}ÑÅh›æÓBLν}ÒVåUõaDIõ££E©QÕ´v|×»çÏ1ÊfÕ?D9UŸZ*›T¬¾ý.WqvG}û·üõí¯’@®ÌÑR°nYrÏãS®ŠŒ³›ƒ%5îúxìCmýf/n á7ž˜Á„>;£jzÏÓÅ %bÖœÒÂD‚"IÍDhyþ£ìÕQÒèzEAŸ°\~O†E«ù-ÚS!3ÜË…ýž;›¡ý‰W§lz×0Z-·´Ý3¹Ýe2³¤\Æ2F)_¾å{zíŒ,ÛÁèƨ`5Jc8΀JuH@ÌÌæLÂj +á2m“X¸Þ7dÐÉ”Lïv&%4  ,b#R„ñ»îX ˆP F`±3º&ÜH¤ ¹½HA‚"I„_Q±×[B+2]h"btZÊ~²ÑW\ÞŒ«¥R\ÞŒ@qS½¹úÑÐ'Ï@ ˜.ÃÏ‘ EÌ_6áÐ퀈†aÀ_b_lQ 1^ž_0¢&Š˜¯Áu÷­Û ö%×T>õP"Šð´Ï- +Y­Ì9µ~³×&¢p×ÀÜV9¢ÛL ƒ3Q$ Îĉª™8#l3QìiGÄX·–RÕQ¨ôúÓë1ö„Û2ŠÿÓÆèÎIÈ +{ýÊr÷ß9 íO<:õÒÛ†°·Ýûòª\nú1×QÇR}4cÜ;4½ŒzéXÀFO[hwòãW$.3§>6ºÌyéOÀz…{‹Ë„ç_€ksÿ~;ú:è ˆæŒ.Ô2)Bd6R„ Bâ¶twcš}ÁÖŒêtµç Q"ú„~ü{*ñŠ~&ºI(e¿GÙé +)`²“¦ŒÝDÒ›ùíATéøÏ¤Uò—󼨔 EÌÄí˜x3&‚BÌXûª‹¦H®Ýæ¤5ÅD³£™u‰:¦”X +&÷µ×œ>:Wh1Âïe®Ñ{QÆ4Û¾›Ë.¼xBÄCØí©i)"YId²’ ÈJA³Ø×-´_”Øš¨ŠR·OòîÖ+ú„ñÜ{‚+Ñ 90£ƒ)ÆØ£€èP–»ÿÆuÊþĺ,™Þ7„½íÞ¯WJWÈüD4\Þufìwqýf/¬€Èi\À¤»­nÑb˜ÄÂõ¦&ÁÆý!m +ØlçQØÙò"DÀF0ˆµ6û§ÈI“ð‚Zz‚"ù‰,R„2e‘"A‘P$‚&ü…î4EÉKlFulê‡ù•‚>!+û¦<[iê$iVñs’mÏm„¨<î}E .M3+ú$CøÖ–ÏäV6Tq­$:„2"_QÏÝ€€èã‹ý—5VÝPFx­EŒêtW €ÞŒiÝ –‚IÄ}í%§O1`*Q¢†}0«òàTžMË÷ôÚ¤Oµlýª¤ÏD•©QB‚hFt‘i8W…9 +dwF×+"SÉn©E¦’¿bªøæCÒ{ÍTô½ñÀ°AŸ©^ØL¦¡!x`*±¦R–»ÿ“ å{±|ÆTzmÎ!`—æì€4ç0௰4g–æôþÔœEÌíÍ91Õœ`)˜ß›sbkNŸb'UM°3UÕ^ÈLÛwؘ*…˜z–&æ©»öP˜¿ +IFæöta)Ru–r÷‰Î茰åLö!yaמáDuÞ¤t}Z²f쉖2ï=üh‘Þÿš§ÝXfpÁîOaƒ> ͉ü8{ý#dŒ¯rÄ^épåb“çe^±õ›½pwÜÉòZÀhT =,”ñ+ÃFÿ–RJ÷ÊÛDz °Ù“ÍúVÞ&`#ÄZ;ö7Û.4> @HÐâgt%+zÙÁÌU:3ôøûå’%; +Ñ­ô +|üŒ×ó&=è·ÿi ƒ¤„}¼€œUFéC’p „¤’T*}ZµsJæ¦ÚÇ™¨æqÖÎx.öi&ڃݹ¾Ùš &¢[câc•¼ú±J„ŒE…WƒÑù¸ži<Ø%[ÿÉÑ_ôÕšQÑ]-­ ŽVÖÀHØ Vìêl}•~ŠMmµ¤êWÚµ )TŒ½ýš~;4ß!™_±W7Ò®eÛe~á‡MLFPaÕæªŸ’ò2\’G—á’ªÊ%ÍG.Þ¾Jbó$DµuirOS­¬êœyçöƼRå§á-£¥œgPÇÒKž1oR…ã7¦•‰U´~î(7ñ±JŒ‡õOªŒø\¦ëªo™w¶_,µ ÷w|ØÇÅ¥Ÿä¼¤Æ\½ã¶ÊqŸÊ‚÷Y5½ôšlÈ×8½©TŒ½ÿ„ŸJQv:¹×•ð>«¦÷Ö„(+Ýî¯5R4¨{û5ýöémŸÒRÈm–(¥P­öª@ ˆˆ<Ñ|Ç¨ÑÆB_VÛ±jŠ´³úدb +ôWI€Ÿ«û€ôŸÐn£Ý¹KËs9&´c•¿<½b¨1>VyÕÓ±†Îïõ•›H»X%ÒÎÒÑ«´£¥Ÿã„ߟËr숶¹Ê¹c1ðµêRñ::ÓrlݰŠZ^®Òr0›5º7ç:z`¤jZ1öþÖDg¬-èXŽÜwó–P(ƒ˜ÇZ[ÍÖ6„QÈ5‹+øíÊØ•rÑwíOÄÎIŒ?OG:šï¨£át<é÷vC8«¶ðFrÛOEÏ3ö 'ÈuòÜÁ„jÇ7—7˳¼MÈaÉ#uÄ`dÌ ãc•Ÿ7çÕžéõ¥r¤WÞ—•_7½®13-§¦ªä†9Há÷Ïnç «f¶")Ë@ô#÷4¹× ?#‘ iÅØÛ{&œ~qA« y@p2©Ú(çZÆuüöÆî>D™œS$™ˆ2Í&ÌPaÞç:ùl'ÿ„gé›K£–ý{[ª±\—‰U^ãAÝþ þìce¡ä`[Ìl +êçGžåqBÏr?ó—#×\åÜàÆh)+¿¬ÔcˆŠÚ±l'vŒãà´Pléì-òà• QQ;Ú¼´K©ìŒOZ"6ó‹øí‡u`8ðÄüà¼cÑŒ;ÉóNÂéH¡ªu`¢Ú"t¨s±ÝXr̩̂)Ÿküìæý„Yù£«ã&[f±Iaô/ÀÄÇ*Ñea|¬ãaý“*‘__êOXv-»<+óÙ¦šåÕDºSâ†À}U × ´~!•ï«Îÿ‚Š-!Àûª@/hý:š¥ôûªÃŸcTÐB±¥_ÊoWt)jÈ9bÈ‘8"*p4ÛGCé¨Òz6û"Õ– 3,T) ¢gL|PaÂç:ùlgý„eå›ÿ¢ =ùÝ¥,5ø)«¼Æƒÿòì«¡ó{}¥"²,V‰,³ìóêËèWaÌs»ºïVv=¨wbpdt7÷ƒ¿¦¸ QQ[‡ÀlÖŒHÕ´bìí¬H»¤7/ŒµmYëýª2?Q×Ô@Ø´VìêWóÛ¡éaB(‰eB&‰ˆHÒ|Ç$ ogöþ‡qm¢š"íÔګ颧{Øäê?€˜îüæÖè–±ˆâˆõ/ƒÈÄÇ*Á}™øX%ÆÃú'Uá>ÕŸ®ŒÁ£ûµw$"Îæ*çÆÍ[¬~Dïhr7!n±M+ÆÞάà-Vc¢74¹žf#å«CHÕ´bìí×ôÛ§·}seÐÄæÊID“æ;2Á(‘Šœ¶2‹¦2ÝöÅ]eUóÄ;€^!×Égp òÕÞÎ3oæÏ¼ÓzŒÏž…:O‘bgG$f†wÞˆÁœ+4™PÕ&T:Ç뀩”oï}9þÌUÎ_™/¢>]Æ¡_2H⋨/–¨â:ýñ;®Q*zy@“Ùpõ¡‘ªiÅØÛ¯é·%cMä#¶u¯†P‰^f‰Ž)J5$”f{BÉk¬K2IÕ¼æDÄ×\;׹طœhžO0¿A…yëä³Ü“÷ÜúÍ5¥uÜnÃ'Qƒ;2ñ±Êkñ,mt&fײíŽYQê)ÁY‘ÜZµ~BT´ôuJ[NeÖ¬±ÐHÑ bìímW?]ÆaˆŠã¢#î×Ä8 ëÔŠ]ýj~;4Ý!y‚ÉkÍHUE‘¤‰ÜÎkb&ù¢Úªt܉Λ­«¢g¸Paúç:ùl}@dܾ¿0.Õ²„Þ¶ÇàÂ_£ZF¤ª7â¯TŽ·t›åsä>Þp6¾Ä5Ü¿ÆÄLé¾Ç[¼!ZºŠ€2-µÞßS¥}ŒUúÖUêÍÕ;—”Çøƒ“”êIìëÔ“*-àN¡e¡¸—¬ýXÄmi±¨þ§Qê¤Ú ƒŒMXÙ@ºÖãjc¤hP1öþŽ S'ÕHÐ'¸&¥NªŽ:,@­ØÕ¯æ·CÓ:ÅF°K‰A:õI%ô +Îoœ»iŽZn±ªœÛ‰âÙÅÇ*¯ñ zÚ]¡ó{ýâ󑎆塻ãœ6­K=ú;%]¹í¿J"äå*m2aktB®m¼K0R5-»ÞçÄèÔ°-%ÑÚ†„BÓóXk«¡WRê.A#Uå\˸Žß®ð®è¬Ã!Ú±Hwïà\å +ãà^ë²Ñe©n~U1Y8ÀT… üÓxêJÿ鿦Ƴj«Ðº©ãå:ªú¯#ûÔ Éæ*ø„ ßÒ7—7çà"©9z¤20o†6–c1FA‘%v¼‰„113úµ/ñO~-ïËz2Rõl^cÙS8U¥BôVÿúÆ[±ˆÞªÕHi˜6ÉÕùA8˜Ð&¨x0¥€;—°m@0ð$BЄN ÿ¡‘ªiÅØÛ{æ’„Ncó¡aC…\³¸‚ß®ìÁ×AU‚#°æªåú„dù›SËiPÇRŠÕà¼L|¬òêä­û±rúÆL`a–—m~xyj‹²¬üšVC$Že+8¯»`\Ǩ Ub3g9rÁ¸QQ;Ú³K©ÕZŽQA Å–~)¿ý0.Œô'•l×êr3m®r…èÂpÒ©ûÁQ'*Î:­fÆSWkÕº0QmZw.®kÎáäzéŒGNMU7ù'ô*}Xí›ÐˆIñ@;V‘1–[O‘Ây_ân&aLÌ þìSü£?#غ‡C>Ûݵ's"݉Þ9áa£‡ T=L’n΄Rÿ\Æ(Á,š +´,~ƒ@¾ªþŠ©ËPÖ9©Ì2õ£‚Š-á@–©ÅPÖ9e–ÒY6üŒOZ"6ó‹øí‡¥PTå7òj®ZªO(v~ó`e% •D žÊÄÇ*¯ñàÁ<ËNþbë'Ù4¤p¬‚ÄȘÿîÓ +ýu𲺠I„uÌc͸ˆTMËŮΠ”ý>ÅQQÛ–µÞï³™]36"UÓŠ±·_Óo‡æ;$#ôê¦"}ÍskË0SðA½Óƒ‹3SLýŽ1UaŽA?Ç$¾µ¼ÿc\œ¨¦J[4ùÆj;‚ê{†!@ÎM$ðîÕoî­ä±¯Æ½Î(Q 8Éjà’á^¬,ƒ‰U€c&2æ'÷)þÉÉ•²¤“ŸBªÒ¼Þ;4ñ€ÎU®à].5Ux¸@ÅÃ%ÜÙÒPKªqºÊ¬ÚÊ´hyîHýÏ”S×¢dMÙÀ:µ/©šVŒ½¥AÖ©}Q2&3AX7¬ „ AkÅ®~5¿šîbNæHJ| ݃ +s`¿ë£ïó$›y7ïÂcà³'œ²ï¹šò©Œ™È?Œ‰™ï>î\ÛÏ¥¥r.ÙŽò[°ÎdĈÀ%\oH®ñ[ZCÂ*juTÆlÖ¬!ÑHÕ´bìíÖôÛ ˜i´Ð•ßd0éÎåÚúô™6U¥Bðh-þž'Æ£‰jS«’RwnZTïÑ`ØAGv â°Ó +nÚ–`úƒªs±4Wíô¼Ú^ýšþlÇayõ?ûå’æ,¯áñp1Ö“Étïzd°T%ÉÐùÆfIE–/±^•å{bQ‹á171ø>WÍp—m£q¿a ‘ÊÅli®;F-Å—åõݾM¡,/Á•¥Æ@(¡,/!”å²ôÊÒTÖæ\–¦¹²¤HhK.KÓâš¾‡ÉB;Œ’ vht£–Ĩ±¬gaÌø%Ô~T^4íÇiËpˆYR²èh¨!ï¼e[À¾+‹©>·¬sÙBfÕ›Dï°Iòv(ÔW-í—?{K.[«÷–tôQ>P$±LUâ‹qê.Ælf‹Ü"}šÎqémxs÷\^ÃÖ¹ëétp×úªf€Aœ§qYÜ ”‘kYfw¡Ñ ¤ÑáÚc®N(­p÷¯ASÝk°.yÝÜ[Фxì +&gyŒ'Yu¤™Ÿóo©yc’š³dì1–rÍ¿[k@Ÿ­§OªÏ‹½}(¯váI•ÅÏ3™q}U3èÁbÉû°/íý±•³Çm¤²¶ÇV}Ví}óÕ 92æ¹ßiMrÝê‚1kN‰…­eæqªÕÕ<Šž“FBké”yß³qg³ÊsF®î+@é%ø¿U %¨ %dP¢x¹­òËyÏ"÷½n;Ì5O-Idp}•,DÆÞú™Û['Þ:uÐÅhá1Ù¸0Tòø 9ŽÏY²WûÇøk_ñÏx“~=ª '¼­ÓzuUË{§ÄŸÁ÷NU]ï¬YJi}Ù2Ÿð@®ÈŠ™4+zMxPda* Wž5º"Y¢«’I°r§qò>ˆ„ÖÒ…)ó:¾§2'ÈHÃíd¤Ae¤!Ã=ÒÈJF€øÕW½=È`Û>ós«Î®xÓïÉϹÈ<>Aq Þ È­á©Kà4ßõáìÝxRÿz® + · 6)€z„G@X_Õ É·ÉuõIb*kË0mÜÏ/Á¹€DyÊ`Id‘‹¾Ç`BLem©ì—²ïÞ’h $ÊSÆ¥|OSx$n‚ðHÜMuMÐ2¤&ˆx¹¡‚°Ý{5S}–ºå-̧Z€›‚µÂWW ¦ Cíõ¡[ÓŒ +5ýž!ÅXÉã“pXÉY2Ú8>gÉ~ì_ãi§,ÀîæðB•=I'ô@ëHçÀ|8TÊð ¨@Ò®2¥¡ZÊÍ0´ý†y²`¸ˆaP{¤]êq1¬‚Æ@@¢\I7žüšÏ2™` «0?kËëF=‡'¿&í~^t æBLem£i­šó' óÜÁ¢ÔOçœÎ¢˜ÊÚ4ŒûùsÇiΨP$4dÌsÇ5}ÏéáœÈK1¦à¦SPSÈ0…øz…Ï_œ§3Õe©E ›ßýŒ¤FªM I=a®#‘MÈØ;ž°wÂH1£ÀÓï cG'ÒZ“‹Ìãö\|Î’üØ?ÇÓ;YþÀÞ6”—šW¨eX拙̸¾ªòAQQç I³R¥ÑTÔͳ LäʳÃå Ââ#ÍŠÔ¿•3œ EBCÆÿÖÊ$40í¦9 +K×Àä¾D®n÷nÃT6ûðÚê„Ü­U󶑦Qư­Ê.öw¬z¶ñ/`a/K& +XØËã•my|Z ùµû•ôã9ÿƒ¿ã´ì^Æ¡èæ4µ%~»ê^ʱµšáHhš±7÷;üð0å8†Úô^¤²¦Î„GÃÔã5låjRˆ„†Œyï9=ÓëÜýáRç×]*¤E(CbˉÖL¬Mb°¶‘ªF%vbÄ*ö\àRW NìÿìW¹²$¹ ôç+ž)[ÁûpW!™ZcæÊQ(zý¿!ð‘<ºF®b;ÖØé|8H‘HÔ[ø0éÇm­eKïÐE=XÐ=² _øÌ?1ßÄdè¹[šG¾e²Æy'ÿ=²è³'{ÿÖòAɹÌou~áR‡×9ÐéuŽËëÄ# lF0:è-zØ,㈧Ü÷v&mfzh¬uÐOTðX +ÖÃ-)÷s|j3׆ù‰M¸¹ Ñ/U"¤¥™…†jHäÒÍ4cí¾•B\15‘s‹œCtŠ|`7ûÈnÌO³Æte:ù râY9q÷Kæ8ôÙòNŠî}Þ³½ÿ•–“€¢Qʇ±zVˆ‰òÀË ’rW` ˜DÜsßKÉQ£ûEL”‡x£FQ—s“Y$Öžu=ͧBç +ÑT3íä8!)Pœçæ ÑiBŽÛ„äL3Óñœ™NPd:‰°2Ð*®NêjÐÏ]4W½'aœt" `_o¿œcB¸3…'Æãò[“Á˜?¬ñïvÉÉ~Òíë,kb÷ü9¡KüäFfˆˆÂö¬Îfû=Ê~Ïñí}“÷u¿8ù°Ô•]'Ïnã<)&°Q¡üu²^³ðtà¿—ßAAµÑç˜eX÷¿7n U fÜhù +ayÿné3WÒSýú—õ9dø9|ØF•º›°×Yj±Õ¥thµš!_u²OèˆÀ„B·×ÊÚj¨MåIÔ»ú¬}!JQ¬ þû×4÷çÙÌ~žÍ‚âl–é-ÕÆþ Ê™íÐŒ"f®äÊ@oÆîBƒW4õˆ%`qÏ}/g +EµYÑWÏ!`/ڙЩå‰7În@²dZÓJÒÒ‡ÀÝ„]#(ô‡ ùÐK€®]„æ¦-ÿ+C434è5A©ÿë%ŽÉ8޽Ht½&J;„€kˆüÏRæ”ñWºÿˆ~ÿß$B¾o\$8ú3(báÒ\+pWIÐ_Û ö”ëQR_îÊQèö±À(báJi9JJõ(ú +ŽÉ¿Ú ö”Ÿª¼­ŠWÐÊäy¶yG;Ü6Û•Ù&þÓlÛw,ÿ´cù&Íè ‡Õ±4 …8ìÃnÒˆaÆxõt2&úù…ãï‘æøëyÆ_4õ;)âçãÐWÄeéàÞ ævC½©}°­aödK{Ø^OþlÛè)J··®Þ}%C~w1„¸»7['>Uçñ‚v±9x²% Ê\ß» +—­+ÌÏæ?~z/Å~ØÝÿÍ';ø¥úÊaP·W–F4ùŽ.#_¼¬žFX!(b¼2 ·,>r´L"î¹ïåL²\øh{,Aã8÷0/>ê2ѬkϺžæS¡c…H,:i žFh$À•é…èà? l QëÞ¹:eQ[#ƽE­—VÏÔ-“ˆ{î{9SWë…袮ºAT%ŽN]­{›ËœfþÕý—kâO1œç—ˆ\((rŸËûï•i¾tõMIÆÜ·æR‘×°Ø' F¹m#ÄÓ˜RvnbšJ3÷Æ¥5†óÜV_™Úºi~C¶¥’P¨2­„P—¢ á-ÊÞÊ6ý$Ûˆ˜zÑéó è:QËìÌ2{þbiÚ+Ÿ|ø“ ?ú‹!àŸ£í{äöû4o! µ•åCgfú"FO6”ÔèÍ=w¢ØÎô`)˜DÜsßóUè’Yó™3ý@#îNë™+gªÍ…fX{Öõ4Ÿ ++:ûLìR:?ΜóBtb—ae—Á;&{i¿ÁQ‚¾&4AF‰ èÂ2šØ‚ö<¿° Õ.å>9¢#Ÿ;U>›"3†J‘+?¾A—¸öRìeAuÐô–u"|Ê=Êno þeµïÌwðß#Ãfò`?ÎøÆ~ÞO40ÕåÚŽµ<¦MowønoW’Û+Ù.i„%Š˜ºr¨ò¼›˜,“ˆ{î{;“63m4]¥Vžâ1&œfè–dû >U1 ‡N<7Ørâ9@‘ç$ÂÂsƒw@K 4pÑ•T}ùÞ× +S­©¹j`ɼw\í7‚ÐàË9ÿÈrªgÖh‚®,'AVÜ£ìÜ‚¬¸GYí™åvÿí$“Ê{’³½ÄÔzÌTó«”6?°áëßõuɧ7EÉóü h‚iBÓüÁÏ舰(Ô^¦´ ʤˆ–ÂO3T=“Ê–€I¸=뽜U—î+#*%ÁDN‰7¨.MÌ.ú 0‰¸ç^Ïô©Ð±Bd[¯Žƒ]+ál(Ž÷î¾ÎöûP^½ Óû¦ÀÎUÝ|D—W¿³_OìgÏ“¤­¢ßy¼–,³^,þ°ËövöA­4§uW.œÝMºñžÊ^º»¾„ÃÖ`±ˆxµZsŒ7©Wçû•óEUq[ Úé!^>|µëÔÞU¨TKÔÿ*ûè·T®Sf_*|YMEŒ[¬ùñ¯»-ôqÜd#Ä‚_ã¦ëº‹©&­=zß®i2 E@_¯@‘_“?cõ¥•6J|òÒV¦.b x¹ÊMµñøW¹S¬"€˜ã†¬ãJVÍŸk €EV¦-7ÿ*¹ÓønÃF0ˆ…ùî?ó½EJÑóV‘Æ@©!Zön gtD`ÖòT²"}«½ç7êè\Æ$@_ˆ–(4'ª0“€žg†U3Ã%â|_‡%L— ±¼ªŸu¦çbo{âpi[þõóe·Ï—£ášý6“ÞG^ý7ûÊý'¶4}do–cL¹Ç_Ñú0?\Ö´u¹$ Q +FïBîƒÊˆ ç · ýBS§¹”®«2(`£Z1¥ß\*Ëd•/`30ˆ–®c„»Î¥¸u`££Ú ¤ë\r[×±ÂÒuŸ|¯ÍÆôbHóV¥#ä °ø/ÜO›A9’EA@ùØ]öîú{Ø €£,™îµ‡D(Ÿ¥•GPÄxü£·G¥sn2ë€ÄÚ³ÞŸb,ňžw&˜v€Â\sôž÷è2íö‰óÓhÃèc–(^å1ì°ú²&˜¼ZvÿݶžC”Ý>ËÎxˆÂöv#²ôa”ïSAL½oU¿Ì®æÎûK©\ÅìùvóiçHÌPërYØ0tt_P¤¤g0ˆ¸ç¾ç ¤Ï[ZÒ£zLTœ ô`(ÓwÑŒ‚AÄ=÷~¦OÞ×)¬ÓªÉ]@= \AQàŽË +M¥i?3ó~ç핲ÕvÞïûøOûw›Zÿ‰(*{Ÿöß¿d=­Ÿt¸×ƒT+õR7ÇU£ +V.™¬2o-iÃÊÙ¤‰ NþÝ>¨AÞh¿Gy´tÑöo쉟iË{|fÅ>Uç¤Éiä)RÕ59}»jrÀ@“ƒ÷¢É%ñ ô¨Úàäñ.@pZ ._ITDÿÅþKŽ{NŒòÀ›+úÚÀ2Òs¼Axu%W0X +&÷Ü÷§K1äIã¾B|bù7ì‚É. [ 5\6M… KÁ âž{?ÓØ`‚áO"[‡`²À™`ñ©}žaÖˆµgýTèªÍ¢u –wíÈ}Þÿ^ˆâ®'Ö]Ï9–”¨èEíîÒIç úËÙæÏ6¯-e Mwµ—2±r±×ž8è Q.ç:  #oKþÇß¾(³ûª9ÿñÍ~ýøÏÕ‚¾³¢ÿè–¶(¦t9Û¿×ןßþòßþúãßßþþ㛬Ñ^ÙzÕ²y­Ûܧ͇Wv€¾ŠJ(¤¤]½Mg›üË— +*D«­À1-f¦œ¯ Z:Œ²vF¿—;©¯ßh[St/æ õ壹£)#£ƒj7ûãŸýflÐö@—c%jOƒÍ5·¾&[j'íbý`+è÷É:׿«×*hŠås‚Ìtÿ9Ñ]JBÅŽæD¶?WkjIÄ.½4U£ƒTÉØ&‹öÉ¥Žþ—òªK–tE[™ Ì ÝÆÌ6º÷ÿ:‰Š‚U7âL?UçÇA~6+&¢#KªQãç´+¼ÅéTì‚ÇŬ½>Ü8˜¿¯,÷67’¨—°»×hÐBºxsuª£×蚢ȬÄ0<èŽXÐp¢^󙸖ù¬]/>3|‹DŠnê¾Al¹õ–|î,³³Õâþ¾¬G úº. +¦D¾d7Œ—N\xµ ÞmÔŠCÿL´%š‹¸iÞ–þ›¤©D€*zòüKÏŒ¼*Œ& vþ‡Ž¥uÆ1÷iSš©ë¿öJëäÐi©2|ù”Ø~aæÉiÕ-ÿ?žö&iÇe¤Üv\$]VNR–Y…z +6ÊK¶ê 04‰¬jé9ó#«5OÜx£[¯RFI¢Ák½ð˜/ÅJÞV+eŒFÞn ¨œžŠ1>vÂjÊÄ{³ªbšKÏsÆôŸŒE»n4êkð Oε?²pn¤Òj²X:+¼í’6êA{â¼ + ×OÞh¢Uòè/{ÿIÏŽM®;=†jÐŒ•v*²ôº’‰ý†Ô·t Ý™ Çâ¹hÈÆÑP´9 Î1E˼dª†n#ÀkBcDY­3i­˜ZL“ò8ýéÜŸàÄEÅX§õEžý×OŒLú6¾£šR.OÍ”·§`Ó•tl£RÓ¨K<*t<²è"GÖô"ùTR? AÞŠÖZ“ªCÛDQB—[)Öƒ:Yêü¡·àµm+Ãÿñ\§ö‚Qí‹ZN…õœÜ°ŸÅºÕ¡'MÃ¥Ö¹ƒÓ–¹@Këy£$Óa¯ië¦!É…JÂd!ÔÅHxS³:‘¸[§„Mw…SÊ4H=áÅþñû’Á.†Ãn–êJÙÚß Œ§M¡¥¯·+ +sMKU›ë1AÒ›¬Öm”ö¤€udÓ {M®tzª;AÃng3ædR”­»4¡ø·PL +tÍŠ^T<µÌ8B0@ ¥lØË{æÙ¦”G/€±>žtU¥ž&zmø]b0ñ56ß3ßÛl»¯‹Dö–¶àÝDù·Ãz®yMw:~Çw°H­Û¢’ÑÚ@¡³ª±UðKA‹\åÉOŠÖÊÆ#Rêd»h?jm‰ ­d‰]›3=Ïä]CÞ–†Z¨¶‰·Y„«â)›LÀF±äU3N¬§äŒ“ö!›ÀÍ9–¼Z™)¿˜ je«§ä‰Ên¯mRWY2ßR³àHjŸü¼hÁðâ_WAƒs²« ¸*@p´ñ=¥VhWAçU9Ì©>‰©¨K ÉM¢®”5.ºÊ93n¶X¤eS»WQœ–&Kc^€ŠÖ»íѶÈÝÚLƒä» î!œ8 yŽ5”™äA¯e¿X§k ëtsë4¾å=Eæ®õׯÃ:‡lÅ@ëq–kÞ¨^CK¶fZv­2¾È2ç½(x½°m¿†ºM6ºqþ­¥ÂÉ¢Â;-‚wzÑ àwCñs, Y °ÑŽ ¯ùv6YxœJüÈê¦ÉKëñ ÇÍR+TVÉ„@¢7ÈîŠ2„×Jpn‚«V‹ºgS›¤ñʪ³›±6xÖ|u¬+)XZ-äûRÙ*ÝBήKƒí›á²9©—¦íó²ñ^ÜËFÝø¼lô½ÏËFmû¸l¼÷²ñ.ßËF£óí²Ñzø¼ljúvÙhŽ?/_÷² ²ç²Ñ‚x/›cA¸l´H>/›Ómâ{ÙøN¹—CÃe£Å÷yÙ8ÏÂesðpÙ„l\ÍåÛeãÓy®WiÞˆüí²ÙwÆsÙ§? —CC„¦_"¬Žƒ}íg¨[›K“Xô½‘¬­U Þ b)}a)%ë>£A  ëTê³–ég¨y«Ì˜ò^ +7Zr’½Ž®óCA©³ÿ±wZD´ÿóÞ/[M/b¿ÌD¦Ô(P·Î½Í9z÷²ˆ—GëÍr|]ï_,ò ¶a䔞Á† ž±áfÜ ¾ðŒÎíÌü!Û¾ð lIghÑ8{Ñè0æ³éÑ`pïs- +} êDc{’«G4®BÑxÙK4®Dј‘h£o{Ïà8Ï{ϰ®ß—éžE¦¹hd+½È4×µÈ4†G¦ñ鸚=z™Æ'ôÒ’ªiÕ`ûB5UÛvïÝ—j¼×ŸÞEª¹èo¨füT*›hÎÙ寴€ät)þPý«|¶X>]4&g_Òu[Mµ¡«žVS2ÈRŸöÁþÖ{á§Õ@qhµüÈ‚ Ðjåi5PgIGÖZÍùáZ ²h5yZ ËÔÖVmA~:MPÜUêÓiòC_:ÍB;ÍËÞN=™žNÛÄFCÔ? œŒF+O£)'Öûþ“žØh†i¢ã§Ñ®g±Ñ\Q9Ô'ãjöèm4ŸÎÛ/½ù|^z‹ ½ôæzùÍ'ôò›OÒå7ŸÐËoAöð›K¨Ñ›Oçå7ŸÎKp>—à|:¿$(Ü“ÎCh÷ ιîààB:®f‚ =´¥É—L‡Ì¶]BC>d (îl(‹â‚ןÞŠsèo(®ÁžKqÅ-8¶¦E ¿”Š7äÞêú»Ú˰¶Úë=P0U5T¤Ìò°7þømDe«œ[„m”+£kø¦¿Î‰cÔÙm¶¹¬Ã§a™£qDõéö{t†Q™9QÑ×r.s˜µWÅÖ$N2]ãŸúµÈXçuù6?l®'`XÛÀUð=²M©úƒ?Â/üáÂíøÃ¥ÆñÒø•?Xy…óÃXùÁ¶  à»|Œ?v¼wx¹ËX|Á†.ò°×#yàrk:V"y ³ c$#ä![¼ßÜDê¸h¤ŽŠöü¤Ž›óÛpŠEÊð¸=z)ÃçðÒ€k÷zûÉÂéÙŸ´º@õ¡ ïí§W‘2.:)<aÂþ–ñʘ䡑Ìm¶9wœ;3WICŒ2öwXÄ¢™®ywA­³µ2xâd¥ƒªʸD,+@ Š"®R6Z³É–Ö‡Õðh Ɖ"—íĹüÚ%ž¥Ó¦Ký‹K ²Å ƒWN&¼‡åu»T`|žhO×Q¦õîÔL§|SŸ`> +z%¢GT;ÊÐ^ú¹z +éÒ£vé˜ü@aa.OP,ÛÉP(‘bP‹i¨°k£¬+ØB‘mø35tMüŽuZþòO{Ñ“‹X”¥™yôúˆ]†zKÃìŠ1ýú ½ú¢cá…o­Ž7ˆø+Ǭ¡ãóÝ,ÁQÔŠÁ‡ìï9üçk‘ý¶hu X³h‡+Z’åÓjèÀûõG ÛÖž§õ×™PWTÍYì)$€øæ.q›qÊôØfÑL¬¢\›¥°ˆ†ïw¶ƒ‚¬¿Õ®ðØ©" c𑵊ƒe0=§©(Ò£^ÂèÉ4´D:Œ4`R“­ÂØç&q%% |:ÙlìqXõÊ(¶÷ö²Ò  ßÃ^»öžŠSߤ%‹NJSƒÆÄþ´z)ºH¡N¾Ö ·‡ÕKN§`N + éXü¢=«÷›™Õ³@unYTªkÁ‰àêY x¼Žk[aH#%ˆžÙÔžú&œª æž?®EÙŠ‚('1¦·êÔå±S²Î½@©úåU’dÇn¯â ¸ƒ8­áÅ_9Ü>†uÿ­3I€«ží]+ŇÂHwhcÚšjY¸ŸZƼٓ]ï©„w÷]5[F-äz`û³™µÑÔGÈ^CÔD¬öjÛЫO¶åŸÇFmëʈñ=^s‚2¶§§°…/Oé]íG¼ýT³O!1ŽÇç2„1äöáuÁx{~ÏÐûƒfùGÇÒ’÷ñõK¢;¾0´â + ›óÛçtÚèô8ö‚×Û…­/4»{Ô*‡e)'±-uTÞ‚C T†¾m˜#ewwp~Ïm÷BX6"î Ñmš`™hÂâu ²rè¿—)œúÖ£dµ›’ÊBæ0‹mÇ’¡ºä2è}Xa )Âõ(æk2®Å2QˆM¶QÏghûü8V¨lhm}:‹nH61ð….Ó¯Äõ=šiDE­˜3 / +}(9?~¿  G™ +5Paˆâ`œ©ý Ĉø/Ù“aÓˆÿŸÂ\èA£ ƒ‡ÐλAÉ•Pá V,¯UÁœd2–[~ö£pÊ6wôÐ04ËXªŽ—+x÷¶r»J³U÷¿ËƒÂ¨fÍYH'’·:ÁÂÂZ€áG#¿^‚&\/«\Œýá@ÿ‚Wo_¦Èóó +ë<õ)8f}ºŽ >µÇ]_…g½ž nß ~^ûç ~7øA¿ýa ¼Á‰ª nÜ< þ¾ºÆûqPïDZìQôÚ[¹§b=¿7p(Ür^4v]¶ýÛÐjµnBqûÚT0£<|°èîÞ?èzL"§ÿê°<œÔ§Ñdí¿Èsí±ˆàÖAÆ]Ýžõmz€ PÖøz+u˜]»ÃóK©•VuO­£½PœUn ˆ'@Oãý5 ¸1›±”ÍTÀÑä9:ów›k›^/­£/£»ù馘ͶÜCZ«vë=Éã-¶¸ÔŠ)M„J§G¸p!…±®¦È—³¸„zŒ;¬Õz|Y(ÍW›ò¨Â“¸Z²×Ö!ÂÈ›µ$®õ:péZslwlDC#9}!Ü[ ‚¶ïš]¤óò\iC3¹KÁgðóíbs_ éªÌšD®©#ë-Rm{DÕõ(ˆS±«+¼òDÝ+sNµÜœfzb,ýñÁa.´°»•âP(‰z5ê°³V:CŸeÏaŸµzÀ²±œï?Ê£©‰EËc襂óúëE*x"»UÐðK¯bËÝ*x•s+KÿVAø¡y¼t}4ðŠùÛ¥ý‰–¯xöŒÜŸ{†`5´Œ8õ`¼ML$ò»Yãn²LÒï»/@zù]Oz÷1å„c½_û…‚…ß2wÆTÆÛh¬%ì•ͱÞ"–§€ÉWEãîýi2K¾zcïܪX¾TÑ$eåÊryKÒýråÊÛ<úí¿´×zûÙÑc2YâCúÿ’¢úí³z”ÚW`oWµüÛ]XË”gÀï›+7«žÒk¾ÞÒ‹“âƒô"1¤×åðz‹1]M³Ìn¡ÙôŤ×UÑI/ÞBzå!½‚_Õ”ŸÒ‹LðsíÖ^æç­½>?G{]†œö^o·öÂnLÙÄsJïvàÒ^ Sˆ/¤âkÉ1ñE)>ˆ¯#“߃Þâk,»Ä÷Qü#\NjêËq,{ôˆ¯/è‘T×lÎ ù*üóõ6A~÷j«òë£~GwËïA"¿þùm^~×b)õ«¨ø®Ö©_ é–“&eJê‘öÑb2ݾZ-[’eÔIðΣõ%ÔæÉÝå½k=2RŠjÃÝšçÕøiŠ/£Qóãm§ê¼}hTç±kT¼E£C­Q!µ²%>µBRÁŽG£¢ÜæÊúÜMêß&Åi‚&5tu©}ýîR èÒ½Ji—âÍaËu)ê-ßÏÚÜ=zлGÛWùУ+ª»?•‰ñ8=zzÓ×ðôêÞÜ]¨_w uoÁ.ôfyô¦öÕÝ›½YÐ4C[Ò8ÿæs|¡Xº ²9¿Åz³²;2»n?ø}¡â¤›Þ‘w9%,!-°£ëÚ…2×t•Õ‚å†\¼¤Rñš *mèʉÑÓcÎ ¢…ºó m1ªÇÇBéîc+tiÒ®¥‚¡!S‰Ö8t†´{ªq¢£Ù.ˬbÑŠ!™]$EJÈÍÙ, ´Äshé6„æd/üšè¿—ÓL­DûŽ@zš¯ÞP)çh)=ÊpÒr£ S_hk'ª‘¡ ëk}]%?¢KÐÿÿ#]ìÁƒ.¢Ì B3qˆrЛ(hû)Õ7Q ;Í¢CæÆß¿²…Ú1’Á‘Œ™–J‰“#1mŽp åööô^HEÎ}¢=êb’Ê&qó{LškšhI-Û>9Bžµç•Q¢ ¯†\Ö‰"bv1ò5%¬Ÿk í6ÜQr™Ñ2`#hˆY;‹ F˜íù[6 +â…2QëkØVZz¡æÙ·Ç3oÞ1¢®#öÝGÌ^G\46ô5o]ñÕIîmÙXÐ ®¼ ”,”Í‘ P\ðëßßV߯ն¶­TŽÁßm2G6«ÚºçÔš¬h±¦ÊuJž³€á˜jëŠÚ×ûy­³ Ãߨ­%¯†ŠÅ+):p**£Íf…Þ«¡X68téCÕåh[oáïˆÝІ*óRYMذHÇÅRp"WE|XÙÁ¿&Ð\-;ØŒÖMTV®ùµ(=>PŸX@}eëŸYH2aÆ–cXúîl æTŠ©©Îò@t£ççkàXábÓŠZ• µ×¨/sÛTP³­þ±µzÇ6…’䦠GäIÐŒÍFît-‘CFSŸ Åê4Š•)ORíe Q–¿Î0€6ô¦•bÊâå¹?—ª(V~õìØ³YÀV»Ÿt–»e(SvÎZ‚`¿P_¥Ü0 3â ÃäŠÑ+IZÍÞ„{õî1¾Þ÷Ø/ÙÍ‹¼T©)œ)¿'{-ëw¥§;nª1Lí÷-Â[ èî×UÆ·XNEQÌE÷~Ì[M:Ç;Pü7º.8Ò}RÍBçáö<öÓ‘ù3¢¸‹ÔÝÐXÊÿø€©ÚØœ»¢šªv¹Rd)-Xݪb¿=âƒç’Ñ–—1«öT*.¼G¿çÊ‚†ecsëd!Xîb) ’ŸÉšªè[¢IÔî9Q2‰?VÏIºO –`Ÿ¯d”™—m¢Hv™h;fwÒ’±í#o[åÔÛ!uµ×¥«çt}» ­®L;|ÒˆÃե΅ÈýíŠnçwûäš»„¼È4ÖÞ|Õþ5O¡âp‚](™õÏ_ÿÜK0.º2ظ­ëþýÛûWø¸@8!…HFCÚrZÉÄÓ”;÷4‡‚…[fš¸3|Pohñø\d¤¾À`ÅmáfÚA”¢û*ÑÐ8V‚òzk †bqA„»Ct&ni¢+¾‹à Œ D)âÄÉ¿9`€B먶@#H1M€)òÊ.¤)EEÚô¡Ÿ›§ð&«ÞÂ*Cóf¹F”äPCk¢Uòšëu¹ýó;p{d&ñál7Ó?þ¾åƒx´Çi´×!p•Cî +U<:&_û¼îÚÔ|s§7‡®×_ïוÙ\ç,cÆqUžk3*\&XcÐÿX™ÕuþíPÈç\ª#ðÍÐÂ(ÎÁJ•VVyjé›”ÕË€P»µñ«0/eäíÛÜ¿Kèíù« +¥i±ó&xåÚÎâç¼v<ÅéµÐõ¿ŒW;’%¹ <Ñn$øs%O†¤ÐÈÒfîï*ªH¾ÞÝö:ò±Qø$€„ -“ÎFw¡È\(f!E$;pº‹ä‡JñÒM õj˜AõóÓÂÆŸsñG“Ì@'$I3tÉ9¡–<µfŽt´Ü‡¨G’3) +Ùtùê“Z`‚œèÊ`-¬êƒ·²hÈ¢z2d€ï+ìdÄÄ®çöiÍ&nüßßÞuŠI…! +;V|åutËàx}ÐP©šxtº`À.á‘»ù p¨RÓ•’FØ.ê$¢} 3µ¿=Þ—Ý3j$q”­ÉÕD®\=@»Ù%”gç °•Òã6/‹ ÏðÆÞp´S~:k}tÒ@_®ä(§ÒùÓLT¯È°ðXüÿ•ÄÓÙü±VíÌœ¼OdkWH©eœñno·È¶·/êÛ«þ±½ìöTÁ?`êŠ;qŒÿ2¦µmè¢ +® +hÞb¡Õý5²1µÒTR]|[ Ü蕎^3®¤|¿©‡/ÚL2ÄÐú´;QI´Gà +ŠœŒÕ_£'!Ú`~ áJ[|ãyz[4ÝÅo:Ùú¢Ï¾Øßê&&Ÿ¸÷wêN?_ôÇ’Ít×Õ¢jÅ}·Çº½=)o/ŠØfSÌî/÷Zž2²ôÍßÿûc[lyRVòHÄ<(Ó×JŸÖéXRO×b*ÐõùB;„^Z'éf¡ûhÿy|­sV5‰Á›lt… ˜16!qó\èÌ> ¡9bia€Î1æÅ†4}ÀvUãßþN?߀Ê\o[®=,¨Åiè(¥9Š+¶¬ˆ ä¦ÄZj‘¬ScÕøbã×D‡\èžr¯Se1;8BÃBSÎŒ­PÆ.Ö<6 +–îàä9ÄGÆØ€R,÷ëÌu#ÒCPx•×¾b Ý×¶ûtJïíŒlJ5ëˆ=Øë™" ¸RªžéZq`ÆæÆ‘—H¯¤)ˆâ~x67ìvC±«Åå››o[«AA•}ì‚‚%üU‹alëkÒ£œÔfl¹Êü@¦F½, e•7Ý¡˜^•GǡĖô;Tã,ÑÄ¿!¶»8裫TX¢–¼ŸÄ6ñ?þ]¢‰AYÇ)Ž1x$VČӖ†¨M²*t‘ahcUhﵯӯ‰èç[œA+¦Í®pÚË +|À·k$¼\¨¶fWs¥‹Öüº>6Á~g.;¤ ìVå׌¹|Üf©†¦áŠYÈûÀ¹ôŠEÕš¡#&)PÜ,u^o\µ;¥S–yÈB~=.,U"ZÛ¬#Þ*jjè(¾õ˜ºËZH}\¸+äî"­ù@‘°BÄŽ°'Œ_;zdJSçGÞ'0«ç^#$°QÉñ{½úGsryŒjèÇSÁ† DÒ•3„¹ÚäuaOÄÄ‹28âëªra£0Y{5&MêEÆU¦ÝѧÈìq»f¯§Øiã¬1{yV¹jL"aѬa é‰nÙu+HA™ÇÂÍäGñãF঵ª<ºýÌÆêú‚bÁ'óþ6!_&ö9Z©sC——)fÿbœ@ØÈœë ,ÏDù¾Žjìl>%¼Þ‰¸3ìè ty:H6޳ãõƒúGÙà ÅÀŸ/ãÁ×qšxÑÝ¢þ¶—ì½a„uÑtÑ ’­ûˆMÔœnR¦¡G(ÈL9Ûåǃ~<–/´”Bå RR”ÉõA0uއŸ‡tÞuÏû–Gdo-Z¡´gètñEp? ^ô;¤…låÕØÐ‚ ¨Ä&%/~ÏX®1j.¼îªu†šØ;<€bž@±íÐgØßL×[üžûó6ìâ÷’Óp´háe×Mª1b. ¦†3aâˆjç[ã‡xÌR ácîŽxêù€·èÈë%+à±£`xY©‘æ‡/UZ/žÐŒ‰š#„ eÑ3ÓVTm‰F*˜—Yü=¬÷éB/KKp"”Èí,£ÇDð9Á’Žèœ’ +5“ÐcPÃnŒCë·éR1÷1Œ.u›q”ÏÙ~Ïð½økc‘´a$.‹˜féJ¿‚,3·+ÿ¸ÅfÓ0Ðu…©ø§w”ò#µ Ët³ªÑVØx%Ì*æQ¬®:Â@úÅb…~©3j…RÕ±ÜŬoçPí—]$¡ò¸9kU9sZ¿ÐׇoUeð¢@ϳ*ú±yð3vª´s›<èI_LR\f7©!Èf*òM$»T¿<Ë6T¼Íñ;†Çº;8Äú©Á䘥žM”`8„Zý ™³ñìx‹æê¥¶Ëî»LáCËÒφjå:[XÀ\h5¹[zf+?ðf \lïb㊯՗ߜ>´'9ÂNÞÎí—oÞpÏòµ›7Ð4j7çÀ(³¸o¸N4ï§Ê×¼ÃÙ3âÛZtNCÞ]ú¤ ¢˜¤‰Õ6ëˆ}~-‰[%/‘ë)Äû>Á§84ˆí\#ˆÍ—øŠMr+ºy]±94ˆm-(CwÅCsW¶ ¶ÇE}7rDUlž+WBÂ+ˆ£ØdÓC—íg±j´åæëùÍí‚ÜúC¹5áÿ‘}Úœ@Çèlö´ºW°:hÚ#ë,*º1TýÿùF0£rr©|¿ `ß¿ˆÿþQ£0Þä +»7q_o²¥g¶HõAáúPVãÓ)Ÿ[E +_tQ¼©±*Ž¿àÍ—DÓ_wáeô^aã…ÀýÐ÷üY¦}¯{y_³.–å9u&iQµo¾·+*{ä>‹ªvRtf;Kml>áU!þ:š³:ŽQ–þÑ…ü.ø—\h|^®+gÕ Õ ~…;oêJ§¶<¹ #é5D¥…ÊÞ3õBØIÇF[çAJRËúZ<ËàIÝqi/¢R'‚É݉É4ø@óÜ—÷5…1N£Šëbàʉ»E@‰FÝ(Ó,¦Ÿjqñ×rêîQJØÊóV²x¶¬GèO\W2—ÊP/3,_ ˜ïÝa4ÎÿGu¬¼¸[«ó}еTåü<k'OìÎ::¸š9ê°N…ÿ|Dzr5Ië¥pv:Îö.ÆPhJY¸¡uËô%¹Åï¢mÂqZÞç$– "»c’m¯ü««Q‘z,ÍÚ‡Ük£x I@P®ÍÞú<¨¾uˆe½…¯“ÏYã›ô~D{ø&}†úˆq¥ +sœu2%­÷šØèÖ6 AØŽ#»jüY½°„í“ìjD›,øWãdhžVò“ía›Ü¬·s”ÓâŠT¡¥ñç:YHn ’|G–‚Ž=,9[nýŠ,±•iͱ[kLû1î»l½•eEgËÜèÈ·€[¯@ññvÔÖ–V­Ð|(Š?zdž{Èí3¸œõÙÞ›ÛÅâÑ +ÂQê1*&fk£? `6Ž98æZÅÿRy®4Ói¦V‚xÖÊåÃÞÒºÜ3¸l¿y²½æœ ÕñdÃÊ@3•ϳèdÌöêØP¯ö‡„C—%ñœ‹pùc¤.÷ÒŸ$)Ì7ItAÔäÉQÁ¢Æ|~.#ç?UÐSéŸgk÷¿ehø˜…ý©ëGEÊqý×ì\?~G+ý„“ëãײÔ–Y¢!_8}Ñý3âX¦c­¶~ápå»^\¤“nï ³( &Püt|<ÃFñW®FxÜ´…äV˹å}¶c[µ)‘GÛ×+¤­T&ÊHWfx1?Ø—ƒŽO'H½çu “j6!qKûrÜÉCÓu?Y.å´ÒBž‡D+¥ÚòÇÙƒý·ÏL±¼.…‹î "ªxæF¬\Òúœø¥>ÌÃ3«\n`B`=êQØ` K¤}%Iuî©p3T}½¼|Î:gp!L€¾P¸ +ʆqY«¼‰µ "®/ѱÂÍ'.^[1%Õw?/¼^×Sx6àj“=Ì!Ù ¾AKª¦kAw!©è¨ÝŠ“‘£ôUÙÑDM•ÿ®É©Ò$%'(eC¼Ð!+“ +­ÉC/´Á»7E;qßß`ädgu·šAÆihá¹ÇNêd»g›xKzÂ614{‚¸0ZjEQK%´¾`WšÒ6B@SÚmÁŸÅ5y··Ë"KO +¸;Î'[€”Sy.vú"œ¨¾^7X[K6¾ÃûfoÇk¢’>ŸŽWñ=}ÇCÐñΈ׎çJæ:ž+™ëx(™îéx¾f·ã¹šÝŽ×ö³ã5¼D=éZÇC%³˜ôØñ\}]Ç‹g­ãŸÚñn%} +±¾$Ƹw—ðï Ô[³_¡‹þ; þ‹7rDÑ­XU¨c|}oBÕ‘).‹{^öÎÎBbÍzKi2YA~rðÏqó½èÏZgñƒ»áðt §M°bí+”ÆÚpð"}¯S`ãi"„~±ÏÒ´U¢€½}Ï¢DmZ\Ý/Ö¦Ô57“e¯}èÒÒfÿ@±'6p›„“ã·X¼ëèÖÆR^ ʈd}Lźê‘OËÓŽõœÕîöÄÕN(9ÀàXwë#a¸Iº} âç,¶8êÕ*VG«õ¹0r 4uMƒ”Ÿæ4aªž»íF$gÁëÚ´d'ä<Ê ùk/4ô÷kþö¨¯l +<õì}8Ù`µ€a®ÝtT~„yÙ…éó8hÈãFލ +S^ÅäªbJŸÂdÙ‰ø9é¨ve äÈýÉÀîdéÐʲ"¡ãx|:†§±²8RØAm¦Š[ÉçáŠ$×çá‘ìIœŒa”˜>Žv¹àç‚ZêÆ½!û*Û”No(­-þG¯$ë,ÐŒ.\C›+.œfM¯¬²Ë|<‹tà-€Éµ~%ä]©XM£TüÙ[1÷tŸÀÑÅl1H¼á{±ÿ¥4Ö\bq­ø‡8>-<š?{Þ÷ÌSáöO›OŠ=ÁSÏ¡®¼·3à{P‡ú·Ó;ƒ]:t†'«*ŸÇE}7rD­3àñ1²Ÿ1ìßeÁ_#»œ%ô†c´7¸'ýæv±7\ô‡½aOoè¾7ìAÌí«j_°§„:›íÀãT¡LȤcú­…€Ù î™¡³õýQ¬=-ÄR‰Ä»hä¦å÷{Ç8B°ƒÎ\4r¦Õo8#ßzùbß¿ˆÿþQã +4ô W ¡ž¯éÓ¯»j¹³¨&¸R® šàJ{r°[E®\tq¥â§RüXÿ–ãYDMY§ðäW5šÀdRY6ÆÂ›$1*®°¨øÙZw¤Rm,‚Sø¿ÑÆ­lM…Š¢0ñeª!½]¦‰üÖQ‚Ý•zmPw êjqŽ‘ iZ‰ÈbâmÆBazµï§Œ‚ ZÇý>5ª€6¶M ]ºÁ‰Å£(h"ÅËŒÅSâÓ|üô%YIǺìVÂæÚìYø#…éS½ fÆÈƒŸ"òWç–냢så,º +ðôƒ…)çk­´–@T‘ÎjX±a \hËv»ŠÔx¡³Ûó"‡IZ"‹‹.Çõ©nFˆòÔ±ˆÏ­’—y ±K%óÇ>‘Ó ZhÏÆ +œ€›O±oI<жÝêÛû½rã–ǦËT’ô¯T á«ÂbĽ*!¬—¦‹U"ÆÿS%Xš=ÚQ úâ¹ãUÉ#( +z »°ÊSÂûÏÞ¡€ ¨Òµ +…¾d/Q(þ¨ ÅuBy%ò!ŽB$ª8P~ßÜÄákw™àÑ+áŠÃ¾ÅåeâÈÂF½‘ÇmRWhßdqM¾"W¾vWèhÓ¤¬YþC"ø#%œD^qDYàGýÞÄdqeºd±Ü(Ž:àæª¸uQSºƒØy #ÓÖÛVÖÍðÊ%释²¡#«CŠá¹h5¤ +:W€6ˆc¡0j´²ä2ÊB)g3(-uàW–4Üj¡¹MEû,eGÈ#ëý¡U.ugF(€¡0^‹¢IÒA cð¹*2Jiän¼Ñ]'Ûèô‚–ׯ…šTzM†{vŠZrù< ?T³–WKvÐ]œ”BX}Y¾_Ú=ìÚ¹æ'—Å_vt6y׿ÿùåv–)ôÁ ¬FóvTi’42 •åwÛ§P«èI7ÚFÑäÇÛœÇGtŒRÝÇ6ú_Æ«$ɲÛ^Eè +œ—ËKG(T½òºî¿ubà#ȧ–zW‘…bH$ºP¨¢3õ´$x‡RBþ cA—-Ž1©6PÆyµ$XA‹¢…ÚXŒÓ ³/ðq©6¿àêåZ¬)6B¨:|eˆÑþÕ$Ó ”ZOKØñ¨ÔedÏÔœ «=qžÐšr¼|¬ØLGg’mûðÁ=äóY÷jõŽÖÝ%ò¦õØ)I$Ö¡X+\Îø€B‡^ïcÙV…é…B@÷Ä Él ©ø‘M9&%«ÆÈ^eAIJk”·‡6‹¶*jß¼§ÄRÝšgzé‚["­À0³©±·_á–DÞëäM)OëåêjIBš¥¾ÐVy;¨uÔlKÞ“@[Õƒ (r~ý”*>à¿+‡°W¹”T°ÛXGZÏ•Â<³£’Ì…’~øÆqŠ-â(ž=Œ~žHnÃ2„X2fæAíbŠe8Ûò0š«Pì¤Õà`éhIgkO¼þ + œBÉíÅÒThËÕ4]'ìzFåȧ/²6[ø­Mޱµ²ÊLk1ô4Erlå–“I 0[ËÃãéœy5¤‰ûœCVŸ£ÕtçMFÓQÐa'E÷]˜„’寷šVTK#Êb‘…è±fö\ϚƲÅ4zÙ\¯o¿˜$>[c‡ÐOcÌQ¯¥AuØ2aHh:I¸±,Åñ8,nQDénC»¸€¢¤b[_ …í(—†¢*e¡¹Ízè9AѪ†ÖT¿™»×‚Јóô+u+Í{‚ÍLgïeÖ«ð¶É)ô§¤`Î Òp)Izx˜ ª}-Ó”˜!P&ÁFÇS.%@Óç='ôºª +ᑹXÿŸEÖL’ÃCÚRH$Éó2) + ™m¬¤ÕXøýqe(Vp//Ûª8] Œ¤6Éq+Üé(Ф`/Ûƒ²·E¥¿gQtέû[X±cÇUR••X©+¯7tÝâ‚By-P4_¶Ht¢Ó¯$ ”f‘•´Qßr@ §_¶(NÝ_ƒÛ6_&83[LÓ°´Ÿ„ÎÓÒ(·ä“ò¬# t„G¼òèªÑŽS7 +úîJÏÒ¢jEד¿/E3³våú Sd9ô1å/(i¶¹¯à 虲ù3y¦€BHYNÆÓqÛ6äd»…z®^€ÂjïG¸±e÷Ób{´ÎÀ—-"Oóåw—W èŒþ +wàŠ ×Ë–é™…åöÌØ +áÌî +÷¬Ä]5‚ &ð},·TKIS¹aÖXaõ¶Þhœ¨íyOÉßô]C›gÀ£ï(ˆPho×·A‹ø»¿"X ™óËz¡1Òí9F*!5½_>:¦HVÃýÅöæ×EëÆ/nÏ¿”08~ç†Ã)WÀñVs¬Cô‡ +u”jýÑŠ30Pð{'dï hÆÆgœ²h £ÆÙK²”æ¬|öìúÜ[?{TPl¹Åçg­aªW±}ëX‘aÔ“Ã+ðWvÆ/ÆvÉÛCÉÄg7ÄÈŽŠ©4M骘HŠí÷ÖÐ2e¾¬ó¶=_õ…À_j ýdnb]°-Lå‡âŠäÒuöYó[Í®žX1PÊëVîÀ2´OO‹ºï³+Z¡÷[\pSQžûL™ wŠRrËòeHZESq‡½ßÍ0Iá« óa?‡Ø_Â¥OJؼZhDpûñ©w«Nö\CgJÉ’€sà©·¡!¬ÏÃXšN4õ×â<½¬1U&î+äl£žË<Ûð«ŠW +Ay!„«û° +2lù¨† £ø6Ø ì6põ*QW–}•í6‘ +ÉÊW_šcE6†<ôj>Ê!h¯KçBïÏÚÌCG- +`d¨¨:R*[N¿P˜(‹ ´=$Âu˜-ƒ÷úU:bÐÝp„7×ó2™<‚•…Ãt%ìpºr{~?ÖaÇú®™ÍãzïI= â›–ï“2 ¿Î(‚6#nQŒÔùÅݸç×P_Œ£¶ÑåÙóáJ9‹Ò,w_â{S†ÃrŸ^Ó? Õs{YÖ4×ø8¼Ÿv¢;X>Ìçé:ûÛÀJP®CÇÏŠ=Mhÿ÷Y %¬*çgF°2¤ñ1g‹ fÆ™oÓ…-ÿ?§¸fÀ^sDýËK£‡€$ËX³ËT–/"ŸNÃÆ`‘Ü5p! e#ë mÜò3¨ùª™øþÇ“ +ªºÍ²ÿW"ëX,Ë[{.\_‚Î-iUƒ·þ}øï¡»ÿþýFâïQ9¬7~¡+`ª×‘¦åEŽ[« ‡˜‡ð_Gt]þybõõd÷|ŽŒÕ´âŠkÆtáûõ#Ïäßß±nT:»Ò8¾ÁÚh4’û'¼A¬;j{Û.leD8Ú¼RB½a˜Pìn„¼ü«*²²õ¶°¡_4 µjTä“D¥ÖE–6¯èòŒŠVC?µSitÍIô±Ñ轎²ÜžåšírmsöU—‰u4β&b/+2c¬ õ™•—Ó)—‘” +­Xó€<›À‡m»Q+Št$ÂF¾tQ*ñŸZî‚÷Ëz£1õªàkoþöÍzÆG6…‚#·ªrÿï·ïÿùüþÔâ¥aòŠ)\-ã… Áל÷a¦+_)¦Õ 2»þ!/Çc+šÍ-©g)M• ’åvÿ ©“ÚxÚ P½‘ì* ƒjÂN›ŽrS*©²ÐG¶ª£Ö¹ óPzÍÅQÙ@šyÔÅ:#õn!ŒæÄ ÞcÝ[@Sš¶·€VîëiTÈÜB¦MÝ@KqûP˜h­Ýä$‰´T¡ t@ ’7éÊ·ì¡2^àÎ PõÔpi „"KB†:^õiÂçèÑÚ€ƒ5ØJ’ö\?¥(ºÊ˜Ï²ëÚOÐåáꦂ\ær÷^}7ß½Wð–,œrƱÐË:£¦c´|úÎU¬íxÙ>Ûݶ?6ôù5hÿú½ÎòÈsÐz“ä>ƒ`ž¨€Šž>?”&вïREImEw¦t²õØ€ÑyöZ;:3¯žÞ "# ¼OSl Ð^¶® Àó zÇ«¼ÙTàý`‡Ahòå£Ê¢ÏίãªÆ´;Î!—‚{áI@Gªåz~´Ý™ +^wRC¡!سNk+­w.Úù +†Š>üèױݧ+à€¢ÿ(?“õäÓ‚áwB]),ˆ*¹‹Ð^Ë•m̧–—ˆ3=,hEÕ3 `CŽ‚U ]âdêšIÜoTR‡{æò€ÔRo÷מÔJdMVgH-ž0šó^°ì ï¶§À½B¢ôA ­ŒrøvMuåùH9@±UoÓýZøG‰VÍ0ÖïòΫ$É®Üî} +]À +àt¯Ö5T÷ß:1‘ u‡ìÝ•ÂçÃSèâáå+–uÏYóQ³[+Íj±ö6&ýeµæˆ–YË3%©¦[! Ú”@Ð-%„׌ÎBô0á ¼À0 ê݈0HòMw~º(F~]w¸‡— %©c§X\˜Éâ)!ñžäûOÂýA^ëPv+¯=¶[ rÿyàsõb ]³ocçûWV°¤5*±G7~_ùž*‡¯‹{¸V>‡4ÓgjTViN¢=`€b”&ºY²ò=¸(±<7r/Óâ—í)L|÷ŒˆèƒœµÜî† „ȾɋߟZq,·ÜYÅ~Eõ“ÛGnÁÖÊ[°«ûMs,±|ºŠj»?T‹¾÷ÇZ’µ,Üç¯s0&wÑ6Ð-Þ´ã6ê;_o ×ÚВ̉ß×Ëzì7¤o;Ï“u˜ +o\1ȿ̒ÎçAžy–Ë™'ô®œÍçý +™'1ïö×Eq¹oXÚ¦s/–š0 +ËàìÚ +ÄJ˜°‚b¾ëÃ>¬RÅÞå†&&£3ŽÊÂB˜3Mf;k²hn]P·Ó<1‘=œø,[«dJùè(e°$9?™yPˆþ©¨5’™ÊV¾6“ÍO0)c/W¤™”-ÁâF©b5¡7:fRßêKú¤"Ñ ¿Éu’ñ½ô‰Fa”ïÉÿs¢F4A^ì51Z4§Z·®Â,k¶¹ÊïNC} VÝ>á:a´¡wó‡-dÃ,ïâšÛ¬8EQ¾ý.$ì ±Ð:ÆÈ‡)˜5ôc¡y 3G,(cõá9λp‡ÙÍÉéÇ]·ü¬ã|­â2#AÑÇûÛ­@aZñ¿ŠöÚ=9qC_é¤aòù*Ï6}௠ƒþ¯r%Ý„aòàä£þýKЕ’ü*”…цo Ú="™;­ha!9Mõâ¨9©ïû©h~âñÃijXг]èß´®ÍFBƒQÛ-€Aö^ZåÊTý´ìce„{ óÙ[«š¦Á•‹z>”j\Z¥ ¤®2•Ž-ŽÍõ`cÎI,£Yc¹j¯Îê”Ä«yŽz§hŸ”æÓ™p +OÉ—«S§Ad‚¶…¼ƒâ»ˆ´¼ä;>üQU2“‘è© +íª€’‹gŸ»håñt$´QZ}^èßõ*²¸/‡æ&~GÔ¥ç‡ø8û*~wh[IÞ +äÚ§Ê3±e¬󮽦½wøÕ‘-Ì]{ö‹KsÏT 8|ÞI Òº§õ« 1›Œ60X’lþò ™ú=MÍ´œéÄë‹Ý‹Œ5Ñ6­gì~·“Û‡žSοx!×þpõÍiòË7ç|j¶¿5‹†±¾ž°› +(ôy)fŒM?þ‰QÈÒàGÁÿgŒ<ÙXqs*Ñ’"™²ÿ9£ öf½¾0ŒÈ*&ÀêV—U]êw¤VáP7¡%(~šÂÐæo«¹%>5§sö^ -¹çn»}’Ï +¤jèƒLH>F!¸©Ú +…>™Äs©UvË‚/›VaO«UÌWYG¯-­3qýUäÀ “N>«àáƒú÷]¾âßq&4ˬg‹øFv(Ë&—¢uˆåSôþž¿¬h“L3ŠËi{<ŠÎ |¯C[lI&ÒñAf¶éÀÛD˜E)\‘ß߯v£ÇÛ¿!'Ki¾5—SšJ» ×л´ðªlS‹ÕSU +0ºø2ÂΪÁ_¶8Õ”Zü®õÊÕ—Ù&Nê¬ÖÚYK[XKWkøM¸Ì*Ê·qD+t»_àË`Éõ¿†Ðñ_™l@5»S8!ãÐVº,-³<¯"7™”Èìò¯è,ä@MãDäÍЉæe¢-¼]Z3´@èˆÀ_‹ ­Ö ÛW¶$U†¡é€¦6m)-ʵýe©u‘{1¶M¨ïÕ6mòÚ& ´œß±z¾ÛÞež w3¥ÒS½'DrÛ.4N»ç›ènôÏ뻩~”ÈøÙva¾äoÂ@.ݤRòNç&°Œ}ð¾#jtOcÙ½¾¸¢-óµ=åæÅµ¦mä¹¶íA‰—‹ï^L^›²`ÙÞ½p®)×Þ²M7nÊch¡z5Žn`˜ +všž>âLÎ{y]–›ÅáÍ“¬óñØñÇѰ殠FÑø?Òâ‰=ŠÛûÌ×ú]Üh{hp² ³{þ¢•ô_ð)t«Ù]jXìÒ“ûØ¥]Šš`¹Í§KOMbç5¾fm=ž.…ž’ë¶=™]úMT7úg] +1ø¹ÞÆîÑŠáH ++ëKP‚¢‹•ÃPÃBÍXÆ­AVµÓÒ°À„²ÝƧ ƒîHìRÇ~ÉÏ'BÌO9§wIËzÂ>Eu,¦“½Yý©(‹íÙß*¨bE™™µ–ÛŠÒSÑÏÀnô*š&¾óÍÜí[Mc÷5¬±†¨8,“ä'éQX<=ù¨Îi#CŠ»¯}Ø=}Þ “–}À§{(m8¿ìrñ› +èÜÚû 0¬#¯wac¹CL=Ëѵl¬mE}Ùžñw!¼Ê=ÀàC‡ðj×XVk+$Ò’)3‚"T´¡)Þg'^È6Àö­2áy#ºeb(kÂl ¦´«•¢)M;Î6›Ëwø &ÑÓ8'9wã<ŠýÈ®#ö¥6œûhžà\Tð“o±G: £äª½m£¢Úÿ îFŸæáήMZ&ý?Ëœ\0U,ù/n¬IðÌ›§bHÔD™OXY¶³¼c/)-Pˆÿ¸V+ ýÐUR¹ +VäüE²ÿ-Ÿf‡— M%£‰…‚¡Ä|±¹Wåñg÷ðTxRM¥¢€Z—˜a¯¬ª,¦$$£m; +;aò£(6Óm2Wý9à¡CÀrDú]†°0“¸ØµšK Jü…– Å\4Û¯¨Ã³˜ÉF9\O.p•éÅ6;žªR¥ 1´BRð1$¾\KxÃJÔ¡¿«%¨Š‚ÚÞ¶Ž"y(z¾_ˆì8_Aæ4ˆŠ×¶v7¬›\…“Œ¹ðØrôSûѽ*?¯?3³XÑ›ÁÁÊɨ¨$†X7ƒeNÓº}D’Vv‰©Ãõ€->½S—º@£›ü6oªÚJq|·%Сµm‰KªdÍgˆ ()%bîƒmhÎðnhNֲͽÓÏz®¹ínN։ʫ»93)½3a§•¸š“•㼎åõº¹ËÚ8ùo[ˆ(ǶÄßMé±ÛPïNdmKÎÎÔª‡¶Ä¦#ÿû­‚éÑü¢¼‹ðëqµ%oÈ»Óxxç›ú2Īj6JBKb§ìlÛ- d³³ùÐÐ’ç…‹ûk»{DŒÜ=Æ +ç³yÏÞ•-~¿ˆüŒy7# § ®†~dUQ>¦P¤VÅÝ’ÇÍØ’ˆ'?ý¨+cK~›7./„é uûÚPÈÖšÆWÀ®ïïô×?øŒ8¿þÂßäz"±©÷ÚÃ5¥£Us‰°‡BCXeÓÐÄ1êõηUHŽ?WEîJï†ï:¡oÿQ%„Àeü -ønZÝ^|­ûp8_í¾./÷º¯Z b[]¡vW''û³Wò¶‹W¢ÛUIQT8F¨¹¢ú§_$ö¥:3FO6Mõ¯T´²Iç:“}õKÐŽ « ºfYêK¶„_ƒ^od¨Þ çŒ&ÕÃbÚÆ¬êYÁÏΑ+:hò…´ÓÌn«‡(£T‡¿ §PÔ¦¸_øb¸U0>Ý/‹(£T µx–JÓÀ•60‡7;¶_ý%ÄR){ð¯ˆ^i@QHÄòƒªp–ì”T7ýEdŸR*‚\òÐ7áiîèYVt>dž›lÖÛÎNu úKXXÁTÅ+î$帙˜[ŒæR‹6Q²ü`Êåf„4ž¬1ÚK§Óÿ2^åÊ•$7Ð×WŒ¯XF݇½¾±Ôgÿï*G×Ñ܉ë1§U@¢èƺ[­ÜêÒv¿2¼$—¨Ör¢[p¥8›Š$c¾"—Qnþþû¡?ÜÅDÝ ò™»†â¹Pè²ø|j1–ž58h¾–ùŽ6fÝP=M6÷ªVZ(Ã* --dSj#:WƒÐº+!‹&÷ío >¯¯C–}ï¡Üd%¦Ð9ÝNâÎlñk9ù÷-E+Ç[Ÿ†FHQˆ‡8ŸëÜä†Ìßì!`Ù+VÐixöÄÅi)èèŽÎ!:sLî8¼ILaúÈá©çÖy1¨”[ˆgL.´Ta Œâáê3†$`­w'†tÆŒ‚›¿¢‰ap„%BŸt•Ø‚Òä¿ÿyhòhc“qøVþMúuœÅP‰LÐ×qv¡ŸÇi2;e Pİ Úg.^É` rOtbEôÑ;-ÞJNbh„"hLÁk>‘× +V¥1òõB{üÁÀLÌòytrðÇ®gU#êé +ƒ»{Ÿ-ìà/»"ºžohlàm\Ï +Ñ4êéQ$¶Ÿa8Ð'b‡îqÙž‡õ°=gˉw~ŠÕt»T–QŽi=²t.èGDÚUvމ€Mà¡Þû4§ÁI´ØBC´Vq3Ѩ“ÁWHÁaïCK—…`?[XóÝ-¸Ýb*„(:xQѧÁ­:¦ˆš% oõ%¬PÍ93*X^Uó}ëitÁ*îC +¥d6@7ÜMÔ· ¢J¡o¡ÒÇ"Ýï8+m™#‰v«ûZæÁ¶ý¼ÁÐQíeyxÈfn‚ e¬ØôÒ4ÁõùÑ·¶Rê‰2 +˜ÁãCÞÕ‡g“¤ì´@Kwˈꈣ\þ¢pJ‹õ…¶È{ZàâZöËb†£¢8§«„9D M‹NL¿ ­(4®‚óZ„Äá2S4ŒëÙ-ÀµT³µ“"ƒB}T¦²Øß“‰|àÃÉDiq^L\19ÑÚ*g-ôåÒÀ*¦vËPÆý¦:I™a)Øÿ_õ‰MùïÊžÄ-My]PGÊ úÔ'XQÙZZ jΤqóåo;šŸ…r·Š­5yêPC¨Îö³Sûv=5‹îDa&·£7| +êRY†ô[ª4Ï=xÎ:ˆ%šhyÚH'IsÝâ£OBBÊut£Eö¶^?P“Íï7y“yp¦Te3’ü…ô4†.6¿“¢oÅÀ®'ÊPDk á®á)Dà»¶Ê÷ !EQÆËßBáó í1ÆqY…µ(ý2e%ª×œÛ«:XQFÖ€QGQjc½ì^ØR¼\OŠ÷6,­f®¡(mÃÙ‰²>SVË–‚“‰’AgÊÎD̯Î+,OM[E⫾ü™¨È³E,éV«…[ ´·äŸÿûÜ”*µdÜ6ò4}U‹|4‡.å˩Ο íHÔµ¡n¤O­?ÊÀnëLw‹.-䢭f[‰¸‰!:©¢MœLQ´€]×ÑEqð .ÇLÞð½Ó÷=NÚ¦gˆ-70ì @QãÍVˆzPèè身õPM…É8”/‹eÄ ÝƒSÙ^̉¥Õ-„âNôL}î[•ÙÈP•àQ=ÅuÂPŸsäût¢”A]0[’õÓ¦!a›õå¶í}@±Ýõvú2…šÊ „Òëõ P¬_µœáZ±º4Yòœ©j¨8,KÙ-4,F4mÎgüï³Q˜4åY3pDÙ² fGñWwq[£ð2‹.ùd6}K5Îf¨õ²€U„C 3¼%>{ +¢ ¾6ÙùÔ°ï^œª^ÆÜ AÝ #ѯ¾¶/,ŒH]Û|¨çÈV¿Qíç쉮³Ÿ²”vÌótYôŠ£!º¦ÿºÌΪ׊f(gEeUP0õÙôÁš:CK¬<êÈj9Ÿ|³9/ó-è|˜³ýëp·«¯Ãá=h¬nsçY¤Ý>^v1˜[Ž÷@ ò_ïÚG¾}ÛчeaÙºm ïzØ™ wâÌÚaã"èƒ8..v ÂE(À\C©7Ñg¥ø>å\„0-I(ÐÀU"g½š+Q“³‰^Œä(tG4—lßÏÖ”­@w»­Sï(šØsí-7·€t³l‰f¾Œ(ú¯ +Zˆùé¢ìÀ"áFm“Õƒ§¡² 1º ®e#™1™y8E,¬H)Šïë|…´œEí–uã¿”í Š6,]PøÓühÓƒ=nFÓ¤Ø:¶Ü ²Ç‚×é@ÃŒæ‘^,H (¯°þIT±f*héhÃ]c]œ…¿%"{^P%S#²çj\%œTƒôY¨QÝ'Pœj6w>ÁÐÂ!'”›Û˜o-©ÝPœFxˆR ·°œ@ø³Ós9Œ2ÍËB®µÎ‹ëe ýM¬Q #ÖxÅ:nÍ?BFîÿ¯Í¿Ž>îKˆgÌè÷iG÷h/ËÈbØ +©‰-€Òýöˆebaqû`Ê»!ôª¾ó¯bUM' ǨÀ¾ÿ¥ßôüHÒt*_~còcG1ÏÑ-”£ÄQÜQš(*£Šáu[ayöj§Ž<€ôåz†£_ê–àf4ÞL”Á\yZr7t“\¯Wí‰Ü»ÏÎ0¥mÁnÒöòîD×{ÿ>5l\ÐMòŽ#9{ßθÜzqæ>©};Α”Ö,GïÐØ$º5–MƉ¯ZpÔ4#æ}Í}ÖqÙå#GÐ7ÀS+oœ…ÐKÖK\+w +ï0X<›÷í eêÝdf” ø1?0K“w“i¥uCâŶuúdÜÂwÖ­¬,Î9¶gDó½·¹“ˆÔiFÙE¸Bùø"äW.½;ÑF¸€{~è½k‚ãðíVg‘…>”ù¼ç4lóS]_£QSmúü‡Ú-åÊÕ2zæjá{®v‡V¶º »ë;_¯´ ºr€… b\ù +¦Gϳ˜¶ÈW¾òõvîD¯|E‹%åÚÛ¯Ò!µ~•Œ¦&N3KaüñKþý|VBb %D){SG%3ZQô¹ÎZ¬Ï`¶Ppò:EKг¨¯Ò}Ì/Ž.»ÅÈEßá’&hA£h¬~[ZS¡î²Úe`ƒ §Ê€Ã_ 'A8«œC`ReWeg¨>¥æ(}e þmÝ<ŠYnˆîwíòj½T¡Ö$˜£¨yt†hßxCvèŠúßwôi%Þ(|-õ‰¸Ç ã7);ÍÍ^߇£ä½¯‹<ãïЉ†lùÅïõ¬hÐçç)89£ekYD4fÓ¼l·gî±³hEx[ö'=Ní©(Ñ>6öÉÎf³CCê×ûõ¨„áùXO…ýåÍsäðù1wÄç¹ùˆ¥>ñú;A’8¸²ir%êBUüÎ}ƒ¤[ Üuž+ƒž©ãçÑ`w¬ÈñttJm$&:«&f #ÙwŒJMÞK´ZžðÂô: B£Ätxø{F_h(Fó‡À|o|£}~´àèÿ)¯–$Ëv¸•ž;¢B?@gxô½×ûŸ:‘@B:׎ëQweQ $°)ÅPkãPž&]¯+šµEˆ±6 +i¿‡Ú„l…Úh¤xá ~´]ÙŠN{ cp}(ˆrI=Ðõ¤ÿ3)ØGNñvyçè¡PÛ0Õ’«Èy™òfÕ`›ÔUÿ=|š”ÃGÑ÷ðiÁÕÎRè=y“'X…vvw¡ïÃw÷ˆ!†ižžÙ¤ÝcG¡×ØiB¸=Çûóôaì(Z÷SèÃØ îŽä´cÇC<Òý.‰H¹F4$të9ýƒ2¾]å–M'üë¯%ço…à‚èÔ}¶0x¢"nƒƒ€Ÿ"Oº>òwt ¢q'6ý­²²¦œ>6}E'©Ð=<£çKŸŸÃ¯â (y|nåPQh3hãY½Ã43%Gq1êe¦íÒò¼ov:iª×a¿a£¿Ô;¼6®b­Ó ×cqª6ÜP# ˜óÙ ÜPv:Ò®(.ƒ¶iSÑ-†´Š¶ýyǸQ”Aùv¢!µƒJdS&ÕÁ2‰¡r* "y—)‘þùÅ£#hÜ/ÝÙüç@Áw“™¿9æKŸsj’ )- ÓšÑ+IVß4ºF}ëá(ƒŽNë{¨§5ÿÌ£nY$ú‚þûû…j~¿ÿ÷z¿îšáý=Þâá™Ï÷ë6jè~?>.“À3ëšÑlAk<¹ÕÒÜÍ”’’w:ÑÎ<òQs¹\:4yÂÇlýx¼þ²|$°. ®hUÂŽL€3Æ7 ‰ì5ään1’Ñ€4PÉî/kT'º‡.ÿ<©“~m Úa8~p©¤ˆójt6kºm.#%à{¥ùXd§>¡¸vaŒïtöNM0fµ\ßȶ‡Ó/-ìÃxô¯ªS&÷&ƒ'kÜ¿/‚1 +¿Q4~.IM¶uj¥UŒj W=H:å &ÊáùïÍ­Ž +\-k1ü»¬Hu +’ ¤´T\c/ä€N†â±XÏËÚPûˆK6s¬Ú Ù[!;û !{kÉ£èp‘{y\¢¢9 -O£%QÁ9?§ Û"O[’ž]VêóýIr%C \ÌÐðSsSì‰b…<ŽbGðDÁ‚ânŒš¥Á©ÈKOŽGhy“Ì… ’ÕfõFýÈpìH»¶U - –ìÈYµqx[£ñ°êY¤Y[ž/TjmÓ¶{‡I*ùJå·ŒTSËËvn.î–SŸÌ}Ræ3‚õ¶¿7lô«~¤<>ØÏ9ŒmD¬k¿/Lì§ÕSðÐb9®‚%,Á>P¹;šS­ˆˆ0Ô•—-´B‘î¤q¿ÐDò^\iUÇP"‡ÆÛZ•·Šb‹¬3†ªòö²ÍR{}ùż2¿ÅàwˆgñbØ\¦ø_¥²X‡§ÉL«˜3æƒìlê#Rë~·IZi}·¹’Ö¾§ AQ™#œe4U}ü¾ øj”I}~›P Ïõ3ÙE:©Ó]Æ<…¯€ã7Ÿ^¹¹-4t¯  Ë˜“{ gÔ`óÞR7kãvݽ-Ü‚rQY·1Ô»£uæáB ÓËy…ûì,”çªéàa¹ÐÃwuÁm Ø¨K{¯Vü>5#Dz\èÉáŽkAuô‰ +¾›jþzÙC@eÊs‰ÖÀkwÖla [D)аfë©tv +«ˆ¯ä™CŒ} ”¨ùÈ¡2²|Ù² ^^~],èJ–³«€âßµ§8O¿øvžéO¥[qmÚ,ÂÙÝÚÄU‡ Ûbzô‘J£¶ÄÕ\]@utxªlIi`Pb>GlIXr=øäÐÖª\èŽì ÙJå­¦@†À`Ûd ZãOМº†\a”Ç÷ù’p@1·h.=:QÄöÁ¶´<†àé7³J#p ¨`òŽ4à6Mºüæt^¡½0Üm‰Ÿ¹Í³ÀÀPS<Ñ}ñ@¾–tÛ"5)7³UmÖ ÍeÜ{ªjÉÞ°;èŒU¬„S+ÏÜô^n¿yËfAT“¶V÷¸¸×ñ÷eëv}YW½ïEõŒÛ©¡¶®Û5a4¤4P›Çõ€>\ÄûzˆQìë!F±¯‡žB[¤Ç4ìëè‡ë!Òi_‘9áéÓõôÃõé°KŸ¯­ñûz¸¬—ò^øq=Y۞˧ëAsùºŽTî ò§ëÁÄüy=Äüð¶ãzè7Æ =÷°¡0l +–çÔl©jý™ýÀÏœUSªg?h¤­ö-X$M)9É}ØE¿yC€2£Íª.¨©šBþ¶s÷ÞÃàKÕDßÔø + +É4O‰¶Y®Ï˜Sº‡ Ù–?‡ª;SMaŒ[MBËüÚÖŒ–õ\a£gO–Ú»§±ˆÐÓÞ$ÞÓºˆÚ’¹ÞÓá{¡§aK[5xOcÇ‚ˆ|¶ŽÞ=/Sëiì¬ÒG½§¡r듽÷¼§A>ô´¯n +ô¡§NgOŽìÀ6xö´ùìéÓz÷ƒãgOǬmÏ'ê=Mºsªwº7jÌ厂T޼ši—‘«©qs ©ÛB`pw£ß45}-ÖÒëŠkGð?•xTÿ*Û\ÅÍ2—hJlýw½SG<=é¬KL5ðIgt=è\/:£¥ðIçŦ3lAçrѱ¿é<ÆÆ:†œÎ8¬>йÿ0èü\tî?t–‹Î8²@çrÑYà¡õ‹Ížß#® žlî`L§v±ù´ÞD¥ hLÚö|¢Îf¤*_ ©ÜQ àr/3ä \n'—;j™ò½"ýi'—7ú—¹ªŽ\ ª6CʧyÑ¥G glæ§Ùƒ€èТz¸AÛ­M2—†ž~9·—)ôܨ½˜€.§³ô£í ¬o³¿×ΘB~Ÿ6ï†ßqÍâxÓÏɹf&°ÏC›+ÂÝ'íÚ\@»³nïÙËÖ$&üæR×òœu…`­þ ŒX]Å•<ÎÏT.Q¯•È´"¸ësÈ䀸`‚È9A4k˜ Þ’6AŽ ¯ «±'ˆÚb‚øò´ ¢UíÝÃìTå~Z¦s‚m˜ >Wl‚(Í rÏ¢ÙÁñÍço€JÆñ)èïÕ‹ò ±”;¬ „õ»è —õê¾…äÈÙö|¢6@bì±pdrGQprÖG^¶M²Öì!‘&wŒ€~3B¡ïR‚ƵK˜€Òl„L´¯„ýƒ¤?ŸÆ|Án`¹{(¬/S)aªÀ̲ºJád5Ž °hÃnÏu hmÝÍ/þTß;œ€ÚؾæutÎê±Vs¸¯§æ0$ùÐs…†9’P“¡•[2û—û–®„÷.Ù{¯Ù×N¬ßXÎåI&hXÖ{#‡^“¡m.A»Óõ’“«AÃ-tø…„ý÷DZÁ€NL“ù}Á(÷´‚ÉÉ+Æ, +G«¤ÁØÆxã¼ÌîZ 2¸Œ×Â;} #w×ÅÇ»÷œ¦#~XyBuz„c½ÀC +^¶!Ýsw»ZŒm(:r¶í\LÏÞ?9`NŽé6GÓXˆÊs3 ™\U…;ö0v{ؽS8/q§ûùj¶˜Ú•ååËÆ–£4f*ßDCÕª¹C;ÛÐÐ'~òO šK·ÏùsÂ4ùÍgag™™¢ÁÍ“¨‚1O=ö=@†HÎóù\2¦ÂßD7 ¸÷{†ÆÚÉ?Zo@Kñõæâ¼ÈÐV€lVsÝnt7qt% +.dÎhC÷GlåЃe`¶fÔB}:FÉÂiùÆ=3ô¿,¶“­Èñ&YyÃK_½¼œœs}c1ÚJíÞ;z.Æ ] +:Å|Em§|b…b1@Øꮫکú¦³Wa¢U©œýd%¡JØ\D!(;N»ú¦Sh|8^ôÀdòGl™©õ…:óZIwŠbÁÙ(#EG×ÎRIä6CG*Þ"»_~ÞGÉÉ­Ö€î%¦Ž¶¢ž½Äô–ºR ÃokĨëc7ëx¬^•ß…×cýÙ`…RMñ…}·ÕPaèàfv=•©÷­Ò1Z9PøbcâôvνɅñâ¡vIŽ:õѸfË!ͼò½YΩ_»QdPÚs‚¯c¡œ¤CˆvËÖ²­ÉO€!ݦÿ.éRk_‰ ”µ©q¥T:diÓ‡vêm¡s1o—IŒ½  Y,ƇØU úe”Ê.ÏŽ÷jzÿÛÅÚÒs,¶ÑQtn0‹º”Ù_!]Ì-hdWšÒö`@kÚ½c©îÞçf1ð!€©Ž’Œr*ñ^'ò¢àœy±u}þböJõz…o^ìÕVä€.­¶²,)ì^Cõ©}£­È ÝT?bû7ÚŠÜtšÝâzr»Å±W3&&®2ä;Ùô<âÚEU>ĵÉDa3 +&®xL¦Û#×ëá/q±&®M·ì‚©âj9Dq…wìÓÄQµµƒD&Ù¦­w¾PT׃nuÅÀg<~Wu5U8wûËð¿z¿Ç99¢HùãEñ½Ù(?=²`±—º`Þ±‰{7Ú1žK^.ÊîA n5‹ßÝÒFó2}ØrëÞøzºª´A)x/5ÈÀ°¢±´|¥6 Lµ7”ú¬m ÁPmë)”fk`èÛ^ÖÝ´sï5€Ë$ô^ŽßªÒ›ƒMWji¢6@+tÁ4HuaÑ‘]ƒTïØ#£÷¹Gr%¸66t$Úé2´¢>±XZ‰›6G—{.Œzš{iÍO¾Iº8ûݶæI¬ì(Qeí­Ðâß¹Z'{ ù¸«‚P+7ÜyÐ4BÏ*Z¡M¦cèiEKÑ<’}/r‰Ó°]î—#ï“¡¨‹„Ç’‹¼l…\£L— É)·Håu –8‘¢zaT$Úw…2×T½JúÈÕƒØÁè¼úˆMŒ>}jx›@Ú99¢*6B%<žI +H Ò³@n“ëyõK @}æ'»Zš ý‰Ô4iSóQ4>}T%ñx›’«S ²ÀÕZrY±ðã’èSÍE\’[ˆm,¢^*}„2šäñ0@'®dmVǽ«bI“‹H[MQ˜ÄUÊ0ôpñî¹ú,;·yµ¢Ê\­îkžx@»¯iPûJèë^cÌ8ýc±x®Jæ•‚€£÷²Xh+Âu±ÿ…šK1/r/m¼â¸ÜûÑB¬½ïEX,ÌX6o‰½r'‹Ï„Å‹r‡Ê…Üù6ªrz!wfALî®§¸äîzŠKî®§8r'}5òã'Vȉ É6'lgÚaE‚Ú™½³;`©„Ú™dÛ}/"]í.r®´"cGì1ƒÚ=ÑG*®Ö¾Ð›³srDMíÀ$¬Õc—“' ¬¼°VüK¨O·l[ïîJý¼\Ô»ƒþDïR?zÇ·ÞmÃTûWS­³òì(¸âÛj“ƒ`'ùd²ëvt³3ûª·ñ•¹~È¢¥›é ±º_¦Eì…ñ…ÚÕ¹{za|¡âZ{záþÞéÄ¢êÓ †?û¤E7 È#óÓ ŸýìxnŒ~~šuŠÍÀ_ôM3À^ã_o7È네6»€¿Ú7]p"Oñèc_ÈÍÒ91¢Výàî›ê¿¹;_¿jàŠMÜ{‹ÕÍÕߟìR±úºª‹ +¶ )}tü$v`)r†º¬²ÿÏ¿þéeu°´õß&5Ã{Ì9ÑvpàÛWË BÉPæ,ÞgG>PÝѨÇ&SlÑ}/íÎûƒ£vm +¼o•­²ä.;©bhcBÁN‹ŸH©š® ˆSI"A[RËÉ(}Úé¢-×……?’>ù- +št•ss/Ü?PË ™¨ EÑFe“6›+ËR, §ŽFOh“1\Ÿ›5t ûïc²‚p<õœ)=7ã}Èc¾,\±×ͮ؃®ºÂw«¨JõÊÔ¨}ÍçßÖV‘>Ð e6 yÐ"¹sójQ‘¢’h¡Dcô*ïèŽNj{ÖÙdѲL1-° ¸(Yè—”ŠlÙÐÆM6QTFØGl‡c§{ÙH }½@—ÅV¶(NÏ Ûò9¿Aï"‚©jk<¨¥UDò¸+Š‘±«Çî• ºPPƒê§CE"ΩNþý²ó<è.+ʨ׭¤¬0gÍõ¹ë‰½ËêÄ>eµ&tIb…³žåÂ4œ•Š} ×MyÕV&+-™½HÒ€¡LÍÆb¯Â+èÈæ^IäZì>Ð>Ûœá^¤þ6âb s“^PœŸ³¢°ÂzÒ¯vnaË!w¢©hž»P Ën£aìÚH6-¡ zB¯äù¹æ]±ö·mP¢E‡Òj™ýúG¤µ€í¼X;Ñ(ê<—×}£3lVŽ•7Gu>§xòܘ<¯»±?Êy_œùØ÷yf{d]P·=²ßÌÅ P·=âÓP9|}#X2‰5Û#+^}çã£[ŒZ•Jè¶ç¸7 n{ÎŽ +ÝöHbxǾP·=ç@íñ Ë£»íI¡ÞBR +üZ•Ñ;§ýñíþÞU„ÉRvJÉê®­ƒŒýÖc-+êåäªY~b…8%Cõ\aÐÍTòÙß°Ä—ß6ö×ZídõFJÒªeÌ«7ho)ڽͻ7œv¬Ø£lV·P?ì,nrnüW¦Ø$A™ + +³îï+ŠgÞìf¤÷0yÙ¢ú)æ—wëã!²þ>Ž“—Ê_èv°°íÔl ±î%-PXˆþ0¾Æ¥r{£^=ö¼ bZ~#¼¯;ËP 2è—a¹ \PôžƉŸËdW>Œù¹] uúbç%0Ï0ÚôÕ¸*i².ãà¯[d}µ*0 š*êù¥›ðPC ;:àn¹¥Yò3xh8\äHÈHtêÏ|!è%ZDþ¥»F­cýi5=à䆨ߍi9:™zîcàYð>ƒÍ@‹Ãﯿö¿Ã¯7Å•øA!iˆÏNÒÝê§ú#|g+Œl®}í€27W®GST4=ìuÖ…ælÎÛ¾N,N3'óƒª,:åÿËxµìXvÛÀ_™}à†Ôk`Äv‚™Uþ¡çÿ·)’¢Dé½`n5EQE²èudå}ˆud ©#w’¡âC—U•ÿ(âA÷ˆˆbw ¦ õ–—§e¼Ñ¶µŠsŒ­©)Êz‡w(n˜‡‡¶CÛEª¬/Ò! 8õbgÅß4‚dÒ(¶?¦`€†Bµ¶ËËPV…,>KeͰ8µ© Ýù¼¿¦v¬ýûôóøá1Ogòl†£÷t&¤üÑr!…Ÿ“•íH—¤ù66´ï9ÇÝ'±Tô:=j-­ÉßxOb4ÛlÄpítÁh“|œha#š‹ûUÑÉ3‡†0Ûa)@LfŠ/>ÁÓ8å7€¤-Ôý|þà%»•5Ïq*˜ôŒ®åKÉzÊ(l’ÕhëèQ‚öÅU´]Íšú:*žàŒV~”Z¼S½sâQ°¿–žõó6câ´äAêÔ aNÄÈMyR·øF4$G P1í.äùýÿøõûo¿ýõí¿ßÿóŸßÿ7ÉÄk \¼':ó|h‚VÿÚñ<תñn uÇ aHâS¾í‘åi—äJøºÚ¥·Oµ.og9”í¼OýÍŠš#ÀRº,Fk(}l[L\†(lÒ&Àó¿JÔ5k±¾Ýåóˆn£|Þô0Ìú¤•WžGÅ:3ÂÖc¬7åå%od®¼9T¾.Iº ç)ð3‘ ý´LæÃ;Y¤‡wªÐ êí´.Ž?ßçõö7-rg‘%_:îP¸=åú8áçÊÕœ7ýÚNÊê3$Ç9ÐñÅY9Ê…üD?9(ór…Ï#´ƒ2²}<íP <. +éï´Èêï’”Õ2¥=2dlB{$o…ñ5 CVMÿÓè%ö"¦.²â‘%š¦Â]ávD°õæGçëÔ@µú*)ˆ/ÙÆeCõìø–BgíÎr¨žDóÙ¨˜z渾t¹íü‘Õß´ÃBóÒ*±Í¾¶Jù墕‰â|êïúÒ*½Z¥?vSnÞ3¤RÁóþí.ŸGtž÷Ôy¾Êù¦ºdݳóû'…:ìôQoSÉîߌ»^¯+ôušC½W¹zÐô]æ|½˜&dMy9F[²6:ŠÍî*¿5h=´dµJ¬P†hùOìq®=íåù²”ž(Kþëó±xœ˜^3ÙaÍŠÄBE¥’ l…_K¥œ”˜ªyY!åçùaÞùD#땇‡„u•ÿ¿OS”ºÚ渢Y vÖb±K¿u"Iô  ·ªGí^¦K“<(š—jD^™š>³#6P|qðƒE_0Öl.¡€“gàN‡%¢Ü¤EFòQ]ü"zÚ…xÅŸ%MSâf­S’$ŠúÖè§e•ýËÚ"E®ý<~»ç¬÷Tçd§ÿV½ÖËyþm{º}L ˆØNÚ°§€×>ùÇtª•ýçíýú6¯Ô8n­1ùÿцÜâ&+¨z~„CŽ•ˆaÏÒÅJÜÄZƒ#¦¨µGÇúÒ»€öñès8­Øxõ‰°ß­[ç_ÜÄ5ŒÎžžØ-Ðé!)x±à¹«‚)AÚAF¯æ¥â_ÿ°´qèAdÞvŠ@È·Pth…Ø&±NRC]f”†î¢*î ±QµÆ|‰„k³ïLˆDY[±’ÒÜFˆ§YâKhšà±‡œOTî¾ý‚.Ä·üfäÁõ!º±ûA¸d¾ž[¯ÿŸ¿ìúÛ{á9ÉJýXÓצè€må̱ÊÉ@0tÞ(¦`ßW¯¦±têí­¥z¡ôãà z ë8 ô âà Nì¾ÂNƒ]÷¶Å\­ãá7Cˆ•3†Ê¢ö+\ `y/çÕÅö3 :3vyÐä‡ùwØù7Û—x¾ï¦bÄ*–Q°ŽŠ¨û\Ñ1Ô>vjBÅhL<þŽ<ô1;§¡ý£ã¹f!Ö »¸qmÕÞ‚¢9<ÏHA#Å Ò+P?)G[o£¶ #‡ú=®`‰ÓƒQ ai·8ž:7É¿¡6Ø“.ë…ÎS䵜gìj½Ø`á9â}"Ò^ʃ'Â:ÉâqZ/ÔŸè<Ÿ'‚7%·É±ÖK)yzžˆK„Î|ž¸ÐãÄåùB#Z›æ#¥@³õCMÄÙZÌÅÐJ°å5)§-ó´ÕšÌ-÷=yüb=#Xwû<î°Ñ/Qš§9$áI]”ƹgù{ª¥Žù +9eô}FcŽó¢¬&¸YÙÓ5ÅÔ¬‰Æi æÛ25¯,6R0êGʹ ZJ 6ÄGÎøNÐ\JŸh+Ýá¶-ÍÐí³2Éâ¯ÐóÍÖòp{L—)n†¦b*n¦©ÎˆÃ´A˹hÂÐb’]¢e¹Ó8sSõ@1­MG´åaûÅãuóÚlÙÜ-²¥läÞº¡ÚC8š€ÇЀ¡«ihsd¿e¥còë„Á’ §Ú‹ëEù;TÇȳȩ+ Ùšvuv5 D« ÷ @yבêõÄŠÌC!M +æ:r¾XÉÈÄ3Ì/®YíaàvúÅnY,)ˆkz(`A»¨L ch˾ vš£é0¨]n‘…‚5öz­Âm§¶ Ý!|í]0e“w¡çlR%ë9mzrbsþfvù!ǯFÄs6–¨#(»Ö2˽231Åfk¡(UU™ñ#—³R€vyÆY)´ÐRÈÚÈHB«Ã6qÕ0/¿{ÚòÿRlgU9F5Q^(’b»Ÿ´0óQ…„Êø¥®ØtË'åÙóHå¢<Ðu 8m:s<)Ï÷ˆ9X‡²pçXË¢üT ü.mqs¶t¶ÍÕÊ ®ì4ퟯ/t£©ñ*ñUTÜ®M$ǃ^¥yÙ5åÉLˆXáv·C¹^¦€™–“ýŠ…{rX½QûPŠkšÌv0µíJ³å2ŠÈlËX(z£ÙêèˆPšej)Ž+öd¯=‡Ôq‡Õ!×}OTá¹]èìkº¯¤C÷U§ûJI±ÌaRœJnj6¦‚i  hà:Ññ¬I² ‰80-uî)Çmm{±¥HÓê,ÓDK"ÖÄ\f9)gŽ<¢8²i_]6%9}ÁùÙ©Gó ’<èiq…žIÁ4¨Xnz¬‘ç«ZʧVgÛÒºåjHž'-¹y¨ï•‡C}»ìêû°ÞhzSß|»7õ-ò硾¯—r=NÜhzSß:Õ7ç㡾]:|ñM}O1|ªoÏá—»êÛ¡_,WÌþœf±W¬ó‡òåȶ.ªZ–˜Fx°©£--òë‚T;òQ«0÷‹ñ¦WqñQŽfŠyšPÆ1JQÜf'±ÚŠp)Ão/VÁ5’pÙ©%ܵJ +9[MY­5á±»ÐiJǸÜî6ÆùŒ£_!lô, ËÎY;g?.òoëºgVo¥´GIXŠÎ’8Oôäß'nÔŸ¸=Ÿ¨•t(J"^<‡m1׫& …Û]=ĺ}ê‚Uñ®I÷ú.Ø~±"Ð`WE,ëš^C9Μ8”¿Š«É·Øä%î–ÖøÁPNù@O68ÏŽ †ÞlðÖuq8ÏÜÞߨ€˜^Øpž¸SéOܨ?q{>Qcªç… ÜBžlày³ù~²õÿ»ÚɆ~ Õ0åCv|è˜I”ks¯a>T(QA3bº„PÂpNgÛb•#å‡íÈ´$†ùÅÌN![“Üí]”³mUVwb;¦zÞR€U=©úûá;} ¼žR<[=ÐØK³.—é$h@¯gó¬áèò‡ÑR@SÊéêçëðY(DP\»\áÿ”WI–d' Üû}‚| Áºoàò1ªî¿u$ü´_ö®;ŠÔ× +IUÖÛ@KåçF&eXv—æØpz´Ü?o„s´œ¾ØÿwiwvPN4[»› x?œÍ¶¾²8ª_Ùÿ÷_ÙÖNTÌÓc·Í8®bâ³Á€V–ñt¿…ýZŽó‰|ÐÑbý°Åp¤¸£çÅ ‡Té\ìbhµÌã¦6êFï9«årë«^ ú‰k}·œ[_ç´Ø¾æH‡«k-лs Òû:æ"S³¤˜¬;pôŽ 0‘×ѱƒ@ÖѱNÒûÍ,Ô0ÒgÝÛ±žl6üäôýÚ˜ì_oÔ¥ÍYF*ÞmÛ¥>·íë‹›&þ‹õ_Ü–OÔ¸Žò=¶m_=ç®Øç¶-uzlÛù Õ-¶“êT¿Ñi8CÛ¯¨‹Sø•Ç­ˆ!÷ Ek8'Lgã¹û;Cü¹D­ž +!æÞuÀ†\ÓÇ!I +œ“Ú›,´ECJŽ¿+fþø6¤¿Ú‚ +é‡Ù8ÐÆD[–c@Pˆ—Z@R +8q½“¡š­D‰ÄÝáXˆëéF¡#‘®¬J“¶dh±§9d6¸|Zžh¦žíxËÓ@+‹•JC•c#]°ŒoÓ¨_v}ƶÈBÙÔPw¶ÞïÈ` éÜýÃÜXrZ…2\…@pŸÅ«hÀ¨Ç +ðùÖÈàS¶‰“ÝÔ{’ìSÒ¢·BÁ:%¤íŽ´XtFV‚Œ¬ªœÍ4CÂϱ´×ëÓØ*¸Ÿ†˜çš'q¤êWJ—H/ÍrÂrR +Êvß"X¥°‚bŠY 3\¨–û²Ð¡íúÚ¢ÐÞu°8Ê!ê9]”æֈÛiWÒÐ[°¯µ`iÀHT1åê$"2S\WÌ‚«‹]îd±šõ†5ÖœA-éËßÅ9‰k0 XƒšfÂþß™4Æz\FÄ[Æ$(w7ÆÄ°(³R˜ +fMÁXú9Ò]!×m—fv-PÙÑ,-¬DÚâNáè9€øv]=WGÇZÐøgVŽ·kzfÃowwìÚùӷѪŒÙÅNVkãË åÖ[¾üšˆÒÐHKV5 çS˘7»³ë]Ø•ðî>«6—“2ƒ½‘M­…Rë!½y YÃiñsØ6ôh”eùSâAt©ò\Žc|Ø$GßžÂþÙž"KÈÍ娂§Ÿjö6 SD¶ÀŸ M ¿y]0àîïz~Ð,z6 3i ¿)º³ãŒ!ØŠ¹·þ…gå,¤&Çâñz£ó+l[»Z–±¹W`9ø²ìíÀ»*@k'¯ÔБ *u€d‡ÊP«¬èúÜÞÚå­*ÒUhþ<аV]L™&wßpÍyXöW Õ™=±Õ4Ðl‡Šè3 "ء₠TŠ—Øí²,0#€’JïƒYö½8§ü$Ðn±Š ­·ˆÚòwc­ÒŠ¥Q®S ±–`-kv‘†®}`]=?>ò$Û€VÑõ1¶7=o9=zèx»3æínÝñ>m"ㇻíÅ4æÚÙŸåÆdÇgw ÌQ‰µ—UóoWwÆ<–ê¼yrìÒ Ï½­צþõF]5œedøf¬dšq}q«ƒÿâFý·å5Í+Þh†c…ó"¿ÊS3€ÒC3|¥ßwh†C?Ô † +lÍ`¯st#ª2ΗŸ£ÊUþ¾:;å¨D•CÈXmò‚E¬^ƒ·×ÑšŒPÓ^U3¦;|qr£'¥œkŽR†Þ”ò¯7ê¾è,3n)½±ÀûR/J_ôäÙ_ܨÿâ¶|¢F)†6„kXÀ¨r1Ê%Ô½Åâ FÑÉ(ì`T½<°ØNFmt0ªèdB¥žð)É÷„OåìU>}‘Ñ©4|ºƒ.¸°)JUšóˆ(vIšnB!q} -‡¹À(½Sеé GRœo™;E!éˆOÐÜÌ.ОÊ|)Ì…KÐ,ËW"¨$|0 \ R,h.ö5pº¤&þB,ªDñ}DA¯<Šñ}DŒ%+Xn¨•¤Ó«NåP¡Ù‚s“,LábßÂIÇ]ïŒ"‹^£Ë2؇¡pONÖÁñÃÎ}m¢øÿð ÒB0”RÙ%Œ6Ë9!PYè¨D6:jÒfˆ ›G§éVû€ŽØZ=}A)Jå¦@ÎÍàžå 'PÂõÕ-ôÙPpÛA–¥Ü˜Ý3ÚIØgzi¢ø»Xö1‡µÆk­²ï€bƒªe^oȦ¡à‰fÅk—×Ð[Z)¾wRâóèFqÕÉ$q2ªÕj-„Y—Þ²ë<8ˆ,øðXúÞzüÁºõ~IÉÝz„ò$ +ÄkEn½ F$•C=IÊÐ °¢zíªLÝÜǭDzԄÅìòXÁÓÅŸ,F&ÔÿBå.äâE·TÓÐk•"Å7Ñ®Å*@-µ.sÕ  Ò¤ÞažÜ¸œº¢54ix:RDÎI8rÇ +h]°bÅ»$Ñ+¾”5…š/W™-"±Â‚’®¥æŠX¨ÞšøUAG¨Š‚•V;ôå`Em"¦‚Tò¸ÂR”0Šó$/Ú( dz±§^^è0ÒHWon±)'CkǨ—Ø´"sœ}ÉE03Ó ñ@b e(û; ‹É…%ÑbI|œišcƒmðLX#¡$Ýñidw¨„þ-`ž`¢üñç_ß¾Ûxh8u"êÒ3@r‰¶¢AÞèLzã_ 2N·H÷†Ñ”À4‘ÐL•ز¢–bì«î’¥ÉÏCî§Êb6Äó•ñÞ»\U EãáãÇDq'bÒnYÑ¥YiˆŽ2SÏ«ŒÙÞ(Ñ¡%^ÅßJo0,RWÙ™X +š2•ó=F–™h@‡È*Ã6o5Š{-¤ ³ » Ee´‰bíÊ\8ÐSl—'6YUt„k¥n›vár“Üq€ÍÚTS»"ÉþM ÛxB|›\kR!Žoù¨ó=óãs¢‚Záò_QqÃt¯r¨«!§ùD3Α%@K)Óè )Šš„.+[زHG«Ê6ùåqÁ( ^?½û8ìÝ({‡9Û°œŽÏ‰öbÕq£‰LüZ»êçSfâÇã¦-·,^¶èôúHðñÃ9;£™¨6•ÅÆ*І!ýOL2“‘ÅÀ 9H®ADsS?PX5_•¹†F¹*‹™\ÌtU6ÎÏñÅiWD/l°ë$JÕŠ ‚¢óC’FÀÄî&[³ÄË ­è´P5‘–w†E‡k† å5‡Qß™ýLË*kûœ(†tÊgÓ§JçÄc´ÄöS´òø?Z‰ÑV°cÎ&Úu˜¹²é7ºJØipÅã^C’çˆTÃÀ‹´°«³¢ •Ïâ²äÂËbÁßzéEÈHF6l@L ­cÜÅîd1nSÓý ½#—§Ç,óiŸÓÞ½ª¦o-›¬ QŽ£Žü—ÇÏHrê^IƒÎV*gËÑÊ@)VÍÜöhK:|v6¶¬ke§×µ2P&CõÊFÅQ‡Áje 5gËÆneà%J,\+Ek<[h}ÐÙž°"”–ëU؈Oí¹=dK¥­ °¦ªjW+3J¸ÎVæðŒ¡IZ½ÌjC­éìå/R$NŒZèìðŸ/r,Iˆ}/³¾¤{j7(¯éDår¹ðœÒ mY$·È>òÍLà9¶cv3#å%¤x•¶Gw3o ¾|ök¾é +ï‡Q¯…¶ÞƸʧ0ÇùB¶„˜ÛCo1]½\˜øÅYÕ¾D}+Ck’rðþr^,ó»•·µ¾•±·±òÕÊ0§­‡ÝÊ_ÅÑŽ•–âÉ9ꣃ­B‹WÞø„‘í¹ÑŸó4âuÖœŽÏ‰Æ]Æ :²íÚÅP€ödVD\|&‹†Êý`‘ Æ®…vˆ®°9µh¹ž;]&X |æú²Þ®ùàkÂÝ.éiͽ=…~š@ÌÒù<³  ¦]ýíe- +[«‹—3ÀÅÖë+ý™³™Ë6ó}™æÂáy™‚EçÅÒ`‹”îZ˜Yf•¥Â‡  “G‚ÖréV•cPI—¨kV ዚ°žŸÏ¡ÕÐÊ%4õuîEG©ÞU|ˆ+ëœF,ZìöÛ5Íqí7µpsýÆë`'—ìŽ˜× æOµÇ˾p”æÖ·Òóÿ'6XzJ*}t3xx¹2QM9ÜYÛ².Á;b¾‘ÚÂ]7Ï“ÚãÕzÎõω–PQçÉ%Ññ‘Ì 6××ÐÉØóýJ;°uüî™ã$÷ÈY:ýÄÙÏ»ÉàLuSĹå&NaÊ ÀËb ó¼ôœTôœÝ6 S¡Ñ=!y‹#Ë3/»‚°ÕúpmÎÈš¹gîŒq&ÿõþùÌáÇþŸy-$ì• éûçË?¾ÿ +‚^ûý??~ýþï_~¼¾ÿøùþúÇŸ}ûþÏ÷ÿ¾üx©¡c#¡¬ñ ^Œ2‰j€¥PÛÊ/Ö€=\D:O¹Ê|‹ç×ìGÖÙ—‡Š}KÉ^Ásæ×˜°¿Ù¨H3SaI¥Ä9Jò[…æ·±¢ÂŠS)¨ÃÎ×~L4USº°EÐÙ·.‘˜ÄPlü‘{‹záT°6ÓÉy59IDN«P s0ZªEœ§µŠÜ´|i`&Š Ò^i΄Êbh j/¤¢N¤&ÌÏô7ÇD]Ý‘Â0¢•“† ’3AmÃ’oinU cþË•„}~ACýݘ&6>wEãÀ°Ö0¹wúêl/ zâFª´÷if7nË?ÔÎý–׈dÍ’[&‹J– +g8Kóš¡;¤jñ˜Gƒ‹$„˜‘®øfRg€ö,±˜¹á«®hìþü¤­ú߉"B;wQT¸R—ìVR5ã Q´´–` ëé]ª+ˆ0ÐZÕµ +ålâ…ùHP›#Ý>GEé «@#MÈ—Š†ã€pÜʇ£jjé®d¡ {ÔS|$„Íæ‰¡’³ qÓJvrÓèýû0g}uVJf“¯ó¢*ñ¡âÓ£VT<‚êi8äxNk“îp¼—ù§Ütgÿöîì¯NSZƒp¼Áˆ”¦Î¸æKP„‡fü»?Þ‹ƒ›QS'•ûW%Ôz¬¿AÙBm‰¹¡QõdZC²1ÏF w*å{P¡YÙ ^ѤÆj7/S8Ë#ñ!M•5 +Ödþ«tNlĵ¨©˜èÍö-Å`í ÙÛ¿èa¦4gÃþ}f/4 ƒßõÄ;NT¤óÚoómp‚g‰ó‡âë³ ¤Ù÷EÐÁ} ÜÈjhVCuÛÚ 3™lL@¥ßë9‰®—?E7åX:±Ñµzýã™Ç ÝVîQì<š1p€Ä/V|Ù°¼Æ7¬—›Ê÷ï#|ùˆ-=é6më·ÿš©L½ Ìf׎üÛÖ Zcÿ(½ÎßÒ|§Ô^Œævl{1ñI¥±u¦n.4l²Ýøé{{›¬<ü–@@©O,-µko›Þ ÔÁþ÷øb;ô©ÆË©²3DàC”7æ*s›žŒî~°â/„yÔâgˆá4ʨ•ä®~/»[})uÕï^wÕï,ݳÌy%‘DzŽé©;…NJ$ʇþéf â°sývf zÇ·R¤m€¦ZêÃþLÑL8D²«Ç~øÚ*´vÍ&íék¬oÚÀ +Œâ[> endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 935 0 obj <> endobj 942 0 obj <> endobj 937 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 5/Type/Page>> endobj 938 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 6/Type/Page>> endobj 939 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 7/Type/Page>> endobj 940 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 8/Type/Page>> endobj 941 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 9/Type/Page>> endobj 951 0 obj [953 0 R] endobj 952 0 obj <>stream +H‰„WÛªäF|ï¯Ð£ýàšº_Àv.»Øì¬Áîw³,c/‡>°Øÿþf©¥ÊÈRêȃ¡O¨*£"S™z¿½ûñÃòîó»¼ÿøa¹Ù¥ÿûý·Û»ûÝ.n¹ÿzK¦×Úú`ÿK51´þ«9“úÏåþzûêo?Ý—¿ÿÏÏË7ËÿþýÇŸ_~ùã˾¾¿PØo¢3Åe—–ûÇóuŸ>Ó>C9<ÔOÿ -·Ýj5¥uþ×õoßOAÖåqK5o­=CyïcŠõ¸ý÷öó-¬{Q¹å…þÿa¡Íi ­ ÊõïâGð¾­c¾îضÆ:5¿¢Y^™ ü=¯ôµ1/­ä¿Ÿ+cð"ZLåÀ±¯lã ktRÄOP¬ŸÔõ“àiù$ó™×2o5öÏ¿û×—?—o¿%àû‹ Ëwßm¥ÿ‹JÿBÿ÷2Ø`¨Z%PÍ‚±¾ØØ“b“‰6èÑÒLlÍú]Oâk ®?)&¯‘cIÆùäüÀ‹$*=ß#ØÍ(KEq¡ìâRr&Ø\+ì"=±[bm"¢ûYpÿŽ­/˦µä£Ì“£Îù&óÄ(æ‰#LyRô¸¡Çf:¯-nªO5Õöw\”gEuÆþ¹:-ß‚mXVMš«Tv_V§ 5ž^Z››“ÕñÅDªC’ÕtTöËêXãZŸ¢²:½á«uSu*ª3"\VÇÅ]O¤‘©{ËÚ¸ÔÒÔ®¯¥Ž!tM˜5!ui'à¾ÿŒ5æ‘Å­ÞÓ;J7€_o +Rè&Y#0ú@”†ŒK™t?0 k&!Š7…ζŽS`ÜQ%FSŒ€žhЬ‰n Wršx©gÍ/£ÈË$/®¯[e^Åú•QòVÉÈ艦Ě8Í´´½íµ¹LÞØ·:€>5qÔÄŒ¨‰QÔÄ®4¥ Õ 5q~PÓ@…¦á ‰×'“éôUÖi 2 +¹‹”'¾;Ñã•^œœwäd”9y?râÚ²u˜¨ý@eŒ¦u. 'zœRÁË™A^F‘—#H^XŸýÖa¢>Q²Õ:ÐMV©‘àù¼ŒZmRM¼ø$k}4P;j}èÉlhJrÑúh "kÅj}è\§¬Í;¡‰Ñ¨Í»kMb6ä˜2Ýf:;Ç]Qm€=L£×l?ɾ›Ñ§žñÄÓTËsõŒ2P›îÖ§È;v¢¥ŠÙílR"µN BÉ€PÈØ:ëà[·h³f òÞNÇY3°쇹’‚sT]p2šŽ3UpâÄG·ƒÓ&Šð YzepßÐû˜)/Nòö7º[*A;@dåý³óá`@€  `@8À•ïI\ŸÜL ,´‰¶˜äJ™Xˆ¤¼r=¼ ,ƒ(pé¸o8 ` _`E{0Ìî‚  Á‡zˆrxÿ•žœµú  ‘Ô³ƒBÎØÐ3–ƒñ€å`<ƃ·¿íurRzGPŽ„#ã™w §ÃKÁpÀâ¢5påsrTê"hGRu€HÊû'—3–£Ùàåh6µJŸ^zœ”ÚÚ=5‚u€VI³Ã'Yé4 F­o.½@öJ}ÐßpjŠÒ7ènxÿìn8FÖæšÐÃhTæÚ¥ž$æ€'QÐô@ä52:ÀÀÀîÉðô6½ ÄÞ"¿ím²3ÚÙÕG°–HoM Â݆Zx÷¬…ï̴֢ ¦ã|¹p7™¿ F)ᨺ`d4f¨ô6<ÝÑbðEà´1"Lƈ{ålüè˜XÓìa^ ,Æ?m ° +`bÅ ì1€=€ì&pÿ•³ñ£6±Yã(5ub­¿ó(ðBÉ‹ëÙ àz6ˆò½®Ü€w\#λH»áÞ‡ý“€ è@ ((=ωž¦ÕõÔƒçCEá ¨¬Œ¨Ø Dwoûßv8¾{)!é@ (S¦ÙõLý^¥ÁUàþ+‡ã‹RÁZ¾Gæ +x!‚ä…õà6`=Ø D­Ö±—.Ççc}–Óƒ´€Ze>M¬ð ký®Ñ¨ôÏ¥+ðI©¸ÌMÑú D˜|FÉÚŒCI€FmÆ]jrb&Xr ÜÁ‰œGw€ûÜ-Ý<§QÀé`ìÝÕ`ä·Žb^; ®æÙ·‰\Z-°{ÒÂWmÑæ øDÓaÎ\8XI=˜ñ6 % é8M'Îz°p/8mžÛQ ¤ëáÂ$ºÐ'_C´)ïiEZŽ0ÛˆÆÁx +Æ"\–ÔºéëN\ÐSM-£HË&¿ëÁÀz°€‚=€Wþ€_:ÈØÈØFÑp„Ù@”ÄŒ(‰Q”Ä®$9§• 5qzPÓ@…¦᠉׃ÿ€õà?þö¿myœU:IprÞ‘“QæäýÂôÀZ°°ºh½ˆö"\Ùž¦”GÐrb–Q¤å“ëáõh?x=Ú@­Ö·—®§*´#;‚–Q«M©ÙöÀ“¬uš@£ÖE—&¡(UBßÙ)Z¡ïá³ï(Y›uB£Q›u×¾%EJQE«Ð‘ )h«»'«ÀOÐöp´={؈ü¶íÉbl;뛩"“ë ¥ðîY +_¹E5èAMÇQsá{Ø`s)å(» d4'ª´=0ïÑðÝà´"üG¾²=aèIn_ìæ_¸›ÅÇ-ù~„hý)ºx²Ò ·LðòWŽåÉ­©°á dº=‘õŒøn7‡’u7‡’AEG„]‘Û†¯EÖ'·!r‚ã‰&Ïš˜jÄ Tttª‘ÝF—¬£\Ž~`y ^Öh¸¸dãvgˆ<2гy»‹NÐ)pvQV•†Ó«èTeXWM×@¨^GelØ:_ÔP(‡››Y‚W5r…õŒø˜G`ÅŒ1ƒŠNyŒ­¬“«?0X[;ô²@/{Èñ48Guâ´`pµ‰-;AŒ‘•ÎDTDV´ð˜Á Ì! ÐÑ)‡±y¥…õ±Y¥½ìþh¨”giFSRû(^ýšFÙ”ð~aJÀ;³3|†0;ì>Øì°÷xÛìD×ÝÒi°Rî³ +…DG|Ø/8†ê¬LQ +‘º,NQÈAÇæ)¦ÛÕúV®|èžë‚|11äStpš£anÁu·È¶H^z¡ÈxÖ‰AEG„Me¢+‘w #ø¼eìâ*zÆûËñ!‹ƒl§ŽÊ&ï•k@4bQ»V½0!³¯]ÐŒâUÌ:z¸ Û᲎SDÞRG//€ÄÆz"y2wô}G=×ÒÖ>Þølô!P2Ž6n=µï߱ѕÛç*yöÕ¶úÞÃðå (|cB„éËS©OÌæL,4 ÇyžW@±¹V8#b¬w3ºN̺¿<¨§ÏÜõåA9 ¹aÿ¥š”ÄÌ”ñŸ#sûdÃ$2ŠI&Vºá£ºyY÷LmÁYw@GÝa?Ö]¹ Ç s5–²Û°6t®0×0¨ ìžjÃß°XþŠÅâ0ŠÕá×ï›[LjÁÓ,«ÁX_VEýC)Ûæ DK3äœìó dDtð>Éü°sXVÎ÷÷[Xî¿/ô™SB—dé½ZK÷"¾ÑK Å„õ×ýõö•¥7½…¯ï/·O÷›[^·üð¼hrXb¤™Aþ%m=ïr£9ÖQ +]ÂÖó™¢GzØZòTžL„6o½XÈ2´GŒgëvgúÉÛŠöû½•âŽÆÒÊš5ßHæŽZk}G^qëéO[i¢®c¸r­]<­/y‹é«¥Û½£iÔÑ´¡%¨'ZÝ´Ð +±n¯ô²oP+«¢'o‡¨ÈÅÚ¾w=ÁsUm+mgHnŸžÿ§¼Úµ,¹m`>_qC;Њl>;íN`û¬¤£™ÄàDg'õ÷»@`±û*ðnr»$ñF¡*ç‹[Tá~LGuÜ!¦¹ÀËœ;gP•á6<–FØ4 ”Ìà%ZW•ÍÎŽÞÕ@$dšŽªƒ0”\ÖP8Aû œë5$H·Y˜‹mª&˜<¹(;qò V³ËJ€ô)¿)×ôxÂ蔺g0IY2*:Â&&Ï`ô…tæs×N:£é(“pIJxÚ]ê€Ô.é7¡¨ãÃp/K McÏe‘QýIvÍšì{’¥â¤{©8cý"µîî‹Ézq¢¥Í¼Ú‹3fMA«LÈi$¶âŒ2Þ÷‚Ã3õÜsZæ`g Y¹,ñ]4=¼,Õj‰¬e)Þéu*K¼Ðg;²ïkT5Ëê­2Á){ÛÊä«ì•Nó?[ôÌ» Ø\™­„J­>DË6/I H¶Ùc<_ ¥’\7liá¯yõµO{AÍt¯GYÛ­vƼßÿ´¾# KJ]¤zÄu 2(¨íŒ¢—äR“KRèñ¥UMF.ɧ~“ð&LŠÛ§Cä Œ-P@©ÜP°¤É:-ì4Û…æÈAN“u±V4=MêK˜ÝL0‹lhçd±Éãw)rŽ]‡T;«Ö.½k ýÃõ£D&P.ãûK‹× “Ïjo«ÖÖ«ÕÆå¦^µQ;p©ÍÔj¬cùÄŸÝœç*nŽ.[$ß…_!$'XréRÕzŒ?Å<©•äYœ- åò)è?ù6e…šÞP$¡(¬¬€oÎU:ñÙ·Hˆt±°I;Êz¬›©@eykp§2ŸSF]}¿S#hds¯ch’\îÝ™Å.¬ðI³Ü£U9uxA­¤Ða»–)6¯ò>­W´4KoØs•¥ò—{­Ûƒkµ…†l|Àº»èï(ˆz †Bæ8&:gggëžÃ«ñŠìQöìÔ/=`y‹[ 4µˆ±¬{‹/…Gð׆d:¹¦]¸ÅnÒÿé””wŸÂöv÷?ÐQþ¨%ÈANâè²¼âL¹gÕȶ–nƒKÖÍãÉàt ®”h³Ë{ Lkêä`—â†6¯ãηޥ¹TäfºÌáÆÛòp›`¶Çwçü|Ag·†³ô,:fâ.²ì×mÎñ—7/ªŠ›»ï¡±Þ‹G„‹®î‹Æ…4(qæˆtßß_ß?Þ¾¿¾ÿëñþöõ·_¿½þñokÂH‘™ e´½Ö,·J™i?ávó_I$®Ü¦ç¼& q´IѱÙ\ý¶!]û³WÔ…î´ïIÌKº‡k^Ì@ÍÐËm2˜]³Ð?îyÝs>±èǦãBÅ"Œ(¥üÅF‡XmipT¥£­ ›ýÉuöVhSžxw™tšÐq†ƒnÃ÷¤0ì=ñN½´éèÁ¯5†û—ÐÍ{Åø©œsï9‰'Ù,\V}J÷¦ÅŽIY4Ï’.ú‹#“UË'Ï<¢#Té¸å¡z‘V¾¿Ý¹P»->ËÚGù×úÖ>9nãV³Gº‰.m°?Æ…–™iiäË9Ѥî;áT¼õóÙ:ÐÜ‚²¥™G½´`ë©)•ʬ+@µZ“÷ Ô¢DyŠKó6<€nÔéÀçö½™PóÂq}RõxV@ŸHî½0rÍO +CÐ{az- \ú¤0€>) áä÷Âz-ŒŸÐkazR0+ r‡9âRbÙ½0”3m…áóþRB†î…á´|>,ÔìYa€§óvšÐq:÷ÕãsÆXØIŽ@ÖbÇÒ¨¾,a‘?¡d'·@{+ËE*´´qðýå——ˆi*>yüG¸9¢³?2jìãóåo¯ßÊ™Ããßûöúë×·ÇÇÛûÇãÿü÷§×¿üùòöñRC7Ž'Ì!ªùsH“t¡òb ÙæÓ¨íª±9rGt²Á*Ð\öÖ[½rî µ¸ Ñî´$ݵÊmR ¹š—}.n¨“KºAÁ\FäµszZ"1eóLLAã1÷q4½Áì<ÃüŸLS—§F¹YLÐq¥¸úpj;-øæVgbŒ_”vüÍŽŽªûnÌQo<c£wú¬ƒ]´%Ï!‹Keÿ€šÝ,ºjþcê¹¾¡¹4Âc¤œ«+j±Pâ"ŒéoÒŽš?Šöl÷$„Æ*cþM¶¾HGPª­±öWý£½ÞŽ4Ïÿ¨" Zéõ‘A‡ì¤×Ç Åîô¾H5øÓ+U݉2ºÛ­Td_Í{©šôšƒÔ:zg¶ãÅèµg É­9U¦;6¨ žƒg ^œPö +ù4Z‹ÊaD+7ï'†jÌ‚1Íd’J¯ïM?µgJ:M'Δœ9ÙEs¼]ñɨoƒ¾;²9kïÛÍYûßuÇTsÖ7›³Ní:b{³F¦d`}ŽÇú …èì„ÛÍøÝoïa¥B1ÎÐuÛÓž¤ P«±îdRPbÔt#²¾˜£¼éCVØÆQhÑ]—‚]Ùë#³Ó—MÊ7Lî—GØÓß]Éüöv;uì~ÍSUtôfó¶Ä`å Ñ[ß›÷ŠQ¶éÿÞ£·¶HšõEfzÙQÛ%m¾¥¹›ÞS¼ÈœŸ²[Öc²:!«ÒlÜ*Û妵Lò4˜kÂoÜ–6IÏAI„V=¯—&º(‡ß‰‰>³—OÒËUËÕŠÉ¢áò€:$>)XY瞬,p\°,7._ß›ûÒÓ‚Íý0æ8oóo>-T¦^ 28®CXÑ7(Sù6Áñ­Å·K­1!¨p\š2ö"‚€»Ô·¤êBeOÄD)6?ù›õm:òð­€Èf³‰(da©}Ö¶Ý”:ØŸÏ'í˜Ðû5,7/Ûƒ±V•‰éinÝSÐU¾œaÕi}Kþ±#:á4*¨¥äÊ~–]¥î—RöÓë”ý¤éêed•zÃ:‘ºBH×!E¢ä§› ˆMGôõ«1K _—²“–ìÍ©)»ý"ÝuåÓL™œ[¹ø¬Y¤-ÝÛúBqXQ|ó‡\ˆÌ»ïrX>/Border[0 0 0]/OC 955 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 954 0 obj <> endobj 955 0 obj <> endobj 956 0 obj (var n="Drawing Origin";F\(n\);) endobj 949 0 obj [957 0 R] endobj 950 0 obj <>stream +H‰ŒWËŽ·Ý߯襽p‹ï`Ð+œÈ64w“Uà…@˜ Å€?ÅæëTwõmAax†MžSdÕ)¾¹ß^ýüvyõñ­ZÞ¼{»ÜÔRþ}ùÏíÕý®½Ü¿ù5Yóö‡þ»‹iu6—ß²^}ùu¹¿Ü¾yýé¾üíÃ??.ß-üú¿?û÷_^¾½¦e¿sz:h¿ÜßÏ{ÿ‘8¼¤4’úôwúå¯åæœ^lJkÌeÿ—ml + ¦åùæ“]Rê ß>ïÖz¾ý÷öt³Û7™¶ÒËgúùq¡ýbs[nãhÆâ峂™Ô±6GE¶´Ï¦“ÈjÎ Æû™&å¹/Íœã:ÓYÃVs>öè3óøËÔèNÑü ê‚ù;u… ²Löœ·cnglê¿úé·?—ï¿'àûũå‡ÚÑÿEGÿ™~Ê18¿:Z;·¦-vº`9ÇrØ. ãí“^c!K÷Òl+MˆjS>3±/.@õCÄ$è.)RÖÄv耆՚¦Nt?î_¹÷(ª«ŒBDFPàͪb»Œ  ¯Y·<ÛïÆã«£ˆ  +£<:‚+éðk8êð”ûºò¬¼÷ãþÕAÆt@€±ˆîb$èp’ŽÜn/@±]Õ1äyc‘;ÄPÐ,e”ÇEàîîÁr8(ž³‡±sxD xHX Ês8H¬ƒ”ÃÁñœ=ŒÃY(¤¤l=AÍÃŽ‚‚¨¤‘çì~<¾:*Rc€®Œ†‹¶’ë$VsÞ‡±;Óa•¤Ã$‰±ŒŽNu$IG”j‘õ¼öÆñ¬a\ÕRÕ9AÝE-²Yr7}¨EÃ6]Þ Ð=‘e”jj–2/j‘Ÿ¾xè6ŸŒ¹õÇ—ýœ{÷ÄmЭø öÀ¢(¨öI_õ>2¾Ã·’2î5býEH=>xØøÄ™ž‡èi@KFÃYý)žw‡ñCï÷™±F×ßXG)ãdtïý@1HyˆÚ}ÆW~ï8wt´m¬%–'¨;ãŽ~?QtöÂu?¾ôx¯8÷Èkº°”ÑxVC0"€j^3ã+_÷š;ކ2Œ ø!æëÀ,J5Uû$Œ¯¼\šçr¯®æhƒ)µÚ‡(¸›‹~¥Ã§Ó±¨Ëw1Nå=öx%ÓÝ7º2Êuôè4〼eô¡÷ë$¨¿C5àoÀ[DwÞ‡Ô!R€Î˜ u½ê t–4MOD<ØË(÷G`ñM32È^D/{£$MÍ1ê& ¼Üu@ŒÑ@Æ2zÕC-èèNŠ’2ý5bþèÉ.A{ c$AÊtQ +£á,ÿGtRR¦Ÿ {c5Ðy š(eºŒîú¤¤ü‡˜ u½êE´¤ üQ-±?AÝ™&èK…>ØËèe¢¤)J5 =ØËh<«i/@µT½NЫÞE{ÉIõ¡¦¦x!tmd¥šÑ@Æ2zÕÓÌëFWsoÚ=‡,™6 ØÒЀõj/þ…lqßåLèqKã$àÓ€‚#[Ýu4 £ ЖчÄ Aƒ°b -¢û†˜C …s½jh‚$ ¼Ppe /£»~f’Çp$ ÑË~&J’ºaÔÝh ¶3 B(ËèU;“ïRR’Ÿ FLý€â!Ï%èa7“%AJ}4c`+£á,õGpRR’Ÿ ›­5ØÌ€š(e¹Œî› ¤Üǘu½jf$IèÍ€j‰ü êÎ$a/3QìZ&y½îe$IQ*ghÈ@^FãY9Ãpª¥Âu‚^µ2FrP}(gÙöb ŽR9Ã`a½êdÌ(^Ó +ô™Y¬îØ ¡}…‰>#jz;öŒ+Zö%fE³É½£…MѬ”ô™¡ ¶kŸOè¤/SSM?V®¦kØ©(S3V8¨é:™ &P4W¸Ô4’Ç«ž}\SÏ>®i ¨i®pÐÔÕrM=2\ÓDQÓ\áR“™š\«úL“ +¥ê3A bjÆ·{5C'WÓcÂÕLÔÀ +WjL:ªaûVêlÓáŽó[¾£Wº\ [*P…X€ê‡»è +à][Áí\ÎBv€§¢U ’æ¡i†F]þ›Ù7g+äyb*AÇ@™{’ÿS!J™Ñ@5ˆ&Øq®p©i6ÎY ùï²òP¦IäÿTË5õÈpMEMö«ó_O÷Ì3ëC& +‡Wó ºëC¦Z®ÉUQÔ¤NªZ¼’šg씦ÑËèeÿdǽö1°·1F#f¡ƒt·—w~ujól\u¢¸ŠËÇñ~=“%ßµFò݉bÑš+\Ö-ëF\L¼‘Ø +Þ8Q¶o8óÆÁˆ•®ÁžU/@¡€Á +—Þè§&#y£qolScμqèäíX’¼PT¾Ú­=ªáûºƒ7vw4gÞX[C ÞCò ”5yùëÒM7öðL|Až”ÞÄžG2º{h +ÕÜp{ˆØw¢ø”I`èå¾avÒÞؾ ŠÊ|:Ž/÷Òóy8_9¨q¢¨f¾rdTÚ·nþóÛ…v¶Ë¶ç›ûÍ.÷/Äb–¶Yý‹«YŠ%˜-\ŽžQõzÜ_nß(rºl¿½¾½¿ßôò™^·?R˜èìâÊSÎæè[…Сð*(-m«VwôÇœ½iP=˜‚f£ ›h×à&ÔWteŸVGõZ˜çeFª j¥ +ÝPÊâèZ%ж£å ZkœÚ^$Φ5¹íJ“i„M<Í'Ÿ©kÖ$*¨DõªRÉΨŠ&½›hVZbû<•¼«PÞ*LÛ·@–®¡³ƒ:+å r[¦ú^kM¨¨n;²#¨„“iSú´»\·ó"0« +Ò«&Ç-bv;”FÊÚ.xNtkMå@ZÀÉJu˜Wú©$´TDUhÌí(]óðvÌÝè‚¤Ô gúÙÚÐ'Úq¹àvÛ|ŠÏ-T·‹Ò•‹õs»êr‹+Êo0Ìê—±¢Û D;n0å§Í.sŽ6Ctåê”ó ¹´õ +‰¶?[1ÊcÓñ‘–„Æzö˜–šî®ñ]„Ö2Çbs!9a]HNò ì{ Gø Õ¾ÏÉ©}¿W<9µ«W°g&Í«'Á’“ДxÂÑ6!ó»«‹ùôo=(Ò˜–4öõzŒ´$(„~‘kZ–è¤zê–´Cjå¨÷§P©õ[Í2SÑב¥¥".<ÓTîñGe„fÇ'jºy­”@JR©Wºß¶‘’„Vç`÷PHɹ»c·‘=º\ržcDÓó‘D†xÈ]Bµã+R|bâÉHP¿þpuûDÈGZ®ŸH$4†~Š#%'MLIÒ£wùHP¨—SRŒ[9^Kçö2 ˆÙ%M·€qBŠR倖wž‡¯Ë Ïõ{ Ëã´Ûýæëõ(¨­±$Ù±OÔªŸlï +ÚÏ[óYœ¾]µjî¾ýB?~pQ7 p—iÜ^>+tÃÃÕB/s×Ðí’Ñ Ýj›ˆ1‹I ½ë˜1Û²à Š,ОäSé¯4-_êál­<5<ô¿nU¿´U¿¼~º¿ÿøúéË/Ÿ>||ýé_­ÃòÑôì·ëB}]»íÞŽmÄõ| ˆ³}èpYsû:P~¹>ÏÄf¡w×sÍ:[K{º¥¬YǮןŠmÔçíÑ:/BGVÁÎq>`.I7žàÚ+­pµOPôÌ8N”Ñ.•‘£Î¾¾îj—GëlÛóõNs®ÝÏW=zÅÀ¯ݾvåtì°AOs›9¶Õ瘯®ú½d«›ÍwS5\ƒ6>[’-ÖþléTj§ý¶«e¹’†îç+îØ4аtl/’*'©dþ`*›”½Í÷ç¡tï.çÒBˆ#éÈsç¨ÊÛ؉}ïŸCY=›MYOqṃ3f#ôÜq';Ž;°;ûŽçÎÍ–1eåŽÉ/#‡²Æ;•K¼nÊZw#›Cà;þÖ©E˜U§qI÷ˆlšbÐH(Ji;:“ÑM4ÈZkVI”°9LÁ2[,ïÎYhaªKÑø8Ü›4´koì,ͨ>Ž:û5º‰h@Öð Ÿj¼*¡Š$ÜÐAÔ´ˆ…©»ôF+ç›)¨Š(AC#aq”Ô·.Aðþ„"*ß?n2§ QÕÐÄòóÕz=ز•ŸÛd ã N+‡ÐÊBÖgš©<Á5Ž$†$qè Âl¾ æ~ªM_©1yçJîm%>l¶m×øºu¥ûT îÄQ˜+ƒNQ”¾­Wë™D:ÅŸE>YOj°¨ô§­»¶ÏLz”×â(,œHšd…y Aa¹N;Nýo¯Ø¹ž7¼ÏèÑïsí;ïónxOèÆû|ÆÞºñž +ï ÝxO‡l¼'¯¼§›\yOè•÷„^yOè•÷tšòÞBÖWÞÓ5îxŸ!!nx±pËûîx_ÓÂ{²yË{ öòµCÇ× oºk» ÐIµvaÕvá7º—¡b~iþhí Þ?×.¦ºíÅ«[Œ¶²‹tíË[é9<~ýøóýíå÷×÷Ç÷¿<þúç¿§—©p+°|êI‘R©†rð¥+jà þÈêª8våÙlºk”¶®Ãì‘p*ãkYåÝ„÷ʧ“¯‹VÔ“Ä•ÅjOK¼>] m”ÜhͩҘÂý®ÁÏ#„៳L„6UIÃ1$m” ÈBÅÎ*Tä²€õ› s›BÛÕ+P‰»PäÑŒ²¶Ã•9È[ÀÄ©¶è´>#M/1÷fÑÓ@cš¶‘nb rÏæšb2¯j‘"­or¶QpÔ}oº<¾<óY'1Æ/G ù|ƒú¼gŸº +g¤MÚÓtJõ{¡*òì­0JÅn6¹ÑîùçôÓÖF)—àÓð‘Í¥zjù s³-ä³ +N‘¡„ +%ý~¯¥ºuìw§;ö;O­–¹[qäѬcÚ¶T{BgNÇ¢åèSÄâ#êú~Ûè/nF}ÌÍé©ûõ‰ÆÓAC$™zdṕ‹öí(éZÖ …5¨‘ø2œ˜×Øå`:o¬#úusTÔ ¡£9— qûh51­Ÿ[§õçHËfŸê±2Ç-@Aê‰n!mtñÕЃ)ÎE“!)‰Zßu_¥ëòÛjéz·ÀÕÇ”ïpγ‹DVÜ1ºkÒº­•ë6Tô¦QßIZ8ÞôHÚ\‘‘Óç@{T´|KmÉÒ-\Òí(ÚÄMœZ·DtnYtx‘(Ó¡QY-Ú8½DAEÞ“­_ª P‰”ßk¢ÆÛM—z¹ø°æ.dbb.üwt«˜Ày»˜Pw— +Ú.&è÷ELŒ¸ˆ ¿ÕÄ„ÚtOáwõÏyéĄ݈ãeà€ºpyèÜ«€#<:«w½ˆwßÑÞ?^ß¾ÿñúøþñš¿¼aÿ>Âã7úãk†µùŒ£æZVO¼ òãç·§í¯§õC1ø?ɨ†}ùý‰Sõ¯/,¢¶ÓÙÿ ÛÓ, +endstream endobj 957 0 obj <>/Border[0 0 0]/OC 959 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 958 0 obj <> endobj 959 0 obj <> endobj 947 0 obj [960 0 R] endobj 948 0 obj <>stream +H‰„W[¯47|ß_1ð¾_¤(¹€‚Há¼#tˆ>ö¼¤ü}Ú³3®j¯7“(ÊžZw—«Ûn×~ývûô·o¶O?|c·¯¿ýf»Ù­ÿûßß>½½ÙÍmoÿº%Sƒkmÿâü«5.×-6gR ‚¼}Ü~÷‡ß¶?~ÿ—¶/¶þòŸüòÓûïß>KÎ/¢3Åe—¶·o_.ûîáÿnlÈñ†~ü“|øu»Åè¶P«)MþÙ>ö¿}߃üY·û-Õ`¼µöŠØû”ë~ûùö÷[ØcšP¹í³ü÷çM‚ÓZ”ûßÅä=¬c¾žØ±Æ•:5n¢Y¬Ì…þžWúÚÀ++ñ÷ce ^e‹©#êñòÍ$`€Ò|ÙkÙ÷Ú„?¾ÀôþOTïÿDƒÉ²×¼ÍâÝ?íñØ¼ÍÆ¶s£µÅ¶ïÞÖN¡ŒÉh(±¥£Oìýq¸¤VU­†ŒÏÜïÓž²i‚?Ž·=á„2M¦ª²žXß“|þ¬VCÆgî}ONêf}vºNÒW}ö¬Š°¡ž¢©N.˜è}Ÿz´2>sÏ{¢:¹bšð³(@C;ÅR•œ\[ÿØ;VCÂgæÇ޼T¯ÏÇPœ qßN’Æ·VNˆ€œMîòFÐx?ÎAœY&¦™Þšø Æ +[>!r1IÓï@/ƒ¼è}NcÍÎ,ÓãܼUOBÇØ²ÖHIcyÑ( ”F¡clÏ +£a°Øç9 |?}±M +€ŽÁe‘oc~± ¬è˜\ijÂXÁó>_>5u<5ÉI]r­ãym±î7Š^,‚ÎÇŽ#OìçãV—Âô÷ М¯ú!Ê12LñB‰JdJegÕSLíšs› À@•fвq.8~ÿ›8Ãùý'l¼ÿýíç?Z<ÿÍT©läžx9QMêÍM!lt…buW¬\ñnÍuW¼ uîÉ©ŽŒèËŽˆÓ9tDñ©ÙwóßÝ`”n/Ðn—:ÚËÔ§Iú ôÌptDî³ôÏw]S5Ö$‚ b ô‰ÉAá1U£èI²¥<Öpd™˜Þ'úò˜ª±ßEa 'Ä@쓃âcªößIò¢ÈkY&¦÷õé)ãô„`šÔON€üªŠ>Ú^õä —úyBþ˜äÝOe׿wæC1ž¨Ê“±{Ç#¡/nD‚¦>~J·æŠ7›J÷Š(ó"ƒæåõõ8™jý‰ê,ù8™šè MšP ùTòTɦê˜äwŸºŠ{hAn–êú@u–¶º±„¾ÐäýQ¼¨óe^dм´>‡ãf©> TeÉvuc }¡É-ú¤xG}/P»šP/“W÷h :w\Ý#B_h²‹>åò|LU¬Øç{4°¹?y5ß” q5ß.µD=|Êâ$‚O‚{TmëÎk w… +ÃÃÝPü‰=ô ÜWãw3Fñ¦sJw]‚Â#+ÐZ´$ùE'¦GK‘—&%„¬uà•-«93PýN§Õœ!ô…–ÊïÎÑMÅ;:¯x¦Õ\xyæ³÷ÀëàVEyäÖÞãYSƽ‘s)¿”»Þ~²³÷Móe^d˜=e!ïAŒä=%ïA®2\úÜ#ªÄð T³á€Á' VûŠg-`b-@Y 2\iÉeÕhAU e`¤eÄNZ°–¼­&ïA(yÊpåyr^ÜÅ‹Š3/PæE†ÉóÐzò´>¯n!{ÊpåyrZôGñ¢>Ì ”y‘aòиºG—>!‡EŸày¨:åùÁó V{ŠÏ«ù¦´«ùvíßôLw‘µQ\QœHÑNÐa(^yàð<ˆ‡ç¡œäy(ë•çÉžguÛ2™žÞcñ7qÒZ¯µà¥-«YÃþƒÐ´š5—¾'ã÷:ªxG÷/дš­³ï¡¹Ïþ/„[Må?ûÊ÷øÑ£XeR §xc•S5zg”(ÃÄËYà?˜þƒQ8 Îpå{üðr±ÉMnɼÕ8©Ožxw´hZJ ii9œ/‡S`ž€wqå¼C—P‡Ó)pÅN§@Øp«œÇ“b"-„²d¸ÔÒVÝTZÎRC +B')c)¼/†÷`.ƒø/=¯‹»Ã¼Toâ%”y‘Aóòzx^ŸW7\g¸ò<¾,º£xQæe'ZJ i±œœ-'çÁ¨ïjßÅ¥ãñyÑ%æEu˜—P»šM/“Wwˆ\£qu‡.]‚O‹. ÇÃÕ)Owh˜ +U†‡º“W“•W“íR‰ÓÓ@œEU¡çòâB²òŒž~€ãÙ#>üÅ¿Ã9ál8ë•ßñ‘§t¿â'-ý¥ÊÝ:´P¼ÒB/lYÍòŒ¦Õœ¹ô;>@Ïy$˜ÍgZBÓj¬N´ôŽ’ë —Á­ŠrH}åvРM‘2M+#­JÉ4ë™ñ³ÕArDGŽƒP²Hpit §™,»hk1éÙçʬÈ0ZOî€Ö“; ”Üe¸r8r(ÃðT¯á €ÁŒPí (œ… Ö1@–ø+έZ!(„ Œ„ŒØI Ö’Ý Õd7%»A®l޳‹[£xG¹™v€ÌŠøÉä`9y ZžWWÍ\Yœ¶hbEi˜(³"Ãdq°ž½Ö³× Ô®îé¥Ç©‹)Ú³8Šu€v5’fƒCßäÅíaW0®nÏ¥)(‹ÁÝP]Êóå½A¬¶7ŸWóL)WóìÚß()b$ж’*‹é¨Ú:,Å+Köñ°7”“ì e½²7™Gswâ&)Òàåç–R¯¥àQ-‹ñÂ.`Z—Kof*ÒÑxÅ +4­féìmhγËÀ‹àV£Dù ä¾27a4(¹sm°§ÝûPèi ï·äÏ=¼BÏ ÞäÎz`ý‡B±^ÎÓQW(_hJÐ4Üi5ïi5ÃNMn$XýŒÖ&÷A²Äˆé…–-'wçĨ #÷ +›ûb±¥û”:Ð÷º­Wèe_†“N6P®•ä}6»¸?„^ÞüL¨Òyß=[’Ú‡oìo3, 0¶$ˆž,I¬òwkû’5´R!×öÓ´C ˆÌ¼qмßb‘V‚8²LLï}6ñAïe‡­åb ˜¤éw ÓËMakc G–‰i§/Ñä´+“Kûø$;(­ïÐPíÿ»«ÀÚ«YŽ«° ‘-4×Î;7âc“åüØ%$c«µß8âGö÷ã÷ÝaùÈ¥kH.v‘]* ã•KxeÅÈ'‰ +Ä™rŸá±—gpFÙ)zâLâÚz·Žáÿ)¯v];Ž˜ë+Nh¾èwÏ„²¥`¶ÒM ›WÉûý[ìn’Õ3GÖ†{ʲù.ÖR4Zb`”´Ê°fOû”!`i¹Xúz1¿Ê°/ú10JŒ?ZeX3FŸ•¥ýZß_l Ã`·'"ÂáÌ+¡pS;ÄÁ´O¯±Ì @]Sy¶ý· Õ!œô\gÅ÷PÕðÝÚHVnAæ. ãbþàZj OQÓ°|B,¦›nG7-mÄí)vÑûÄ».Y;Å‘PŽ˜Ú|†í1¬)=cB„òÍPŸ1!B´ ³³²@¬ÒQæná9zc•ÇÝl×Ѧ%ÞXÓ~ýˆ­T¿`²œ§`¤ð96«8l zc¨¿ôÕSþ¥bs…GÆÆ‰Y&Íœ1¤€ì7Y(ñ…ý’!ÐFÛ»ÀHÛøjVã‹÷V£Î:C Ã"Éd[Íù·v†Ë8FºØÞœDí% ¾ Õú`Hk!áŰ7Æz é¿5ì;Õè„æ„õ³Íâ?¹Ùq´£SNÓtò·ŠM2Ó¶Ü•ãÜs§€¥Fíkî„kl¹S€T´Kî&â¹²uÍa–—iÛsWŽrËa¤«]r'ÚçlðÜ "{cÌòDßþ wµ9 À…櫨Sd»§%ÌÛÁ¿æ®i°Oó&ii¼ÛõK8õQƒÇˆ{åÚwÌ{„ÞDÝÔ¢rX’4Œ4ÞmÏ75p$ÌË{J˜Qà>{cÌ{Ê¿ÝòRÁÛ0õcä‰W…š€uðÈ#Ìf}Ë3ïÉ e[½à•z­sŸâE¨Âƒg'cÖ§ôíÖ§Èë¢BÜ­ˆ¢öu›cÞ’þ5wníJô\Ò1Òx·ýõò&êå–”ôyÿ9æ}Jo¢Ž®Çœ&&¶Òu·ªÜþ@WrC G‘dnhǼ¡íÓÍâÓú|µÄœÄË ÎÔÑq²½+r{Êd0ôQ¹‰â¹PÓ@¨ÙÆ?ýö€åü6}}—¯ÿyD°b NÝðè/éQ΄á>‚“…8É_¯ßÞý° Îüóë_ï>¾¾‹¿ññw!ñ¥åG)#z½êþo#×@åHË‹4h/øŸèý´ |AÏ„@² ®¿âj,+KoÃôJ+Ðy[ + +6^Ťèe1Ûž•Q!è—‡1 ¶ôäÿ€äúƒó_;Wç  Õ±¤=P=âE/ÏÏÙ:Ç[vçbGŽƒ|;^0¥Žs@%ˆ…šÚD㲸¥`>øHKÄÐI}SWw×Å@Ï0Aô+„'Ì# ìZ*/9«Ã.ˆ³°MtôÙ +xEANÏü7 t&JªÑeEðô¸kàêpkEˆÉ‚JÒÜæ¦‚ÙŠ‹ª#Iϳ]d%AÓ”)EÉõù9ø¦TñD÷ +&)-Æ‰Ž„°‹Ù*8¼„|–s#‚4çìôgîl‘•ÓMCÚ€ÀèSýnÜä@'Å­-£L­©–Ú'BŠ3žäйP·Ø“,5'饿Œíå¬h ?ÐXUÖš#mÕÕÞœ±ÌÔ΄ÜÌÄÖœ@co8˜iç^»xe úm%"·%~×YÖ–€ZÓBžm)Ñ9fÖ©-aáXãH_³0Ÿ¦U½u&ÎË£om‰3¬îN?{ô,» F µ$F}ˆZmÖ’@QlkÆX½J-é¶²0kÖ=QŠ|ï1<3ßûN¶~ë]¹@Ë®1ÑÙ›–?•® +R?Bf‚\Ú›fÑZÒŸÉ- ⥵YŒÜ’Oã&éÅ?(oß ¢h`m¡itX†Z冂£ Lük¹ÞŠ*Ô@Êñ¦kÕY‚æK¸ÝU0Ílè3p‚j¾ã.EÁQu(µ³ÍÞ%»ZÐoö>*ÔáÕ2~/j·K5]x¬­épp«M×åö¼¦«v9aR›«MY‡ÇÄÌnÁ³'n®[&¿¿B-HM±äÖ¤êøå1þù%´E­j ·¥/'F´¥@Ó¤¦¹âzÓ„úä*Eì«`Öñ·ÉfY¤´Ø˜§všgdÛ1ãM‚”RêÙ0OBÂs +o½Îiø©l‚£1hˆ”’(j—-~mŒ‘©a±+®—/((öFðRÛ´¸àU(·™ôÉLC°dÕP)a,”j{Ö¹âï' +ð·EÕQåï•nòc@]j\PÛ=»Ï:×ÈYuë”U('ËâÄ–6Fè&Øt„²ÎNŒÜÍ£ƒMµ?µÏAw‘ÍgS·ÅÇ,o±œOÜ‚~OÐH܋ҟÂáú (ø;w‚Ƙ>Ú`ƒ$WŽÃŠ| ºÑhQ¹L“¢J]Õ]êpÌýSŽdëë:#hí:·Ñ‡WYÚk¢Wg©;ª•î“BÞï(.Ð…LJ ]äÇn?l8;£ÙT÷± è¸,7ïP¼tMšMÖ¢ÅJ'¿fhÈ×B õâÒÿ”\ö˜Â÷~?б×(Q.ÈI]Aâìòáé•r¯ªQm=ߪ­§'ÃGÐûð)=*)³¥ è>yåÉCR¼©—:^én—V¿?‘Y‚»ÃŒ¢—ëØè6vJ¯FŽÙ|}2vÍîJ}2vHÝœòdìè·pßS£¤FäÈrZ!DsÊÊÞ2jñåÓ??|üüûû/ÿx|ùøÛ§?>¼ÿü§RŒ#+K­ƒŠ¢×”«uÕþ˜r„«êïIc¾h•ÕY_ux«r©¯3UîÚ¦\zf…Ð1ÈIÛü]Ǭ­‡ïx@Çl} FÔ‡Á¾Þ¥@ðôŠiµ õÄ…·íiŽÂ‘†îD SàE«r3:4å +’¿{ÛºúÕf[ï!ÂûõÍô¡“;ct,=A© ‡¨ŒQŽO“9n^è3T¨BT•,µ¨ÄnÛ^WÁ"¬jF4f_¥j:Ixk¾¼1ù]§nxžù?ã‚Ñ6×ðGÏE½Z›¥É:=¯lŒµ9Énšœ­Ù_Ç•ጠ+žÇèh\U”…’/f’tXã%§ÒlB« vÖ€ë¥\Lu§äô¬Cœ1T]8lÿ°»ÌÐ6‘6+•uÍÚìvk{ älV{â({íŸs„ÜGs½‰Ã¾^Îù¹çræ«¶ïšÄm¶ˆ ½­· ‘úKÖÅá#$pnã­Å²@ÑP&WTßÓm³ º¨F.T•©ðt… \Ò˜ez–˜§OMNÅ™pm)A5=Œâ¼ª% %\² ¥v%ÊQîµïº( âN3^¨ˆtR¦ÃHÒô(Bç#ýÛ•ë„z:^æºmiðqž8)ÏÁÍÚ‹ÒÕ ºf˜[•Ú˜‘‰Ž©˜ý,¤ [dÎÖ¸Ð0[$¶U*026í!<0®YE½OªU¢<{ hêZi¶õ€jr¨*ž«†¨‚am›Ÿ ýÝ­pëx¢Sß· ²ã`KœÐpXû~Ñ ³c‘’Ð-°à@Õ¶,á¬ÒÑ•ý€å÷ÔöKê—Ô‡4w6Cè°KÞéJ¢¼ÌßKÞ!¨UHyZ¬/,õ0ÝŠ¢–}¼Q˜²ÿF§SêéJ£Ô‡ðl Ai:uZꃌPo"‹…F!ž{Òõ¤º=éålW*TÎ|§BåLW*Tκ앳ߩP9ªŽ>"t^k݆ø÷Ú]å zM,þ{·a‡1W¹ óe8Í;êx2´ÕûQuêïÞ®ñ§‹”âÉ–=¯,ëDVôê®÷zæÑvXnDVÎdxÏßæÑvêò¡=. p%§,íÑbTï$âÐr¬^‘6BÇw­é}e¿{¾E³õÙ¶J@Z°Îv ˜{ØÙ®@Ñâhç¤ +:ÛeÎvÍ´³]~£Ïö„âô$ +#:–ÿ9$ù7n9¿ŽÏ*‡ÁŲ m®;¾”Ó†™S2AkÑnS‚"hÞÙ­A>ÆøÛÅÙˆSL~ÓQ~¼óVvt<ÅèÐ.ndYÐv^L;«Ö7J麑%¯és +Ú¡8Òƒ(æôxÎÏ=—#Ç8 zPºù +®…’nµ‡» å[í=ë­6WXC³:õ-(h9Ôa]„‚æýˆÒã¶ ·-(.Ü/#Aó¾ +]/#›–@SÝV @=hEÙÐ(eð« +‡¢î[P<ìœW௯ï"Ȳ|úøOy”ˆð(Hàë·w?½ÿPOpè¿ýþ¯ÞÿñÛÇÇëÇ/¯Ïÿþï/ï~ýÛUŽG s½b? ‹÷pRËN\årâ(sIÿOÝ NÎl¶ìÅ€ ÎÆ¿—Ÿ_ˆ’ì‹=rÁŽÔ•J7ʃ~5쑆6̤ۚsšÔbJçÔ¬-]ÒŽ¾NÊ: eiÂÏ+kÈ’pÇ—>Äë×iìH…Ö·³êžW†¤>žCù¦¡Ÿ -CU¤){ýdH)!AÒ©ý®>›¶€œ¸ŒÊFW£!»UØè˜LmC½loCm +ƒÌ9°n;ÅÓ ‘mºk«/ÜbèÂÚíÂÌËÚîä©î©ÕI4&ä”Üf>œzœ| ó1$1Ö¯úù’jÞµZiŠ È8g¸gÚœŒ²³MØ"”Òú3§¾èjù§ØégX>²®f"^1º†"NÒ•š9¹n“6TýAL4OB¨SLÕ¿U:5¡³²/Vlˆ& ;Р¿rXþ{ :5ŸÉŠš/•qWº±B‰Ñ²/”VÐÕžªæDâcÇ­Thµ½TÉ‚ƒT;ÂiD’”Ê‚`H¶ƒ˜*⎠:Ö¦€Ï! Þ&…ìAÚ)^£(‡­f¼ÆPŽ™1Îä ·ŒöófŽ}µgJ=Õ¦˜) ó–T-ßT|ET“ŠZÐØ ‡õi)’í9äo3—[Ïñs|޵ÛXŠ5ÂóŒÀ”#ÙúMPé„›füž·ûòIÅ(¡ãLÈóYÊäi56mC T‡XhºYßÕQÖô!K“´t£Qi£¥’¡•Ù˜ßY¥N+Ð/KÚÓçÉDÎÙŠ,~UöŽ ¿ +ó„éÐyÛsÒràèùyó^W:"î°ó½t( ³¾ÓLï;ÊÒÕæÛºœàžâøC‹ùÙN4"é!|ÑÀ¤qoè bª9Äаd³iÒ°â7·$d0ŒçÄ$‚«^buÊa:1Ñ%{ãå•Ú`¿Zé­8¼ˆ‰³{€’Ÿ,¬xZ° ¼&l”[Êý¼¹¯>-Ø6‹4aÕfçø5Q™qúÚ.-ÄŠdÜ 4NÙoæXg.¾]ÊÇ¡´“…)£7"О ¦:Š'˜(]gãWŸ´ã€ÞÕD9Q¶£÷›ó¿Öîæi®Ý“P¯[<°ìsKþµÿáTJ¨¦¤g”õR7¥!ûÃí!ûƒ¥ÞË«dmĪR."ÃCÔ!ExëÜ®>t@l6¢¯_ã‚ñá®4:É ˆÞK£Ûï!â÷ärX™"‡˜[XÙtÖ8iGK·¶î(´(ÅWÚȼù®%çyëœAÐïRÌCQeƒ„®FL¤ Œ×gTÔÉ´}î“6Þ£#›muwdË%í'&Bܨjâ›. •Sœ›&CÚ­¿›Ü çrìÍr[âîãÌw³‹HV¾.bôÖb}Û:×SWQL³ÅIG8bZ‹ WTä$Âô¹Ðs*ª Z«uë-­¢ÜÒ­Üj·!îä„Ðq)$@Ç¥Šj$‰ºýšm‘µ¦Û{VTé=Ù8Ï[·ªžŠ²Nj¢Þrë—› {ÝáAN&ä¿£wÜÉî»’ 3wëe^Éý¾‘‰U72EL˜ÎŠpyèÁÊ@&üEì/÷;$у"k‹çÞ á98h}6ûyíçï÷ÇËÛŸ÷ÇÛï÷öøþ§ôø÷H_ô×môWÉYO¯|Lúããåõò×ëþ¡*üÀůºê¤¥_âVûë ‡l‹­û_€ã4ƒ +endstream endobj 960 0 obj <>/Border[0 0 0]/OC 962 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 961 0 obj <> endobj 962 0 obj <> endobj 945 0 obj [963 0 R] endobj 946 0 obj <>stream +H‰Œ—[«%·…ß÷¯èÇäÁ=º«Æ™q‚Cƒ³ßC8äÂäNÀ?¥nIµ$•NO‚áô7-U­Õ*UíÏLJŸ>m~ü¤¶Ÿ?mµåÿÿòÏLJçSmz{þãá÷Ãê”Ψ»Cí:›Kz÷Îy¾=~󻟟ÛïøÓÛ7ÛÛßþûï¿þç—·ß>¿Ðžß8½G´ßžŸ—¯}ÿ#Åÿ¾%¤1¡Ÿÿ@üº=œÓ›=Ž=&úßöv>›œ=ÛëÃv7J©嵯Ã^¯=þò°çšD¡ôö…þûãF‹ýfSl!ÏçhÚæyYf樬¼£b·µO¦&‘¿"ÓÎÛwß•Oÿ+}ú/ô_þ Æì:ZO‚°[¯MȦ=v§½96¯Ó®bôzÁêê—R·{¢1Ÿ fwG$Šq$VW¿ˆy–Ïjônè_ ’a”ké¸'Š¢5í°\ÒnæÊßdÆΑ¯Œ ¹—ïõNŸ%§ãéç+²¼¶è/åüPw"áÕî®ðnW-T ÄÝ÷áOm .˜ï6~§ºËé:·v·Æ¸£¿ €¶kK©,uqÁà* +WÐvmA‰Áe äYo“OŸKƒ¦íâRz§uaÁPSTÀ´Ý\Gb¨`λömjßqäKÉä~\§Ó~ 6Ÿ<\d¯Óéb¢á(åz*ï(» ‘òñ@¯Óé²&Šf+BàòÉÃEî:yF£Ê$#Ú; Ê.C¤Ñלñ®Õ$ý¥Îˆ[&.—j!,è¹¼6Fr‡® /ÃNA–ÊÙ商ê+žÕ( ¶põm•{ðù¯^DصËsKŸ®L냎jM} i™‚/‚'èð4-†œ[¯ƒ¦.{y‚‹´í0èƒ* i™öîj¼¤†~bÔCÔæêè“P]Ûë@ƒªð2éàŽ #H:f ¡^HZ@©;ÏMXSQ5ÒPï‹  + +‚*<(©–ÔÎަT¦r–Pº«ðCR¤ +Nªå b…7kê³’jyAí»ž4:N#‡PË2m; :ÂTáè$-ÓpSáVRc¤Æj)ïu¢«&5æò–i[¾ü6JR¥ûÊúér’Pï+4¨"-ÝL êîî+-uC-ÝW­ÙBÒ3úoK:N÷U3ÒP¼¹¯<÷ÁHw›Éj¹í‚K³W<”²KЉw’/L› þ˜|at;—x/逶 z,$-Óa.5Õ#@à¤.Ów§5Ø|A tZÈ[¤ãt©ƒS@ÁH]¦w3Š’&hÄ@kã…Ô4Ì(œ7:jÀÈ[¤·“Š?$5ДÖ& © h˜T@ x´I èn^ñIÐÑš2 %Uú‚Z±þÑ a*v ÝM-AI:‚TÿØ!i™†Uý7)©ÒôÝÙ%hA Î. &J•.ÓqvÔƒTÿè ¤.Ó» ÆKš°AÕRö êVšpˆaŠ g/ÓÛ9ÆIS”î´Öœ!uÅÕ†NÕÒíµ wÓŒ·RÕÒÖZ4¤>£qš¼£t§5C iÝÍ4ºu—Âõ#µ4ëö =Y©sXJK +Ú‘J÷ÉÒj‚‹ôGÌ{IèvšÑǤ€tCЇ!]™öÝuTk±˜´Lßctu@kn: CÆ"ú2& e70i™ÞM0FMj¸57T›0$- ¾/CÆhè`70c‘ÞÎ.FO:¸57T›0$- ¾/£°h±ÓÐÝÔb̨ ¶ãö¬¤Z^P+V8š4Lå,¡»yÅØIA˜*;-¤+Ó°ªðf %Õò‚¾;©7ê€1¥éˆR-Ët˜Q0é U8¸IËônFÑ“h» i)ïu+50…9ò–éít¢ý¤&N÷Uk°´€âê¾Bƒ€jéfZл¹D‡©êé¾jã$=£¡óbÆQº¯ª˜®€î&.v:‚cã-6$©ñűĹÝé~´xCÚfêqVx¾Hœ$:.Pè­­L‡©dTs 5m½;xA6\­é8”@Î`P0£¦- »q$Hb ë­-rÐ0“pÂhÈ3jÎ3ºF¢$Z/ÐÚg!g # Ès€V'jÂãóÝ0rZϤ¤2^P+7Ú4ôÅ<=ßÍ"I¤âƶ +ÙÊ4¬Š»™HM•,¡wG­8€Ž(Õ±LÇ’Ru£5oÝ"’ìµ@µ”ö‚º•œG˜âäQ2Ðý$"‰‰ÒUÕº+ä, ¸ºªÐ" zº—$t7ˆ© jéªj ržÑ8@ÂQºªš5áñùviÂkZkó7³ú ÞÕå½"2u†zŵ@sD¯O‘&ÕŠv5—Èôµ£uŒzååŒ: ë¨ßtÔï:êt´µ“Žª°“ÒÜè¤E)¼Ã­š6zU‹ ÔÔâ5 ¡^;©©:{5Õ“^ STÃ;ܪq¬Æ•+œÕ¨˜¯p–Rž;mÕ¨£)ìuT7zLAìp§Ã¤YG÷J½ ZFäµ}Äü«„;XcËmî4Ôt-ÜÀ輦oŠË¥4–: ظ.œ¾„šê¼åÚ;ÂMQ_W熇ÃdÇ:Ï¿ü†:Ô‰°‹:/òPû€:rÒmù­ž“+Ü%3V8 N‡ZT8+쥡‘¢ûÕ®ùçl:‚`LÈŸûÊvA‡ùuöjŒPçHQZÔ¹;(jºî¤óãÑÆI×—ÿ'B@»‡ àåábÜ]„ ì2Dz‡Ý]áéW¬Î­° v÷}øäðôëð2¯¼ ì2D:ÃÄ¢¤‡;žSd:~µèꙥ¢o{Çt^ ½2:Êô ºöË “H^º†  !p—±þ™í¡r(eø_”õm÷¹µ’õ´ö0gÙi@ñP“¶Hq슦yóWK|=Í{EÙ…œG •ãè-þëe—!Ò˾GïøðŸÁyÔpQ9ŽÔáö£ÏöTÖ1®À~7צè)StÏ¥]Ï×ÓÑS“¦‘Кi$d„½•×Þ¶WÛÚ«7aÛ(ÕqlcÔE «±­åÒõÙ–w×gBŸ…nǶÈjÌ4¶ßmå¹ÓaVc[SØÿ.8¤± (ê_=¶Y?ëèãúil«#šÕØvýFkê/p§¡îׯñuc›WMSt™]Ÿ™\µ©   +rï9§“sE{Ê…ÎRä +€-0ÆU›™èÝØâp¹F±…Øõ麓ÊËï0ƒ½0Þ™±ç U9Ôo …XNt¶9žN†mË—cY;+îÓîH½Ó4#ÏàtîÚÓÀapú"ì´;âä4°æâ›v‡›œ{…Áé³/^­Ì +Ξ-÷jý2½õ›>`=Ù~¨+;8ß4ˆxÓS`|ˆy5žõ@ñ¯. o6;αÏSNð»%/<žXf|²!'¨ ëTo6;αϜ¼«‹)ž|ÔŽ(ÓÛï£u«ò­4m¬ +ʲžÏvª™ñÑçÕX!>Ö‘„ßd;α¯á•9ÔL0u<ásÎŒër‚Ê!wŽ®´ +€½æ¨g64•9ÝŸû7¤X#޶—‘ôM®óÓ§¾ŠÝÎïññù°Ûóÿ”W»’%· ÍõÚ¦Èæ;ܲ6mÙ*í&þ'ª™Ä¿ßă@÷U`m©êò ñ<ø" 0ô-áßx¿Þhÿ¹¶yµ€Öí_ß?øSÂB·ÊŸ¿ÿþÃ×ï?ä·ßßòÛ_Qv%¿÷òVë~ÉhÂ'rß~J£·Ÿ@µÖŠ?"Ï•0±#]Wº‚ Ús=j¬â±}µ¸(o&„bVEQ£ÞB(•¡ÌˆÒîsdnº +ˆø=ùÑE'×<¡Í Í臔ÇQŒÎ|¤ÑÏŸOêù q“{ *ïiPàjÙ°Ô\ª‰nh903øWn !`ƒy•ðè·MB®¡Ï¾ãp%Q;Ûc{<†§]õ½}ðÄ2ÑÝ9/o’¶ôüÏŽÊ¢a%5YEá<=G >;ÎmH9ª—ƶt,–\.;.r2Íò(«ÜÌ)½¤É”e3ØIi22ºâŸX,ƒÓ{*«®h#œÄ=ßÃó‰dqµ¹.õ ˜ÝþÐoD(QÇ—âV–@ÇÞ—%8$7þð. <<‚ï¬+N§×'¨ëjêhs?ÐÜTÖŠ37Í«Xœ¹r +jeBŽ#Š蜱àˆ7¯˜»°²&ý¶¹e_–83Õ;e ¨wMd.KòÎ䨻²Ä SÚ‘žïQ`Ó4«Ce&|=BY&Ø+--õ¿PlA0ÓFÀ­Ä•$Z=s°P’@‘lÒc,_êJòhia·YõdJòXc0³<ëìãQ»@y;;áŸ1c1Òôw©«‚®¡N#ážtt¢•ä1Ó—$Þ“oõˆ÷ÊP’/ýFá-˜ .nŸ9o`l¡htX„Jå‚/ MÎ×` +«ªBu$F¶=üjœ„ö%ž=T0'l’m’PwŽRÎ9ª©¶:×®»WúÃìs‰ºŸàrg¡YQªëÀóÚº6‡sk×qÌë:jå&žÚ•uŸØµÁyfbpt ‘üFü +¹@9iÄ +ÌÌ—î&UóÇ·ýß© +µj­hIøl9¨/Ÿ†þSSd~>P$amÖÕOÚ4ü~Q‚ø}JPßè7!ç(BQ7j.JùÊ:]$Ýí'âÎPßëΣ|S¬}lìZ°^çpüï\xMuà1upÙä(Þlê‚ìæàK618ý 8<# \ÄÆ‡ø]†ƒvS˜}s'Wç4‚E“öO—h•v’KQ”„jg šÜí*¶)m–S6PFÛÐ.Q®‡¬ë¢¤W‡&(ë8hªJ«tH’½ù‰ŽõÞ“¢¹.A…*ø"ÇR¦­àÌ/’½Z,r@óÖJ·|dž¥Eˆ¶—5oy¥ðÀ¡Zv;ÐTî‰DÚíIÿ§SJ>ÅÛÇÓÿ@wu:‚>¨â$}@šW>SžYµ³m”ÇüG¶ëEó!ôÙ|êÈJ¬EzvB}çqR~.ˆ:?@νnÐýL:ÏñókÔ{Û!èÑvêhFÅüõíEÛ!´œ§´mÇ© Ω/ÚŽšÜý Ž0\B”þ ±ºÞ˶,yBƒìÛ?ÿþÓ×ß~ùòíoo¿þöó/_~û—Ž3äYm{„áfáF­IÎïîæpUùGÒ ÁÙ8¯ZÊŽ w Yvº%±édéöê.‡î6îtòyêöÖ&->) JµÈH¡»vˆJ'>¡K ÙCaµ¨oùÖ”Þ’eݪøÜ…ˆ(L!¾ÝÒ0¨Õè’^f0¿ôÒ&ý¢!\(|}Ðýu»´öAWt‘#:B ŠˆÈ!h¯jiÐŽÉíç.Ý\|†ói½ë _çuÔçNMwM¥?nø è~šÓÆgžÏ>eM1Ée;Ðå‹“r)ôb¦äSæÅ>‚i!e®õ*ýʆgK!>_–¬þ-gõ0NAfHvõRÍæAZM ¿x¼ùK+iÙ¢Î2ñŒ<7Ãèñ„J\Ñ)÷>ÈÒ2a9re“ÐëšyFA¯O IZ7yŠ Í¹~úÝèYM—]y‰Ðq+"^$5-,ÒÒí6Y/§˜m@e-Û0;Z~ ªw3lÝÀg^1:kp*ãEp8ÈðÃ1a!¨]ƒ~éUˆRL\ž‹f•ó†ú¡,­ ü…mº.U­CÑ(¢64¿”L§o~°M ™pºbÞ§jí×—]—yò|íQÙ]CÛ«kl&”CÐ bNœÊõž:—uÐ(sÏÌE‰„’9·“RáC·þªJ/{zé1eƈQ¾ß\MóŠ)â§g˜†²´­þ©ãÕ(÷èŠëESÂi,0h;èî#¤ÜÎ{>9÷‰h:÷ÕÄTt‚?s=H)^{˜â![‡œ©ÒâøYuhÅ[zš†ŒwÕÓÛA½:—}†³ûº?¾k·Á+ ÙR—ôªÝ J9?€jŸ*ï9+ÚÑß6Ä©ÂPZÆ Â»ñxô4)û\Ž¿FL)FgФÑ(¨X>ÏšÔ,£ˆe­%û{G—ªš ¦è”Þå.%‚æMù^÷.ëQ÷XýÖyÅ]âÜç ò®>Æû°ÜyÑù•Xî 54A¤YL-|Vc;¾£sÞ¾-–€g–ÚWdûwÖ¸ë ÛMµ‡)Fz¤ùX?‚ ‡UœìÀ6Z´u„ÕÍ[ï4PmÿgŠ:—fŽõÜÖŠeÊq„žÇÔÑI¶+úÅ$“-‹¢|¶,PhCÐh·úòS[ ˆ?ÿòëן¾üã/_ß¾ýöýí·ÿ÷Ç/²dõdçBGÍ\˜=5µËPº±cÎIÊì~ÜS×IP’¹ƒtN“Ú3w×¹š¤}´, eé¤$íÌÝ0r—\&µ«(ÕU¡ýí,Êj¯.K>ž°³llèÇFe Š4…-O$CJòÊcàÜÕfÕµ`ª³‚}©NåÑ*tdæC@kW/S (b3ÊMb…ÿÓmK-EžCþ6ó£Ü~Î9û眯¢×ep½Ã :Ò™­ß¸p\Y;aМ”½z4/å©– y¾J™<­Æ¦-„êsM7]Ý|Ó‡,m’W3–á•Vâ* íÌ.B†ØF-×/¯ÓçÉDÎÙŠÌuÅŽ ¿ +€iè¼u;,G÷ÐS†³áœcôÒ7øYO»«–‡Ÿõ-›oûnp‚gŠ7âÕçg]h —|¤÷EÆÐõž-‡˜ôê–l6 @vü¦8‚ê¼çÄ$‚«^y¢=”Ãtb¢KöúË µÁv·ò´b÷"&ËÇìü¢`aÅË‚­à5¾`½ÜV~ÎÁ}åeÁºåV´ÙÙMT¦ß ¶ ±"7(%;ÍìûÌťΘ ´Œ0eôFºØ·ÎÔƒ~Û;lo:?ýÙÛ;xäáÌ€”zaHÃÒ§.:¢71uÐ?¯íØ¡O5^N”Å`´öp>­LÕ¥¹vOBO=œõýh†äw›£¡nqrÙïeO©›R—ýîv—ýÎÒÓËÜ«dUìàœ7‘~BèÔ!E2è¯: ‚èë÷ÇAÿð£Ô;éà½)–z·?C¤Ûî¥[|nÕf³æv·:ÚÀ +”â«?HmrdÞ|WÓáyûœu/ R—î°Ž º‘3 &0^Ÿ ¢‡LÛçgÒú{td³M½DGÖ|sPÒ~b"ÄŠ&¾éZ8Źi2¤-Ñú»Éuz.ÇмžoKÜ}óÝÆùì"’•õ²¾m륫(¦Ùâ¤#1-— WTä$Âô±Ñ5Õ­–zK-(·ô(·ÒlˆrBh¿ q«¢âI¢n?„f[dÿÇv¹ã0 Â`xÏ)|ˆh•®¥Y*E=D¶ª½ÿÚ߃ÁÝl~!ÌGmÚð~ 2*xÏ1®7Óm0*•ÒkÔh»‹é—] ý½CB &Š¢÷q&ào„‰n×–u„ – Lä+``B/m0Qmª£PÎUÿSQ*˜hõj8 â9! p1s®8 +à`õßÛŸá]¿hÛžhš_‰æ=Eº? yz“§' p°€ÏpUtÑÜ©zŽÉ S®ß(8vòÕñÙ¾Èx­S_(¡~lK°?ÿV ‹ +endstream endobj 963 0 obj <>/Border[0 0 0]/OC 965 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 964 0 obj <> endobj 965 0 obj <> endobj 943 0 obj [966 0 R] endobj 944 0 obj <>stream +H‰ŒWËŽ\·Ý÷Wô2YèŠâ 0 D’8ˆCž}`Žy´±þýœâeY¼=ÀŒ `úLu±^ç°øîéöö_ïïo?¾w÷wÞßoîÎÿ~ÿõööéÉÝýýé?·tÔè[ëß©ºÃçz§æDÈÓ×Û_þöééþýÿüxsÿãÏ¿ýû_>ÿõé |¾!Ÿ}º?}xÑì»8ÿ; ȯ}ú;~ùó~#ò÷XëQ~î_ûçÀ1àc½?ßRGpν„Îï>o¾žoÿ½ýt‹ý; GùûüÿÇ_N÷ØŠÙ?— ÎùkŒ…*ذqŸN-HÍMË\–Ï»e¨mž Ëùù´¤Œ7Jår†X6ýËÌeA·Œæ_Ö¼û-;ŽdvF²ÇÜÛRÚZŠóJ’îC„² # +æAlíbÐÓ(~1b[Ò×äžM} S0,Ì +†Y%7úóuePòKPtP‰©t4¤6†ð{H§mÄØ:´m·»ƒçi0~ãQ½ï§!†šÇätic²Í¡ŒYmÉAÒ6¿èXu£²ˆÞPZ…y’xaA'ªãO®Ù¶¹ÛÂ/Ä!¦VG#²”¸zÏ[%[ (~K)tÖa*Éô‹«r'R` µH!cŽtvPÅB ík•*œÚ ÔhŠT ª}öG&ÔÈ¡öb•CnÛUM*‡œÄUù¸‹rdW94Y¨šŒU¹8äU ‡<W9ä_åÐ̃Êáf;äý^åPc0rÈSr‘C¥›‘C$÷@ YTÔÈ!ßU—äŒ*näÐ4dzäдT%n¶%ŠäÉ!ÏÚEMÒ×äŒ.è+å08zˆaZİyjì0òìÊŽQ¨õ–a Ê粸pÏN]Gõ­‰@Šò•ÙqBÎÃCÑQÂï¡öÃð-È›ØBþú$ð >ˆ>º£ 高"ÚÚQìþn“B V²!…Œ„¾É¼µ-Á?ð+E¯èéÃD­äÀšKVr  œ´ÉHB!j Mr7•®¶n:ܦ#óM±IÎï” ð*J&’“°oç.’YŠbÙ$‡»•4!9fNTrÌœ¨äl¶"9ëœLÉ‘¬äà‚¨-ÕMsÐYhŽøÍá&aïÕœ‰ZÍ‘ 4š³dg4Gq«9kG¦g‹Šæ¬=:‚öCsDG$ŠÄ¯žV6[ [ãîÍY“¾&g5g¢¯Ô|uYÁHUg^Û˜¬`_Aú¥“l­•NøÂEñ²ûdÏWòŠZ²aIGVÉ’ 9? ’vuÜJ“lXÝA¶°ÙbuÇPDK6l¶äbÛȶf1Éd«Ù°ƒlñB¶Â$Ä5cÉV ˆø¼‘ ßB¹üF¶^^Ë4k(LƒSä¸MηDCÍ1G~#ZEi®DÃð= štÇm¢–hx†aêÒF´‘™e™NÓ„Ö>LŸŠ­œ´AÓA±²Q¬¥‘ÛWøºRlM÷𖥨D_G±°«Éµ—kÝûÔß•ØqxŽQëïJ,0 ‚¼:Æûhô>¯Z Ðà!Í«mV*¬~«V1´Â\1Ž‹–xÒ;&ÈE;Þ@ ˜ |ÖåY€!qÛN2v e´)´ž±Cä…¶ëžQ”n{©[}5°_¤,/Œ±ˆh CJ`6¸v¶Uh¶—Ðõ5³õg}ø, ‘5ÓLÑÓK•*ÓK•5ÓËÕ6_dÍ´Remi¥Šši¥ŠÚÖJ5ÓJ5ÓJ5Ó5ÓJÕµÍvèši¥ +›i¥ +›i¥ +›i¥ +ÛÒÊkwŒ¬m½Tþ/WY[r3ʦ¸·¥ÓïŠ a3½T±â¶CØD—$‚pľÉî¶Žß FØLÂ×ÄŒ°-è+… \v‡°H[ÅÔ¦náK+iˆž½ã˜UšÐìõì 3*4 ) Û4j¥ë¿”*Ô-Є Z«Is̾´ fBµ©éÛä|óÍ©ID\¾ö°Ôã•"qIx„¢Ï.É—˜¦úb©µôÌ Áé+D"›¨UìõhY´ +‚Р B(Q¤áê¸Ñ§‚àïåI”•$§ÛÌs"˜È,ùµ9S@4&NR˜B,,±mýw\~+ (@9Od-Ùk+¿=G+ ƒÜW-~ XܱZHÍ÷öX ™¨•ªòe%Ķ~2Pp+!³Ó„,Íœª°²b€Ô¡ »Ú`È® +²æ{ÍË*ÈD_§ —¬*È{ò‹‚ u¼ÄD°Öª}€(*KHt®Íz¢ç)ÂkñÌkCš8îâ݃‚«ƒr¬˜°¸^îïŠ +='Áãn¢~×V. )O4<;H™”­b0½íÐ e Þ­£²×ÍžGy´@ãêŠ9×¶µ`Tª!„Tóé"äeÆZîäú6ÒÇlÁ•YL?{Jë‡Y›_¬c¢ù4ˆ‹<ø¹è;†¿r ûkõ¼ÐÈ-ã(£Ôÿ>ªû,ÐŒ.F»)%POÐê¨.æ3,×ɸ""T²8½8ÆN 4ëÛlµÎ½›~¡‡%ÚbH¸]–kJâ§QB±•ܘéMOs¸ôêf«{²ñ«/ƒ^t&^ÝÕMn«í¬Ãô»ÖlÆ`ë+ñÚ^ì}ÛØ.)¶OÛ•í|/„ÃdûDîG¾j*V÷— +Ý7aLtcz¶èÐ~Îëã¶š +Í(pOCüËf›; ­NñX þ´… ÉY˜èë¸FXæ—õ±-l+¥O:œcÊ‚°­ÆÞ HÌ:½ý=Æ ¼_=…Ý CC/j }ËÛ€5.ª×òÜÉ¡ÚQÒB© ÒìiHчZäæJ á:¢ZCÕÍvÐzó;$€ú -)šVCF3ËáÅ ͶԚ„y[s; ;UÍ;£€:¯Ë²°hIQŠ3˜ +¿>û‘Ä£Bš˜CÃÐ%³³1`};žK­ÉM`Ó‹ië—(Ëâ6ÜþŸò*G¶kÇ‘;Rp'»¼¶*¢¶ÑÚ¿Û ’˜x^ýx-KJñâ`L$^=»T‡R¨fxF LûP-¢üT# rÔÀÜÑXS¢£¯æVEJDí^ l-­øyx0EŒQÿê÷ƒþåFǘ+zô/×½¥¢©9úhQ†þV'è_‡äÊï›2òà,’à†:˜Íˆ^ •TV㢃•ëÎ÷áÕX¤*oý` †p¿atè/›^ÔF_µAô»Ö¸ü'ôÿb›àòó#˜Ê3c•›~>»hÍÞy¬^­>›èÐPáC_÷íBZ„? P7ÕD´ƒÊA'{~ÐA«žØ36ýKa°¥·+Þ–¼ccâ“#ƨ¿5ж‘œœV +/-cÞª¹÷h?S½M‰ËÙÿ+7—Ècv…²}%T †ªù·Va˘ïeòÐ9ß.{yX<<ŒàÁÃB`­ÄÚ©È)$<ìSéßö/#žxØji,¼óÑ„„…9XXv‰²0b;×Y¯/ ‡ì( »ì8"~Þ^"f»ˆxF&Vs5çjëab\h`bz˜}XÅÛ·:‘‡ <,}xø©¼™çC­f×cÂľ–Æ®~ÚÌtážÆ÷m«ÝÃÄ>ào`‘‰ ý%ãètZtx.Þú’ø’ôð“Ñh†ê–‘,¥í¯ãh€<{D߀~mÊÏkôÝáÇlµ+è21{£‚íι`qFaI©qFq `F¥eeî|wÉÛŒÎ?é‡E)umÃcvWB0QsÕFFTZSFt"•½È f#ÊØëzF-8qD8@ùžŒ¨Ô&Žh|+#Š_í㈊qDٛº?Œ(N-ˆ%Éù[ž8¤†Æ!†Ùú3¤]Rß‘†Z=Ì®ÇdH]1mî&'ï3£¾Gí-šì;£>Þo\qF ýÝŒÖäfô_TÜŒNT´íyàþ¸Cz¯ ”Ê’­Gmq¬i“bt[¹o%U:£ü{§pŒ]´8õ0ʬÇÇ„)zæ¹,0"ÝæPM´·¥eþ£«û¹Ì€¦2’ho™¼J‡œŒsŽ ¨ƒzæÐà XØÓÁè²€f/[Õà!˜>ËŠg*+=­œ±¾h[8Ã~ZÿÞç‹Ï$šçEÌù„:¤ûÒ0tßµ©-‹[a¶uÊhLe·Dr¬¶0™´Sà´gnï²%(q–w\:új¨ÑŸb“}j”‚ßõMœØEY.…úÖ¿ë~Í£u¶:?î4ò×”AÞ`Ü:ំ©5ÎÓäcöœÿóo’Qjœ·Žo#:l¸µIYÁó›ãfÃa…î ýtärö2-ÙEc4H ¬ÆòV4X.hb;}ÐÒçq©:j +`N{aÍ*_GÑM´—ÐN‡©ÃS0`ªb•2s2P¸;ëãBÏéèZç­¡[CÁèÆÖ +Zñï íåîA/îžšX/lRþÔ¶íÉeRÖä´oÕø¾…–gR v!Hêfeqá€dxžbïQ—Ýj”´ž–H‘i$ÊÒ4[Ã-øW;6lµÍ ]SºÓÅÚ®¶^+z¿²ëë,£ÒÝxO&á`BÑ`bïp¬øÂ”r o!(XV9”-óÈUîêδ3Û.&/À±Ið åBåë㇢Áµü à î?  ä–/šjãcaO,™3[æ¯Ä»ÃÛ‚…\/Š!ÙBó`#èƒF÷¿! +C×h±A42¾z'³¥µ;=ßW¢§sPkHé²ËԌ滭Üdr_Э$¬áøkÅïu^iNþLaØä)ôXê­˜}ÌÜvƒÐm·k¶ÕíAŽß]nƒ wŽÕLFGB/B:ñ-Íü±k´µ3ª”!>Ú_ÓÛßÛ°ö'ÖWCYûÛ_rÚß•#´ðÃPï‡Yލ´?<¢+¹\K·?„ö¯Oû·?™•Øógõ£K\û#Ëhz|ð•6 ýeûóßl7©Äul6ÀQªèNÝqNíê ÎJ–¥PÇÜë®f òf­èÞ¬=šµ´ H@{о?öV\=0È{`6#*å†@¹_ƒ-”{<åÆe³(½Ì8Ñßrã»(w{|¸b¹ ý]¹{áCô»ºbÏ­ý°úðé.ÕN‹i ¿IØ¿* ŽZ°R…•.ÿ%¹(Ã[œ]* ÌîÔb¥¶±eðñð²Oê…†å«ìsÖ7Pœ™EZ@Qä}ÊîX 8źXž‹Y(º—d‰{ÄTx«kí"d‘—Õ‡‹Ö²æFë\-Ò;Àí÷h) ³JÊcq‚.qh”üB˜0—\üp +“4Áohüü™/—°(ø½†šf×cwÂBƒ˜€G3aÂÚ#ö [Zóó6aÂJœ°ÉodQìúË ëF¨å+öñ"NýéO*}÷Q‡D-K:ñî]¶¦²SÅþþ†ÈK9ñ{ˆNi£+ßM–v\‡6™ù݆l“6ýU$@;.ÑÓyÌBÃÉ­`!4ÅPU$á¿ +ŠNc¹€rä蘱™ÍlY°f&n£Ïõjhl憿ÍÖŸfŽ^X+x/ 5/̮Ǥ™QJôô§/9€8\νÜP¿”ëã€{ÙÐßõr%w¸þ«e×ËWëÕìŽíEE…™¯¯ %wL˜eÞMx N)´ÂÍÝM7ŠëÒŠQü÷¢H>q7ñ×TŽs¢Wðá ‰»ÿ zxbÚì´Íf•ãÐ|%Užê‘USÛèHYYt`Ï[»Q`v¶íBý“U6Ã…1wdLø3ÄÝQ¶ ,¤DŽ£…zkß·#×ìöš¹ê!½æƒ¡ÿ9½WÚŽ‹MvÈ ½‡´Ó~m-zoÖ4 +W`Ktßzt´“ +·á¢vcFvzŽ} +¾“\vyÑID­ 즛àBwÏâi·m®§ûbÞt›€Ó>%†·…¶_¾YÍ‚jë`ÖêÚ‹(غ®Ç‚N6 "DÔ!+Åõô¯çrØÍÚ’›J™¨qï“¿^ëí(¢\kWEµû¤ÝiOðøSúT±qI»öp^½U¹ÕÚZŸ·vŸšÝînYó3S—Å!þ‚ÚBÕf7¶¦÷›»eÃ[QÁ®ªÑàƒ¬žà®Ê¸š{jY0«>cæÏ®y+ñVí¥<æ#šãyÀxYøñ|ÆŒñ|ÆŒñ˜º>ŒçfŒç3fŒ×ÝYjl¿`<„ˆ¹nãùôãÅ·ÂxÑ®0ž%ÒûÓ«»R="À%-ˆÅƒ_4˽B€‹Ï $n÷Ð(æNT(ñ¼íæ÷nä\@ Ðワ‡ùkèï‡ø0U»¼ªÅwøóx‹Y+—s*UÖcuÓ·Îð=Zùºøô‰ïôBJÈÚsyEZ³Nõ‘¯”\_óƒ’¦J-X0%~ 1æ2‡XØG°òTÍFà«çíå¶`Uyö5ÚíeghO³”ÏÛJãÑÚ!\¸ÐÓîñ…)™ý% Ð&Ø%! XÎÏÝ »¹çYÿkƒ0?… ª<äFuy¨™êr‡†‘d'¾G¦tMœGõ@¡àÙŒèF®Ù÷Äš0Œ²¦ï÷áÕX¤ã,o}‡é0rÍ0ŒíñAâ +ÃèÐ_ã>gî(Îïú'hQüd\Q~Vƒ.ÈVïK4Q*Oµ+–Ígâo57z;ƒ‡ªÕgñòPi ˜ñ²îÛ…¤H'°}Ð:¸û6:Y‘ÞQHkÛå 4}† Sñ”WIŽ]7 ¼J.Có°Mvé¬rÿûoSœ$Jï»Ñ^0ªõõ(²X,¢Wã¨Yjk·ÚMZ>ÊÙ!šÑ£?Ž“;cþÖ-(>œM[ßG‹Œ´Ûõ²_ËIŠÏî_‰eÎŽªù³»Â;cž KSæ<9v)ÂÁ½îü.I ÈÐüæTzJ‚½ù„+ŠÝR>Šî(ö½3Q@å߈‚¯üŽ€Ö<Çãl 5ê_ÍçËNQØèEkŠ›ÐÝÉ‚N]¤>#Û +¬0p#F]|“?7‹±uŒÂŽ¥ª.­ÀXæÞC&f^ÙT‚Iç ;ùâƒÚèþýæK£J-Ãj|ÙèÉ—ŽÿÚ.¾Ø×n¾ø(6º£Ø÷zÌø2¾•ÊE”ý ]|ºöYXÂ7tAÂA—|`;é²Ñ/®ÁÑåÏš¼¡›‰]&ÆR§Ì¿¼ïZBšKUaˆ‡Ü†Å×t +kž­õâ ýÞ©*þ)šœªêž‹ƒyROj¥‰æ,j‰—ÔmuF ±Ó&Fh‚¢]Ö hH=ØÐç¦J¿¶X F˜˜Em]qlj@1PBûÍojtDÕ(®›Úñµµ© +ƒºV*ÙÔ€"¢½~ñ¦p7óÚÔð`ð(ÙIYÔn­% ènòµ¨íX¾lÙÔEІE«‹ÚuVµë^[Ô6AöšœL [Råe~ + " оA>ËE&ôÍÈí£PôäÆ0%õN×¶³Ô)LNµ¨Û.T\óW•rqLÃÔÒ¼¦b¿­s©Xç­@{kkÎàªGaq"åÖ&N Ÿozâÿyê×<ŠÆÌóºa }-€‰Š"0¬¾LNRž9I˜‰ë;ð™%'GS“DsòŒÐvü}P Ÿp W;‘E¢Qz6T¾Áùvwìo*|7úuÅFý8’J ˜RQ4A<Ê㬡>äŸ m&µÁi,Qœú_ßóÊ +j+¹Ñ¶õ€{_ŒöÆ‹(Pü²s¥¨Ò,@+$´(ZÉ”1Úg,å:‹&’WüqÜi´dyX•\1 +[H0;O: ÓW­|¡1µ¤íÉ­^¨ü'H^r¸±Yïti¶\“ŒÁ0K#±,ºhèS¦"IXŸ¤$ÇY"ä îšÑ‹v–9`Ÿ¨ÀR'a«eQté +0+1"у6°ª¥~GcY‹c(R#è(åë /úäfÚ5çr !±éñåà ÔR¢€aèÍÐеì­Ž£¹ÔíZ¢€<.Å‘¯\"\¸¥Ça–¢³ú ¥ÒW"gµÌ\µª2s”‚ðŠIüæ,ŽçµÚæ®Ä"#ô§çuÙýL¼ +^]LnR7ñúøÝÚ4ƒ¿%U¢=4hd±B™8‡yåP™Uã¶ÖÆxFPœ- H€Þ9i"Ê(Cj,'µ®T2 ÷ Eƒ’âóÔ?Ë×Ǭ¹åÁ(”Mm&PšRŠwÐ[ %PÔsÄQ•Ñ”mUA>ØQLN]]#´€QL˜Ü ’¢³_Ñ j3б£1àÞ{âÄ „æòs¥*ýJGÁ|P;˳•ò"Œ†(®òSSL4ÇÌ#3AzO,øïƒP)œˆ4ÅsoJƒ2Ø,Th(ÉðǸS.DñÏHw”X ÄxKwk ¦ˆÐžFÚ¥ 53:ÇÐ"¬³ˆ3áU†öÞ¢ )´& iuo’öHêðï6ÑÌ`hÁJŒéPÚÎ(BI†¸ôÊèèI·˜} iÈ\ oy†»ÑYRs#–¯ÇQÚz§r=y=^·Î:”i®qŒ3á·Ê{HgoKCQö¨¸ö(ò‘Ø{¡\»%$¬ëpœ³‡Î(ì^µáóË\"O’Å'ò§¦½§uV% +Zf³i›G€ÙòÌ™:›Ð„ñ­•=5¡06Yz LPÜ0àJu0€iA#O¢hî$\J¢(+µÈ –= +DO#Ãû@ÜúµuéôÁb€<&iÔŽÁ|“Iä9>o28óg“Eg¤é¯Â¹ÈSîu «E>.x$Û ô~Å~0ÖDØíÎû玛=¸yœVnîo7÷§j. fº¨‰¶5ËEÍ!OMnjRcΖNjÅÀÎõ¤&íLøt=9”:h”C‹š@ ¨9Oj‘‡ˆç&ƒ¶##Ü É­­÷“›”D0+ÜÜ©õÜ<ÐÅÍ}ƒç&} ܬ'7¢EÓ—©™ÈÛžÔü'†EMúóñ`FL"a$j…2uçJˆ žQÔW¤ko-„†©`1á]b +°·¬MP°eIFaëà£êun²_ð·ò’y\X€:ê,ÐqtË>V‘6l~וhÁ"̽ÒhŠãŠÔ)÷* )ŠÙØ 8Zªüµ;­>„]î],iC}«ow…Î^_ç´Ñ÷m«Ñi)¹=:V[štY¬ºbØ…›œû+«k޽äQ¹Sޱ$×ΜËÍ=| ›–›XÎöÀJÎm÷Ñ6¦õW£¡õãí«nÔ¢ýÌ—Gì +ˆ·¡$Ù¶³¿/ñ´«-;S_ ÉCn¡œ½@BÊÝz6T>že_LV¨V-sLP’…ã +‡ú+0ý@êø@ëŠö$”XèÁ –ªÙš¡‡…ÑØ’”Ëšnbt-–ÉÌh+ºË¹ +m_²\¸p7J+ä~É®€éqxhlø¿†œÆ&êŠ#§7êso +*žÚ)h(¦ ´#pXD«U8ðdJNØ^ öÔQ&40¿耢 H9 =ÔŠ€¥VµÏjÇHsz_€$V—, ²žzY +Õ¨í=5P”E]n‰v²`Ù‰§þj²6BhùqtmîRšñÜ…œHœmY³ñlbWuæühwÅöó|u±z¡ºýqv ºùªîóu'ú¥ê†®5½ªÛ–³Æ€áÆæä¢ûØÀ‡OÎqûÈÕ ¨åÝ>hhM˜Ð{’±|œÝþzßë´—b  ä* %&åšbdE[n±?ÎŽ:s¿4C®Ôÿ¯v$Kbv•Í]žÒÿ;säò^cæþ©‰”ÈîW®Éf±zj’"@p”‡Tb}lsÐè /M©e¯h Æ¢:Ag±Ú"îdùÄÝ8ÄæÇóÖ ¢hßÝZøòµ$ï×›¯É<Ùt*(xiÑ¡±ì¨§ÕxK¢ÔųF@ëüõóÖ÷+f7þž/141Y'?ðj/1d•œëë¬öuýïœ<ú  ÈÜs]$ úWúƒá‡G"}JÆ Z‘*Åyf¥KŽxÓ?è0Rm×-CW\¢¸±¯Š$KÁ¢I ¾?t¦ÜÁŒ‘v!½±¥¿×§ð\(ÿXoœÃW-ŠÒ?nû W !HÞÄÑÞ`l8$nyWî+gœßÍ„;·m%ZO ‘–õÖg£x +0qb¯Ÿvφf_íï‚’uh Á>5æ‚Jàj4µFù¢{‚ðHrä L?íš.ðmÖKØ †=oCœ×3ØÔRÀhÂ÷ ÖÖ¶ÑÁ‘‚Óuí¡Y + t?‚?gåœ )úlwܯ¡Aƨ$}ÛÜô`>Íeº#ezþ,hê\Š–ëû療?w®6§´7ºĦ˜OCZó,ÓLj"ͨ1¶ßgñéSºÐÔ›.…Ÿê¶=­à‡–‡ýö––w=M^@Ën [{sÖÓÜkÈ ÕÆˆ“BŸò¯á©g9×àÚ÷:r¡4ËLœÛ/áȹ&'-ßô½‹(KÐßV“Q´´Ä¿ënCKêdÓFÞ´duÆ~uCK|aˆ鿟¯ {Åý»Fw´„¬WÏ4ˆ·ÔßfãÙĪ"%†’PøµÛ%¢ÙDcN¿ÔPòÞàÚâ|í°‡þ!{Ž!Ìüæ#-AqwÍD#êÓ‡'# mÓºzÐð×éK˜9L›¾â¡ä ÓRrO}ÇG@m7£¥äǺñyaE‡y·Ÿ™j`l4:Î På…þÅéj~ýƒ½P ‰I}Æþª»=ˆæ]K¤Ýõ` ú²¡ïÂÕ÷Žþ”)Ž^‡V›ms×|WúûÄgu¥`zÿþêñ9aàÞtàÙÛšŠÃýjÓqéÂk:j%‰sÊ¥ÚÔuÜšœÏºâ]¡«{É娰~”ªŽêŸºƒ”9(äy AÑStTÿþO;ÅÂ%˜5ø³¾æzëŸ]÷ÔêþUlÜøMp0sç š°^A{äÎ!_QÐ’a‚×ÑL·¾Á„–…¬RYÐk=WXd£~,EîŸD[(SoÈi­:@¡kq +Š…€+ÉàѦö„$ÑaÆFUPI¸s½)]/—¾Þ':tñà«bæVƒÿXÔÕ¡èjù@[£o^åS‚‚¤’ÆÞ-…~|¢HçÙ£lÍzm¡Í'Š]fäG¨NÜÂaý(“£œñ+L®¦VVn GÙÕÁ(EÇ€ðö µÄ.(Ao%;Z°½Î6úÀ>÷6îé~_ÈÒ9ºôSö¨©­2aÏ„_ÝWѾQÖ‹¿ÿP. ú ü  ­×¥rE“ÈÂúwá#õ‘ÞG^¦‡hl•ûÎA÷iˆN®ÜÅx XucY<㜉muÇ€`´ëBCYÚJåÖõ@ñXãuAªäÆýØFãÚk‰VJ”žÅn¶¯u4=›Ûä⇄ˆ›¿ !ö^vrØL:aOúBs¨›gL­ðùˆ,]Pô\É í1K ]Ì*QLK‰Mƒßï!Z›:¸Ly4dPW¶só­`ž¼F bè¨`èżQàWSháÎb·,(LÂ#ê×}'¹o—ÄE×ê5¹Vo¦Õ'Æ'>T1¬kÀ‚úcÛ´FT…¥Ê$¢÷ÙÑèð e¡9‹0ŪÑ^G¡=¹=®¥FÄõ±`ú(¼E]èí{¶„<Êã^<ØRX„ï€ +ÜÜÄ ÕpK`Åz<¤Ö‡³¨ñJ8 žuÒÎV¨@ë¤ïG!'m‘¢¹—]œ†š½so4\£1l(љƱ‹Wë†døŽ7ÑPêÃê×D¡j2|/Ò+¼W[Ô‰ð¢Ã;^¢ã‚8¢ã‚8¢ã‚8¢c‚0Üv…8¢Ã¢½EǵÔ×<7‰ðItøœ/Ñqýp3¨¾ò[tÜiÃ׃;Ñqe»7§O¢Ãb¾EÇóDôƒè°l/ÑqD|'çDÇ ¿ttM"9õHNC[ðQs¥C):.g˜‹Â0CyP§ö¢ô‘ÑJ4ÞÕO‡n¨Nìq¡ø¹4 ôêE˜¡‡n—£Á7/^(ÁÁÚÒZ‘½’2Ôå!b +ÁŠÍêȅѺF«ZêÏ }¸WÕxTºùÆpQOë* ái/ƒÖêî…Ö,´.€—Öös—Ö¸´V]PZ#Í©à¥5JÒt¼´Fèhø@k¸Í¡àM~5éx–~²¬v-r㺨gµ>²cµ;m ¡¸gµ­Ú½Ù£ÊjÔ²èºx™jky£ éͳ?΢j`uñ¬¦±?Ú{)U×AEâDÌÒ¢¾ŸazPŠòègx)ôsñýŒÏ¡ŸÇ£Ÿm·ŸqÁ‡~ƺ‹7è¾³ýÐσ_˜íÑÏ…œéÑΈí<íܹ{ +Ûo¾±§ŸWm}PùNè–Q룓ÏQÛò\²•ºwzT{õ+ Ä÷¥­ßýþÀ]%<§*õîá' "ãï´|_ôw=ÜÒ×<“)›N½r480|¼i‡I†_ØÀãO·šàìtˆÈ¸Šq#Ëžmp~*ë÷Þq*Ñ®¾Wb”a©A }}†Åv‘@{kI sæ+²ˆøÛ0ÆCíê#Û˜!/´cÀ>FQ”Î[zwô˜K^‹Œ‡Ÿ¥'AáZw`yÌê‡1À†â?=Б5Öçë8lP'¨NíôÊN6XóÎ Ú²áÊ{dÃ<Ä þ¢¡ª#¢ÁçEÓ+{+Z¢qÎnÑ`Û@4TvD4Øb/Ñ`eF›:í4˜ã·h ˜Çðv}±óŒ7®‹:éÀý-î´]Ewbjvﵘˆ‡ký#®Ž7‚ô•1Çël€xè½[<\‡¼sâaÐ_ŠGƒ½0ù'âY¨@ÓÔCV@m¹ãÿx›YëJLr¶òË åïOϲmÉDƒ­×Z.AÎ:u5 ¡ åŽ…ÝÎhƒïÒ â³RÛÎ:uSà¯ú1çšn¡ªuî¡ôu/lt +!úÀ.èIj+v[ÜVìÔì’ôì’Ôì’Ôì’ÁVì’ÔVì’ÔVì²ÔVì¦`+vÓµ;,µ»ùŠÝfÆ @Û¶KíiÛäŠ{–Þ¢Ý{-¦,m:Ÿ•x¶Ž7vÅk÷dÅÞ$E³¡tùñ}ÍË“ô¢¿#i.0™JÒåhH*ËT¦F`xy£zÐ]î³j>N+º¿¢ÜÑ›±k†ªƒ¨ÕÐ9¶G仚´ÐM0Ú¤xt¹¢ºa׎@LÅûì6ßî^ì¶x3Eë˜l~0Z7/ÇMôPj9T¶9îå›ÕÃÕÖv›¡Ã˜éS¸ËÔ@c¨]©eX9£lð +šGëiÝ|‹L´TªÈãhÊüáµ%Ÿ­f]«!Ú 0 EšÍóà€k8Ò€½ª®ÜFשÎã…6Úk•Rt30§Š_Þúl–šÔ‹Œ¶ú€~Ô}€9«([7ÖÜ}9¢¹4ùÚÿ(¯v%MWø*›»v +×Ô'säªÍü »ïŸº%HðÛ5g¢©þõnÝHZeà ÓŒ< +³#R’4F+ú«I&Fʤ·•ÚV*WÒì±'¿âBìÕ×BÜM3ë¨ÛÈ{Ù”Ä][b›Æ´@ºËsÂR×P¼c¤åYZÊùM!mr¾ÕŒ (…åwQF3÷ª.…{К!yŠŽšE2Ь{)ÜÏU ýá<Šs$Z©ŒñØRˆ)^çâ÷Ào¼÷2ÓCÕ'Xý-\û¸Ç÷+ìºX¤<ùëm× íÎÝ ‹óAqçîõ]hÆôdáœj3v<ðÙUo}%îªÝ[1´’רŠÏÿ¥›hì5—³o`Ôk›‘Eõ\?©Ž©Æ߬Æű:¨Æâ+hHz4–» R»4¶ðòãPE=?h¬­ýÖXoª‹c?h¬ºà5ƒV7 YEDVÏU‘µñ–È‹ìAݘ¼àáo~Ì1Á¹1gãnÌq9'{t:®¤{~q­y¼@ü˜uÚe‹fµªšÍYÇýçÅ÷ ß“¸¿È,$Ã.$Ô2W >ƒÜi‰ª-­>àÿ‚’hÙFÝ<Ðù±‹a,»Õ‹Úƒ³·ŒÌÍ#nø¥ûÍ;Sû Lþ6ÄSo:i¥V¸—€¦Wv>œD^¶KN¯s—ô‡ÊêrH`âÞf´B0ÒcKq=v.J.`¸Pƒ°šŸG~J½–ñ<÷¦º´R_‰sc+ˆO‰t[‡VÍ~«âD`«RέŠsyR^¯­ÊerïU.“{¯ÀÕ‹¥ \Í-õ[d9“Ø«]{‡Q†Njk­r™Ü1 ;kýpk·$†ƒ¦¨¬U§Ÿ\-È) §´+—ÒlSËPƸL3=º4†ó—];’Ëß¾^µ‘·J©­eŽj 7¢äì÷ǰœÆô›ƒfÓ1*õwŒÊ 7F[ +£üŠ÷f…–-*ÒÕÄÉKî×T”bÉwÃrYèa€¶”ˆWËv -JÐ +¤m-ö2Ql zÂÀSX%öˆ!æÖˆŒjļõ¤Ç•§Š*ê ª=ˆŒQ2kÎfNí/K͘=õ(¥÷ ¤*Šæ½uJìïäF•Òf÷h¢­Äs]Õ¬í©ðɘí†-•WçÜ]v ]†‘:äB§ãÒ:n¢\T¡;¥82gKqdΖâÈJ™»fI  2·Ç­%sØï^™Ã"×ëòõDZ¾2çò¨2gRcýò ;ª Åtb笭Zr[ôäìœk1•;äñƒÜÙ<òa¤êm€Üé¹Kîl—¾y¹;è7å®cP>#U3‚·Æ¤Œ%(…½7jƒbøÃô¨”Äæ$DEí1e\³ / e÷=LTcý ½E©Þ±;éb“bž XÊr1¡å— 8L¨ÎU‡ øüpé&àR0¡\LÀ¥`B»˜€[ˈý¢~êE¬  B¾¨€/þðTÐÒxÇê©€0Ñõ¢‚µ¶tÊnÑ“´s®Å” +Hdùên›Çã€m„c‹Œ½L@'!utݯqy&ô{L `˜ð%»\`­bqZnOÀ@OËAÖ±ÖÄyÚî9°&¦e[ÊEþ~÷ˆ‰h É<„½÷ùùi¹Í™4LËí×èi9¹ñlÊèi¹ÐÓr;ÜÔM˘ý£ §çÔ1þ’V,¡1õqð,؟ɲ̸¸–bÛ ÄÚÁa`é Ï'y?ýÛ–³ƒÇZyºÎåLjÓ±æŒîSâ_à‹Óyì®Ó’ÐqB +2© ¸V+˜5•&f™Á€bÊhzR&ã+€z_m©æ+g }¸ÒkMf?›)©)æ²uìta¡©tôQ]ôç^gWn"QÌÚºt×g¢­”UE§€Œ&AS@ò•®þEe;®qiç­//ˉ1ëb‘ÈNÍ„ꬋ´¼v9­ÀhS†ësFgc1J˜HÔ´¶•EÍ—9ÖäV\ˆ¼·Ú:ˆ·I3N#G]]ªzS²DãZr¡òœ°4Ð5ê—ÓòL (Ý"ô «•êW€‚E¦&+Xì cÓ·bõo­^(+V—¾ú%8bG÷R”æUÜWIƒµ²Lˆh"^³ËE;TÏœh,ƒ¥h“;'Jàm™—U’Œ2ZC‘\ÅrB·mñE"øÜÔÛXè—G¿ÿ»&BòÜïŠÐ~Rð:®«ùÁ(k¸Bk4Ñ'®JK 8Cz(QÜCÊV&Š9«épƒM‚Õé²Å÷lϹê"vÂØºJ@Æå×w/$/-#E¦² +CBV»à™˜ * 9Í6Juì羂mEÐǦO“Cîë!TºlùÝRùàñ´Å­EÏUh°R(DL§³iGºW`ik3; ì×½¢ÔY‰œõÁ}ës£½S>3)T+gG›eƒÅ!lÃh{ì4¢­å!ƒÔdH®Áåe<ç»F”ÛüáSdýóÉ:¶GŒúQšƒ +î‘”`í<”0 +Q^ÇahÑYÌ«9Îhç–¶í@O+s|Y }Uœö +“™/½\½‘‘móŲŒ> +mvavÐ%(F +Ë1êQç1jiÔ+ˆÂ<ݼf¬ÕàShe\èñìלô‚Œ=®ëŽµïºƒÛ®³•9}wP[u$³0}çlÚnÊð_^r×yÈ:¯=¶GWç½Ñyô{‡9âSçÅÝy鋟…ˆ2Füqèî›_ÜÓ4=7Lì·`ÙlΜŸG$å-Ø9Ôìà¶`6 S°ƒÚda–ùP0LC + ¿õ*Þ]”‹.ˈÇü-×›G¯rE¼È˜yÃäû#7la?2ñÊ6V‘BÿùCþ~†¢“Láùv}å“D‘é`̯{òd1Ú:[0Z -24–ôÅ«^771ŠÅ0è ˜e/Á ŒasÚâN ‚Fâ#†F#6£x£ÀpL£ØÈø“e†N ·_]†¼yÕ(<â¥ÁY!¥…ÎA‘QlŽp¶âªœq'„"y+”£\ÇEŽX®Î+^õA1œå²UYÅÿó‘b”êÊþyžAØV¦ø¼Ý$(rÖh¡Ø!ÄÖD4KŠ²È˜±²É;'ÚDŸÛ‚êeËQ[¼”-t®\HoXyyÚ›3±`ͺë7¾4„uçŸh¶‰‹yçò³ov¹œ.º¤¿’Â!Œ@3IX9p’ ÖÄ+…DK:îòv¹sd3poа5º,Ýtbtµ”¡^îi}wh:ѲêÄ›Ùc›y!œ,ás{QT¹Ã(æFA#—jJ ü/Ú0cE•Œ.©0åÁnó5šmhl°^Ú0Ô»«É–© {ª|¶¶;[öPd Eõißt‰õ'”+¤¿™L}.§ˆ½½ù**k +u mQW’lõi_ÙNy»Jº­Ñ®ÿŸÜÒñaôŸÜXè³z•‡Q«<ÆÊÐY3¼7÷‰0.51á˜0sË·ì0ôÈNnnâý¼0úÊ£tB)dÇç’“?ÈŽºèÒý–f½Ý´2v!¯÷O¶ôdŒÜÿ8Žñý{Zœà¡G¦— „ë€Ò€ îñBçs-;£Í0a×Õ[¨[I ‰;â ön޹ý\hª}Þ>“v¦"ÞUpÛ ¥ ó°!ÅŒbyÍ)å´=S޹ +SìtyxwMÚfêíAI½¨ç[IU$`ʨ¨€Xl¢v_èì;‰ü娊q8—wF+¶™×ºÕÆu.úƒ7—ãÂSc¹a°'jäQ“Ýÿ×JHïA 6çfúÏ?ÿ¡ÍÔxµåÙx|åʋ҃uö·®5 (ÅØç Š¹õb[›G4¨>!öQæÉ¢Ìè,j¡÷((§E¥®§"S÷àI8Å…¶Jtà£êmQž¨è  + FÁ¼Igi‹ÿR^%¹’å6ð*}‚ÂÓ@ K£Ü 6Ú@×Êw¨¾ÿÖAIœô²ï¿ÊŒ¯¤H*$çÈ.úŽÎú 4³þˆ×üFÅ3äḑJ«lkku ÅêŸu¥{Sϩģ`GÉ#½²PÖcþü˜Çè­¡?V»ÃoÛ:&ž/]ëY›u¨Plk˜ Á«7ÅʆûÌp¸or²ù1žkZbŠÏ}kÖu!KyÃ…Š† Õr@yÞ,KzQ$õ=бå”mÍ#Î Ï,›ìálžm‘puÒ-Ó|oz¶xˆîgˆÂЯфr Is4)3s]ªœx>ýÓ¿1¶Rs +£IA„em¯s7&IÊ´Ñ‚¿~Жæû(*¾ÐeM±§u<m6A1P¥…¢FÏÌàÏV´ÇzÙE¼ã9‰… Èj¾BWÑ4äì¨ÚÞBe.ãȰyÜgQ‹Xíê²›S/tÐÒêñŒ('E53×"v‘ZVÄõ{Fsv¤y¨…”0j.tæÑ%;3—e/˜*IvzæåOÞut7ñ<ÙG–”)û)„¡¡^5¾^]vB½†ÃŠ/Ô0.üT¯œ w½^*ÓÃ…Š† ÍrþT¯œw½ºl8/(}ªW&ñ»^‰ßÑ…zuèë•0æçS­äª“!÷gÂ$Huœb-Ï\uɃà0“ð§—tFÓiÃV­Á~’ªÊm±]°­á<Æ2‹ (gsK-BÖjMÄÓ5ñ.2H]©,ÀâqÆk«V 2"vOµ2Ú9íA‡üQÞ¦Òˬ ÙJ¨Êˆ¸`h¨ ÍŽ¯ —²Pá°¡þB3Ìõ¡&$A¡&® MþBCý…fÙ£V„tŸÕÈñôBM”«&8‡å *vO3[«WM ÷éIõòÁ?¿ùkèk‚'UëaU«Bu¯ccŽþdsu°D³sN´!$Hehä‚ZU",äf3Èßnöð +Ñxq`àÓ º8àî²Ôé]ù»Ì¦Gíõ1àõo•Ã+âõûõúø4ës«çSÞ¯ÏKÛY>Ä_ßЯ½>&穊XÜÛcÈgåÁ =qy“÷&wMž·Ñºu¦ØÓÐŒn,sT +(žH…ÒÎbЙÂìM!HOk‹9>zZÞ''ú¶ŠÔîü@{kYȦºŽ(:Í%ìíaÊœ(`[ -÷ÖK)Eêâv=›EÄ2< WZ2Ë2P,Ÿt5  Cã5†ER~?Ojw "ìYÜ!üaCí-ÌlÆûQËwéÁþ.½ë>¾ý}†Ú}f×0-¾À[ À²™N+3°îÎ2Çëìƒâ˱øB‚ß‘ÅõÁÐ/_ƒvšôæ÷ú€i9½‰›s[ k{óòï¶ÍÆÜ${Ö‡u…Œ¬gIů1Ç +»ÎB4kªŒ‰ #üHwI’]µÎ@´a)†Ï>VDÜËÚÂZŠÔã¤aŽáh¢ÇŽ˜°nO%ò̵Èm³õg'Ƽ 5TdÂëig;¯.gp7WI9qß—»>•¨Ÿ2×eE c5ê—­V¾ ƒˆÌˆ Ž¥ðn_¬µnÛm~Ü,'eÒÏÒò§Ÿw +S¢YìÎ$Ô–}«Ü$ +WÆH"æG K [䙹€¶Bs¾ÎÚ&kv›ÛzÍ,YãiÒ$Ä_ÈÕ¬Ú’$6Ò¥Îm½×Ù3H»:‘´Íu˜ ±ù³–³ësf>øüš¿þ-Þïv+Ydz·KÉðÿ'ŸælJP²z)Ywk¬*™w”Ì;l‚áƒ3%[¼”¬¡¬ßJ†¦%Ç$t5(]JF, # +™xóËÐЮa—пzlׯӢ ‚‡v’f–=ª-›s‰±ô5C.͋ζf¿Î"kïh_ùûù1º¨p†~MGj:ëíK§KKç£@ü÷€­$Ê^š\µe„Q@û“×ëăgùZS/×R yMZ¬{­z°f¼Ðª¹R @GŽ·!È”G gŸšß¨ BΪh»*pu­š$hÍOÞþ¶gäü:[j¿æ0\hÏÒ ô¶ÂÅõè“tmÚ©\K%즖4àw"Ãp½ßÒOÖòºa¬¶c +…ª=—–P¦ìÕ{sôw»õ.…Â]fÓ£Z üˆï½èƒ•R<÷ë>«–¸œõ¤ÓåGDÒåƒÄ +Ô¡_,P—4ú4Þ¾f¨ÃœýLÉÂm „K@圯ž| |{ˆÙÚPü¿Þd)Ü#ÊÕdv •ŽT:‘!÷ )/4aKôÈPPžÉk.bOh²w}U¦TÕZiņØu7²ºEžP·5ÍÉi(™ë¤dÌ[5•ñàsnK ¼·Ðž¶úXˆìÿ˨ŒÏ®é‰ Ä«ù³ö–1Ï•™‹97Ë.‘ìx]ð‡ µÇ0³,ÝÔL¤¦$A+®û¬Öü}†Ú}f×0S ÿA-Cí>³k˜ñh`zêEñ- ‘Ï¢Å\ùFxШ\H`‘F†~q»|¾çì§Â™×x޳Ëé?ýä´bQ.eƒ”*ɬ7R>G‰"‰ø×N‚A×µ/>.U¶aFÂ2B‘p!céQ˜6,#ÂãÙùwŒfèß5{}°ŒÈz¢Íj¿ö[ Âç™Cãç3fËϘmp>e¶ÁYÊt$ó)³ýͧÌö$Ÿ2ÝßBÊt )Óý-¤LC)ÓpCÊd SÇ®Œ¡2=;ŒÞ§S¥èè-_!ãjTÉ ¹Á¾òÔµ„zŒ¨›ZØ6*­qù9½6îRÈ—vy ÔX%FÌ +æÉ©ï”\ÅÀlœŽkŽI3šÚ[+‚bþY ‡rÔ’eѤ\%_XždÉ+¨Ó›w(ý2Ïm†âfL0ý² B÷=èòmp,…'[2‘ò7Þá¶L€¿TÌÊc²BTJèLó(ÄüëŸ?¾ÿñ믿ÿòã×ïÿþýïûã?G2h”oð +n!ÕxH „Ð> @Èïœ{!ð¸˜þ«ÓÔ‘ %úõH;Bër.Ÿ2#¼ŒYÛçò§[:—}³¶¿C:¾p¦v†y‡5X5×·/ì'àxªñî‘ËAóxž²œz¿.•~× E » +Àª­‰ LÔ´Ï¡™SŒ¶u‰ äÉt§þ‹ÏîG]?%”æ§¡P Z!E@LjùiØËòœ;KµÚæJ^u,C]STŽszƒöæÕæºÃ2ð)þ¨IÙ.ù¼ºWl›šÞ¦¡ÇZ¥ODäé²K}ý—î*W®äF‚>¿â™+ƒ#܇9š¡!EÌJ±â(ÖQî~¿²P +Ýoƒ‘](Ô‘•˜InC:²0š(\ôˆìgþ‚g‰¡Qª:³ÊùP³ñå1ÿâ\ïQÔééj¢°\Ž“cc¹¸5è2†ê@Ù]Rì®Ëµ/1]¶4®To ­48lþÜnbRθ +üM6êo½?÷ÚGùhŠO>ìâ¹ÏÏ=—œã5ñ!ÇyJ‹Ú›ø +4D×_y˜?¼F¿t^»ËEø% ªþtâ9¡ RØ"o¬êØc>£ã,‚ÎóFgYÑ!­¨nÖÎYìY/®-E¨¦Ç£º‚Qg¡„K0Æ«ž3d„dpAåxWÒÈâM¢%è%«äŒv'9ôè@·Û9åPvr+¹N¨‡ ôÒ+±Y#:'e&no½ÈÏWT8l‹B‹œB=„ÑÅŠY†"CÚ°…x¶FA·HlR*8dM7‡à`®r½„›T«D™{ (”ŸTšM= šW•@§Ô«`œvð§‹…®ûÐ +·nÁM”õ÷tAB_ø%§]6#DE»ÅÛ¡’Óx ºb +A¦Ñ¥˜B¹¹÷¹#Êëb‡•YŸo™ùiñB>)^¿{ŸêQ^·Kñ–1´ +T:•±%–ç´2ÚyäZ/³jD:Zv²É¨ÖïN›?j‘ß»¥Ùã¨×›óâ”—Ke •7*&T)qWYšsBûk-úTQc·ê¢¢v­—>,Ä› ]­/ôKë\´Ó”~ ­'ýzs›~éÜ|Ò/AöMžt{.éš)=CGU­±-$+ÜM„êô1.=õl",±zØæ³Ò³Åß¹¹¸V1ä±@o‹ê˜2bY[‡¹’"¡1ðÞMŠeÉnAÊ‹äðÔX©á½i*5‹Š|¥FŠÃègIcãL»V¿KAeÀ×hhðÞ»ÈBgRÓ›éqMPZÓ⥰dÍÜ´µ›.áM Q5#„²¶’Ã½É +SØÍÅž[»´B–_‰Œ¿~?…ëìº5:>û<ÖÿÏäaL~†îá,%l‚ô-IQ+;ˆ\nÃã.@g½£Õ±·Ð,^®p‚øæ9Í Íç('£Ã¦…U-P-0Wµ¸Â]æšËY²€BW™oU ôJo€zд²-å³>ˆ:ϲ-"5}ÍþòþÑ(ôé#à®-T†Ò‰-%â5u[hJ˜9X Èæ°]kêÏ¡¬–ªÐ"}TʻÚA˜M©SyÐæ:“v¿%0¬åõ©›Ö·#ë£%5)=|<šŠ'C?šššC)¹gH{™ !‡}Vhö¢ .£òƒ •-§±WÞ\iÑ]U»ò€D,r vô.U "‰ê~kÜÞµ¾UµvKPe„i•Œ&ž?V€d<ûR‘pPÿùÃÙ¤Àõt­d¡L}0àFí°²UlÊÊ9³9Ë•ìö-§÷úpǾ:+%OõÉW +ÆÂ¸U‰7ŸÕ¢" +j§ãŸü•&9®Cñ6÷Ï}ë:{í¯³¿:}ÄÓT‰p~˜rd3߸t&<,UœS5«UBÏJ&ë±aÏiXxñ´a toX¿_˜óIú¯Ž”»÷¨X³µÿš¤L»@ô2tÉ U$ã­1Y”ÑÖš›ïܵÇ¡¹SFOD`‹cë\ÝèŸþÝÉWØkïo瑇5y@ªýØÂ¦/>yåˆÝÀÒAžOèØ¡w3~Ÿ;“Që-øôº*®Ì•= Ýý`ì÷ñ›wr;¬J‘…¯-<ÙtÖlÑJ7Zß(¬A¨Ä×xÙàļŮ„­óÖ:B ßwa07EU ºˆÈ¹H ·{£¢[LÛç{Òústd³O-Ÿ,ñ  |b[He-|³4s‰3i2¤”hünû]—sh¤ûݳÏV¾Ë9_]$²âõ!FwMÆÛÆ\OCE9–'áÈiN6\Ñ‘ƒÓÇBçPTh%çƒ[JF»…[»åjC|‹BÛ¥‘õKe/õõCh´‡¬‘6N¯QQ•÷äã˜7¶ª‘ò{·¨ñvÓ/ξŶ˜…ÿŽîq8ï*&Ì݃Ò¸Š úÿ&&V ÜĄߺńÙt©p‡;þs^:1±oÄñÚà€ºpeéÜ»€#<:«Ïfÿï~¢½ýøöxùù÷oŸ|+_¾c?Âã7úÇ·kòGÉZW¯¼ úÏ_/¯—Ÿ^ÏÕà_8øUŸ:aÙ×ÿ?pªýô‰E´‡íélegô<¸C +endstream endobj 966 0 obj <>/Border[0 0 0]/OC 968 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 967 0 obj <> endobj 968 0 obj <> endobj 936 0 obj <>/Border[0 0 0]/OC 970 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 969 0 obj <> endobj 970 0 obj <> endobj 843 0 obj (Tolerance) endobj 842 0 obj (Symbol Name) endobj 841 0 obj (Reference Designator) endobj 864 0 obj (RES_SM-100,E006692,1/16W,0.1,R0402-R0402) endobj 840 0 obj (Part Number) endobj 932 0 obj (\(7875.00, 5125.00\), 360.00) endobj 837 0 obj (NOT_EMBEDDED) endobj 838 0 obj (Embedded Status) endobj 835 0 obj (Component Class) endobj 892 0 obj (RES_SM-1K,E005978,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 931 0 obj (\(7875.00, 4875.00\), 360.00) endobj 915 0 obj (RES_SM-499,E003758,1/16W,1,R0402-\(R0402L\),R0402) endobj 930 0 obj (\(7875.00, 4925.00\), 180.00) endobj 858 0 obj (RES_SM-402,E004027,1/16W,1,R0402-\(R0402L\),R0402) endobj 929 0 obj (\(7875.00, 4975.00\), 360.00) endobj 856 0 obj (RES_SM-300,E019551,1/16W,1,R0402-\(R0402L\),R0402) endobj 928 0 obj (\(7875.00, 5025.00\), 180.00) endobj 854 0 obj (RES_SM-200,E006431,1/16W,0.1,R0402-R0402) endobj 927 0 obj (\(7875.00, 5075.00\), 180.00) endobj 852 0 obj (CAP_SM-1000PF,50V,5,E012419,C0402-\(C0402L_ALT\),C0402) endobj 926 0 obj (\(7875.00, 4625.00\), 360.00) endobj 902 0 obj (RES_SM-4.99K,E012476,1/16W,0.1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 925 0 obj (\(7875.00, 4675.00\), 180.00) endobj 898 0 obj (RES_SM-4.02K,E011895,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 924 0 obj (\(7875.00, 4725.00\), 180.00) endobj 896 0 obj (RES_SM-3.01K,E029336,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 923 0 obj (\(7875.00, 4775.00\), 360.00) endobj 894 0 obj (RES_SM-2K,E003752,1/16W,1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 922 0 obj (\(7875.00, 4825.00\), 180.00) endobj 836 0 obj (CAP_SM-0.01UF,25V,10,E010983,C0402-\(\),C0402) endobj 921 0 obj (\(7875.00, 4575.00\), 360.00) endobj 866 0 obj (RESJMPRSHRT_SM-0,E004447,N/RW,N/R,R0603-\(\),R0603) endobj 920 0 obj (\(7675.00, 5225.00\), 360.00) endobj 215 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[15 807 0 R 213 0 R]/P 214 0 R/Pg 974 0 R/S/Mechaincal>> endobj 214 0 obj <>]>>/K[14 215 0 R]/P 27 0 R/Pg 974 0 R/S/ADILOGO_537X150>> endobj 974 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 2/Type/Page>> endobj 975 0 obj [977 0 R] endobj 976 0 obj <>stream +H‰|—]f7 ÇïçS<—pѳqâÄŽTU¢»QÊÜ£j…펄ÊE¿>ÿÛIž·ÝªÒÌo|ÇïùöõåÝ_ß_Þýð>]¾ýðþò’.ã¿_~y÷úš.tyý×K=´PïçâgÖtPÓ w:*×·—ßýáÇ×Ë¿ÿË—¯.ÿûÏç_þñß_ß~ÿú :¿b:„ÕË뇧bßý€ó¿›Ñnп]^˜éRTéøwy;ÏÃüª—Ï/UË‘SJÏèúöó®Ï/ÿ~ùûK9¿é8Š.ŸðÿŸ/ø¸^J—yäù»ä©||6XÖ`.“äJuí9ŒèiI6Ù~¿•ÌÚ×¹\¿›$—|¥«Ü’}þeÝe£77ZÙïµÉßÜnX²[»,¹µù ³Ç8[Œßýí§¿üôó?/_ øý‡K¿|óGÿ7Dÿþ‘YtjB%íð ËQa otgéhã£Ëþu°/µ´#qJW’[ïÏþ8osk?‡ý£NÌy»É¬í(õZÙÎÂýëe2  +óÊ.¹±¥ñþìç&K˜\)É>“²¼Lr¨™7鯇ïÖדÁË —3ó–äb›Æû³Ÿ›¬Óä\in[kˆü°8 ¼‚BsHµåËöi ˜›‡ßÈM´´ÝúÑê—ë¸Y¦ó/$JíÌÓEé øM¢Þa×.ù©|Ð{ùÐôöPËÐr'¿i£7A]'?‘¿ ê&¿õ–/µ­M•JkØ¡q$·«_½¦;Ãʤçʲ>vôÑö¹‘[h©»?Ø{o©îÑñKmô¢RÜû‹~¾‘/©ýöPKȇ¦Çò‹ºÇa©yt—?ÝQl…{&¿ÛÿHKȇ¦Çò·ö?™¨³N+'”ÍÎ)ã_3JÕÝ¥G)"rR¼sJМ•L^4ˆZ2òæ¦N×Ír¨ES¯,ƒY¥;•¦ÝÌÍa§­ÚÅr*’µde§ÔšS†Ç]k’²¾ËRŸg‘&q³JoqVj–3 ˜¿æ°vô +»nJ•*ŽsÊTBVj5ªÚ«Ó‡™™K +ZqˆVS™z9k·@TIä°”ênh®A +r3­‚DQ‡Ô²™¥©hw˜å`´£ã%rÚµ’]alÃ|Fw|•¹8U-ÉÆâéÍZ,ó3ºSQlFV9½…)Z­jj½M|&|DðhxFªWÙNålu^kîqßçyñöqI§¨«s.ÖL,:BFÑ@uR´ §…çi¸eW¿šÐ¤óÜè¨8Oèr˜rãH&”ºù‘ZõÃFŠuŽV¡!ŠŸ»ÝRY9ÚÕï›D5Ò¹q÷è qD⎬3‡%ކ‚@q˜sSÖ>)nã}É3Å)´’„U’úù¤³vÑuªÓ\8ÃXov¹GE*E䦲ŠßüŠjK!‰K.ªÂÑë†ý¦&÷èuIzµËšV´5¬†îm8+: õî£!ÓÞ¿PLvX®ª³×%~Ÿ°º­*ÛRs¥è–©%“Å@Iaà ÝçˆÎ.ÎÝoV©†dÍc$PjUQwͳ>)OŠAa´p›´V1­È-­½¥˜yS¶³JPÐÓ‚ +FËÚ¨'½DÊÈ–E˜geAò»b +Í ìZz&dPrj½8îÅì +0#âXQÅn€ÀµI³µ?мù 9aÆvî2õ&òw$zØ€ÃóKø´¥ÀCVF+¬3`Õz(¶—ð-IN1f&…2§gzÀ®jPzX€Iªd°sj3½Æ2(¥6ãˆ>D&K³ÿ«>hÖyºSsZ$OÚJ3»FLZºV¡xB:›íNÇÈjæ™RDÌÈD ¶.pG2 <™ãQ")BŠÈoµèÖ¹'÷8gÖ˜„0ŒÌ†‘ $…í4ÖèJ£?ˆŸ†\Y®±Ú…‘Ø<‡!q6Ù–ºXŒ½† Çh­5\ÏTÍ2´©…ÅõJ¨ÕŠÝ ]8hjž!HÁ²",¦¡cWªAÑ&͆Ž.8'gÎ2ìEçã>G¯¤|ÖÄX¼ +ÅèmÚÎÆŠ| {›µ§¦DZâ´zR,ÝS›¦)ÀÄÚ › •£ÃøPØ4«ÌáߨۃT*pyý™zf‹Ó*Q/Ó¬Ž4[±NÏt4u=!é¨#$Û,Á +ŽõdæBæsöc…ǽC6§³Ýà €w¦®ÄS£˜€3ñÑ阎FÜÒJóviP­3ÍGÇ3Š8WƆÑlw@Èi[4΢­+uÝËd;ºM Ô„v`²èÛe[[ûÖܰëð Ð²[òxO¥­¹é?n|ÒŒFó_Ç1Z(4HÂ=\C¤.ÒQÏF±‚=ÌmsJà1âWƒÓcÈP³‘ÚGî¯6$½¹ËàÞèÅѶX*öÇèšÜs7*Øãæðê\ÍeHL™ ,¼¦“²…aÅÙqx´¡°a¬æÞ +/ÍgDì4ìÞ=ž‡XÔŠ%I)ád'¥j2Œ‰G£Õ♽¬ëÙXü(-än-ǢŲS¼ù¼TuLŒ Ê^TxÈå8 ßw«U,ÌÓ 0æl-7Ôž¸€’e>ÅfÔÊÓçx~Y±‹J Ÿ4P£Êó… k“ÃN4‡×šŽ—/Ï·diªÞò¤H7²ÂN9ÏÅ2%snšB3Çz³ìO}®¾½[¿ÇsN‘æ½PPŒþ¹¥b¥6ÈLª‘ü]ŠË*ÏB‘¬žxLrÈbkòäÇC¬þŸîrIì„¡ð¼W‘äÖ‘Mdïš_Hâ–Ë®Y÷ñ- GŽÄØ%ÊeÒ$ ¼Ýèuõ~›ÊÍ +ðPp@¥µ¯×¯ÎÅVXYYY°Ž8D»À%Ð^Vr‹ÑA¬À}äºe´àK‹ÉØ¥ÝãÎË•üCñzKm’èBÕüÝ÷,;ÙÔùâ MËåB¨9a®äÍÙ4Ôgñ/M6ÅcEëÑè7â±ìt´>|¬%„ +q+7O2Ì9ûêÄXŒ9Ï€ÚHH‡¸Îg–¡!€z<›@ñ ÷[3…Ø_QñY£õ†^T‡£<ä¢;»·ª– 4Óñó¢;Uœbž³iÍ¢·Þ=‚°üí^/a&$ö¿†i÷zÛÆ@¥ÄÙˆNSîSôp(ž½(ËZ3™4æÀÃS3oûSà§Ëí†*¾r|ïÆâJü~”ûj<ÚŽD˺M6Ò#µÇ¯2ÙSÂ9e°6Eq-uÞæÅñ†÷Úr×ÅÉUp]t·å÷h¶ÿD׬ït ûì}3Þ-òxó÷^ÑBLò1'ß¿:— +V½#M¦ëÈuÍsùnø’¤ùížÐ<ì¾ùkŸŽ=hkÁò6úžà`ºU÷U5|‰;[5¦JtdvaÙ09Fk%Ò¾`ï~.»Œ”º¶ÜT‚Þ ‰ÔÑ‘GfV…Áþ{h}_©\Mü\´øN©DœÄ#±µ¥Ø’" àC¨@aãÈtc^Uå-#Vî2r3fvÚ,0:#®á~áß?ÿüaÒ-·±`Ø,þòõ‚"svKÎYÊÞ(Mý€>+ü÷뺱ãl¸7¹Ê× úm<6„™vïênzÄÛ·¿C~@f審#RÙï(eÇ>÷ç? K £¾Wó ½wõËÙóèm•ô¾Î­ʳyÝ.·†¢þÕŸ˜ow ä™ÃbÆÕçÄPñ i|¶I Ò}š£'º1…í H°;C•¡9(뜧0‡ëŸ†Óp·X¶b­E.¢0ò¡…Zì«gT,ÐNI8ÎeŠÌD{Åæƒsw਷# +­‰Ú½;:Ö³Ñä,h S£¦­þ ÛÙÅ’5¯Ap¾~`sÄzh ´G„Ss6„ G‹gH=|!2€q›wJÄÐ!E¼0È1J°\0JvOsÿ§–,J÷¨Û™T-¢èJxÐi„q‘÷ØÒxpä^&ÖŽ37«Ç–ZÛ𗨲ïKw0fÁïeëϲFÈÕ—h^C-MsÐèâ¸H,´$)õÖ5t礆ó³ßÛ®æþU‚FÞ¡E¢*Þ?½ˆÓö.ù{lsZUkò‡Íb¯]Wž€þªÎ£ ³µrpñ¸¡[Weï– D‘Ó¹ÀQo²‚Rf÷U9ëÃXiÿ¶Ou÷kh•¸Yγ±(äê+ãÖDÍÏG;Ó ÉÃÛ-<–—ô’bÂ@DàÄŸoe‹¯€ô‡É LŽbÖW²>“è+l÷[¼i ù­¹›N 0Çb‘®nÐÄnݰÚzA›˜G•ßÑÖ< hõHX4[Ô6£ö¿<´5oa}E’)í +å,™è·“»ÍV|únÝ£³ÜÂ÷"·0ä;‚HוO‰hD]hͼF8ñÌû”îÊ©ûšËÒÓSe•¼ò­ýæÈ%¥ÇVYåvlå vJöV|«µ×mæU#‰ôêi¯‘Wø– 0 Ë]`)Y€è±­ÛÞ{çÏÙ縫䙱QÊ‘²mŒ?/Jÿ9¸÷¸£/gFm¬ÚùéîßÂf "ñé9^P3¤¦CÞæ¶E’ò{M °ô«æC[œày0eëÍ7³p—t/¬ŒÕ“îÛмƒlCck\h¬€ I^¶ääï?ïü–ÔÙk`½ÏíZc–¼rsÞ¾Ùd +órWµ18¨ê¾Î %ð&[mH>©ƒ¯€×Ù×pë¾, Wü‡Ëñ6¡Ù S軡° —µ"ÃÕG¹—•ëÁn”‰5î§´fòÇaPë#ÇLm‹Ú‹ô + wТšßb¡†D]m粌b©q†zͳ¨ñm•;ìâß.—ñ)6F^h /—ý†Í—¥n€á©äêí³/ÐJ%W:×W%ªÔÔloq”O¯b¢m¢–Œ_IѤš4lZ5[0›å +pãôñánn–$ìéƒBoK¢\Ž£±Ý„9–ƒL½³…¨¨/ÛW&«iž`ú#Ò!{Ó®1ÅPfÏ;uÆ´»OLTÎôPÌÊ4úЦxÿûçþ"&¯’ñªpÅ_ Ýrj«/¨­Bú˜£úej+ñt‰zû%¥w¸ˆ)|CÅKX“6Š´A:•â¾ +Az»úý^ÂÏCäñ ©¢ßÊøzAx†×1ŒŠµíÅ%zŠ‚?ƒˆŠ×ûúó_@ÂØ5O–5}BïC ë3•ù}¿±÷ˆ»FæuÛ½kÜJžÿ7ø/§õA5^ æ‰_}ÿ5³¸ßõ‚¾ìØ™ww¦/à÷OQÅÒ>¢úö[½OnN¶à Ÿ_~}C“¸·¹ù?JZ2rW£ÀOèë‘îÍC™âÇÆŒSÑ´Úñò…\û>´ß¡œC¢µLÓ¤Oó§¯h(\#mÅAh)älÅôºG´Ë4;±Ï€ ÜÑÜ#Ñf.ÆPÂÅìZGöƒÒå%¿íh££d·žßBÏÛ×í½¬þoû ýÈo±¸Ó¿åh.] lLG±ñ¾›ŒÕêAgO0M„Š‹ùѱÆÃ±F݉ÂùÕKX[Ã^Í¿G5]0t ¢(yK|3>Âbµ˜uÐÕ³‚Ú-­"QçSåõGXËiýÜ‚¡=ü¤%½{í섌Š…9V £™Õ:èP7  ÌõŽ3´˜ íðÌ9/$Bíñ”–{r]ÂL¿Üna²šh*Ü¢gÕ Ð‘Ž˜/¤ªÿ| ø=P•ÞüÛQflÅ¿±;þ-Ï3Å¿ÉC~{…¨`½?°S‚@Ѽá(BOŠ®ø5BI’5 ÿ͇‡nïyŠZÍæœ9!Ýänðg­>h;LŒ¡D> ÒÂs´[8 Ô*—DµÆ¤qŠèQÐ~ñÇ©%çÚxÐ6O +ï;Úß` HŸ%é¼{ÍÓ¿×}—Uö8(D. +}:»õZÞ ñGœ Y¶æíþOw$Ú•Ú@tÞ«È Ö‘MdÒûŸ¦¸ªÒwì´G¶ÌオŽìì +‚B6æYåøÍQÂþ£Ž0ñGkg€Ÿ¾è@Çè)Á¶^QÔ§#ø›3>)½€Ð.‘´¯y³ëÚý¥h0¯i[Ôë)÷Ø ì€-ÏůBõ˜ûÑ‹¢#]Q —üXøÜÝ&H^Ù@ìlµÔÍQ†Ò=j4obyÑÇ:jÊð޾ÕÖŒº0úÛôµHp9 +ú:¤!ГAŸÑT»ßkOEg ᫌ`ÔCâ6?š3(Mk¡Jvùµ;…^U"çÔèÍ\¶xÜ7I_¡ŽŒ‚¤™Ð“YäAb{²}KEwl ¿+é+ÚéЫYg€úíñG´MøY-ú=ÿ1ê°7’ÑK8ïüct¾¦Éß¿öOQÌ?}^ƒîV¯àîÙ¦†D­Šb(qE_y¸N›ÏE•%Alõ«!§¤3'žžoâ°:Aœ+ï9›uF_ìuO-E¦ìó "tõ­}ù-xµk[ÈyÖ¶3¬» ÑŒb2T-¬auYèl;8p€)~·–úI—.Xt1ÞÏ|  wöR|7ê +vç}‚3”šÎe7ù6˜x›0ŸÍJ-üW}©å-³öj4×f4¶ºùàÍàj_Éæ®IÙú>>y‚«£ß‡ë¾;ô±å7ˆÆT§lµ’€žî¥1l0ß?¿÷¸ÒÜè ñ>ãÚR +ô1kÎq JÀmñ­Vc` ܦÖ>>«µð‚mŒYI„Á§>†t²¶ÆŠÍlí‡d +ÂÍÔG:E?õýs}é÷xجï'hôGÇa¦Õ¢ó^íqêHmôé;¼¬óØî æëá +‰z¿Yï¯Ñvé·éXEöz¢£@Å/ +-]3 + €§Þ;lþÜñó1ô¸˜blípDzZ[f)` #•Àº;‹çÉÐG0Óõ´F*Zù\¾ J04Õ!TÙ½â-ÔFËb‰Ÿ‚JÕ±Îãu•\@êEÔlY?‚¹DçvòÚà‚ÆxVû.ª¯Žu¯7õ‚ÆŒØn®CºŠ¦-4C=ƒ î +že·¨ÕrLm•õ ’N‹·áÕÕ9A‹×¶ šìÀEãèßPCãѶK–9ŽqVB§mé7C7`lÑÌiÓÈþDzî5ps­õÙö¼yÜ™9åú–i•äc5cÀó¢ÿùëß­½¼Q®Þ(ò7bÐ § Rû¶ƒÓçÛökÓIú¿¿=ƘŸoþÚÆüL°þýÚà‡‰GXuÆùGÔóÈ’ rßåqðkÿE®óÛž‘§?.‚“dõoF=K–¡õÚÞÔê7O2 +0‹º*DÏ ²Û\]—D—º^ ?áÜ©aN% À„ˆn¸ˆðа§:DÙ¥µÅéµëIÜKQðœÕ¾P§ÔÐawÑ]¾Ü‘å¡°¾<§2`ôÕxƒ²¼yîðš(€qu(êF'Eš¾‰ö{M̳CÑ1èºcåÑZX½Ò›ä‘§sEz¨µTt( v5CÎç)‡Q8ðd'¸[Pç¥*½èp!à€¡(x>Ï àù¦N6oyÆû+õ|#éåÁÒµƺÄ:º„úü]ø~Æ“ßöäSbN]0±ŠÞÉ!sê=ñïG :“‹‡¦cx¿L©y#íZzôÇ+YŽŽ.Ð 6PŸ¨†ÕZt…ÐgÚwùá£-œÎ.enðd§£O¾àk}}$›·qEá{u„w}Ìs£1 ¹†7ãqv©Ü8prW³[зuÆ@ýûY­þ`­óíÿ‡Ö~6­½=­Ì|ýò¡CVƒ™ö—"³„]±Îÿ²ñÉ}øè«™lXo–^~ãgÇO7A :rg';ëTËðY½–9­oJ6ÃA(CM÷˃kÛÎTOH„Œ8hà¡wA·ž2ßÏÐŽpT¯è\FÚ@m€ËhaôGÈd[îW•ˆ¢\e¿°ÃnTÔ­µ˜›páï׿(êÓÄ‚Á¦Ö—.>Z$ŒHÍPÞ U;td€wh)x!EE&)NÏ‘d»¼i¢q¹öé(·ÑÛR…Ïæ`ðÌž·âLnpE©ùgTnnžÛÓ`Ž;ÉÇ3î9¤øä³;^êÄ –Å6˜pœçlfÆgH„½ß<Ûæ™çÚ7nzÒ½º~m•Jki‰äÊnÁïT¾Í¬HúÇ D ¦G„; +«˜‚F”¾,2²G(Š¢¦…âa£¢1XÕ@Gå¹ĘǼÀI›fCavT’lzv|-L™ ÅØ# ŠÆjÄt°{):*®w¡‰ í´zY(>´NCc~Kk CÅOÚc +XI%-Ôl£ Â´è(³ÄÎ"n;þ6ílÖ–_(og¡æT‰Œb•Ø[CöÚ2;åÉ:¢½\¹€Œ‡¦(C¶l´vÍ ‹½³5QPÖÖ¨(#ÿ:ÛЊÖ,k¤GHúèáîšE ÅKŒîhÕâ&8¼o6e;/ßýÍšê Nö xéÚ¤¼Ró¯!šCC³Bô[TqÏŠ"dû% +ÿ˜Š¶9§×¼DÙ‹søYFJ2¢0fŒmÒ7ƒ©h黿XËiJXvRs”õ¡&[e̘«Œwy¯ÃŽâP’S +E‰–~t8Ú™ÃÐ\/TV4åï6ë…}Ê}E‹Ñ™ýh Ãyö” ܺØHxaÖT/È2·|¬Ζ¬;ŠªU,Coóz”ƶK“ %AG»R Á„v Ž2š©µ#` ‹É–¸ù£µ"™ Z‹è¢7oí¦XèñnÿÁˆ²¸Y–±…òÿÙ £´ÞæleÝ"ò]G¬XL† û\(½î£ ›  P?™8õÜl=”õÄä­b<Ââj\BÆwg¨NÀÒü[Ìödó*ïʲ:Uö@™‘­T1™ØÞyì4:fhxnvÈ›V‚BïGh°Î"1{¨Ñ…ÙâÖ]›rœª„0´åì¨Ï4ŒÏ\^S´…7·³œ ›i¸k;›}`WCwC;ƒ/²ßmÀ‰¾Ó «h ™W³˜\Ýv [2”Ý9å‹ë·ß>4HvG¼>k€0£®Rîh Ý"6F*Ç|’bÙß¡éÚ7±P~m ÀxZ-î¿—ßJ¼ 7 {®’ŽO'óÂJ)ŸÓÙ„‰Ðš;,Æù?ù½G–­Keêe½qéÿóß·‡|É>ñÓÏ?¼>|óËoŸþûÛþýúöÛo~þá?¾xœï¾ûþGþ ×ðSS>0×IhSÙÓ:€Nÿv¹Àñ»}Òç2‘>N^˜‡{|òÓ—óô4K 20¥ùøËÇò×·ß?üôö!¾~ç¦ÿ|iåóO}ü|C•t‚NÙ“rŠL“`§d5í7”k²|4Ù2‰9 ’Æ”&2ë­rOŇn¯ûû‚r+\~‡âœV®Wåï8>& X‚X‡¦–v”®UEq½­ü¬I +‰ böî)Lñ³‚{Åe‰cºdEKö\-éêÊèXEƒócTùZFrŒ„‚Úó ZÕ?Š)Ov–1`k²]²¦ìg¸ÊâÿnMüŸþª_÷™Y¼¢~aø³Ð0Ú+HSÉÚ+ƒ4³÷Êß¿Z½R+Æÿ`äIEâÉsâÕ°#å@ÿX2(CV|ÀêJžÙ—ÔN_¸}|ne¼ä­¤qλg[g/ôËJ‘©·¤qŸ•ÕÛ$Ë +–ƒ £©¯cZUQ0΀"áÕ"Ññ*r51Ê·ø†6äÄÐMpP +•íS¬gvŒšzTl¢‡•…rL›e­.Ý£Åæî³a£ÍœcjI +!†xŸZ’.¾®+º)ÎÕ˜ÿåqTvµôŠS£oçp|z=/Õn¡ås`VtvÒs¶g¡*¤·Ú¡iŒÁú@i¢¨Bz‹À‹¢å° sù‡=-؃q·Yì­jéi$‡™VE¶>fõQn†9¨ÚA,ÌA¿›Ðñp„ŒAeôt %©Œ¦ò(IYI³vŽ»1ZdUÎ÷ÆàO”3°ÆÒt½ÈúGÓ +Þ~‰N HËýEPö Þ1êâ)¯°Q}õ(ªÕ)Ÿ§/´_y‘ûž'ƒö²Üc\è#ÑÆ*˜´™Zwq´ë-Ag +Ò³ IÝ`¨ê5Ú¥€ÇA½fM”¶%×]ó#XUßíHöB¹µÆðÜ +ÁÕÂÄ+vQÜãrzÈëÏñ8}¡géyÞð"< 9__1”Q’ðªq,ê䜘}ÉÞ¯¯·Ÿ>¾í7Î2 E"ª:Šj¿PѶ^–E:ð¶„’¯¬ÅË ;×e;‘Ò0’H¯Œ=ËÓȺÙc°Ú^¿GÏúhõÚÒÌy¡×aXů1á"b´ÐÔÔÊüÂÞÚ«óÖ¹ ‹P:¬ZhÙ@txÔÕ£sÑIa´”:- h³ä…V³ñr5V ‹›]S`{*eÖ…4**óz,4Ì0,Â(kôõ¦ÙrïÀ«6ˆu•&1x˜gŽV„Ürð÷ÁŸT<™®pb/PŠtñz?‡ç”:Üžý8}¤öÔ#<º©PË\ž½'¾5Í÷½‡ïÏY4垇£Ó2ûÇhù[•2ævo¶}öŽ^g¿L6úüA´¿ýXg N´€Ñ“ânâŒXõmpÏL +Í™ eBUqÚÁì(^Bô–Îd}€$:ÏÀŽ+I L«Eè¹iQfÙy4¸©#æˆ +ÈÖ p½PƸç*wV뵩œ£D3–ô UÓùñu¬G5¥½ò„ê‰?®:B-ëŸg¯JQ¯¢ p${'ŸJ~O—ÏÇÁCŠHŸ8úuŒ$ƒ8?PúçåÌÚu- ª—½ÂZˆ+Pìü£Úð*…f **Û0˜¦:W ¨a EUÄ +ÌÔ1R¢RºTâ#¥½=¿¶K+™5Gi¹¢éÞq²#ÞíbÁŠŠEé#:Z{4ÉaEí΂ØUçOÉeª>^·%>Oäo‡­Þ¥£B·>¼åʰn1Z½‘šM­0òºk«}”/ÖÐÞœÛJ׊æñ$¦K8W2Št[ íkAG*åÑ —à@‡åÙV#à‹ê(÷ŽÖ"ù‹5ûº€ÝŸ‹‹Œ‡€¥-W˽ÐdÍÛÚ½2ÔƒùgIõáEÜ •Tyõq³5Yœq©À¨æ×wÇ0èjµ™¸±ëû7ŽêÎRK:9º±ã÷²É(÷.œÂá,ëU¶J_ª‘Å¥ymEJC¹w!(¶¡Ä»pýŸòªÙÕ$7¡¯Òûh®ü¶k™Di”¦WÉ3ÜûþÛ9€±qUuKéÕ­Ó|Øà(aÀ9¹¯©ÅÛý0Ñïnñ@/è óº!!²—¼˜Àô—¥ª‰ŠýŠ Þ LæGnÁCNåÌ-Øå{l°Äði&ªufâzå¹€@š}£«Ì½ 9…ªLÍD$‹OÍ +9U¿ÁoÛî›lS‚ÂcW^W‘B€ðŸ×T퀺@ªêËaˆ•6ä¥R|WÌráKQ^ûê—E?µµ¡\Òz&*¢aNੈ† ¼ÉÐö4˜a?·6<ýH©*Êë¢(é“CAÓÓ¢£ÚÏeNH„çðsmñL]ž åÈ(¯y)zâ[`€Ú{’óþvaÛS#*áâ§ÝîïðJ¢têÜȰŸ¶r†VH–×ð6„ˆn†y™p¥¯¢.êL$P{( mvÙ:¤õöÙ±O“F:&DÅß¶67¬‹\E’Œn³•²£–SÙuìçœÂbCO+'£¡ú 1ĺ,æ¢ë¼£4šìw$¡Ž¼lqôJ]j +u\›˜7[îJq|•¥laöö±,!¢±þi>C\KZ¹¶¡8ƒßPœØU0Dg¢Wú³*Öi»Š3³óê,ÎLFA¯LØÙKÅ) ß8 Ç´ëä.nIÉË!¢ËßlôXe ¨5'2¯udØ«‡²Ä c¶#ÿ¾¿‚]ÍY}T&¦ÖèGYb6ñYi"ò£áˆp¤ÓP4Ìl%¡$E‚dgÛ*É5¾4n»ËÃA‹uÚªž,$?k ׬ÏzUѵ+ÚN"nÇYŒ¢6/o‹ºnêQdNytQ Í_q•ä¾f,IÄ“oõ(ƒßÈKò5oò¼$¼ÛׂB60¶P4>Ö %”Êýk¿þÂ7¹CO$&õ{ø‹‚VË%Âîn˜“¿lê–8Aý½ói’ãî@µkŠÐp®úsÝ/UC\Æ÷GÏ÷ CWó½5oûÔæãò¸^óQ;ƒXVG¨ÍUÇÎÉ:öHÞºâ‘h>^RϸDPUý/äcˆæQZRUß]PaGÇþ+ÆŒŠ4A© ´Ay¶HA!Y‡‚¤;ØqLZ]ƒi]%½Ö) MY6º:OÁS¤ÞÍê"cº pS •‰Ü•é­âòWŠæËLSkUc–QQ§겎 +JlPPì!•C~ìJE7¥Ã!åLfÚÛ¾ý¨ãj~þ„†,“QŸ¼  q“;[Q⦵õ£íÊVtŠ ì6¸N +¢Üˆ$øÒÿ™”JgN»ŒöGþjû µ ã£Î$Å×伊Ly²JÙÖëc×Ûzyi>‚>›õìëÎ’£€žGÐØy‚UÔÀÓ]ËûÜ ª÷£þÞáD­ÞéÞvz´ê¼ÖÎx<¿´Aë…_ÚNpw$‡^ÚŽ_ñH÷ói~&×FSU¹><5¢þñ—ë +´'dÒð+|¨JŸn„š%‰!åÊ2$µÁP³n°ˆ’‡oÖPÅ·È›>( f½q¿êiÝdýúT·­§Ü7ôãø{û¨ùÿ÷¿46ƒ@øQ0ˆSV‹¿´R¡xÆÃ{i „à¹Iola@\™ª^Éê§¢Pø£†‹:ZÓ|GTÈ bœ ÎÃa³gø}9üZJX—nÕìµÀ¶¸Á•ý ±£L·¨£Æ‰]B\"#®†îJÁþš†lC«C õc­|øa)C´:^t)mI *„§ùX´ÚàaPì•Ø³dYÁ9£ Íøý¥Lº&²f¨4¥Èÿþ¶8ÒEòg‘ük‰33 P¿Ù•›ô «ë’’U5ì(åÔHš…š5<2I滸5t$)X}áˆÝ@Ѝ vA¹Com"h¶¨€5à$+Š6}ITú…̳BÝ{#ê¼³î¶?@ëÞ-á´0wz ~­º-YX +¸_EE—ìdHMAù4%Ù-–ו‚ù}ÏÞyÏJ‡ACnyPˆêKÛɦÐ-Öm¢ +¶ýI÷møKÛH¢I«ßób4Â#Ûª/²è%€F“Œ)µ<-ãö}õฯ¹#á㋳¤4úh?ž:“Ú å,à¤R=´ë*ÎT £·"†MÚÃÕo¶mËñÉMšgâ­€Âù(ØkÎÃp×þ¤ùCXbw+Ïä_ÉGãkc@Sèz.¤™Iò7h]_öXIóÝØÑ±S˜|•¾2 ÄG^稾žQ%‚ZoĈ©Cˆ/!h×|œhþÈxŽÉ5(3jÉMìBJ5©Oð4Ïj”"•FŠn•ó¯Rí»Ð€bT® QÐ^EÆ€ Qå÷!c@б¸ªâ]rUó>*§QŠ¢Æ2@TÀ£[ªwN" +ö7Õ~Þ]z#-õ"sZ׈s2´®nÔAV—æâ<ý*y~û×?¿ÿý_ýÏ·ßÿøíßýã¿“LÒ¥0ldÍë^XÄÍšßÎ +¨ØEŸö‚k*Vy¬~+¨¬€|²Æcûbâ2Da“5„ÿMoíû-–Ïãv•XtOÒÃh.oˆש|¢jÍ"ÎŒˆõµ.l‘ßÍμ1ÈÜy ¨þš‹¯L e8ç8ã-“ùqx'¿éáÚÜÚîÖ8ðu|ÿÈëÝß´À΂©¿ Ü¡t÷TÛㄯÕЂ7ûÆ.ÚOÊóJ5z`àK° +”ZFB?9(óÂçqµƒ2åz£@íâyQȾË"kŒ¥«û+9›Ð)ZñÒþy5ñãñP/jn¶@„‘e7²T„0ª×θl»ó'¢óuj y}±ŠDxÃÈv.;jgç·ëpV@íì|$ZÎFÅ´ÛÁÉ—ØóàD·#·]ùÇtª•ýçmíúm^©qÜZ.bÊ¿£-¹ÅMQPå$&ü 9V"†½K+q Ž˜C­=&.Ð/fÐÖs§±­WŸû®Í&ÿâ&®atöôü«W©8…ÐÀÌÔ¿ŽÇE²—©\§ôa÷(Z(Sè>¹ aa `'eWb ¤ßãQ+Fë='‘†ë@¹é´ç2À„™ Dÿ‰?0 ˜)X8çrQ(@¬ ñG}#ºÈ%µ:nÝ-ƒ¨å %Ú\fŽ6ø6*QBQãIŠÏö‰ÊÕ\ >-6ºg}=ž(½ÆS¼< ÁùÃ&È)–8.–œÊa¸EïØ›–套 +l¡SW£ÔžÒDוrÎÌ¢WÔ®–8Ï*”fÉB6že «ÛF§ŽÊFkŒŒz·¤,HFv0,!ÈE•Ò°Cá–/î ¹S:¸3øŽÆ¯i°mœ£°L/'—Í÷оcåž_~ûýÏï?Œü2ÑcÅ-SG!šâs o0ƒk£6Ôc+¸Ôö=­fQ*S$κÀ3^™5;Ûé‘6&õM¹Žv«ò¶K õFçäÇTHêÀ[k³9+æKŒÇ?ÚCÅ·íô~,ܧ +¨ð˜à2ƒ:E‡Ž‚¨K™ùÀÿ)J©©m‹9³¢)3ç (Öé¡qA­–8¯WsO +º¸jc640LÐÄœë YÉét ­E{ D#(ƒ¬mÀ˜µ“[´©@Ôž™”û2;À¶R4–1Y85«*(Ó­ŒóìŸå1L¯ú™Ñæ{qÈ¡ŽCÎó‰ftÉ´Åc&JDã&ðUc&E- +ˆad¾^¶(G-%*ŠLÄ™cîAoý¼ÝÇïFåv")K'çãs ŒÝ5D­†v µ^ü\Ò¼F#ݶ8yôæÇá×gBÔœÔìÌZ„ªäª¶CEÑÐgÿãñƒÃ³Þs·"ÒÉ,Wõ Vɳ¢p¨ÓÅ,Dcæ‹Y˜Ñ˜býaÛ9Óô‹’%ŠŠ\Eç‡4¡tnf[òÌoκ1%;5­…è +Eï +M®2ômlÊU¬‘ñö9PŒæ”Ïþà.:ƒÏ‰'(ÆAy˜´s>ZIЊgU;›hCÖçÀÌ¥èòö袰óàÈãNC‘LjÔÀ ZµJ@Ñ&Å“<@Cžµð¶ ò„s¹ü"eÍ7É~èåjPxƒŠì}H4ζb®¿©Çtõ2‰ð1‰³Ø¾L}+Ãkštð÷•ºXåw+ïh}+cocä«•”sºZù«<¾©>¯)žšÃ¡>;Ø Z¼ê6ÞµèÛxÓÊ:«ÎÇç@ñØSte˜ e³íÚ¥P€¶dQàÝÍ •Û¡"Œ5\ í0]isnÑrxåñ‚µÀÇ®§õ¾šo¼ÒˆÃÝ.AäiÉ¿xù´3•žù®2P,˜zõ··µ,l¯._.—[¬gú³f£–5óý2!ÑÂáù2!FDç;K¬¡9Ý”DYfµeêó1H2˜“ªˆš©XlTöΔ.S×âÆ—4E`x–ªíŠ@Á†J”¹Äë¹¥~ùWIÖ9Ä”ìí·9-ym·´psý&kP'—íΘ÷ åÏ¥Å+yàQv†[^#bH›ýÜ`驨ôÙÍÐátU£šs¸«¶m]wÆ<‘RÃÍ›'Ç&÷dµžsýs Ê#ë2¹fv|&3„…Íõ5t2ö|»Ê,E¿{æ8Ë=r–O?qöñn2¸PÝq×r‡D2Ìàm1†e^~N"}ÎîP©Pùž²ÅÈÄú™·]IØn}ºvgf-ܳ +wŤ’ÿ|ÿå™#‡ü=óB"ìEéûç·_~ü +^þýŸÿýüõÇÿõóåýçÛûËo¿ÿùýÇ?Þÿøöóý[  ´Æopbœ“¨D +·Õ¡rb ØÃ4­ó°+¢·ä;\= >ŠÏ¶¬äw`ìkJv +Ž«<~ [å7Ö‚CÆÇTEGÀ˜{Ò¦S–¥ù­Fã· ¹âÁЧ&J4ïà q怼nôc ©˜‹Ð¦Z„œ}mbž! «üÈŤ,Õ|J]ÍgN3#gTàÂØ‚R±,CóÔú@Q›š/¢Dñ‚´ÓºfZ*¡¶Z¤©÷B"½DªÓƒÝ³ý–œèUw¦0ŒxÕ¤¢‚ìÂGRk·â[™kQbŒ9JØÏ/¨ë=!7FˆUž»ÓcǰÖ4¹sÚêlo yáÆê´µf³Ý‘hœû‘—ˆb Ê­q‹ÂV +¸XË©;¬jù—I‰"]ùͬ—ÚòÌŨ<°Êú@c·çOêâÿ.3Ú¹MG$L]¶=¥JÆ3DQâÙfX‚%¬£7UW µªky8ÐÙ*, óQ, 6:FºýŒì³ƒŒ€z§Š¦ã€ð¸?ìE ¨¦›=¨u͚ܨ&‘ø(›ÍCgÍ‚æM™ììFÐûûgýêdJî“gŠŒù©(>\|zÔH%#¨œÃNæ´6ÉqÉ÷ +ÿ´×Ùßþ:ûWgŒ)­AØ_DJÃg\󯕍NÂÃ3þÝçÅ.ͨ¥›Lˆí+ʵk¯p¶P[bnèF°ž-QkèÃ6æÑsÃNå=¨Ð`6¤W4«¾ZÀÍËNz$y`̦ʚk2ÿ«tNlä•4TLôjû–c°v˜ÕÛßGö0Sª‹aŸÕ UÓàw=ËNçÖyí·q64Á“â,úô!«CÑ× VÁ{Îq»ÓVé”Ý[¡Æú]†yÙäÐÞ;TaâTì9®c„ ÄëaBÓm&À²õ0Áòù + 0a·V˜PŸæS˜àfþ™, LÔŠJ¿jJC<d.fÎŽíÁ¼þû÷gx·´Çžhš_‰æ=EºÝ¡yz“§' ‰ð€Ïuꢹ¢zŽÉuK®=(vòÔñÙ¿ÈDÕ¥/” Û6Ùµ$›M?ÚÖ +endstream endobj 23 0 obj <> endobj 978 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 0/Type/Page>> endobj 979 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 1/Type/Page>> endobj 980 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 3/Type/Page>> endobj 981 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 4/Type/Page>> endobj 988 0 obj [990 0 R] endobj 989 0 obj <>stream +H‰´—[e7…ßûWìGxˆÇ÷‹E"3@¡ßÑè2 +Ý ¤ˆOÙÛ®Zöö9Ó/$©÷wÊåÛòrùëç§wz¼ûî½>¾þðþxÒGýÿçŸÞ=?ëÃÏ +*;SJûaüí“S6Äã‚wDž_Ÿ~õ›ïŸß~û‡ïŽ/Žû×ÿpû×?ÿöñçÿþúù'Êû…7*™hÂñüáaè7ßÑ8¾áØ÷¿£?~9ž¼7‡ËY¥Bÿ¯íÛÖ±Ðg>^žB¦ñi­ïQiû²äzyúôô—ÿ{~×ÚšŠ9~¢¿?¨q8\IÜeûN–“×f•Ù—ªq—¾Jž„;S`1’Oj]³rkfuçèØÚú7D +ƒŒ×¾×1iå}¦K% &EÕ ¥º6šL§ÞÊÃ`dYz:Åì”ñÖÇÙ€²—ij¤£/wøPð ìeÐÏŽClÆ9,Â*oí4†×‰²›iZx}¼ÃpBqBÙΠŸÃ\ÇyïþñúA}AWµ2Eç8Õ@—ú"xºßÏR‡^õÝæ×EiAn +¿¤Á¡•si±IÑÃÉ{èT¸%úšcWXCg:æ ×wXQ:ù\¦Ké( +°ý`ŸºK•¬Ÿ ºÌ´1¶Ì‹P,X$ÃR°l + ûhcÉÜ61Þ…—§ ²×m%{N¦M)—t®ç&Ë%דe[ØE +ÓÉ,…]VYÇ´ÔuNe·_˺BÃ,N,ëJVa-ë€AY­?WÖyÿhõÁeõƒ¥Né lVÓ~j¥Þòu›å«¿É²[}:RIÇbfõÛToÁö~õeõCûYýÕêJÌꯞµYÔÏtR?gø¬ú{ôl¢‰kÏÊê¯ó7½¬cÁÐô|À’%Á9Áö#’´é-0GnÚø@•Huæ>†MûIÊXÚ/g$¶Üì /dÿÞÕ÷8Û¦ó:Qz m’Öõ)×f²…£ýu(™«š: òÁ6 A‘¹^«`kÇU§½Lõµ„‘À$ãµïÛ2¦tV5¾Þ…¹Ðd:BàkÅ‚üYÕø¬•y6IŒ€žeéé¶•^xh¼Î×”ⵜü:QþîÇE©"nb{ݵÞà–ΨèºQ8«ê±É@9zÍÄšªµã¯[;Été”AŒ0È…ýµR¯Oèì¡MPUˈ@9:ÍYF0¾hN+MŠðS 3Ì_·¾|:[{ÎÙ’îÏõ£"¡éYè Rêńؖ2=·F²P)I'%÷½=:eñžÔ}éèÞÉÂÃÍÑ=jR¤£êS÷¤Zª˜.¡cèÛx Cl;]AZºv]ÓÔ&¦þ-™U¬zÁÖƒÕ¦.cØ’ëÚkÛá‰Û†Rž +¤DÛÛ Fã õœÞƒ‘Âzº¥ËSit6hñ¢ªÔˆÆE BQ ’aVÆçîÞ¯Sü s–Øý{îQ襙· +Çl$6ƒ™-kŽ[,KD![lwãð :©@÷ý¸r ŸØŒ@°`‡,2`¢D3K¬c€I.³Jµ“S¤à…§ª°ôZ '˜žÄ‰faÊê¡xd¥Qå#1~).‹ÅÍ‹ÅÍ*›+íqs16õšj²y¦s޲«Õ€ÞNz›%E#¶œ$¦KÂx°¤ü "‡´NY7:cbЬ¾Â–Š…™Ø“„ ¹®½.­ª g‡bŠÌtÁÎKt²É§ R˜d¼ö½XÕ¤ 1 T†PT†d˜•ñÔgæ·Ç3²ÐÂnê6 wTßdW“ˆÌFn Üº´¾gW(3±&‘0Ñ™&%1À$—YÖHKÝ €Mýk´_úXÝ©ôô³; ŠŒÌ7W§ÁÖƒÍî$‘Â$ãµïÅh›BŠéäIï +) «;ÅÝo’“P¿{ã}VNþeºs³œèû"§3F¾ÉÞ"'ÿ*§!0‹œN rêãË/r:Á"'çvrbŠÌ^åÄl’D +sW91rŠ>Ä3«Ž~ˆ)`/sªŒÖB?Íy-½í¢™žY˜Î¹ÉÝ]\2vÇ•ü›.¹®3里P°C‹{WëFïº, (F®¬þ+€ÞÞLŠ9Ç+Z‘›Jv+ µ•ÈM1 ×Etk˜.¯!O íݤF(nºjƒï:±›’žétkÑ_—’žÙm¸·Y ~‡ÉAaz±ŒŠnÖ¨8žob3LÑzÈbcíOï``@Öäºöº8M¥Œ7¸St¢¢|^G3ØìDÉ 2^û¾Í—Ϥ +¾f&UUHû0=ô˜SÏöZr3ó–]‘t¯¸ø°F¢*'œÂEQAyêæ¢8ˆwR£o²ìiAqTŸµ)¨D˜HIZ£âè9Ó¬C`ñÚwÛãiª¬»Z/ö¨a¢&èŽjâèëßÉ 2^û>ÇäU$‡1³>j©Ó®”CT‡´_Ô9l/Û_§î¬”ø@½<$À;º{ètTiú~’<á’U´Fõòa:¾ê¼ù mVÙõ›+Q9hNoYP%¶7´Œö¸ÖäéÜ;‰&¯}·=ž¸±m@®?$;B»¢±Ý`u4¦^ÐÖAO´tvªŒ*Ò~y è)bRZ´À¥ íg-@x–š³Ôì@£Ôì’ ~¦dk-ð%T»UeÌâkéAù.‡¢ÈûÎO‘÷Ð`åýà ~ZÜ ” ŽÉ:Æz„Ö \pGŽ&¯}¯Ž9” vy +KÚrÁ%RXO·t¹º$ÊŒ÷UÆE&í?§²dßæeÁKÕ.gŽéÅË0èþö„„ñŒ—A𥠄oä§‚ˆçéÍ,fî¿|T%áÙîúýÑJ–UNO8–RfiÙ +÷Æ¿$‰bIg^Çñ)U­)e–îIÐ>J­d^0~!E,æý‹ÛN­ƒ»N i:]ºNÃŒ}~`ì#šdìÃòôx8·wÞeT¢T…øJ“\Ìò<™±¶à)±®Z*Ú‚›ŒHK:{amÁP b]:æQº¶`%€D±¤s#5kÖBÈ«YzŽáÌœJmŠk2óü¢°õo• ³<ÚMið-Ž'ߪ³?¥MËž¤˜:•Rfë0^-ÌxE‚!c¬ílì–ÒGÕÆÆ”2Û–µº¹PÌŒÂ@®XÕù™†š ëB!Ëë­.Þ +V½Nh¸R“¤½Ò8ÿü2]ï<Í(HÛ/(ñÍo1˳§±âà_Ð1Õ­&ÅÁÈI cmgn¬8TBL¥d^”*ŽF‘`Èk;—3ò“1êP¸Î.ŠNüŸ2™ÐšÌy6¡ý¢»úÒé¼ÇÍÜÍùšjïÙ×nçÉÖÔ:bGkd-ଗ’ÅUòv-ç&W[Ø•Pfͧ›L’yada¹bUgamq$SÈ–Ò63Ɉ: +³+¥‘hž\)—ÒËa?%+¥ö;H©Çà÷~½’RÊAJ1Øœ”:0R’€ì¤Ô“RJ3))e¶G))ƒ”(l€¥¤L¤´çöÕ>‹×’EHõú¼×Îþ––«=–h@Vƒþ±y÷öUJ‚D{¥6wsûT\fa_dt¾; ‡DÔœIFˆ)tà•ÏçžÊÜ.Z$2¹6bŒ,®’;âXF8Îð鉩>h5ÉÇE‚!c¬ý##÷¶îÕˆ)·Ã*·wÈbc1aµ“Péœ\ò—ŽxAPöEJå#å?ô•ÒàNOžU.Š”v[Š\áJJÙ©êr–» 7»0ëWˆTFcmg\mC—ÜaRJÙ¸®ö9ü3 #ãBX”+Vý1'•‘„žIF ….?Ì¥QpÛúGx¥6ë5¹2œ«m{R[®eIM´÷¶“ŽðL­Úfÿ¹ã÷qúx£¶\Ñ4´ë\Ïf=#vM”6ˆnלdCë?®·ë$K0ë$ÌëA{fl ’kïÖ31Õ=­¦i2äHe”1ÖþqÏ„É5v1•>?:$W×!(W¬ú3UÜþtTæÚNܦçÛ\N½æ+ ݀ʘÆMß/œ¶.5õÓ+_Dzí„ËUnàuÂÚ;º¶qZq$ÒŪŸïfx+x?Jn¯èˆAç3¯v?M;;sw,D‚t®dŽuÙÚË«®[ªÚ· (õ eðý‚øª£=ÇWí™â9Cùe¶ßŽwÞvlÎÕ¼Æâ¬«ßç|öŽKoId3—Þ’]ïC´žh,ÍA¯’ÊÑ«$ʯRØ7É[£¾ WS-SÍÓjêr0D‚!c¬í]Mºƒ,­Ë™€jžÖQwˆ}!l€‘È›;Yæ^9Ù‘u §ŽSœŒã‰ÎOMJX–UN aYФ¥ø¼èŒ{I ²ÄbκŽc¸—Rfi©Õ=J­Öº$‰bIï^Üop n8¥ÜqÈ:ñ‡Ž{è¸Ç4َקÇ;ÀV_:W¥) Ô++þÇø—‹ÿ2•ñ–É”hËD±e]Î;æÐsÌjìŠ +M†k6uÞÅýŸ‚˜‰uÅÓRé +8”Ä Q,é,‹»&1ëŠ7Ò»b8”Œ_H‹}q­õk• ?šMip-Ž'ת?¥m%)Ö­J‘‚u¼$^'Ì8E‚!]¬êL¬ìËýbŠ51¥Ì¶e­n&Tf¬Œ"Á1Övnfú>ÂJB|§h|«YåÂ…x¥&K{·“éèG{žúÕ¡ÊA¨W]üq4ÿÅÑxÛ0Þ6ÑurGt»¦”ÙD¦ÔfΓ‰Œ s5î8ÔML»€VS¿ÀÊ( cmgoÜ/°2¨›˜vùXÚ/ÃÖ(läŠU¿Ü3¯—>çnæmÎÕT¥Ï®v®÷ÃÃÒúoõ³s9lë€u²£@R¸ÞÀ®åÜä: ³ʬŽÌ¼Z˜50D‚!c¬í ¬me2Ž)5vÒ65Ljz+³Ë$÷Ñ<»Lº†›È©¼“SJVNíwSÁïýz%§”­œúoýµ99u`ä$1ÙÉ©'§”frRÊlrRfäD‘`)ÊI™ÈiÍÇç¶Ù¼dS½îO;Ø_ÃÒr5óÈjÐ?6ï^—\dÚ³(µ¹›o¦â2 ûræwç`*4©ƒ¦x1©-jŒ;õÚ³­)™7w´™<§Ý¼90zs´Ú½9=²Ò9»(5g^:Âý@‘;ïTô8؆h tYÓ"‘>Î3‰Y\%w´±ôqŒA¨ÄTдš¤?N2 +¹bÕ/GÛóõP}%¯¸¢£”_âxr«òp=¤´ÛRäº5,I‘zT]ÎrGsƒ ³N…He”.Vu–Õ¶rÉ ö¤”-ëŠàgf- ‘Ê(c¬ýcO)îœGÜ!DÑ!Xo[Dy{{ߕڼ×ìÂ@tn[®Õ.œgïkÐ!3xÅ'Lï“,3ÁQZÜ! C"ƒ˜°še—¯¥V€rŪŸk6©‚;öv/¸®ƒåÑÓàŽµ]@z ReŒµû3åöðýE’0޲”F7+ P28ap–}Ü}þ™Š;®ID3®T”ôËÈõ(ºº”!ôWÆûNðñ*Pyòi<Ñôpe¤´u©iœmfìPfÇr•φV kŸ¹]ºÊÙ?"Á1Öþ|fÛ¹Þ”–cÝ1(#3¯v?M“uîî…H°‘Εìr»ÚŽÏr:Iœ­ùú¡Â’eI ƒ•ÇWLø_1á-˜ð)CùeÂO/=ŽåƒôrÓøcsîv> ûÔ®KÔI®K Í[ôº„ Dÿ8¯"“sªäˆ©4i5‰XŒRà W¬êSäK¶ÙõF@EIëH¾äˆé\Iï–,1|–(K ~“ض½³´–R§4Ò`iOt~‚R²¬r‚¸”2KËVØ:06&1HK:ký‘äø„k)e–n…ÙG©Õz˜Ä Q,émŒ;öÁ§Ôtžf‡ø# ʼn&i}¢p¢¯õ‡½hW}!¾Ò\³<Ïi¬28 ÄA¬+ˆ–ŠÊ†­Œù…±˜3Öl² Öµc¢ë †"1HK:Ÿ1€[³@¡¬g pì9f5sb(µ9®Ù Ht®¯ë}• c=úMi°/Ž'ûª×JÛî]IŠ©a)e¶6{v32ce †Œ±¶s³û¯OMãfJ™mËZÝ”¨ÌxE‚!c¬ílÍȆÂòey ƒ•Å·šU/¯Ôdiot2K¯¾s6#%mÅ =Ä4ÍÅ,ÏÎÆÒƒ‹A(ÄTP´š¤7 a+VuÇ¢ƒA"ÄTJæ©èàk †Œ±¶ó:# õ# ÐuvwtÂàÿ”Ù¼¦ÔæÎ³yè\tçK¿óN7ó8çn*¼gw;×¶km±¯Ëa-ଣ’ÅUòFv [#ʬ¹u½õÁ«…Y#C$2ÆÚÎÈÚV&ó™Rc+mS“ùŒ¨7²2»fMæÙ5óWM½¼¤d5Õ~MõüÞ¯WšJ9hª#›ÓTFS¦:pšJi¦)¥Ìö¨)eFS –¢¦”‰¦r3‰žu-YU¯r*ûkXZ®æÐ¢Y úÇæÝÛí±$hµgQjs7óOÅe6×Ryw(¨[“–SèJÀ+Ÿ@Õκ¡]'´H´4N¹ ¿ÆzWÃv¬"œløæÄT´šT„“"Á1Öþ‘ |[÷˨(77ÊŸ7±Š°Ú«HÏ©tÎn JÍI—ŽxcP6WÑñΑòŠK :Jip'Ž'Ï*—FJÛÚX.p%¥ìTu9Ë]†Û\˜õ+D*£Œ±¶3®¶¡Kî0)¥l\­«&aÖ¸©Œ2ÆÚ?öÀ2ÒУÉHÒÀúÃ\&•·w°Ç‰^©Í{ÍîDç²KO#ý±‹zÒZ–ôÑñ?CwsÖ›èê[¼Ð‰î8,-5u[9ö}ÙvB +Ú·(÷PÌë„ý´G‘‡"‰!]¬z]Ë·¾û}¤Õƒmh™× »Ÿæ×Š$6Ò¹’ŸçØä ¦õh*ÝïS„áÙ¶Ôßèý8{›¨þ3^íJ’ä6Ð߯S2®ƒï‡{ +ÙŠöÊSL;úC I²ºæbé\)“EÅXX¤:˜ê ªÏÂ"°QLca¾É¢©CJT]ü¦@“+`£˜ZµG_´GAPxÆ{tÓÃËܪ=ŠªÌ4Z¬‡XÁµçi>“çITEwú`¯¼zR# šd²Ìèª#€M½oP¦Æ“EºÐXgÖkýÔ'*ÙUS›ÚÞ R&ÈÈ–ŠiÄ3÷8S LqQ¥7¢¨tªÒç è¦'À®E•s xÀ¯[tÓÁ“uîQ«€E C€îºåîæ°›(ϬC S†©î6õ ¼Aɘd`Æ€Æ:³n¬›z¦ôb`jøª)·ÀR1·¥Ü™¦Ú ¨Pê]µ’¸Íü½  cvîVð'msáik¬å˜‘ÞˆnÚvoÜ{Ð6 ‹ÚfdC=RLD ½UÛBM²!‚¥bñ.÷µ~(\¨U6ĉ"&º…Þªp¡fÙÁR1xæ¾Vv  +;Po” ·è¦BímDíœض¯Ý'Âýq#¢þ5Þ©Z!ºª[è…~où kh†º6ÙZ¤˜z«®»ÀR1‰x—{cœ¨Pk@ˆf¡Ÿªð +,ãp[ÊkaÂÔ6…TTðÉïÑEÙBõç<ˆ ÆH7ó ¢K䆹G†ÙcÞz#z(Û½}üIÓ4 jZû`¿íˆ©R©7hZ©¬` ˜F÷üßä¦ÜûˆiY]:³Ø8³hló26uu_=OËýTâyZÂ=ß|Å&z±¤e^®;6µUhËý»z»ÒÇS°TLÃY¥äOÜÖÚiñ¶7•‰"_¦Œf†$ØÕ‹Ê…ö7Z*¦ÏÜýL…Nhoç/¯ÐÔª?k¤ŽúÅ +ú¨§òô©cÓb;3K‹ë_!¯(bŽÇôŒ¾5Ó’ãdEeKÀ4â™ûÚΔšJŽz’‰¶Cø5]tê@;G™ƒì°€£l™zúܶ›1vôܹÊ#è{ +ÿõ­Ž +õ+ι·èñ!t„!î !Æ!³üÙ>AÈ2ÿWöŸÑ¯MêËHCMAnk¢ˆ¥—¥ÐàÚ«‹_˜Ø( Î”ûQ +÷îv/³ÙDKmÉ]RJ?Š•©LlÐ@gÊ~”H¦5®®Õ5Ñ£zÕêQÿ¥zÎ&ÊC—‹©p/ðNV>š§•kq®Ê{n¦NlD4¤ ÝEaû›HküµËÁÿXbá˜6ŽC7Ž­ëÆ ƒ•²¡=ºOôa¸xg_…ÇšÕñ0ÔŽrã-ÖTǵ¿ì;ÑÛcÓÁ\Ĥ’9ðéÿá£nüoZ¾¡¶¶HRÑèELÚzkƒ‹Ùˆƒ¥bñÌ}m¼Ò³—iv¢ˆ‰ð¬¬”³í-˜1 ±Î¬ý4‰®œŠ«,ÅIž2•¡_ŠÐYˆà¿'>¶¶BW0lDˆIÃBommÑÑ©&Z¦ÏÜ×v&nmô5¯l»ø ޶Љ[[ôµi È/ößrôÄ>R˜u|hUd)ÝzÅÔžÎë{ûªÄŽÑ€Ætñ^P™CZ)CúˆJ„ÊšŸ”•øÍÜ‚õÐm]ý`ßeâa]Å€º®Æ&L£p'Š˜,¡è­ëj¤Š‘¹J-ÓˆgîkýXWcëÛºŠ˜ì¡è­ëjti]W' ±Î¬×Ê Z 5θq‚ÎPj_ñõoÑA­tö-‘Ãí°ÍÐ-î ×Ò_ä´@ÝÚe—zü`¿6šOŒkçgSvM1óª©k0x ¶0,Óˆgîq„[·Òm@XÑO0å˜1À¶d2ugb /À„{tUHO¦I´tûÀ€dÎ/]ög”|☯3².z6ÑCÏîí•yª¦ئfžÅ¥z±„–õïÑá8Ø¢˜®=%Šª€êZIs¦+c‹œ–€i¸3ëµµÒÊ6ú¦˜Š zƒVÚÊ£X¦ÏÜýL¶í’©?ܾ¢Ë=Û— ¡«î-ºÝþɺdžX׆ßQk9éþ ý®Ì$iýž,«Ý,oü÷!~|]k´é.˜§ÎW¹I±£‰Òd³[KŒ©w绊hçkuмãçb€”ÇüeåÏ«kó˜€åÿ[f;Ï|Ü,c›ŽELè>üä×5gès(Ø(±à×ÅWD €ÖO;Hn‰ø»]%åô{Aó+QäïÅ_°1sŠœ¼1Éõ9uB4¯Ð §sM~µoÊ]Ô€9.È:w-š‡ù¹& +X–F5rݲh®—w›6ŠA,Ì7‡íÞj”û äë\ôÑÜÞ*tšC@ïKÚÙ‡’…J2vÕB Õ½b5ýê×Újöž§—õcX¹‹rÚWZÃrJÃþŒÏ‘wÿþî¿XÊÀuXNYÊ;TZMs(Ê×v%Ô+M6v#¦€ÞŠò‘¾‡R^%÷&2QÀ&©Çu)ëCi“Noi`31ˆ•6î "Ü%Ülòzœ@¹J8¸ÄJ÷[twpŸnkLCH}ãà¿1žY¤¹É£40ĹÁM-šÛô´™€DÙ2];˦X·gá9w¢ˆ‰£·Jv « a1c@cY¯ûÎþ$´ì¼"k ÒbÍN~öpûò.¹º[²ÿi“ÀM”Ó^â}…íc|S{¿¹¿Ú¯}\Ͱ %rÙÊ0í5ZR2ÔìV0ˆxæ¾Ö À&EÌÛ›6Å´Á™ U%+ÛXN "ž¹Ç™Ò^žíH4:h×~¥(ö«`+ÚI«i4pëhiŸ¬4¯£ s´-Nþ“ÉCŒV6¡Ñ"ˆUyk€µCoÜGKBjueáä?Û=8ûbFy´tk­ì©R©É§ç $>†Ú™täJ¯è÷f4CðÞš¡^ù”kzà!a"´ +°Ã;‰\‡ÚgD6à_â¿å¸ÖÄ(Ô±­³½˜T\› + Þ ÔÑЂۻ/X*¦ÏÜ×úB8P9¦Ü§zíéŠiï‡÷…)øSÝh[ÓR1ˆxæ>Ï4'†ääI´Ë+¦Óœ æ†XÆóL3 Ö™u¼Z:Ô¦½Z8&éoDqrÐ?ÎÌaŠE´žFaêPtÿ2.÷ ]†h_]ôÑ6¬ÖÚ+":óŽäÿúÇe_=矿ù¯ßÿûúƒÔ¸’¡Ð^ÕÔþ«)¬Ÿæ;ðûýëoÿööï¿ÿû럿iOTß±ÚÒ9ij=.<ÔT< ß]ˆé!Üi[xóh©r\ÚJ~z·’²ÉwÕØÑJé5 ]©µØì{7 v˜¼¶±=• &çQÅÒ±Ú¶Wó!F9.¡Îk¨Å¯¦>gkqa˜V¢£!¤”:j‰Á?þ­ãz"UÛhu–Žf½Œb1KdWl m9DF ½v\.¸_µ±l¶¦íYŒÒÊbÅ–”NÀ˜ |®œjœh1Áö+3ÔQ,£){?æDg“äßž‡ïÆF~AÇ b£ç§°¹Äñ˜Tæ¾æ¸S‡¬K.¬äQtyyAÝ«Òíúœ®5 yùl}”A +JÖÕ¶ñŒ¶D'a“)nûèóã¾—Pô?­ŸËz–aâ2luBÿ×N-?Í«‡Ðy"ª³ZI;JÃóxFBsvqØ’ŠøÌhl}ô° ¡ÝÐ÷ÿ”—I²¬© …·âdÐ7ãšyäˆÚ†kÿSê «"=»ï<’$ g;_ (kQC&›Ð »ÌZå ÿ÷û"]-4VñçÜ;ÄŽGÅÃG–‚*…‡f¹ÖRa–½ÙÌåˆ9•s°žS¬¬J c(™1”f§Ê¥à0BtÛˆlŽÈÛ†ÞÊÎU cðaG>¢P.6fo’VùA&­­}pÈsuïÀåé@(©p ¤´½ ´·PÒ5^Ò÷^ÒÙÚk(í•„o ¤zxAõ )Ç/m=(ÝZ!Ä B9!É Bq›!¥â¡uŠ‚Ð¨„T|/ÍÍEw tÙÐÓ7Út +ÜL¥ÙCÄo ¤:{Aè.ý^ÎШ¿€°âè +Âj@XrY(T·}&T}›¾7û—­ŠÎÅ!`¡6„´3¦X BVØ©y¬ZÎèsqš#‚*+¦8)ÈÆ¼K)®:(¨˜XìuùÓ +G„ü÷ùg«áF`EéäÌ›2¡ÂÄ|Æ»]‹¬›Ú]õy h&¹ëþ¾jž3hw‘Órq¦~«cPeNð…3_ˆ¥ hL…ÐØµ +S">MÁÓ7™Ì™‚à„ÄôbÎ È îJ'ªž4\zž4z5OÖ=il:tg«*ilBH>PÓ.ÔÔOþ‚šJ¶Ý½A½õ{;UA ¦Lw4E@£Ïtäö¼jUúU”®'_Fïé—bÞ…«ª·íW]V#Ä^/û #•Ëj@¬¯µ€¬–.«)ÈZ¶š¹‡±Í–¥öËjhž°m}¬ÖÉ‚årZGq×^/§u Í\ž²tæ±.þÎ`”ñ%*|Ýeòà òjç6©„¾®V>õ:ÔV¡%¤/O´(¡IwˆËµ¥ÒK ]™~¥3"æÔ¿öŒº´ïì¹^6)ª‘kéô%·möGmˆTñ;à><þkPs«üŒŽP j4Ù]ñˆbócS·’í6ó—5ƒU~Ûò©®Ãvž%ÍZtI©W&ÍéZÝu' Ĩ‘¸Ã|+F¹Ö¶­¬„fgS¨8ÛÈD×çB§›wßçÒê;›ïô®önÚçÚD˜µè*ñrOÌû"¼)ÈÚÓçÚThŸKkÑçò»úܲÆÑÄ>ÕË®^ms!À‰[åÓæR¢P¹ù=m®­imuÝZiu©¦É]¶Õå¸N—ʼMn_O£KiG£Ë¡9.%"Výþ•×êÕQR"”‹‚z3OAÖ]2tg« +]:…l”ú—‚8Íž~¥q¶2ÐÝù½›c Qa í3ò¸ûŒ‚Ö#bèA÷í…ùS"}7bx“e*zyb÷à ±LJÛ½´Ã»×+urWOë),h(ñ-Vgk‹4Vt±Q–[ Ò’À{-îr C Œ+ýÓª¬‚„¼ã©X?Td¤ìXq,=’üÊ+»§òÛ~êhÍŸsÀceU‰½Òÿ”ÃoU%µÍ€t.[v­$–#e+@áíkÅWÕ^>«G/FŠ/èE`¾ ×ÄЭÅ3ݘY¼o¥3fæ £×dÑ kÞr¡·àW-彈}®{öR|^öÚø({M„ {ÝZa/ö)3<z厽P+¦qÁè|98 _¤â |M1øªêáËUæà{%_ÁePcT›ÝÙª +_›PEª1›9EùTúóY›€_im~í­ßÛyüªú ~Σøí¿»±,íS|·uÚe*8é¥.t ¡žI†ÆtÿôVÉe¶Uàƒ†ÖÔ|ïrU½QÑÖ#"í2*F•w6Æ•듊/èùZ;ˆ:Qq£/F5'6FÅZ•+” +t~5j#—xµ©¨ŽË¨Èuó—Q)?Þ¤vš£ LÊêv)Ý»(\*­Ôq)ÐwìRä!r¼ïÜxªê=Ú?õ‹G÷­¼?O%Åf@w´ªzÓæPý†|ÛâÂóuS¡f-ª Þ¬—7ímß[yoªúƒ7s0Þü£$3 æšÖÀŠV«R ÷—a Ö‘¦<Ãh7æR¥.É·=­¶9׉Ci-*íAÈG•X‘oËX#f ¿â5 BE­L&w+‘&@?eéÌô3Rá‘)MÓ¾ÔzÈŒƒ}á4蕱¯àH­þPGÙÈèiБ–ö—UìåQ¨½¬.&Qã†.åuîTôVýs¥ {mì]¾$VÀF]I¾ƒ 5µrÖZµÆ|öÕrE[¨LV +O:5ƒ2à¿–mRu0¤¢o“}Áì}71¼ìŠx)2 ?è´P#(ßQæÉˆÃ&H3N“Š€û7ÌjÎ×ïÄ~iü!Ò̲Ëý?™§âôŠ£ºÌhñïÿö±uþ/L)úà‹(¿ÂÇËÝ:ü•;–Ó&½™Þ«¢(*J(¦¥›Uµ;CE«z}®zb·(}ÄÖ(àxÑÏÞYÅ;6—Šú+ÏRíÏ=ŠèH鸳ÄótóúÔîËÜ@Uº +E—.%Ô,J*7€[/V€¦Ó÷#W¥¯3 í+¡¦Ô¾¬Å®t5»-õf5™³ÕVòžeU5±ý§ŠÉ(±ô”KærIxw;ƒ¨Êtðt‚§i©2@{–‚*ÓÔ¾±U¦·V¦³¯)œeF¶õµì‹Öòtµ¯k;@ž{ž²9¤Å{…*ÃÔú?Ê«$I¶Ü†]¥OP¡yXûîkô¿ÿÖ ÄQ™—w(¥E‚ x×L*Œ~ 5%r_D (Ép8‹ÇõÅ“"RJ&‹à«tì²/t= ³WË=A);-S¸T Y¾TˆÃ½Ö¡HÔ2ƒä-¶©¡!Ø1×ì=h¹$Ô ¼&Ò7*¡×pºF GµQÏÈ;~Ó7ª…àá:\®W¾}•–;@\5¦v¬ï¾š¡ÿ“Q-2Ðqõq´]äo…]½vÉטЫí¾S ým§Òx<Ú>Ñ^¶·´¬Í +ï!E3wI¾ö EQô¶Ä¢:’€…ÓŠòGnõbän™@…¯0Ô_çfXŒ{vB§;×wÂbŒ€ÞJB +A"ú"z¿®d®û á)ÈLAÝLJ¢!½ùA+œr;h)—’ô9Tó&É\â[Ìž-&€JØ +‡t=N¡U 0 +oÆš1{äç,xÖÈ Ç{'ù»û1¨çVSO=ãy¦’…¯,vk¢\òœ@™]F(–•,h|ozÚJúrv`Nܳ(gmŒÎÒ¨Wzr$õiÌðÒcŸ©N¹Á´{ï%-YYî'hÖ£T9- ¬@¢û ˜"­3À¹ª’rnb: s-)Ÿ˜3í BÐЗšˆÐ—þfëËðdíK‡†¾¤T|ö¥K|èˇ¡å[_>(÷%½û£/ݳ}ù[_W?ûÒsõËãB_:ô—}Ùá ¬/»ëKþP²¡/‰p·/Ñ ‡ê´†ìTê`ÂìPª_™&4¥$|Æ +ª w°½JÒʃ€m{Öκ¤LJ=(Ø[„ƒ»G§ä…(‰„ßGlŒñ·3;†tÕ¾’ÎÚÉßF͉g±wíùq/‹å´è{%C#ÿ%;‘ÿîÇÿ®}òßÐÈIEä¿U#òßÇa¨Ãnލð¿c=Ju>¤î(M®ãi€þS¿4@G³Œ+ ®”%åöÄà +íâ5ô— pVD¦s;…ˆœ½xP‡Ò¯²ª÷ÆZÎY¤E§JÇš ïnv¨»ÙÞßl…7[jÀÚI¢ /ß{ ïã0ÔÇa7GT +¿i~µü~âKáA}N¢ŸPöö”²‚²¿Ò+o‹e7ôweÕ-“ÿnÕé^ªýXÎâ–IK_?¨-“âÚ.©JÔvIwÔVI»µº5†&ŸßW·Ñà}ÐÇ|ê&©“×úURÅ{d·JªxµUrÑú‚©…¬»õPÕ¨_%Y¼ÃYñ¸WWIUi ›«ä ÌVIÕy ¶Jª­¢Jè*ùYŸàSÝŠ«$£.ÅÎýg’„»9¢Ülž+ÎÒƒWh¶› h‡Êγí–c»ù|~y]´ÿ†þ²Ýñ_Û­|Úœ€bÌ&ö šº@û¾g1PêAÙÿë7‚¥³hGeê5õ@ÛÌJJ¡ßÀ—Zéã„7[ ®QvugñÙµbÌ´¡É$2yEG7Mu òâF]:e†`É8÷¶ŸþDu‘HgÂ"•Ýë•áZja‡oT64R¹ƒ.ŸT¶ïäû†øïÛ +£&_(ìjâ¾>h#JÏl¡ìƒÂý¡0¬Æ— V^)lèï(\›Û`ÿÕ³£ðµ}µØaüST”™Mq8mhs •^ ¯HEKdK¥+Z_™x9©%P°5Ý%›QZŒâ¿wmxéÁZr&q§³²„Myû¼Š¤,¦ÒZ‰ïí`i?¸[âÌ7›3ŸgØÆ‚kÛH÷q¨E’ÀJ]èžzÒ^™ ·–qÏöž¦„;Jùãì[>¯O¯ ÁÐÛŽŒÓtUz:Ÿk¶ÝRZÏŘû£ñQî\ùZ]‘’Ô÷½[Öxl U¢2 +w{rªÖ]² P¬‹æÔ8 @ËäJLèÑ~îEÕ0“EJ¹îZáSÁvJáÙ€§í’ÊÃdaï/hM½Ž¸±)£0!’œ”Jq”þuWN¿¿öäºRZjò®òÇ› ‹ú?Ú¨:mW!¡.mÞo4Ä$gY¨ú5‘ W¨XߨÕMÕ®n©µ°Z4dVH¸ÚÝtÚÈÓº®rn« gÕD…{ņtàøhÕÆ…‡ÙQŸ½Õçˈ¹•`cÞš½Š7¨Kæ~Ãi½ÅC x‚Šâ¹”9Ås)sЇ”áÅó93Ås93ÅnE5¹¨D×pEñI¨X{Ïå×)^<+ŠïeųLúb~uTjÀÁ¸œ x0á‹vsDÙPõKª?õLqQL¬xuï³h±!ÚÂF€È +r´'_‹×ÐßIN;‹;Ùígl°µn¬6i¨“ÅûÖAÁÆw]Zt»BS`…{Ïê’H÷îYã> yÍbNÙ²6Ð +3?Ð\µp^“0brüК–zS^¹€6Ü$:ÆÍzò‘UòX±ž³¬nϽ¬„íì£]Ôm®D›.Âk•öœM?ˆ³KÆØa‡#†’¨Ùf´ò#.@¦ª¾í +OžÕ(¢[õ¿&2¸r­fpæ>?æÌCáÔ™;44&Å’¶§1=±1}І8ìæˆrcRõàQ× ´|6&b£½-žtT³¶ +räùD o méÐ_¶%-5¶b®O'Ðài$-ŽÔ0fè6é +¬q‡pEëSx„{'#@¥V>ŽNzàçŠ\-Ý\ÓÚ“ºæßÒ- fþ@Q%Ú\f¨¼º†±Ï½pš=½mÕÐv¹©ÇidE ](¢\ íÚâ®O«HNc«ø³–1¯ª‹à£Äh1 +yÃ÷aÿOjD\brEF|!Ô§…¢ù³Z_K˜§‚i‹§Í'ÅeðÔs¨K¯)¾‡î`ÿ¦ÊàШ òè  OÖU>C}vsDEP|Œìg ûâ»(ÚOÇÈžg ´A­kƒ+é—×Em0ô—Ú°ˆª ÓkÃÄmütÖ)%ì”n¶ ÅéD1˜]Ôô‹„€Ù ®ÎÐ=æý(Öž ‘P"ñ ¼á°â~ï8Gv´‡3†FÎÌŸþ…3ô­—/ò}Cü÷íÆˆ +WÐC_¸‚šÙLÝeËE6Á•þpÙWƃ¼*rÅÐ_n”Éqå_½8®ÌNɤµÓÈûã-оÊV¥Ú•QrT‚æY5(aè,bUM•Ÿ–I—[¼`x°p<~!} rK[Jݺ<ÖºHo6L/÷@KšIXÏ/¾º9Ÿ­–~£b$ìlúÛ°³yݩ˲rw¶3æf“m…w6ùŽík„à˜.Vw_;“|ÿ+ìk@­u_£wÂÊnÇ þ2 +é¶D %ím ý +K˜î—wa#£MÎòÂöœå…í¹—6G ·°¥ …ü2㳯r'—žÎ~舴µ:ž‹ ŒCã£E”|­5nýÉ©of"¡Æ»Ui‚ÖÞNÖçU/Š ¯÷Ö2¹DÜñ^ª[ÌŒ`9Ç#ÞµÚ©…çÞ¶Krü¤ìý 5õ:>~ÉbDì\]Œ¦TJh‚£$Ñ‘‘ô‘i ´Bj06WC²jÈ)è¹,ѺAFÿÏee†bÿӮޮ£?uÈ(¡j²‹yÐ5ѳ­€Í„–=–ôÀ.´þ +«z—1%¬$¡©1KÈm߃ R"öØy/ņ´ÅFÍ9,ÔuÈ$Úe×ø }×ç^t§”n 6}Ô…õw8LC:öO@ñ‰²Î{ÿ~ðÕÅëKÎ å<€¶ËÝ|î¸1Á„ò¢Í:ßq3L(švÔP BW«ãáiÐf6•©‹VtY— + Z: Å—x Cd‹VBº¡†r:»tÔd÷qo˜ Qãd–JëÛAÑeÑÒççÞL«Ú¼‘ÞCnX¥¯{¶ ËæS:²k¶Ô +ZÉ^ê×ä†JL®‚ÎL_&´£ÛêCä RþG“ $vîÛ,{[w\îacÇ?(=ò÷ƒ2™3òCÿ9hÏÜ’çÞÿp^åH–ì6Ð×)úšà.¦âKŽB[L[ºÃïû»J,,¬–bBÞt‹2D‡¢8`,G;l—ôJÏQ¾8Ú#—€®žf‰…?€/¢9Ê®¡Ê„öe7DÜëâ¹°Úà茯N³FŽºü:Ž:ÔqÔà8Ê>-Ë òåMµSÉ¿ÌQL›£?sz8Êÿ=­ßÚÁÍ¢†YP¼ÈŒXA‚øÑÜ1–]2&y*šK³­„è’kºî +Ï\SÑÚÌöaB§¹:qA2á²Öu.O[¯;4¶8“®û¢ hùmi[Ï}®È²åZÃdöÔ\Âuýäz^&`Évƒ…ºݹß÷u8w}×Lõ¸ßÀAcðøiûìØØ’Á¿½:g®]왯/âÆ/nQÅ/z©tŸlù‹T>ÛÝÍK|o‘Yo˜µ—xØìÕÚ_‘”Ö–‡÷Ó"z.»ºR×k¡Ë°xSä§Å¶…îïÏH(!OèÜ´ ®suJ ÿw…nlŸÿ{8T,d·šã6e ~©?Á¡îŒÌúæÐ.CS¾±}Šõ—ÝI³â:÷NëHdÉ‘¦DOJ¤Õç!l[èÂ* „‡uAG_Ú$b¹$M4º¶z G œ‹Ý3–†} môi*€»¬†²î» ºžàºÈéÐá8 ñf(S¢* +×Ú mrsF¡Ã@Ón&j®µNÉë€ÍËÛðØuZØ +vÒY¬êÝßÿ wÅÿ—<È2{t™°‚’Eœ0ŠJÑ:øò)¿·OVtëízßxë•Ç~Õõ §©^ÏÛz‘[¯8µÌ±®:øôÜö3c»’½)Ps=ã2ñ>Y„‹KÀ-,ãê4µX=U¥£8]}ÅÎV6úÄæ^”Z|.^¯4\}Ylâ¤N¥Ö¬YK ã!õH¸¼x#­ë…Vø#Š'MÒÄÃ×2oºÈ•Þ¬RʆNvz)…H¸Íש…ݵ™o[Ut–¶/Ðs𯉗“¡o˜!Ô½¹ÅJG†–™«¶üµš¡ÕúÜ•#[ë5ŠhÂR »ØÂ¸¥ÿšÃO.LÞ Wß ‡;Ù¸<:Ù8Ô‘–ó‹%-GÙàv™{BPxÄT£pÜKbì‚p( +ç›×Eôׄƒ†õ]WŸ[:yü §0_òwCC.ÝÆüs‘ï›À2æÁMx˜üÔ¨Ån c¹Ó+–ùJW¹1góKs=±m<\ e¿j]¶æ¹¿–ÚÚ”ß3 ©݈”'6_ÆCkÝÀªNΠ#ÎäŒÃ+D>,vgžd{ÅŸ‹º1•ЊÆÿ‘–X¯ùS/ïS°=Öcq}ì¡ÁÉ–'Ì£ù@+59çNN­”j˜WéɽWéA½JQ ·y©ôÔÄ+@ÚÛà£RlºP)]±'ÓN¥ß¼*¢¿¦Ò »ôoãÑ(¬.&~q#ëKÐ7Ô!+?CK#cK£YÕŽ¤e³]­ºK½ˆWéÆÔ³N<1_å<7%=¸/ëyö)êÆ|:ù6«_Å­QÑ»JçU¾¢ÌÌZË+v ¢íªèûaý¥ŠbSHßõÝîŒÚ×01b: Û²y(ï1xzórÓZ†{Á!öøés®ë´| ñ›PZei_Ÿ |3t>Þû40Œ#¯{`c¸ÃL]ÃQYC‚£±§}à\¯ïO0^:8À²ˆ–K¤%Vf8G¨(A÷±'dk`Ï®2qsj-ÚDWVׄ9L¡ %€¥yÇI“¶}Ç}Á¤v ç$' +çàÞì{v³Poµq¹—xÜ弃Ÿ¼‹]ÖIñÜ{Áa”wûïÇEô+»’H&}`¥ýÀÊenÃFþÅÂÁ˜϶x*šDýh-³ð4•m;Û;FqâÒ‰ZîEÅ ¡ºJ*!°bDhŸØLà¿Ë§ùÂKPCÉhb£`hc¾‰YƒÝ«åögûðT¸¶ +šJEQ—7#^YUÙL'XHFé¹(lìDˆË¢˜L1d®ús0`?–_¤ßecð2‰]€o Qs Ô²¡è«‚fûb(^x yP~.·§ý\àjÓ‹M¾447„U¥JüÓJC“Ú>7$A'ÄN‰ú@øïj‰ª…âÁm?±EòPôOðì8_Aæ4¨•]ÛÚw`}ÈåØQ8Éè W,H?õZX«òóú#3‹ vQ›ŒŠJAüëÃ`éÓmÅ;"I+ï;6¦×±øô“ºÔÝ<à·yS×VÊÆYZ{/KlR%k>Ý»€6¥„Ͻ‹uâtç:q²—¥è'ýìçhÇ>âdŸ¨¼ŠâÌM)¸•‰8­D';ÇÇözEî²7Nû·ä^”½,ñ7)=Yê}YeÉÙ™Zu'K|aZ;ÚßU0?šo”g~=‚,yBF¥qóί†“:bT‘µ'Itø”7ÛIÙ¬Ç<|u¨“ä9!ÐâùÚ£1#QcìpÞzä97^Ú•)OD~ÆŒb´é層ÙU”W׊…ÔªøHò\ÓKïÉ—u%£—ä·yãò˜NW·¯rÙÀØ‚höx*Äóû…~þ׈óë/üÝö;‘˜ÔÏØÃ¿HéÁhÕ\âÙcÂCXeÓÐÄ1ºëc”KÎ>®ŠÝíºïnBÿþÜÏUžà¸Œ¿áï ÓVßÏŸÖws8_í{\†ëõ=jíOTxjß®ãääùlHÞsÅh +•G…e¤ÑvT܉}©ÎŒÖ“ÍSýõ_Å U[Ù¬sɾú%hdžE‚®Y–Þ%Û§Á¯S3Twó F“úa ¥1«ºVð±säÚ mò†´·™w¬.¢Œ¶‚wìtõŠÚ”}/|oØUÐ>÷½ì @±¥j¨½h©m¸Òà‡ ôá‡Ͻú)ÄR+{ð/†4 (MÌò…ªq–ì”Tú‹É>¥0T ¹ä¡?„?¡¹C³ûXñùü6ìd³Æ+pvêfÐyÄA?……LU¼bOR>€›‰¹Åh.µaSK–t¹LFØÙÆ•5F{éíÚtcõ§ouÅ}ß@^RK¨µEÔ%W´T3[éM 옲‹Ô9L ?ÛÞ-Ð!“êYæ¸mòo†¹E\|È +Ä-kXã<([ä¹}p4f.‹ßûÜ×ÂÞçp¿÷kø½ï ~éJÜlÅ;‹R„ů^ˤSèÚ>Xüú+vañ£kñ{¿.¢×â÷miÚ‚{yöZWœúô)8 |œ…é[qá%&÷âDKu |¥ÐDQø"ŒÎš³Šœ'õ¤!¨¶E©S¯X0æu._r&½^júBl"y* 2´ó”Ñ‘AdÓ6@’ +|UèPÞ®gQGw4Y›Ï”ù¼‚kÑÐóÅÔ]Q6jê™ús¸É¢¸¯Õ94Öêà¾VþA§ZõÉ‚z×+ñ-m‚žÀ¢AÌ«^˜¶¨W»b3¯.³^õz?.¢W½°Þ±bCööÑ|áG#[ÍUú[ùøüËoÿüÇŸÿôóßÛÈÇVˆ¬~ôÊ«$É–^¥.ðÓ4ëÞõª¬ë?ï¿-G€€xQmY¹ÊçFH ŽƒŠ¾\{§÷†¼<®Gþ“uïI,Zç-«7ZôÔ®ÌÍkM›ú"½g²u}»Ë¡g™pgòïñÕ'Ÿ¶°÷¥3Uè,Í'>¨s—w«»Yÿ‹¶Øaï¹tn›ê»>üÞ"ú|4Õ-Ấ³‘ô:0¿#ÊÖ¥Œy!ëu}æx±â÷—ì•}£p_;ô|]±wZÍ_½²ç.{•Ÿ¡#f(¾‡~Sö𠽨<^‘=d¡A÷Í^/½-&Ä–œºsë}¿z +å¿×‡¿…<Ûó•åä-#œ)Új>xæPþ•ž’sòxãk†C»H(€°ñ‘Çp“XŸè*ÚÐ*ìÂ8èr-Ð<ÅT„m{ tc*Ϙú¸jbh&~¨O‹tàB‹‰-ââºÙ•)„VóׇÿË¿wݺ¢NR‰¡>jûÜgÈ®òÙ4·|æ-_¢ÏZr3Æ‹‹ +œÈo‚ÐÅâkBšòõ´¯?ü½5ù·ë2 ©)Ê ¡ózr<å€òP¦´e5Ìò¹áDi*n‚Ü¡:ÝÙÜ4AHøEñ¼8':wV ©Š¸»Ž@à§B§/ÃçÈ£ª˜¯^M¯Z2rè!3NPýT‡Ÿ¶z¹¢lÚbï9;ç‘Cùw»=LkWNêvÄyW墨ª -Mªæv:킵?ïl{õzž0°¸«RIÔ!Âè·Imς؆Ð`ƒŠ—íÐQg"ÏS7Ô6¸^6ÏÞúÁÍó°ØÏiqO§œ>#ú{/=K{†‚é5 ”c®›IÉœgY›h§¢t‘‚¶hY BDмn¬ìšî^»@¿®%È„JçÚ1Üš­™ MUåëô!]ª­iBå}FÒSÖÇ'„'HKíøã|òzÔfv‚ü~»¯gݰþq]¬Sb¥u1­_œ¿_©Üu1©ßXu¸}i Ìck&»Ôöã@H«6~-ª$ï ¼èû´ñ=Ú#gYåd½’b+l£šÊ,¢lsZ¦²ñ‚Ћ֨¥Ë ç?-j:¡,V¬^¼ÊrËSô&+xæP^|Õ7 ˜VÙö0å®inoÌô¿¤ÌÅL‹ffÛ"ÃhËs´B\;Kv"âÚC¢µÛiÑ„Ò(Ž",¿ûJP>íôA4:ü™wË׃…ë¸\gê¶MBÌ÷¸Ÿ{sÈ%»’þY ÞÁ§nðGˆöxÓ V\¸+ÚµE‘qàÑ4i—ÞÌ}*EQj„ÊÖôj·©‘#%¡}*uWp¶ »©\þZ]QS̬;Ú¥âç&üÍŸ($m$EaÃ3h–”[yHÕdÿª[ÙÒÒéjC-®6.[®6ä©ìmÁöfËŠ ”¬>ÝÛM»½§‹4†ô/“R[Ì))úgþÒì÷…2C_TI’¯> å•gÊ'«xFÔ[Ÿ6Ë‹øú)>4UhŽºÎ:ƒæCyõÊã¬\;ëq®ïݽ&ÎE§&.f›í);}È”5Çv}‘B«…Ò_dÇ’Ó^dG] éþ, æ_ÐðäŒæ_4®2™áƒrî« e>Íèÿþ™e4·X;Bø£žåB´eÐÂ?–5ï2÷ú0ô^òÛ ¢ÕGzaæ‚N gêÏŠNÂs)žŒž/‹¯ƒˆWǨ%Ÿën MDh\½`š-ôrjÊ­Ã/Ô´åU£¤4Uë`1ú×aàF½óÁkuJë,¬4„åR‹Rµ¥Ê‰„Îg%pCÙ{H;¡¥ŒÛ„Ðv<"Mû™]/à‘B(ß"êRûÿ¨´°ÒÉx ]ý¯\QÒ: î銴4Êå<Á0fX *—¨ÂËÁ$õ]_^4¥VËãà08+%+÷êó‘ñÓ‰%´lìÞ:ÑRô^Gzre¶íseµ/Ž?Í\» G°køÕÔ”cŒÛŠ‚RƒQ¨FÑc÷L((¡iŒ­ ÙYi2?]ÀPûÚırÞw+dØ9Ò¾*2Uŵ<Ñ“'gX÷Ž=­é½ÚJE24dížü@g­mK‘8èÚK~¤ÒœÀêCïÌhKY›c=v¤uÀ²SуÛ?`9~Ïò¡,'Á€?(–lzpíÛQàuhÒ +W©2ôNЊí³Pm;ͺZ•ãhÎÛÒ`òq.Ú•/»”!rBh2ʘ)Fýª«>NM4Y†¢- ´ ¡"£èHi0zÙEšWÒÓ©|Š-•²éÖSɽ€ ºwºiÌ©qèÒ7ÎÍZåyn¶.#&µ*•ÓR¿ÆªçûbmN‘­#tRT͸(Ùj›Ÿeôt½B…›Alz~râSl¼&6Þ ï…‰óÂzÚ§ÁÄè‹Øx:™Øxæ¸ Ò›Ø}Os,½‹ ÕøSlÖ·Q/Ä&dÍN.obC¹ü›Js"¿‰ eíCl|¾ÄÄÆ¡?›þµØt'6¥¶Óg bC]ôÍý0v¥»+ˆ°Sý@i˜í¶/TBíËQl€¢ß´!@™ÓfŽ45Ú~à6¢¥½áKõ (¿¾ãÒì“M§¦„Ú,×ãbŪõ›þ•¡Ez¬Š ÐN»M”QgKI —Ãǹ¢Ã”ÑrÃU =Ý¿úKOw¼:ÊmíéŽ «u}èŒEt.:OœÐփ͚ßà—‘Í ŒY½=Ø­®tõI³“#ªlF*1¡òƒ¡>•æÅyô=,‘3p¹E.ãY.?G¤†¹lè¸<ª¼™ÍÕ±¹UÒÞ:À¨M…6ÝÚAÑȳ‡]tPÝÀƒ84€ŽœÛ‡é¢g¬Ê¸œZÁ^( ®Ó™8i>ÊÌÀø[ðûÎ ^$qîn㬗ù1;@U\7㘚À>uG.gtßlÉt)ëlÎ>leÅĹ¹Ô;WÖ¢’+sÊreìÅvÿÒšfiŒ&,¶¤Ï’QmIäî¥%}îìö÷aKùOišD®Ð’Xq?Ÿ7¨Ø’†þ %kCµ%ÿS³›êüŠª¤»KXQ/z²gȮµ¢|‰¶‰Œ‡+ÜT]„&™úÁˉõ›I‰q]ŠTÍ; +½M ík•Ç€ “3}mÏ{g(­õ܆×URp¶½Jô—¨ºÏªM¦è!} –F»¡Ø'J»ÝÉt¦LtÌð-ÝYÓÌ@ ~ÇçʉmÁŽv»³–s²åø¤'gj‡mÝ ZQXµ-½&gï&tÂÅ8Ó³„=Bß} |\‹»À?ë#Éɽµ€rãµÕµ¦‡ïoÊ«äZ’‡¹2äÓ.ŹMh7ºü¿(qUäôË9Ô¡ð™ +Š$ pô4¸”RýÕöÇ|ÕѬѸ¾­¹ò±Ú66u”)vXù¦Û[‡nœy‚]È‚BÄÎ-rjU>6ËLwÁì\_܆Š-nš5IÂ(rÓfË’CzòÎ×7¸’à¯yÔ~ ƉRÊ¡lƒ“É?*mú(×ä@è»wLÕï}.šèª]_ðÊüb£ I,¿r@sOóôøï:Яþ\/"PP®c¡ «®ËØ×þyFÒ…AÒ툃>Õr5 ) &£œwc,›êëܳøôµvÉš©÷÷²HW;ÓUË}ÞUÖ¥êºð¥c·¶"°´]Ú:?(ÁÔWœõ©}ÑVä6µWìø¢­È ¡œ+âj¹yqE,ÄU^|׉_R^â:HU^âÚéE™âöE\ÑL¦ÜCÄÕ5Þ‰kŒqEã‰3—¸JQ\aʆZÖV˜h«H¶h«Ÿów‡¢ºl ð‰æhkÜÝ‚µQ<Ø›Ð;9¢loBGÕ²Î[›o}žWl‚½;ö&\ú}¹(»†þ n ÃX ïÛ7Œ3¥ƒ½œÖ}wëEJÀ×yb‹ì‚D@zÕîЗ}P8ó*(Óú¡’f!0/ ‡¡ž/tÌ1Z8—Ià^ŽßjÄÍ5EWZí¤6@añ—hëÂ.GV biô±&£þ\“\ÊaÑJÁèJå¤;¡íŠMX)f—‚ñt]óD¼š±'\:,Îz·£yÛ{!f}ŠìVýŸ… ËîòÍ—'º3–'Q!^ž¨>Oë¢c¼<ùZÚòj©ËТ Y R¶¥FŠ ¯-%ay¢k`y±áåÉ—Ò]EÃòTþ–'L$úÚüH›\Ć + æµKlb´ñTð 6¡hvrDYl¨”ðx×~J©Y ·g¶+ÒqH¥ †>Ï+¹Z‡þ"5h*>ª¬·j…<Þ)‰cj,Ì&T/¹îXøqJôšæJ.I-Ä11/­¼B'Hry ¬Œ”ÂzHïYÒ¤"†¢mRG&q2 =\¼z®ñÔ‹ÛÜZÑè]mê[~ºÐ@¹¯hPÿ$ðFØ+“šFþÇX©X<—%Ó¥@ࣇlÖrÁ]ìÿ)SLW\§®ær}ÓB¬ô×,Ž‚f›{Än¹£ÅçÅ‹r‡É…Üé6Êr‡òBîÄ‚ˆÜ¹V8¹s­prçZarG¼Zùò“@äNDPä›¶³Kí°"AíÄÞɰTBíD²å¾®ªv®8.­X1“ifP»+Ú¤ÂQÛ¡¾fvrDEíPIX«Ë.…JZXya­æ+¶`>Õ²½ó“ú¾\Ô;CÑ»…ÔMï¦×»c˜ÚøtÖ:Ï«ÊÜÞ:£øÝDaýAG5;ÏØó¶>y¶—,J*‘L†F.,°Ÿ^‹È…õÁìò»k\XL\ïü÷Œ ˆÚÅ…ßu â¡[ä•çÅ……Ͼ¹Ï§^d˜¼ E2ÌOùBØküéfu'$u€È‚ùé_X`‘6<Ül‡ø*Ù‰•éGí¾L¿¯}ÝÍ€‹E™æ=N?6Lÿ¸RKÅé7ô‡é¯ÉMÿ_µ¸Õ"÷² W²13÷ Tnjޓ§n–l̈³pìt¯S€beÌèIKu|´TD ä¹A3c P3{ËccF‰Ur¦„ê˜Ù%€Ú˜é…Ërc–(‚®´‡¤øÛo½8ðôéÏ!ÔzR‚USƒØ5Jä]5Ó¯B,U“)(ŸKÔaËŸÙžUbµ‰gkì ñ¬‘¡Ü]ÄþWUZN‘ènOо#-5mÓt€žºU¬œN,ci©eXuvmrÞÅŽqõIý{l“Âà^“ÿ>£{‘ Še¤ß=êlMEÔªˆ§ßC7’»9\˜Ü[ èQŒ¶:EkiŽb@ÂGC tµ:®ŠãkëÑš+k=Ãó—ú³®þÚêágŒ/8¡àŹ<Ÿž;‹\Ù*¦ç†ê·ÌųNà †¡å®ÍÆE£7˜Öën%» S ’•zí×/Uô ¡Ø©€žrÿ¦YÊHî¤Nˆ’=Ú9‹lµ‡ÄŠ(3ð!tQÿöë7p¼¡»Ûv<²W´¢ü•]jw2}å÷¸ƒŽO¾¿Ø±Ç•Ÿz}Ñe$h~ŒVÔÑ¿X‘I…œž!õ[n:ùèg£ñ‹hÚÞ¯/*¾¨'_(èßN=J9›}îéym0A±» œ¤wÖ3ý ´Ñê!ÇîÇmГÀ¼ür·Â ýmPðm?(à J‡ÜãH”9A@2·ž›L-‘¤€æ‡ˆ;ÁL=xÞêF; +4óy‡‚m|€Jz˜ù[ º«(^BÊ+áÕ˜§Ú.–Þ]vžî\´k¤!è:û%PhÃÙTh¨S‚©&TƃÐrÖ°+¶a<±DÛÆh/ÄQBg-Ç‹‡:f(êAòJÅY«Üçâ€˹°ûm·*§%y% Þ-©ÍZ´üIW¥äLnŠ…8KÍ{_»=Eç3ÐUëèêªè¢ -ßèJ·ûFWªÐ›®×uÔà -ßèz¡LWªÇ‹®®>‰ü®4Ä/ºúþr·@W‡þHWlµ0Y»#ë¨ÛìË5‘é6-‘p{Òkšì†ÿQt “÷^ÇU„bö»ÌÍÚÞŸJ”£øG¯/ÐþÉŒµ’÷±xßVÎKPÔ¹Ñ…Û ƒGn{fÈ!ôts/.Ú&œ®í鬔¦B1´µ¼+ç5£zæg]))!Õ‰”°šý} ¿Eê¾èN†ÕY´‰Þ”EJÄ/úá·/ê¿h'GT(A[O:ÖÇÍ9 Ó$!œ kt³§a i<#°‘7']÷]²†þȬ2¢)#Lô&èÈ5q(ý*«ÈÏÚP—‡;™äýÛ4 §/Ó¿h¥ô_4ÔÑNލLØóeHBÞÓ@ïý= ¨÷{Àÿ/Ó W‹Ó`èoÓ0;óPÝ<,¼äd!¹²‚Ò<`ë«­²‚š™Úd5Ù:eí±¬(î\¼Ù²Î#"µwY²l Ú£v¬¬ f€&[AMéV"YAMêfYHêQé²Ñ$«¥‰çHAåCºƒA–¶–KÏõãL”d£C¶){€>²€š#£6(ÑîÖ‡ãиN¤k‘H¯"E²ù²»sÐNmÝdžè×ònšñWìÿþ+vZD™`~<Ü€QÁæµ1d‰ž§;ç7WÈ/Šƒ¡?R¬£_F±òÞÑú3»l kô¶Ñ±Ê#ã}Þj€ÓÙWÞø—}¥Xo_Ï´‹_sC×?U ´1·£ÜíÑ•á™Ñ¨ÄEØ‘á^úF».v ”A—»p%î/9a¤]nxÝ#,1Cã4 gúŽ–Iöцº²¹“QŠonWo·}}ÑÆÄÑPÿE;9¢2ëhßËmûî¹$:^˜—Û¦>½Ü6ÀùeÔånqÔ ýmÔkÛkÃõ¿Jv£Îþ±[BlRÍfw¢ mnY³“kX’H¤È‚þ¹€Ž¼egd!m%·$PwCš’Ôµ]H'b…\{í«mÔ–!¨û"­Ú© ¹(6Mª9Ð!äºòu£MÈÕI«_" ¹Ü%°g¹Ü… N`rÑæXé±rö‰…ºÓÚ²:ƒªƒ7ôø&|º§Q¯+cmi¨üU$?Çz5ásuD[Ò`0Á\N†j&¦Lro\I«µ0s%sj¬ÿ@ËÜçÂÜËëêÎ-ŸŽ å]w§’Ó,vn,ê ¡|•«=å*d%ÃÈßòhN½öë÷JV e‘¼#]b×~äڴͶ$Ç4aÉä}åw6u€ s•虀ê¾B*]Úfå@©–Ú‹£ÒýÉæªvXµ®C»[bíÔî^ËÛÕHCÞ É¶¡A4Ôÿ\ü—mÎ-¼!VmS8W½gÈAŸš¯Z·p5‹õe°s}Å,_]Ë7vâîÚ­bã3:OT±Æ–§FÃÁP1yÕDŦ[_MÅ\NÅ\ÂN,Ü圊 0§=¢x¢b¯Ø)¯r$¹nšû}‘¸ó3”G +ì*Ù.[7P9qͤ>¿Hbãï@Κh|Äòð@°ìQ  (Æžñ#v X:P ÔýàAÌ$Þø¥R7¯aáº/‡¶âËݼvQSË^ºç5Åò¾ü¹Xª «Ü4ãmù£ê»/ò4m*ý1)ˆ¡a¦Ã€HÁnJ•@‹µÏf¦Xxú”Û–kïȴט¶¤ùáUeË#³£çc{̃-2‹ÝÒLŸÝ¤(¿½<(bh·AZÂ%ݾ—'H+JŸ7¿Ý‡C‡îÆ,gWð­Ì²‰fóô÷B«¯ iK½òm›3»š˜/ðk6—Ç‹ACPÖMÆèÖšeØ8ÏKܯxIG°%Ž`›$;‚í´Ej£©–M„|ÿûyܨÕno©»Q,Òݰ”Õû2 iFÃJs./ `ØÝëÚ*Ô–EzGˆÕ» ó-«ÒlY‚EmÙë>÷ (ÇÅT;½„ZzWD,3?àv…Œ«HÓ†^ƒ…øO-é¦Úï…éà·’ טºx5Ç…ÖFl&ù&i¤%ÒØª¬¥ia¨áà6éùYá3NÄvMƒ <éyŽ©ë!§«³vw¬^ãÎÝ »Üœkîeÿ/6 ;6º0.ÂË\Ö¬®$X#fkAPÇÕͽÆ̰µ§˜qÓft°Ú*5Ù0–ág˜!Áp˜qܨè`oT©½Q-{)cªâ f˜ª0^”õަfØL?yœÃ #ýAÌè@ÅŒn1cn¼ªÎõåÝe¹ÑÿÒà”3!®j†QTµ ÞÑfkv<5+uÞ˜±ÜéGMªÔ—”qÍ”KÏ’²Ú*57Ë·ÖoÄ[à}mGIùmñè*µ7ªe/å’êÀ†pA+*ªejtA×*aæœÉ‚”6?þ¼*Îâ +€h¤)²¥²ÃáD\e~8Ú.ðJ¬í¬d¡Œ5zx]šÙ"â¶ñ„¥+gaÇmW²Ñ›NëÙ¹#_ùJɃ}²•Rh”œª%ÞL¼[)APóŽC/Ui÷œ9îÙ}¯7Ÿ£gûýÊû˜’!* ¥i3 +Þ˜t@º‘ÐYÆïëv_ÔŒ;u«âõ¬d åÃØL*å!f@7¢ê+J@º1ÏFXÎ-€’-š•Ml„µ†´€ÁË|yà|- Ùç(Mf¿J±ײ]¢wž·5n‡•==»èSºñAÏ>{¡ï0ØY_i¦W/]ÚYæÛ¼œà^â•øC±õ r +Þ¶?âƒù¢€ làvRð/©¡E!jRl2 @fþ.²51!*×9žÃ"«ëyO´ªJ9Ä&&ú®^{y&¬§— +ÅæE3&+ ñI˧ [ÀklÃZ½i\Ï.|ùiÖ+mfkr¶_•i‡ØlÚ‘Î×ÏǨ¢}¸µARl4·§6ì÷ÍÔC$Þzø`k«T™5JÚéë*…5°¦ø2 ™—Ø• ø¾Ãƒ”LìƒýŽÞq'¸ï$â®C€td‚~ßÈÄl™°ªJ&ĦI…¹ÜàŸñÒ }ÑŠ—F`$Ѓ,+“çÞ É£!p°úlöOòn'Ú—¯¯Ÿ>þþúøøõµ>~þŒSxüó_é®oÖ"è3®Úg>½¬càßz9þzñ²Áï¸ø…W0íóï7Ü*½ãe±õζåìý'Àu¾ì× +endstream endobj 990 0 obj <>/Border[0 0 0]/OC 992 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 991 0 obj <> endobj 992 0 obj <> endobj 986 0 obj [993 0 R] endobj 987 0 obj <>stream +H‰´—[«%·…ßϯèÇøÁšÖ]cˆgœà‰ƒsÞÃp°Læ@&ÿ>¥Ö¥–TÚ{öKlŽÖ®*•º?­–¾{~zóãÛãÍû·çñÝ»·ÇÓy”ÿ?ÿúôæùù<ôñüË“WÉꜯúß.õõWÖÊ;K=¿>ýî÷?=øáÏï¯OúïÿþüÏןÿûÕóGªûµÓ”´?žßÝ üþ=uñýhKc[?ý‘þøíxrN6%3ýw¼^cSú a:>=ùd•9Ïó–ʹŸ–ZŸžþñô·ÿ{}{ådZŠ>>Ò¿?”ì›ã˜òG3Š—´¢™ÔµsÆ©´Ï¦7‘OŽ Æk¤I™ç¥H·ÇaÍTÍù(æè‘yüÂkuYÿ‚ë‚øeu¥ì–;Y{¾0j ™ÊЛ¿~xùׇ_>¾ù†ÄÞ!ß~ÛðúðúHÿÊ«°§:véj׸˜My0V+GôzPQ£œS>0»k/OÞ$å“ö#AãŠrîXXBìKðáTÁho殃Qg˜UÔF/ ]û¬tZ"AãŠrî»]»ÞµKô)SO];‚!…YE­÷‚ÙÜ5…«œ–Hи¢œûn×vtíO•(ÓÎ]{ú{í´Ñ dC×.+›f5®(ç¾ÛµçgMÛÊj[Lƒ6ÛyÆk Ññ,.5TÔNe1åiqvרëT6¨±SàF½ÍÌÐ3îUÛöê_~þÏX‚=û´¢G¹çIŸ•èÊŽI^Eë²/ÜOªóÚ ƒ<ƒ:s,½ÜŒ¯j‹×AQ×AC¥×EâMÙ Þå;ñôóHý•7žØ*ñ´§/û´!ßïd“_ãg4Zål f‰Z¡äp%³š”ŽžJÒ QÆG¯oh=›ìT§hbËgT£¢‰%æÙi=ûeÛg_¾V¦>×yM¤/9V¼zÍ1Þjsÿ]ûïªU!EŠ…i6ÒÜýÒ£¤‚¶“v9^”Ò9  ¢fµ‘ÝÙ]£ÉNKPìÉW”s¿,=zè.Û«'Љuþ®¢æ”‹Ž¸Ä쮕žèom˜"YãŠrî—ewÂsÒIeg‚ÅU6VÙðœ4½³`B˜"YãŠrîµ'xN:ÒÈL‹bi¬rá)iG{Ö3E²Æå̵£á±XhnOɸ³ +Z*¹ó,UÙ[ºVÞm[Sþ†HÖ ¢œ{íéTε†N²÷Ð%yU˜Z¹„òlN2rð1CèU–™*ÌVig\˜íÔáeôesg¸lt§?€ +þêð2˜g§Clúìaèøb¦^'u¸}ÜèWnh¸Vq¬;ƒyv®@ö‰gtüÒk>bÑs !›rdHYG2ÚeË 5Û@Äl;-‡@:VY‘ qE9waõX‘ue¡©žv. WpÄ$W‘uéT´‡ééŒZ•e¦—íãræÞÁȦ~‹r–ïw. +µñd]»Yw¶˜×m•¯—H™ß¿Ä~[Y‹ÈùâèÔB?’Ã9§Òu‰ö.o†ø,l‰ñ•‚­jl½`zkTÖµ¡®‚FKŽ¡4uåQù\g:™_Ós kP ç{‡Ug¨·Éì/g*h6+bbtÐG/õnJOÀM1CÃZ0º:0ýõ•ÎÌÕKTL›òèLìx#ÕÄ[›×Ù{4RnŸ>*»¡±«ý•%ñËë¶Š¤hßT‘Lb¼¬²%“ÛH*Ùö=-)‚¬¢æUå1bv×Ê›ÍXë×’³^ovÒµ¹Z¡Ý@ ñ]B!ÐÝ®Dc^ר¢¦Z#F²ÖÊ-SÖ>xs&:¥4ÒA%û7u³×-ºŽ{VELlßÿ Á~B÷*xÁ†[÷˜‹Ö‹;.NH °:e¢aŒÌ”|b¼$ù–gz:õľmøäæ ý™/ã‘… ãàœƒKÐ^=Ó .9b@ãZz¥»)•k°Í +"ƒÖ+ˆäÖz¡‰e XØÐöêÌõ†@ÿ˜súNËÌaW…sNñ²Š ×/_ü5’™ôËßßø‚ó¤të__öÄ¡¢FÞ€SvÈÐG\BN¶Ø£÷Êö0âPQ³¥øÜDJ³=ö¸œrqHÒƒÜT²¼þö·ïg˜ï)ŒOEt“ă9΃èÞúRÛ¸»Z?ß7Å8Î÷Ïkª5’” 4f5àÌ_âö+-_O8×u1Èüfì@x^y€0€!†5¨µÂ °¼ ¬€Õ^AÞÀ¦ó@Ú}ãrÁ° Uøá/«H8æM !ÆË*÷’þ +¶ïœá‰CEŸL*†ÒZM×À-GX –œu±MZd}s“mm3+—Önº6Û&G *ʹÛ¤³œ¯©d½¸¼ j°´JØü ÂfN÷êl’^ïîÑKGš¾Ì>=µ£P[ëtìÛл©ÒãuçnŠ—UZ¼Ûú²ÊŽÞHnã\;¤_Ãñ˜G½êà" +Â> «I½»¬1àœû€n¦õMA$kPQÎý"åØ å²B²CvYcÆ¡'Ø tS ®~é8rhPQÎ}õäØ , àÓ2Àݰ!Öß#6š1eä § ²‰ñ²Š$vĦŠ$ãe•›Ä&>.]ãÀG"Às¯¦é „ËJ*Ùö}Žtö×Õ1»ŠšW9”Ìî1ûa #YãŠrîÑ1P²Êúú4/ …Ðvæu­t£Ë1ÚР+-“­”vw ÜÀ§Í|aÃjxÌ]½ž)õzÃð9eJSÂH™/ÉÄxYå™ÞðÙê"3óù ܪ#W6d‚£Ž@¼A6 î9"AãŠrîÕQ;™`§(rd‚or$k­Ü2åÊ'x¨°÷}ڌӮK>>æ¨Þñ‰Xuó%ØÄxYEî—ÓÂÉÄúåœàoñ½ç3Ô5¶|N÷ªŸ¯Q°ˆ ÎþÝg¯*jVé€ÎS…É9{ \HN¹Ø&5iûçžr¨¨ÙâUs+)mö€6âr²…Lô ö¾Or¼¸À†Ìô &> ™i>=/@榊0¥)^V‘|b¼¬r“ÕÜNI× ¶#ð¸‘2Ü`*à““±­²©OöÊ’S.æ‰|²]2\ Uü¦V*Ÿl”=†.$§\)/ö¾O›±ÿÒ*?æŸAïîPCþ9ÅË*’ê´»s­ñ@iÚݹ–] )¥Æw(z›ÛÒ ÕÀ +d•±}™Ã7‡ŠÚÙ¬ ³»69*D²ÆåÜ‹©(¯ý1™êPQÓêLËùøŒ—Éš¬*„ߨ>•A|ž³½ï¿¾X@Fä ]»6:JR4X+…Mµ|WËíå¦'±‚ÒìÃõ6=Õí7Gí<Ó“¨Ž=f5¨â JÅû*ŽUï«<²ZõôTs4'=¨UOOÔ–ˆ…“‚/Ò„CÊ&ba©ˆ$ }oc³L,,”‘&(ª)ÄÂ[)*úÞ†[q +’6=?¹çãmžªûNk¹ÜÕújDu‰f®ñY¢™Ëðïùìî¤f¨zFÓR¬J®sÔÛó²¶Ó!±—žŸ¢Íç+h1"¬*¦“5Ïk~SmžKe­Ÿ5°¤Ö±42O„Mµ|W a†&Þò¥Ïõ¯¡éGSÒ(ög‡âŒá‡âqE("(ªHŸÿ„bÊÅ´GÐ=¨ù Åþ‹âXØ ŠCP(®Ù 8ƒbJŠ¢²vxEŠ6…äQÍ ˜¶Å£iôì³d=¢xüv¦§Š©„€¬zŠ2Ë ßˆ3’3–3†sQÜÈ ºX=Õm.q¨âåx_å ×¼Ïëù—ÕkÞÅ I/ç–]®iíPñGQÙ3ûÏ©÷òØv–¦‘¢QEßÛXh]ãë+ •-ôúäf×´4²P„ jù®–X²RÉ +J žµ)xb÷ó…ØÜðÝ’Œ!ùjNås«ŠÕ(EóTÖñÕQšÏÓÄøÌ€Ï|UÁ>Ë8K.ßÛ&õb5ãbÎÍAlnƒNæ‹4Ᲊ؎ÄÄ‚#E£Š¾÷?÷*±¹ybIyM 67C쨖ïú]Í)ö±Ü¤eùÄÙê%öˆ€ØöF앤ý)·A&öT·A&”ã}&œöBÏÜrdu»À‹¦íÓÒ81óUî÷I„ò¹ê휷´þ¯}ž å|×ïwTzox/%÷~L‰…:}†ó–v¯¦Ÿ×yø"¡Ír¦åX6m“K$«—FÚ´±ÚÔ…’Y]AÜ€ÙŒUòˆ€Øë7-»fµìŠ:âSåxkâÈú@&ÇøÌwG-‡ÜžøK\¸-Ñ;U©àO쓯 +¯¤ ×”M;€<‘ÐPÑ÷¶¾ºv™ê@–ášòh,EØf!ÓÌz)±O*(gcµý1LÛo¾Ú/ë®È¬fuWdB9ÞW!‹¹3ؘ›Û"÷„òpî£Eýl넞¦)’é³Wvž!(ÿ\1PÅ73æYÊÄUù§¨¬¥ÛCôRZÓæ¹b  oiü³ëÕïÚ’pc¤ý«EÝ&‰Dvâ{ŸI UãŸû.ÚpW$>›¾U~ "2ƒ|gM*¾>ðÉ1>ó_½æ‰¤sŽPôé‰ÛÒ€o_Ò㔺ösÅ@@!ßÒX(ï˜&ð%m0®–2öÁtÌ0ŸPÂ73.Ê;€T°Î<Æjùcž:Žß\´îÑ<%êú”çj¬â}•ŸåGÑ.ª0±éóß=¶ö¿ÒZÖ°T‘DØæ§å¼¥)§¥Hh(绳­Ç÷›Um¶¢²¶¶fnÏ¢)Ë¥Hh¨è{×íº>ûÏ æÌõ é“˜½Ülµli ¤ëm¶:Ò«Ç‚£ÍV¢:™Þ Š3.﫽*Òç¿ûm­ÑDQs4;<¨UO´ÚðYÐLšPOÙ´?`¸ }oc¼?`¸ ™4¡^½TÙÓ|)l +¨å»7–AÒMWêñ6sùG¶ GÞk]7"œv„ÊdV9Æg¾;í¹Ý/6;žÅcÏOÑvô´»ÎV ÓÚê5ß¾6Õ¥²ÖfeÎ^š6UDBCEßÛ˜j_h0€öŒš±*œµ²)š£¡êA­ŒZûp¦¤áìÏn¼š1œCWÜã"ä._çÆRÅpÎ;)k dz<íÈ!( W „l€‚2¥HQY;<¢) )Zò@Šf€ì €ì?0@ïAÍO@¦-òhz±*,¿ÍV©bº!,«žƒnˆ–A¦;(gdµXNãÞOótFóm*Ñ$û žz¾¥æ vÛVΔ´Çi½b Ì*¦Ó?ûŽ€<iJš€LÙ„ü<§)l +¨å»šƒ›a'X3z±ªa€¬¿9dÞ0¼HQ[ªx_…&Ôƒ|•#«CýÉ?óþ©ií¥aš"‰‹ö7Vïh¶ ¥i/E¤hTÎw5¦ÚØøNÊTEeS½&»¼¦¥iSE¤hTÑ÷6¦š÷9äÐn¾ÆDÛÖK#Ñ)©°&4VµAxn_ç§û;˜0µÔFÏsÍ}p òWü.ÿ¡ø ÊŒÏU^Çû*Âýz³Êæyƒ'éÀ]ý¾½Íz±ši¶¥æ´1ʲ ‚ G6o|Ý (l +TËwýç^¨lŒÒFß…1†Üi5´1ÊöiylVDŠF}ïïšúëZ.´6¤µ rn´)­ÄÃÃûz+½§¸ÙýÄ}±òóü’„)Gú|;o _ÅÃKñA•?àm¸V‘Zq"Rcµ©kÿÄöiiž×}F¸_f%•µò¹ê팜½´ß×0‡#¡¡¢ïýÏ­©ãp/(}Ê´÷¯ÄB•9oi÷jú&Éë=­Hh³œiiá]¦AÙÁ«dá×{,*û‚·ì†Œ-çx«¢È ßËñ¾Ê;°ÝiäÚEÀ^¸`š¡*ü!`És/ÒCÊ&`—ÅJØPËwµž»P%Ãl‘ R¡JΊHh³œiiQ%‹ •Ì€¸ŒÕöÇäõzÏÅN*wÌÊÏÎsU¤Ïw°sµ°‘€·˜KEùëzP +î[¤&ܬÍX-z £T?Ûº$ÀMEe-}ú4Á©_Ay늀B¾¥1־ȴn°RQYK÷VÐKiM늀B¾¥–-‚€%3 4CÕX„öüÑaÝ[={XŸï¬Šãƒ*[Ž÷Uþ@øš7-’Îy­"L预ڶðTÐFÚ@’R¶ÓPgÀzB ßÌØ+ Cg¤ Õ"°°Ò…|K ,Y©d„f¬–?F²ö›ÃÖwÉÊÏë^&Æg®È"èÑ&PùRŽôùïö¥Ø1ìÞH~àzPÃèg¥Ï‘Ö7•µí“Ê¥o¢)Ÿ¥Hh¨è{«½ÿúöTV+*kûgkæ^-š2\Š„†Š¾·EørØøaH×Û0v½aû…©è1Lž†Œ­Êtö¤"}¾ÃVÅû*`[£¬cŒZjÕ-à…§5ÒIÊ&x§¿"l ¨å»Ãela®€Œ4Q½NÁ.K‘ÐPÑ÷6ØŠi´E׃z¼aûö£é‚^m´Öb#ª‰ÿ™ãùäŸùÎç¹EóV=£É*V¥‚3×þŸœµ³‰mõüí@_AêŒaU1¬^ó›j]*ký‹·.Î^šöQDBCEßÛY£a‹7>Ñ«õaëG*SZTö¿Ü€5ÿËÑîN{\äÍœéåÈ ÿД#BÓ±ø æ'Bû,¡Cba7„Aºb dCè ¡)E„ŠÊÚá MJ‘Ð’'T4ChÚ"B±«RáÑ8›®R¥™©Ñ³#qÒê3Ý‘9"U¦£uÆìŽèGBOÜïI-¸É‹±zªû=7_„â0Ÿl‘0裤Eè<ÆgÀzšù¦Ç?û¦À&ŽnDšGÙÄ&ŽnŠ„†Š¾·e“¬€TÚôDa¬j+ðl¿¹gÞ0ÊT~vNª"}¾g™©÷U<­Ty'7ïóZOØ^óOtzi$:?írMkñâ ¢²«¶ÏYï†lIKÓÞŠHѨ¢ïmL¶¿º‚2YQÙd¯OnvMKÓ&‹HѨ¢ïmA&Ç •¼Uíäôæ²e_|¤}—³™Õ¦ø)Çâ/m§LCQ ~PÅÆ_ljò’ËÞßÍqÏ©/ËZïê¬öâIT©@ªý éÓÒ5vÜ{’ýK×»ç-í_ï³.ŽIÊù®ÿÜjzÃ{)÷‡ý‚;$öù[9oi÷j®9ÃQ$i³œiù]Çþõ‚ã*âjwÛñ3 þ§ÔFa¦7õùzß|¸ìý•í +ø>b¿³Í9+FøUT'ϳDN>ƒÌÏ»TO,ýïáPYÛ§Ó­%,7,ýï­ Î µ¸ß?y I°Ü—¯‹ÊÚ1}mäâ}¥ÿ½uŸË*Õ¢§±‚]~ïÑqW³GEU{T*Ø=*»W);]I*‰ +2™Þ˜ÜÖ4£¨#5à“© ò9òÐ$[ÿÜ“ù?ãÕ®[nóû +í`§ø&Oj—zƒÕLæÒMüÿA&yf¤R¢é ÙhñÍtÒ´¯÷!MûzŠâ}˜‡ã>⪖ÆmS8ÀL 㦖Êm°1Ì|Å]'™ +iÄfIÀt/nÚ¨¬ÃÄѪŠÂЕ‡Â敇†"Í÷6±×þñE&q³¹YyóíCYÎã¥ê[:Ñ­ ñíeËTmý†3 ˆÉ«…«í}ËÕi_e–†™Ç3ösËÉÞ·\£tŠ"&µ»ÒFÞ·\ýh ÁŒóuF}®ä‚"§4Šõ1Ñ}\m/D¿ì‹î&¡%`æñŒ½çÄ/Dçdõ£Î'„ÀP\Ä/DŽW/w1_¼~‹1g9$$¡¡Hºt¿wúQý°BC»žcÍsYÚu@¡1[»~#Lå0y0"º–å(`wY߬7ËÙ¯kîʜ؀×÷È¥§(b2¶ájð2q^³4Ì<ž±Ç/“/÷›Ý<ÄdrÃÕ6àåPÖOóuFÙ”›¯G><@Æ”žq Mã6šˆ6ˆxýxÀ‹õ-£VŸaˆnl´ãrŽåôrÚðzÙí™É7ëoù@•,­$Bc7¡åžtíqOœºÆÈ’l¡(bîq•¡ü°Z°¥JÀÒ0óxÆ~9Ѹ”È„ðÜëá:Á¬>ÀŒv´[+ca¯ÖÀÂ^@‘½åŘtÃÞü–½N›ÔR÷¢ÅÁ/ÈöÓ‹Ø+¯¶Ÿ^v{aï¹þ-{×T]“!‡jñÐÉ_ õêý)}G¹˜\£§x\y´EŠ"&T˜ëäWïýÜÃ¥Ño‚aà ~Í&ÐÑŒ'zû†v+$vsŠ+ôW]Ç ™àc`TQ¨?åcU°*R;c7›N¨Ï–óUÃÀÆ{®ªC×áêñÆÒÎè_øÜ£êá9Ã;Mµ29S“ç÷9S+Ëm¥Ö­Ž2V0½’±î,µþÒŒZÅÀWÙnN¹¹Ôêqs€é­Ì ìæRKÇ;ÊvspHR¦}aÄ2`"ž,+IË™Ú( ^¶H[x(Ü~xÜ (Š˜%®¶òMmί`Æ€ù:£Žlª<\Hc@°©¶rú-Kx§±Åƒ²R-å¢IèsY"ÔŒ¾ËÊÓòËsý†›J[¡„¶bÌô ‚€Ì÷ 7nAgìçº!¾’¥§5±2ÌD rù£ƒãž,gì‘SN‡„ýFå.·ó÷·Œñþð¥rG´Í^ z/f ¥Ÿ£ \´pYƒW)ýt7 ø—¬ßbŒ2Ã̬è3µ…y\”*`ZͰŠ>»GKCoÁÒ0óxÆ9©€åE «.c”7ÌÔÞVã»é‚Ôµ4 <ž±Ïœô(:ü™®fú9ÁK‘Û¼5c|QG6)‰® 8Š2˜ÚdzGõÉ÷?ÿùAdOƒæÿøü?>ÿ÷Q…ÎÄÑE‹]hH‹¼·Ïß¿þöï?þþùß_ÿúüe +Z©qŽÙ•¡yÙûYŽ$ætWô«o§§O¡K5Ç)N£†³¸R ¶×¶™…žßœ|*ž‹qEÿê{rÐähÂF÷‘kxJ#ŽÓ ¾¸¹³?ÿÃ;ƒù´¥«Î¦º’¾ÌeŠ~-¶D=Ÿj¨Ùú×b} ¢Žmu´ÕÀíóEûgÏö:Ñ‹*­2zµÒXûR ¥&説ˆÔEé$ëÔŸ[jŒÖÏC/_]^$úwäµÄ¢&Å K^´ã ÙÚìd¿»-µJC6W¿‘¨¼æPúôVÚ–.¡4¶¼n­£t³u=† å[<èé.Ñð&,3¼5ÛÅyÃFFª¦†d$ð…bÚû–ê £.ò÷™=D›ï¯¡¤*t_• ­] +©q£r•X _-.Ž÷Q<ÿ0ÓÜßêRÒÈ´@¦—ýìè{(¹H“äCŒy >z—8vHâËu2JÅéìúƒRBº6[ÌPÕVüºG‰a2«ç"ÉGGsÎó¦ºÐÆØâDcï&š³¢`kléð(ç:Ǿð´{¾t ›)mØ"mmŽ/¤ÔŒ–:7Ü7Y‚x¸êt+ɇSfº„†Ò<£Då±aôK×Öă«\ŒQŽìŠ­ + ˜}ަ A½Kó¨NÄCÍz¼¤€åÇ”¡×€šŒIî ”¡Ûâï’LîÐfìüðuÖkwE9ç‡Ý~‰s…²]AêZýe‰¥­´¸±€T©Ðë"Œ¹Fmt”àÀÛ§;ŒlÛh0±MÆ_bAݸœ¨eÈ—\­‡Mù&VÅöj)ÕÍ/ ˵]u0uC-‡Ÿ] éG"Ž‹I§êÐw—œ/«Ž(º’˜f²LíÆ†VŠë¢ÿiFÔbµÞtŒ¢f¤õNßIEr挂§Ò&”|6º²µTè¿ÊÉå4ô©£4.ˆŽÔ (ضÚy¾¹¥Jðu­*BiÃW~\¡t&5«@çsx$œŒ^|d¢[\)ß=_!o”'4ÐV[GÚìWÊ÷,}t¢/’Cϲ_>SÞ2ÐzÕ&ÑXÔ»m”½¹"‡óʫˮÝnåoÀ: N©Ûy ÒþSW‘§×:ng­z.ÆB¡†òðñªÏ‹Æ +&úvà•j].@r8ø=„“uAÓÙ5”ŸÂdô¥§d1sÿ…E“gFc;€±q³Æ¸D!nýmêCƒ5ú[[]@áKÕ{IÑ1iÑ«mKê +b1ä +øî ª©>èöì[ÉÆ½jÉ®Ÿ$ ¸8SÍb½j„ T{OÞ=­î!ªR +šŠ‰cfPü-Y¦ ¨H. > ñÛ!éàŸÉkí‹ì‰-ëjjBW–X}xl majZÅùl§l@¥Õe åѬ×ÓµDh6¶vÏ ý‚ ê(<”ø$•й%Gm³Õ õá<¢û³Æi¡åMos€FpVz*à»ß¦Q…úØ=3¶}@òn ÷hëý ÚžÙÿ';ž^ÄV|ïîRps‹È]5,Mé½?¾Ÿz3œ)Ûƒ”%YÞ&ûnÓ’ƒ‘¬Ñ´ýhZ“¤øÄZ\$M0áª)ϧùW}äÀ ºT¦)ÒÔ±ìúŶ¶ÖñÅXD5/Ñ+Ó÷€VíËÀ¤×ÇVí]ÛÃÐŒ!v}ZYЏīÙez nÁ.& ’d]SÉš¼<–áõvL»µG'Xõ(7|Àqç¨iÅËßÕqŒ­–àÙ aX`JhL¤÷K¤4DŸ|Ù/ ¼Ý½_$[Ò2˜2v`ÖèêͲ¥Ñڮ̜Y 1¤µÎlÉmûj³™ŠoU\ì)Òú”ëéÚ—ÙÕß— «k/wWƒ¯Ðî·Ø¨-®Â¸]¬úRZ}|Èʽéã/Ð×½c¡„¨îOî§ž±ÓìÎîé®ÄéîgÕ\2zÈPÒ¸¢ï¬…ÆÖ‡Žy_ƒÔ r/å¾ÐkN–åï67–:Õ™ÈçzM½¾žÂF°xJïJ{5ðöÓ̾¸Bbñ÷ƒ&´SýâuÆz{¿çèýA·l‰Œ³l„¿ðÆß¹àQÇ߇qÆc^~îsªcgpöƒßŠc°ûþ©ÐŠÕ× ™çi;>F° „É‚k1„à(Ä5$3Ñ‚¢e3€ÿFé´ãÊPw¡ÇH4aÝ.’¢9¤b¸ÍB‹9MlcÓÇ¥Œ›Ž©´O§™ZÿŽb½¶8^!¼nª%ÿ±Æø”a§åFKÉm¢µî¨zê:í*|úþvp×Éœ£/ΜØ`’à>s€6l­çþZÚ‡lšã<¼âŠÿ#Ï +ŠêZäÕQ\»q‘ß¼sˆ6©.ñìΡTÅu‡-Qz¦û~µ;çŠb©®ñÅöDÁžñuÏî K»ËÍ3$¸f¿x-ÚíºÙ|àèÍnù,°ê¥ç*>W6.8 ’ÄŽØüû§×/Z'}2…éÁ@q:„W +unG³¦3Údêí@ëêžb¨[À¹‚n†ú×*§ºŒ˜jú!øFhÉi68Ð$5Ú£¨¡ +ÚÍÓu¹¡E +¥}(2…Ñ:ßÂß9ohE­óbžY)çk˜]Šž˜Ðfv’æI•rÞ³•ã6Q¹æ×Ä$äžÙDÑfv´D·µ´ù¶& ¶]¶ Ôœ¬1NÅÃrGt½¥÷5pœ-R­¢^%Gý5êËÁ6øbÙ6ÿ€vÜIåŽÝrÔ0†\ó" ©¶¬w:.ÝËÔ'G!D{ö2¥ÑD[ž Éò—78fÓËb sUCÛäbh÷lÛE &· =Í튚îæn²rÆÐb–þ†r¾ aX9nTËL®z[bßÄ9ìUápá¶ë‹ý—yLâ3±Ãÿæ3«¨`ÊXn˜¤QæÏ84øŽ +ÃJÁ5ÑhiÐ!6›†*PŒe¶*°èyšÃªØ›Hb=þq&¼ÿ« ²*u›'X‘ú!Wá‹pcÚÓ>ï< øPt%r6SÏI™Ò(fˆÓksæ.jBÒÊ®«†Ø DÛö×v|¬¡ÎAº£½TÚ“DápwdžŽÂ㎠êäNʃ‚ŠNM=_µsˆ ôÁÿ8¦4Ò4«âˆtì¨û¿þ¹ê> ÎÒÈ‚SPkÂy7e¡¿®·`Oѹ¯Ž·ýy½&;„0›èH'QÜ$³}•Òjp8•`lódPÆM–§óAStƒò@%7ÐÒ0@0{¶0­ ëúb 0‡§Dßo0‚{»ýJ¶}îv<Þ÷­¶Rú‡Ý”Aq·@#Rÿ¸ TÀ#ù(*[ï4<¨eì²°²{}í¬Äöì¬ÚŽâ³ÂÖŒÕ|ÓNc“>’@üÏßùd´:ä4B*WÎÉk¬4ÎÕBGce„ž…zT2µ÷8ÃÆ:üˆí7g¨j¦P–zQÃrîãc…Êpl­óeµ L4òhÆY†H­)Om®Lc×ý Mû|€]PIüAÝ3üíß ­Mu¢=»]ôær&G[ŽÏSЗ¨>‘e.ºõÿŸ$ÞÎ.ðçäØ>ΚÙï±1$åÔîx·GdÇÛþQanÒú“Âd—.½µ&PЩ¥¥0w—ž +ó@ uX8æñµCarªLÝ +S¹³§º;&çri³¥09Ã2&ðT˜{²O…©”#óí¡0jpõ¼¦R¹BëÝ +“œS<;KanÖ:æžÙ¡Ê­Qo…ɯéÒß[an§Â<,_ +ó—Â<ªt)ÌÍŸ§ÂÜþ +óðc+Ì \ +s§èT˜;§ÂdêÓ8%N%È2¥¥]a²üK¹.…¹iùT˜@Uºì¢—r] +“í:O”Sbî¤óB—Ä<,s/ScraD?.•‰!†òÑÔ¯1FÉòÐkÜA7¦X|†ÏŸ¹õÆo°ýhØÍVïó-dÙÔ›Œšµ识p™ýž“à>­ƒI'‹;‰HAYMÇï%^ÍqˆN +d´ü¨'Т‰ì 4PnŠœQÜeä²`ðž·øŠÐߺ]üžâ”ôAÉhÎy®d ÁmZÈ05Þ"œž-÷[ µše–…™ Z£?µ|À[Tày‰À +üÿ76S#Åv#g½&K(.Ïɶ ¡:8²h™)3ÙÚŸ}ý1‹¿Û¨5]¨&¹ØÉsÛS«ÞÖŒ×Cu4$žLFÔ-HöŒƒTµ|·]2·jœ=ž& Çñ{„ïÉšº´ÙDù‡Ô)Êh .ËѽáI?N ¬òä_yÏ©¨:ÄÈ*¶'Ž€.(8¾¼Yº™EŒÅ‹‚¶2³9y67Ñõébj±Ü½V(Ï@º«&,¯·z¤>v‘„Ìy×j\¥>èöá[UiÜK RVE?˜?å2»Øc¡wû6ˆÃPߦƊý)ßô§€ø%›~I©Ø˜ãwÇÜ^¤óT`²õ”ï!JÐÂGͶPØÌqôÙõÃyV»›<áC‰Rï +_zq Á‰"'cYNVîq”x8»½Ê +¾V[)»Ýi¹Ç|·;À(½–§”,w»3 IÁ©É]@Èb;”í…$X}i\ηÉ_jK«5”‡‡W^4‚Põ»]€ÛCªuA\]"+cüð{˜pk˨ÅÓ%ä§.mi)9j¹Žj‘â$: *Á9Ñx %ñˆŒk‰¦Ú}ßà¨MÓ•¦¿µ”¾x¦l7Ñ1iÑ9ÄvÓÄ&Çð)/—c½n§â\$ø^OSe‡aå¿$ø<•¼»jñÇf£qQ0b©npçõ;•Žï?²Ä…’¼ÑÔ„4¶¶ø Ì™2PŒØ£] ýú í,ã«= Ôû”?`­ÁËï^ÁïÊ£ªß ED“Ç=­Óx6˜Ð–¥Ìgc³G-¯³kîV¨åõ[Uª2ÐŒ%˜"ϲۿvŸµá¡q¥Öû…hbX öAC^žšF[ÃDm¢€FË#wŠFiÏìÖ5maôÔ*< ˜%»Ï†Þ„òÄ=Jvä@ÒfÆÌ´¶öÞu>×WY^î–÷¼­Ð‰í½ÚÆ´ôm,¢G‹³ŽšÔ¡fÁ¯Ë~“³®ï8¡s¶œ”ÿFPó4FÃØñ9ßßEFry, óQ¦ú› üUZš,´i ZjX¾Ò”JјòìïKð Öë+Âò ×ׇ@[‹õ‘f½„´øHsT‘åW-®V¡U7#Œ=Fë…YËÄp kU +¥à¾ðpŠ&ÞüU”óègØEî3ƒÍÙ3Û}óy±û(c´Ž½÷ˆÊxϹ–'„Ê´µ9Z®€AÖž×ÅE·§÷ÙY®3ì.í‘Âц#ÛŸ´lºD»0Þ™Aæ°š ÔÖËs%ÃÖ^N}¡çûXa“p¨¬ä2̘÷Ÿ‘p|­Å ³܌Ϡ+€ƒŸ ÒÕRGÍXq.’PÐ-nÌÉ«…Ô%Íï;º*Ê#_ß竵EM}‹Z¨ø¥Iž …Z‹~*bu÷Ug¥Ÿ”=cúk¿l!n·¢ ­øGaJ3Óík|Ša»Ú÷MXM/þ‰@ëk,åøÚ@£Ö÷*Š›fWÎ׎f?o‡ývL‰Ž¶2ÛKM¬:"3.Ö!¦§:ÜLÔdÜuT†V5Îíßu”*úý 6‘޲:+8!ºHÝÅÞ%9ÑÄz•FØRö}È-ް±ºü–j šðÜÕøÉ't<àzî´" KÇšëǘ‚&Kå¡° DòÏ ¥sq™•¡Ü >‹,•Kœ¢Õ—ibm‰Ó4d¢æ4³(kݵ%î¼Å¶•ëÆçPS)!/8óº4­Û’æ/ýÓñæY«¾g}lcs;ôo¢—þͰÖYac¨]ýfc“–ºáàþ>`F‹öã?ÿu4¶uxz"·lÊ‹5Q]M±¸ÑBžQNlG(l®0umo4$¤ãcÅHA|E›+f`@Q|êïy"¾È<›½×nƒ +£¦Ìh`ìhôÙì’¾zo ¥_TgÕV+ŠtϰNM¹bõÈ€®«ô<1¿¿å“Ó7 Škwi~«&Ÿ;*TAîÒÜ &¶X€ã + S•|ýXWøkPÖ•ÌÃz®ÈãtI£ßçéîé¡qAï4“ÁPÄ;?ÐËs?ÑáÅP”Rµç¬¾­ª¿ª Zšw£5X—õªP½GaGÈ-vªÒûlœÒ³}3Rò4kÝÉõ31Þ¬Ëbô GºÑyãº7RêÕJ|X­Ep-¦c_ž)±w޹¼LqÆÉ ”¸µkÎEóz¿¾õ+óA‡øu-¸vMþ—ÈåŠÙ×m ®…5øŽºî¶ÿé¨0 ä5PN‰Ÿ³IÝ}GùÃMõ}ü8½zcCu­Q°ÄÀ@}mª­÷ïEuØ*²¿Åè;¯è’2Ë©èÍ쥿=EÑË}ðísÖ9qþŽ«“ØFf¬w 5n‚úºÇ>Ïz]EÖ×›Ûçž`ã,ÎØ*Ž|±’m,Jh£ŒjWÉCóÒÑz\âSGÓú1ÂoµWôË–½lªÈQurÕïGG¦*?õCu[j£&֘׊úÚÆÙPfòwàÈ‹:[¥@‘¿Q“º·Ï5ÙaÕ][Ž&½ÿ¹Ò=)»¯vÒ;B9,Üç,™»ö‰Ë–ëë'˜Q>éb…Ån6ÞU˜aïŠÍîêÎtïN¼]òÍÈHΟíÖn²ðx×K¹ 1N×êÒ{z£ç‹Ú‘÷+ùï24ý^¼Û;§º8)ùù6zÎßå“iešã£?§'zfº#Ÿ™jJÙ×RžEw¬Ô>_Ìì~­÷è<½Ñó‹;òoÕg|—·6§³Ž¹;u×=öð©Æ4ø“]ÎcBËCCÆ,wžê^r¬õæ’º—ܼ֒S÷J.7GõUFmyǃûW=tÕá±ëÌŒ1’nUh¡º­G­Xþª‚l‡!©*x…ìŠþç}0ó°Ü )1+Û T(I~iÏ÷YM›³ïï\7Ê­Š’s:ïÀÍ2{%Ùq=]XžÞ³›•¦ú‰fxBƒÚü:ð£ßSáÏŸ~Ëá=m¨.;}FV•X1¸gtøSpmfÚn_ʰՙªµÖ;ãš.½U®<M‘R}ÐÆälwzàëXsæ×ÄëÓ-n÷KÂðʬº,ÉP¬– +h,¬3‡&2Ð"×©ÛæÕu´‹ wƒ±W‘C04ÕšrGç¹Q'EšŸ_R__õm¨áâAû’HQvž5ß•yК‘ª¡ì{±…¨ýÒ¯‘•üÒ¬kÒ÷€Kêó$’¶ +Û;\û Ÿû1Ò‹ŸºL1EåÿÍ“-•Õäy)C{=¾<š1#ésV_¶ÿÄ­1¶rët¿>†üÖéëì2DWÜež4Æë³sh¾¾Ö[Òõj9ù…Y¥Ü+‡–Lo|¯w!ËŽëÍ…&þˆ{Œ6ÍA²Yªµ€B9ðÃ.YjÉ=cBË ÍÌÞ¯Z2175§ë/¶;ÕDFþC˜r(OÍòŽ-P„2‡»-Ц*¶U¬uGu“4HP-KÕíàÝÈE4O‰§Ý‹ ,©ÞþðO ’Eì48o”ÖHжšó£ÿGG…ÝtôÞÍ,A1‡Íb5[©@ÑK¤±=”bŠ3ƒ|GÙKæ$ÓÏ‹ÐÚ±™Z ݬ ÷hφ‚Ö%]QÄyöའ^&̸}†|oK'" +•h݆2Úd]'>ë,ÁÄá-Ÿƒ>šëÊD×»„2‰ÀoÅ•r”"¬­Ú‰›š¢vX^)PƒGZ"¥»ø´›»À%_I6«€šf—¢LYÒà]Kå+d9|±üš¢ƒ Yç´WA/ò +$PMªñÈŠà•E™_ç5È *Ér‹sc æ]\®:ƒQøðu¿Ú’gàÝi$õñmàð¼-· .¸ºF‰kILø­ÚvKFÞ6cv½:ÔµäÑp•Å~mwOd‘ß=ÆÛã½÷e{Ë"åÖˆøôq7# +Wº&èúê,ÎE ½YwK3}KŸøèG@M‹Ñ·ä·qczyf¸¼½6䢵…¦±°3„뢼¡Ÿ®îë~ShĦÞkU-¢Yc ·» Æ`™ ]GÔòo)S‡R›M{×½kýµís…*.¸ZÆïŸ¦Ìf Ïkk6ΫÍÖåe^³U»œØR—«ÍXljÉ~ö +Þ6ñ +t½2)ŒŠC¨ Âà4(åú‰ò$úüÛâP|(£ @ëFø@˜À^혉ÇÇJûGÇ­AEH1J5•Ù‘š3ªÒ(ÓÒ«ji¡h¥ ç$ñîl640à¡5Aå7ÂS;¯ÃýMÓçã+p”ÒÓÑouÓxmÂÐçÙ—$ÞÌj"ÞIö}K‘÷œ¤¬ ±$E10ã\¢0xÑ ™9¹/4”=© ò'âFɧ¡sÈetæ˜ÌqxÃ`à3Y4ZêC@¤/Ä;&´ÔÄÓ‚ +F±põ±ë†Ðz·Â?~òTý¾ Q#ZÑk¨ƒnÆ´LþõÇ.“-а€&ãð’rH@“C¿.Y4Rd‚¾.Ùƒ~^Ò“‹=h•E » }â8ZšQ%È=Ñ Zl#¥6ÄöPr2Š 1…lS€u­`µ`‘ôôŽöø‚™˜åû-pƒ`Ƴê*ÔÛ…s÷)[–þ›Þ âPo€Âñ0(Ũ·kD‘Ø~‡áBwÄ. Üë1Ÿ‡c˜ÏÙqâ=¿«ëš½œRYÆföÈ2¹Ð ë”qe'¨z:!€–¸ã^‚æ4j´,G´Vq“÷Ä\3tÐ +i8pÝP•yÙžï¦Áô–5y‰bìǶ>€bÿ÷…®íK4`¤+jÄU?ÀrfT@ØuϽTS°Šûÿ)-(7¼MÔÑ>bî.Tjq,2ý.YËXA¢·š¼KÇö¶a¡£.Ëò°ÍÜÁÈ8±é¥i&‚±ˆoò£¶¶Rê2 +Þðíêòɢœ´@K7͈ꈣ<üEã”ëÚ"ì­d½øÇ¶üÕ¢8§ôIEgQCÓ¢ ¶_Q˳µ[ `ÂL©<\FÁ cæ…±4ð\¬Y µŽµÀÉɨLeY¿%&¾qŽ„z¸+QFAœJ<1¹ÑÚ*w5ôãÒýT½ehÅEQ®o×Dà ØôÒž¿ýçÓí ´/7WÂFhØ3kš×"ßÍCæš ‰§PÑjw(-<Òjp¬¤Ö÷Z¯¡Ÿ"Ó¸™¼A´Õ¼Hj-ÊØ$:¹³×(œ2³¨aŒfh‰2ßh–• ÿ5Liï$oP´Î¦gŒvS0– @GÎmÍóõ1 ØÚѦ|ë¡ +šði½÷‹eÄêƒ Û‰QZ2 ¡˜=“ ‡[:2v&a½Wyšå¬gV x4¸äuŠ‘€5‘Môb$CA=š ààËx/[S^ êõ6°¶±ÐÄ™#ho¹™¤›mK4Ó2¢˜¿àª·Å¼§('ðˆMüÀîoBt(]ñ© 1š’@pÉÄI·Ð8HlO¤Å÷u¾É‚×Ì¢zË‘Åú/ÅÙ he邟f¢M{tJÓ$u:œÏ-cQ×éBÿ¢ +°šGz«‚´«|£UóÊ™u«`¤c wu±*(ü["âó‚.™ŸCtÔ`­ Vh¾DŸ¥4ª)àÂZÔ2ê4a¡…KNJnº5ßZR½8«í%tN×èÅ4'þlåyF›æ£!×Z磎eý‹Xž 5>bÝð ”þÿuø×ÑÇóâ;ú]ÚPí£Y ÞPT·K°¤˜]‹¸–j–ÓÊÆÿþó¿ÿýÏÿ.sÁ i/òt-•÷Æl©ÈBVæÿyá¦ðWÒµè1:D§|Ñ$Õä’pg~œ6•kß½âPÊymú›—~ðHÒûƒÐHêZ l¥‰a|°ï+ÅK5Ns¹&ˆ¦0™h,NA¡$ß¹ðu™vP:Bê'À =Lщ¸)>¹½Û/œCõ"dˆn»?r¨|ŠëhÕkÅq‚ÚÚÍ’}ÿ¾ÞÀþ¬é- ´¿ß5¥ÒÍ¥ûuýþ•Ö§¾%¢_º2‰q—è¥/ô·w^*>:ò;†lÕU»^ðFˆj‹«÷²«'ëª&’Õ˜í»j¾ñèë²ñªÌ€üèÚ×…ªGI I FÆí «êN-rQÕPÄÞQ"¸_yg,TúˆQÙýÇÿT¡cÍ1ÈFæÃ[—ée hä Tgצ=¨Œe§°ÈOûpB¯ë÷y¢ŒôÆ3('¨ë“æ?JîKž#2ŒŸ?äßÏ`3½BͪÜ-м ³VýnT²X“e÷’Þh)ë¯/¯Cu7ûsÜniÌb/â¯ÜVåáïÕÅÐò¨•Ç¿uŠá/Œæžm4G•Åjíj3ÑÕ¶xKaÎxÆúÒˆY8Ûš)çõLž§Er Ev3§\ÀjÁJÁ†Y+¹÷:ûGXIðÏ#CƒíM…þã͹|Þê®øì—¯Xª‰WÐߤƒj³i®æ{í µ!k™v˱_À²æ»hø¦¤ÊÀxJ†¢ŒÄ2¢³jBúîm׈ž*EëÊÓäZzÊ–°‡!õŽj(èÆFCQ”LKGíïhŸ Ê†BFF ѸB~ÒÃΞݒ6Í7Èr#ºÜãÊ‹–Ë -ÕÅ{Ëîhy¥ˆ@ŠfÓ~¨rœËRh¨—þÏ €!_1=SÍÇhKw¢Žàÿ(¯vd[n¸å.ß"H|ÈÔCÛUʼ½ý§n9䩎#=õÁÅ€ø4Ï¢Î$=«(úêÙ)ï®,[Vý7ù°åäãè›|ØÀ»õ˜,‡ÞÌãè“yVqw¹|wSÄ#Ä›<žóx&ß´ãЋvØ$¶ýñyù@;Ž–ýù@;wGrøíDˆGºß¥™«-ýö÷¸WbéAíÖ¸*Šbø¨²×Êñ{6܉e£Xà”“-ÚÖ‰3÷ƨq£lt ˸Q¶ç/#ÅNdSå©®HaKý¬ÄïYEƒ[öÓQ*”8µŸŽ&’(%´@1lš¹]¶Ù¦íö›Ð 9…ŒÃÓQ\’I‚úáÙQ\˜‹np4ä—-Y©åå7åðkhãà‹ÈâE.Sü«à€˜hÆÓl¤AÑEÃ)c]äd‰‰œÉÑ®o­›ÀâkÛ/¶F É +;Ât¦¬\»ŽæðG$ȼ@ÓJƒm~…¨šĘõë–Á6fÉ£¹åÑ2žªÚϾ̖Iu|B×Ô"×mt—x§»ŒŽiY¯`l›²Ee9l£V®.àVMáAZ¯ @ Q—ZF Vd"qF ·h»Z"+"ªEeäšýì¨ò²m•W¸mgA,·«ZHîI»ÐÃwu}0Z¬×…ߤƒß'Ò“Fzö0–.§»³ýlH…¾¦Á BZ¿<:eŽ»z¶p͈õЍg«9'¨ƒëæàNŽ +pttîY¾lÕz_^~ƒFý ™ìœ* øoÓð@Ã/¾Ìâ +s>´7áèx¢ð1«åly÷ܲ\-¯]M•÷´Màf:[ÞßA%EG x3©¬–O^0õ²X 6œœî¦eÉL]N-éÅÇ«@7šÁjüu(g³ òjì,í“ßSÒ\f(6‘’\…4f¤dQ vKZÔ8è(SZÚ[ÂA6¥¥½ã:Zlét°WOPPcØÎÕÔ©#R5—”Fuéܹ¤ŽG,†\>{($‰]èŽì«d3æÙ°{²íÍ8Åp7 Í^„ jy5…Ö°…¾²‹ÃüÞçÈ yªüîÓÚ®áJ$úk-}Ã~÷"¿o½þ¢úáE öĈ‡˜³m×4[ÌÎÜB@kÚïœõpHÁ`;p‹tT¡ƒJ¯óe;·ˆû͵žsâAµŠöZ#’ +݉#©sµåÄv‘ž£œÛµÆÝC•Mo)üfpV¹J);mK/ƒ]~Ÿ)Û1¸t¦uÀE¼@!Ãï·ÁCÝ4öÿd'Òëª<ï.…¯n"ºÊ†µIû\ŒŸ¶ig}ål·rVhzx·Ù·m u™rÍÛ¶=–ßÔ¤ø̪¡’†ÈX2©^ŸÆeªvé!€‰xÉÌ)Iq!á´]ªx.n VK×OÊr”eÉtI}£³Þ‡‡%I¯­>ò+­q½8Ú‘_ 4×¼äëôëih5…‡yÛxÆ JÖ}1„PÁ1²fOâkÛv½ØýZËAh à^oÄ œjñwµœ?Ít™Öõ઩þy"£aNœ¡ísÃàäM-†ÒcOÎ ÔÎ!àæÇ±6jÝ•S ±Ú\sŽÖ}·Í©Šoa<Ã*˜ü#+—é܇ÛÕàG«mp÷Ûãi§-vjÍ+ÛáË^µÚƒ yÚ:(g¸K^K¹® tu»²ð´Ý{ºÝÙ}†°+ñ ÷]µ!÷“!¦q6äX[ ͵u%s[ƒÕ tñ¾ÐcN–çoœ›Õ†>#zoØâŠÈîHá«hi¯H1ƒÈÍèÏ8§ÛÛ/‚\üu¡íd¬ îþ^ çÃóLŒý$pòl öú»´3g~ˆšŸÜóñßü-búã›ßEý›ïå_ +÷~ùŽÍ»ÌwK!?©Õi]¡“ôkІËðM­'Û\h{aÄm7(³à aÂ2OL¤á&p òoÜ3K´UÒÑòî5»ÔwTÒ: +f„‹öér„™üZù3iJiÅJ6}¡j‚Á®µŠÝÙÑ&á÷bU÷äp•|™Šo<¾^‘‡Åß_I<ƒ] ŽRC¨x¯¬—!ãZ½˜w¶—=l7úÝÀA "÷á"Êœñp^D@+:ê:Uj})< ’Çö`( ðO×®Šðym|‹Hs^,9N"G+Y¨Áy¹ìŠP(sÛzdœ×õ8O¢ãKŸ­kÁQÐl~¡ÙI}»7:‰#ceS£7£bÁs›‡Ð&Ž@OâϳÀŠñ?ˆcÊÐÎ^ÒÿУ¤ø6&Ìòa˜kÿßZ^ý¼ ƒøÿ’ [6´Ô.8a³ÅðÌ5´¦xè*ÐñŒIw —þò*ɵ+·¡óZÅÛ€]ꛡc{N‚Ø;(dRðŸfý9Qº?€3{:O—bÏ Ý>Ô•¬Ç]›"$7qÖ )B4(¦cL—WÁŒávE«^-¡ô«éZÒ¼Æ8 u·7.  =+_PwóŠB¿äzmà…ºSCÔ8æ¼-ƒ€¡ûÿùF ÓÚ»Ü1Æ+h˜šqÎyø¼«Éà]¶.ËÑ$ÜIö«I‹Ú +èØ+i§KZ¡¤ø}µ)IbŽ0c¥i×ÓØáZ¿èÀKÒ) Œ4OÌêi¤Xæ6Ð>²±LéX„–Ú4„¥¯$¸P ÷%Aéñš¥Ð9˸:4‘f¹:4Ð4R§\rÃA_“ņ<RbÛ󂲿m´Ê«*Áß‹InŸFê³Ò»ö]!‹‡¾–sd[oA%¤°$ZÿÛ“š1˜ý!#SÞ͘ŒÎ=5cb°”1抱RKR'îÆØc‡†«(”³y&SŽÐ±·6®Z€x{Óbæ„Vþé•ã®MC¬eø¡‚åí¡î¶]M;ïb¦Žd‘Q¹˜õ­~éPÁ–ç(—¾@s²Gm +b=O7œWÕc^ìö®WaG«ûŒš’F5dkCÒ©ehs™û6ÚˆîAÞ = +Å$ÿjâ¡é¦Ö™žÅø°Î~k +Yø9šÂKðÍ¥¨€§ž"ö@S$‚-¾]hF:õwnW ¸û=EÏU²8DN¼^ø`ý.Spâ÷ ‹,aä—ï›·¼2©îÍì ¼u=D˜ Åî){ˆÞ\è(!qÞO8¼#l :­&R ƒg¡´½ +:ñY[h*wj†' +^HEÑ2É…¥ÐA%ôFSŽÐRõ5l‹u¥mJÔ½$ñ·é#q&¨Z _àÞâœtjµQŠјF…¼òÂÛB{ë-ê™S:EýGé’\i—Š÷{(­ã¼$4H ù³_c祶—‚¢)‡å]ìpQ}Nü<5öÂD$Šê0SJË)©Ü +ÖN“†Pô|‘ÛRÍŒ¢ŠwÁMƨ+–rnTÛ¨ïDœ6‰• "]ÞI`³ýʙ헭Žreü’i¢ùLúµA[fÅΰÄ; \èq`;çtÄš­ò´#Z¯”®£EÿŒ×lŠ£(Ü©%iJÖÔ§¡#ve¯¼Á‘EAa¤XIUÙ lp‡Æ'ÍàcŠŠ©¨*vv®ÅFf<û\B ÅŸ|¤LÙÛvŸSôìs*ÙÇ·”ƒ©6T}í!¯Þ ®¹Í}þñ]ÃÛ2øz6PÀ/WCÆg³ô ± ‡þFÆf¡¥í‰Ï5AUö@ÌU´û1 ¯[Ÿ -Œ³(6Ô)AÛT´ÓÂ!èwft¢P²¢½'Î8{(:ÕÞœ*cÃ2Ô2=Þƒ•+?ñˆ‚‚î‰oR™¥ +Ú*Ç¢c‡zß@Œ˜ì¸J%”B~Z¦åddn8:R÷íŒ13çÈ÷màXÇÐJÞŽ)ª·1?ÉE^a²E? ë_;mÉD”Sy€)Ô^OÍ}Ôrº¨±yr}VôzVRî!2:*wGŠ>äV¦%(L>²ä8[m‚¦¨šy¹`"¡à‰®ÉÛà×P[’)¾vRªq>Ð0w'.«­i®…°ò’Ü[v^‚¾ ~0³VpL´UE|•Ø>öxòªÚO_ê,áõ×oÿüúåÓß?}ýøúýÇë_ÿþχORͰó#5øoˆýRxŠi[iÂl”^l̦ðí¼îµEp†f:=Iæ°[ôè+x®×õ5qwúf£|›pÔðN‰.cÄÊ,}]‚Ïri};ñŠ) ˜f8ÛSô%Ëý¹ÐÔTDi\¦$Cµ²JÅ5Ý[˜£˜± +ò¼f4D•™{äÔªs ´4õrÇcý"6=_ƒÈ l½6ÅÓ ¹‹+â*cd’hIP;g3ùDLÝžBEU‹I§ÙèÔ‡SûÔàk˜{“ÄX¿\Jèç4ÅÎÉì‘$–È'•UWTßÂÌÏ»}I- c©9Ô¢[óŸ¢ç>Có†2N+åLEXѪ†Â)N·"vÝqÛPõG¥P9OâñBóoÖMèÈì‹p²Úì@»ßó“nù¿U‰Td¨óÝ4¥°›U•K´Ÿ}‘…êÓÓ;U͉D(û£Tˆ’–³Tˆ»¶G°j±Ž01õó*œ}gQ÷´ Ÿ*âŽêbëÃÙ$Áõtg¢P¦x,ê‰×ŒZºõE9fAü&™ìî-¥÷ùPǾ:3%OÕÉgJ!¢q_-ñ!âÍ£šTÔ‚Ú©8îQŸ–"9Ì!›úç½eÎ>{söW§ŽØ{´‚ÚHf´~ãÂT:á!¿Çã½8eOÛ™Ç{)TkŒ6ƒêsM7"ë«:Êš~$&º +'Ü)”(•@+³³mZ¤£–€ë—)œéóàF"çhEæ¿Jgdž_‹¨ŠŽÞuÞÖ´8zû|x=¥;öùŒ^èâ?ë+Íôz¢|;Û|[oƒ?ËDIò‘Ü\@÷‚”Z­ ¨Y²Ù4iXñÔÈxb*ãÏIW=§øyuS“I,”³×?ž© Ö[ËÝŠEËÎìøNÁB‹w äî(Xo ßçÃ}ùÝ‚-#IVivö_•i„ÞìÊ‘Î:nP“ùGm¹øÎ[{Lšû1eôE²Ø·NÕ„NƒÎÆ7öúvy8ó ¹\WÒ°´!µ­rSý{¾ÓŽúã3µ>œ«41-͵{ºëA“¿Tô£q$?AÕ§ÒPB5%wöû»»ÔM¨Ë~÷ºË~§éîeÎ*ö<†uLו¶CèÄ!E"èŸî: Ñ×ocöEoøê´ðÞM½ÛŸ!Z¡‡HºõèÁçV©6k6iGK·¶¾QH+PНþ ±Á‘yó] ›ç­sAÞÂ`nŠ*$t5"§ M`X÷EE7™¶Ï÷¤õïèÈfZ>Yâå  ýÄ®7Êšø& hæç¦É¶Dëïv¯‘¹{@#=m Ü}6ó]Êùì"’ïEŒlMÖ·­s½ë*Ši´8éGLs²áŠŠD˜~.tEuA+9½¥d”[x”[®6Ä79!´]…¨_U”=IÔí‡Ðh‹¬5m¼^£¢JïIÇ1ݨzÊßݤÆËM~yèpÖ ÚdBþ;²ãI&ðÞM&LÝ£¤q“ úý «dÂ_ÝdÂdºP¸Ç]ÿsZ:2±-bm°Cä \Y<÷IàŽÀAê{³‘w?Ѿ~ûüúí÷|~ýþís}ýå Náõç+¼þF?ð|+AŸñ”œõôAüñÛ‡ë¯ç‡*ð<üAW°äëïŸxÕþzÃ!Úb{*ÛXÙýW€iÚ¤ +endstream endobj 993 0 obj <>/Border[0 0 0]/OC 995 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 994 0 obj <> endobj 995 0 obj <> endobj 984 0 obj [996 0 R] endobj 985 0 obj <>stream +H‰„WËŽd· Ý×WÜe²è;z‹ ñŒÈ Ý?0 bI×&›ü~ŽÞ¥B< w‘ýåóõéëguýðåóõPWþ÷ŸßŸÞßÕ¥¯÷_þ&«S*ŠþwÔöZEsÅ@wôdÓõþ|üî?¿_üéÏ_¯·ë×oÓ¿ÿß´·öZîËÑæÇ¯8úÇá‹æ¾üü'üñßëpdLøï²‘®'~›Ë5Ù~«Û(…C²þCØ<þùø…Û(sÛ¢­L&éÛã§@«#¶²úhn¹œÒƒ9iöNõ¿>[/~ë…ÕyݼȖχs+×OäŠjL@ÎLU&ïôô,åY^¹zVq8×ùl½ß̰1t'fÃO+y¤Ðóμ Ú7+ÉÉ7K)DøS¥]V=Ýi¶†e©…÷ +ÐÅ;âEž$"“EtS®E³;8D··w2Ì'AÃÒêÕšVI³Ÿ€|('l<@º1 +zï<,M³Ë]¼#Îi’“Ò­j›cÍÌb¾l—àn7ïz£ö}®yÝX6~•ÇÎycÙí—î½±Œ …s»ßhvÀ‹툾 hånòÖ§5†)îAÇ~’oô­å«Rˆo!ÝzFKí]cÛoò§C”að8ì-"aƦêiÜáâ*Fmñ:s$ÒIc¯0›!s6¦6§ŠWÉwg±n„þ?¶oÂŒÀŠ˜!(¢•óÕÍðYá&GEeì8AÒ0ûæ&b'×]—;=̳‰D°•…yŸTÊ· ¹ væF²ìšy`æ#s‹ùB±Û¶ë”àah[­¿%=>%¸8¸eÛ† ++g­lìva,h“žI;`jPÿzœ€o1ås C¼èVÃ¥fØÃÌ”œe@¨â]ÉÌ`aö(o—#ˆyµéHfïR̹ƒ½ÝXr0óº·gÕ,KÉÂÌ£¶¹ž¹V•Š£¹£n¾P<Á×Êä^Qú;ú4Ý^9Yôwn«$Ãì4‡{Âî‰ì4Ã~^!¯œ†Ù;o1=þ„Ù·~¼F i†=¾eCJfh§a*›Õr; ³!åÖÅ.Wr'÷Bppd©IAqˆtVüNqHäò Ëáž–÷*9u°4IÓí½oÍ+æO¸\í‡7ñ@`³¶]ɬ4o{ïÞjÇ›¶UÄË®ãæ¸ßú¦£¶ƒì“©–3T_96¯‚gê@4â˜d/[pÓâ@-·w¼Å1U<‡7/☈ūh &Ù Ä6´X¯Ù¡d°KS¼1ɯ¦XÆa@Vï²5A\? ø†õÊÖb£,uÛ˜€À­ºeÁ:°0sB§bÁ’,̼99÷«ÅξìW’…ûîJ¯Zö«ËžŸ¹0X†ùÈÛb¾Pì¶m¿’àQúF,®®-ÖôÖ±E歹ìÝòZ°_‘—ëÒ‡š—‘ˆ‡,õÞe[ÿ=°0û9à‚Ý~%aÖø„j¡áÿÓ•„³#²:ßæ½hÂQZW  3O¦/¬ÞëyÀÂÂn m£5|FNsÉÂÎø6ºT—n?6AÙ¯4ÌÞb yT–™ ^tø +E•¼gE·òì5·´©†<×±ñð[—“.í<aÛXØ;Ñ@Äã·Ìk¥ÄÇŒNÇUaˆ÷UAyø5Ü2˜õÉZ_ +]Ëå«8ÞLÄ®j0“)b‰¹ ¤ª!B°õd mÖwM³w +ߪE¬,Næ©j­Ë›0úNAñ(ðE¨¡þ5ž‹Ç… „MÞVqˆ¬õTÝ+º*N¸ËÅ+¡jˆˆb4Eì-GHU¿ +¹Ô³8k7Õ³^«Áwˆ/âˆÙƒª!ò´©GG—là©jˆö)¥ó.­Tä©jÂÙUœ¼JËRÕ)eWÑB‚&ËíWE±(/_®(Þ:bíª†°&¤"Å+T @hš=Š…ªØ%o€T5ºe#"y »ª!bP¦µr!U $—" „©Ð²Bª¢m%cLò—±«:ÂÃÇ"ö:7 +ŽªŽÀŒIE¢ KRU¸L…&TÄ„™1ÇØAÕh‰Uœð‰æ„Pu„5¹£+*½^Bµ#ÅWˆ¢êgB‘jCÆ.€UÓª¼N²Ý~Ót{Ÿ´­Ç–ÇÌBÕ†R½¢”_‚ªÞA°Oè"F•ò~¾«:¢tê¥â£j9CªB‡M-4¾!U ¡(ªZÎ>,^IUï!¨PÄø˜åu»«ú$ ÞÔÂÑQ…¥£KUïèÖ¥ZÎ +#y™}RÕ.Vg•J«WRÕçŒÑ±=}KÄBÓìMT^W©"¿œ U}ö©Ôš …¥ wÕ³Ñd"…*vÄÛç®jˆˆ®ZÛ0Y¹~wìD0 +Ã+‡kªâש/U=SkF[Ev™áRÕï/´“mãUhz¶¥)2R<îS]Õ§«Jy•„Øc:,u+U Uî§Öž 4}R–ï„,FëZ_†Tµþl´O58 +†ï»ªO?£-┬Zf™TõégPeÓÖñÔîª>Ë´ +UlRXRÕçŒÕÁ±³a~RµvtˆqGÑ:úP5æš-Rl@j3BÓìQйüóæi•‹ Uê¯+¬6f2RÕ¶|±B +ø°DóôÖÖ…{f6ÛûüMÙ¥ÜÞŸªF“g#/ežòÐ(Ÿ Þ›PÑ3)<½ªÂ’K`abŽ0˜ùUå’›™MD–‰y?øüª*Ú×OA8˜˜#°T´3ÔØ\bpÞ3ñ>ò]²z"| ¯Š9B™öm¢ýèR¡ˆ˜˜7WÇ»èï;Aè4EÌ?—(´{ÂëÖ3îØXÅ¡M Nèwè%UÅ|*™@5@¼žq{ëó^ë4Õ¢ÂÒ£fÜÎQdb†°8¤¡“š‘Û`4óIV?EuþH3pìJ‘‰ùÈÔžkЍÑÐ)r1C(”L{®n ðŒÐŠ‹ùèsÎÖ¦ƒÅ“h¶lALÌGJ¿æ0J_*)11C`‚—ÂÕw¾¨ñþ4¹^/›dh›§&㦙x¨¾I&OVôÎ!æäÎTU4td)·>6{—b8ŠøÅv¢™eâÿè®Òœ»v¶¢W…LEÝýÿ}N'dø*UUm|O ÆÁ›"Î}‡ÜÜ€¸ä`¯Èµ©ólÜÜ—•¼)B¯ØN· ê¾çC}|Jæ¸S.N¸9x÷èq~OÀº +R¼)Âôè"mõ„`Ó ¢^€qI…—×'§è`¯€‹œŠ“ûD¡ä`? ºæçÑÜWâ +ªƒÿ58¸UQ®Þ'Å©¹Uat°Wp zî\Bsã+ÏÓêãc“¾¼í‚8§"…½‚’qälacÅÁ^¨èiu- +q°÷"ÒfŠ–ZëÚ7ì›8Ø+X²´´OQl®Ux.ë<ö‚ÿ®/V— +oŽŠf¥¡%•uã™ 9Ø+Ϧaßx)¬.Þ\† ¥ +åÏB·Ô{ÿ‚½âTDIk籟Ђ7߆…*…dí÷äa¯`IJ%L~kç´¡^Pê,@œz\GÓlöŠTdRxê¿KÏu{agJQ¢¶VÉ +{§‡žªç[ oã"Ý +/xs“³»á©XC“pÑÁ^e¶xœðåºÔ<¼ÙÏhŠH!/ÍBVØ›ÉVg%öWR`îìèºC„²Æ¬\Zq°WÀ*èªõm}#qvèæpË,r‚yZ·9²ƒ½ÃÅ;0ê*@A)³ƒ½"µY²AÒ*@4{ñ°÷¸°ýzŠ¡4þ¾ÁMæ§öŠÜ§œAa¯_²´àa¯qî¹ +w6D…½ÎýÝýI«¹¢Á9Øûè>&*óúíœK«öŠTGRƒÊeU g­Ç`ï¼—¨TŒ«9uO¿`ï¼aÒT2]È16‡zçCÔE¡„èËCÆM7{ Ž•BzyX›¤ê`×pµÝzô ö‰bÅel»W8˜më`fÞýíNÌèþTPGºî~0¿ÏÊõG¦â¡+‡Cß™O4n­Â ÌFüfG¡Òó¨ôþ¼§ÑÁÌx¤N\°7´ñ­¨fÆÏ¡®t÷Q¶øƒ™ñó5Ça´À{>ìÌoÞyõ ”¶vŒ‰¾­ç;JH¢5pDÆK˜¶‡è¦lIµ)Їm 3ãQq ©„½ÎfÆ—‹þ ¦Ó]pRS#0J#÷!,o…yRvÍèÞýÓ½H8mÝû¤,*³Â,ÇØvRS‘[V!ýË5íöIŠÜ§ðTõ¹ˆñl]‚‹Ùâš_:FÏ9^§lÞÃ5 ··B)S ?G…ñncÞN™"Èðg„æ×ö=©Ÿ’õÓ‚±d÷äeŠ ÃxNàœEjoñhQ{5Žú™§ªcàˆp)vk§, aõò€åÃ<”ezÍŠæZööt0Öž(Eý0ކݜ”5¨D¢0cxÙÜÖIMEÌj"ÌàáNj*B•™þ¸£½ÂOjv)Ì`c{€%ø‡ô¦¦¢b2`ÂTÇ›"s7ë˜iaë·¨ ýAf\o”­‡ŒµAø‡ñ+øÏÞùÆÚ ¬õø\èÞ£Æ.‚£®2—zØ“±«NIWYÃ~m;±%ã_ |ç‘–¨ðà@aÇú²åéÎX)À44âQÛzÀÁìÍu C{uŒY˜‘$WøIѱF¦W´][7±Ý×㺷ð±øÜú`„Àζ|0–1N“dÙ—³33¾T‘ÒQ ¶øƒ±x×]|1žÄŒÎ‰y|ÖÝßÔÅÌø”9Œo¦PöÕÌŒx¨ùQU3ãöÎÝ”aGq‹?˜ßÓ±¾_Ì kDZïâ@Ÿ‚†.¢o†ÊûMVô-HmÍGK0з€ðÊÞ‚>ÔRª—@Ñ·sn¼} Їî%)ú`âÉ·` oA ÇŠý± Œ²toYÑ· ¸L]‚²eö&@«¾ïYÑ· |s‘„cŽZ~°IiíúT×é– }Ô Rkç¦ } ¨Ê¹iCŸiIÎMúð7ÁxþcÓxÁùÞ´¢oA,ùL=Cßt“{ÓŠ>ië½iEß<Þgvú¤tÕ›¡o†°{ÓŠ>UºM=оõó¦^P73» 2]gè[@rUœ¡OAiåª8CߦGÅ)údyTœ¢oA,ŠSô-ñQqо§HnŠSÔß*ðê‰aî/(êœãŒOù±gE½³¡[ÍNáÏ}ªŠzA‘¦y—G*)êpHs ¡ÞÍÛP/¨Bs<ÈñÑeõn?F™K¢Æwý(êŒyb 9­ÝÍÛP?Pèž¶SœêYp†zA.QÇ(¤q=—d¨H·HƒŠ|>‰ôcÚ0SÜñõäQšs•³‹êbãl7“gæêg"Þ¶S©\VÉP/ÀÍQ“à£nÁ@½mMψñ4©g¨»bˆM©úÍ]^PÏ9­ 0Þ›VÔ $Ìcåø²^0P'(èåJÕÆW½ê©±.©òݺ õ‚Ú’^\/¬{ÓŠzA¥âݺ õã)L²^\ wë6Ô 2ÏS*r·nC½€ƒî¹iwv+êãáT&•J»³[Q'`ªM 7.wA+êp[º$¼r´¢^PSÐCÊõÑ1èÃ¥è¥eLq÷ŽuñêìHr¾w¬¨Dž·Œ„ºŒ’¡^[Ò/$ΗQ2Ô 0xèŽQÙjSÔ Í[K±=ªMQ'hIûv +÷¼g¨¤0‹'Ê=ïêYX3³î£Úõ‚~ƒIü(6E}<º¦^t¤ü(6Ee!ÍÌ Œ ÷õÜü¤yGu3†!qšDÎJSÔ JŠZ8¸‹G¥)겞h}æ(ê݆ˣÐuñh¨M“"”ËmOЇz…2±]#‰¡^ê|ûC¨|_€¢^Prèá²ÓUi†zÓ0  j¸*ÍP/V*q9û©¡N€¿BJÁ™œ›6Ô ð ¥P¤W¥ê U©zÛC½ ç•Ê·]0Ô ð°é)I¼í‚¡^Pé)q»í‚¡^ Q²R|ÛC½ ûB¹í‚¡N‚Þ§{Ò3Ô °§ù…»ËOЇ'iz 8n:ËÙP/(qæj­D÷Ý’RI.snè[@%Ü[Vô)¸_rÅÞÁÈŽû} ðßi§è[Ó£Ö} +r»go>¥¶Z"§Ä…Þ Õå>j¡…n&¹Ï"`^èµß’õWõñL2x͵ÝÜ2-Ô‡—:^<¯ø<㺠¡áq^áÿó]%I­8ìD¿›ùPuÿm Xð²z“)[<rlk}¼5‡ùì!@:º»Úa eÿÐÇî+NѼìŒ+OŽ^SS„ +–œ=e ~½Æ²:‚<¿o_Öòd÷2…\ûòåÃ[6z‰yÄrýÓ ñÎåç^Æ•môšC{ŸÛÌ÷ÔB(ôî(ûKÒy°–‚çVn!ª£ä?Rkî´Iõ˜«”â(ûÏ–Ú“çV.±ª£ì_l¡Šý¸¹du”ÝS[þ©yj¡JÚö e\ÏŒ†ªÙS+'‰„²¿ˆEO ê©•cLÙQòšx·ÔžO´eˆëè(ûW ¶’K:(ï5&ÈÞ³NÁ€ïŸPËÙª£ìKœÛ,âʧÔÙ[ÆY`È­zb¥–5:Jþ£¼˜¥$O¬‘ÜÝQö/Úæ>qÛ.06©Ž²?"ÕÖ—¦çiSŽ–ˆ†²?êâ\ ÕÙ3 •W’£äŸZ·GOUå<-´šVGÙ¿Ì.KB?>þbñd »Çå­%œ@† PÙ[²Ú:!zZÅ>›öFÉ?öPçc¡M{•‚ TBÙÝc®3µÿˆ'-޲²°‘Ú?^ŠQv—q¹Ã"Ôÿ#*5¡ä¯ÍŠ"‹TŒ¥Êîx«i@#;‘†ÊšÅQvÇÌcþIê ü5n”üIÁ,Ò| +T4áê(û§õ,‚Vw"Yk³F`(ûCÍg—=³´${rCÉ?û0ŽÏåkê­9Êî/æq7áËCTGüÓ»[)$O,U¨2GÙ?¯â>.ðÄ„G޲¿;nÈÍKzh’{CèÍÛ‡Šñ¼‚D[(ûC/ÙJø{bm á’M³ÕCE·î©%($ÝQò/åmZ + AVGyýZÇúŠ$N²çŽq u´¸ÇëÁ¾¦¿ûÙ§°\³Í×´Ãhö€GÂ_Añš#-§p×ç×ôwwX« kD^ÞÍ÷6ýÝrºŒt nåü˜ +{$ âjÐþ/-üšro<`¤[m¿¦Å@¡.cÛ÷8òš6cbîHËò_*pêzá5mFÊ0‚üžI^Óf´0²0ò)]Óékú|c…èïo˜i3âL%Õ?-?“ØkºoJÿ y&?nj[¶èCjÎ=ßç~Mû½¥5ƒSKí:÷kÚQˆ©¥NX¡èé£%³ íú 4Íþ>¾3K‘¯i3Ê(Mót¦ýb<¦‡ñyŒ¯éÙUD¿.T_ÓßëtŸ(üX–?æ«¡FôCª_{zM‹!•¶P‡(º>ñš#­V#å¿0ã5­z‹žP›U£Ò9¿¦Å¨ÍbJ°+—¶¯éžŠq§2ã54ó?Ex…«ˆ|M§oä™ù*£pøšVࢠ¡³’ñ]}M‹ÈIöéG…~M;ZOŸ£wõ¼-ËÒ@l«¥„p¥ßkÚƒ¨L¸¶gÐxM‹!jë„!ã-†q5LRÓ=H¬sÃLMV¿Œáƒ¯4mÅî$¤ÏÁñ¤+Î fFlbáf>n*O%˜Åtí1Z< «‰`f I/S-ÇÏ'd-¨Ý̵» %ÌŒ”“é. sÞ¿jØÒ~)"$D2 ÕqƒÍ m ²fF—lb³)XGAÏJð%WR^ò5Ë]­ÌŒXd1bõÄCa”H03 ìŠ™ÐòÏC(^»Ì =¶ËsOñ@ 3cŽ£ÃRš§žj'ð;{â)Zx"˜ƒèꉧɲkÃÌHV@ Ë{÷ÄÓ¬¡Ì ´GûF©$W½¯ÌŒ¢bW[2ªöa”\3Ą́ëN +†=?xë> ¾4s¬ë¨2~pHéL03zZ“í©Õ˜e(¶[ÏE\Ï*–)3¥Ý¶ Í¢éhÍ0„§ÃÌÐÖ×%»œ M££ÿ‘ä$w”¼2Òà‹‘‹}!VÌÒb!˜8ø2¥\Ç«u¶ _Œ¼R&i$½ ‘¡L€²OÄ>:ï!”NèEÈ›P«g^Ô!m¾Ç¶U* û ó×kzTí|÷%z–!T¯i…áËU;mÙó.&]eÖà›°Êõ¼ã‰FÓ³¥¶ªF1Õõt_Œ¾Æ’hÛšfF kW‚‘ÑC0‡*ß ;8ZJôÌ&p7|£Ùk£Ó$™So_ŒíµEe^.)üór%PZ䶺äD/„ý´à])ó +‰àñr+þe4S‡ ®#øS@ã6‚¯¬hûÐ>ƒe¬ìðÅÐ)t’7Sâ-Ɔ¯Ü®3¤`7ÿ`LøbH\ß@ËÆ„Ô(˜¤Pê9cÂÌÀ:M­“¢p†Á#M}S%EAŒú(ŠŒj´‰1Ò£( Nf.ä¤(ˆ¡¢Èè ë1£(rÐdßÀS~œÜà«ï­ç¨9—7z5V“ǰDe‚äJðÕ»s³©ã”K}Íà[4ÛP¢¯ë ¾TKWÛo)(€ÎÈU¾”QѵX +Dˆ%9ÊþôÖRR¹®©T‚™Z·µrO‘ªm_qcð%ƒ,FJ¿T;¡—â Õ®]ýµÓz C/Q«Å^/ëÐʇ³| g¼§™‚rßë-|‰ó¸b ûæÖW"¡,ÿÛJoä9¥žµâ²îÕΗâ¥'ºÊ„e­%/Z fF(ÙŽ‡ŽXüµ‘`žÂjïËTRñ€BÎw‚7CÚûÑ[kÀ -+¤"&âÈŠ’w/24 +é>+çŽÍÔÔ§EhÒ»¹«Õ€* ®|×ø±¼ lÿ{ò1Ž. C“­æ>‹ð½`°†³ò»ÀñõëÒs%‡üõ*øè碯O£ÏŒ úåhù6ä»áˆ ¿ãk‰ïûO ¹³ÝßU¾÷SòyijÐÏ ý½½³ !ÇhOCûÉXäÿÇë»Äñ.Èò:¦BºÊƒñŸ™…ƒéaç„©-=Ъï_çû8bÁ!êÿü8G\ƒEc çÝß5È?à˶½ÖÏâï"Çt*á~ O Ž+ãÎÊL'O8Î7½öü.püñ·ôu¥çB¾‹|ýéYÞ5Žs»ópßt@$ò ü}É_ǵâËÜŽ*Ș¼  î{PüAÑP‚ã˜|¨äëAžÕ}}Ö}ÏG?=hÌ=ÿaÛ¥aö¾ #?k®åc›&#ÿ ¥æ_„åòGrãÊ\ý°¬ÕÁö‹ð5=Œ‚“7Z~™&#…•ñƒM¡çßÓ†ã,6šr?öZg¡¿ý¥å_„ ÿd`ú±jy3 þͨjš÷aLø7#õ”~0&ü›1ºÍÆ„3ÂÐc_Æ„2ät—K–ì WÔuÕûŸ¶ŒP6¶âÕ0ä('† b&ëz߆a6ôŽ;ÀؘR­íý³¡0rÃh¤9Fn˜}ÛŠÆÆlÔœ`ä†ÙÐÆFn ù[«­0rÇl ]¦`l̆^nÂȳ‘5ž`lÌF*3¬vÇh<32è˜6Fȹc6ô–FïØ˜ ‘#7ŒÆ˜+fÐ1zï…ù0ÌFÍÞ±19Å :F£¯3è˜Q…vöÙЬ ³‘çÍËÈ“3øôAÍ3ø26F£Mñ Þ†a6Ú\ŒÙ(me06fC²gðelŒFkÖhf£wxŦü|-Æm˜ Ý+a܆Ñ(kt˜qÃlŒÚaÆ ³Ñ¤ÁŒf#cc˜Ô¬uÃhä™+ŒÜ0mU¹a6ʯÇxå=†–ä×c¼ ùG¡W‹õë1nÃ0ý×c¼ŒþCKõ×c¼ŒúCKù×c¼ŒüCþÒš”@ÃlŒF 4ÌFÓ«³‘W¢wl̆Þ`> ƒ‘þÖ,1ƒŽÙè)fÐ1eÄ :fC*ݸ £1—Ä :f£Ï˜AÇlìëk46f#ç˜AÇhŒµb³1zÌ c6Z‰tÌFI9¬DÇlÀap(>¯_]Âyã˜.¯0ÌF™1ŽÙè 8û òÓ}.˜mÃlÔ¶`¶ ³‘ó„Ù6Œ†Þ&¬sÃlè‰ ëÜ0MÓÆÆl”÷6Çl$è/£Qf£ôf£Cá˜ý…c6¤Sú £‘We¸)??¥Ï0µÃOÚ”ŸÏ•²g˜$±»wŒ†Œ»{Çl´Jù3ÌFÊŸa6Ò¤üF#ÍFù3ÌFÏãÿ7º>ÚEYÐ&»EaSä×YÜ‚pc!ëO,Ÿ ?ÊÂøõ·0¸­xJõ×VÜBå®â)å_Wq ™›Š§”¤å(lŠÂ³Î e¡µZ£°) %Ãó7‚§’ôƒÇç7EaÌ^â² •8d£,Ô”ã<eA†Äy6ŠB_uÆ¥g”…!"QØ”…:¼aSrKqÐFYHù›·E¡y3ÊBûu·Ð¸‘xJ–Ò†ü¸¤ÏoŠ‚N¤Í( ½BÚŒ²PÒf”™ð¼àO+e5øDFY¹Ä90ÊB]9βQr‡´e!H›QòÔý0FYhÒf”…R!mFY´EAæ¯s¸£,ô_ãp û†§TÒf”™°‰E!­_×p FY°qoÈ×5ââ6ÊBî#æÙ( ©tøE›‚0ÿÖLý›O§,´0„ùñRÃæ”É!mNQ˜s…´9e¡·ß`”…š ¼aS´ãü.<§( íÑâO2ÊÂ(!mNYh)¤Í) Úø~Óæ”…Tçwé9E¡Ïx48e¡Á 6äÇ -U£,HisŠB›+¤Í) ½CÚŒ²PKhвShТ ›O‹ól”…Qk\ÜFYhy3ÊBž7£,¤Vâ ¢Pflœ²ÐbÓà”…›§,Hlœ¢Wlœ²ÐcÓà”…ZS\ÞFYÈ’âò6Š‚¬é‰ÓëH©=_˜QWcc6š,zÇÆläå¡{³‘º§îelŒFšÅcw†ÙhšI06f£ ÞËØ˜ Í$ŒÜ0ão-)áW9f£ÏFî˜Ú<|/cc6ò¯‰xù]Äø›ë×E܆a6F—°³ÑŠ„•蘒•ó|îMϤg™Wš tŒ2zÕ… ·Àµ†¼~Ó·tŒ–F³ëä˜í:k tŒ®sd7MmÞäõ«¾¥cŒ¶ša½¾¿í·tŒ%©×u7¯w|KÛÐ[ïÈÉþ‘Ì×Z¥chTÎMc­—ñ-£–:eŸhk^סX9Ï÷Òë¹âêÊ{ ßÒ1f™ÏâÜ7ÓWþbiK£¿Î›g×9¥c”$£nóž¿X:FE*ýªX:F64x¨œçuõ +_6TÎóK»gšºPÙ[gÒ@N_ãY>¿½6–Ž‘óÚŸ[ÃÈ×.¥c=ñ,.z¸ÏðX:†îDÕ~¬Þçî~5–ŽÑg¶ø‡6†¯w|KÇÐE3lxKG7oã[:Æ*ö uÍ׉KÛx6ëÖ›mFõÕ!ÅÒ1´,†«eó6¾¥cäÔ—l¬Þµ¡ô_;DµëD!TöóY×WzÑkýE,¹¡›u¶ŸšÓÝWÄ’Uª½ºäuß´bɤ'œP:ÆlkIZ¯{S,C“ÒÎÑûŽXrCw¤Aë0–Ž¡Gƒnµ–—ñ-£É(³Rd½Œoéeöe?V$Éë[}KÇÐc4Û†·òç[}KÇ¢K`c=ËëßÒY¹käµi›}ä{á~*çù™äìxº"î;i,CÛA±ëÁuß´béeͳ Kzín±ôÉßs7É”?/ù®ZnçN£-ÔkWø”ÎΣ'H5<úÓ\;Ï·ä;h³úôXò}]“bÿè9ßûú§äg‡6gݰöP¯]ú[òÓ,7ûÚ–«Q?_¥ì嬸yß’ŸúšK{qm÷]J§³ÐŸ×&½#–¼Ûé--ÃsäqßÒ1dæy>Gþt/ß’÷yIÏ ÃóսĒwŸuU9÷¬y¥JǨ©z–Nz÷«ß’÷éUïS¶<õ æÛø–Þw ž-…î4¿Ò1º)LÑ,¼ŒoézôfûG%—õº›}KÇÈc ûGMoˆ¯w|KÇÐc®Öír¾nZßÒ6š¶-m2Íë „Ò1Fš½W¹Î(£ç|¡wg¥ch¯q.;]Ï”yßÒ1´Eëg ”Ž¡»a‡iÖ;Ûëz?·³¬çÎï«ó¯›Øø?}=ÿ?¶Ë,K–†¡;êXÔÛÿoË%Å_•HqƒÉbÏÁ¿dȬ²sÍ¡‚˜ušX3L|äGi1ÔJÝ-&z$“#†öêÂêÇ!¥üã(ËQLv‹™¾Þh«lèÍb®$¢Ç å‡ >„^îÄ‘$_èÞò/#­jOG>o\ò ùï2|h¥L7¨ç¶­rÅ:šæßß{u6düýù7}¯1’“Òüý‹ôKf²d½_UZ­<ßi×(X ÏýÈf…ef´ZëåpF›5Êíø.-öpY=7 +ÅÆN™VÖWmÇÇ(ååø-‡ϾƒÈ&YHf†Î´Áޝ×Uÿ8œQÄb²Ü=Q;êOƒ2úøýý,øSÿû{Ÿ_âþ᎞ëTRJdॎËáÕ ü:>„ÆÆ¢£;¯qi¡ÛÕ3áìâŽÇÇHÖgÔÇ-u”Q"Æ>M™)÷|9¾FGãÇñ1bg¥XÙ !¾’¹ì=.Âq8Bƨ‡#´Z %É;F‘…þdf :Ê—ãcäè¾~ΰ féTV`UIfz v9œÏªÇǘE†´åsäšc¯¦Ì d¾q9œtØŽ/ÉÄdRO VQdfH]9q;¾NÕâ"þ:~³(:³sæh)ÉÌ@•[.‡÷¶¨ÙÇÃá 4sSsæ=W– üq|Œñó×ጱÂÚŽqÎ|”RI¦æaô&—Á½Äžÿ¼A?C5ŸL†ë×2ÉŒhe-c;œÑjä¦_ÇÇ‘…¼lßG.ye )3Cí68ÂÚÚŽƒ#²ét¤œ·¸ÑdFÈh—Á:Š> Ž({›ZÙ™ O\úQPªõß߀Gñó{Ÿkˆ/B#·c:âYW’™†êåpD•õI?ŽÑ#$àεÂÅrД‰Ñ‡¬Ul‡3¤öúp8£Z$!\x;ÕD+ÉÌhýgh1Jd¬_ƒ#P.Î’~ôd;½J7#• (QnƒðêÛÃáÜÍÒs5å£ñüµ—ë×ßôIþþü›¼×˜Hê©ÖjÖ™‚|u9œŠ´‡ãk0Ú—Ù»7‹'ïÕ2~dfä&·Œ6âÇàÜü¨ÞÇI{¨ùÒ ™(Pôr8¢‹½Î@$Z«³ ýz•-ßô]Mv8£Õòrx÷–Ú˜§×rZŒnḚ́ÚÚåp†ÕÒg bÅ^•tÒ^ÅÇ4’™ð!—ÃZ{8œQz8ÿNÚÓ”J%™È0ãr8£òp8%ÍÜ«Öä¤=Í–3ÉÌÀµé—ÃíápF]ϲi:iOQu’‰a£–|9œQf(ºÎз¤¡ZØyëÖN23ÐV¶Ëጬ"‡3l¬O~h‹a(ˆIf†¶µ)ÛáŒÿ×àT ó{­S£¡)—dFHúqacf·Û጑âlÑïœU ëGd:Kýý¹ÏWiéE較&j‘’*©Ð13"œÐf%s;‘K êëöÐ9ÆSš23zªõr8ÿéÃá <ø¹ÚÇI{†ÞIf†åT/‡3´_gx¢žCf'ï¡Y#™ˆCv9œ!#Îè×ጸ€ˆ‘ºŸ·u[ŸúÉL(9bÅq8…p{8œ }1JÒý¼ýn ÉÄ@ ‰ñ8œ‹Óg 8Ÿ Änê~Þ­”ØÛ)3£i\¸ãpjúp8£g¡VëéÈ3yÌ ôœír€š3ÛÃáŒ}i>é¯Yn,3£ ¹Î@ °‡ m$$“þZ_—mÊÌ@k©—Ñ/‡3Pë#©ì3G…uÙ”‰º:÷Ëá ¼}8œQâþÚ}ä]4 +ž)3¯üv8Œ>ލ9":îtÙGŽ®Á +ÉÌØÄcpš }áÅÉ7"vʶÞkb™ ©FñtŽ()ׇÕ1”åÔmc匩¢ EßG fn‡#zŠÓC½™÷y{’a™š"uˆÊÃáŒ!ðQÜç}àˆlì§ÌŒ"2.‡3·åá£%‹‚µ ªÝQ}œ¯údbäóUÛá ¤Žñp8]H Ï££±*±éSf†g¸Ëá -šgà|棆Z MµÌ ‘Ûà4õapDìznuØ H’$²ïq8A'h½¬øåBä"ËðÉ„@p‰7pŽÈ9ná¯Ãmmz.cå?üƒ¤\HfFékg· ô--?ÎèCビ­ü‡3Kº&úäí¸niíúv8c…Ë¡h´,67!æÍ¨ÍXf†Æý<GX¯ßƒ€Š!d᳊Q"'O™ 9G”<G ®×—Œå{’¶’ŸÇ³UºO™ï5_G æÍ/QÑRöyK×HpSfZ¦v9&§¿@àe8ÝÃF–½Sq¢‘LŒ†G¦—é¥ür€1rºÆ}Þx@_Ú]23f’có´—A==|!C4m!MI&„¤z9œ;h/õè*¥ìGãÕ3Ę́ù68Ë/(æ¢nÞ'Žvô»TK&„ªÆÂب¼`X*ó{;*µ »Zê$£~é„ï„¢-¿~BkŸ«žoþÍiú–‰=ûåpFjöt€1´†CÒÉdzUHÞÃÕ—8ðŽ«ºójU1’Ù;=‡ÚéE36\·È¿®q ÎwoS–Û:e65‡¤àˆevôûÔÑ÷M£©dÈXô¼†÷±oà,f–È¿Ç^Ì©ÌzÛ·)i–A2;ðJÂQõÄÍ„‚HIf‡Ï1‡ÐpìÇRS–Ùˆ3÷PÑ'IJóÃ+[’É +£Ïuk3“í01–Ù!¥ÆîNŽº¢Ä”Ù¡3ÁaHvß*ƒN2;ÐÌ%¢ê/u9úXlÊäÀŽm¬}÷dpà dv‰X[mwXpÔ'8evÔ¡õ“ì•÷¢qu¦ÌŽVæ +ÞÖÓƒ5¡’̆Þö´Œ{á&$“mj +‡²ØÚ2HfGE÷5‡Ðrìãh%E*™2;ZšëÆž¼ (ÜTþ=ŠÊ¹n-û0Ì,^À”ɧÉMJ߇a2"+M™ZÇÜ\¯¶Ãr‰(?evtT sHrÛëÖ6ºLLwºà{÷Â1q$³£¦8(„Þó›’̇ÍÎÄ-¬¤’ÅCž§PsÞ_Õû1evˆI e;ï¯â[:Éìh9&Õ½p<%• «PÅRÃ^·h‰[8evT‰{‹ºoºäÁ¦Ìs¨CéÕÚQé÷#—¨‚»mƒ®0ev¨|·á¶•íÈí»…KfǨ_ˆv¯ž×—Qú ÉÛ(v.(6÷2ð%¢$³UC0Ò.\òÊeK%îÇ—.±eÝò>ï„*MHf‡åXF7Éû¼B‹’LŽ‚äŽŠ„4 Ë5!• -­¡ÿ鮲dËB¶£.Å ÷¿±Ž^Ðó>úU!ç:B©.¡¹°cÕU<ÇYæ4Îv~ö Ìòc$S¶û1öC°°cÔ"^Ô"ñè.ìýRFÁÓíu¸·æ7¤Œ„ cøm®½,Kx©ÜñBÊ(°µú¡º¦*Ǹ!e¤’‹„ÛôÍìÒ™f”™ä§:‹[Õ )ª:äa$üY½‹¬'Xrò×ñ 6Ÿ ôÛ£‚]kú€Ì|ޤJð«Ý3nèò`(¨yÆ ™Q@qI¸ƒûY‹åUÀ»ø[qbõ†Yª?• V/d½iRZECødŠŒ²NCyK.8 'ÓµŽ1›|¨Ró÷ñBÖ;ÖзùÒ;¿¡Ó‹"\³‹úüFª^ip>û&ØŽîž‘íú Ëù7ñò,>ì-ÆC’†1 +e]ª„=c÷à á<Ëaà¾}Ø3Ò,2gÍeíƒ[..ìÕh{ÔŸì°ï}?u ?‰W#P9ÓU´Ðž±NO Üùì¼rnÃ…£™pš|öÝІ û|Uª²*nœ}·šzsaÏH3ËIqãì»Ay¦ ;FášdßüóA`̦G߯&9[N¹Ÿ}w¢Î.ì¨.9DÌhýì¼·¤’°g¤aŒÖõׇT¬…ƒxéʆJùÕä³ù°g´Qô7rúÕòzuaÏÀS–w”ûï7z¢æÂž‘ú”7Ò{Íç>—Y]Ø1`íŠ,ȯѪ«{FSW•ùWè»Ä.ì¥TÙ9®ù?Ýe–e7Ñõ ö¿±–™çä+]vù>@h87°«7;KÎŽ2â<Ôê¹½Wâ$'Ç*<'µsG‘‘åìhÕ÷ ù¹€ƒºÕ$gªhü¨Bç"r#-¸œ•ãzˆsÇ +6W·Óh÷ÒGÚÎ /ÉÙѬúiïî-j5æ$g‡xÃGu·6ëb¤ —³ƒ4èLZÛ4í=ÉÙQ¼+À£&«ƒ†Ã,.¿ËÉÑ£WÆ#©1¬ÚQóûh ãIE -Cźk’³Câ,‰•¶ÁǬ-g¡•õGFëúÙŒÿˆ—³£”Ãh¸—]g¾Irr˜ˆO¤³ÕÕÃ1´'5ù²Ñó>nª+]Α(4¸–\÷p5ç‰$§é]R¡ÛËQfÛ‚ÍÉEùs91P}cÉ1g×6>efÇâ{RYÖçèΜÒZÄBr€Ñ„ú—£ü5 ±Dü{ÐÅäÕ’œŠãøq€ÑW©¹`˜8½ ›íep!ã$' ÛÄˆó» ¨EîFÝ®ûÄq~œå„0”z; WH> @H!__²½Q’œMä6Øœ"ü/C™õ=nš“…(È…œä„XƒÅËZ*ùr€ê0ÃìØÞü-¬YÎ Ì;r;l¦³g?~åov/êŒ[d𙾶$'Æ@3Ë· OÃúãÃx˜?Ò²Ò-þyjâ’3£·gb|9ÀðÆ÷Ç„ú,‰Gdmf9ê~_QNüä÷ ýbòñ>¾/"ñ%ÔŽ ˜öHr& Êë키ؗŒý›æ•¡Í@$INŒZ{^r€.¶9ÀÀðutík %äyÌkIÎ ôKv;ÀPnõËæ.?¼Y4y3ÄZOrfŒ*õv€Ñz¡/GÁX±dö\c3j¯’äÄ *oØ\úr€úé¿Ê0‹èb4üÁIÎ ô‰v;À¦íˆb<ðGO9X 6’œQ’_ÃÁzøq€!·À„iŸyãÙÅåÄÀÑÛE\ ¼} Åyy+u-ü‘3‚{ܜ䂭˗ŒªêËhh»ö‘£šD´¹œ؉êmÐŒ"ë‘í…fs¾öPÀ@«·ÃfáŒ{9 +é{–­}ä˜âB¹œH“¦·ÃæÊ_ÊŒ¾Î¶Ñ‚¨‹A¯! q=’ÃfyPúr€^(>VöØD³ã‰hs93ÌÛå—Œñ¸þHû´hFt×$'†%½†¡ÏgÕÒ¢fªö±S»T£,g—Ø”ä™Ä¾` ÊžuìÔÎcec—3ñ@· ¶¨™— ZA+õ]É1@”,g†­Ä`` +¨_0PqüÖb\í»’³®$êrf œ`´Ú>`”²>ÖNCÂ\z=j"àKý~c¢÷ š_LRþ‰qŸ7û4µÔ @9åÛBG¨9€0c¡bû¸©G}w5#Z‰8O F£ñå¢5ÿZ«¶/85¬êrF ¡“Ûaè­ÍÚ—mâñŒjû‚cŠ´ãrbX©õÇFq•.²2bèÔ¿Ù\k’3£Ž®· ^åýr€ÁÒc‰øìÙ+¤Irf Gÿ8Àâúåƒdýª¢º×E踜Hmív€¡¼¶ðí£r.¡iÙë¨Öcå.gN”oM£¾`ŽæžfñÞŒ}]]ΌѢåJ›èØôËQ°)´ðl§VŒ#ɉ¦.®xr€q‡¾`ìh§*§V´õ#É™±Fo‡ÍåE(\0pw|øëÄ.Jqd<—3-å¸ö×1çñ—ŒêÉ…ýäó÷Q‚®·möµÑÀ×w"¬2"Ô°õ§ðáE¸œ¿o«‘M°sŸŽÉ¨qõ±)§ð•6¤%93F›”“1"]0˜böCÓs +®OôÐ.'Æ¿ß0ž¾ @Ð*¢÷v×½"5"Ù匠U¿“AAür€³Žß«tVZRš hÚõ>¸Úýã}|¿´ˆýB  @XK’3AçDt9lFYÐËQæÆE§ZJ³ðú7ƈ>ÇåÌh+–“ +1Â^ŽÉ(Ï>á³W!›èÓb-93ús/ÃDŒçÂÿ€èUŵ²êþ@ïeIΈÁOÏôr€uô/Æ-l:6]'y;vBÝ0†úr€1[9TEu3Ä–ã‘3£öÖo‡áÂPç/øQ¾)¸¹zŽE·&93Pªûí£zªûq€!{…_'çÈ©®=rfG$Çdذ/èÂ!³h/FñnqÉ™¡mýàãƒt|&b?¢y³Ya­î‘3¢!4oŒFüË);ÓûÈ{IjFô¢v€Z>eÆÈððA‘ç}â·c$93Ð-Ù혌>ìË1Õ‚¡LûÄqÇ{KrbàçŽ~;À@Ù¿`Ñ`p!Ù ´õYÎ Äe½`4yÉËÑò¶×í¾Þ?êÕÖƒ@Jr½Àì ß¾_º¿x®mÐØi’3ת“c"Ƨc20þø¯EœÖ³ä½,g†`F¸` ¶Çd˜Å>aÚ²s5j5É™¡òëcèÇû¡¬Ÿ[µœÓ.´ÖýÈ™ÐdýÜãè¢ÃD4ŽÒ±·É†o13b{¿×RßžßÖ;ÿœªg]#¹œ¿ßYìvL‚vûpLƾ*í”=ód©1";¥÷A@•äÃCào´§èaVX{ôÈ A…ï÷'ÁÖÒ^ïO÷¨Ÿ‚»wÖ #2Ë™P‰ú탙> ""FÐ×C¨.gÕ(ªÉ1 =ªóÛ1ÔÌw5ä<  QŒ\~1zÕÛÑg_އQ[ì×SðЖDËârf°²ÞŽÉ_†‰@¬yILç¸iDÁs9#Î +]ÝÄÛ1eˆï;w=ψ«$ùÅåÇF+~;†,F#>W»ú8·ä̘—ëvLF‹X{;Àècu^Ìcõó“Q"H\ÎŒ6õåÃh-ïåx¼–XÛ©xÈŒqä.g†•’ä˜ «úᘌnÝñ4ÎVaÞŠ#ÔÁ¢µ<ï€ +6~ß¾OñcñÛNÅCÍŽ´ær&ì™Ñ£~;&íˆo:‰Š×zËjF`Üû1|×>¢¬ ÁlÙ!’ä£Ûc2Ðö8&£‰ù)êʾáÍ$5—ƒèr;:z+ŽtôvL«;ª¡SÜ dô–äÌØ5=9&#ŠÆÛð d!T†µ¤¾­ü@øËñ €÷GŒoo„¶h7]Î ´ õvL†è‡a"Ä]:#Ä"Kâ&ž]EÏéó8xŒyÀ¢Õï»C[ä!)‚G¥uÛð=Y|°·Ø—ÍÁ´Æ#B<êØK…ø÷}­Ò<¨Ñ$B~DˆGÚ‹‹&ئy´ýV +{™æÁ-¿"Ø#ÑÞò‰«-™‡^o>8xô\ÏöйþŒò½öìw:pqHÍÁÁcÒ8#àA‰^ðÀŽï\Ÿ‰¯?2ÈÁÞcÕ4Îöhy>"Ä£KUJ¸'‘¥nÇÄ1ùì0÷þE¾8”}üGKÖÿ:6£:88ô2ÎxŒ\×#B<Ò·R8‹¶ãD™}ïC€¡÷Ùü¯ +žt+‚xR»o{ÒZ?ô.O/…œ§¾“o½Orq-¯–Ú ½«xàÿ÷É·žºþ&ŠÇºô}é;þo¾9ù6ßà .¶½:Þ|èÝéŸõ3ÑÍ·ù OZumNç³½»uàËù Ûˆ‰' Œ[^Ð{à|ž“W£›oc2~¬áÚ[E)7ôšŸõG}ðmÔçÕµ6?4èã‚sðYŸtù#_ôK—ï'Üô‡¦¢q<žåà³~Óõ‰|½ Õ/cå[_Ð{Àüßuëä‹>Ηëã.uóE¿hké­v;»]¨‚A¾®~ÐY¾h‚D¾È·¬/ŠëݾYÑ Ÿµe:>ë§ñà‹~×åikt;ºû¼)èåóÒÊéèG®›/òC ?ò±Ye&|§¡AŸÆÉgýQúÍýUe_Б\ãB? Cƒ~-ùà³~×óùÐÇ…Mk6§í.îXÃРŸ´28>ë×>o¾èˆ.»öþ˜W†¡^?‘Ž8ŽÏúß[¾èï/«³¸¹jê `¯Zzò´j¾ù"¿5²Ö5®©uSÁ Ùõ ³üΑÈùWµÒ²Ú¶ò~A~E‡mʬß|ÖÏI«æ"7V-å òZ ›Õ[ž7]Ôw¿)+YÙ§”[34ÈãÑÁgý]_"_ôwM*XÀfúÈNC½þ%|è÷ñ⋾&miv3¢œfûA¼ÒˆlÖ®ífO™°´ª•’­i¡ðnqAƒzÒcâøoKIä‹þU@³¦E¸tC½>ì“Ïú{¬‰|Ñ_MœQ9h˜~×*®hÐO:Ú8>ëëÙŒt–¯û"{¡ß¼I5myA½Ë·~ÓYž´¢’X»Âml« ԳΎÏê©<ø"?¸ýÏ¿…l‹{ +êõ qŠ>ôS/åæ³þ([_ntŸþÈ[_РŸ¸>ëçþà‹þ๠OÐémsq½†z}¬ó<øó/-ÚúÏúØ\}ŸRŠíîäºþ^>I« t–/eÝ|‘Snbål{çàíýР/ceàCR{ðY•$Έ•åUæ0ÔécÔïùà³~nåæ‹þП½æ_Y)¥a¨×ŸK·×ñ¡²0o>ôWªº½³¦4MSœ¡A¿ÌvðY?mýÀýµ¿ œ_Ǩ¯ÙP¯7­úÔf¹ù¬(ïïú9V¬åóÚ$ÍÏq¡Ü1#œ\ÖEIÂò†üÒ~ÔT»¡A>«×Ún¾èkÖŠÛÉÞ õò¸}­ƒùÝ›Ïòh‡ú©¹M{}tçn¨×o+•ƒÏúyŽ›Ïú-gù\,éüÚ®¹ ú9­ƒý*£ùÉý-DËúÕèk C½|mT>ËgÍâÈgyì‹*5²Ž5hì—Ôëc·úÁ‡~éeÜ|Ñ_zJ¨”aï?tôò¸l–ƒÎòIkxä³<š»$-¦—œßÑTÔëÇÙñçŸNÕ'åGÑ„9×Z2¬4C|Æu|ÈÔn¾èÏ.Ÿ‹¤¶–…%(ÝP¯>>ë—Uo>ëó0%OPì~˃»…G½þ£üN+îÉgý•öB'LÍ?ýR‹C½>Q>ôÑ:èæ‹þÐÞx>ùZuyôê(íÙ,^ƺ٠«Ötíq`¬_MÈ>Ô«7Òµq|È£N­ú¹4}ͺ¬_¡íÔe¨×G (úÄÿÜüd‡¢e²~…®WC½~¡ý¦ÆgýBýÁgýÑ$×psµ~5‘ÁÍP¯ŸI¢ãC9ùâCÿ²¼Ôk @^85Dªed›¥LHbóäãQ×ï¸NLZuÊÜ‘ÛÁgq8>øÐïi¿sÁn|ú+íÚ­¨×ŸÚ#}XCúg»Ü²$ A º£9¨•­ðn•á…ÃÞF”à.l·¿\Ì¿Õj/Ô׋‡}‹rôÂÉÃØ{zݳE å(Ôjgjñæg•çÅ»?‚j`ÛòluEójõGZ‘oÞ¤ÎñÁ“÷ýqŒmJVª…UYªÕ¿Y4†…‡ÿ\q&/žpKFœcSŠãØo©V’h +[Õ¥ú#!?PÓƒïpÑ(¡^^ü—£TÞý[ï¼û¯fÏ#rý½¢¦ZýmÅ­+<üµGßøâáß—í£5Ncÿá ÅU«¿Jä’ÂÛ~5ÈO¾ 8ïËíú³Fºµú EÑ.<ü™õ‡=ÏȣЙ¯½R·P«ýШn…‡ýÅ<üeF R/öv¦Ó_î½GUJæÝºý¥É«þŠB‘»æsÆË3ÔêNöJò°oQÜ_8yÓâý€×â9ú±oèI9Õbw¡7?¼Û“7ixøOÕðG©¿‘[œjõ·é«þ˜öúàá¿”Âiô~÷¾ òûyÔê¯ÃìÅšÒÖõƒ'¤"áD¨%ן¹¯T«?ïü‡‡?ºFùàáߨ6?§Îù(]©Vÿ¾ú›‡¿ÑøâáßѺí§ÁO¬•jõo­Ï¥.<ù“ÉÑ/YîÏbK±Ø6¸½pØ£šñ{ŽŸmXà1Ç–µ–ju·ý’úááŽîi~ðp—Ø{ÃtoVCÿ½ZªÕ^l¼y|ÀûÁ>xØ#ÈÃÉšÞ³ÅkïqÙjõSÆ‹Ç|‰?xøã­°·Çxjn5©Vó|ñø@S>pØ/ÖÀ»dÑꋞInµÚ#FÚ‹·ºæÐžÐcé êY´­H ¡#νððŸóÙ„_þø³ƒTnjƒfKµúkœcÁýƒñúÀa?:íPQž×>jÜQ«=Kd†ÂãÚßùÁß96NÇȪ2Œ—­V¤ìõâÝVžùüòð•Xo£´G¡W¬îä/œÿGä¿4¼‘…¶·àÉs‹·]ÊŽZÜ!ð ÷SU«=nò>CìY-<ò"[„ZíÕ¦½xŸôäöÁÃ7y/VسáñÇ*5ÕêÙ®ÐæÖ?`úÇQ 1‚žðÞZt(‘GC­æ(qòâñ‰T?xø·µö/ó’¬X‚Ä:R-þ¼zTôÂûž7’þ}ÐA}¯-ªd\ÃP«?¢d¼xßó9¿xøs$)æÕnR±ØÎP«=bm½xØËîàþð°?±ÆýßõŸÏeµú{«õâýTy´þÖbú4²d!â®…ZìÊl/Þ|7ÛN&1ûa+Û)Ü”5S­ö8¼ñâ=fV4Y/þèóÃItÝÃUEL¥Zý;/þ¤í'üðs+Æ@ÇíWœxˆÅ½£Ûl/Ü#ò™ü/w„ྣQöR¨ÏÏ–mµÚË/ÜãÑ¢5zá°‘Dú´ì¤–³§ZÝ»ÆVöȯ_<ìeÄt:röMj†—oQ‹?þ=þÉïxþðœ߸Ⱦyø&|¯©3Õê/3’{áá?8®Ã‹‡ÿ|Ú²Þ¦ÝùO£ÖS­þÈáëÅû}j?xø¯§Š…?þ(ñj©ȳ…÷¥Æ<¡pdT´OY³ÖÙÏP«?úÄ7¨A6<üÑ'îõ6¡qc!»hª—çkQt…÷‹ÕŽ./y¦30I·T«=h {=›ðËÃþ„Jý)CðŸy6Ôâ?—<ËMþx´þhlöA¢=;ehà!7µ¨Õu…_¼ç„'œ_<ü犜Šø”!ø¯ýN¨ÅßN÷[xO +c}ñ„ö[·GsÛñ÷ ©V´kúâõ线xøwŽö÷éÔ¡ý¤gU[-þ¸þqò…‡¿ÍH‘/þÜ¿¬ˆÈE÷|qH~‰ŽZüE‘ú_¼gæmÀžü *ë/zSÏ©G-ö̺^¸çœÁ퇻MŒ %½§«-^ªÅq¢öâÍS6ÙOž†%~•ðžî¤3Ë­ÿNìqòÃßvïñ‡'‚·‘Å9‡5ÕÊ =#B76ô­ëŠ•Öû<»ÙÍ 8YÏ0G­üœ±›ØLå­I©~ѤídH~w:´ÄR¬8Jlß#2õV"2MµòèöÀÈÄF¢M®XaÝe­¼*ihDw¨•Ÿûi£žPäž,@õòíь٨*?'‹À;‹S­|_qQÏy\~·¿G¬8ÖºÏ×q¬‹ã¤4ÕÊ늖…¸<È–jåQ`ƒ7>U<Ù,já[ÓNÒú]îDÛj©Vy‰ôûº·YOµòª{w„îc8:³¢V|ùË#<ûœ—oñjá{Óµ˜eM>¼­®)Vœ[\+¼Bè®ÖÐÐŽT+¯xÔ/ÎÒzª_-¢j`ÓGò(jáG3ÚNCMïju±¥XqÚ±3mïbQ±bïC­¼× =‚'ÛÝ|„¤Hª•Ç<÷5ïkÊ5m$—P ÏÝVð¸Ú7ÖdõØÍP+–yÏ´KÏ«…£Ó +µò³Ç±÷¾òj "PR-<^+‘®;bô®{¦E­ü˜±Ÿ éù®—mš¦ZyÈ^YSÊ»Åxã­T ¯¨õ{þ 'q×ë}øLµò8ñ½?h©ón1bÅ‘ëörAÞ-¤ËØäP o$‘ÅIo‡äQðJ¨•Gë#œ§‹—«UØb¨wº‘ kî©|Fñ$V´Í—GU©VžÕÓ¦xb=tC޵£UvŠ'Sèâÿ¡Çl3ÕÂ#YÌéx²žâùrÔÊ£Œ=Bš9Š´5MõòEçvšóÖ~ßòxÔÊãÔ÷²Ñs®¾Èeœjåñ$Ùó™ÃL.?ü=vÕ·ÑýI(ÞÄX;<›VÔÊOÙö¶¼;¸ÈÒT Þ°{aH«ãN±%E­|$Mñ¼*w¹¦RÕÂ# ö=Që·À‡6ÆLµògaFtn• k6I±àŒ[¾#MÍÚŽb“‹Zxi¶ö¹¨pÓÃG3ÄŠÛ~ŸbdÜú/ÈtãáÇOýïVì¦îìð¸>E-<ö!‚A¼…<üÀ¦­T+Þ.F´º£÷:RAÑeÆT7×]iCön©~ é>¼Ö3o¯Zª—ÇÛTÈ6Ïh o ù4®ZøÆ‹·šús¯ðÎD&âT ß'ÇÉ¢Nž{…ws×T ïBÌ*9<pHª…GŒ<ÂDç^áaDWª‡Ÿ WÈÖ`Éíé]RÅv nÙF6ï×{¿\þ~áïÐï7p½Ä>^@ÿ|XA÷÷,ý(æÇ¡¢Ðe?õ1òð݆——‰2ü¿†žo Pݲ¡Á³ú÷Ðþâvî®§{œ\¾ñŸí*»²%…a©Lï`°YòOl6 ªï_·Tºl^ä¿T(LW™Ÿ0 +¨°âK…"7­¾´²Ù¿¨P$T!Y0¬¤=Š/µ8”¦¸B˜FŠ¿T(àOP"&ŒvÙYðaâ{Øžá §VjcÁ— +E*k ËiöÊ&¬øRK‘æüjºàOK/þ— +Ê´ú5΋_T(lu9 ¦4²ý`â{…s¸Ì •_*¥ŽêpÎu<Š/ +DäðÃÁ“òÝþ¥¶"w›YŒt†{ÍâC…BÐÞeÁn…úEmjT]°%ò€¿¨­˜¡³à’ÈÄþ¢þ¬‘ŒÆ”_Ô>yY>B:&}_üKí÷À0Û\0U>Š/µ>Á†çüûKí¨r&íßЧòü¥BQaàó‚q¸7®¾ÔŽuL­º`4`þ¢B1TçdX‹>—ûa"cEl– + (°ödì— +…IŸÍY*¼¶ä§*|©]©àÆ‚{K¹©PL] ÓgâKíŠ[­øÒ˜j[~*î‡z«ºÌ¹óy¿T(P#³/m¹—§|©èN2=ÜDu´òô¿ßëtÏ_*Ø^÷ Tà ²öj”õ~˜¨'üÁÜ”?T( +æ¼€&½_Ô>·É´v^¦þ¡ân²Ìæ¾>ï÷¥v×n·g¿Ô~ñŠb·9ÙhOýR¡Ð<ÍïÌ|ü§,ø0ñ}8×#ãúã-¾ÔŽ[x¼æðÈoL}©Pˆõú5Ê{ì³…¢;x‰L%?{úR;ûzV¿ŒŠ?ôɾµ¬ü‡š!Å‡Ú +ÅñŒ©÷5#_ê³ÆŸ¾ñ—Ú +ø±`ûß_êua³eeš~Q[ÑŠxëEy}ëΗÚï‡Êí°õO~©UáßѬkáÛýKíH‡'S7ötÌ¿T(0òÄfŠÀsò/µ«áËȦ9h±WøKíªP` nÖwÿ¥våAmtC+ŸŸêö¥BQÅŠ/ ËhÏ_jWPûþz·2gÞ˜ºµ½«¹µN0Wi4r÷Ř•ö›CQkŒGó9Êðq†l‡n›N¨ Á<5ŸjúØóÚ×)6üTÜ\‚Â6ä(Êh`žœZЉ£¡ÎÝ5ò¨J0×h·P¬Ñp+dïõó4÷É©:ÚP Á\Ô‘²{8S9›J½j!ø \‰S&ržæffż+§rߦª­ª’ ~ÒÉ4æ?ÔÐ#€ ‚¹q`„pæ8OpýB0ç8F¸P ,œ(DAJ•àgÆÉ1cÚˆ(œ¦¬ †Ÿ^ƒÎ)ÁNŽ¢ÏáàÂ\«¼Ï©´®GQk¬á0×C´ogj½+˜4Bùó"ÅãSµìäƒõ‹á§¨§¸uͧàB!m4‚Y‘"¿‘ {Ò‚¨ª“ +.Û©vjá4¯]3Áìp{‰›…‡¶qÖ;ìÈùŠŠ¾³¯.Kf“‘?'¯š¶bÁ¤˜ÁoW²È9y…A+³ÂÔ<€Òè7ÿÐg¤ÌŠ4ÓkQÍnþáwÃ<ϵšâÇ0 Þ5æ¤vQà\~ð”G:KhÊð32Jd`JµçÐÙ &Ej½{SÆÝDí`V¨Ç(¨šn +"ñÊ ˜¢[QÚMÁ‚Ä‚b-ÚbWè`'óÆ0+³¾<¦š›‚ #Ì +Ø _¾×~S0Göo˜c@qJí¦ ´&™`VT¯ßø+盂’Õ„`V”ºªtB-7Q7›ÌŠ4ÌŸ +^è¦`ÂÍ+Á¤€ËíAÙ; ïÖs%˜V³Ÿ¶a6_¡Á¬È#n·V`¨º£æ‹ò÷©šï ·.õP8&EE“ðs×:Ûm(š¥n³%Ã7¸ЦM`V`Æ +…X:箸`!˜˜„üýNã7…¹ñ´ýùïñuíÃö÷°¨ÒfE‹œA¡²ð°•a Õ8“s?o]¤•N0 ´F¨é8ƒ–¡Y jfEI +´ë±¸ˆH‡Y!ºÌJ;çN­Æ¹&…Ž‚’vaÓ>”¿?L:ÎBÿõ™Ó³ Zì3ÝNß§ä»5TÅ+ÀH©³bnrQx¤›|øLÁ¢ªŸ-èf_ê£e‚…Å®Tåf_Â…g‚…†@úý¾¦È¥…>ŸçîߣÑÞ{JÚºü*ü§Ð±Ëy‰„ž¨?‚Ôüž0åóØÈU‚_Eòã•\oî!‡s!˜Ú-ÖHåæ^J×çð£kè7ÅVPø[üÃ?w…ö¸so*R©ÿ<9κsOæô(Fð¯ËÍrŒhFð/làöSâU~% 5î¹k‹ëpøWD‰[1%J§Ã?ƒVäØŠ©H=ü310,ö{n\¨ü&_ĵ~Zì¢Ï÷#>‡S¯÷{}‚֔랡Àta?Š–= QIêÝ“ö}¶¿ep2‘¶S‚e·ülÕÍ>¯æžB1†]ôù¾¯8J]Q³á·ÁHP’ó} ”àG1Ç10½¹¨E;Á?údŸ~Ki Fð£°â›êèñ´FU†ÅhAáßFWÛ;ÁC(Ù—oÈžò}ï ?ŠVýNZ+”{–â5~œŽHPnî¡Â +Á?¼(¸ä›|0£™àG1$¨¤½ÓuÃÃ+ÅðöÓ3¦bÄ :ü(ZòKa¾K4ÕqÑ6LḅÑgøQX ê¶«%ÛŽU‡èÝÅÏ6 *óï> %8»‘¬DB›ü‘s¡ìëˆ&‚oó<œ’>ôë­H:#ø‡A¥ª_¯ô9ãÀ÷=fùºLt² ߃FŠ+é³ô -/|Ï2‹@=’¯»6/-¾Öw?ÆŠö5WÍ*_ã•Æ!ªß×\áú”àkè«‘ fá;öÈq6‡y°Ä%†"¡ß¼Öh×b$¶ÚÉVäÒŠ| ¯=âwþÙŠŒ«*³¢ìì‡÷ûlÅvf +?""ø³yÔÊ0+šŠSe[1ͳ¶J0+à\C¡F–¾åÈ|‡Y¡RâÇZK'Ô±n+Ì +Ì~eN[Gò¯³¢·(Òyt;æ§­`VŒ–‚²6Ž“¬ðÍF0)°>ºY ßPVtÌŠì¶T_N\ fEM?–ôKÀ&#ê‹Ã¬hÕüÇࡾDæG´;Ì +1?x¯ž-P=J'˜¨Áñ[Õ¾ÄP;eA[OHÍslµ”fêý¤ ö4 heõŸ’§¥ýË?ëu½Å†YQʪ +6ýÇ—ž­ÌŠÚW­UÊ—ðáË›m˜kuQ}sQQ«¼»o˜:’p7ÔÀ­@?Ù?´`V ŒøUu™SU(Zrï¾aV Óø{M;ÿmR³L +E$Ç'Ûù…e‚Y‚è{XÿÖ‹ôäÕ¨ò¾µaÒÓ³¾¥Üf¢3ÕvîAQ„@^?…YËÎz4J0)à–ÔϬ#oO¯¸¼;Ì +TxßCcËQLE0+0ÎzD)’PŽ"ºß†Y¡>C‚*³ÕnE“ÔfEOÉxw='—2VñÚ0)¦­ñíájô;y®5ÌŠ"Õψ—sò6z³¢õ¸©ÇX@ÑK+³/ä/˜ÃNL5õïƒY ö“#CÚ9y‹fäÀ•4ЦÇ[èò`V´Û·z¼©G¸9Ì +•Èð–õË>Ôc˜= +UõK>ÌbÊðd”ÓýR¨~åÛ¢ÒfE5ó{GGç9jé‘ųó¥o…u=ˆW«„² «zÀÍêr^£œðt˜˜6Š£˜}«…`Vू‚S;¯¼L`V ²øöXôe þÄÇ:LŠ‚þ¾÷‰•ÄaV´¹¹Ë—¤Ì +”ÃP Ì“ç"ñ€“6!ù]å:¾ L˜ÿŒ`V Cøæ¬_N;!³ÂŠøW¥qœU¢õ:L +$‡úÏþpNž’È둱~ú~_/˜Ìò(³â£ + Pmò‡Òz”Éâ’%z)i%˜ͧÅgôZ¶É·<ô†YÑm!P";ý €]‚I¡²ìT-å=L e‰•ޱ€} L +ƒ)h‹êèórÙìPÍ@áûòV¨ 1‚IÑÑ7ü}Ú£@üw‚Ya¶¼(|HÝ +©2L +Œ.Í·‡rœ“ÃhåN0+zç0K㜼¡àÁGÉPÙDg9çõ³GQÕYÿ|ÏæßüUOqªtM˜‘¾)Ïy¨¥»ç=L¬‡/ñ[PÉO•½™»«™¬[6)éZÿ0±>™¬Cõ~U/ño»ï2;zž<^óab=vš#•®‰ïžÚn&Öé³ð,š/¿ü0±CÍL´9[=“çÃ`}õw†ñÿf{È_!þÁÄzˆ™dp¥|Û&Ö#èg NKJó×&Ö×’Ëú ¯hÿ`b}F +—‰¢|•è듎Ù&;<÷óƒYë;üŸ6 ãyÚ=?˜Xß›MƒŒ ãûüÃÄz3|À¦ÏUþ`öú¢3fqÝ ®ß˜½>骕ëý“]‚‡ÚŠŒz»à–G¾?é¡¶Bt¹º4 ͳÇCí[J^áÏUøÙþR[1l¹4¸¯B½ùµ_®ÚÜq—â¥vlŒ±:m™!¬W2¼T( +Æ!‡[‚ß`ÅKíø†![¨bˆ(W|ßL¬Ôn‡'ô/*H«õ©èax£k‹— +ÅHÒû‚Û›Ô/U&cf’+ÇÊeæ¥BQ1Äê‚{ÖtÊ—Ú•ÒòºôÉa²Cê~ëúšMÖ¥ æ^?Ë>@~µ'Œ°õ·ÓŸyÖ!!ú9Cà•ŒpxÌçCí¯òËÃ?Z¾½áÃìw®ã·à/ +Á”Ó}Ó_*µJÉt8žgj;D)ÙKJÊÃçÄK…ÂfÍ]¥±¯é‚§Þ‡ +…Øœúú•Û/µ«A³æ0ŒX½öx©PdÓTÿv‹_Ô®Pˆ`ÿØ2oý*Qµk W̸³_5ðf¶Eš{Ú¸jÚ_*s0r½½4V¼Ô®äô¼àšõV¼ÔVädmÁ)Õû/Š&i¸5Ñž/_ý0{=þrcR[½µðÙí†À{‹‡ÚŠš’W–\åÜÌ^¨Å(y{÷‡¹g XÝÚÇ}I7s¿“<x˜û¥áp{ùñЛٱ—Êt¬oYóJëGk³utt„tÏN³³aȬápôµëU&Ö—¦Ò×Ä w ¸‰XݲM;eÿáÑûõë³+Æu¡õ¶@˜]“Fê>*Wy˜]õÐïM÷˜{Û ­i*•Ëhüav©kÚD­W¡˜]çÕRYhÊ×ò›ˆÕf]}v´4®¯y˜íNúcýf÷µVæ òL­?˜»s®^_.»ð0±^¶PÍz­˜XÙ.ÛÏÛÇe†ïPÓÏŽdÁ”I0ßSucˆA®#Ô9Ì/luHؼTOóGÝ ë0)¼QؼdõX0­ól½úlná=û÷M¦UíCÙ«b8ñOÍŸoCz2Ê9€ ý‹®ßC#3šÌz”á"YF> +3i³"‡•$ÇÝþC “üÇ£K›¶(;º¡–„`.Úã£ZS[‘ES&˜½ÂÐáwØÊég<’¤Nð5kHÏſtdF¹ÜYÍþQ3ˆìæA‚YQ¼-ƒ’SÂðŸV#lf¯çR+îý(úŒîf~쑺œƒ£5F¤9ÌU~Uí5•‰œsÃkU#øòH˜ûœÒ3 ÌÀ°ýCZžÆÓÿÏv¹e[‚@tF½DÀÇü'Ö•€Z9ן»º+Ù©£‚x~L§í…Ÿ¡"d&0D0 xtlS‘‘üiÄ|„ê½î8lµe‡ÌŠH ô¢;1eä†Ì.þ°ëuÿª6G[ÈŸn¯ÇiÈSB€¬Ì™3dtfLK9¹"åzT~¿H&féã¤ß(2ÉÜe4+±¾â.ûÀ±ß™!3PŸ‹ý(ûÀGÒHæÎgÌܨRfÙ>ÑŸ ÉLx´ê(57ý&TßZò§k-Æ\ÝsG:þã•dî÷Paz<Ò9÷Êqzb$:Äñ¦&!û2±çÝIþô #ð3è&PoÉß6Wb Ãe¼Šˆ6ŸfmËD<¥5~0nÈUÜüi×:© àhcsGu³H­*$3Q¥¦{Ù72›­‘LDq]êÛŒì…K·A*ÍsÛ»ïqÀì9߆̄öîh,¢Ö²œ_™ ´€ù1´u{áp%™eÆž4Ùã~l’Ì„×Ü\d–ìÓ¨3æ%3òëxÚ$YDtñGfSY~ ?p +Z†NÈDÌ™ >½ìãÐg&!™‰¬ÆxÔeî8ÔQ+© ¨ÔØw·=9âÙ—³ý P¥Œü½^wsh$'»'ësOMÃ^¸eã´d&P­ÂÞú< ¸î³%3¡3Ÿøn.ÞÎÕIå÷¥eô˜îÞ‚¥ÖâÖÕ„G²[ „Z‹èÃcCPMZû„ʀϥÍÖ¨ÆÀ«2€F2[M.&ßïWó88 ³ßUŠ÷ÈÔ`¯€P èXs,¹¢We Ç]ò 'Óþ.9T\2OÑ¥¯~£6#™¦Üj2 ¶`àµÀ”‘| Ï0W‹ÌƒzþK°¯…4GÈx•eaÚY%GàÛ/@àqhsfÆã–[Ã[Ýýñ’™k}¢6÷²±;™í!3xŒe£ÐÉ> |&o™@G„Ì Û Y~(d&´d©C‡+{§J÷É2p•ãºîûWá3yM†LŠhæ"¥g>s]ÍÝ ™‰>Þ¯ÿæÜ}‰ Y2MÞ‹º¶±ˆÑ£)[2¶,¼´ý£ +ó ™:Þ1jo(ï²Sä×EßÄ“b¾ßï 6ÉDÚÁøÖsJu™{Kfbh_;|¬!ãO½t’™@;šÃ¥›ðùV¢%3áñs&Ø}Oûh$óûÚG˜wtq¾ %¬2PÕb_Q¯WîÉÓëŽA2eXl-Ò¶îe{ÕA*:5O©#V÷ªÑêRÀ<?·Í.{Ù†W’™h°G}78 ¬e\†Ì„kËG¾µ–™°*±S­îG°:[?¶RƒóZ<•Ýà€È¡dÉLHtÔ(ÈCNêiÖÎ%3Qz‹MAšÏèhŽ3šC&£cI­Öô:ç •œwºK;»k•Tºf¸Ù;d-Àè$3Ñ0–Æ£vêB3cêUùýø=†}ÙKÆ8ÐXæ×udá|û^²à†i$3QÛ WÛ‡-˜e;ÉLH“Xâ؇-(d&ŠgyT¯'õwú ™™–õQq œ_…•w’™1œâQqßej¢™èÚ#r*ZªíQºe™ ~|¬¶r’.N2¸|â ¼ÎÒ–Ç2&3Vˆ¸>¹‡«+³5d&ÐùÇâ³¹ÈîLû™@++”‚W]YŸùF ”™y'f+ïðþsÃLD™#“Xª¬¼+Ï0Aò‡(Y ÀŽó›¬ç‡BfwT,=ÄÊ<ú´hGf¢×,ô˜‰Ž…ŒéGå÷›åÙÜŒ¾œ¨–Ì„ûúM¥­Ñ¢`â(yS…ÌÄ[ Ðq ]©Wž£5’ù}ªñ¨••z žŽd&Pó*ëÜZÝIò‡x O1\ï›È$™ßy=Ê?«Fö8ÉL-ù¨ív„ĶäM gÔǧqÚí¬Že&F³ô¨»¡(ÿ:ÚƒN2}æîs7 zJò‡¨=ì{߈ÖË$™‰-*ùî(@ T+ÉLx´¨x¤¥î8ï6ê$ùCäIõ}à}EŽÊ¯[Æ ö\vv£lB2qCãIC9>ÀŠ›?€”ØAT½~Ž…ÅHf×X¸U΢Käü’™@10÷SpÚ¬b[ü¼]$ßnó$F§n$3H‹U;nè€O³5I&½ˆÅQãn;‰×Z«äQrg Êñðî“d&†ç©>…r`³•ó!3ѧ¤‡ÛI½feN’?„Zzà&=¿ +-_#™‰Ö[¬ ôI½VÍ…ä! +Oû²S¯IËl ™ o‘0Úªž/XÉ hZè<åã]V™°¬©Škß *$3 cD*Õy~“wR?ï«D”×^NêyŸƒe&ÐoÆ1¡19¹ç]3øCþâù±Šmߎˆe&$÷MDÑHÖÍ?@éñ£ðÊÜǹ*³>d&0,$á6ý¥²ü!êˆb÷çtÔüQINíÍÓ#Ë¢!ó3ü?ÀcñT÷üVyÎqYèÈbòÝâlÁ@Xx‹GeøIp”|eùjAY|€°ÐŒÚÒꩵ^[–óï‡` ^‹1glTQê‹X¾[‚-ôÓH=-Ëà4R.VÉw‹C°…|:¯ÇÂäùÖÓøRïåeV–/b[üaV1ujÖbVXâÝà¼Ï½|¯´&ïó4ʃ*ÚL–ï‡` ÂÂzîG¥vÌ[M—|·8[ÔOÿøXHÍoá~¯Ç"î„%ß-Á ¼mhìzkÛUÐF§É%_-ˆ ‹®±Q¸šN1Ç~©w‡°á #¿…‹c'…½¥t‰wƒó>0ðø˜¹K±| ¬+Éw‹C°a‘‘‰ ?k½X#ùê@9|€pP‰3Å wn#tg¥‘|·8[0eÆQw´M''pEN’ï‡` ^ kÒÏ}gÞÔ»ÃØpð IßCô$K¾ZA ,4ö¥÷Üvf3;ä»Ã!ØpÈ]B«}.;ÃæU’ï‡`û™D:F“´¨~.;3Ÿ•ä»Å!Ø‚°ð™@©ç²3ÓL»ï‡` ÂB{h¼Îeg˜ìœä«dñÂB<6 +ß¹ìæ$ß-Áþ3Qõ:Ö*”Ê“öJêÝ@/ʼn_Ï7Ï×¥8}ß ËwƒC°a¡-ÎqFWÖ,(!_-ˆ ‹’«°ftÕiÉâòÝâlÁÀk!S0±=¡7óIòÝâlÁ@X4Ëz.½íÐ\Žz7Øïó÷éõø¼H_N¡TMY¾A -JìâSOVךµ)ä»Å!Ø‚°°<µYOVã‘|·8[0ÚòçÖVõbñÊw‹C°?3Ù¶áƒä»Å!Ø‚°¨#΢´†Ç¢'ù?Ûå–-K +ÑõRÐùO¬#!•Èsë¯*Übª¼ü¹Í %>Þ%ÎujÎúó§äßKÔ ^‚'äý ³ù%Bþ½DÍà%xB.Ñì=¨Þ[]w×·N¤ü{‰šÁKð„稜®{¾5åŸKÐ Zâ3!–À. +åÍ-ñ¾øRþ½DÍà%xŸ%”*AõñÁ”/Q3x žK¼ÎÙû¢þ¬Vù÷ +5ƒWà ¹‚¿aî“4Øé$ÿ\‚fП ïgmŽüX"äßKÔ ^‚'ä6Ósš6*xð³Iòï%j/ÁþìBœ +^-òï%j/Á>·ÝÚ`—íï£2åß+Ô ^'Ëîÿö‚ÑM<Ê£þ»À‡?öÿà× ô?1wÔŸæ‹'óŒS~Å®ßÿ$¦£þ4_<™gœŠFºP™ËÔzÔŸæ‹'óŒS¥Þÿ­µÿ)qGýežø2ÿÁ©Áˆ•·,ÒGýi¾x2Ï85c™ƒJ›ô±Kýi¾x2Ïxš÷´«ÔÄÈÒRZ/ž¬3NÍêþÏ·SEmZê/óÄ—ùžívkñõY6ªGýi¾x2Ï8uóA7I7ë{•úá%¿ÝÔRêÇë)Fñþ¾Žúás[¶¸+ÇãRJý÷E…eëšÖCüÐ{æ~ÞmR?/ÎÌgÖÅ«²Ì¶¥Ô®ÉëÚ”aq8»Ô¿2|ð ¥ +?µïR™G¶ˆl°a®.¥~ðŒ•¦u±Ú¤ÄýÔ ŒÌíZ‹íR™‡¡ä1¯‚J§îR?üȯ‡IÊ ê³ÄnáxòÚ«î×z¨|[jJ¥ÇÆòR™7Ñ‹ŸN¶ÄJýð:"pÆ„p/õÃï¼Ú1l—§ùzùP™GõI¾ó e ?8L=#²ùýÊB›â‡ý1§¨Úc’Êüêý2©ÝÙKç?´åÙàáYQ÷X½TæwË’Š?VŠV±—úág\‡S\OÓŽ`.•øÕZfÞ®b£xdºR?üÌä‹WŠ<§¥~ø•^ˆ~¤Ke©Ì÷7´5*²tÌ)¥~xO/lÖ*²tâ@Ke¡i§ „|ñ–‘žê‡×|Ÿ[ªÏ5]•ùñZÿíM]ªk‰:2FŒº4µH¥GýðÏ›á™Ôv)âg—Ê<ŠûŒ¡> +idR?¼kŒ¬M‘®¦^*ó1n½¼>^âߟƒy½œy‹{©Ì›=n§ÚVñû ¸£2î"z5ÔÊÃ[{ÊìU?üšq[èh¶Ö<³@cÕgS÷èMFÓR™ß-/ÝQ1ï^m´üöT?<š…é³Þ—H›Tâw“Ü«í^E›Ö¥Ô¿s¯f»Ë)Z*ó8‡p*˜¬ÀB/š˜*óh¤âÖMÄË>\ÓKýð+.·IÇ™ŽÈ“AKvÃÊÖ“Ì®Êül3>FQèëc¶®?¸ÅVÿ»ßâMß/ •q9Ж\¿AÓ¿g©Œ›´™K¯# kÙºâ‡Þ’´I…”ãõ(¥2ïž7ˆDT1å¨Î£Tæ×ܱÙÙ­bÊÑÌ‘Ê<.6FÆSþÞTŠGBl-pÔAF= å®f!ãðï•úòM*óO)Š4Y÷JñØ^*ó2ÞïÆJ÷[Vo}•Ê<žAqbHFOhmÒ~ª~äuúM• ½J/•yÜ\|?¾Ëï~Þ=»Tæ5ÃUðw»H¬™ŸSeÜ2Ñ÷Ee¹K‰zĪ>RV'•yß#œ o̪úgÐKe~íÇÜ;UýÝUâ{k™üÚ¦ªÿø©Ì÷–ßódô»Ýý¼6Jeo½8üûáui‰Œcá4$D#Ç™ž=#®?nÄî•é9EƵ=v×x¶{ü÷ªÌ[:FŒ¨žn|žù¨Ì#¥¥!'=GûºJe~uKKíÖ|ð3©Ge~÷§#uTD;ÞâÕyTâqôËbÅl\Þ«Ìw<‹bd6¯ïAŽ.‘q±ljN°]óˆåY"ãciàh”O\¨R™G;í1â·ìƒ×þ8ÈQ™G&?—ÕçxÛ%2î£%.ªw³}m_qirâªã„w'•ù}­£°n½¾&òÔœ«?š­8S;ðs5-•y4q-6Ƽ¾öTú«1=z½õV,Jµ_‘á9Ó´.?QÕ± ÷Y*óèRÃ:¾±ÂjÌ–'Ÿ*ó¸’XÅ\îV‡É¥2¿f†‰ö%÷báÚ2Je~»ÆQN4V÷f‘ F‰„ÏÞ%ÎxâåuovâHe^fÍù\þá­;©Ì_±Ý)è‡/¿6«ÌëùÒ6*¬ðì¤2oŸhk+I!g/•q_VCoõïâZ*ó¨WiiÜêßÑÙ7 ÇÇ÷üœÞ*GÙã=¥2/SâÜdyå(¼>2§¥ÊüØé&‚Bv ‰ÈIe^£ÅÈD <<Â;³TªÌ[ú¦ Û¾æïB-•ñõ¦L<ìú2.<}3UâqnÛ}®óÆÖ’Ç“*ó]ó P»Æ=ý'­TæGíã$®}”+‘ñ¹Ò—‘*´º–”ʼ½nÕV?¡%¨ˆÓ½TæákqÎOG¯—ÏçÀQ™‡³Æq¢É8±%øì¡³Tâ½{zZß[àQÇG©Ì£¹ÅÎìéNlÉSižº}TæõyË=#v;ëÓ@•yô #SöÝ/Zu‡«¾<ª3Ü'ºµo(¡ºý>ì?5;FðïžÏÄKOJ%û­SÿÃÛÓó½»bþ±DîÁ¯}; yƒýˆdÉBþÐ'xœæ/Ö=}ŒøíGgŒi©dï”±/ûHÿòaNÏ•õ¼¯,ZÌ}E¦ÍFÒxaØÅqâ³TæÑ6Å­à«Njߣë8*ñ©.v´yïç(uñŽ8*óCò4Q½l^Þg'•yy‹>N¤WIW‘i·”º"2§¼ù5?KÝꛟaßê´_Z—ÝŸ>jÌ×åêŸ9òÎÿŠ!QÛO ép·e½Î@?šoºû4¦ÆüÕï(hÜ;·£gžo5¤ ¬¹ý<&~~ó«äùScþèyý¾âF¤o> ƒþÔ›”íLdyß]6ÿĘ>×±D¤¶ö®M³ŸòqîÒún*¯¨O”þSC>ÜR·MIÞ_Gõ§Æ|³eèóªù}Ÿ*cöŸòQÎjùx‡÷°áý©1®þÞž~RÞß/)ù¯”ÀLUÖaÆe&½‡Mpqš?5ä£ÉÎõK¸ÒíªèNQ é¸p¦µ1öä„ l[{sqßÁÁ\‹jeüê*ánÒ~jÈG˲Ð0iü¤ÔUo姆|ɪ+¿ÂIëÎu– †|Ü¢¬¢+VWv>NLjÈo¹®=Ç ÜuUp3]–i«!},§úD°ÅmçËð27õµš¸EÔò,7Ã׌aþ"Èò|üà6Yè¿Û?~ç®È7[Ñ´t’¿#+ÿéÊút¶¸Cã;Fc«^ïÔÍ–oÚ£ßÿ°ÇrKå@M­ßÀR9áMo`©¨ó±â'`*Tl˜~¥rÇçÞiS9GBž°T £‘',•£~^€©€I½_ÉT`(ܯd*péÔX*Ь|S9€›Ü½hS97}oS9/v>S)€Jë÷á3•*¤âLå@wý,‘§K'õf*`Iï%›JL¯zﳩxî°7°Tàï}6•9“z3•0~ppw/6•0C碷Ê*r.z«È3Ÿ‹Þ*0¹¯6¶Uh¹ÚØV9ÐRºm*DÓ½hS9çt/ÚT +èÈW½m•Ë\ÀR9Pê OX*àFÈ–JN@ÿËi „q|¨åª¸­r ÏNž°T +´©WÅm•¨ö{Ѧr eRq¦r@©8S9©8S)PÇm¶Êv‡­r tRq¦r —tvï­Ràj¬K⩸¯œ£d«@ƒ¾_ÆTH"µf*d*©5S9 —7t‘§?>óÎ_*`Wî6•0¾÷›J\uú}¬Må@›íÞdS9Pz»m*0WïE›J4o˰UôA*ÍTÔ×2|nDõÏ€¼žáCȦ¡ü›ó5 ?bËœÐë:f"Ïn2Yþ’9!»Þ>€ðzC_p`É”€#Ú=&s½êÚ‰-s¢¨^;±eNäªd'L¦„μË.&s¢NVn2'jkdå&sB¤‘•›L‰>_ï “9¡¯yøú‡{@¨½îáC´?ìB%ÝÕ·eN$½«oË”hƒ½ÔRy~ÏBκɜ(C*!–̉ÜHý-•æ×)™T¸Éœè3“G˜Ì‰ÚY·Éœ’ȧ5™°ç“ì·ÉœPeõg2'Z™ä¤›Ì‰‚4B,™IYw3™2«?“9Ñ…ÕŸÉœ(ƒu7“9‘ûº&SrMæ.qä$šÌ‰ª¬Mæ„TV&s"±òX*ÍOÏUñLæv–ì†Éœ€%»a2'`…È94™òoŽvWà–9Ñe^wËœ@=_+ß2'r¿+pË”“ø‹-sB‰¿Ø2'*ñ[愱eN$â/¶L Uâ/¶Ì‰Ö®£ë*Ï/B%s"Í{ m™pCõªñ-s¢—zÕø–9Q•çg½{Û–)Ñf½ý–9¡™ÕŸÉœ¨CÈ~›Ì Ü;Ù3–̉$¬þL¦DÕÉêÏdN`¦·2™…ø‹-s"'V&Sÿv²ç&s¢×NŽ•É/‘1v5u+ƒ®{@η,ë +Ÿûßr"Ï®ÃúaúìùÚDí¥Û$÷ü9‘Ðÿ«Àž¾Ï8C›Èð·ææÇß¡E$\/q!5‡Ø>÷”;ä–4¶¿/Ú#q†œP<Ï~Hkg÷9Ñ^ù?v7í*‘8CNTÉåù¡Š…j<‰wÈ <¸5“çÇ·Þ!'rM—œÇDZß!'n@²d©ã»ò3ôcþ­»:§ü€;âù]kK.uöp†œ¨³ˆ}ŽÒc_ !' +¾[7Y£[ !'`uÒÏ8C‹ðXŸ¿lô $ä,6“|ª;äNqw}cDâ 9þ!öè\Gú<ã 9‘»¨m* T9 -BÿMô¡IÎ: 9/m•¬°0àˆx~¯³ZÉ´Râ;Ý!'ZÒ¶¯aú! 9Q:Z­µ°1ûˆÄrB*¦¥5Ö¬Ûñü\І|ʶòÎ ·KköÒJð£ý“4¥ØˆH5;ÑðGJÛÁô¸î;äDEÛ3¦Ž03Iȉ&°.¤G“½Ë°fßF-8"ž?rM~lZ š„œ@…Uo_YÇçgh‡¹e=á9QàLîMBN´:§åÈ%îørBÕ> <@Š“†„œÀϬhÿÐȽ”„ö¹-Ï{äR´}jã 9Qa5ú’+¶I#q†vOh9ÙõžÒ§šÎ÷̸lËSIaŽ“u¶bÖçJ‰3´;n×6–Œ›Ð··¡=Ú™whO'l§¿ìÌù3kΊگ&÷4F$ÎОÊMÕåœâÍæ9QÊœj½}\ër¢gÉöAZŸåã«ÎÐöU½f{ôã>Ï8CÛQb¢Ø',]C %!'JÉ>¡Ôþ±‡GÄó[›}Z äö}ÂrB±:+Ì©‡÷>CNÌRŠ™­!5÷Hœ¡E,Dñƒ¡}ñrBà€Ìt zfÄr³'ËsØ"pD<ÿé¦>ÜÛçfz‡œÀ%¡y+†»–Hœ!'TgaÆûŠx>~dºÏÇw:CNLIn¤¤x¼C›h©î©|>ÔZþ@¹ÛpÇ«†3xEv~Î>ªíÊ#´ É«ì!'Ìêq„.Õr<ãí#ú„2âm¢™á¿Þêm⸬†~Ûçã­¢½N“*Êÿ¯§ã’€Âÿc +l߆PÕŸ·ä8i0õšOšú»Ó Qì6,Ÿ© OŒ7¶>¥)÷n–æHä@àà3¶¿®ê¹²¥ž¢'&,x‡~;·[¡-b _F/òkéŸ\‚òŒâBy/¾cGƒ:Z }E|ÿÝ q»m%5yÏ™Ökyo˜]f™AŽÞ¾×j‡¡ÕÔޗ­äHàræ‡ñ~Ÿ¡Zj r¼ ÀðØãq‘øÍË߃Ϩäßð›Ó½–ɨÏ[¡ú6Ü„]ÝGÝäH¤âÖ¢Jû Ø9ÛhAŽW˜ß´/5(ÀTKr$rOöM“;_b¦åh5{Ìýw`æ2|—LŽ„ÌîC.ã7öñu5Èñ"„žë¡œ¼W#I¾K&Gec§Aƶ÷«‡uwË&GBÚ´³.½ê»ò"âÛdr ÒÌ~ª1Åõüè/Ô´®ö©à”ü  ¦¼Ÿ¼äHþ372ÛϿԢÿ£»L²$a z£~h@Àý/V!#@vÒ¹ÈEØÁ7“¶$çê¾wâžO1‚ÓW%ÉÙP{œÒU'  *-ÎÚ£æ÷¹Ç¢[=•’åäÀ% ¹"T¤îi£$5Mrv؈K€«{¿f&]rvȈSˆbD÷~#vÐHrv”U¨QÙûâ–äÜj!xÇ#"9¥!®F–³£ò¬°+çú5¥žål@]4«¶a•÷Ä:œ,'‡!îÌÊpè®xàí%gG{N-žàÅ=ïβ œ Z-šR\Ü=ï^K|딳qiΰ¶'ÞÛ̼KÎ/Réü* [öÄ1Œh’³ÃžÎÌkèVö¼q:—ᑳ%aЋœÐ†úAG’³Y~N—áܾÑfO±ääб}ãº~(ß «&9;Zmá]½l£'9;ªÈÜ)Oý0*ÉHrv`±gmo}Ô]Û—V‡$9;P3…é¶e$1½îdÌ âÆé®»ñ·Ú–GÎ϶¨] +%90ç×V,rÝ+dIÎļ¹}~÷÷´©Ú’œÅj8*ñù*”(”ääð42'^¹§Æ,ªš%g‡ÍhˆGزÝp°Îضäì¨%6\û®-à@kkIΤñ¹SZS3ÇÞª&9;ˆ{8ÄÊž9{«šää@¡ó„*IÙÍœÇN9;ZdÏZ¢À|´üj‰dI wi³óZò6 ,óŠÇáãk/|sìçç÷£(ö)ɉx|Î0+ãæ0¯)ú¼FÂ%.7H=±ªSN t¼åëpF×ru€QFÜJ- ¹Ê’œ§€>0P ÒÍ`¸ö熛îY˜HÕ£&ÀøØýºC—×1<*±y¾Ù ñ5>’NlД3a¥Žÿ8À0žËʸ±´-É»wE«V»¶ÃÚ×R¼ŽP‹4É^è-Ô¥SN ¢urŽÃèÃìâpîËd „0Ù žEË’3ÃëÇá _vq8}Ô\\ª£ŽÅ^c §œ¸ñ¥~ίq6¢úþE¶GïP÷Ž#ÄÇâN9#$Òú1€P‹Å&½ Žè§Ó‹²½ã‚l‘匰µ"Ûà&£‹ÁÖbhto¸÷#É z$âãpb+]Î@`›3D製RhH“œ!çQ‹òÅài‘¤‹®B\ X)gº(ú8œaÇùípnK|¯ÒÙ¸±”äÄPÄçþq8£­üv8£´ç«Ä—ìǶµ–äÌ@%‡3\ÆÅêÁ§êÄ£f‹Pº·HKÌã·YÔž·1ºÍ +çý²ÝÚS#Šïù8ƒ×úlÜ’Óð¨ˆu| –‹Á¶žðIx¨4ŽšÇÇžÙû} ²ÿ¾ïÃk£Xi²È ‹ØJ–3¡6ù:!Ftq8ùoέS—ͰΖäÌèÚõãp†vá‹Ã(êçºvÔ~o‘^ïûð•çœ+²ÊŽè{ÊSÍãWŽ ƒF»8œ€’/& u#pk’3ÃbUˆ^¬ÙÅàëUÞ1©GÍ€>›ô¾P¬ëïû>>ÅBÁK¶ÇçyuÊ0zD®ãp[äÏ·Ã¥E ˆmgñESL„AX„ÏûN@bíu¬hªê—?µw’$g÷8•Çá Ľ~q8£×¸ÊÞ".F›5î’3CÑ#}Ψ:úÅጶòˆ ü6¥ÆHrfT”‡3L£¤x;œ\ ´Q;V±ºSÎ Ìöq8cg‹·ÃqOÅGÝ´AYÎäaù8Âqq87/àRú™EAØJrf ‰wÎèfƒ#P€Æ£ÒNµ¦û›uè_)Aöœ0´ÊÅá\¾¹$¨VOÆÓ½SÎŒ‹ŒQ8Šƒ·ãaž¡‚OÎÓ½©SÎ ¡ÇÃÀA¸8œQ(j,–~Š5Ì[³œªôu8ƒ"ؽ @xT ÕslѪE¬˜rF¬´z NÀ)Ô‹Áˆ0ó +YÙ±7©÷$g*±áA¬¢èmpD[wŸPdîP¨$‘ª¦œhxõãp†¬[üv8ÃV ójgC-%Õ”3c¬Vï8F+tq8£"ÏG¬'ñɺLSM¡ªƒ#tÕºo‡#´E¥Oå$ ô¼k9 +½ŠH××–“4†šÒïû>¾ô¨Oq+OæC’Ir&°FKrŽ@ÏÇÈ~¯àRîk!•"N9#d•´Çñ j§‹Ãå NAÙ×Bz²œº:¨ãpÒ_Ž Žb£”q2¦j’3£Ö5ñíxu}ìËáŒ2K&¼ÔëÉ|ø”§¥\rf˜ª|Îh…o0dÔgÿüCœ¶8=É™Ñô™bv<ŒÊ|q8£·yÏ–—òTGKÎŒ.]?gôÂ|q<Œbñˆìä>¥h’3áB?އ¡¯2£‰ÎeìCNòã^Š$91¸PLñ8ÆÆÛá Cñ2¡­Ø{Ž.p ôÈ/†Ñ×ጙ’¿GÔÎaÐÖö–sOò[rFøÿÇñ ú¸D‘¹¶¨ÜOîcqئüB`Ë?Žáw‚«]ÎP¡`:Ée¯í#g×:>އat18Bꘈֺ GDIÎXøãëjÿ:œÁ½Ï¶Zí J\ýGÍfzßÄí÷õgø2âƒ„ÓøTÖÌùX'ç8‚vq8ƒ¤_½ÓÕ$gFµØ‰ãp—J‡3ŠÅ¢¼ÐÀq {Krf4jòq< Škÿv€Á¸3Á0ÑÀ©Ï²bÉ/‡Äf˜–ch/5¿ß[¬ÃSM!lKòËAcÞ EÙ7 +k–äìhÆóèÔF'k ÅŶNùåXËŽØÃû˜“x®8rv +ªùˆ+ؤ)gGíBoN|F-5É/‡DÈÓ6N´EûX{’³•äÜ(¤ó;‰JÏò˱’ÚW*+8ålÀšÌuW*'°•ÑFR_†2§$hvÞ'Ér6°Êü&޶Ϧ“˜r8¸”}a{Ügñâ2µ(Û)†ÿ¯²ÛU¸£#âzÿ¿¯ˆ )’<]µtÔ*»ƒ‡ò‡eùcLtéÒºæ“ð0cŽvãžnöeZŒÈ}þ6Þ³IB�—áòΨ¬Øå—ÿÛ´µ¡áÐûÁx˜ߨ³ºð½MÁ€6_Wô²,ÿ­ƒuÔ»}™‚šeçï/ÓÅ((åµ:Ü‘Kõf¼MÁ˜bןsX³ÂŒ§)¥éÕÏ€ifÆÓ ä\D±õz–ð×aÅá"½ž¦`ôäÓ +ŽsOOÓÅÀã ¶è°‘àü2£ Yä F)¸Ÿ/S0TÄoCä©—%üÍìÒV/îÅiîI¡–füCÊ™7LŸxšÖ¹}&ÑŸœÏcŸ–¸YË}¬‰cðm +FízÉ4ýµ‘Îç~šVÔözUeÀ"ýˆÚ‡ieëHÝ?­˜äÈÖ‡)htÃ’záÛ ô¨«Ð]BŽßûm +FήðâÅÎ’ð4EдþiLºÅ¸>MÁ0­R®3N™ñ4C£#É”wvÔò§)ÒR­¬šÏ]=MÁ¨hT‘2ÈÐÆŒ§éﻵQ VsÙŽÈMÃðâ0‡nWшÝ:Æb`r4!˜«B¯—.ÓY݇.†Öáæ0G;;(¸y10ÔUB¹TÙÚ¯¡VÙ" Ç“ÌÕ¦”û>xE;ÁœPÅ ÍúJ@ÄKÎbsÆ›…IÕt1¦|îs‹c·;DÀèRe^Ö-i´¶üqÔÂ0·2µ•°½5Y Œ9Ìírdó¯k“%*À0<3Á̸FÌË$I÷®¤Jê2!E©Òlº¿1›ŽLŒ6†øMÉé‹¡Rb³3£öìŸ+y¿ÒD+Á\ªÌR˜däýMs\ºÃÌ(+ÜÐkëþ6â01 µ{”ÃTêþÐÄ03Ð÷}±Ù0wÚÐ8‡Ã\@-zSÕ6ö¦:ô±Ì„šâ¥j­co +‘P„`b˜ü9*¦[ §j3Ci— óÊJ?0Ú°J03`÷]alZ Ø~)Å‹;Êm ‹ú×ç|"› *™`f j„a¡lG#øh5’r´]·AÍ¥(.M6û ‘Wmï*k­…`f(*‰›d´Mè%.ðBÙ¿¤ˆ<ŠnBÁÈgsû[=9§ªûظž!3a—‘Ôç±èÔà£Ã¶&Ô꺈´(U3&ßoªR÷{CXF29LŒn²y«°6[aô‡™!=ãè[´)z#˜¥¨wñѶRh¢9W‚Y)ŒÝCJÙ4¿N0ÚBÆß&´¬J0DCáB}ç}nA)3z5¶§¦ö»TÆ2!•eÒ”ö±µE&Fë©ù"{Ò>74iœÎafèHÁH[X€Ñ{a˜ÕÄïÄ  wö¡ëÅc8ÌŒ¬±aÃïìkÕÅË‚ÙVuÉ64¤ÍÐ7è03,®ڳߟ°lJ00o8£õ=5œ©3Cj +Úõ~›á}£L(­ù)ЭïôÃÞc†t˜9¥`ä9-ô±ÌruTqšê~f-‚™ÁÕ¯}&ÿ>¸A|‚ÿ%‰DjÉÿ'¢¥E*&Ç}rHÒB(jµ0¡Žî0D©ÈB03ð£d/wþ!ýJ&˜©˜IuÜù‡bC…ì쇬oÔ¶³mBÌ ¤‹§¬äyØ`@Šk!˜ÍÄoq•Ûú‹§; mU¿ŠÓÖh9ðE%øLJ ŠvY TìH.‡™QsÜE-iå&”æA03p…~h+ñÀ(*`f¤ÑýóÅd¹áw¡ä_È-S‘nBZ×á03ºEi.ø7/êõZè‚™aÍüÐÆWÞa\%‚™1ée‚&hu3 3Ce̓:»S0*´J%˜QgsÅвýQ· +ÁìKåªûÜЃþ)ºd[P`„êÁê03J3àÕóÞSÑ™å03r‹+Ä{Õ}jhºˆA‡™‘úZ¬lAQpŸ-7‚FÎ3éêoŒ-(ÀP¹ +Ý‚‰1§Au“íLÊåޱsoËk¹/ WÍ fäG0Êwɼ(zø×ì†Ôî¬Khô 3¡il Õ«ïèK¨3B03tøf;*Ö~†„fø ÿxÇÔ¯€Qvhm3A)îVóš«@(mÜ »›ÿÀ¬ömûç>>~i#ßë£ÁìßFõ§ƒ,J÷¡“VBB? Dïkµ9|04y^@¬q3D*Á=ÐMЊv3R¤¤Ã#û)ª"o7¡7%ôðOkO5õû ½”J030à#Y¿Ï* ’:›Ö½)„)ÃC¢–VîÌ3K©|0J<8úë]×0oD™pø`¤µ«¬t·Í¢L8Ì ‘”èLµÝŒÕÖáƒá¯—1ϕە`‡¿üÅî¼³V£Ò:üå_äÎ:CЂ¿üS¦íøhè‡wš³âÛÝá/¼f~ïÆá/ÈSº‰ïð—ÿÕ_·éðËŠo¥l‹×Zð—+CŸñ°à/äí+âüåŸ[Åô‚Ã?C5“a×SåѳDõ x{µñËOGǶ¯¢›Ü 6TÁïU¶û¾¹Ûý¹ÄÛ7^ôIÞŽ s눧»Ì2æÓÛá>µÔ~JænW›³ÀÅGTù>V ïõÀ)b‹ð^‡2L|±ä½àkò‡eN¢3„Úr?×øX|ŠÃ²¼Þ{Ç­bº÷~®ñ¾œ#¤>–yÝüTë¼”¢äµÈöÞ¯}x+¼}_¡r8–$SÇçV«–)‚¢üa áæ"?ÈÚÃk òM%ßåû}1çÔú¸º× +ä­ÙžOó±î½ßþkbdµ(LZ_ËêQWmÜ_8—ùô‡zºýŸË|ìY0ÆÃzŸŒ­«Þ˼¯&ËtKç2ühQç0Ywº¡€Èe\ mßsò”>j?Wf:yšä÷žŸ ÿ®mûJÞk¼ÝW5z­À©Qíª°¾\ЦZm„ú;€G #r}¤“ߎkÅsw¾ŽÔxj¢ÙQAŠ ÃmgdS꽯:’1µõ VŒ­•OS0ÒèÕB¥½¥ç—i1߆˜Ä)´Ÿ»zšÙÒ.Ø ÎóÁøðrK’å„èŠ<°ÿ9¢4߇#™ÓY€^\K—á9‚'îËc--Bñ%ãÍw×Ò:«°lƒßõU÷’Œ*‘ÇS!9O·YuÃ2˜ëê. õ”ƒ|¹Ë\Êß>ŒHåHh[þ},±P”"÷ùU’M¬çÀ”#!m*kç ðùäƒ(âDñ'Ö$Rr$L¾DþÈDÒ,A>ˆ"yÞÇ€ qèKŽÄÜ8V*¯ÐE÷|BnQü¥5 Z?TÂKki¬+A´V‚zD•Z!³¥”}n@©%ÈÁ}F®ÝÓBÚ|å-9øÏü¨&µêGTä@›Kö·GÍ\ƒ|”݃“ðìAŽ^\s©¢òïëPñšòA?ܪš÷u(­òA$ñ¥Â²=ÄwªGyS?ÜÊi% ¹i"[ÛÂ’öJa OÔ4ÄÙ\ª…ö7éQ>%·ØõÐö³ÕŸ +ÚXüǸ­ü3‚T‚ œ¶{$I{ãxÐö D‘I w„—Hn¾½)*â\BEÙq˜+kÿ£JKßq˜%iB}‹B0ª)„䙘@Bfö™òAdOç¢!Ôsò0êù÷ä%‡üCCá ĺ(«“{ßèð-È‘úôÈÈë}ãŒØr$i0—0þígIäƒh¾ÔEÙ7ÎÙaÊQ³{p ù‡g‡ù díÿKð@˜òA”2oƒ—°sòv=åƒÈuz°Ø[ì#R*A>æùÁœÑ>?‚º‡Î”"¹;êâÞ8–ZO€|„AÉßGÊH¡§ù6H¿ñbåÿ“ŒP/a¯ÁŠç™S¨n$ŸS>ˆqC¢£pÂktªòн)?Á »ìñ<åð³MÜS°`Ïã)D)³^`©ôðòAä9åb@ùç»Xò°ÏÅ]SÈ??¨%ŸÄ¸Œd%S~.cÉo‚JÈ?¿ð%ÍßjøYºcjÉ€>>—´•Ÿ(\òI¤ùQ Sb¾#}Éo‚9¦ß̦%Oˆ™™xBô8\Ð)D“¹ÌB!ÿxYOù?ž)9ä'¿Ž)¿=râr—ª%¿÷qôY ]}žNô.¸K~JÄwQ_ò+DD!ý¼o,ù „ìãÊQ~†mlúÞ.§øL$¡¯“p_¹ŠgJës®ä'€ƒÜ7ícÈ’õ#ýan;Æ}ÔYò£Fa úgœZòoÄ +úY˜#“×)?J3–0«üÌ‘K~)NøÖäG‹Iˆõx˜‰4ÈoBãTî–ƒüÛ[±’ãP5ùÑð±DòNØónÊ¡:#pDÝ¨ÇøPÏñËë<×òNÉ#dÊÁ^ƒ¹èþ$ý¸z¶ž§Èv5 ò9<{Òs¢0Ò×â;åÇ€žþo³}¸ äÇ#KRBîùóuÉçCÃÓž2…äCc)A>3ä§N©…ìÃk¦ù rŸ_•Ð!öÎ{“äó‰Õg„à^VöUtù¼ˆ!?žqÉjôJ?#>!?^ŠX¢o¦™B‚|¾F-ϨãÓ¿¡ÂˆÚK¢ÛÛRý† +Ì=Ê Tç<—Ê7TQQ®¡‚ðÒp‚¿¡DÆðäH`‹N$+Ê‹(”8ÈÑœhµ•¶ ­äHð¸*[¼>=˜ƒ|µ»Gætí[ÿýnR¿¿WV¶|•i,Õ¦yo»ú¥N5˜¾çoaÖà½ëÚ¬ý|òA =Ï¥’xß7º|”#!´ª´ï»'KäO>·±¤V”7Q©9({N` +ü"¡Ö[B=´´ôy`ò äH ð¹&oç„¢ÆA>ñ…×Î?<’ù V,þoU– ù úÙðض¬ðhñ>~—Z€%¢êjÊX’¶Îª4 ¶ÆÿÉñ»tÄÔN¯nü—×Y+¾UKP¿¿oh¹,×ßÛ&r¶Bõó÷öû8Û¹‚ƒÞÔ-c>ùpø¾è#Ìï«ú"àQ3Ow?¯:Ã9z”QobxôT_„Zögÿ±Ê^§Ì#‰” G4ø~㾫ò‹P[Ên_ºW6x )+ùðèM/‹¶bdÊÑ¢®a-ij'“Àú#Î<0¤æ GFå&†Góë¸x°¨ÿ˜Tö™‡v‰òáQ}‹›0 {ú"Ô:|š[¤\¼( Ñ>9ztñ›ÚD³Ñ¨”þ"à6îöø·¯\¤E9x”Dq›0"¿‹0âyŒ8PÚwŽ‘?ʇGó³Ú„yàªõEˆÍ@<íß´ïÓ¡9zÐh61<ÕñhK…Ó¾sœi”£Ÿ.Â<²<XÔêµ5QOûÊñp ÝÏ}fQ²—¤‹€‡6Ÿ˜phÒ÷•Ó?9zdåvæ!ÄOÂ<Ò¸@,UîûʉU‚=J.í"†G§ö"à12 ¥÷}áIJ rt¼….ÂTs{p°šKŒgÔòÐÞ8ʇG%¹ó¨%ó‹€GVÿ­”[Ù”¢-´Œ$ˆ„Y4îíEÀ‚Û¨n3í¨ÍþnËѻЋ0ž:¿óH~MPh?ª¾½)¨©1<ñ‹€¢g®äR÷6j¢ähÑ„óE4{ñj’ ŒUîz¶o\‘eAŽ}¹€YPnõÈ_ë³ š^ß]¹j‹Ö/À,˜R}°ÀõÌXÀñïˆéÙouÊÁ©A0,úëÏÍ yæ£\ÉÞ‘äh€RQ/Â2šò‹€GåìßÄiw?E™èA>MáI§;»Qz£Ÿ¦6aÊÞÞ.Ø|‚Ñq{¤Üƒ=rR¾óÀTÁ/Øã}ðåP·§\9ÍP»÷?tþJAŽˆVév("—ü2¡Åj=*âí/Wì GDg—Chîíå½d›)foYêÈA>«ÏE‡2$—AIÖïÅ­À»_.#ˆ`¿ÕßžŸï½¼ÞÝÚ˜`o|Øã’ƒ=ÙþwƒêêV?¯í‘dï|èÀ99"hu èPFË£½`ìAäÄ_D²£äƒÐz»J€>^ðÜá"9ÙÆo×=i,—óý X¹ï~ßO6IØÇô]f®9ôvw9”€è__EìªY+*ÌÇ@jà Œ]ÑÜFEœ/‡ çjŽÜ½íñXégË‘QÄÊ£;”AÙvàåM—{RH¼íñ@’rd—Û¡ \ÅòË!š.Ûª2¾™Â÷kùÄãû½ãíùõn+q¼o×a?TP7¿#Í­—äøýº›;”7à4(‚ÆšT)2ÈÄ%ÈÑ2Ë¡ˆÕË @à Ú(˜ûw¬¹+K>Ø›—C¸ÐË ëQhéã-AŽ Ü`êåPFMÖ .Ù¶xiÈèY"9"Ú嘈nûørÁCÌ!JûlÍkÉ._óåPFÛÇ—C´9yNã,{>¦|0ÚžÅÏ¡Œž­§]ÑÐgÃHÍs-å G•½~ŸCƒöjœ ’ØÇi¼Ý!AI rd°f‹Ó1ÃÆå²f§)ãÜû’ãÇÖ ŒnIÆ]kxµå¸` òØÇÀ÷q`F%È‘‘ÅŽ¬;”á¿êt(cÇÄLÕÛ1$È‘û\¿Ê`;ú—ˆÆuX øG`;3S=C®÷ûl¦ôx]4Œíµä]0Ð(G€Ôt;&¡[Õ¹¢aÌb+ãºö!Z·ö<ÕH¨ÙÂÄ÷¾PþÚã}|¿èír>áâr$´d}Ø}†Û—C;p¢ôÕAÂE¶ù`ìêeTêåå#ïU§Çw*Q½920ò嘌a­ór€Áb! +ÙÅ;š/G92Fª—Aø£—At ÛŽ2yç#-fA>ûç~Eô2èe"u‹?”ºw>»Ì-ùs Üxåz_ 8Eüz_ É:;PÞ÷èKKŽÚ—Lw€Ñ¯²(š*{ã#Þ!qÉ£[1pÇdìé¸`ôbË—Pt}½i_:–,vlÜ¡ ª–/ßÅß¡Òö GFfëpîP—=òÓJ†H›%{çKc¹O>Cär(#kþú5("±šöþ‘µbrDàðßE”¤÷ª_Bzlôêî·ä©WêAŽ „<¾“Ñ$¿` Oµõˆ‹7>dуuÞ(‡2DJ{9DCM·iL$ì j=È£öq9”Qsy€ÀN^SÕQ ¾ªŽ†ß‚ ­ØL¹A q9€Àù³a¨_gJ¸æF92æ}ö0LÄ yÁÉè™!ñpõ´>Î÷Ð[ê÷ñýTl’°O¿öÊÀTã÷‘ÚePÀÀ/z9Q£ÚomX,_êyËüÔ€ Ä? †ütÑ{¶GxâKÍ#õ@t½ÇE@/mT{Tûáf¶=³äÈ ±™rÇdôþt(ƒ¬àòÃMeÿª)GrF¹Êງw:À¨Ùðuï| §›‚|0F-—C9úr€!bÛE˜È©Œ GF®VÜ¡ŒBýé£4›øZz²qT-ʶŸ—%gº“1ÚÓFö£Xvd¢W;KKŽIB—CÒjy9ª³!@ÑÇh#ˆ¡Zö÷•PEúË!ºEÖÁöyjÕH@øº JhÙ†v9D³@_™øÐïs#mM.‡2:y9ÀHÕÎ2>Z?„ôD®„™hâûÐ77ŸE* {›’„ϧ rü~—T/‡0èþr(ÌÙÚ TÚäÈÌ·£ŽQ~9À@u_ãà g·<0Pj9È£oüçP>¢]Ò†X +ížƼºœÄ¦ÑÊà´‡w:D{½­SÑË·àÔH ËdßëóûVèηñué68$¼°™P¶rï[©sƒr¥§AÉrLnœýH¤n|ÉÁÕ +°;”¢•_0ÊžŽ\pqq”##g«îP†·—Œ\,Ce®ü•À>Š…’%GžôË1ƒ_ ¸ZÖÈ)ï¦DßaÉ¢Zp‡"Ð#žÑkOY³È(ò1ÚîlKŽ )ÖÂÜ¡ŒVòÓ¡ŒdiDŽØ zÉÝs;ѳմËîkr.ÞóPÓ8ù`4;îP6"¿E誄Lä=7Ï”ƒm'?wLD?äˆ@i^à ¬€¯¸`èAŽŒÎœ/˜ñãC‘ÑöF?¾â¥ääƒaMÌ Š l ä2("ñZ(*äm¯çF5È1¬'¹AL{ܧˆº›7Þì¾à<,û,9 2"e»“1ötœ0¤Ø6Lh§¾â¸>Eù` Ð\eì[ãeMdÍTjüu¥Žz+®FÕý©ý¾~¿HÍ÷ñ}×!CÀl_Aïiß +– œùv(BØ–âríoVŸQ°;ƒ¬N,92r²£ïeÔTËË¡ ,Îz„ÞòMTÃüEù`4k”.O´JÇ1Ô²½Í²½åÈ@{æË¡ éå#IYOÄWrvS#@(óù¾~gUïtŸVêz’‹§µÖ¥ƒ|ºðåPÄàÜ_0p¡µi"öƇ1÷äÈ@}— Æ +ðË¡ ’åÍ;_“^[#£!‰\ŽÉè,/-×5WèÅÇ!T¢|0úCôOw¹eÁ±‚PtD7K_ƒÊüïA±@›ä#+9Ý»vW•V}Áô}‹ƒs±û`ÎÍÅÞåÙBPfDÀQ÷á‰~•°—žš‹½cžå`„8ÊYl¦Ÿ½n;j»=+ìüæâË1[{ˆå˜9$ÄAeï,Wë}8Ëž ­Ø9s ?„8¸ëí=Øáú0_ïC[ÒųcïøŠ‚â¨5ú> ô7ån­¯ëpÇÞÓCˆ¡åÉu½J«…:føRô^B@8" ÐF6þ`ö¶sF›û„sbï(<è!–½&"Ä‘öCGåøî¢a[K½G!º¿/×-Qð}ÆËSo¡¸bÛЗ†‹/ÖùCˆs_8F¥½8 +_ëkØ|äbï¨õ<€ƒíGoú«ê˜ÖúôxR¯ÐÑÈK1õ=hŠz1\ÖÞ6zCwñå˜Ú°âHmW™ª¦92¹Ô+zÕÇn€(°õZD@QsÓ'•Sývwcö©WŒBõDQJ–­[CPývwÛóÝI/ÃÔ»6@ XË%" ÀT¢„ØL‘ô.vìx›å!–cj­{–º½?¨d‡Ï+v†š8•‡Cmº>B ©ìÒ˜ímcÄ›.öŽS½ Eã}ÒŽÄ©{×iŒéâKp^Òˆ@O¡?KQäM”Þh +jÃÅ^‘õ +œ·z0ê©–S¬äü½ë:™}ì èÑý!–bPH°TËJi6®aXÓ"±ãËq¶½â˜M‡Ý‡€G̽>ðól\«¨ðÃÅÞÁXSc¡ÕˆGV=lô½ðŠýB.öŽšµç!¢+öÆöÆùƒ¾7^[ÓγãË1u±SЇ€£¶£gN_9Ç…²K½â«ôˆ"w + (P×ô£L‰MáCoè…Þï‹¡T ,†ý›hë{x«z4Øñå˜:Ñ!ÎsF„8H›(þ7¿þ]q®s©Wàp0@ÑJD°”¼¾ß7UœxL¡ks§^1‹Ž¯,Åè!2{3QžÖö*áâbç@}É ŠVu|–š§Õ™R³¶‡ÉDÏ;¾]ÏQFˆ£×ˆq蔕F±¾'Ãov±WkÙ1B¨SŒg›u–Jxdv)ëbÞ±wdÒ&cÄrLmÒÇÐÎŽŠlgÕG¾ãK1*?„(f×ðPô3Ÿ`¸¶Î‡§¡|ÇÞ}FGMµ…mYýÏœdÍGZ;æÄÞÁû4á qàß5"X +Ò*ÞøãÅ÷ʱF*¹ørL¦‡GN½F„8ˆô#®Öÿ¸µB.öTÃüË1ÖCÿ!X¦Ä¬ËÙú×I>öÌZó!ÄQZ(JÍûQ9­ýa(š.½ S®b`æPä^öûCÔ§àzˆ{¶x{q ,pDÀAçý* á8djq±w`&k!Ž–B@´F*|T’5?.X©7ÌÄå–adŽ–z1•HÝšç2||9În2Bx>="X +Æú »>5½H×ÕŽr}[®=Jé¿ßf)i?Qœ—¬éqšœ]ì¯OT@ØÎPt™¤×G¥[Óc<·êâK1tϱS_ÂCˆ#±ÞÆêê(³j)رw䣸(ШhDË)·îGÒ&o_£ƒiEÛ±W Œ‡ñœýcô4•êâË1ËxqäC®>¾ mÔ‡C-Z"´Z½ Tu{ã\µüîØ;úw±G£Ñ#ŽÔtócдy­È²r±w :Oê#–cŽ`l´Áú{“TÊO‘Îo]ñ¥è=?„(:î/"Ä‘öob¸ì}c¤..öŠÉº Œ6l(F®ûI1v©½qê¹¹Ø9F"-nFˆcf-<Á²Ñ´Ob—ؼ&Oª¸ør ­ +FÀÑSj#"X6šNhÖöJʺcwì¤[Ü€¥:ý<uh½Àr´¶‡šÞ|ìÚÕíûb VÃï‹!å-/xœßMd”–êâË0µÛ!XgDÀ¢§cÌHæ8ëÇÞgÛB%kÃ|8Ðz÷ÞÀZ_1ÌXÃÅÞšðâàTZDÀ‘ëØeDÆ“osäÖõµîØ;jÒ +cÄrà!FË.Ð +“{·˜ëÔoÇ—£W~qÔFÀ² öCD…µö—¿Þ°cohœè!Ä€˜#B”õb¸ª½q4^{G']‡Fˆ£SL06Aѽœñ íÔ<_ŽÞæC,Ǥ€cè£Å¬dÝ?E ØŽ½bàœú¢Àu)"X^n'jÙúšbñ±w̬uÇq̪¯ã!àÀfÙ +uÔú_&_Žsô2ŽqrD„8H[ ­jsiêabÇÎNÓÛCˆƒÎÈñ,kT»êxµWž²^hÇÞAy¶‡XŽ1jD°¬QÚ÷!çƒïÓlºew|9¦žfŒΓ!!Ž38âþÊ:~”N ;öŽÜtÿq;nârd¯ m(+õ†Rt‰~ß¿ùŸ×GwþÎ4øHû厽••âVÜ„9ÚŸ‰öj¨¡€ºørôuâð„sü—£Vk€èÄy¸Ø;0hއ¸7q9J¶Á°œ‡‹½£‡¸7q9°¾=Nܹørô5ExâvÜ„wŒÑèÛãTÆêÖ'ö¼©ú—ã!.G“ù9²O½bäuzñÀ­¸‰KÁ)ÙÏÕ…—aæö|ÿ6ÜÄe ž¾¢Ž¿†K½bÖ5`{àVÜ„WôY¦½oÒ‡±ÓŒ„Ý•gy€Kq·¢'›Û(•C¬ør¬£§nÅÜ +ŒßÛNXÿÓÅ^A­=À­¸€[‘«5¿4Æœ.ö +Ìp+.àV¤l½/á¥M{N ý!nÇE\ކiÂn£s.¾§Lq9nâvÔjc[j]ÈŽ½ƒ1<Äí¸ˆÛQŠ5¦Ô’¼{GÝ=Ë·ã"nÙ©)ÕÒÉÒËÐÛóý[à¿ßËNúþ~C B“\©»øm MŒdÿeZ1ûëO*Ø­EºÌ;ÇûÑCÈ^«¾:ÿ~ôWÕönŽùÝ¥zFï‹XqHÔAg’þŸðrKr$D‚à‰VF&ïû_l¡ÔNuºlçÓ Ÿ AÿÂlôµ³Qûv0.fÃü“Á§q1míC˜1à—òøV'Ì[˜sV¼…Ѩ{Xqa6f°âÂltë°âÂløŠ†ÿ0.f£ôn`\Œ†ŸÂ3f£ï3f£FÇxõGÇ8,:ÆÓ°Ã^ï¯Ì\˜ãiŒãf£Ÿôƒq1µä³-0úE`4êê”>a6ô‹ÀlTèÙ°AéFÃw…mx)Ÿ…Ò'ÌFð“.åñÞ({ÂlËí>06gn÷Ùèò'ÌF5ÊŸ0eQþ„Ñ(«Sþ„ÙNùfã´l˜¹0Ý"p6l¿Î7ë“¿÷°ïý?˜ÝâiLîïG-ºÅÓhÜ-Þ<ºÅÓpîïGźƒq1k®¶²!ÌFï­q1ÕI¨x&¼Ÿ”ówáb4ææ-ÌÆxo‹l\ÌF++.̆MƒFcì¶` +³1Í Œ‹Ùh«Ð;.fÃ{™ ³Q|Ò¯º>7%P˜ýâitîïG•¶Õ¥<ÞJ'áb4Î2Qþ„Ùò'ÌF3ÊŸ0¶H0¼ÿ'uwúC ³1½ÂZ³Ñ¶Ãz ³áƒò'ÌF©”?a4|“2ÂlôIùf£6ÊŸ0f”?a4lE¿xÂlŒèOcp¿x?jFùfÃnÂh”ýâa³1éX¿”Ç·=a¯ ³ácBÆ…Ù(uкŒõÚ«ŒÙÀlô<åñµå³-0æ9ÑXkçüfcôïf£y¥w\̆—œ¿ÀhÌÓêàW ³1kÎ_`6zÉù ÌÆiÌ)Ù(m¥}±àÓ˜N¯¸”ÇWܸÂl˜çüF£¯ó˜1(Âl´šÛ}`6¼ävs&uXqa6fk°×…ÙèF fÃ%P˜Ò+Ì\º _f£C¿ÌF…~˜ ƒ~ ßÐ/³1 _f£µ»]˜ ·»] Û‹2(ÌÆlr.ÌF·M︘ ß”Aa6Ê  +£QVýdpÖ×óÌ÷˜~ò ÆÅlÔùÉàÓ¸˜“Î ÆÅ`Ì×ÞVÓ¯ +ÌÆX5Í<0­2ø4.fãc< ÿÑ1ækíèC˜9l€q1½šƒq1µ|2ø4.f£ÌOŸÆÅhÌã'—σQ6ÌZ˜:7ÌZ˜ k Ö[±mÁz ³1ÎŒ‹Ùh=ç/0îvº0}ï3fcŽ3f£GÃxýGÃ8j4Œ§Q4Œó¨,‡]%ŒF[Ñ0†0Ãò阺òé˜ ”?a4ê®”?a6Ævx‡0mlXa6Î-v¢0ç„õFÃç¤ +³ÑeP˜j”Aa6Îï…™ £a«S…ÙNf£nÊ 06(ƒÂh” #0ç3fã}ãb6ÿ9¾X…ï0ãµÏ~Kß›Àlôž˜êù| ÌF~µ†¥Ìƨ–V<0­”´âÙ°YÒ^ŒÆÜuÃÌ…Ù˜%ŸoÙ8'Ì\˜ ï9Ù(ž1¡cf£CÇÌF­9PÙ°üúпú©˜ï Õú«{ùTéÕÎÿRΰ/ýŽOOžã­½z³*%<ºÆ>exøÿêútЇp) Ö?Ûã!\ŠBÛnù ¢,œªéY¸”…6>{ã!\Ê‚×ÏÖx—²p2œ'-ŠBóóáûWe¡·Ïwï!\ÊBµž'-ÊBY=OZ?Oò¤EYÞò¤EY¨»åI‹²`£®,\Š‚íZóæe᜽yó‰²Ð¦çŸ$Ê‚7Ïe¡@.Äáe.È›( gAó:‹²P½äue¡ì’×Y„úÚ«ï¿›;( Ã÷ßÍ”…óÅü;é ,ØX'…µëú;é ,Ì’Ž± ,´™Ž± ,œëÀß­”…bé ŠÂ¹ ¤c,( }¤¼e¡Ö”· ,XIy ŠÂX£å7ˆ²0šåue¡YJ\Pl¥ÄE¡ïž”…i8Qڂĉ²à¹8e¡8$N…ÓP!q¢,ô\‚²PsqÊ‚åâ…ºæø{zea´‘··( -}>‡Ÿ ã/EÁßw½$ˆ²0ò&ÊBÛpŒ‰²à£æue¡Ôš×Y…“Äš×Y”…>=onQÎ%"ÿ$Qοa6ºÓ+:_ ÏßV[˜2&¬„0ö:œ¾ÀlŒ’Ó˜s÷Hçm`6¬õ4óÀh¬m9}ÙÐ.³Ñ ]fá]FcnhÙ˜Ð.³Ñ¡]f£O{=0ðøPþê–2˜a¯fãÜQa5„Ù°^`ÞÂhÀW_GMéfã|¬a +³á•Ò'ŒFÛ'þÙfcNJŸ0½Qú„Ù¨Féf£,JŸ0uuJŸ0Ã+¬¸0uçÏ@`6lPú„ÑðM?êR? ¥O˜6)}ÂløùÃq1År³Œ†Í™›}`6zÛ°âÂlTÛ°×…Ù(kÁ^F£œ;.Ì\˜át¶ ³Q¡]fã¿t—K–)DWÔuüà¢zÿÓFI^š]ÃkDÅKEÝE`à(vkåó-0v Ð]ÆŽªy³ÆÝE`ì°þel :´¦Ý;ZÏ5;Dro;ŠÍ0v°u+À±1v»í€ccè`µ³2;cGètsŒR ørÇØA Ã ¤ ÃŒ½u°cGå¶•cì Ða†;ZÑéæ;†  +tŒöJ_î;x  +tŒEÐì:ÎŽù7•R‹êmBîmêm:î¥ +õÄ©ø‚"½êL¥ê{O…êkn*‚B=—TtA‘~X+—¿×)ÔÜN…ú–›‰ PϹ• +õ¶yï 黿;"(Ô7ðï7„jiã¾P‚B=ñ¸‹8(Ò7©¼‚B}ïéè + +õUZ^]§PÏ%µîA‘¾Úc&¯®S¨·ƒ&ïf§PßT—S¨g•ü½N¡¾4pZ9EzÑÜ.…ú6Au9…zé3ï7§PO¹QŠô< ØþN¡¾P]N¡>÷„„j&P]N‘ž¦‚êr +õ£¥Ö<(Ô7NyP¨ç ªË)Ô—ªË)ÒP]N¡¾P]N¡^FÍßëê©‚êršõú7gî‚B}Ͻ@P¨¯¹ +õœ{ H¯3÷A¡~tº÷sP¨oB÷~ +õRÊ]^A¡¾Ø½™õ›"}®ugPk•çÞ)Ô˘ù[B=ÕÔrEú>)5ÜA¡¾ÏT[A¡Þ¶ù÷8…zæþÿ¦HoW˜O§Po-Z®-§Po—~þ=N¡Þ6!ø=›B}QλÇ)ÒWM¯BugPYN¡^&¨,§POT–S¤—) ²œB}žJÁó(µ§þ:(Ô³¤þ:(ÔÛa~̦HÏc€ºr +õ­Ž|f:…z±û8ë7…zû¡ù{"½É@]9…úž{€ P/¹ +õ”{€ H_fî‚BýÈ=@P¨_ÍwÖo +õŒäüêB’ëÖiÖ¿iÛê®Û PßZꯃB½p:¥‚B}É@P¤Wí©º‚B}—T]A¡¾–T]A¡žFÿS¤³¦ê + +õ#wA¡¾jª® PÏ-UWP¨/œª+(Ò÷1Ó5ê[Oœ P/’Ê%(ÔSºVˆÔMGª® Pß+¨.§P_‰ó×:…zÒÔ_EújÍV^]§P?˜òê:…ú:)ïf§PϽäÝìê‹€êrŠôÖì‚ÓÊ)Ô·Ü …zɽ@P¨§Ü EzÖÜ …z»Ôò~s +õ•FÞþN¡žt€ÿ¿)ÒÓl=ïg§P?Ô—S¨o%õØA¡Þ¦üÿM¡¾TP_N‘¾(úr +õMA}9…zkBò÷:…zbP_N³¾ÿM©¾‚B}ÏÝ@P¨¯œê+(ÔÓLõéuæn (ÔÜ …ú–-„jkÚïÝê­ ¼«+(Ò¥T]A¡¾i¿«=(ÔK*–B5åN (Òw©Ï +õ½§>;(ÔW©ymB=É{Ù)Ò·iS‘ôN¡~ÔtV…úFœ¿×)Ôsî‚B}ɽ@P¤¯Êšw›S¨oSóns +õ’{ PORrµ8Ez™T—S¨ïT—S¨¯T—S¨·&*Ï¿S¤ç© ¾œBýh ¾œB}cP_N¡ž'¨/§P_:¨/§HO* ¾œB}Ͻ@P¨—êË)ÔSî‚"½=YA}9…úž{ P_ÁònÕÌàêršõíÏ:äô0 + +õé¦sµ'Po +õ<ç]¹A¡Þ&íþÖ H¯š»€ PoGÒ½²A¡^ƸW6(ÔS÷ÒEú1©ß;9(Ô÷™*+(Ô×–Nª PϹ +õ¥¤Ê +Šô}ŒTYA¡¾UÊûÍ)ÔKî‚B}ÑT[A‘¾YǘkË)Ô÷¼ûƒZQP[NC?š]{dOª¨þÙ,<×ôˆ—Ù‹Ž<ô8†d˜-£õ†ö";1»2p€¡Ç¡Ån9ð«ÀÐvˆ­mÇŽ<´ÅÞ¼ÓN‡5UüÙvid·ZŸÑÖÇÝú<ò/žð# ŽfÏŸ¨Xó[£2¬BŽG—ãú9lÏ9¦q¾òÐÏ1 9f—ã;ŽY ;®z¾ªòÐÏÑíݸóùvÈC?ÇŒ4>·}z­Ð3…CÏ-•F~úVç¦V£½~ ß¡ŸÃÎGÇ"D_Çwèç°Øq•ûG}‡^ÇŽ›Ìy9>Cá bŸ@µ]ýÙ¶÷Ðë˜Oôüœ—yèrÐ÷ö݇÷ÐSÜ+!z"ë뚎CÛ1ÿ¤ñ° =V¹ [‰=5D½úPùîôkèçø–åçôä}NÕã¸ÝGdß^½ÎÛ}N•¡—Ã#nÀav çÀ°E†=G;øÈvëåXµkŽ1¦gÔÉôû¦ò|žã3C›ÕÄ×±2DIcePÛ;׆ú$~3ÏŸöG—ceX{Xce°„£ö§5[†ÛÏŒ>Ÿõx;Ãê 8V†PÄïRb +7þdÐg(2¼.oÃŽP}"lñß%—QåÀgD«E.ÇŠ°MRceØwù‡[ûùt+ÃΡƒžµ—y,¢ÍúÌÔ×±"Z}VCZíò‹h¤rà3öO¿+ÃÎ_äX6·O†]…ˆØôao˰"l¯uàØó©)ÚÞïõÙÏŽÏ ægO¿Ž•Ñg™À±2,ÞWƒmä]q;~ÇÏ ªOñ:VF›JÀ±2´ ÿrî\ß·Æ¡øÌ(½ÞŽAªÀ±2ì1ö8dÖwɧ…ã#Ã&·Î˱2*WËh¶•}qí„ýeØCþd”>.ÇÊQäØú8hмâœÂ>3”G½+Ãv¢ÇÊ î H£Èï<”ÒÆ<ð1ž)y +¬†•ÀòìêüM”s?ð™Ð»ŽË±"ìzàXBñÙlKöfÌç +r|f´SûsX†5t<€cgüå½8„{Ì_ùÞ}MÉW¿ +¯o÷¢ÿV»šßËODž+ÙñPå6¬¥g–¾†Ñê³Óнó©HÇg„]áýr¬ [ë c?Ÿ•°]P~å-v|ñÏ Že}+£×+ÃN„çËË,¿ò–öûU2Öl+£õÒ€cgŒ½ògÇîüèÒ÷ò=#ˆé6¬ˆç‚»+ÂŽ£éCÖL´7Â^Q>3JÝ›át¬Œç¢¾+cJ²>ý]òQyøÈ°ºº;£Äç}–ÑKÑ'ƒº¾K®eÔŸª¢—ce05Ž¡Ã'^§è»ä:f=ð'£Ôz9V±"ÇÊ îs¢¶ïŠÏZéÀgÄàF—cEüÇv¹%É‚@tG7Tqÿ»‰b=þLĤ•}|ñ°tzŒÐºŸ†¢Ô~'ÞK•šäŒ¦ú㓚ƒ!¨žõ5î=x>&9#xÐøqB¥Ññûõ‡¡R£iëµ3'93údùq“—‡Ã}wÝ„þ[£kÜä‹Q}sÃa Ñù0‚w;€!–(}½é”$gjçüq,D!~8Œ!çº!eFñëè [’3£±ßôpuZc :¾–(~½·³KÎ ¼dÛÃòöp,²×tÁ±Ž>kR3¢Lý5 ~8 ¡»åÀÞ­ì«Øê…@yÿ1½N}8 1iøõ°£$'FŸ¸Õ?cÔqɉ1Ên¨ìe¥QQÿæHrf¨xl†Ãexþ¼‹1ý4xrÀ>ÄSÞ–3cü~úH}|n€sÙ­ÿ— +»6?î-_¿_¨ÿ8¡0=†hþ}ר}èŽjMr&ȃ´ª<  Ý­î7J_ŸÂšäŒ@ž?cØ/=‹1Õ¥EéÃnzÑßrft9;ò9Œ!ý’3£ûoá £ò1"”“œä[#0_r& î¸G°EåC–ðÚò…ðëC /¬ƒ!ÐIút‰¢òáiàg´åŒhèÆÀâøá0Ê­Õ2¾g¼eZ’3£²ïz8ŒñÆíX õ +€ÖC$c´$gF9…,‹Q©>ÆPñã Aü1l³œèÈüŽ„Ãµù^Ýc ùñëñØ@3O3Ô‹P•ïï P¼5º>ÇÏ£œ{C;Âé÷OÙr(yn uzDÞ†…˜~hyù«Þh˜¼CßrF öc ‡!T<ûßc`û~4¤«¯ê!—q–3CÐvþ8ŒT>càÿ1›8í¡žý·|1N’ ‡1äôX·ÃÔü8z‚påV“œŒ øq,FÑùp,ÆôN§¢ˆðÙüŽl93z'ùqèöpã”1DŠŸêOµ-g¡’ý8 ¯=†@;¼ç[ÑÞÏ>¯Ñ[ÎŒ6}¾á0òp¯4wPâ'•ŽcÉ£úq„Ãýáp;Œ1Š,ú“:ƒ1G–3£ý:Œ{ÕŽÅPO;E5:6iâ}Ù–3£œ¾7Æ(Úôá0¢ÓÂѲ É,'F›'ÖÂF™Ó÷êvcvÏ“¥·¨¸à~Ù·œè5~‹ûp€1Q®ýÇp_˜ã™S²|1ªg€pCÏ3õv,Æ\ñÑþMô‡±¦•ŽœƒôÇ`ˆ±Ûä_ƒ!ê.tÈuBÊÊ¡Gδ[ãÇ¡ëŠ<Æ@«Ò÷¾‰­’Ý293ðr ‡1˜Ï~\c #úYj<ˆÑ{R/B9[r¾7Z3þû½ý~/â«.= + ªÃªrG΄.²Á¤†…º3-Zk’3‚ºÊÃí\›Ûa Þo) 1’ïǘ5É™à§ÇbT?¼Ûa ¡±—¨ÄýkpñŽª#É™QµÉÃH‡/‡1üAƒ¡Ú¢"G6NòÅ(Æ(äx;Cý<†Î(€x(jOrf öÐCWе—Ã*ºÃ=cTÀÑêÌrbÔÉTÆ@=càbí•NQjV–3CO ‡1ŠëÃ1ÛX§ÿX+-Μس˖3cLÍp·MŽÅ˜ž“ÇgÞ[I¾•ëc1мƨ1z@ÔšIμƒ~†àæ[u; ïC([qäþœ;rfà9ׯ@Iâ‡Ãôͪi‰#ò½åÌèûU“Æ@†©‡1l]k¤p‰G«@IÎ/¿Ùaˆ¶[ˆ_ÇB¨O +Y+êßâ¹{Ë£Nùq%–c0{ÀÌ/±´ØI͈ÖKû1¢èË`!O¨ÛóËëcîÇÖ‘3¢ž¬Ž…(m<ÆuìˆåÚTC1«‘äË1}o»Z£ÚZR³AÅ7ª‹!ÞCÍß#íìS³`|û¤ÒçLrrÔÒd^oe|ËÆ;ÑÏbËÙQý>ÓÄø }H–/ƒo.ßT-<»Qí=âtð©T[Nœ±ïM]õ÷8Pìf’³£žJRÖ›õ8¨û<·|9Ô³a7{Üm9;ûn¨Ã'µÔü=‘¯ÂúÀ8jܱžäìè¾á=nœC)%Ë—a®ET´q's÷ÈGΖ•ë*¾_à!Í,g‡ì7†ÐN~™\lo“œØDÝCµó·pÁ“l&ùrLÒY#ð„¥R’³C÷s C¢y@ø¬¶œ“}hü{¬œt¶$'bŸUû:Us”ÆIÎŽZ|c¦¾SZõ Ùòåб—ˆb±'µù¬¶œÈÍ{‰ƒSO(¥û¬¶œDêLý»ê‹±ßPö€çÙcŒ>“úD„ÁzŠîí0²”;GˆÝ­ùÍøÆê[u;ŒAÝãÌ^eõcà®I’ߌÏa 9íÆí0²Â)ª#ä¿å7âs,Diôp‚‹'1d3W/ë[}" ë¡ÐæÃ±ÃÛ ”‚®“j’ߌÏaŒN¾S·Ãèjöž:m¡1&®x’ß J$‡1yIFô8ñÉ~G¶üfÔÔ{’õ‹‡1´¨1Ê?ô4GŽNn$ùÁÈcÔQÚñºJ&†ÆéVÁ L¦'ùÍ©¿%Ô ~8Œ§—u¥Œý†;ò›ñ9Àh(™RH}¨†x!ä,£å†øF´ÔB·YëËa û`á™–±»¼#¿ŸCÏ“õ¯c1vü—h~ú—ש6Ò$ߌöë0Æx |è4ÿ¦šäŒ(sŒ‡!„}«n‡1¨QýÏv¹eI‚@tG}Qtÿë@̳ü™ÓC7ª|Rxx#‡‡®A,g˜îò¼d˜‡ð¶(8Ô¯Þ©’‡E“ùÉ0 ñÿÍ0‹Vön(FóØq¼I4…bþd˜æ–~ÉXc>ð°É†.æ1ŸÍí2¢ ÖF•S8{ôºËtd˜Çè{cÏ xh‘}:·h‚ÇS8{`ø¦O†y` ë%Ã<ðïö(M°â¸q +gÛO†y`ê%cyLõšÎh‚x|î[ëáìÓ/ŸŒåQöZæÁÚýz¶ÖS…j +||ôx4¦K‚YTÛ¢¦j5z +f> ÍSnxŒ#íWoxa_ÖF¥~ÖÍ|<‹ú'Á ð-ç%ÃP¡ýã¤E÷“B)˜0|õæÀ}È3c9Œî„7eô>€8E“öy/_$˜é^¥3Ã,Pm·…ÈkAÒsøð }–#Ã<ð¥Æ%Ã<žÎ+4¹SD³Á¨û½zð ~ÚEoxú7Ã<_3ÌcêîÆU&¿÷ZG0…2ä“ah<õ’Qdh§üÞkA[)œ=ïVæa“À%Ã<ìDûGO¶ðÐ}“<œ=DöøæÑvo;–ÅÜWJzK¹àKÍÎU÷f©¬^2̃Uý¢ÈÇÄ&ʤ)œ=ž•г¨³ôK‚YÔ¶wƒ«”Øq’Ç=îoÆò(»‡æ!¼YD%6‡SS8[ åÖO†Y0vÉ0‹Vv?$´ÜØðYgŠf ÌüI0 ŒRã’±,ÆÞ êö:Ü­”=µx8yð{›"Ã<ðĺe˜Gß%„»„ÅóÛV4;¼5!áAÙF»d˜ƒ¾æ4bZãa— +´ïRd˜ÇاöL0 C?„˜FcXCÞ7ÌÃÙBë¾û‘a˜Ëå’±<æþ¾¨4ÑøP(JgÞô›aOÊK†yL4?ÿ¨•h}(Ë5‡³ê }2–GÙwìÌ€ÇÄíß±Fïk(¸=…³‡Ì=¬E†y4ŒÏ— ó ÞÝ'/\TϞ‡í.æ!6àüf˜Û‰cAµ……Ú|õD³CÕ²Þ êj _ýâ?$„·6ïO4óWýÏrÃs/õWnøÚÔqâR(Ûkö‰f<îq?õÆÇ0~õÆ—Õ§íE´µvê¯C.z㣨9_j‹k;+KD3T¿¡7>.ÃøÕ_Eý—qiï½ÕRö÷YÑÌ׿÷<ô‹O¾ç§Þøƒ}ýñ4j|ÍÑÌÇÏm§Þø|¿N½ñ1¬­ï#˜XÞª¬hÑÌoÓ«lèbßõ‹¯¾r‚Ù3Ö‡¹´ˆ|½ñ1”ð¯|*Íו¦ÎàOnÍ|4ÅqêÏ=G3C¯\i1TaLUŽhæ×î]:ôÆ'åù«7>—±¾iCšÜäˆf>ïù#ôÆ/£_ô‹?¼äáÜFÛB{ ŽèÁ§S zÇßíWmôºáµÏpõ"îÑ §Z>ú…'¡_½áE|ññ‘ +G?G3§ç£7þ`ß’SoüF^ ÙÆº—¯GôÕOkÒ4O½ñU|Dúè?}¤bL þ˜5¢™?¦´¡7~o¾>=øÝ»K<0£û¬à'ß–Wmì¶ë©zÑÌMKgõ‘Ø£®Õ‡ÙÐ]Í‹øgOoØ·k l`Šf~o^¦Boü:ý$|ôàÏâ+O¨·|Ý®+šùmÔÐ/~ñÏGoü!ë—¡Y÷wØ$S"šù(¼têu™½âqÐüšc¨ˆ¶…ùERôà“7ÌÐÿ)^=ø´ÛanÁÇ«)¢™_«7„пßôjîóúi´-üíã G3Ÿ}Ö9ð |Ó?rÃO_þ‚¯Û+µpD3ÿè©7þè>Cô࣮9¿¢µ½üV˜#zð‹¿jCo|> }ôà‹ß–BMk4”ýˆfü®Ê!7úÐ?jÀ½Ù”+Š–5:f÷ˆ&ú˜ÂóÔ/ü:Q?zãO©ðIѲ0á•Ñ̇u;õÆ÷ÁòG¯Væf{«û7­`¦£&ò)7úŠä€ã&;ˆ™cgGk<èÅê`–DZ_ôÀ*‹„wRt,”u`Æwn¹á1òÍ‹^­ÃøÚ LŒ=ðsF0ã›t:å†G_ô†mýÚÑ*½UžÁŒ—55e¹á1¢÷‹^ÿÐü›×RÞ†…î_)¢™_‡¶S¾Ì9ÆE¯ÖßÕùÛöòQŠ(¢¿ :õ‹O|ÓƒïÏG뱉>|u>­|pÍJãnò£4ªÕf‹c7ÞóŽB<)¢™L­ôSot­¾*=øU}ÕµêŒM®#¢™í®§Þø½Õzу‰ß?Á£!¾+•#šøºõ¡7>^nzуë°~/Šõ¨Á߿ʣŸø£7¾_ãÚès¸ºÏhT“ÅŒh¦êëz£×™£™ßÕ¥G£Â,àKàÑŒ×Vç©_ø²—àÔoÃöú„YãëëØ”Íü®~ÃCo|´k¾èÕÞ~E0ù§Ã9Z`Æcà•SnxÚEñ£µÅ?QV5q©"xàÉ/[È æ=/zÃ/P­ÉÓ©fü?“Ñ/ôT‚\g÷uùèž½û'¨q{]Њ‹¦`Æcð‘Snx|;¹è'ñ¾ÐÊ`yñxE0ãY½X„Üð:H/zµýö#£ñKGu£7˜é4§ê/,¿jcÏîìÎO‹šÏ³õ‰tö9#ô†ïÔô¢¿ª¯<îÅ—¯½PD3¿rÃ7ö‘ç# ¿Î¶PzðÂ^?<šðx±þÓ]mY¤(pEÝGÁ.ª÷ÿ;äÈÊù©[' SÂGéòU°»Œúð#¦ŠÑâdÇñ‹êhÖqó|ÕgLøàC5ß~Ž[9—·ÞU¹¹qâ¸ô| ×ÛCf‡ÁåíÊ®á†ÏѬ¼Ÿë|Ç?øÐG³3bÂq\}ÜŒhÖ_Ov_õÛiòÁ‡¾°W%5 ±-[žUšõç“ÜÁ‡>ßUþVÇàE•öþu(}´L? G³þxÊRðM¿{-|ñU_¼‰À@ìsõ¹Ïr´è?U5øªK2?øõaùþë®þqíhÖç§)_õ÷ýƒý÷`#Mö=_}3î@³>½Øª¾¦|±¡N]ŒŸuO·÷§ ;šÕûn»òUzé~ÑUþxÏè‹Ö=\-¯‰ŽfyØ_®|•~‚/:ä±LÌj¯üSº-òýEWu>ny^tÈÃWùæô5ïÑâAçæÏÑ$??J—oúÍ-ê‹ýÉÃÚ`XãhyB8šõ屑ÁW}ê‡>ø[_¡–¹jÅãlÇñÝt4ËÜÊWùþ|Ô‹¯ònþ[Œ;òVÍò(\Rù*߆ï΋y˜-K ôÊ_£Ë‹z÷³ºlˆ÷³¼=V6´…·´Î·Ïân?†fuÜ´^ù*/Ûo‹ý£ïˆ¶™I +}Ñoý¡YL=”ÌWýmÏ£?üm^ÐG&þ½úb›šõYßM…oú­þF¢,q}¦°P¸g´Íú¨ï/¾ê¯ÎòÁ‡~Zd1Òô=sõÏXý~vå«þ$Ôú¿ü­V|YdA³¸WŸÚòSq4ë÷á;|ÕGMþâCo +²‘ÅÑ´*²ÍúÍ+è*ìÿ¢«ü3€^twyÞšÔÑâèT¾ÊÃÐò¨k¶o¨“-V·-úíìÊW}4ªùÁ‡þäiç¸Ïˆ–…:v Y_¸ÏÊWý&r>øÐ_Í÷gïM‹ÆsæŽf}¼v©òM¿e´èû1nXØì²šåaÙNåCWÒ·çŇü^Ë.Û¦] =´I Y}eV¾ê ·þÁ‡¾Œéëom‹Ö ´è÷A•¯úxÕ>ôáµLí/ ÚÍSÚѬ!©|Õ_sí¾ê/{` }ðÍú<ç¬|ÕÇ~ö¾~Ðöý_x ÜâF2û +4ë#4W¾êí9ýâC¿/¶«Ç#…ñº`VïG +YµÙlÓ›¬gMËTàç¢o¡øÎ„ñîW9ø&ïÅîE‡¼[mí#ÚjÝ^fy,”+_å©oþà«>Œ ˜´«‡‘ФÏgU¶ªwn냭‰6Ÿ¸nýªÃa$4«‹ô'ûæ3£i1=·ÉÑ¢ß\)øÒþÅYÉüàCù›úM[\.¿LŽfy§òU–A>ø*ïõkàÅu‹2ò»àh–G½X•¯ò°0ôÁ×*º|÷1­íÐ?4Íú¸³òU_“ÿƒ}^/pé~MHùϘéÇWÏûœØûI~VŽºg!«K½ôÁ¾G]PBl˜ùÄæðSxÍüþ”(FW‹¥'±Í|ÂÆéÉ}ä‚? Í|ä„à‰A—ߎvG _|ý‡3‚ß|=Žf>Þ >‚zrõåгC3†Óø•I._È]¥£™«oJ¨¿:þî -üã¦ÏÆwÿeMo4ŽfþÞ¾~˜¢ú8V4óå±f¨¿t÷_ÆãÍüco¶®Ü#Õå©_&úÑ"c#xâÌ 7_Ž£…¿½#6¼ðâs‰|9Žf~·‡+F:EnIGÉ4óáͰü…êq"·¤Í6Í|ø5²‘5#»ÐŸ× ´ðõ~èÈ H/¼n2šùci¥ÅH?‘^%`šùÓ‘ ç°"½ö²—îÍüÕ·ó7Gz¡þb/ZøGkFf»·¦Ò—c`fã²ùŒÃ½l°S'ÀLóÅ¥¸¹µyšùÇ|îÂþõÈ­mWø¢—¯S{|`dʺ¹¾Ÿp°Ð·8#Sv;¾3»Ïmg¾ûõŽJoÏ{ñŽàÃÙÈ´¿¡P ™Ï}ù<ó=Ù%”ÑÂ?ÓÖë1îÉ®=ž¨†f>šŠó S/…¤šùs,Û·‰q¿W­ì4ó™üÄñÇç‘3{›WÁÈì_;Z¾yŒD™ÂãTV ™/sÚUCbG™Â3±Ÿ@3Û>¹W -wr ‰'ÕvþÅù07U`c½î8šùÄ^4ø[NB3Ÿ»¯ŸÑ˜ï÷jó—@ ÿxd¼"µ&šYB3,¯# ov÷½ùY¡™Ûf;Bd×¼ÌôEÎÞ3rkòÜ;ÐLßÍÏ‘PÉb÷i=ò†¾x¡":‘[³ïfºØ#mEjÍvú +4óÛ@ŽÌš­h¢JÝ…¾’€+ +´ð¯^»àýÚ!Üg ™ß—/¿÷d*I4ó‰=«ñ‘[ðMgšùܽ’ T†€$ ´ð×¼6âp2«_0³ÇövЈ¢e¡=«14óуÀŸè.§à·•ÐÌ_j=0 nÀðËÔÝ–ã¸çÁî0ɾLŠwíMÚÑÆJhæ‹]pŒ´E +»Õ)ÐÌ?lt‘ÔûaPô5òC[×…£{®¨+ZY~háŸéú üæËq4óan]©}–WT Í|Óø‰tï1Ü,ÑE3ŸiZdØ¡È+”&þÙÎ3j’Ï×ãhæãâØÁlJ€I/÷Ìô©óu¤µH+l‚ßG3Íø 8–ÓÎJhæïæ·P[ø +~£há‹/]3ª6Ó×ãhæÿèM"¯HøYŽ¡™~üp'LâM+Úcô@~ùȺ7ÆnÏV¸fu€³D^ÑÜM½ü´¸øú@éOw¨lýŸã³bü?#•ß;àmûß!±ŽÜüÅ;Âßãot <¿>øF*ÿnÄß e4.±fËß‡ê œÒ©Žÿyv Eì+Àß‘ÿ¾óûîŨ ­7CCh§¯3jŒ2£Æ€eé1 Î1à|ø5£Æ(3JŒq¨|‡Ã9Ƥ÷„¢N¨!ÖéôÂàåû¼fÔeF÷w>bœci)3jŒ2£ÆÀçG ƒsŒf/‡2£Æ(3j sùcœÓûÔ¡¿1ÊŒÛü4·ÃáëeB Q'Ô0×üÂàb©A©3jŒ2£ÆàŸÏ¯1¸}Ä[ø5£Æ(3jŒö{Ô­¼Ã{r™Qc”%ŠÐü8r‡sŒ¾µ'•%FQc¬ß+¤ÆXå‚Í,{™Qc”5ÿ^.5—· ÿÛD:¿fÔeFë 1 Î16¿ø5Bá—H,þ¨‡çxé®×Œ£Î¨1vã‚èpŽ1x¬×Œ£Ì¨1†>vþÆ08Ç€¿zϨ1ÊŒƒÔèþapŽÑ¹ËkFQfÔí«wz#ÞPödÈü ý¿ÆÑPä>ÎÛá6t¼f”uF¼üÈp‡s 8îýšQc”5£í|ÄøÝå‚#I +CÁ›ßý/6d‘L:ŒgWZi_gT¼n*1übë¨"Ýt€ #ͼá;¶ŽuÍ«Ž „qÈú;×yíê'¶Žõ#O‡'èXSçÚÕOlÏVå:@Ð!ó>»Ø8Æ”6A:rךŸØ:ú>çZ‚pŒg1oÇŽ­£iVGÀA‚Žu¯ Ö|ÇÖ¡Ó=Ož§Aû}t;±5ˆüvuKЂŽRõÚ OlyŒê:@бî°ÁŠïØ:’ôì:@ÀÑ×` V|ÇÆÑ׊fGÀA‚ŽÚî xbëèš»#èA‡È=OlužûGÐ‚Žœî xbëP™ m½YÁ¯±c«(ó}=>t¬—7x=vlY¥9‚th¾‡à‰£ÍYOÁ®ÏÌÑ|Íñ[Cé] :ZÎÁ/±cëÈ"â:@Ð!£ïÆŽCæÈÓt€ #׬÷Ž­cHjŽ õ>ñìÐ~~ïž^ïÓŸæg·;ÛϯÒÔ4€ C[4ûvl2ª¨@E‘hôíØ*Šftù“Gn!ðüH†z¥@ ”Îu ¸KíØ–Jc6G<êö®¨l)ØR$Xê7˜ïR¿Ø”*SÒtÄ£®%GJ}J`©ªÑ4Þ±-õ\áñ¨¥§hõh‚­ÖˆÖïÛVMjuÄ£.¥ˆ@«@+l•F4ñwl[é¨êˆGÎuZ}Z@«õêFg„ÛV²vtG,ušò+GØV†°­H°U[M‚V¿Ø¶ZÄtÄÓªhõh‚­dÞ³ÛVIFsÄÓªé;VV Ø*·èä²cÓjZñ´ÒùQG ÕG ´ZÛP°€¿Ôvê*îù§’è{—âó¶Ñ÷¼-„çÙ§§èl´cÛ¨Î<ñTZk:#>¥@°•öè4µcÛJ5©#žV©–hõh‚­ÊÚ0‚V¿Ø¶*³©#zù3g!VV Ø*åìê;¶­òû5ÿ€§T¯=GJ}J@©Ü×Ýè.µcS*­TwÄÓª•¶•!l+lUu›úŽm«u·¬ŽxZé;¬€R€R XJò 0;¶¥Ú|*ñ”’ÒJD ÕG ¶Jc'˜ÛVUߣÊG<­ò8eI ÕG ´J£F'ÐÛVòÞI<­’¼ea[¶"ÁV­D÷²ÛVE«:bµcœ²$Ðê#Ð +[Éz·ƒV¿Ø¶JSð”êRC¥>¥@°Ôúßà˾㎴öJ-ÍO«5…$"Ðê#Ð +„iõØä¾4žØ¶Z;ËpÄÓj¸%"¾V ¾Vž`«žîkæ‰m«¦Cñ´’$%"Ðê#Ð +[é¸O0'¶­tþ‹%žV¹þŽUVV Øj½Z×—ýĶ•híŽxZ¥u4Ž´ú´ÁVi]/ƒV¿Ø¶Z“´;bµZ—CVV Ðjô¡×1æÄ¶Uªï‡}ÄÓjB¶2„mE‚­j»¢'6­Æ˜c:âiUÛ ´ú´ÁV"ùÚ¯Nl[uíÍO+}×Õ(õ(‚¥Öí2úSýb[ª¥ß1ÆO©ÒËŒ´ú´VÏ·5ø²ïضÒZ²#žV¹¼ëêÛʶ ¶jrDOl[IòÀ*ÕæÐ(õ(‚¥4ÝçÐÛR¹¦æˆ§ÕÐ(õ(‚¥r¿Ï¡'6¥þ²]oY’Ü @wä#„žûߘ¡Ô9DHüøÌíª¬²3pëÕᨱËÌ:H¤¢R {é'Gó)£jõ~w¸ª·1²TAª¸ƒUSÞ=ô+£jÚ.tu¸Jw׬ƒTÑA*ê`•y“gý”QeU¿:\U»Ô¬ƒTÑA*ê`Uíïú•QÕŠÈÕá*)³f¤ŠRQ«J}ѯŒ*!W‡©úî}e¤ŠRQ©úÜÙ"zʨ’2öÕáª%²²TAª¸ƒU}d‹è)ƒj؇2®W1gÖAªè u°J³CðWEÓ*íÊ;©ËÈò$Òì¤<{¤ô ô+£hŒrw8IgÕ¬ƒLÑA(ê •ý.³ô”QÕËZW‡«j]šu  +:PŬ-[AOUÚg»:\eÛºd¤ŠRQ«š´–¨~eTÕ2äê0U³Ë…d¤ŠRQ«de(¯¢©ô69魯“4yþ¥‰ƒyÒøÉ•<å§ ž¾‹êÕá »Ñ̬MÐ(î`•ýv’·ù)£jö¿Ý%:\ÕvY©¢ƒTÔÁª¶kò6?eT²åêp•~ÛßÕAªè u°ªŽš¼ÍOU­Ïuu¸J6 ÊUÑA*ê`UQIv—SF•ŠÎ«ÃUå[ÿ®RE©¨ƒTuIv—SF• ú_*µÁÊ:P¨âVÙJ’<í§Œªo¡ŠGÙo`e „ŠBQ£´•äa?e@µ5þV—èpÕ>³RE©¨ƒU"%yØOUSþV—èp•ŸY©¢ƒTÔA*±e9yØOU¶dÊÕá*­sd¨‚Tq«FÉ¡|ʨ²³J®W‰Ýx³RE©¨ƒU­Žäü;eTÙ»e^®*ZkÖAªè u°JVv-=eT‰ˆ^¦ªk•u*:HE¤*»g×ÒS•Úª¯W‡«æßÛêj@4 Š;55Û@OQKú¾:ÕwÚ@¨h u0ª—l=eDñ·D‡£š=Y©¢ƒTÔÁª:³ô”QÕkéW‡«ê^#ë UtŠ:XU4{/œ2ªtü­1Ñá*i³f¤ŠRQG¨ö{‰Þ'óWES_b0ï¤"þù=ù"ÊÿÝyòØóŸÉ_=eø«óæ‘Õý“{ò艋åWEO©urÞ=K‹$yð@<œ'ÏÔg¥üªà±õ¯λglÍòè‰Î§Šœ>§pÞ9ºçNòè‰z¤%[á©‚gØ39ož¾zëož<‘GÏÿçY¶Ë³~UôÌå{æÝ3¥$ùðPþŸç™ž±ž½ð«¢gØ*Çy÷t¿[>yòD=<=¶àßÏóWEOÛM8ïžV³xÞ þÔÐÒšï‘u‰îýdÑñ®î×\4ØÃô¾oNvéœwImë%âˆáñÈѹßGøT‘#mtÎ;GJ¯ož<‘GÏG´•|<¿*xlÊyóØrªûÍ“'òèáùàÛZÏ©¢gµÎq笲×GäsGÎØÏ6øU‘cëÅà¼{†íËož<‘GÏGOÏ6øUÑÓÛœw=UIž<‘GÏGOõðñüªèѽ®¼{t–$OžÈ£‡çƒ§Ûsú~>§Šžú»WaÞ=õ¼Š8Žˆçœ9“eðT‘SvïœwNYUßò÷È:UôŒßµ +óîú÷-Rž<‘GÏO[ý=,~EÔ´½:¥Ó¶ô'–H…g£dÔdztÇjg¿Û³`j:?ò8Ÿò4_F¬jµt…j:?ò8Ÿò8_íÇôïÉ‘]°šÍ‡<Ìç<Íÿ÷3‘Ùçú+¥“߈濵cîßÛI†èŠj:9ò8œò4ßÞÊÿÞ6¶íÕt~äq>åi¾íÍñ±¨üMùUÓù‘Çù”ÇùuÎXF¼I£šÍ‡<Ìç<Íïmþ»ëI©uG5yœOyš¯ö¬|óí\;ªéüÿé.·,IR†î¨OûߨIbYæoF}}+"!lýÄ“;}}ÓØ} ©ôƒ~â£?ÏŽažúJ©ò>ø™'¿íïþö;BœTúÁG?ñäßF_ßTVoH¥|ôOþlë›÷i©ôƒ~â£?­ŠÃoJ)‡TùüÌ“ë•þöÌ!•~ðÑO<ù÷”jîéÞO*ýࣟxò— ï–§‡Ò^”¼üŸ;åj.oy ¤Ò>ꉇ|ZÜ_ö…éë'Þýÿòäïûíþ\JE*ýࣟxò×RüÇŸŸç@*ýࣟxò§•ýùç¬-¤Ò>ú‰þ9múÞßÿýéý7UþÀ?óä·zgÑö÷:'RéýÄ“¿¥ß§Î="<•~ðÑO<ù·Ï_ZmH¥|ôýcµ;‹¶?§dH•?ðÁÏ<ùG6_ß±»CG*ýࣟxò·iþûŒ™KG*ýࣟxò—Þ}}‡YÎH¥|ôOþTî,Úþ¾' RéýÄG¿íßÜûÛ¨ÖRå|ð3Oþnmº¿”ú‰þ¶:f—å5Rå|ð3OþQ²»ö9!•~ðÑO<ùÛÊÞ›÷±¿V¤Ò>ú‰'±ä½¹¾*RéýÄ“?UÌ®nû €TúÁG?ñÑ_ÇÂÙª7ë©ò>ø™'·åëÛkÉ¥xÔOúZ–÷{²½¡ÔzâIŸNV}C*ýࣟøè/sàdÕæÌ†TùüÌ“_Ǽ»µQSH¥|ôOþ}™ðÖßú´J?øè'žüy<kgûœTúÁG?ñÑŸ÷aÊ»s++M¤Êøàgžü£bzµÜl •~ðÑO<ù{ª¾ý[Je •~ðÑO<ù÷Òûó×ÙÏÉð¤Ò>ú‰'j˜^u¤Ù‘J?øè'>úÓ̘^»‹´ŽTùüÌ“¿OL¯ÚrÍH¥|ôOþÚ1½j±…PêG=ñ¤Ïëæ_û<©ôƒ~âá·¿5†WY3#|õ„»þ_žôÖ1»Ê¾öRéýÄ“w_Ýbs_<•~ðÑO<ùóÂð*}ÞJ?øè'>úç2L¯RWÊH•?ðÁÏ<ùGÅô*¥YF*ýࣟxò÷ä͹¤Õ†‡Òît”GšÜås úÉwO©´ƒzâÉ¿²>¹ò>U¤Ò>ú‰þ±Ï +þãd³bH•?ðÁÏ<ù÷0÷Éž{.©ôƒ~âÉ_1XrµŸ¤Ê¹é(¯rªìØOëßmÞ³!•vðQO|ôÛÜ×÷§Q*}ÀƒžyÒ›5ÿlÓ* ¡ÔzâIßjó¯6ÏöTúÁG?ñä/©zWNVkG*ýࣟøèïk/¼ûÛþ‘*àƒŸyò†3Uªítý“J?øè'žüûcÂòæÕ2RéýÄ“OB¬oêȤt´OöÔ'$[k%C(õŽ“žø¨o³Ìéú±/¤H•|ô3Oþ¾fs¿åóü'•~çÉO<ù«ýNH³ÔJ¿óä'žüùs‡»þš­!•~çÉO|ôïC€?Ò*?øègžü6 ë›Ê¬H¥ßyòOþÖÌ×wÎ1J½ã¤'žô%wßýûàrzóI¥ßyòýûŒü›DŸs!U~ðÑÏ<ùGÿ¢¿ÕÑ‘J¿óä'žü½4ßþû@~zÿI¥ßyòOþ²~³èãÏm5¤Òï<ù‰'ÿžW¾¾ûÐ6J½ã¤'>êwaõå³7„J<ê™'½¥ê«;FF&íN“x²×Q|m÷˜†Tú'?ñäÏ­øÚŽ–Oë?©ô;O~â£?­ŒÉ5ŠSáI•|ô3O~›‹›Ëiý'•~çÉO<ù>][ê‡ÒÞćK4¹KIÞ–mžÃþ ¥Üq²}ßç„•¼+›Í´¾þÈÃÿ/OþßÕìcïÕÖͤû¹Æ1KÞ^Ìu•‰Tº';ñä/kù´µÒöÊ{*ýΓŸxòïÝ„eMk4¤Òï<ù‰þ¹ ý“íëóÅÞPéG=ó¤ß§ ÿbûL!”zÇIO<éëþÁvë¡Ô;NzâIŸÛð¶÷d†Tú'?ñÑ?Öþ_÷W«©òƒ~æÉo ê—¼RéwžüÄ“߬°ºiôTú'?ñä/g©¶J«H¥ßyòOþ”0¯šóßTú'?ñÑo{‚ûïÓ¬ZH•|ô3OþÞ²7·Öf[H¥ßyòOþšp–jµ¥‰Tú'?ñäO3«í´#•~çÉO|ô÷Ù1´Zêe U~ðÑÏ<ùÍ[ÿ¾/åv3é¶·íG–¼ubhíþ¨H¥Ûy²?Ë6Ùç²–mª5Ï‹Îö·/’¹„XWôò›+\ñuÅè¿IÇßXW¬û\±þ÷=Æîiâ©N¬+ZOUT|c]±;CT|c]±îgÀ+~T1smâ©N¬+ª5ñT'Ö}ýΓ\ñużí”+fì§T±ÒmðTqb]Q¦‰7?±®èÙÄšŸXWŒ6ÄN<±®X#‰ïãÄ¢bì“szwÉuE«ùYë +³ü¬ÇuÅ\ùYËŠœKyÖãÆº¢ö"Þüĺ¢Ï*Þüĺb âÍO,+Jª&žêĺ¢Ø»Kn¬+Ú½‰pE‹—®åÙº¿Tó«¿}úƲ¢æùöé늖ß>}c]aííÓ7Ös,±O,+ZNjœXWÔªöȉuE··OßXWŒõöéËŠžÊÛ§o¬+vwo~b]ÑæÛ§o¬+F~ûôužŠxbYay¼}úƺBüÿµïS¥Øµ'ÖŸk¤¨øÆ²b¤¥:ô‰uE-ªCŸXWìU+qb]1¦êÐ'–3eÕ¡O¬+öUK¼ù‰uE³wŽßXWØRúĺbÕ¡O,+VîªCŸXWTÕ>¿©æ-«}b]1›üßXTÌ¿}„x;ôuEMëyªëŠ^ß=rc]1ìÝ#7Ök½úƲâsêx¾ŽëŠÖß}c]aóíÐ7Ö{ÿˆ7?±¬(ûï‹7?±®Ø×>ñæ'Ö}©]rb]1Ë;Ço,+jü'ÔtYï]ëÆº¢—·GßXWŒþöèëŠ5ß}cYÑJ~{ôuEko¾±®0S;äĺb.µCN,+z.o¾±®¨ýá7Ö}¾=úƺbæ·GßXVXj⡾©æËx{ôuEOo¾±®Uí‘ëŠejœXVŒ}"_ljuÅÞoâë8±®°®zôt—[–í ®§r'еxèƒêùÿÞ´FûýW+pf#Ò"07Æ`˜£V–ѹхet`n¨³ŒÌ Ÿ¬JSc–ƪ$07ÆätæÎ39¹z`oõbnLe9˜ó¯ÔqçôÆÜzçôÆÜ0¹szcn »«dcjÔ2ï*Ù˜½Ý9½17TïœÞ˜>îœÞ˜­Ô;§7æîŸW%nÌ ñ;§7æ†öRåÏÏÎj$05z5V#¹ÑçÓsÃÚÓscèÓSCʸszcnôzçôÆÜ@LV˜îwNoÌ9Y¦†¶Fjä¥üyÑ;¥7æ†;¥7æjœÀÔ°*wJoÌî“ìF`nX½Szcn a)˜^ŒÕH`n´Éj$07´±”Ì W–Ò¹1KéÀÔ­²”Ì #•˜æ,¥sc–Ò©1+»ÀÜèÆª$07pÈ~æÆó;ãÅ·ÑÊ_)zåô‡¹{ë¿•øanàæóïÊ?Ì $ß¿+ÿ07¦_9ýajàRiä­sCÚU%æ†é•ÓæÆ¢›ÒçÛóä-æF6E`n¨_9ýanŒ2Ù[½˜½ô+§?Ìf¬FsC&«‘ÀÜðvåô‡¹1õÊéSCð$©ÃÀÜ@gNV˜&WN˜ïœþ05´–+§?ÌÞ¯œþ07”œ¦ò§}^_òSÃJ»2úÃÜhzeô‡¹!ãÊèsÃ+ËèÀܘÂ2:05¼:ËèÀÜÂÎ_`nX»î[æÆPV!©1Ê`˜½²ŒÌ òR/åÏ»³ŒLY +ËèÀÜ@"‘uæ†Ø$u˜6Yææ'5˜õ¯T½3zcnôqgôÆÜÀ}áªÃ¹nóZùÆÔ¨ÅïŒÞ˜½Ü½17ð›•æÒûª’¹1Çuãú05ZÃàmæ†èÓsÃÆÓs=3ÙÀÔèUîœÞ˜ÝïœÞ˜ø²•æÆh¬JSCP?ä­s£;§7æ†Ö;§7æ†ËÓscúÓSC[!/õRþ¼ô;§7æ†ÙÓscLV#©aµ± Ì®wNoÌ wNoÌQYN¦†a9˜ÍYN憖ӹû!Yy`nLeU˜ƒ]ê6æ†T–Ó¹aÂr:07†ß7®©¬d9˜]XNæ†:ËéÀÜ…åt`b´¿RÚ]%séz½ÕÆÜqçôÆÜðzçôÆÜ@¯vUâÆÔ¨èi¯JܘØ©«7æ†õ;§7æÆ /5þ×;µ2ïÙ˜½Ý5²17°³d7sÃÇÓS£—zçôÆÜhrçôÆÜ¿szãmøÀ‘œ¢Ò?´û­øÈÌÿûOuôº-ïxù+ø8À¨öge¯ÿèyÎð:ºÊÒ[žãß¡×0œ Ã)zþ‘ŽÜ¿¹ l¼wz«cÍáصÑÒË~Æ=ô_¾¼l”Ù×z"û Qü¦ÿUÖèœÛg@è '£"ñÆ;$SÖåñ1¬K8ȉx+4D«v_c Άã£C²ÏÇc¸ÍŒ³a?÷;Ôö­ë1† KøÇ¨k‰RöÍî1f‰fA{üR_•8O>‘´e½jà,ˆ¶˜¼ë¾Ÿ¾†¯UÎF·%ô>ë' <á, ]F-Ã?£õ‘èPFìE¾«BG‰&œúÖí3dâgÝ}®M œ"3¦oòüÛm !ž '£L/ëŸÕ±2ú1TWqÎÆx +àªSWä>†õuÿEb‰Õ›·r¬/álxÓ5ÇnH^a¶vh~?D 4Óóüðj gA­D% ëгì)ÝΆŒx£g5ßv×ÒÖÿeÍ^tw QËúùg£?Íø;Ôw—ûø× g㉶ª»“~Œ¦« g£ª=sèîÖã-Q|¬!Û7‚Çú–óÆŸa8Èø'1$ûÖñ³hÂ?FCußl§t$œŸ÷È¿³rtª-ál¸½9…!ïõ¬ÜÛZGàlào5´”³òQÞ“¿ñoc 5/gåcX¢YÐÖÖKáXŸ…ã7í gCºÇ¶å¿VºKÂÙèê3†tœã×j5O8h7â…_œ3&‘„³ñîÏ;ôôÇky Té;„‘~ÛѺŠ'œÒ{ì­™#ˆ®EjÂÉS<êÇðзÈ–ÖÎÚÅX¢aθ•µ„³ác~Ž`3ë–ðÐ!—sqm3álX/ñVhÏÄ;-ál¨®—jãœÀ6#’6΂x]/UôœÀ6×Ùš…¾ŽŒvÎ_/‘«ÿ¼ÒyκÖÎÎÆš£Û9h·×¯8UFì“T´©Ç+Gg£ØÊª¸¯n–žõ‰’ nv>KMWÆ?Fië¿#¹Ïû 03Îöeý3ô ßÑ{ÚΆ˪ÿ6ý½nc-"p6låJîÌ€ÐCóã]“<ÇÏV¾b%ðÍÙçY× +çÇ¥­dnø.Ÿ}žs¿ç‹³#¯„{Š}õëä +ÀÙh³Wúí´T]¿]à,<ÿ"†ºé·ji}e`à£H,üùè~ Ô½$œRW”™š +éC2NºðµK¨ÛsìDl­#p6†®|Bvj\TVΆûJf|ÌN¢‰µU˳×zæèø§¦B<¾†ÿõí“ûóY>Ï7<æ§qˆ+¾—çàáØÍŒ³!Ñæ`¨s'ó¹†n˜ïî1ðÆÁz\Ës[<8 m®K(Ú¥ÓÌ+’Ýþ1j‰ÉÎò·Šë“'œÚ뚯÷íƒ6™‰f¡èû]ëOž“‡ËÓûMÛ8ø6IìÏzNîªk³ojlœ#`αÿUcz=GOmcÂÙðnë­Z;GOMÞóµq6ÐöÅ6S3¡èÿ-ál¨—˜Ã<5ˆ: gCâžÛŸr<Í.ˆkŒ¢Q?ø~Ÿ£‡¤K8½íéKj&ðMíg£ÉZ"Z”ï¥ QÓÍÏc?ãuÕp…=¬’p6pŠÉµö}_ + ÿqÓÅP=w+<ÞÆ¡éy™qÏíÏ_õ;Þ†~HÎVÿKlÖ3…–‘q6°ëŸ‰•³ne$œ $gT2ÿôòøv––p6pëŠ9ðé:ͼyŸšðQã§ÅQ>Ç^5á, «£»>7¶Ï+ g­Ãz©Žü äWO8mĺ;n~ߺ½¨zÂ?B©1ÔÞ¾sèI3ÎF.CÖÎéó¶NXÐ,”nñKµžš +ÜÝLN~s_SÔÔT ZÖ2g­|ìl½eˆf|-#p6|®z«¸×­2—Kø3ž¡µî$` +4P• Ïu²{ŸWü×õE ü3Å®Âd`”­2s˜¬,¬Mö O+Ñ-á<Çôÿç»\²em¸¢¼ÃWÀ¢²ÿiBnlêfÖ§LµŒABì?Œ£íSàchŒ*ûÛ†øûPZ§äGÚJùÛ†_~ëy·ëà{¼þ}i»Ôêæô¢´ÒŽŸbØŸé04DÏ9“¡1òÎ1Í¿¿hˆÒöylø¢ïÔ;Œ1ÏÔ$dÌó¸]ròÏŒvé4|ÆHz|£ï3æchŒ´ç§Íe~"Ì*pà3BöÍyc^œ +  Ö0c§C´ñ„Hu%‹ãWˆ¾€—1f»²Öâ2dÖ ¸i+VŸ±K?ð£ØÞy#e/zky¿“–íßrÇ´zZÇg„j‡÷ËóÞ›H˜!¬ ÖGQúoµC=à+Àhã;~èþ-Þ†Fè¹ØŸõñ´©MÛñÖz†Iò4„m• ÑjµÒÛÓ×Î{=CèåM¾‚†¨9V24„HßÊÓkˆ¾§¯c䯠!$†N††Ð¾vÏ"=­s›÷tÐ3D÷ x3ÄhÌaìèáéµ5„ô1|ÆÅgŽî¼kS€†ÆÐªkoÕÚÓÏqoÃG =ºkùCo hh ßRëòµì½¿è+@ñ3^ÿ¤ž`¼þ}’jÛ£i3ü PÚN_ÃgM¼ø5†ÞÙB24Fì²?SÞ¡Î!ŽŸ1´í_cÆè‚ÆŒö#½•þÄȹ¥¿bô‡1fRW4DH{†¢ÍuyBèŒ>CdÙp"•Rȹ÷Bi“ð ¡­PüÑ3B™W³÷x  ‡Nƒñúÿ]Ò~#- ¿åŽ)Æ¿" ŸõϘ!FídhŒæ•¢jFý’;”ó†ÏÚ­ä¯1æ&¬hÌ¡ìGÚ±=e°ÖN|Ƽsõ04F­{->†ÆÐ®Ø¦XË<·žûÀ0ú +±KË1^#HΠi¼ƒ§y5ñ]ûïŸ!žùý ¡Å1’ !ô¾ºiSó”ÁÞ´Û<ð¢—üfˆ‘* 2Û ±ÝV´ú}';ë Ÿ!ÆÎ¼CÐz 3DØå¿è-â÷¡Äë¯áWˆ6Ú×Уì÷ch -:¶|Ú…ß4jMéÀGŒjì£m(XÐñ‰ÃïØÓâ¿O1ÃgˆèåègÌñùoCch—kÓÐ –È/FØ…Åð+FßçýÏX1zhdȼˆÍCï2ò”)íå÷ùmøŒ‘jNcÆHã¥i ^ç'Ê?íbwŸýé*Ç­wÊÚÔÚä¾<úEï ¯Êv?ZoÕŸþ5àÑLjZ {¢™¯·ÿ¶ï—üVó‘¿å¾Œ…Ù(Áð—±0±Uб0e?^OÃ0M› 0fCÏXsÃl莤 ³R¦ £‘µ1·a˜*ÞÊ09x+Ãlh[ÞÀX -ø^¦OÃ0RÌÜ0%6Øí†ÙÐKìDÃhÄQv¢a6Z¢4ÌFP‹òøÕ€ßÂÂl„Lh ½XqÃlÔV`Å ³¡í¬¸a6b¤ 4 FÑ¡ßè˜ ©éš¹c6JJ×̳G¼fî®7ÄkæŽÙhù®oŽÙ¨!ÀÌ ³‘Z€™f#仾9F£õxg c6ô¼»2Ð1¹tб0ÚŒPŒ…Ñî䯮Dé© ëa˜’ïtÌFB1F£Žvç c6Z¡4ÌF”ƒ†ÙHrÐ0¡RFCû.ÊAÃlTè1³‘…rÐ0zÓ¹j»c4¹'Çlhõ†÷1ÌF +”}†ÑЫeŸa6ÚÝPnÊãgw +ÂÂlhokm˜ í˜a­ £{Øå†Ù¨£Ârf#K…™fCO_˜¹a4€îÂ1Ò)÷ ³Q¼»x_ªÊÝ…>JÞ]¼ôGw‘ÿáÝÅa8f£]7:ƒ<º¦Aãf#íä{ ‰sOŸèì ,Œ†vN»³†ÙÐÚu­„c6rk×J8f#–+a6âξ—a˜ é37ÌF©fn˜”*ÌÜ02¼¯x†ÙhÞW¼öG_¡ª÷o£þÑWè£îìsÌFhwö9F£vz©Ey¼Ä{Ý0¹§ÆÂlÄ +ù·(Ž/#EÈpÃlȈÂ0EÌÛ0)ø´†ÑÐö}Àzf£5Ê?ÃlÔ<`§f#‡N1f#4ªn†ÑH½RþfCåŸa6r§êf˜XéëF#Žœa'fCoy° ³Qe a6R¡ 4ÌF ôXLJy“¼ÃlèÊÂjfC{YX Ãlh/ûÐ0éßèõÎ@ÇlHWÅŭæó5sÇlèÈkæŽÑèú Çl4è/³Q ¿pÌF‚þÂ1ú Çh´ý…c6j½¶î¦<>'f#Œû@sŒ†vCåÊqÇlH.WŽ;f£&åñzk€yF£ŽrwöŽÙh‘òÏ0¥'XoÃlèý“b,ÌFH”†Ñ(mPþfCÏx+Ãldè/³åŸa4ôlXsÃlHØV†ÝèE›¤‡ÉRý§m|²¯ûÃQ´g=W°ë_è!ÿi<ø6ž?û/ÿÑýVÿï­æ/ïÖ·rÌÆðÁÛçàe”X›Ü†a6ò¾š¾…|ÜLßãEG‚°0½`ˆ…Ѩz¦¤Û0ÌFÞÊ0ÚÐÂjf£µ«a !\ûÐ1)Ñ1ÌF©´G ³!½Ð[-ÌÆˆ»û~ £Ñb©õ6 ³‘[…™fC‚Àšf£gh¤ÁN4ÌF´K ³QíÃl4ïßF;{ã·1z„õ0ŒÆH1Âzf£”37̆~E˜¹a6ô+ÂÌ ƒ¡Í|Ìùš¹c6r½w‰c6j¿w‰c6z¼ë´c4b(ðR‹òøÔî:í˜î:혖ï:í˜!VÃ0I;»k:fC÷ÛµG³!•öˆa6z¿ë´c4rŒwv̆væWv8f£¶»N;f£‡»N;F£hÀÌ ³‘ä®ÓŽÙ(ƒ2Ð0z ca6F½ë´c4jìwvÌF‰wv̆”»N;f£·»N;FCb¸ë´c6r¾ë´c6ªPf£u¡·Z"íÃl¤BuÚ0¥Q6ÌF ôR“òø‘©NF£ëü „a6 ÕÝ”ÇK¢*m˜ íV`‡Fc„N;Ä09R•6̆öÀ0qÃl´FUÚ0åŸöòw•vÌFÊw•vÌF‘»J;fCƵm7åñ#Þ'¹c4ôÜ¢†ÙÈíÞ†ŽÙКt­†c6z¹k´c4´É¾k´c6r¸k´c6j¾k´c6šÜ5Ú1£Ó1ŒFNñ>ɳQÊ}’;fCÚ]£³1Â]££QtÁN4Ì\7åñuÜ5Ú1=Ý5Ú15TÚ#†ÙHöˆa6j¼«´c6´îAvfc´»J;FCR¸«´c6J¾«´c6´×„™f£ªÒ†Ñhsèmf#Ú%†Ù¨ê´a6zôV £Ñ´ ŽÙHê´a6j :m˜–©NfcÕiÃh  oe˜ íËá­ ³!…ê´a6þGw™eI’Â@ð*s©Ç*àþ‰%C.iú«ÚÁ°Œ 0GT§Oý/åäëô‹c¢%ñÅ1ÑÉ×éÇÄX¾N¿8$øFü¨ÆýK÷ßÈ‹c¢Mÿ¼8&x=»ÙxqL¬æëô‹C¢äáëô‹c¢%_§_|{ žüÄ1Á7±àÉO•kLðä'މš£oäÄ1Ñ[ðì4î?†¯Ò/‰–’¯Ò/މR}•~qL4ò7®Ç-_¥_«ú*ýâè™|•~qLÔ}#'~ÄÈ|Íã¯ÿŸå/z» ÿ‡JnÄñ÷–F‘ã~»ïhãëk‡POfk»‰hð)¢³ø4ñeò#ì@šXu–x»V;PHÈç#Ì@þWÑâb_#â 䟜 êþWýòo—›êÈîÉù¹ã¦Ü»{»¿q§Uˆb¦ï7Šê^¥™ñÍ ªwšù¤À òÒߤ~_†zG~E V7;~ EPã#€k?PH¨ïÉä~³~ ÿä¸.ü@þåâÚó¹É³ ÛŽã?ŽQpæÜºæ—Öi©®_€ß >±ÕÖõ°ïøF4ä¯ÄU~â,yNüºÖ¯òþrj7~H¯²£´øåþñÃߪøÅµü1Z¿¤Ï¿A{ê2ýõ9oå¥òWúHSÅ¿ßï›.Á“2û‰×̤ Ût‰UËI©êîoÙý+Ÿ,n8çTÝmÃíÝÛ¨´c¾wÔ¢ûÛ¦KðòàI‘xCئM´¿,[ÑŽ×Ò÷Ù é•§ƒ?ûª¿×rûS#ÙÏ8®\êªlÓ%øð-Kâ^ººM›³êšsǼPôSø¦KT¾kô¯©Ž¾åöïµîOfòTeèoZnÿ±—'‡Ü¬ÁµÜþ|-ÙØäû_Wgª iô—My²æ¦:M—àIœyÇô),hºD)«ŽÏÔÔ™8hz+ü”Ä᯲M—¨¯–;ns% lÓ#&ÏÌŽ']™|Ó%øÔ™äL•ÿ +Ù5a›Œ#ËÎ=r¼&ó…ï°’xsáŽeÏ`æý»½ê‘&WW«òa›.!úzâ¼ôgå›^M««æ7x»¾é£¥5Î÷œ’~rß„USJÔ‚*øZn•ʩγbx¨{SÐôê&ÑY3­•4¡pbËíßÚ¤ýÑšüö¥¼êIyeê/Ö7]bô5Îkà¥Ù¡ÊÚ¦K¬”é,¯ÔõÝ$hº50ÉépÇ|ýÉPmÓ«ä­Ì7N¡0Û¦K~g´ãQõm&hzµ¿69ed9‰u$lÓ%ZëwÑ·1iÂ6=bPÙéà … É´¼þ|ài;æ£1Áo²M—è‰ä§òΪšorß-©ÄÄiz¿ŠëOÞñàzÑáW™¦GtJýÔ¾x aš‘;¸ÌZ¢37ñvv_í¯½TR¶¿Tì){•íãg.U`Ç`Ãô»íZeýÖ’vœX;x»k–G' +tŒÒfàØ18Fv;øŒKŽö«åàhPýÙQ²œ¤G¥@ç+Pì}LKˆ‚+]@ #ÕWšÁ±cppý·;¤P{™OµÙ+N¬µŽb Qt>Ö{ýwGxn¬ KˆcŽ訿}v©…ù.eE°£–2ü/˜òõq€Ÿ s0å'ǺCr6J%:¨ç`ÎO Õ°N²„8ê>%s~bpܹU€(fn€Šü;L"/Ü0ß=É$çžûé"¡™/d|!µŽkå]•€GÍ= Ð1ÊrSþbpœ÷„8h/sK £ñ pì|Y²„8f™ŽBÓöƒc²;(Ýý tð±Õöà &5²„8ê{ À! Çm‚/GéÕâèm:ún318Ú¨–zµè9vŒ§½éq¬ÑÜ5˜óƒcÙþl| +úƒO¬~|1ör±€(øéNž¬¡O$H(Gú[³ú}ðÅÁ ˆÏa tPòûà‹cÇG|'DK £¿¾OìsX@ #7¿¾Õ߉ÝààÛ‰ß_Œ·›âˆïæa tÐôûà‹ƒ‹ û5W@ £u¿¾´š%Ä1F ¢¿ ¾m4KˆâTcK€c¬å·Áƒ£Ð°„8 +­€@Ç ¿ ¾¹X@‰"½ú]ðÅZ1–íφ1[Ô 5W_ šŽGo+ Ð\ n +†fzËðµ,ßFço9»›Í‹aü|«”"D‘Ú tPÎÁ#œX;ˆ?K°ƒãèà/Âí~/G¯Õâèï9€@Gî~÷{18J/–ß}oJB=~_}ao=ÕîzãØ4W°¬O ãÓ]ÖŠ`CŸ÷÷#þqÁ²>18ê$Kˆ£¿§¥Ì`]ŸiUKˆ£æàLPÉO¬¿ú¤q¤ÚƒFPÊO ŽÖÈìà5Ÿ‹LàØ±vðÙ¬[BÏ *jò¶ƒ¢Ý¥§Qäûµ!Ž4¢Û‰µ£¬Z,ÁŽzË# à1ÚôN ŠV‹%DÑÚtðÊfüÄÚ‘gŸ–Gî- ÐÁþè9v ŽÚ‡%Øq×8öGC¦h×;±6¤y¿)Eˆ¡Ýµ8ö<:ÅNÁÀoÝôAîÕ÷ÇñGŠö½+C]ó>‚ùV/PÑ(xK;Ϫé/㿵ýqüÒ¢-ïÄÚ0gu„(î1T¤œ‚*xbP”û-)‚iÞ + päÁ§Dï8±vŒÑÉâh·È#>gkâÄà(w¶!Ž\W@ £æhç;±vÐhÕÄŸê5 Бf´óå9>Bõ–s$ÀÁsí|'ÖŽ~¯XÁW˜@•hã;1(Ê=ù)Bõ.$ÐQW´ñX;øDH–øí2K’„¡àUæ  ¸ÿÅæQ`,aýM¼q:Ë­ŽÖ9#¢+9òGU½‰éàýêFâuÔñ‡ êÓùNìlóÈ#FµŒˆŽVì>ò{ ¢›˜Ò>­ïÄÁQ¬ßÚGMˆè ù´¾{G¥9Db:D3":JÕ»3Ø;ʬªêGMˆàèØ=ïÊ~bç aUnb:DkBD‡ªÜíéÄÞÑ;}8ðêö„ˆþÌ Oê m¨\×OÖú½>ÞóýÝÄO Ÿë!@5lÉõÁк}æ{ƒq±›˜,} ¿½ðëøÅÞ¡2»P$ਭZBD‡J¾ð{¦ » 8Ê–Ñ’|á+önÏßê%¦ƒ÷yD"8ðO<±wPký&쯣‘ÑÑj½«ú‰½£öý 8Ž>ZD…ô’=Æ/öŠ‚Áê&¦‚,#¢ƒô3»Ø9ê8?ø%àhV8!¢£Ð§žØ;úÐ~pØPKˆàÐ6²¸bï@i71¨$ ªŸÙíÄÁQj» 8T{Oˆèà¬VýRo°ÒÚu=î’߿Ϳش4»‰© ª øf²æ·bï²ëž#àÀÌ( &Yó[±wШz6cj R³æ·bï¨þë8ŠÕ„ˆŽÚ3ÅL½¡è~=ßë!˜†ïõáþ<4{¡Vì hn{HpE’룡'_ÅŠ½¡×ÝÀaëî%‘ˆ™Çõuübï°n7Åï5úQb™Â{…¶Ê7Gë:ÑQ8ë}+ö‘A71edDpPÇÄøu¬Ø;ø·EÂæ®D–Ñ¿Arä+öÂ+zp(·šÑÁ’5¿{GyF~GÀ!º_ÝHDG­Yó[ñq0–¢gTvÜjMˆà¨½äÌWì½t¾ 8¨‹$Dtö…Äñ‹½Ãž!ÐpԱǠHD‡Ô¬ù­Ø;ôÐ1uφ‘ˆŽÚ³¹mÅÞÁý¹ÙKÀQH-!‚õ¦'g¾bï ÝC #¯ï?a$¢£e£ú/õ†ŠW÷º‚λa…ëãýe´¤¨¯Øæ<ÕnŠÆ%#¢ƒ¬%M|ÅÞúCÀaô<\ ¢£°e¨_ì:vqu„ÎWÍjB8GŸß•}:ì{‡òMÀ!Ô4!¢C¿Ç±So ù·þz˜~ÓÎu}¼?Ëwh{bo(¦tP ¤×„ˆŽJßþ÷ÄÎ>÷ G]íä&‚££Tjá{G+ú!à(œQa*Éc¬Ø+´v¾ ÅÃ¥%Dtqö¿Ø;P*ÆMÀÑù7¶ÝDtPù¶¿'öpzp4ª#!‚£ömOì6ê—ÐùUŽ‘ÑÑøÛþžØ;ð rp^…„ˆ-ßö÷ÄÞ¡Ÿëa`é’\ Ô¾ÍK·›€ƒjë Eú§>±w”VûMÀQúóëɺñÄΡ8Ñ¡8g š=Å/õŨq]ûwö½>ÞŸÓb»bo V» ¥e×óHDG¥oï{bçt9º 8tµÄ›Å“ü¡VìÖ¾¢Ò":̲޷bïàýÖ: +&•ˆ +aM¾ï{E±ÑoŽº<QAE“Ï{ÅNÁØòä& (f-!‚s&øŠ½ChÜ€¢@®¥é¢¢‰$}Å^Qkµ›€s–%DthͺߊUh­#t¢ Ô³î·bïÚ­ÔpÈØ=Ñ19ò{G©ÏÍ^–]]"¸)'G¾bçÀ¾ 8¨ì·-Ñ¡ƒ’3_±wÔ>n +Œs-¢‚-›ÛVì({ýCèn¼ß¶HDGåln[±w bŒ›€£µf 4JMŽ|ÅÇAñýÝƬ sÊH¿Ø;dÎ~‡`¡Jˆè)I]_±sô^Ÿüpà Ô„ˆª%©ë+öŽÒ÷y8ŽÚ†$DpÔѳ¸bçhOÉpÉÅñö Í3¹ý/v·7ŒÈ|ú'vQDthÙ#übçP ~7M€¨ ‘µ¿;cwé7‡`ªMˆè@8ï¹pÙÓߊS¢t~›“TÚƒáŠsBѸ‚‡ —æ··opk{ÖZqN £œg+ûí_qB´¿1ê[ÓÑy­÷‰sÂú[¡™¨wç„è[p¹Pcç¹µ—úªxOœ}¸%–Œ~¯ÕçD³zÞu4Ò:\œÊõ¼ºø)E]œ\Þ²ƒF:\š¥½5¤öú«éOœí]*~90¿ÚÊûcã”îâœàö~¯µŽßùÄ9»žã.CÌ¥)`£ösÚ˜a7±âœ°ÞÎi‘ý‡]qNˆ¾¢ˆ‹s‚¨í÷\ð=ðpi +èÖ`ƒÍÅ9ÑPÎ!¼OcÅ9¡g°QW¯|âœà3§ËßîëOš¥“ÀÚoÀ|â”~fhR÷i¬8'ìLÄ ªhwqNð™o¯w׿âœ@»è‡°µ=qJðàrž¼ñ¼îs[ÉëÀ»Þ\œbãJæCü✠ç=4µn.Î ”—s†âÙ]œ„Å眇¢öû8'TÚ9UÛ…jÅ9Áµ'W”OrqNà÷ž'Gõ°æâ”¨]ßOPP—ÙÅ9aô~‚‚ »‹s‚Çû r—Â.Ήjï'ÈÂÆ.N‰2Îp¢à]œhçÉI{1çÄÜqQu?ùŠs‚^ 6va~y©lçz.»7­8!ìoàu£‡@½¡îâœP}?À‚¢F.Î Œ,û)xÞù·Ä>qN”3Z€ öÜž8%z·gkb êÂüzãgÂõÕL]œRJ{ˆ&ô[¥ž8'j+ü¶¾×'M†–w[swqN žÇÆÔÉÅ9jqm\ÙÅ9AªçW±)±‹s¢ž_…iµ §„µ3]0j7rqNè™._PÙϱâœ`~>¦¹§«‹sâl—ØØFÛo•ùåR°mV¡½Ë%Hç.Çòï»MUroyg +@X&€×~¯.gò@Ü€0—~o@ÐP´Öþõn@ Aaü÷Ÿp}Xæõ2g™¸þ¼À½ýL ·¶W³ý ,?”,l9 ì>À_yùw÷ @X}jÝ*¨ïêã¸ùL@d½ï怰øL ÓžÞÅ'aïЈt=ô»÷ ì=À¼·zú»÷ ¬=z){A}Ö¹ßzæÅ<úþ³õ„ËÃÒ3|à{:KOÂÎ`ÔÖöÂuvž„g8æ½xœÇqå™À°âw›6ø6´­?é»ñ ,<hÏôý.< €Šocò»ðx î;@‘Þÿuö„ugƒÊú³¾ëN¶€PaöO:ÛN¶3нm'aÙú­æâ®3”˜½¢œ]'aÕ™@o{ßxW„M€Ð3t¿›N¢3ÿlW[–m« +ëÊîÀ©áûѨÛÿß× â_U0+S$íÌxŸÑa‚õ9 ÔPªÜÃçs ÁØœE@‹a?ãÆå,ZÂír Á˜ZŠzÓŸÉ1ãq¡…&¡Ïã0ÁZzYÉÏâ‚q8‹gRóós8†` Î"ô¡7ýC0þ iÌM°öfÐfä>{cÆÝ,ÂlQ6ý¹C0æ„ Ã.ÆŒ·Y„ž‡Œé§gmí¬âgm Á:jÔ›þœ!XcÂÏçþŒYŸìr8µ“Ÿ±1ë­¯¡Mö/v½s5aÝ{cûâÖÔ€€£^ägj Áz0gê'?38KPuª³øY&\ž&¬‰\ÅÏÒ˜õÖÑLny܎Ƭ¡yÇÖŬ¡a eü³†† —Ÿ ÝPOÿ¬Ÿ1kg@@‹éÿ¬1ëfÂ~!o7cÖ̸‚eÓŸ™1ëe²*·•áõ—“ TºzÎÏÉ‚52 à)‘/úŒŒ!X¬·1ëÙÆ`9puDutWleBƒP+j”3¦¡¡Õ&(Ð_dË57¡” -pý-ú#DÌn!ʦKOj” mª›-e>ÊMP"İRq‡R{”› L@Ó”M£Rå&(F“fåGµ Jëa’4½\ýÈpP&´2dÏ9û‘á DÀvÙsŽ~d8(Ðb¤c¤áG†ƒ2aèðmj”Ö—„'QB%v_ ‚2au ÅÑ}r ʬ—¾a9|r J„šG‘Ô‹ßë eBÇÜ#¡â¼•‚´Örj$­'­ß(Ð`ä",ß² L˜Eê? ?.”Öw\³„ÚÝ€~P& ÃÈŽ¨þš%ˆ)Hâüõø¤2f}Rý›cä;µÊ„ªDZM·ÀAiýL³h¨$WleBsJ(NWlý† ¾†ºFJWleBi]ö°:¸W” nå“Fu®GAZŽâúAõïÄ;(ÿ~“a!dÌxeBjû5¯xt]­”uì ‘:\©”×—R%-zv¥£ /E¾¿G?+”“3™|.ÛMæeBJQC­¹R;(WΈQ> °+µƒ2¡„(GÚRp¥vPSü³ ¡ÂhøM jÚËÐ,Zeî7-¨i`]k³Öø¨5AMƒlMŽS»jZpm +~\8¨iò¥Ê¦×Œë7-¨yFr‘MãAyÔš Lˆ9©BöãÂAù%Ä„¢ +°K¾xe^_)ÿÇ5Û;N3Å[sOÎA™PfHBgö#(0h'÷øžò°Óz…7çKYP&à™“óI½øV±Ažïæn‰ÔèÆòƒ2¡Ô¤¿Vï“NP&„’T!´ÇÊC-º…Ô2ÆÝæeBJCn8¶ð¨4Ay’ZûÙäsNP^_ÂKÀTõ(4A™RÉp»:ÔxÑäŒB:Ô¸©‘U¡<êYkZø!¥Ç“&¨±ƒm›£‹1™:¨1œu×1Bî Œ×’G.=Vo”×LJ„ÒtevP",Ó%„£»÷{P&@@0¹ü DÈ3t9 u_ñA™Pð@H(wWheB]NiÀ"Ýw|P"$´ŠkwV”×§¾+¡6\”0^I©—êš×A™€^Ñ$”ü pP& WÈ©â¹uy}P"¬Þ! +Hq7(” èr ­úAá ‡P&F©8$±[öƒÂA™€f!‘à焃ÒzŒ¿]u<>hƒ¼¼Ž.;®-&ŸÚ‚2!Ê´Y–{T› Dè°!Âcä/AP& YˆB™)zA‰ÐfÍr¦¥ÍèëYP&Ô2•€aÞ_‚ Lˆ2q"”ò£Ú%BíI@Á𛔠袀Â}”› DÀ¨04TË£ÜeB ECÙÏ +eB˜ÚWózÖ=a£DÈm9V< r” ©gi©¥G¹ J„„"Çš²ŸÊLˆÒÅ3Ù§· LE;@œ9û䔸©¡²O>A™€‘FŽ÷Qq‚ÃBUB*É?ž‚2¡mÝ1<Êaƒ¿åc=¾ÚÂr~n½ L¨³Èï\¨¿gA™GQ…œÜT~P" ô Ùr3ø{” y7¥¼¬ê¼sû ´¾Ï¶'m„Zšwn” µJ O×ÃÊËc]B±{Ç%Bë2tf4p?1” hê~b8(Ðeu£ø‰á L€ÓPªåλƒ2!L?1”Ö—&SgÆá'†ƒ2!í·‘Ú\©”Öã‚ +äìJí L@»3ê1¸R;(Bmm‡0Ý8tP"ÀkLI<ŒÐn4?(Òžª)ÑÕÚA j-„*M¸–¨¯aÂEãÚŒå^g][Kx›*ÍÃÐf`IuûÇð¡Í€?Å_å"{}G³•²uÚŒ•«SüWÿj +dª|Dw=SY¯¤[ï"ÿ{7  él_ûÇ×ÏÁ[dQ¡ã +ý5c§>óý#TÓèÆô4ðêV‚Y£ôoFÿ ³ª°Œ¥ùJ5~uk`:&˜5òTCH h 7ÆckÈ5}ž¶íGç 1µ[!–z3ú2E©>K‰.Ÿ+†÷h -pAY"e!ˆ‰65E,cIÀ€‰zj8æOBœ ,¡qÜ„%ôœ,£ÂD"Íå¤pÆå»ï“Í‚²Dè­ÜHÔ¤eK"†¦…Æ<Ž|Bê“F„U7%Íckt½Œ8snŸFï…`£7ùf@#׌¥‘ªž{ì!ÿzáˆEßYcäéÐ@é÷ci@S¿ªôôÚN!˜5PÀífôu a>K½PC©¤òiàé%˜5Ú8§û1 ¬jÆÖj6bøžÃj~ßô[ßÿóìׯßÇ«(¿ +ýž¾QÄF˜jšõf,‰^Œ¥ÑÎía0ˆñÓZ”³F©jNˆÑÖ„RÒƒ±40Ïˉ ¯ÂÑŽô†Y#÷àÐèyŒckœjÂ……_‰´‚L0kàå­7­¦ø`, íÄ{îšóÓÀ{B°Ñˆêm‰Š™êÁXèIUBmÝåÑ€ùH³ÆOâ#@¢ô}T73˜†0¦WŽG Ì¡–~3Úú'ÅckÌ=µå5¿ïÊÇ “FÉšoÆÒ{6»K.QÎƒÒø®|¶Ù 6h=7ãÿl—YvÅ CwÔƒ ØÿÆ*‚Á£?m•(—É`¨>Þï;—صáøJ6’™P5Ý$NîaèˆËX‘šÊnÚ°–HfDIÉnÈxùáèŒ$Åg¨9¥Í(s°ŸÌ 3ß rX_Zчãc4ß'”¼Ý¶¡IO‰df`mÛí£ÚìáèŒle|¬”ºÛ6Ë!ŒyzÈú—üpt†%§§dÛõ¯Å+ÉÌHê&‡õ¬ðttFÍ~Ó\õ¯¥”YfFLsŠÛÑ¡¦‡ãc´êÄûÞó,sæŸÌ ôHõv€tXŽÎ¨Å÷ê¥=<ÚÉ)3CZøq€‘FÓx;:£¥æ³$;>@Y>"r;ÀˆÉ×êt€¡A}?ðd×ÀÖï˜$3#D_r€¡vÈÌPýcRw lÝÉ‹‘P´³‡'9À@/Ž1ŠvüË-ïˆc¤2¢–x¿º”—¡4ûnd,ÎNˆM+©L@ÝnCGmGGÄè%"§º ʉ’†Ì n‡¡»— Gg$ߦŒùøî 65ûq2#,E»@TÜvŽ1gÃUMG"™Ù’Þë·9«GGdóìq3Z’™h· Ëáåè C1|Ûb¨™|0ÐÿÝ0òèènGg-þ1ü1NÇ'3#ªéí#•—áC4ÏŸIÐ.D +~p‡ÌMVo±Iz8:Ue<ŠèÖl3̃rÈÌóÑbï¶NGg´ìSŒ¨Si1rôfÈÌ@0§ÛrÅÃDDdú£${üt~êëm|]¢Äß·û×eÖê(=-­ÏϤ6dú>š²Pn!y÷p:>Fõ® Ë•u1JòE23jöñ’Ãþ¬åört`$œÞYÈÀ¨ó;ŸÊˆRZ¼ Öë]Ö‡£#‘ZÚ{cÖH>÷ë”Ùe¯w@ò3 ŠKàú>v!™¿oìvtDð¢~:>Dó +£çÚ¸èzÆ23r’&ÞMŽÎÈÅ;6ÔÃ(›ÿHfF2i·Œ,~òOGg +qFF¶Z ÉIf®õv€‘’¯ÕéèŒâ¹÷¹¶—jv_C=Á[k2€gÆ>€~ÁøiQ=&‡Ì |¹`¨½ ¢xº µÊžE4ïɆÌ™]/9€’âÃÑh0Ç ¶loxÒù¡Ofnév€X²‡Œ¢·Ï½½ßK•š·ÏC&*gùqtF‡¡#ð|„>*vYñÈðîyÈ"øÖ’ÃÐ¥I~9>FýºNíÝdÛÓÀ!É$3£êWÅÛÃÑjß*âÑ׫,FkJ23Jj·ÏÏ·¡#b2wàB·—ªXd™HJ?0,çüptÖÊZVa’3©LÀ²Ûõ>èÉêïûß÷{kõ=AéÚ€‚‘|¤åÛa½›éáè 4YƒÑcF7£|½ó”™|¤·Œ8º†ÛÑ–ý[¹¦• ‘•K"™ÑB½´<Qt¬9?­¾7¨9¦Of„öq9€@îŒGGà’ãDwñƒáë§|0‚ÊíC¢ïßéøµŒ¢bïâ§ýˆ ™¢Zo!ù9?\8fŽNq?EŸUIf>öã°þ!_«Óî€Å?–â.~˜†²L k–ãí£_«ÓÑ"eœÃ¾Î{ÏS*™dfÔj·´;ú0|Œê{d¸1î-_Q6äÌnÖêËÑj>*ÃAÚ[Ž®$3¡oGgˆÔ‡£3PàÇièEko¹e‹$3Y/Þ0ò(î·£3P¬|ÀЦa1Š*ËÌÈÅ%9ÀHq®Õá茼V7àˆmFÍ,3#µ_‡õêà)ét|Œâû‘«ìú§H9äƒ1"9ÀÐü2t„e?Ô]y]›F–Ûi»@œŽÎ(ÑIŽýJ²Í—jÈÌÀxëí#´ø0tâ8 ý`݆àõaȇ£zl¦Úê*±±©WÞ!³­ƒ;l×}¤/îŸJï[˜™Çh×XTÓÙ¨ñGÊšv4M’GóYÄÖïÓ:.$³…}Œ±u +cB'K2;ð̸/¬ø‹±ù¨†Ìޤ>ˆƒ´Gç& ™9xCΛ¡â¡?äÃQ}`íºÅÏíPÙ€q¦vªÂ5ÄÕÙs;Æ«øc J.$³£ŠUTI;(†ÚH>-UD+µi$*ÉìhæõLö)T›ÕAÎCˆŽÊ#IÐÂÙ~?øˆ†Ì܉ƬqyÛ±§YS"ùpÌŠZÝÁ§8Þ…dvhñ9„’wðiÌ"$³·Á1àu#Ô|PŸÊï'õþ=h‘i2ÇôÉìÀ-mÙ; +I>ÕúÇä½ñ> áËkSf‡™?±°cëýØ”ÙPbOb/PÓ€œ£$³¡Ê×Éân¦kÞè$¿Ü5åÃÑ|7±5o±¬•dv §ÈxdÔãêç£29jHÕ‰:\A+If‡¨Ï£*õ««‡¡ù·J£æý­gÈì@–B­$šØPHfòêØ¨’©1‰‰T6¤Æ’ü±Î¹„4õÉìÈ£³Ç#ª¡!Ñoõx¿–q¤°æ²â; ¸)Éì0ßnC¹Ù„2Ò)³¡ÄÁ¶XËÚ‰`#qM™ Uꘞ šÿíMH>­ŒAQµGHk^"¿—LJrO†ë}ÔS–ÉÑ‘cDUz¿€¤"$³ý‚;•ö¬Õb!™l ™ªn†øÌ†zJ+˜JÙ2>É숹Œ­@¸ìÀC“ãƒ2;Òh½ð(Ê ¼üךRÙÅSTÂAlËP£d’Ç<9è•gàÁQPXHfGo”¾'¦Q—=@#™ %ù,ÐtÌìG.>¨!³éÀb3ðàHuê“G«cM´Ñ bó„ó©ü~+cZÂŒ»þ~ȉäÕÓ†¿^FH¢1‘Õ#ÉËÔùq€¡âyër€!:‡«Ø¨ÍÝĔߌíCbŒ/HcÕ5Ⱦø ð(ËoÆv€’µËÑÕ-¢g_|JMÁH~2È‘ÿúMäñ>1{Í•œZÞ„R”ä7a;@@zŒ/¸=º#öžj2"ÉoÆv€k ½`dñü/CÙ óøä7c;:#ÈÓÑÍw# ÜìÇõ-“üd Cóñr€œà ÜPöŽãf$¿ÛFVÌËFI^[Ñ—µç5ˆ¸!¿ÛFJ‡Ì t>`Y]dg$%õ؆Ü[¹T§£#ÚWšrÐj;;¢H$ùÁ8`Œ›ëˆVüIY}*¾ÖaÊoÂv€ _ªø1²üÕðÐsrÔø®oS}¶Öôr„Þ–™ÓuµÂñõ-S}#¶¡#pWx9€ÐP»#Í¢©oÄ6ds±ørtD-c¼øVJGÿ«…dfHóy“Œ¶«,K‚„Ýhž (Þÿb +K(ÚßTHºQY¤­q‹€Žß~•ðx›™zP§çxtîr‹€Çx-ðCÄ-æ.G 5GÀ¢Yo°˜oÒ1ÖøãQö% ð¨oiIð@ñÞÿ£Š[` %Gƒƒ íHâÃÝH.|诲óÔû}}OGGáI9B-véJj!;ƒ}¶~÷"ÔÁG ì?üÇX`Ç-Ö€ý£Ìñà¾ß‘ÁÑc¬]B<¤_Ôþ¦/ª»ÅÚ=×àE+#GÀbo? +Ô=³õ‚…íx æ´G¦Ì‡Ãà]›_Ö>Œ†^sªùš´ÇKƒ£ºrkaÚW9EÀ£Ï=±¡ÎûĶ0£·Gì»#GÀƒ0­Þ"ôxhZ[§âŽÛáGyí=¸¯|‹€£½Ú§Z‹Ÿøâ×ú£Gk}åõ¨ûq¤õX{ò¬è»ûÛŸn=ÀÑ‚s<`M·xŒ}©Àr,ð›z€£EAȰÐqÿ¡òÍI¥6È=fpð˜KöÄ"à±3žøpc^å¿à€ÍŠüqxK[ˆà?Z£_#´tíú‚ô¿`Ñë.xG iB9‚µíY?E¨Å~5eö·©…ì Ýàh1iå8`œí·Tx ¶[‹ ùq#O5ÀÑåeæõ(4nÚEhÆ,òãÆìP=xíÞ"à1ê.‘)­¾©*=\[<˜àG­9u®j±tÖYOiâã0¦®}/ ¨ëùða@]øÂ‡> +¡)áÔ£]7 QGÙúÛé…¯Ó³ýú“@…hŽFý6ÛJ|è·¡ úáMÝ4ýÚš¿‘ý¯4ê×E’øÐÇî5/|¨Šå_'d¯}Ï›9èG¿2'>ô˺ÑU~š:Æésº¨¿¥;Õq=jâ«z7>äçû;q-Îé¢À·€}¬XCŸµæXv_GÚnÙ—VÊtýIÝѨªC‰ÏZ7otȯbÆ8r·> ì£ú|Þ݇uÛÐ~ø*/&4»·µªñ€õç±èP\/|¬eÈó_'㺸¼>ƒFýÑWæC£X»ðue¡ñÜ4<™åg‹÷Vúô YÙI|èbu‡eyß²©ì Q¿ˆ9>ckv"‰¯ú2gÃG­ºØnˆ¡ýÂ+ñ¡/öpòhÕ&Oš§-ßÊ. †y°íÔòS¢JÔǰoΘ®Ùõ×þ‘õ±âpâ«þ¾°‰ýeÝ’æ#_G£úœƒê£ÚõN|U_Ö$ãÊ)Ê­‘cQ}X‰ dˆëã¼ÐËŸ¶Ã'ih¼Þ±°ê6?êµP¢Cžº=ŸÄ‡|EËz¾4é~²Ý*©Qž­˜6ÔñšÚ…õÖvŽ û0…ñ|çëA£Êà“ž¶Š—ü&ÅÅШ_ø‡}év(‰¯úËfÙ†m•\_l04èãeÚ? |èOŠ*Q+x|)j‹m ~Àz±ì;›uë• Úx +¦Ýªw¬ŽÝt9Õ¥1%>äy_ØÄ‡þ{*u‰w¬^ööbhÔŸd.ð¡ObK|Õ_6wÔÉã5ì:ÛõA£>zÆL|ÕßO%ñ Æ“]dÑbÇ5{£ê`”g™™Î:;v¾ð!fü¶¼cuðüÈï…!Ð!ÿ–¯Ä‡ä§ØÐ‘øÐ·V/½mõù¸¾hÔ/M•_õK]¾êË2ý!Þ¶:Êš8ô1ÒOI|èg:ýáCãù‚~ïÇ+RÅѨDsâCmt\øÐÇiÍçKkÍw=ûÑ‹Fý¹ô­øÐ'Úùùò¡¿Úc,ÈÜ9^¼ èG¾ÎD‡zgóLtU·4cØ­ÃÕWŽFu 3ñ!ßFT òRæ4cÖ!íÕ¯cÿ§úŒé7ñ¡_Ÿµõ‡ýÊ–|饜®E­Óp4êÓ\‰ù²O$Ñ!o+˜èÿ(§çR/c8åûZ3ñUßåÄ/j(Ï ð°æ‹}´[é.écú¥ª¬Ìçòéqœ+O¨ëÓÑ(ݨµÄ‡8~]¿ð¡þöü!å§ÊèŽF}|Î|è£ÝøEÙÒ®Ë?/šŽF}­é‰}ŒŽý‡þ¨òü_ΓÝMûE?ú…2ú<+_øª¿Æã¬3Û)i4{%Gƒ~[$ñ¡¦½.ü¢ÏÌ^ɠዤq4ê 1'>ôûÚYøò¡/d¯+Ëôß/b§hhÔŸcÔÄWýºóóåCÙEÑ]Ñþ"»´†Fù!vÝŸ´Pšiâ—¿UŠ¥»«w,FbG?úÅŠTàC¿¢†_øª¯ïM¿0yÇÂÐT‡£Qß6¡ú…w¾|ècе/¨v'? ©áhÔ·~Ø„³Ì ê­OË[‘vªcoŽFõ>ËH|èËÜÙùò‹»US>µ1ÃFõ¶jÿ²!>W_¿lÕË<æíе¥:úQ¯ÖU_åËì>ôÑÊŸ›†ÈÛ[™54ê×n,ð¡ÿOwµe[–‚°õðƒêùÿv ww}Ý +1Ç­¡sé|èCÊ÷ƒÿvÕP8[ Y¿4á‡_­<ÊüàC^mEdJô«ÖPªMú4‡¼|èËðßô§ŸœÄ³ìð»ÊÊ:ýUJôÕ¶0nãÈ+ W Y~ìôH|ÈãWùƒùéEѬC +*t 4Ë÷Û‰ùò»¡›OæüÄyŒhUÖ šõÛ®M‰oúe~ÐM^½çq3g´å{Áà 4Ë×9z5‡êwõÐ!O» +±`æ ùóŽ^ò4_>ôñrÆú,ëð§vî“€,Žfy©îhòÃÛìC‡:~n}i‹>…næóŠ£Yž;óÇ|ßuûá›þô¶lvøÜm—â§ãhÖ·§ÿð¡ßFŸ|裚¹>~(.WS —~‘—ý: ð¡ßêþe¼ê¸]øL 4ëv•øÐ—Ùùƒ}|Њ”)a£:!šôˬn£ßô·-zød3©—³åq¿M½³9šõux®'>ôñøéƒoúÛðzª1\¦Ÿ§£Ym¯=|蓌öÁ‡>Ô:œkÈ‘zÀKö>9‰—¶‡í)î¡ +^ãé´]·v4«wÙgü +gÜ›|ð o¡˜…(ÿ*úÃnü‡fý›ôð«ñ­¾ü᛾ÚÙ#‚îožšÍúuØ«ºøÐ·Áä/òÔ¦ÿ°p˜¨Q¨r Y^¦5æ‹oò¥Éúp]º"¨•3ôaÞ½ôIûÇ>æœñÁ‡>JÛú\…µ>OóŒ£YmO>ôaD¾ø¦?­"Ò%ÚRe˜åÉÎ÷¦Cþ‰?øÇ¨°ŽGk‰¶5P9ÌòEKè—ßÞ|ȯ>f%v/C¼ä ñC‡<÷6?ød…z,>,t´-$w£@ŸÍbÐ|øÐ'-õƒ}öuøcPô­Ñö•;šõµŠ>|Ó/ôÅ7}õ/U£oáF&šõG¯õáCÉR?ødÒp‹¾e3&šõ»6zø‰÷ùÜ|èÏ}“£pô-Lyþ˜½ôKú*íƒNðÔ×kCõˆ hŒ]Íò{}øÇ±ÈŸ–Oq~ëõ C»¿fG³~­ã¡W³íÔ?èÇîF¥mVƒŽfyéãåC¿öA‡<,Ûzlx_G]Ñæ³8ë>Šù¤Õ fmTÁõà:£iiÙÏÕÑK½Ì‡nê…õƒnòÓ? +G=KÉK‘ƒYdËòRô‹y´ `ü:÷ªÌ<Íú¥Q{øÐGm|2w¾™”OÚª0ÉëÌòèpúÁ‡|gou¶hY*þVÌò:](Ñ!GÆ|Èâ‡_a_OÒZå^ú$/¿B2|Ó_s""uÒ)Ê(,›¿Ð¬?¤ÒÇ>\Çúê5¹r/#äuÂB³|oU>佄£k¤¡È6âŽf:ï9·yû½·³Ð̶Öa’f¤–ÉS ™_‹m‘žæ)ëWèÅV”©©Å°4 ÍüÖÔ™fäº$'4ó»XAí(çɸ£Ø¹Š£™?Ö\Ö­¾Enñ À.öš²±1òG^Îbc™Œg6W€Ç8ïŒO 4óçz°ˆ`8;iŵ–Ø­o|(ER1Þ%zñçXßÚO’ã”hæÓ¦Kä2[ô€™ÌÍ·>(9F¸½z,cÖõ>º¢ïŸhšù˜X<Ò{=·J“[€}•ºnU=—j›¯f~[¥Æàzø˜Pj ™ßÅ? %CÎçRo¾IG3,‡ÜÍäF"ühB/þlk?­ÇçÖÉ Í|í¾ÿÆÉºÀbjB3Ôº.بQ$´÷S/Ò ûþ+Ú÷ykÄÜ5Ћ?ÕùÍ:ÑOµP ™OÃ…$õ~*MZ ™ÎÍ·_ÉÌÜæ£Žîí,4óE¼É,‘XÅS ™_—õB¤H­bsg _ý—aý#µ +*K€™ŽYd½%;§_:ïí,4ó;Š Exj$NÇ·ãhæòí£ÆGr84ôâO¯S(M‘\u´šù¨®Ä3² OÄïÜÑÌŸU_zdÊ×LhâcÀô"‹„ìB?ì5Ð̧âû§žÚÁ ôâÃ宲x¯ü3'¦©@3Ÿ›·<à_v¯²÷C0{²"eþðu0Ó+y±*ýÐqëèÅWÏ–R· z~f ÌìÖ}ó…ùײ@¯3™Þ«Ùö†ã˜¿ÔèÅ6óC3‡£+òëp`c*=ØÅV¥€£›¹&4óuX•E„q9‡O¢ Í|øHß{éŸêSãM|Å;[_¥zZ¿˜C¨hæÓ²:ˆ {UE]ôâ[B4 G z@™ Óé*d³Á%6Ó0*zñ§ÿò@í‰o­ÕOÌÑÌoÃ÷?øðQ¹{ ™Ž½ne”9K´÷³Ð̘,ÒLjœÂ kB/þô“ƱÒykZfmf¾Žu<]Ž0zh¦Ïåw)Y5&ïí,4ñašÛ:ˆ“xÒjàV4ÐÌ'³­Ÿw?†§‰ASׯ›häÔ€ñLè¡7«Å‚{b«gøØ1›Óv­xC{ºT¥W¹êëßÐ^q²;ÜÛ5tü í®u˜í`ûërHC{EC +E˜¥–<‘3׈%;`4º¼¡ÓæˆxÁŒ7yíé íËè0;sÁðc9‹ÿ†öŠÊÖ ®ýêíCk#h]® •==Õ¿¡½¢iZò—ÿ í,ý'tÛó¿![ÑÔªÊzïŠÐ½‚àAUó1åo„áLŽ)†{À@Ú,XÚòŠ7ô[áíð¨}Þ+žÐ^AeXñDÒ›óŠ7´ßúôÑp…K–üÖßÐ^¡6è.GP¯ìxCÿ~§rºš«Ž²Í<“v )0’«uø¬øºWâCñÛùµãD­Ûâ¬X1ÍŒBË‚ÑvïüxC¿©c¯ú¡ËÕ¡ÿ†Î*âðÄä#׊'tFÛ¢¾Š¯oèØS2óXDÊõåoè‡55ØÅΫZý ýÊt…Éö‹­—'ÿÚ+š™’ÃîÝ•á ýj ½Y]4×’'´WX§^¯j\Æó lvÁÍxé.M³ÿùúÕ*oåöÔÊ[«žÐ^Ñq1êp}*ÏÚ+ª¨w‚缊Ûù÷;aþ§Rõßt‡’‚å?ºË,Ir¢7ª`Ñ÷¿X'Æ` Ôó5‘­Ô+£…Œ;0×åÀ³=GºäØAiõX|ÂÏF²ÕØ€]oÏ©=Sá–C>AÚ#K!t#Ç-ßcÐnäØVó}´©R1rì(üͥ܋ª‘cG*ßU’V’•CGUì/ûòaö5jlàÝưٹ9v` þÆ÷1å9väÔ¾%?J:0]´¯N•ôSŽBëþÁ¡Ü¬;PhWÏš»9v`-ÛÑžz·ÔЀ×)_I§Ò‹‘c‡¡¯m´JFŽ´†b´âÔ?5Ž/{(†Õʱ“ý~lÌ»ïݘrèÀn@{Ä¥÷¾N1Žg¥}ܸ×Åʱ£RÝÇiNº‘cºàq#29pƘöÝ‚‡e#Ç´ÿýܘ’9vPù²¦jÄ8>ï¦øªÌF˜Ù¾Ñ^5I5rìÐú.84"#ÇNf¥©³K/9v”ñ°Ë¡F‹ÃQöc÷”Š9t W¯c†)FŽèrûêuIÒ;°>}Œžº9väÜho‹%2rè½; ç·‡ËÛÆøîä› žW;0eï)cI²rì@µÜ L—©9t0ÆÞÌ{l䨡{ްY56ð^šP•ÇkäØQÚ·žh2rìÀôí ­VÔöd‡¦"F޼' 8z­Õȱ£JÚO^ñ5Z9väšÊvTyëÈ”CGÝÙà½q­k¬¦4†)Åȱuûû=]ª9và£ÛË(65U#‡Ž‚©~_>ªxFŽJ‚%ñ§Æñc&Ý<·Qc&š}Ô˜îÅʱcò>ê±d’‘CGnem‰{ÛݲY°É°ž0jV +žÁ{ÀxdÃàFZNÇþ[‰žQ÷ÎçÕm‰XBŠ–~:ž$tx†0Ùnq„ÙútŒ=)×Àà(¯«<[Ä” ¢S=< +f !{{u9¶ÝTåm½ÆÁ¨âÄÁ#hÏ_Avþ"'.åtQSoÃ3ʞأ؉m0X/8¢ ËHß#Þ‡X²A ¨<¿×9À@¥mÃ3T‚ŠËBM>Ù[¹¢}n.=ÊþÈ&ÅQ¶Ó&Ó8<£¬ÊìÅæA@‚3ž1ؤ’ïxŸÿùm7à‘-¡£PŸ JÍ8£¡ôfLÙ0¨j‘Ó.Jäð Iz]‰%[¦\:`PÈ;<£ª^WbɆÁ3úé[ ÏȤÁ˜²e ÄÉéC…zàp íY®"¸dËåÓ&T !ín{K¶ˆÞørðX-r`ðâ»ë-Ù @9@à·kàðŒRî®·dËÀQO˜nràp éýîzK¶ Õ—a`P­-px†ÊÝö–lš0™0˜ÞìžÁ{q ¶{Ì` ûÈéå\‡gÔt7¾%[cþ;`¨ö8<#éÝø–løw9ÀÀnX‡c` ^Õ£BKé­¹_<ÿæ‚xDûì’KPÓ§ló—Úøtß*ì ¤ Ù"Hz9@J8<#sÐúÕ¤7=â@©å;Þå§^rо§l èžt:€@}¥Àá‚·0Ù0:Zu;`p“Èá$)8î)[V§~:ÀÐ5%x‡g\˜€ñÈ–Aäþ´¨¶=p8FŒ\î)[†äz€èYƒxO@{ Êà”-eBO‡üRJNŽ\{PΧl8[>ƒÑS žQS‹žã‘7³w®ï„l`ä·óyƒG ô>e‹(èЧC†¼^•s8Fiu¾)[¥·¤•zž!%ê|S¶ 4=` ¶ÀáµE3Û”-CVÅ00°¤qàðŒÌѧ;eËh©]0$õ8#÷Zƒ‚8eËèo§6†èï«òÀøÔÃ)DNhá§ mïÝ÷Ï Úß”-#÷w¾50šhžQ(êS¶ŒšK=`t^¯Ð9<#E­ãQ-ŠýË È‰îh—}¼Êà°§ló3ÕÓ€ü¹$ [Ü‹)[„ð[Œc0ú{]¼Ã3jIÁ½˜²e`xÖÓFÑÔ‡g<5ùf<²e´Öèt€QéííÞa’ïæ·dÃ()0(S ž!¥_“í’-c¼ùÓ1>QÌ@û½Î|É–Qr½`°HäðŒ,wû[²cô§°:ÿ8£õz÷¿%[FÕç"8š•‡ghÒà̧lÄÏæçƒÑºÏ Õà̧l¸æýt€Ñ$Kàð tÆà̧lRj=ò¶‹Ûá)ßýoÉ–¡W¼àÒäÒƒxGPmœø”¡µË1ƒG0_%÷U- é{—¿x}[ïpŸ¾–0ÿ#[&h:2®$Qàð ´®«+-Ù0*&ÀË1²Îá˜(éjàK¶Œœ˜O˜jkàð ©t5ð%;†¾Ù8ƒÏ !†j x×툀RÎw¼ÏŸõž×–l Ïé.8ƒ;ÕànOÙ2Íít Fç8Ç`̵ótxöÛè9Ù2Zyk«q€Ñòb8‡g`S îÇ”£ÕË1òŽ(ÞáØ +%¸çS¶ 4ÒËFÇr8Q܇~¤°£*Í»ZÊû\û­÷:^ôꦗc?¨ŽÑæ_É!¶Zç!,=.¼ +ûk¥0Á9W:b‡ÊkÔûìæ}û &Mú:Î;‡5$l™ó¤i…IL4vÓç:àH¾s$1áMbV䊲°ÃÏ,æÅ`v­³XÓ;úiL¼â°åù“È>$ŸÄD£Ñ£wæïUú6ŸFy®æ÷)Lt“ç% Z’9(—Ä~^¼î}³?æÌraú}^G +›TMÙuf{œHPîßð™M,!Ÿw§0ëìøy9¡Põ}üŸžÑ^º;ϳ¹CeT#œûÝò+>Ð"Š †q„ø#¹ànè˜f2‡Z’1ìTcÚ <çœ/ÍRW<¡2žÖǃÉîÓc’ò?²àÓæ?ºË,Ëq‚7šÇ}¹ÿÅ%ZvˆþÍb(J¦€Ž€Å>Ár+N, +«½8B¨˜¥­@ñĪ˜õ}Ø—€m·(žX%ÿÕPP â¯êŠ'VEÏ«: +T¤¿Æp+žXÛ—# E¶VœoʼnEQm?=¡ +TôYf xbUŒõþ¨°rQÅ‹¢¥•–# @E~o T<±*Úð XƒU¡ìö‰Õ°újŽP*FÏÁnŸXý\W@@€ŠVR°Û'VŰ[¬# @EÞ)Øí‹ÂŠìZŽ€€(ò{¿Ko¬ŠVž›©?…¨˜v¤Å«bÙ=×P ¢í}m÷‹b–Ô—# @Eëªåo¬Šaã“# @…mãUËßXÛÊ # Å߉¹šÞ‹Â€å U ¢Ïyµî7VŜ֚I@€ŠÚfôO,Šmòr¨°ÛM°Ý'V…M8ÝP€Â~á»é½±*lÆ™ŽP*Ƹ›ÞV jž€vaŒÞâ‰Ua3Îp¨(énzo,ŠœK^Ž€cϻ齱*¬G¨‚vk ~¨«bÙ†; +TØl÷‰EQÊÙP ¢¬»ë½±*lÆ©Ž€©ß]ïEQí“šŽ€}å¨ëX6ãG¨‚}í  žX6ä G@€ŠÚwPO, +;Y­8 +Täu½«Â†œá(@ÑÖŽºÞ‰Ea›™§#TA€ŠÕò'UA+9s=ž?þUÈ[«QÇ;± +lÀ™Ž€6#[}bQŒ’>'ûG@ŠºçNö‰UÑ÷çkúª @Ål#8Ù'VÅ^{: +Tô܃“}bQXéøœì*ÊŠ:Þ‰U1g›Ž€©÷ ŸX6…}¾¨(lœoÁvŸX½—âU Â¾”`»O¬ŠÝ>'ûG@€Š:j°Ý'Å®e/G@€Š\£1íΰÎ_(þ®gÁvŸø«¨vËŸ/êG¨‚c–`»O¬ +kýÝP ¢µhL;±*lÀ™Ž€V¡ƒí>±(¬Ûìì(@‘öŠ:Þ‰U1æ,ŽP*f:Þ‰Eaµº9¬§¡—½Ä«¡ÏáþP ¢ì½Ä«bõ<*Ò˜Á±8±(j©ŸêG@@鿽êÝôÞX£öꈟÂTŒt7½7EKå9ÜJ@€Š:ï¦÷ƪ° §9 +Täv7½7VÅJ{8 +PØ‘½›Þ‹¢ç=—#TA€ +»•Û}bUXÇ鎀­ßMïU±W™Ž€¥ÜMïE1ê,ÙP€bî}7½7V…Ízê @ÅwÓ{cQÌܧ`Àzz½{Þ«¡·^*ªÚ@ñĪØv•t¨&ÿO*‚UkÊ\çÿcìOÿÙ—œ¯ËË«ÀÆ›î5 bä¼Â‰E±Ïè¡ XOC]w¿{c5ôÔš# @Eîw¿{cU¬]†# EßÁ¯ô~߬]®•±Z®‹ùè±vpžO¬·©¦;T´¾ƒó|bQä4†' @E)+8Ð'VEû»ö€m[+¿'VÅêi8B¨°š”ï‹¢”æÖC€åtëãà‰U`CMw¨¨éÍÞXeÍP "Íh4;±*Z®ÙP€¢®u¹«Â†šåU ÂÎ{°Ù'E˯á À€õ4˜=z‰'VC_³9 +Täu¹«bÏ>(Ê®Añ{RØY*×ë󱜟)êr'VÁ©;T´üFO*‚‘­2p=ž¯ËùøÒ¢wbXýlŽ€)§ öX6Ì,G@б*ZÕP ¢Œ¨ÛX+åå(P‘jÔíN,Šb··â(@acWæØ«¢¯4¡ +Tôu»«bÏ¿$(PQ[ÔíN, ++p­: +Täu»«bö:(òš;Øî‹ÂjÃ.ŽP*FÛÁvŸX½æê(PÑrÔíN¬Š]Ær¨È+ÑN,ŠnÃMw H»¯`»O¬ +û&§#TA€Š äO*‚aU0s=ž?ÿ5§fç)xþ«À&åêPaO zö‰U±Öp XOCª#ú‘žX ³ÌVQ,kÅi\ õU1FŽø)<@E¿wⓊ`¥þ4 +Yç÷xì/µÝÓÙ« 5üé2 "—»Ù½±*VÓP€b­}7»7Å.åiJ¨‚£·à-N¬ŠQòp¨h¥FoñÄ_Å´2íå(PQÒÝìÞX6ÛtG@йçÝìÞXs·éU Â®"ÁubQXnÙP ¢§»Ù½±*þînŽ€eÞÍîU±‡`ÀzR[W|c1X§›ÅP€b¬àJñƪ˜m G¨‚=z‰'AÍ­d®Çóû?ß †öÄ*°±¦;†úÏ";r¹{Ý«âïÂ@¬‡¡¯}÷º7C«6}9B¨#êu'V…}-ÃP ¢Õœë‹¢ç”²# @EI=8×'V…M6ÝPüOw™%ÇQðFìËý/6è.•¦š#ÅìT›QAgæé°® ÇÄšë6bBM̳Câ‹CbœåË„šè™ö;Ã11Nä2$!‚&Ê¢ýÎpHÌÔË%HA®×Bêî¶áXhç\t’Au• +wÛpLœéæ6bBMôÏ{áM|qH¬Rz¾ Iˆ ‰:hF3gºY—! 4‘+Íh†Cbÿ,íÿ¯—€\.rL¸Ù†càlúí2bBMœå7ÛpLÌ5ÇeHBM´–àMnø7±þ¥³_ÖË„š(9Á›ÜpLœ© _†$DDÞ‹v<Ã1±G¾˜PA³mØ· ‡Ä±f» Iˆ ‰ž7}‹/މ3ܬ˄š(›¶<ÃlœÉsÃh¤UiC2ÌF?{_ÌF´]fãì ðÍ ƒqVÕÎïÛÜ1c½/gÇl´þ¾k³Qàxëµá´ê˜9òó¬;fãL«Ï£ë˜šÞc6Ò|ß#ŽÑ˜ïYÁ _=һ³qþßÚ0gýÂý6ŒÆØyÁý6ÌÆXî·a6Zןc6J™ð¤F£ï=à›fcŽßÜ0zÇlT˜Ï³‘V§Ê0mÁôì˜ðc6*̶ŽÙȃ֟a4ê®´þ ³1v†a6ÚØp? ³Qê†'Ñ0ç ÷Ã0eNZƒ†ÙèÖ a6j¦5h˜óûÂ77ŒF^Ö a6Îi ¾¹a6*LŽÙÈ0a8F#m˜0³qöøæ†ÙøVÁøb6 + +åÏëS®°ßc|æüúì7ŽÙèý]ŽÙ¨å}¿9f#Á|áµÆ{trÌÆ¨ïIÈ1-¥çŽ;f#Ïô<ëŽÑ˜Ÿ³Ýkfc¦÷ýæ˜óÆ€on˜Òßè˜TÞè1aÆpÌF‡Ã1µ¾ Ê1pÐü¡x}_ó]ŽÙV a6Z¦h˜¼Þ ß1mwZ†Ù˜…V a6Ú¦h˜2hf#UZ†Ñ8ÿ§h˜†c6*LŽÙÈ0a8F£,˜0³1`ÂpÌFË–‡a6òšð´F#ï>ài7ÌÆ<¿2_ÌF{i?”¯/£“ðÅl¤Úá{F#-˜/³Ñç;ã;f£¶wÆwÌF.´ ƒÑÿíµêó¬;fcôò4³ÑÊ»³‘÷»£±öxW c6&LŽÙèïê‡òõç¼ð<‡ŽÙ8OÏó:Fc®ü®?Çlôõ®?ÇlÔw9ýP¾>Ãtá±ö;ß;fcŒwý9f£Õwý9f£¤wý9F£ïó¯ò†Ù8«¾¹a6z¦õg˜ó…c6ÌŽÑh æ Çlt˜/³Qa¾pÌF® Ö“a4è†ÿu·ëïÆä˜óæ†ßÇ0çß~¥/F£œÓ!¬oÃl̯/åë{~'{Çl”MkÏ0iЭ0ŒÆ™–4 ³1­=ÃlÔIkÏ0¹ÑÚ3ŒF:Ï?|sÃlŒEkÏ0^·_Ê×—B[Ÿa0Ú¿3Ž¿G3Çl¼{¥A¾º—wí9f£ìwí9fãü >ßÚ1gjz§zÇlœw×s·³Qç»ú³‘Û|n·c4æÎãyγ1Ö»ú³ÑúûfsÌF¹Â1cÃ\ᘠs…c6:ÌŽÙ¨0W8f#Á\á¾è—úR¾~äϺa6ê¢h˜³gÁÝ0ŒFÛ%CÃ0cgXå†ÙhƒV a6J¥h˜”hFã¬fZ†ÙèV a6*ÌŽÙH‹V a4Êù |sÃlŒB+Ð0¦ ÇläQái7ŒF޵“h˜™*<‰†Ù8§<ø­ ³QZ]Ö0‰–Ç—âõés’|Ãlœ; wÜ0µ¼s½c6ÒNpÇ ƒQÿíÕ÷ó¬;fc”ý<ëŽÙ¨û}¿9f#õ|sÇh¬ †c6&LŽÙh0a8f£ôö<‡ŽÙH0a8FcN˜0³ÑÇ»³Q뻳‘Ó»£q&¢÷¸å˜ÑÞùÞ1-¿kÐ1y½kбm}Så2zÿ×Vm H¢ïþ.ZÇ1ÑΟ—*hbfZå†c"¥6.C"h¢-z-‰Ôwë—! 4Q`Nrù3Ω!‰òÇ`u~” +½x ÿ&æ9­T/C"H¢ÍMo*Ã1QgÊ—*h¢Ãèæ8$>©^/þǤw~TaÒs½íu’¨Œ†çGFCÇ1qþ¸)ä?FÉzþ6dz…;…yã2bBMŒ6à-h8&êÙ.C"h¢½sÈ 3æ÷ª×Ëç7žZÎOòêôù_=õ|RAgnè°މ3åˈ 41 í-†C¢nC"h¢mÚê ÇDYi]†$DÐD–µáhg†—! 4‘j……m8&Î)p]†$DÄÙ+,lÃ1‘ÚΗ*h¢ÏoqÃ!Qϱæ6$!‚&j£íÎpL”:òeHBMœÿàv‰rÆÉÛ„’HkÑe8&Îè1.#&TÐÄ€cã˜8£G» IŒ?ÎIçG­Ðvg8$ò8SôeHBMä=auމ¼s» IˆåßÞpsŸ#f½Œÿ· ‰YÇótuìÛ„šèéÝñÿ&Æ÷·œ—! 4Qæ³#ýÐèçe®×ËçÇËõãS{w<Ç1pþ˜—!$ñY-ÏŽç8$Ö™<ÚeÄ„ +šèçX +‰/މs„ë—! 4q~¹gus—Ò.C"h"—wÇs=—r’AsíwÇsçäš/#&TÐÄïŽç8$Æ™>æeHBM´úîxŽcâKÖeHBM”Tàv‰¾æœ—! $1ö|w<Ç1qV^¿Œ˜PA³½;žã˜H}”Ë„š8ÜnÃ!qFúq RëµpfH¸Û†c¡Ô¾.C"h"õwÛpHÔ3|ÌË„’è+Ó†g8&Z)·*h¢ޏoâ‹câœ,úeHBMÔ¾á]n8$Ê>êeHBMä²`Û6gø(—! $ÑÖ^°m‰<ת—*hbÐìñ¥1P^¿—ËÇ¿æŽÖ*M†Ãç§ýù5¤ ‚&Jšp§ ÇÄ™<ÆeHBIÔ=,lÃ1qþè—*hb¶ Ûðo¢ŸïüK\†$DÐD/´ßމ3{ÔË„š(›ö;Ã!±Îì‘/C"hâÜGú_ýgÑý/HA®—Â9¸ÑŒf8rÚù2bBMœ·lw†Cbž-s]†$DÐD´Ýމ³ÙÔË„šÈö;Ã!1ÎèÑ.C"H"ïDϬá˜hú£;¡‚&èý—ã믶˙åjùð¿Þ~¹5Úç ‡ï£×|Agw·Ÿá˜(­Ü†$DDÚ‹ö9Ã!q>«¬Ëˆ 41;ís†câÌã2$!‚&z¡/ñ¡1òϹë÷zùüx¹~|ÙV´á¨#­vRAiLX †c"ïU.C"„Ät—[v#9 Cw”#‰zîcM‹Q ìùé3€ë¤,‘UΖ8èž ˆ¦ûFu‰/Â1KtOF„n>A +0BÖì“QÏŸ ¡ù𸟌ˆ1ï¸Æ!(@ˆ}jtOFD2]`ÄÜqÒ=E—Žî„ #úèÉã6¢ÿ¹!(ÀˆÖ$yÜ&ÿ!úÏ9ºU¸!(@ˆuŽ$ÛdDŒêH`?ÖŒƒîÉH¨eû!(Àˆ!q9{2 ö<{¹!(À)-ÜãOF„¾ñL— ‘lû¿*–®ýÔÿŸU¿ê®ÒkÙOF€..€ö3aÖšü&#¡ÌÞ\‚`„앜“1çèÕ%AFÔQ’'m2"tïX.A +bÄÅÆD¨ºs rcùÈWýÁ<Ùœ3ëuiZ.A +0¢ÏlΙŒˆRÏp BP€M²9g2 ú,§»!(@ˆ~t”G„ɈÐÃÀ~&¬•9“ z¤·K‚Œ=s&#Böp"Ÿ R³)g2ôÛÔ}‚`DÙÙ”3ºq — ¡¿~6åLFDÕÝË%ÁFÌ&É©6U7Žæ„ #äÄMÿɈ^Ä%AFÔ™9“QŽÎ1— ÑNöwº*FÝ›ýØOv®_%s&#@×éD #úÊæœÉÑEþü»o‚`DÓos‚¸2"ÚË%AFè_ 9Ù&B_m»¸!(@ˆª/:ÉÉ6}ýNëo`Äè'9Ù&#Bw ù™ oÉ5n2Ö²]‚`DÙ;¹ÆMFDÕˆ@~"”=²ig2¦^¡Ó%ÁFÌ–­f&#B7î„ #ä¬äa›ŒÝ<Ä%AFÔ¹’§m2 Ƭs¸!(ˆ¢okW´'#¢•û¸1ñEø#tÅûÉ€èëtŸ ¡¦p >²ûv BP€­ð¸Ÿ }š}º!(ÀˆRGö[\cÕí„ !t¹ëá*2"t÷è.0âómLWD[ãNmL‚Œ©á\<º{T— ¡KEö[\U‡žO‚„X{f_Z“¡ÛÇt Dp€SâÌ{2"ô¶î.A +0¢—8óž ˆ²Ê˜.A +0¢®8ôžŒÝ?ºK‚„˜zò“kÐä?Dû9[—n—@¡‡6¹MFDßµ¹!(À…'ÛdDèEº\‚`Dqê={Îâ„ #J‹SïɈh£,— 1ÖɦžÉ€Xºt—@1f6õLFD—;»1A +0B²+êª(mvöS¿üï~õsbcÿ•0õžn.A +B¿gÙÄ3­Ìêˆà#fÏ&žÉ€ûw}D ?º¾Â%„+#AÎïØþ&AFÔ>*úÙu±ŸúÑNõrFöM2ºx —@±š$‡ÚdDèâÑ\‚`D?-9Ô&BÖp~m¶äH›Œ‘³]‚`Dѳqe@´ó{D ?ÚÖí0LF‚þÌ'ÁFè×$yÖ&#âÓè„ #t³KžµÉ€¨ºuˆK‚ŒÐ¥(yÚ&#B·Žæ„ !ªŽÙäi› ˆ²O—@1ÇL®?“¡[‡ üLèŸù WF‚n€Û%AFÔmg&ÿ!êÏÑ¥cº!(@]>³íÌdDèÒ1\`Ä’lØ™ ˆ½ûZ.A +0b”lØ™Œ]:Ä%AF´•M;“¡kGu BP€E²ï¬É€XŸDü_ÂÑ-^ÿמŠý­ê¬!ÿ_¿·S½~üý÷T¨Ÿzƒnöc=Ù©^¿? OÅz]7&û±žìT_[˜rO…ú¡¿g?Ö“ë÷>aÂ=ëõîöC=Û©^·ÑøhMÅú:ke?֓껄ÑöT¨ïK?>û±žìTßJkOÅzéÓù±žìX¿Î +#í©P/çspÈõl§ú%aœ=ëõG“ýXOvªz¹Æú«b½~õ&û±žìTßÖ‰ÖT¨×wÊÖÙõd§z½Qý¥öT¬—Òû±žìX?w|Ex*ÔWÝ$*û¡žíT?’E,×‚ÝØ=þ÷Ée,ÿòñT,/Ëû±ìT_ÛòS÷©P_æü ]ôc=Ù±~ìfÕS±¾}>ù¡žíT?gX®žúW_tõÕÙõd§ú.#žXS±¾ þÄדê[ñÄšŠõE¤±ëÉŽõý¬O¬©P¿?o[d‡vvS»î'ñ.6Û›¾°ëÉNõ£%ƒÊT¨_ºG-öc=Ù©¾m‰OÖT¬—c—å×õd§z}­J>ýU¡~ê’ÐØõdÇzÙ-Ù LÅúß)ûµC;»©}œdN™ŠíuîÆ~¬';ÕË<ñB3êÇ»²ëÉNõº”&ŸþªX¯;Âb?Ö“ëÛ)ÉUo*ÔwÝû¡žíT?W2§LÅú!²Øõd§úÞ~E,¯M¹±»§o>úƒV“9e*”‹î­ýØNv¬¯g'sÊT¬—r„ýPÏvª_cÆÛÌT¨oºXoöc=Ù©^+ãfi*Ö÷íìØNnjo'S¦b{YÛù±žìT_f2¦L…úª+Â`?Ö“ëË–dL™ŠõmöÉ~¨g;ÕÏ’Ì)S¡¾ìÑû±žìT/«Ç'k*Ö÷Þ…ýXOvª¯=™S¦b}‘ÞØõdÿÖïŸsj˜SOýóëëêlm³ÿ¯>ر~î0§žŠõº#Löc=Û±^ç»´O…ú­;Â`?Ö³ë[kþÑ>ëE×Köc=Û¡~ëßÍ?Ú§Bý:{ û¡ÞÙ±~逎õWÅú±>cýXÏv¬ú"믊õº$°ÛÙíRŠTO…öùùôìÇz¶c}Ñ7ÅXU¬—1ØŽíì†ö8ÁMƒæ¡¯ ½PœÏnÕõQÄo»©X­«Ag?–³ëõßð„LLíú6Û¯˜Ù§ÎÍp6LLíóø;þ‰©½Og?1µ·¶bû3»n²ñibj_+Þ‘&¦v}? ÆÄÔ®G&~˜+¦ö²[ø†™˜Ùûá;pµÔ<[¼1LLírâ`bj¯3i3»‰gÔÄÔþ†’ÿõ5á„§ibjoú ûS»ÞPñ“\1³·µâ)21µ¾ÂÄ01µ‹.°Á~ÅÔ®Ÿ2üª&föºÃÆüÄÔ>à +üÄÔ.a¥}bj¯aE}bf×wŠx™˜ÚWX!Ÿ˜Úûêá«kbjo‰»ýÏ\ª„3jb´¯Ÿ£_%wFŸ˜Ú‡^ƒÁ~ÅÔ.Í_FOLí%,Âf峯nbå=ù1Y ”Ó¯«å©ÅnbˆäiåØM ¡¼¯ØM ¡œæŠð¨ ¡<—ØM £|<{mßM¡|„#^ ”·â»I ”çí»I ’¯ŽxP>Ã/Ê»ÿàø1(¦±{õPNó\ ò‘|®ì{I ”÷5ZåÕ÷ÆAqÇ»@$kûQY ”áGePÞj o”!”—TÃâeˆä}Ó¯àå ¡|6¿% „òžKxT†P^Â/ÊS8à"y[e…ÆÊû^a1„òxPžk +ÍÁÉëN±—Bù˜±—Byk±—B9ÍDáwgˆäe¯ØM ¡|öØM ¡¼—ØM ¡¼ìØM ¡<ØM ‘<¯»‰!”pÀ „ò:c71„òxHN™±›Bù¼@(oñ¥Å¥Äc‰a”÷‡Æ\ÿI#Êý!ÆJ{ÙQ| ”—½Kåôs­ ?É× +G»@(§­gùP^çìA~ ”ç6sˆäsç1½œ!”íûH ”·î7$P^Âñ.ÊSò}$ÉÇœ¾B9}ï†%ÆÊk8ÞByZ¾“м½Zot¥ú¸‘Õh™6EWý]ÈôQ'ŸíŒjm+ í)¾zP…€úEWYž6\ÝJíCâßJs϶ÀýùöÓè“l{u¦o©]ᦧRlp|ØÔ?Ÿu©û®“†î•ói%ÖUøºN-µý}×JCmú½‡-tí¡•6wtb¡½!…ãåR¼rÓoseÄÐ h“ŽËò»YÉ©A¯°—1éÍ–ú”–ô†/YÇz7¸¥–wǪþËðRl˜É^Š mú¯ÃK±¡4ÿ}x)6¤ì‘K¡aÌå’K±¡w”\Š µøÃäRlH{Œh8è»ÐO¸—b}a•h8Zò_˜—bCž$ + m·¶‚)6ÌâG´K±¡Ñ¸ ‡bCéþœ¾èÔ ‡BýÇúÇhsŒ·ÄrÇÊš ã˜bÃh ã˜bCË3.o¦Ø—ÿž¼òîþ‹òRl˜tSlh~Ôˆåe€~cŠ ©‚~c + 4%ù/ËK±¡Oÿmy)6Ôæ‡¹K±áý?†FÁ +ý&F÷ߘ—bC+~:¾òƒ€PhX{„mL(6ÐDš)6ô”âC3ņ2S|h¦Øâà hý&è0óý&jó_Ÿ—bCÎ $ + cíßSl ã8¾¦ØÐjè8¡Ø·ÿ½úž¡ã„bu{|h¦ØÐ3è8¦ØPè8¦Ø:è8¦ÐÐV„bCƒƒPl¨tSlÈ5ùÝ[(4„õ ,#=B±6èx3L±¡$ÐkL¡¡ì z)6Ì0þ –¿sfÔŠ 4®Ä7Ìhðo˜)4äUF\ÖL±¡ï_2Sl¨ô  ‡býš)4¤G¡Ø0è4¦ØÐâÈ J„C}öŽ#ƒPl˜¾y˜aq/¡×„bC ­öƒXN¿o¡Ð@£PÎ…bíQþ ņ:C¯ ņÜB¯ …†¹sè5¡Ø0Vè5¡ØÐzè5¡ØPJè5¡Ð0v„bÌÂPlèqXŠ 5…^Š ) B¡¡/pGbùÈ%.n¦ØPWñLjPlÈá顼í’c73ņ±s `Š m¤øÈL±¡Ô0š …ÁÃh.æÝÆzÝqi3ņšH8Ò›Sh(«ƒncŠ £€ncŠ U†ºi8³*|t‰&¸é&¢þ1bÐ¥,#†ÈfÆ Kï.â&"ÿ1”Ô'ïZGŒ`¬"h9Ò‰g:ÂL}4q°Žh“~ë0Ö`"Úüí6â`±uºu˜k0¥ývq°Š˜´dœÁ$X½IHýL)›_iŽž²Õ›ú鯆z%ƒ7ÍX,Úý‡sèg0Ô] %ëˆVæta &‚¾)@K0Öô±XœÃDXƒ‰ q¶‚ˆƒUÄ.ÅéM€•åÙ«ÿ6d XŒ´›s|Á`"FÙD¬#ö>m­&ÂL áe GKôK¯>ÃDƒÈc…—-XGÌUºs˜c0kËtl"«ˆL»Ïta 6bÊNgk‡‰˜Làt©Én#šÁ߈ÝûpÑþ˜ÙéRiñ¸¬"JmÝLBùcȧK)ÇÓN°N˜õ´¶v˜ˆôÇgAyæ”ÏÁXEÔ\¶wèk°ï/^ªz^ÙêM}-·åkõÖ;Íî&ÁlDÚ=D‚UD{'Nk0 FoènḬÆ.Í9t„5؈Q[8®«ˆžVÎa"ŒÁF´„^ªÚÙêM}-·å󌓙`@3Mw“` &¢ïVAO3V£ôæ:ÂlÄÌè¬c¬#Æ[Â:L„1؈Fg=ˆ8XEÐø¸†s˜c°¥gôëˆFã£5˜£· © £Ž±N {ìÎa"ŒÁD´¹ÑQÇXE¬B»Ÿsèk°ô~'Æ:‚Nºì&ÂlD­q:¬#h²YÎa"ŒÁF䄎:Æ*bËzú &ÁèM}ò ÐÛŒuÇÍ9t„5؈ÑØž߈üÐaY‡s˜k¨´#þ3iç)õשžvÐE…¯ã^ûù}°P•r¢vW× o œö›2O].½3s›FõÁï3–SOâÌW;ˆÓú¸Ñu>«×ºmÅù´’_¨¢/›¨œþ*ºèF ó=û —ß7.­ŒÜ߃셭ս´|ÐSÚ•PZj÷S9¿Ò҈ÉeÈBñ”:¥ÜÆá=÷OîŠ\­€²O´š¨}]¿Î¶ÎÍßí¸*J^Öþ­gê¨ïv|å˜%ÿ£õûÛø2ªWSë-ŸKc,ÑÛ"J]¨íƹ@3¼Ü/¢õ{¾göÌÏ·| %ÏtŸýÈGª_ySE¯°Ék9ÓTwã«ÄE6¿æJ(m¥Ô¡µŸY¿ÐY[¸mVke®wµO+Ü-Z‹vz’Ÿ÷µýv¹‹Gûaq”-—rJÊ¢¸s´ñ”tvÒ=hÀº;)íáíld_Çw‰^L¾w5èéòûÇzÒ÷±º+)ö‡Cpܳ­ãîÐÿç0Ï éã|Îó[Mºt÷èÉëùõ×O:;¨­Ok˜v‡êS©ænö_\è:ÖC߀ÂMD¿5µèxÌoC6 9i£9k˜.ì?½/£tfŸÇÓ÷ +ÅÓÄ;|!åÈãìOö®b!}å)7üD¾ŒÒÏß>Õ¼Ê(}ßµòšt?½/£…Âñ¬¤|!íèó¼íA»rVWCìS„:qZñ_'Ì,ú%Ä*qhÑ/ÙÕˆËûò«)L8±Ðâ*`b¹eâÐBŽv' +_%N,û]Çù»¡ÿ/»díAoeVðVŒñoQßþoņæÔÌ]Jé'Šh(ܰÈx«í˜{ +7-3A—êZÅpÓ"öÐty w-2Ñ‚®E1ܸÌD4. + +‚ÎäTqûâÄ­Œ]ƒ¨¡±g޶'·ôeN‰ô4·4%õM0:¬Š3uÃå¹ó.¢:( +l<©âÀþP·ñÔ­½éÁ®JºåïRÐ?’<Ú®D +¦´?Ó¡«ÙHU +uÉgP­ëŽË—¢{¿×šùå׿Áì:©BŽ[ê+)²\¥ïAùU¦©R÷ò¬Üè¦ +B<²¦žÞŽÂƒ@QijéJ7(<õ+i3@Ë8 + +þ‘I[šìãþõœøøê^Eê_ +ÎãÖÊ`‚7Qå1`¿CÁØ3&PüSNq qH§ÛzI¿¾¶ÉÇ*`Uh¯êªû pwxEáóºÚ?éC|—r÷Ë’”ð¤hëWï¿ú5ÝfYHÒ®ŠWÖmþŽoÖú‡}ÓÄöœ×cÀþùÚa±ÿ +eÄóRÓwôG&XŸÐï϶u„Ðúk"ˆÀë¨9d£¶xÿZgÑxð>ýdD ÎHN•¸1`¿ÏDÇ€}–Ûš,Ÿ!`ŸV0;ðµŸO‚òxÿ0§x«û‰æõkrà`="4>hÖaÂÑ!xŸ'Ô™xÑÜ$ ÎÈÜSbsaÔ^šï/Í*2Öêe WXêÿ°WïŸcjüì'”Lh?Î °ßMOþ嬋ñ°ßë¼Ï„1ª\„Á<ãm’´ÊE˜À=æ +z Ø/Ïs¦°À/aÔ>íÇÉ|f%=‚k=ét¹Žån}EP”g»{_C¦€ùî#á’;FÀ–~¿Ãj,WŸs±ÇÅŒÀ;ÆÿŽ¢æê5gí!,0§E˜mßú/U>­&¯¾+å8_Oçã +@ ¨ÒAe<®€æÒ2ºãòŒ€ÇE \½ö—û¼Hà<¨ýqœ³÷˜@G€T!©>íÎ}=®®6“xy÷`Wt×òzZš³Ã—§Ò÷B{.yÆáž‡ä$™z $ÉûeUä‹õsóއ$B÷BS…\×íþ‹Aº‡º‹[¹~÷p<פà_ë:§î»v ð“”ÄYk˼-ù(<I~ßß©ëzö¹y ŸÄ3~íĪÇpdˆ}Ù¶Òïà&¿^ûÓå´Ë±öö(z*´zñÈT»`¿Äç,S&V=+¼ÂƒXñG,±b60o;+NyªF†åñv8:¬Š3eVUvç¨Â®ŠA°ªûCÝ å×γ€$ˆ@‘¬¯þʲªô½ eê9÷îÙw[‡Aq÷Ù†ÊLÙnò ÞôüsÇŒW—%Ã}uŽ!€§_J÷¶·°Î¥Íg‘Xß#ñôL |ÉŒ‰å4§ð VØ\Ï Ží?E»ã·šAtÂ2‰ƒ9ìZ™‚äDœ(† õ1_{,Š\èÊù_qÍÎeµ‡yF‡9_Ω f±BS©LE5KAœ÷eŠk–b¸ªÔÖ¬…áš%ö¾f)"¤G5ë…k¯aÍRHàŸÖ,gPÚ¥ àœkX³ÄÈ+<(PüK¤Ðë(N‰j–s²«Ò|Æÿ8ŠV hUö‡ÂGøyÇÊfK®ûq[¯÷ñ0#åÿ°Ï’é_?­A°^둉s« ö%·8Óõû%É°ß ­rÀ·˜€_ ^L°ƒñ€8礊ã>§ð @Ñàœ*¤ùOy^°éDWyévÙŒª@gÌšî_“?<ÑT`–DXÑFÅ +=é=D1üfSŸVð¹=œ)³‰ë7r+ÑšŽÀ¬‰9 X¬?~mHwÁGÃþò¶•àÌÝí" +óA,×ðgq²2ÿB[T»¨3(Ö/Œàü‚Ö´›ù¨ívÙrÞ¢nÚ‡«ÌÜné™uH)Èlî) h=­ýBÝb(ªrq¹&q¾—)¨¿ â~t&ºSߊÜË—ò¸]3ª”ȼ⮠$\N¿s`^ÿÚ±ÄAæîX9Wg3ÂNA èrQÖeÀ“amÏùñ—:q»kÿÁ ®Ôv Â×Ö*9ÆW +õ<ý<$¸BuÅ>Q‚þ.³ï/ÃuefneôœÂ#ðv¨LAãÍ ~ÓÈ”6ÞŒá(oAûú&*±/ÎõŠéæÅ„`í;Ç<$ðO³o> +ΠÙg¥ÇÜÂ$© ¼Î_4ûÖõÄäíç%Ý–ÿ´tËjŸü tX:ò5¼Ò†özDç˜çK¦¼·_‡U‘äŒÞ”~Ë©îEÝ#­œa~»æï²ô’ÒsÍaÉ~ß÷óö:õ/Á>z}[Ô§k5œoCiêò;ho>Åéõ:gA°—¸œ ÔÛ{ (ù{{§N@ P¬çÔ\nIGáA¨¸Ó¼Ï€þ>ÿâcT8î£åyž¡%1Àžð¦! Fà÷P•‰Ò{v¸WÍ<Ög¬Å¶¢+ò´ÿz(™Yÿà1hÿ…M¹$àØ; îáš}”Nþ8줩ÀprŒ¿·;ôö‚,ɱù5ÒvMÚ]3GÒnõñùï¼7d4Ë®; ƒ`O™KTwŽå+¡ +»o©Ba(xãYœ>Þükù÷|ÅŠG"alØñ-ƒ@qK§óùVËuÀ´k+vv¹f +˜¯çëŒå“Æ=íå°¿ÛU¶­G„ôS­„—.‡sªu!ïhšþsøln%Ÿ±<æ€b¿U0ˆÄQ”ð÷õíxƒÎMìþèÞ]D6öL§L—rÊ´Ôé]¦u˜O : 믩MEè£þK㻉“̪ù:õ/q’¹¤Ù®>aÐ"ó“-¾AðæU¿¾°T9˜'镯;q÷g¯Å3ø°d +ª³Ç0_¼÷€1¼QÀ=`ùÇžs8[q‚$ŸÂÌŠs§R|qè”ϽMaŽ+5¤0+'Èb‰°R‚y… xQ‚|q¦ž§Â|… X\&àë¯l9|6ðˆÃglÈ9œN­‚AAÊŽãˆ-ÿj-”²Ï0¥ìvÿÊj±, VØ0HI²á*cû)#cm=ȤRu´}ÄãͯÇ!Àüg6÷P¤k¿ˆÎI U\¿Q÷ÎN4 Pô{—ȰmåDìH*RÎÝŠ. îÞW b…v¸$¸Flm»ÛñKAÊá&I&|‰É3¨äì¯èŽÉåû¾sy¿ °‘”SÅ=-h$g‚X=fÃD0+Où8ÍÞ8qÇ÷4Éõ srÕ@6 <wÈüƒAà©4¢Hù‹H±ÜnË +ƒ@!y‹{V©BœW—.ñK`¶ÂÏãÞk¬Ç5OI>JÓnÀ3`9—ì-¿;õ1Í¿Êô.`·ô°«t„Ú8¯¼bÛÀÀ1]Il§9çŠnß$DM4–ö·ÞûÚ[ÛÓr ~àa1ƒpZžÀÍi9F°ô>/ø¸tW5|^ðq·Õèyù~ zø¼`…´±+÷»;hÍónÀt›Õ§¬x4Íj‘:‹¿E®oscWÅ ¼ _WÚŠvyçÚÈ tys…RKÛ;noa€}Mmþ×Û{ (žÜÖÏI3÷ÈóLe +Þ Äák&Sð*a(®¯h_= B…¼qú«€Lç1¡}Åm[L¸¢Óä˜`× —8¶As€ðìZ~a °„ñ!׫| +Œ¢Äíá9\Eü6i¼7ØzŠ9¢®¦-€w(°®Øâíä#£§™šF’dƒaÌIkªØ´w½?ßž£h.‹9d±•|ì?Î0€&™JéööôÍaöØ7›ó'/y†±Fz"EÓgÄãVžF3ÎF#;ˆÝO’Fk ¡A A§O£PãÔÛÕÐ ÖÈ‘-¯­ACƒPƒb¢sÐ À©Ê9gÐŒ +ä¼£<={Æ9¶¢Oã¨u@În±ŒóãÂG4†å¯+(yq4þð)£AuŽýö3ZncŽ.ß+ÞŽòquòNov¢Ï‚X£S7•ìØÕb@¾ìO?§1 ŸV[&}Ãb@#¬INúŸ¡Æ;+ióçS\ñþÂŹ¥=+ºÎ{©ðD„ı&ÕÎõKkŽ_2Ž5ü!ä1QÂG-}”^`9 Ð¨z4ùCñA†ˆÚ>šâÈ‹üe15k>øKCç/ªŸu¶Ü_´Oá˜()Î7—¬à -™TgYj´WSKáºq î*—Ïô¼|459«UÁKxjgÜàõ h"¡Ð2UÎìÄíP¡OCa9¬Q % JÍAÅÁ€üî¢h«†zä%¤Sëmƒ{uÃ@øÎ÷õ‰<ÂZ +(P˜¦¹Ä AçßÓNáZC@º¼%­¼Ñ*ü—‚€B¥–f¹ù»G8‡òmû~{Rƒß’äï¸þ:ñtå54rJ;Po_䀟Ãä€ÐçÊ +U¥¡A Aãà¾0ÜÊ‚@#Rvýr ‚€ÖMïO.ë3R£!¤L£y8×¥¯f„íUä.ØÂ3Rÿ³ß ´•bn.üóA¬‘ž3¾È n¿ âÄñI©­ŠñŽ•…S ¸`·7·ÒÆ©ÉÞÁmçÓ{¦;ù âï¦ ò »oï™c• +Åê*äµv”O½U8 +(Pïj½ÜpX¡?½3Ä8Шqå!q) Ôδrª¹ƒù3¥a97§Ôµ£>¦rå5†5èÈv9¿ÝšÂ3ªfT׿ڂœWP=g(Ú)›¢e1 _Æ™T¸(jHpºcH5®©ÍV^c@#—–uã`9팙lцâp7COõÍÿ5j`Èîi÷?¼üE+-ß +uÎZAµW¡ÍÁ3ÁòÑxiv]—/ùwœC›ÕH³OZã.c÷Æ“*©Yk<¼8ÖOzgÊ’| r4N÷é@ G,1>¡§o‹û‡/poûóŽýYúÚ^pëìÎô-`YHSÖÏsžÉ”nljù©5rîü‡túFÒÏ5y™525Ò3ÒVå&ÌF¦—.œàF„û²ÔŽsß逜3^2KÖo>ql§ÊÜ©Œc'ñÇ„B ö aizR,ûq-î¿_N<ÿáþwCÜ&œ‚iùWƒoc!p›r¤E”Sšƒ—EβþØìÅ\÷fµŠ÷@ã “‚_É\6ZÞïå½d¨øµ³Í)”2óÓ^„\s6šÌN#Î|ÃËV£½7;iÛ¼9ò;¸ðŸRÞgYáeG£Éœ¿—ç±PS6ˆols +gºh˜[™‹-'ÊikYG¥]}K…J=ˆÑ0PÈoئƒ·ÐØÞ@[-@6Ô Ðk#cC¦² ±Ò—m³kŸï_éBY2Y.§ry ^–ÒÌÕÒ›íeàºÂöíN,“T]“ž÷hk¬D"¦\ƒŽ2,'úµz„5ÄcQ+Æ=Mñ”f"üF´|d5Â?¬ÎM¨î^¶8¯,XÇ4ñ"GÆù'š´¬!ëäþBœð äwã.ù}aƒàƒe¦-d1 ‘ëz|€Å€|êCþ­Fx²—ŒêÎ-„CJ€óÊëí–àQ“¢8±jŽœ0þyè–Ò;¬ü]6^Àˆô2 r4ÄÄ9mP½Y<úýÚÔ ( ~ÃÿÚTS@<·ö•‹ûcÄëÊ»Â4ÅWe¾Žæ \ñíÃáÜ䆇8¯Äè3 LjÝÆþÒMJñù@tMñœ’Ê~äµ úúšÅ{Ô²=Ìc( p‚Œo) ßò +ˆû±šá +_¶8þ¨ÎC¯·[„5£%q>IDªB8.€™ÀP j•[Œ½ÍKOuSÙµœ®apŸï€@#¶•†È‚5,4rI{+÷v544ÊhÛÞ!‚†FM'ªëuO rΨ4„«¡AÎ;ÊÓS°gc+j/s²ï8 ç? +ÏÆùq‘$4ä+y‹q4þð)Sñ +eØúÒ‰= ‹äY§ ¤ W…HsҪé±Ê w_À«Kvj¾GĆ—Éx +¼l|ù¿ÅáÑeÉ÷F]fHd +ð‡¢?}â°šâóéu#/ø¸¬lÚÒxJz@Ø> Ei¦7Òäb#§º¥C{[œ úm¾Î·ÓÇÛ +ìü<È× Ÿ qnCmÞ§±2P[6Å;­¶#žiÀ+rççAÝ‚~.ÄÜ&?åKÇë2±½uÐ"•„oÍß÷¼-ÀÎÏaÜ»hÎÏe˜»¤‡²Î~)EG:â÷Lφ±CŸ?qØóó÷&©iê¨ØÁöj*OH N x,óºâ¼ê<4³¸…Ü—öæáäÒ[8¯bqbäϳ~.ÄØÆצéÏ+:ÈÆùT^%q_eš¯rÅyÕX2R¼}1ÿóÇñÉaýÒ ãzûKþÛ¥¸1òüªŸK1¶ñåm:Õï·åI¢Œ*ùWI^Æ6ÕìpÌæÈóªcÌÄ™ÆB®5G9»x¹ÖÉi9 ˆ;#Ïïú¹c_ÞXçf';Lê£wËäDi£'~)otç©ÁÛ¿m6 _i‹0Òü¢ŸÇ0VñŵYØ[©vS:—L…;ßqåFŽ/»Ö”iùK\«%°•5ìtØ¡´XÑõ’Ÿ£n-áÉ +Kpº$F}F)tʆ'qû²kÍZ,EÞ×¢§ÜH¬P×Eµº•]¯ø9úÖ +ž¬°‚¸Ú(ÇNŸäRáq«ÚŸuý¸Ó¥ü‚½GzŠˆ)ÿg¼Zr,¹qàÞ§¨¤S 0¼˜ö,Æ€gsc€†ÑoçûcHI”B_emÜ~QLC"CÔÑH~ßî +Û·'·¿n'{ ³ÁdqØÉmü¥®°™½¯ å¤7ÇÄ[£—Zoó±à{!­“ýºÊKYá̃Þieæ1×.›Æ±Óy;:zÀÙÃŽ•¸[cŸ–íÛýî•o•²ÉË¥±,8£jâ¯ýÃS±·h–{²ºZôËÝY{qžÿ¸³õ؆i>îüråï¡2iÀ²ûçû]¡ûçglSñR¾?wA‹Å]ˆ”÷©ÞýóŽt{åο,ƒðöÊõÑ].ºk‘Ðaþea@xcpôz´Ù:»0º1Ì¿ÀR¯ÞêÙØB Óa¡0™nÎc²iè’ü›À¹ªýå$ÔUú')^®þ†ê*Þ)õ'"iÛ+}8s_ËÃÜuljH˜¡—ä?ÄœLKy¢ôüð3<¹>¶¼ T–'¦ý…<“Òù=R™±´žO&רs…™Kø4^й¾ ²R±’;Y’û–Ž„S7È&žkÌlÌgá‹DÃW”,ø Ï êw)ʶáGBk{‰œ‘òû<é~¦úMwpÛ±¹7Õ£¤éxSb§tK›’zlÑ7Ö¨)Ó«…z'9óäSzÒ·ÓV^ªÓÙ¾²R³GÝå*"R©«ãŒ)žš­UÜyòÇÙP¸õ²üybÚž‰WNâØwZ?eÙ÷ó4ŽÇ|”ã8vÿÎÏ:¦Çïg¢y‰¾ý =^ßþžñt?ÚÑbû"¾ºÌK[àèuý`zƧë6x®2SÙLæ¥.¯—Ì@1’žÓý”˜Å[^ÛGÇÙÑY›(Ë'*ñ‡q¼ÔE$|5޽¬Í’ïa/µÖ%|1Ž—Zæ3éÍ8^j•ãÆñÀžT=¹€'ÚbÿùÇ·öŸŸÿóíãç?¾¹üÆ¿þý¿¿?~ù…€ýöÒǯ¿V8ÐoiŠþpœ}0–;@Ç>e#ÝêTÓ)ÿ“ÿü QJ’P~"JbL X Q ùöO-Ǿ/}˜ßIQ´›ŒvÖ»T7)л'Ä2 ?è3Æ©‚¬­ &ï‹«Ññº‹p'ë ¿A-–~@,¯qõ-ÔòY¢¦ö¥î @ÎUêäæbë.ÚŒâ+êi4O.-±«>𩲻]^õÑ %¥šÚ"`?ŽeÈ£%Üm£Yå™DÖDÁoåÁg ÏdicXåA,È£AÁYÝgòÈ¿3‰‹åboâ¨-) 5© ŸŒFߦ¢Í´šŒÄFcÈlsLjž$0VÑPëýMåînŒrÑŽÕј®B©Žu)—x ’UCôË!ÔHÞÂÑüÖÚä=0e¿Kê¿×m[œèr –j3tÉT'kê/×¥{TŒíUøVóýïßk‘êÑÃ;FA¯8jeß``€‚y:œx4 ìCɼr1F;Œq§'Ã/!ÑYñU%åéIˆ¹™€Q)OFí]l©¨”gE³±¡¢­<×ÈVž¾>ŒBg’òdþlœí·ó`¢Ç™75VGý(ĺ®¥;PÉ*ôòôõv •+\#)jú&å¹¶ò\$õÄ÷[SŒZòg1–J˜Gz:ºL2,.Qîêü|•Îý„³WŸ£j÷¶bµrù·£qLzÝfòÑÚþ&eÜES!ý°€þP™Èç„ÉAÀ—~¯%qµëÍ ù¾É+}ê<²ƒÖæ¨N™Ê*Èêo¡e@Ê>§)EQø&Ye;s* Ô„E¶`(¨N™Ã¢lÕ@3•!ÍTö@S’¢,J’«¸Òý{*‹òÇEÙ@ß(s‹2$«â„f*Cš©ì†ÌJ‘FW@›}idùjU·ëz[NarAcr·ÆäÜÊäÜ»zOËÞ!Gý «Ïík«Ï{»zÑv t€m@ƒm@nÆÌí£3mÕºÐNiC©]WZ*'ólUÆL©ôÄ££ºØ b"”8ù$z*³Ô HDô†;5Je.*M­Ì‰Þ(” q¢C"ð-*ß“D*Ì!‹Ä‰‚Äœëtúx¾è3ʃDí1b³6ÆZwŒ±6hcì@™Ñ|üE¿ó¼uS–íÈnެ£”¹ngúAš¡‡6Ë· — µFb#íæ™[zÄSJàD+ÉA“wuçâòH‘Þ¢²}Ý …4Ñ™•¿îè;æB¨‘¾ïAÞ¦œÏÀ”ý.©Ó®Û¶&8ÑÿþtÓ^ß²×Ò +4<„ù–Mq]Z¢ìÕØS¾¼ïÿNKúDkÑÓ?¯Ð~ÏîÄÿü˜ñýw]c¹þöÑÉmt²é¤rž˜ìE;È® •Œh¯äÛXeÒîõ2tÞ9÷’“BfÔ:ÓÛU +™QçJ?')dF½‘ØVÈkd+dÆ U\^ +9xs*äµd]±-â:K¶®ÊVÞ˜•2c!ÄÛÍBf(R!—¥×ÀVÈ‹¤þ{߸5Eµ”Y¯\\³”ƒwµãX|FõR®\é»>À쑤>ðÞîMëwÇ ¶|Ñq“S(—qGÐyov¾eÖ|O£ARÆ«EâDqîÖ¢rLX*óduf™¹ëo˜¶5i}bû»“¡'ÍG©æÄÇN˜“mIêÿ?£E–%”j€—%Ÿk…ÓPn9ÆZ¹ï‘­ºꘉoŽj¶ 3Ô|-² •™IVÈÛVõµÚݱ¡5Â2•ªéX +µéI 62›cÎÍ\fdÈnWÍ—D™ßïû†™Nlé¼›T™~é½Ð7Ö¥éwê­Æ‹¦+»=Jo>7,¦„X3-Ë 3zž0£ç 3ºŸð)'Ìè~ÂŒm'ìsXOxp–u­ã„G.pÂŒ'Ìè~Âk¤œ0h Öö 3UO˜>ZN˜Éó„kœ°ÏŽv?^ž.úl +Í(´<0YúÝçqåÆwf¬;J%DwÅ£TÍu3 ´øÕ "]sTqõ‚8Œ€ jÛ®V@hð|¤³óy¨¡4¬ +aãóŠm[Б¡†®V³¡Öf¾pÑ–Øa ]6­²uk²º#Ðgý¾B_ˆmäÛÖïh ‘feW:ëçÖ0ÏÛ‡qµc]MëÊ—ú¾lu¼¼,÷{ÄS&}A—©ù™žßpBÝZ: õY Mf‡!¨pè14æönXJ(2): +¯Ø[tE{Bè4„†~2ÿç»Ú•ìºq`®¯¸án )’I0´,ÅVÙS›;PÕ>fXµÿï‡ ΕˉÕƒƒg£¹%v\úÍ2±¼xf¦c™àIÙÎ@ŸÓ ò½²dƒi›ï©ã—­¥œ,KË=›œ1>¿üüÀìð£Oͧ×ôxýó‘DÕVÀ <Òôá"…E%m ¸A¯ïþñùŸ¯ÿýðåu,ó fkù~ÀúŒèð›Âˆ¶‹‡-Qáþø"0æ4ã‡Ç2äv‡%ȵ$Œ"`}D +Aÿ‘2à ¾#/+! ŽÂü¤±†„ƒ5r=}ã…€OÆâ"$ÄßErq#ùR»$¯’¼=¯”zð¬ü-´ÿG1öòÿ¼Ê¯Ñ×qùà.÷“ôª+˜¸tÙI½¢GÁ‡õp7£ÇÎçèá +8Ç3thpÑ¡õƒ ß²`Tÿ`}’.+Ù\WÀàøÞ%¨  NõåﻣzÆÚóÁåÙZAc 9 W—g„ZK‘ަ@TWŠ q)ä,ÊÊ–¤'ZU–†Z*\r*yÀXs®’{|)'?ì'è âl€ðŽéýü´ú©q¢¶ø‹*R[¤D(òHŠÎ01â(‡Â­‚§®è™°:˜-Tîn ¸¾v+V,`°ZB‹®™h¨z‡G¤³EàLìà+¯U^ì&Ýá` =¡r-¢àŒeôpf£pÖÂÎ_ªÞóX¯°wIt®/ÞËêÂÞð7‘ æ#. +Ff4î'»ˆAô +Q JÞç¦LÕö«ÚW"08ìrõ>'_%´=Z‚‹±Mg|hs¤…ðôÜ…>v•®ŒÄ—D·.`ÅWÇQŒK˜Nx©g9FÎÆa·Oˆ®Ã¸,cU4;Ë$¨Piî?ÅT±Î`Ez|Ô”¥Ç¯8ñk‹ &¿êGq¤CR6"ÄÁ4j-7†Ït§ù 1c,‹ ×3w'£EijÕ_¿þúË¿¾|¶-˜¯v™ÅQ¡ ãÐ#϶ª”Y%Ç ý@ (\óãæH(¥Ã9ò`…ATØ…cÆ<.87\.À¸lÄó(ékŠ +åGÍÃW¼Œ@ÃÞ5 ŠÅ>}]Û}ØEãcŸãªÈÛóBÍKúxÌ3À¦ÎçLÂ:6_öRic*¾íÏnø¨øv²á9O‘ÛñÃ>™†áãÏ©¥»$ëaþ>à”ó€‘Ó¨zÅ[FµÃ…x +À%+¹)ÜÀ +´`®µŒÖ¡C|Á8lj:ŒPç°\^WëŒ"&®úOb±ë“›8eIG5ìàNÞ–p“ÄÉ[çIIη*†ª$cþjòaCk°êS—䆒\>ŽúíÕÞá½Ùɼ÷}Dœ÷U# UCy°äZê݇„(ùù¹Ð£°Û·ƒ3îZq¤}OìHÅD¢jˆ9ykða^„˜[Ò3¥R$_U¹gùv„½QMP*1E—¥m>EågÎõC¥ÏŸj<Ó„ï|ÁQrOÓ±¶¤¾uFäqͦ‰´šoâÞpÏ3½i÷<7|$D/Uèž'ƒ˜äž'TRJ÷<q>Üħ"ð3G驈üLÄ~&â?qÆØŠ8ãÚŠ8ˆq&l#âLŽv^žj8¨O/©{LItguO"jr=H~ýýßß¾ýñøôÿïÿùãÛ÷ﯿÿù¿­ýqDZ¦ˆ¿Ñ÷Í—‘^¢ÊÍxº.kÅH7§k^§ÔÕ¸ÛÇÛ—uÿP¯'QK]éEj¶+µvÿx’ÁÑû€%©\P˜Á?²I+”ʈ7r Úâ’²‰qÂÊst3†¿ ‡g‰üp9ÿmœ)"™±@ðÌ匾„ñUND×Q WˆW,PœïH¨Ys)S+ 0}`[Y0ƒÿS‡k–x9Á•žMÈ*Q1îY¦u϶ë¦\ >TôK>ê=+6C øŸ+ïUèÏÚ¯âáƒÊn÷ª]°Å>ºÀÈ®FòöÞóÖaLs¹£ƒ&À¥®ó –?u?¯wjƒ°W/ã£5p\äÞš+ +LyiõBWÈž²RäÙj”ב„U™•Yw‚ÛµŒK¾Ö>j½µ†Ž‹µøw‹†'´ÔÓ®5’Á¿¼z×ÌK›Sí]=Wíô"mè÷u¸zµ!ª($/§Ç"ìç’Pd©þí8göK ´²„;¨Ö +S˜™ÂnØ-ñŽûXâ oæíöñEß•SWlû°/5W +Ÿ›ÅX’pË3*ÇVOVôÛÕ²#Ûm÷ó³´»¡EIËûƒ8×Àõ û1ÝÞåÿSÔ“âi6ÆÕ:I‘Å¢»aË•©ªÍÁ¯¬â ­3nÜl%p cƒ´ÑžÖ£XÙÆsBÐZGŽ·ßn•²c<êjgD•?S@úõ:ßšM‹}u˜ýè0QÍׇò)X¶V°±Êº±n4­­¦wî£PͨW®€¹ D«=­KELãS2CóI˜÷Óí ÿöòùãE6ðêðO€¢ Ú›¹øÖAsûÇã凷ï_¿¼~þß÷ÿñ×~üøóåí¦9Š^hjM€Îê‰e™ÞÎw8;—{4€!É©48IÏL8A§'ÐÑ„£ÃºÐ`¼ëÈ „qeÎTÓ„b”·- žS9•††:+\£cƒ!ÈG¢Ät¤¦ëái®ñâÂ…5²nÏD ˜ûÓÅN±Ü›Á_‰¶#3¸Qá¨@qÅõ‘nIv¶™ØéŠè¦ìž¸ÆÏÉæÛœž¾èèíâô…侸¸_§¹(|з@d9Œ—w²H•ñ:Qv§fÄË"u}ylo¥¯¯ÇË{LŸ@áz£´éJc;ƒ®û•Øm¹)x?ñ{þð°áè8º +ªA¼ñ·šd%m›'†nã7€¾ŽT`!YÍîքׇµg¬ì^}¸87½~œð|Ê¢€|U÷è°/äzŸ”êFSvÀ£)æÄ`.2©m0–2ª¦OF5™®Ü†Llö˲T›~UgWk+³ ‘ÒÖ ÍÊe]i*@]i’4†ïF8Æ•Ž™¼}¥ÉjáÇ š7®KM*x–I;n1¶Eè¨>6r™lhXU•²± +0ˆ€ªáÉцֻ£üj"Çz”] 6ò Ÿ­GUVݶ7hó +FñÌ‚ŠM²C±€e£M¶†,ǘ0íZñØ1“ÙØVŽ/GšßX¼ª£dÆ"à€ê.†À.‘ìüEâ68T_žœ†±Qà€}ŽÑa;‚ôðÇÓ ‘ÚÞõÔ »”¼Í“rN`Ì›Úaæ¼CêK=OaO×Óž²¯×ëN’M©ñzÃí à-þ;*¶ÆY:ð–xD^°Øv+p6Åb²Wc˜l¾Aá‹hÓ,“ÇS/TïÒ À%E߃¥gŠŽŒ<ا|Òœ€h·Nª±ýe,ëˆBgƒÅ±ûÕ‰éIÃËß”êaÅ\‰õ +çšB76ÀL¶çðiíŠó”5„†a&o@Á*ÕX!|qdAÔ]­6ÿ^ +ŒÉ6…(†0ô…j!HƒÝ¥á—ñ*«ìöQ=”a=¾”zÔ)§‘¯Pbµ©¾æhl=ê¹ïp=õQ˜pÓ•m£l†Õ³I¶‚w^•íÄ4vvÈÈ… ¯h’­ü@±3_ÏîI +8ȲhºùI„÷Óã ·1ÕáÖ0Sýõè0úhn% çÁì³?ê¼~«œl{J·U +-Ïe*(Ù*ã$þj›Ô÷ý÷÷ßÿúéõ—÷¼}ÿò÷Ÿ^ß¿¿ýòéÛ×µUeFvŠÌ¦þÕãÄ`žæ’™E×´ÁtÂÐ5É»Øà˜æËåqnpr²¦ 8&*ÝHŽ~¬“€‰“« ½åušÐbŒ´M̳ÈDäp±,kÄìåᯓõÏ>Q1¶tÜŸ¤¨¿o¦)çTâ6vd(Éê!óAÝØ>Ú좌8ä×’{ÝdtE•¸Ðq\VÏõp•|¬Ö Ìï…)u,'7t~œðök ùl¾Ç°äÌã‰Âì ÎÂø24¼Îãíø(8ux]¦0„úüÌ'ä­QBa3‹åñr¶A'Q0!Nlì¸pÛ=`Æòk1U/×…àmÕ+/ð¼ŽíY¼Œ›|%–…”Jò$¾ûéõ†[ˆ°É!õ BP8ìHF2¥Klø<<ÍšÃÓòù,sK…­ŸÖÊØ7O1íÒRRIèxÙ²æéA sŠ%gã +Î{¨·^ ^ûÃþAŸ˜ñ[ò +Zn?@„åáyº‰ªî凴Q‡}ªøX,cÊšUÃáá€#t?›Úì“£vh +»$¤Gü™§°K 9]éÕCSØ.9å=å”\¡{™?¥²-Ó(®h|.¥' +)ÊÛíè|5½Kîæ–ñ{0tÚ`\õ9 UÔ]À>Œ}?-[Áz˜ »ÒY!2î‰ 1­Å𬎅žG‡Mstš5µÅ-BŸª e¿©x핉 h´Ã +;êbÛ5ðXÏrq¢žƒ¥åŦuVSX7C5O⻟^ŸT³¿cŽ>{ºŒÙÅÐ9G#ªÃ«b¦ó¡>?ß«€(G>ìnì°‘d¼‘ìÝZ N— `ý²Ø€2¥HM‘¤|9Ùן£¾6úܨ9;횘ñÜØ¸.ç7¼Ó ©Ò4„…^É%CÑ€±k•z¡è¢pRWS’=:ˆõ¢W¨cô0ÐPhŽ Õ× csÉl´`ª×Ó(í¡|Û•xÔb,ƒ‡7ª#ܯwRØ9T"”vôÃçΟí<¨×÷‰¥i0Ç0H8xªiÂ#æÑ™@±âX‰ õç‹ zü÷›ÞO÷VkΙ‰w€…ò\{¶¤ ‹ž×qÍѰ°8StI!­ø"6ÒC¯K¨8;TâP#%¬iÀ&µÆl J‚÷6Ñ€±›h'Òx•i'»bI&Õ¸³1I5àì„UÏTŸ®T Œí+™dðN·2¢Ó-WÆ<—’•nÀ˜é1Øt#Ðk=Òí„°ÇäVéÞé3é. Îr4`J#­*ô|K=}Gž²,¡C䨬 +ûÓÈ“:] ‹³œó¥X«`Õ¹ÊéÕ¹ +;™0@7‡^ðAž¹O>ìÈL>À9c½°N§[³bºÅ³mhÀArlа·DÃM€] +cJîµUVL™ÖL9¢_]¹½ +DE¨kIår.ºéóNž©ýÃ|‚ä)ñ¦ÄZ!<:\¸r4+j6ùcT˜ž¿Ê®±yºh„QS¸46Ú-Œ”[©³GyÀ2.F=‰ï~z­…Ñçï!™A¯ÿÔW|–„£Y¦m’’ùx¼üàüøóåíClù[‚P_¿¼ \É^IìA™ó ŽqWÆÁÊPuù‰‚yu7‘áèëpÖ“DósA:š£Ÿ¾}úå׿½~}ûçû—·ß^ß¿}¼}ÿöéãýWà+†\o\¼G3óM8¥3ûF›5ñ§¸[.IVÝIH¹H¹bßú|ꃑØÉ¼à8+dЦd3ðèŸ;<ïËï劓çMh½H¤?žÈñ­ü%RŽohl#œQÌÊ$èÖ3ù¹Ù†@E„4vd´SÊ¢£Š<Â@1P¸Å^³[Gs 2Ë2š î£ …£¹µHÝÑ&û2F ZŒcŒÉ%kïýñRu¿£=ÒçîgÎÖä;ªìŠnÌ.Pí!ûlü5dL±)TåAYØ)[—Ù]Ž/±‚0¯¦Ÿw¼¹“ùŽ2ò…lŠ T€ž ¦)úÔ¢9Úž%ÇEfL4ÍÆ¢iJº®Hh¤z9J4çÏ5ª»vwƒ-.(D «n¢pâ[A=mtþ?ÝU®cYRDýþŠ2Áè"÷ÅÄí€Ä”ð´ƒú¡‘fþ_œÈ%òDÞbÆ©>/nd,'6ìÿ%Rލ†û@&ú­MB†GX„/ç†M¹¥‘!ÝÑ|/"”R–³, ±³± +±e¹PóMt=å„Õ ñšPÅ¢`Ç@$„ÍÔŠ.•—èÒj Hmlt£¹Ä– @±iµ‘—Ö¾p2êVB ÷œ›…àéŽçÓ.‚§WšKvÃ|×üŠž 8æ™:.gh—V^®•˯ïº=´†‰Åí®èÙϸrÈå ¸.q9n•k@i³3q-Ë©·zÛ®åO’µ¬-ÏBŽòý 2àÒwÅžÒÄ•°sÅãVòi‚¤Ñ`WKâBÆ uZé©eÀÐ1¤™ãs-“&=ɵ'Ç\Øô8•‹2’ÉçÛC4Ë?I1XZ7§O]>…t*€¤µ´cÖl·³ÒŸ«›,Ö‡sqq™k<ÖE'[ãŸÆs0ÁÑÌ +º)Ì1 +r¹ìqCI”ýá†×"²;ÝV³Öµ£ýD;8Ã]™Ü(œ2¢] +ÁX}G Œ¿°Í]$¦±#Yºöóý]?¬µÌsò«Bv¬ðoXy÷ô5º#u$²$ÑßF'ÝÔ·#vBiC*Ÿ½ob{¬5™xæmí¾‘Fºà ¾è<Ýð”wE÷n4€û¢#ÉÕÙ¬8ž®i Ѧ•Â]ÆumULPÀ§€N¹Ì]†”p—¡'¹Þ¥Ì!„/»p¹ªCÅHY¤»hιÑ,ÒŸCrÚb€•»¿¸Jy:ý…lUºÁ­vc>ý±9“çô—O#9àÍ€ƒf+Øi¶JQß5[%´ÀÕÍ@nî ¶†]½e¶_¬Ž*ާúT; õŽK†¨^²‘öÚ¹ðqqx +pjSúd"h·Ú…ObZø¤‘ ŸÞçÂ'k ŸéZ‡ ,"uÝqÝŽK|ò Ée×Çbq‘!×÷Œ:úL3Ñðeáÿ«ÞÈ«zKMœ¦èM‹VÍ‹S¯ W4ÒÉð,Õ32k?ݼŒõ­ø'ÜR*— + Kß|¡÷ò̶ùÍ?¹Ic®.Yù'cm~dØùMÀ9䌼ääk¼Â@òæÙsìI‰µÇ\“5)V%ú¢=vaG aÆ”^ý]Óó³¤ÝÀý+†‹§è¼e‚±…™JÒ¨xP5ma…÷Ç'~þ°vx X¿¼–h’ùŠÍ¸HyGæ4–ûÓ_2v¡·o¯_¿ÿûŸÿý×÷·ï¿ý¾§mÊ@l»ëj‘U:xYGžK®ì¼xËr¦¬Búî”­ ‹—ÕQ‘þ5Ñ +ñ:Ä.úUz¶´iÖ2àAÓ Eo­ÛU¯ àá0^Äš¿aéNãEÀÑ“’Ž+ëOjkIYp.Ãj ¹cŽ=äЖNpnóÅ"‹ÑÚ-€]%gNT«'¸ «5ìavסÛH—w4Ï¡äè–p¦Ÿ©Á_yÝ›eïS~Ã?&\ÃL|‘ ,ˇ:Ò€G›î⇦ ïȲ‰°d¥Ç¸OJèUwY)†}%=ц–¡èQöØ^9ã¼Ã:ï6K‚&p7_‡çQi|8EáCE/ó$ÜØ¾|ŸŒØ•€%5.þ ´Ò‚%yqAåº*&É€ž²œB Á¬ “BÀ›NœB c¼æJÇOO–%Y·6|R(ŸÖ›eÆ@NaÊê8ç`N")á$ʤš–É"ÂN,–˜,J$âßîr²H´YÄ@ZIRnòȸSsTн)ÿGy•+Ù•ÛÐ|¾B¡XE‚{(Û +T55žé+\êÿO}@$€{¸:è~ç¡A,›!Ï‹¸ ×GO—<èôÞ]Qç(írDM¥c ó€P*D³tVk‡ñýmvÉØ8Ýp }?R +âyå5i3Èc‘G¢÷sÁÒ‡Mô°Ó!¦ +†P'ÕŸ”ꤺY¸9°«¨c÷Á?Œ7vºHzç$â€1âw÷ÃÔÝ>ôÕŒ´å€S±#uÂù8¤Yx{¯IBXÙIÆÍu°´aÍ%ÝÙ>1䨾¹Ôv˜Ì_« M®¦úTDÀ®¨`‰Ÿ-³û…Ƀ’·‰ˆ|ñnÓ×ÄþXhÚ~êWyKƒðp6Ž ›ïؤrz£âÐ-)À%MÕ¦ùFÍð›%­k[éVC ®Õ†=×GÃ5D„’Pð2ó†ï>hÃ*£è ®nÂxDX;ß&à·Iãë$ü6‰bxD°äm)õ$ü6‰¬'‘R¢'à·Iß&Üy›D€ß&‘Š -‘@'*²J~,8÷éì£&Xéu• ùôi#ϬÓÊÙlt’S—Z¸¤WÒºD”nÝ}§þŒÊµÛÄpHÏÊæ˜„U#º¨þ*´…xzµ*¡}ò¯ÈªÙùn},x/Ž:\ø}ç×!9£=úU!Ž~‡îªC(̓/ºÔíP°-Ú8’:;”ÝY¢hµçÏùŒ/eK9+¶±¼œ³ÃHד}£ûA ÿÒr=´C6C½ï˜[q|Èoêûð;¸‚¼¬¨>¢Wí]ë#N¼}õ9@qOçÄm4c§¸½w*$‘ËÓ(_‹Fa?7O†ïfÒ†‚E|k¾ºUMjKÔSvëšTꚌ¸V÷Ék¥ëFw=$3–À‰"kœ²“2 m”—WÚÄäê6¼–˜x»mvlWrùDÌvü0ð–TÎÐRƒ%òÕø€Ysé²yJ”Xq/Ë8þ†k€ë1œ1¤¤1l“ß½£ÉõÇäcX*¢á•XíZIæt |ŸÄþMǺ!Årà _¤!Hèàôæ•LAò´•"j‹Œ©.ØË¨Ó¢jÙšZ‡´Òë/à~Ö…vX«¬Õô„o»5¨Ý‚QYìu—~ å¤@:í졼‰»°IrF.7Ã5å=8y„6¬¹#×S¹J€Qèøxà„N>&Ü!]<Œµl,^ ªo7ÿ$2Ð^ l`¬Ò¯¶7˜ÎíØw]×äá +%ÑKóÀH¹{ÕK` Ù¢ÕÎl¬£5TïãAM@® +¾û  ö5Ϥæ:cùÌú¦CÄSº§Ê(°ÎùQš&á‡A©Ýˆ_í–œ(*J5%'ŸÆÔÚžò¨ Û‹ÔZƒâF3˜Ö¾*XÓ"a‚Ü8¸ðV´moEÁ9eš(T—ƒ*59V\aÍ +n2¡†2a4­M8eØ’$£Êê O/y.fòžŠÞ§•€â^è‚xᇼè7òW¿ÍÌS}¹Õ˜í,OW°†>”º³_Á:J»ƒ{¥P]–ðh˜‡æ{°,¶ l=9“—ˆÆÑk]y¢"•÷âçOk÷…§Ÿ™Wˆ”UùXp¢Ú–C˜i›€Ch=z?±Ldêô„)Ѧ£rŸ° ƒœFÛÜ \{Ù¡ È: \BÚ|Ì#§.p.m‹7N8,{Ê®{)Ý8mŠR2ÐÕVöëÈù˜ÝúžB°OBÈS´9*NxÄšº‡y»¨¡{%X?ÂØ|»ýpKÂ6thûçQ[[Íy€<§'ryS_Õ5÷–Ÿ Å¿Òð¦`ï Íu¢ çFµZ@Á"õà†{O{XP’ÂÒìý„k‘®¸à®®‡°!%Õá( ³¹•׈S¯39{9ŒkE W%,=WIK*À¹Ž–9R½ßlU¤œ©QñÅçCÉ”ñL2žJYÅÁò3iå3êk¯ Þò¸‚j1MÑÉë¼)X©”ØÎ‡•¯€Î¾+ب!^|Æ ŒÁ1ºcúŒþT«ëd€S©;28jk¸¤±÷'Ò;¶â’„ÌW;.*¥yÕp8J7T†T¶O8tÍÖur}4}êìÒhFv‘檞G]|5îEúÛß~|ûòû§¿¾þþõË÷¯g™. aÄø„4šXãÞÆ9(à;¶i…®”Uð0ZE9º‹ô§BÁEìö9­XfÝ…~kZ·ÙÕïŽFcªnCÊ»€j=%ÿ`A‹h¥zQœi^b‰!˜î{-”B›èILáÂá È(ÈLÙà0êf3Fj½üJh,+Ò·#±°mÁwÙ-¼ÕàÚŒŽÏ5“ÑíøªbøºcXGAP­0†_.'LÆaVÑw—’3æ8L9tZOŽÕíf¾0º»+‡dM†™¯ˆjÏ¡*x‹£)¡Ç>¨áušŠ1‡&‰ÉäܘÁÇ|Íís +ãÉ׌*Oi§þ>zÅ5Oµ–ž¯»Ejsý‘/>4ì”.KcɹBÁuà<ÂN?j¡øt)bBŒ‡KJ^?{`ç”(ñNáÂÈ æÏgd”“}¼ö‡õ 0’yöCÃöÙ£ý·G_<¨bºiæ[ti(é®ïè.T‡«Æ?Zw.ü}íº#"—컨ƒë-½„ Ûîˆ}“.br„ÐEƒ/šewá…šˆ^Q\±bcÉ¢gÕîÏY†ˆõæIIÞUcËÕ;+ð/Õ;ù­Þs,rºkN«û”žòÈ'/ª^^`oNÄ ¡j°·–F¡<“‚/"zéC¿À¿Ôÿ_úöcKÃLÞm±”‚KÀQêÀ^;¯½(9ísc­e<¬‡|ǬjÎú¿È/ýN^ô[{°“È*Âk a%s-™Þ‚ÙŸþ‰&ËKIì_þü+ö³ŒðÉ×öœ-³ï½Þ´3†Ê){ÅEaŒ¸Õ5ls&Â-4á‚Ãj¸s[a‡_y‘Uå¤(ü!°ØÒr”S –`¶ c%éÆ:ˆ 駆2aŒûqάu}1Œ@ Ì(èPë„)ôRtMÓK”Xî÷(Ë8ch­R<º%|WeGw|5:éA£›YÏ›Œ³pì­=í=&zzùÿ…ŠFغM¼ñ,=²“?‡væU.µ´Êü á "ˆæáIåøwº!Jžªa%ìoÓÁKft¤ä$3I¹JIN‹©"`ìÄÚU,>Œb«É¾Ç÷iÅ´Ñï)̼wõ:¸ im&Qü?Ê«$Dz^¥ö k Hj™6ªmF¹Qiô)*ï¿í FJ/½è]f|>Š3ƒm _µ±­@mP©i )¬Õu…"~dûéáÓî mAXj‡ ò¾`  Ky óv1«ÒÔ‹.pHyÂl¯—.ò™ô®sÓk•+ù¶$¡?ª éeöF›‡ØæµÜІÏu’ƒÆè൮@ù˜’¶{¨æ»õ£-5]ejlÛã^A¶>:pźº 0póÚ·Z´¤\¯Æô»‹Mq Pî*y.mWÍ΂ˆ>áÊvOÀAxèÞ³Êàfõ®É8âÔ¨W­›îFRΩébwáÉZòSz„ïPˆ ÷õiH-*ô4[SLõéäÿ)Rå;Üi\WrÇPîuyH»¼ïEÒ>¥{qßÅ·(R-”Î.G€#Ë%±É ]r:2²5ºû‹Ñ D¨ ~f‚òÂúEú~âÆMÒd%Aí­¸h%'û«÷§Á,]£õB{7¨m–ª WБ$ÿØb°=;Œ…°6\°“=¨}%8›î®nÀ%ähº#€¥>alU2%X–àÖ  ªXt(1cÐ +Ž´«¦/wìŠÐšiÂÃy0Õ1=ƒ&[ðHÀŒY¼ tð …Œcë „A0=5ÒJ¦…ý?_ÞÿúöûÛ·þj3,/ ¹œO`£[á…mÑwûäO0Ôϱ*x[M¡Þc×~0–«‡à9¶î.3Ê«˜Gå† +uŠFé-ˆ Ž÷PS)jqðC~*ÿ8a¯|kÙÆmìò< yAêå¹¢J’>öá,ç¾1X’YoÏ£­¦tÚ¦ +® ¥Ï¦Âý9±2XC‡—<ŠXüsNv%ÖaÞ„ýõé´ušR­Wø­/SÑø¿“÷áw°wqkÙ6oì²-…ÐuqFržó«B{ð4èê?®”ÏѪ +nr`Ø)˜®¯Q³¢jÀ©äЫÅöç”­2(f ±³¸¦˜Cà“☠š|íƒI]<Éà¤r¨E>Û/ˆ?£–XE²Âÿï·_¾ÿñëÛßüµ–cLh +ʇèÇ “íïy¨!…CtÒ¼¥Ç}yòÑÏ3¦c Ó¼z"&En0Jp_=` Fü( ¯cº©ÁAâ¤mb´»¥4$8é £0²èV‚ð±l%óIÜJ•Ÿ¢J’;ù¦;èºñävÞÇ0:-ÜÒvÕ‡ré,àÉå²$Y‡…pÛ 8ªÐÓKû˜8%>‚îIogà‘íΑËgæGI`øÉ]ô¨ÃukþWÅþGý‡<}RÐ&þÅdl±ñò¡¶™¦Oy”ÂpëwðiæŒÅ®Ç^°V›4æ¬.pÈ×;6+ÍW!A3ŽÔ«ßcÕY½”>:œñ_¯°”Ó˜‰ ÂŠ•›Ní'x$7\0iHçäkì¨Ãpà¶Ó>»]hÃŽ{N&ÂèÛdÃX$£WzÝh>òf€{§’å L®³B9ȘípÚF=¯Yf°tJqÂf”Ž`;%˜ô4s°š"´Ï7SÙ¤ ƒuåÖ/²åöJbX“ÉÕ™‡Oy§ÿßú:¶9›_^!–¹€¹'òRž?›ãö5âT_ðîÌ]:€¶1ø£w­äfÖ®Þr(MšUx2—d~þtïÇiñ†ß;é-jÆM5ƒ8V²‹qñ‚Ð,³…2ˆ:—hÌã¤ËŠpyeú0 èŠàY]>b‚¢czÒÁ¾D¡d×â†ið1òŒ›R¤6<ËÈ–,‡—´´@ÕíÏâ“^æn¸Å!ˆSéAÀ€ wÏË!‹:.Ï +”ì6²‹­‰y2Ëš{‰Æhd,t¯:xÈïü³öϲ¶]|櫱´2½ñ´<¨f»“À“Aí^95šöýëO.áÅ`~ãØÞ/K7£1懱½_@5KŽÙIw7HQl™M ²Z)öê&d&UPÏ ùú +¥?;õ_òþYïg%—5 ííP´g‘+ÖØ–ˆÇ£C+óm͆g·öÆ@`+6ƒ¥88Õ´Á%š-?N[àžL·´âqŠ´tGæ†â\Çé'nþ8ÍÞp+²Åò,K´ÚÀÃEò¶J„Œia°áwÁ7KŸáN ÕÁ#𠏙êÔ—µËÃ!Ô¢9k0Ï$2ÅDNzX;-4kqÊ7üÒ׬ý 'D¿Gš¹ß~ûóëû.k Ššš±]GÃÕÚ`&9*¨/>§r ”#Óæ’Ê':’{qÀÕ¦A²c3-I*½ìrCŸ°ô X¢ÆF^jpáª4á˜@yLc±Ãl©]I&žV`ètf›oÉ¢<0MÁÓ5•m‚Ì¥Á ®eÇ(ë€KÒ;Dˆ›6u ,òòmm°¨òœ¼Å8Uñ`Ü–½[ ˆY–”¼äQ1’\^.ù#]v&n|ïã-côé‚?NðЋ,ƒËÉ¿÷‰*5†ž&šóƒ"ñœ`Æ¢ 4ŠH÷'–Œ÷ ¹¥ÄZf«šTnëÚ:-OaäPä©{n”î²Y9…Qaiå2-…Ÿè.G§#ÛËÞ=ˆrÄy›oóv…t_Qº 2X™Q=¬ 3Ÿ`´]Iù.Ȉ–,¡gitLJï-_`Þºm¡ï!á`_`Äö¾ŒÖl치0ICuð/vʰޖ€ºrÌzZb=ÓU˜£qÎÑ88F[R¤¥_–}Žþë矾¤=FÜSs”xz€)Ö  N«ž±²Ì0×2 P ÒfD™DÎènYí˜Ì«­ÖW¡éyi,6P ÎÑÃWfƒ©º÷°ÛD´·e5QÇ*9ÑéÆ)-3¶×6|W±0'ráºLÛð D©ÄÖ6©-Dc ¢ÒšÍ^•Ý"b{µÊ&Ph ÞÁeXš7’·é`ÍÖEã¹á‹³Göáíh[—1Ïk·.Wê·w~ð÷_~ýþöíW·t³®PÛÄ2“··+>o(ŠupÈÞT90L[1VŒùܳ¦TÜC.ƒî³mDÚÔèÜ{î[Ó,¶“ .UÇT &kã×2ªc6Á‰Š +êp–9಑vÕ'T-ɧqÄÍkÆ`‰¤ –07®éî«0zµ,»QëÍwŒ Û¥ &­iHÃÍå%cHÆ3+ÏÊà†lƒÒÜÄ^çž+|ˆ©8x‰0†•¯KxåËaÞ:÷ù†›^D3i¾×<ê>Û„³tŸÞd‹fÕ‡vD“Tô œnw\g¬¹³€NákÏYÒÿñ]-Ë•Ý6ðW´OyBH.]¶\QUfœ9åŸýÿ6 ¾£ÉR-\¼tÏË8p C¹%(Ç&*CrJâãìjNI+!{Ïxl-]q€«W•i]czœyá5€z#è¼ÁU@É`¨hdò?Çx–¤—D?†-½­3uê«/ [n÷%âšä^¤Ó2glÌd¢8˜ë7.p«óy˜ Ž•ôlKÈÖx£¢ +玛‡ë1Xû¸•W}ÔAl(}o\ÕEw”K?IÆ¶âØ¦ãáÃb÷ÇŽ[‡&P´äæM¿cŒæ š îqY‹îþ9ê›Eš[KÏü~بÜSTÊŸØ¿z=îÐ`ôxõQ×+›!¸lw·/ÌÔcÿÚÎ@Ì_@vè^l>žñt@HÙu +”<¶lãŠ:÷³yøÝ,¦‚8“{%|¨áØf¸r!-üRØ>_åX }cd¥¤c|àsŒPÊ‚óEÖYoâã[ëï‡IBØi¡+mSf<óªkлÏ\ãØñ€ãS£âÃ\òÌæJò†¯’ÜNNýÎM±O|¦5'ÓH×ò1 &¹“2;H8øPõ9x ­dzÚ/xûþ ÒÆT6Ò@ÉÐßýí¯·?¿.¤Wº‚ÙvCÄ(“¦)Á‰Â,×t( +ª×˜€áBÈÃ*\ÂT—ÐVPTº>9á f0DŸòe‹CÄCqä͉t·Êk…*m4€ÁyÂX߇…o‘×|JDbÖ)Ë +CU\Pº¥š¯n²•!†L‚н¨YK’œâÓ*U'ÀN.¾PÁquŠO³NµZ¹ÈPˆFÅ}Xøø[‹%fqM¹à[ñé üpŒ#]sJŽkÈõžã ׸qqŸ~Ô¦ŽÆ&^Hñè+ÞWÚôAñ˜¥¥c|àÓ¬ãƒÝÊa&ëƒØOIÚ#<”ÖF¹’!ey3Ž™ùU;l °uyš‚­æ³Öšä¾q$4¸‡>4&þêqœ˜êOšRŸMcN:¦žÏYH_p0bóÃAS³|bŸuН‘ú°àO½ëåÛL¥*Ü ìŽAGâÓû!“µ=  ê‰dZNN~‡&qïì¥q©ÍÌ@%ªÑƒ¹ÖìPH¡ùµ³>”AÚ–ã”ð†C£žc(Û®ˆŒEX˜w`A“›ŽË1¦¼dS³ áHrÆ7%D¥$vVb¬‘$©JU×iƒœR ù +dÁ)Ô• ¦eŒS“»P\Zíp5¸–M¸0Í&,ø},½Ê­ŽKŸá¹ó;iØõžÛ7Aµ+ù¹M+S}ÎÖ"žåì¼›y¹Æ]7+(êb%‰kL-_ðÞ4UZæ‘fZkfahB8ó [ +wˆ½sl7kévÞuNé\BGIÜÒÚ”[Í-¥Kè÷·¯¯ßÞUJ½üúýõåíÛËׯ{#1vXÄý›ƒÔ2[Êzæ»Tƒ1ánĈd•œñF·ç‘mñ-hî“6^@s°X«ÿ$†‹HëîŒ'ê?ɸùäÂ}r÷—Œå Ù:¹ÐcÚ=#K觇g0ÇXå“äÁ"°®Â~ôi>Ý;óéÝÁ„’«¥¾aæ9„æÂ^‰ºÍ¹²øFó;ÿÞ¥:\ Øدý‹¬vnkÝ1IžYÂ<æFìÙ°ùæòm@< º%šò5Y`l5ö˜9WÙ2eFÑÀîù8˜¶Yçv» <ï‘I‚E²1ìü~Ø4ÜóÜØoÿ.r9º#ÖÀ|tGiG©ÊCºd2©3XB#yTU7'øÃx:1êâž µdÑå8c˶ õ–}ÛA‹‰¹>ᬣäœè© +]0íO.¸B1öD›Ðq"q¤‰üMn¨¾[ ³º¥Ò†#¾É®7ž `À¹mQ¨–aMAd[‹Þ9Û|E[×^}ž©±²3õUZ]v•šC3‰3³Ó€º¨éÊy¡bª¾å½ýâRò T¦'¶Q9<†±z׬š-•!õ6a‡òšÎSZ:p€<*cvÐbæ |t-^Ô¿T°ÑYæt¬|õj;éâUܵ9ÒØE§×"•ÎTT7rÞbbæmŠÇ8Â1'g ‚Æüð«$‚AÉ#Qµá¬³Wfz•a;°EÛ_³%Þ¡ù†Ì<|û|³·T +¥F¿cUåðÉòH:»÷0}ô§ÞùpîÅheÎúµ˜P ªÕïȯ %ŠŸvRŸŸ xRž>¤dò{Iå«òl·—$n-©kAön-N ÖþB ™Ö8l¡¿•ô;5ÛJ@%I½¶‡.y¯­¤5z†]!ê»”´>¸ ì—UÕ‡¦ß¾]“†²¿ ¶S@ ±3jCVÄN{°Â*”'[¹ìÍW7lBÜ>\,IKmèÚ‡“¬%œñPRb0Õݺ9¨{1ø³QOF­–¤§}Tr‘Ý ;èOÝ;óéÝæå•âº`|§TߊO]uÃÝs©-ìãd˜¾Ÿ*µ;(¸Òy¡Ø +“ AT®²*I€ØÏ.¤ó¹c]ŠD^c‡¾n‰]Ìf[œÍH}R¤ÿ/Ç'|L]Wbÿýöï×÷÷—?ÿú×ë÷¿ßÞ__ÞÿóúÛÛo¯¿=V°H³~DôaœIÙRG•+kŒ­¹W׳4žhýŒEÁÙHX•UÑÌ4×Ð(Aùƒ?­(ZkBùp‹jv–‚ßKô^¡zñÅÐió,þ‰ ÖUû“—æÿãQ‘1¯Ì8§»Gtd®VzQ”Ã/tZãO<}ºjº-÷W6bê¹yÐî1~©UgîxL:à\M” ¬°äë×½,·?g9}º¯cí`sŠË£/”É/xGº“¨ÞÍNÅí§2Tîe>?ÏMG“u…«‚I6üƒËéÏXnŸîëE’zÀeeeÝS$±ôyÆ¢1y@‹€Uؼ€¢„5=ÐÂð{ž PiÅ•˜cš?l1Þ Ø‰,´rÓ‹­4 >6šúm†«Æ|PìVtsÀãV´JW)—ñRŠ”.ÊÐKNÐ;aŽé­Ö@ºŠAˆEu¿Ô•JŸ \³¸ÑH•â0 öÛjBîûÜM[ÆÎKeXßãëš{ öÀlËÕFLSö/Ýèhò=Á1¿¸øE`ªšNã òhtÊaž€ØgÒQÁ¬=L[ÊSD¤á|W»Ž]GÌõ +m,|ÝM²_¡í`¯ Xè Íÿ§.ö›<Ú…"Õðò°ùªb_41Õ¹åvÐñèÄ™ÕëAõU î”T{S´°$0PÉh »YoÙÄ|2k4¥+§ ²”³û¥¨$¥¹yÃ’½¢DгCÑ,û÷xžJ=Y–æ½k)ˆ}¨~²hìÙ°/ÐÌ$ɦJ_„ +ôñ)8…d¡"h¢%xÕ6F®vY¥CËÕ–Ps"”]¼˜&@n¨‘_x[“F7-öÊ`Αn×ïŒî íA-0n‘¯nßv»T 0q®ŸÙVgÒ§V×}jq=ƒ+6jׇÀ+Ü2DrÈíñËLy°äé  øÈøöê µD²í  I¥µë |=Åuµ¡9¹éÑ Uט¾´'MGvþè©«#À–8‡Äuke²Û +'+fbÛú²V‡$2­‰ÑªW•ã4¸¨ VP·Nû0¨±œþŒåöi›‚ “¸8Æ$¨/’xŽ%‰ö¡Ôô̬ñ²Ã¡IC (¶^숌ŒæÚj*†ÃIù,Þâç æÛÛ£CK‹Cažâéw8Äj5êùúÝ·-.ÈÙê7l²ø|Õ7ïAûË@u1N{ô c -?û°sçKªËí˜ì_ºôùqéìî3böô9[{[KÓ½ªµ¿£ÜˆýzÔ^!¯âÄPHm k¸8ÉzÐA,JrEzf(ù?¯1l©ÅÉ’ˆjwåòSoœÀ ­ØÑÅhª¨-€âv®e>¦½—Ðqp³ýù”ä¤lÉÐoæhäþ¾oæ±wÁÊ"[LÂÃ/Ž¥š¹ª*ÊØ\¼X)äèÞ¶Q“‡íáNÙþ˜ÉîÌTb?ÂUíªî¬8é‰áÅ Ð\1Û–Ž¢rD?×ÌDF6bŽAzq4q¥h‰,*½E+nÔ2'/n€‚†éÇKËÍ®Y¥zm£JRše2 XYÁ--µ¥2:à0ЂÀÜ2Ô”¤ê9ë¤Å¡,i°éa2}p 5{&‹Ð<Ôjv…L…4·F—n‚¶H×}q‰Jx  /L_;CKîÂã©$¯ÂÀkË^uê×¥<*ƒ(c–ì*ôÌ|T« §Lq•Ú(÷£2AGàQ™ƒâ‘•Ë—Z‹¯L}×’ÉRPl®‘É›zBSE»ô‡µ\µ9ÈÕù¥]ç‰jLŽPº½fÕ3ÅPLÀ -þ‰f#æÛ =LÑ5êqÑh–DœB:(6X.³‚ö•d±Ý4‡”û…t._  ~Ž6Œ+;;œ¥pùÄZ«ƒ‰®Ï/ð~Á¯ïŸ°† \þ–° +žªt".Àøþñ釿ýöŸÿþòû—ßÿþôö>©wPév’÷œ¨VQ}ÚeÅ·‚Öa=¶×µÄCWï döNÀx)]Ÿœ0©ÃºÔKwM%{lṆn«²ôºãà¨õQy’[Ýl½¯ƒ Xš®ÅB©å.ç' +µ®“ X÷ÚÑún”•öä‚¢^"@3ïÉyA s‡u_º] æ¦n!ÖúA‚ Ùk‡1Ág§*¥·xœ|XÐ$?ëNÈÉÀ_ÆÂÖ#/Ž”–ZÚ¢LÜ#!_ðfX¼Í8ú˜l€£¶Ø‰žŠ±ê›®št>R4ÉÎÛ ?<²µE~  +UÀŒ„”E~¯¯_¿~þ×O¬T6¬ D·í¼.ÕEê0A‡ÌxÌ C‰eÛ^It¥Í©­Õð.®Å®<¶3§Ñ^µ\p€ZÊž7-$‡î¸ë!ÔÉЩ‹E…Ò¶é«Dí|uƒ+ëÀ5—^óQPjuÀà·² +DÆ'1è´š˜òx<•†úì(ÄýA± +t‘Ní’ +ÈöLJ á|ë5вarÞŽ’†Ë‰€!ËU3ß¿ .MjOÙc•¤+êiOÒ÷¾·Ÿ°MâñŽ´ðåF°¶ãlÃÂmn~…©‹(…ãNÁ gÙw;Ét[·Îœë [ß.’-À+ÚæûIS 4Vñ}ê¬éÕXدÑ÷Öh|th:ÅÛ§,àR½)È_.ÓåØ á ]‘¯èfÐ6Sû‰¶Y°¢¸sª·†œ­rùVæàÀ>ÀÐLÉÇͺñB6O<¦&DZÉÝ Ãdzmëò¬â,/‚žcªºùp‘ÕjÞÇ^ ]<è"«—jZðIÊ´W•ýðE•?Ýg¬|ºë6åml[!koæðØ»çê‡ùŒÞw„ïì…coýo{ïŸ_±—Èùgˆ¨œééÛ[ÿÛÞû¯VÛca(œâcaø¬ãä46x5PIë¶¾]$ÿŸoô–æ„róm§[J‡m!!s¿¹@HqmUÈÇ~p¥Ô5Zªcsg¬ª£µZ-À®/Mê 7VUi¸Æª²å6¾Ö.ãÒº­^³—ã)Œ0dÇP°€†:ÛnËxnQþ<£™t±Q†|¾‚l«2àpEAeµ³Öu-Oߘ¨~áwÕ‡1±I:*°šÎHBë¦4~/Á°Hè² +y=jA ]9³ùÎLîd©¦¼KÚâ2^'gQ¥…Ú[\£¼àX[P¤;Ýp¤.Ë + *B͇+®ùˆ¢+ôpÞzqoª…"ò}rÂ:ðäA¢‘vÕ-ÚóÈ…>ÖS8^køÀWoÞN®.œÆ‘ë­7l|ûHö.‡—´Š2¹ÔÁÓ¦(ñéÕ|M@8HН `\^É÷'à(eŒj,7<­Ï˜Çf¢v*>¯ØVÈ&Içu¦`ºdá9k C?œïV;™Ú@ôâíÔ{Å ,wжÏ;¦.˱KÝ +Ã%zíªb +¸)´†NÑÜ‘÷8S½ài_•»Å‚˜„rc+Ó˜R•êœ.±‘’Iš: +zµvÞlŸ›°.ÿ˜>¦î„É“'› ,qS(0išh2äWTBê²T4shµ£ðëDk mTœ-©ß¸<,¿H<‹ÄŽ¢½2|t~ñ.EÁÖ¹G4#†á7M®R‘ÅQˆ8J°t2RÏ­œ“¾J ²| .='WÄ `fdrfjFñ¦Œ¬XÛúJ±ñð›{Vm*ŽùŽa ±Ö¦~u„W&ZNýkðÅ'—5(½tÅàk4âe('6èèDøêœ¸l¹¡Ú’Lïþþö×/üööó¾¿}Ùº)#t&< ɦîëMž%TQ½Ì5“± ¨¥ryîp{ýCy•äXrãЫøUÐ<, ´ +F7ì^ô*ï¿íG)ÄAAg»Ì÷§Ç!'\§ܱžÅ +ª) Àp]õ®[0M„I#kE)˜…6ÎÙóKËàN:æÀŠ‚„“ŒIÇfÜø”`Ä踂áWŒC^Z‹ÙbQG„Á[ôè‚u4°!€;}\0N•9΋ G"%É‹’…áM µNJ&{x*}´¡{Oª4òµ†XRº*lÁWüȧ5ƒ²JÎ%¯sÆðeûQ¢aÒŽú-T?,í¸R®’—|ÔCºå¬­Yú©§¦P.ëKüçL[¾<ÞFeÀÎ]]HßNuž8IÇŠx›!à¼^lçßÐÇh+€)(©ëòá'æ“x~ˆªGî ¶ŠR‰êî»ÖØ +E¬§Ùc›ÀÄ)·4˜Õ¨û_ºA®Œ}ö¶Ýqlži»Ñ‘‚Mí£‚uD”’f³ñeÓL2Ø+sï<ïÀàA÷ý*†m”2}#_UÍð]Ž ÿ¦­==ä#í´”ÒëKK~¯eu:M>,Ö¡oW-ù"މLa¶Ö+ym&ÃÖ)Vr[ƒ] m0E•üg‹óê(æRh»ŒuÜpÅäêq\­ kR§Ü¤Òö„]o>ŠúI*v­ŽSr•UÔ(´Ž¹H +‹DuÆ•W*šUJC!Leˆ½åUVI´bpÌÑë +iãî÷ò¸ÂŒ@Äãý@©K´Ò€½&&[ÄX¬cÛi-D¯'#s5ªÑü¡Ð+Ę0Øn+ÔæzNÚÙ÷äEÂ*y ̓6˜Q¸„•{ Ñš10–R¾ªkÎHsp¶‹xs ‘Tu+K­îõ~C·lGÛë=FÍ{¬×¢¨¦Ò†¤„6L3 z@³ ¾^UI/aa‹Ãìž_?‚’gèѱ¬š¾OZƒpVõ‹î³£‡;Ŭ´DMPÖp¥¿¢]‡a†æÁ¬ÖŒý%ÎW†jiÒ!LÝçS®§óОŽ#p<àéð„lm‡±´÷vTY6óB£2\ô·2‰ä=¶ŽAz‰ézŠ›&¨•ÚíœVSkÔÙ.½˜ye·ØùC\E£­­¨Äš.ÇT1Pß7óŠç±È„þosôÎç>ŠˆÍÝnWt7 9Œx4òbJðC¡Vµwi&\U ø[ÄO• 95ň‡¿aƒDìñJ× †ݲçäu*âG‚ëjÀù±iµ¥„¦À, ‹Vº³4X‚S&©ðµžÊÀ†Sãöp/{TÒ‰x¡L–’üägG¬ÅºµSYŸaº´GÜ7•ZÑÖ{Çê¸âSNšaK)U¶m9†ˆ·4:LëãÑ}.Éšê0Vl¸å^H/- +Æ »žÃ„JoË9´ ‡)z¥l»BKÛïª@ôQ³»&ΖÍfC%ñŸ¿þwŠ"ög˜›ªÃK÷Â0KÁŸÏ_HϘàÒ½>Aå°çxÕ9bTqÁõ—týnΟY> jý æ\ëI›{4 ê´9¾’1š1KÒ(…8í3 .ç½÷p´g´5é¥a˜Òîömýîh˜æ£QéSú[iiüŒî~bî”l»nªâ¦ª„ÊÊ¢^G½Î" + Ýó2a‚âöÜš´$Ú~MÿU¨ŽÁù¾™7l4=&î’e¢w6… â“ù€Õ#Ñÿ蜊-:€Á¡Y¨À#ºQ¦Õ™ÑM ȺŽ"cO4´¼§ Ùó>ÉÇu1PÌbnT!´M 耂ží}"Um­™V¶ðÌR¤›:Úƒ•E΃Ž%£q´«Át`yAì;v&‚ˆ"•§9‹Ö¾‡G~,ÈmИ앗w²¶â&˜&ŒäX›'äG–B3c¦ »ÓI„ ãAKë+»y&[@pâôBk§…¡Ác\ÏZd!W‰mé±BíÈT»a´æ¦WyQk!—+·4ÿס12ŸxÒèM¼Å:£{ A vU”‰k’N±IëI+Ïh¥*¡õ„>j«ßÕí⊹ +CZS&ãï–‰„@Åh<Ö'™ b49–÷­—·| i¬°Á Š£“äââcADzrÑ’ª=ܯØþ ªÌØ…`ªìñ¶>æTErŒŒY +ý4Âyª ë -Åüû‡£j$YÑ a¸‹m¬“¶¯ìJQÙ5Ø®­–üX¹ì)R©å¦¶¸& ƒ›ï“Ÿ”T ©9ÓBœò3&µ`¡­«ÆG%µbä!U¹Ì‘q5ÐÔTÁH«Úb* ”@T*T_©SÒ9½3GªÐSØ,P¬ÕõØTµXÑ*;’@¥nŸ¤•,Ox¥]‚*­”.ÇAƒÅÀÅlŒÅß­·Ë¯ô/j7&´tZ¬Eäá4]“/Õ©•pé" ãfŒxÌUY_”gÈŸ7&Ú³_)F¯1Åä5¦˜¼Æ NcŠÑkL0áÕ˜0sÆ„_ƺӘÈÀwc"j¿SÈ^c +Ÿ_mƒ*?Ò³=QÃèOŒËãA{ñ¤Uÿü¾öZAs~P 72»Ô Û)ék8".8€nKpV•¬,i F».…ÿøõ¯ßþuŒÁ˰Û?ƒfǬ(qXyT¹¶µbŽ3§+•bŽc¡'±£¢i†˜ÒZ +¯d‡×Œ^¼Ö> +¯µ7Âkû¢0XÛ'¨Ž“ðÚêNh;Õv0© ȼօ,\EÉ:¼nÙãuK¯Qo^tx­ÐOyç×¼fÍë2^‰‚tx Ôá5øáðºT‡×(x‡×%y¼.Ñãu ¯áîÅkÀO/*¯a–ÃkF/^ëØŠ´~Pé¯jx͸áõ%Í 6ÒŒZ…ײÃkF/^k…×Úáµ}Q¬íTÇIxmu'´‚j;˜Td^ëB®"õ¯Q²¯KñxM)~ñ Ãk…~Êë¿æ5Ëh^#o^‰‚zpx Ôáu¯SwxÂqxŠÇë”=^§äñî^¼æüô¢rñ:U׌^¼Ö±UÒÑ㵎®ê Áç5ã†×—´08x¼¶> +¯d‡×Œ^¼Ö> +¯µ7Âkû¢bpðx­ã$¼¶:„ÚÅöàðÚ€Ìk]ÈÂU”¬Ãk8êðÁrxP½yMñ{óZ¡Ÿò:ä¯yÍ2š×ðàÍk2Qà€Ãk ¯á–Ãë0^“³o^Ã1‡×¡z¼Åã5ܽxÍøéEåâ5ÌrxÍèÅk[%=^ë芅^3nx}I3ƒ4£ÖGá5‚ìðšÑ‹×ÚGáµöFxm_kûÕq^[ m‡ Ú&•™×º…«øÈá5JÖáu¯aÌ›×^+tóÆõªx]¾#ºmüò-â§ÊÔ.‡Õ° 1Šø0pHL£mÔÙ&Ás½|ŒŒy¶jáÓhè¿mNïè„Ëðõñë¿ü÷ßÿOx•äX²ÛÀ«Ô +š‡¥·ñø¶—W>ƒëþ[¥”TªÝ»zQLŠc(ôﯿüëÇÇÏ|üýçŸ_O„(jTbÁ7Aê’eÌ:y¡ul­xìE\ÆÜȹ hA+é!sjGék¬yjµÑ1‚¢~X1ÄC*éç­¸ä&)Π A#ú^*1Ëù¡×.(8ÁM.“ð{nm€kôµq‹¶ºI†’K¡Šƒ&µ}BpŸ®Èd%Šï°8cè]³)…I.ƒRp—Â`/ á ïâg‰UxU__Í}fC!ߌrɳÜ@ÉyƒÂT}N‰›ò 1¼Qø&ägTô®ñvXÓôp¤x¢(W ¬Š|ƹtÆþõ.˵¦ ´¡ÉÜÄìad¨x)¥ÙRj³ç6hˆb ùxJ:¢À–ûl}vXn¿Ævû5Q´î>k ±MØ·_k²KcdªíÒ¦jÚg­I­)J'’GѦüœXÆÜŠgLó™`3ù\Ìx~3ÊÇ©[ƒ”¨5ovO{ÕnVg‡  ͆E>Ÿ2NqSxË·¼þkRPTRK;¹L¶Ú÷tUÔ9ïF™¬ÞÛQpb¶›.'b—òYI(¢P\d"¡\$Â9åó¤~'&²Ká…NFŸ‹b µ¾VáÇ|-h i0³òµ ¾”Ø _ËQ¾Ì+Š*Žð[£¹$Åâ(Ѷ ºÙIê/Ð.ù¸tWUŒŽ•îíg¢¸æ„È£'1Š7DHÐq1Åœ•!šc$-Šý· šH‹b»Â`R *FÓgI²\X¾­EâY'ˆUU-*ºEžv XÒ¢ø®á ´µ(èªt¶÷Rƒâ½Lôô ¨m€,E·¼Ü.¾å‚CQg× &jQ(¼UnŽÈE\‡ ™þ²FÕSsÁž§è¯|ëí›Ò) +öö-V‰¢\¤Øñ>×5&eKQ(_ T> +ª¨„ý‘¹¢ì#`pâQ<mcý¦He¿K˜Ã«F ´‡¨æ)zXo߯zû6‘ˆ@ÄÄ&³¶­Cq…þ2/ôAVã¹G§µ.O†! +yà»ùë…ÌÖ¶^?!‘‹YZ1‰×­4¦0èE·VŽq.’n­D¶ËE[+hðCTÑÚJúkK×Vl½Ëƒ tm-£Rº´R–”ò1 +Tƒâ7˜¶VPÜïmk_¶4Ö‡ÂTÇš–ªüu˜–)÷e}M1é·v, ŒÁEÇÊné)Àƒ™€,s·Ë*¨w‹ÓÓ“EÏÅ0Ïs҇Ѳ"b=ÌÙì¨L|Ààæ2Œnƒb{›»e¥(Í}›e¶fõ´"-S H.¡É<Êâ×óBåÒ‚ŽQÞ‡ÙÔv?"Ø/žqh `m£®mõ˜¢î‹ÍŒPªyö.¨FD¥ßÁ›.½;:;íAµþ™Ìº:­o‹žÖ4[ŠZßê…§ˆ|›¹Å¯š§%kE¹A E@Ž'ê‘ù¼ hÏqAäìƒ7[Jô-.} 4ç<õAxîK©"z©dŠ hu¼‚ÊÓú˜NÒh7×jZ¼¤—ÂÌ‚áIÝC¬›gdò‹h0pÙÛ‡lÍië{*¬~m[†çÆ/7;<éÐ2±ŸÃCÖ4<ŠÚìÔ GL¾M$¸Q]K‡†` Ûä2EÕCCƒ! 3(ËÊ–žE|Å1‡†4§f5¬øìÝVÎï-Vb-©œLˆ¤À{Và +µzhXAkN‡†·Ñ‡CÃJ®Ç£ñZƒ +ëæCÃJº1äSÃ6‡„Š;×Úá!»Í´]Úù˜Èaµ}ËíÓ̆<֜ˇ$”¬1­}V/ÔzÆE<´ Ôš D][E;í…ýÍèa½}ëíÛF‚‹<ÔØ»á‚Z1=?û©l@8ÇMÖT h¡@Ýy¹îy vU,Šë Œ§<ô¤fŒÃƒ'*ü¿+S3­L@Ü´2NTáGl‰vÕ#î*`Ôs¡šÔºÎé@ŸÄ¶Ò‘})µ€Ùcƒ«U$ ¹$<ö"e]Ýd[NpÎ[¿µn­C1Ô²µŽ†‹4Ëê©f¶“Ÿh‡m;lѽ&#m¼‚ƒ4ÚF€»²Ä|F‹Âü™©-WAýrÅv¦¸;ZÓˆwÏ&íÄOQ‡’[z¬…väBÕ'¯×†E—ŒgT"7ºÜe§­¢ê÷“‘™²ŒL«¬‚Éd„‡‰0"W¨Ï9EËðà„L¸À@«kÍöBM¹oê–{¬!ðñ¥%-@hïgD‚SF{È‹›¹yŽ{ 0Š,G' 1WÃjKÏ‚ê6å3I{é6Dð¯j»Ž¬ROÂ1Ɖ&Öï–ßÔ`ŽÁ´”æ@Á3¶©4¿ZZ‘ÍyqÏ»eˆâº˜îá4L¤ïOÅÉ6“ÒT¿™ÄæÛ1ø–2 @•˜·Ú-CZ×´å>^iRM´çá»IùèLœí„ +^Š?¦ì„ †˜ÆçÕð}H.–Ãt)[3#@K÷ž˜(J#Ñ:˾˜—V×€×ÿÒ˜¦óa ¢¿¡ï؉¾ÓUU§v¡o{¡oi웾텾텾å +{Ó7x¡odq¡o$ñ¦o¤y¡ï¼!Dc»¸ÓxÝ4k"Ø”l¢ÝôÍ™‘m¾Ñ7WLC¨7ú6x÷ì ïØnôŒ/ô ôBß\%êÃVÑ }æ)S™ÊÙ©¤åJ¨ü墩Tæï«‚{A¦á¦ª¹Ç‚»©j.ÎJŒ‡LiÝXnIk¼nùk"Ø·‰vÝ6&15Í7Umê¥!Ô›ª6}8;¶îŠ)w¾ß’­°q‚~n#±¶Õ/88ƒý†º‚ÿ-uEw¡®ÐoÔôB]¡Ý¨+Ôuýòjٱ춿2È6H[%Jòΰ۰m¤í¿˜ÞûóS¤^¤î ‚l· :ŸÅb*OÔ•òu%z¢®”¨ n>P×vÞ‘;»xÃݺ)ÆY°éÈY»©ËzfÎÖ'ê²;&ô'êr‰xÍÙE])Q—‹×1¡?Q—ËÃ1O]Û_K]次.8öB]Sêjø·Læ*¢ÁñòT8@ø+å/ÔØß±kx6µ® ©—h ‰WzŠBÝÇ÷†ºúRÔ‰ (ËÑþ0)ªÄŒ_ª¹ ¾Ž`jôë"$ïÔëQzë防 „¼®SégèDhåÒêu‡+ª¿h&t¸·(HVtõ6¶I£°TôðÇY.›»V`Ì£&‚Æ@í‡Ìh›¨y˜uQÀdC¯Ã¡ÊƒR?d»>Þ‘Ö9qy9yP{«y|P'4YÒiýSÑÖ[¤ëRÌ ú:—•bø_SAû) "LŠV:è:‹Z_Ÿ‚: æ¥0 rÖƒÒÏg`‚c±òx´aùke °o£TH°R +(¡D›¦4ç åØÕ}“R  õ™}JM¨NJíHºší„Ê6[@™)cm º5z+§ËŸÿ/"]—¯˜Â4h6Ág(6ôõ•%sÐdÔ„Êdh/UÝ7•òPUkP§¤óÅUÊ’rŽ/§U/„ôrz¡6 çæúƳ¸ xF8‚»§¯¸ÞZ =w¾öGé‰tet¾’.ÐÒz“®Lé‹teš[Ò5G™‹ á™G 9 }g é} ]Œ/¤ ôtÞ¤ È‘®9²]Î/¤kµ¤'Ò}È̘Ýõ"]¤ëÐ]Ëæã Ùt^IסöÖ›t¡½®®£pUˆ4Ð-}€.ÎXµ9ÐE¤‹IÌAر-=—¢WβÔ(A™€R·ýq“ ø³L‚!0ê§ž[„ ãÊütñ¨ ô>¾JN´ ©âwg± hF»¶åç™,´œ„¨l£{<®c'Œ£_J>ï¬yÃÓš;)“Gá7Õªút¨ 'DVÚ4š³­Ð“œ¨¢9 :–؈f^RQß²ÀbUy+úNA'Ж‚¿üþõýËŸøóï~ûñýc BÜÑDªh[ +i”»ÈGz,Ð86¤¡É"$`²V Š*-ã"D쿇91`L§ZЗò=Ï…hží»¢Øç ’¶®h•¯¸L4QF¼…ÐiY›rPP…TòiÌA}Àq©¹S–0‡*‡u¶ˆ] e¦Ô1°ŽµB0¤¢ôùR©Q‚Å¢÷ê‘;.ZIßgilÓÛ”a oÔ)ý°,$4­ºÛzE« ýWH*ö ã4þb3‰ð§Mzj;7TnŽ’ŒRÔ>F‹ÞŒtò®ˆ:Ã:å/Ætç’ë!Q¡sôц"gwÑ‘CÒ pD™hiYk\Å¡¥…†¤õ T‡ +š(Ëæ&•IÊÐ_‹}¯oÝ’êh‰€3mYÛêçThyVjÒ lxƒä^<»ÐJ1ù Û1íÂÇeh§ª&d¹k +t+ú²ùÔ…lQR¾L;¨Ï±Èt·†¾*A‹Eð9pEµ–pZ™÷B°§žç¾9'ú¡ó%‡šÈw¹ ÑøÐåYøô¥ËÍi“ëƒÚPœ|𮽰ñO‹Ú›1“b¨½Þ‰J]¥‹³ Xä2gI‰sŠ&±±¯ú$k„Ì_©zÎa4nªèÌæû6ÉŒ„]߈R¹QCùû{Ø¡rÇ¿„m,!Ö¦Ír߬õÒeETÈ·ã§+aƒë:pìIŠSƒº[æz½O¢~ZˆÞV‚Èâ{ŽÐøo¾7±2o™¨»lŽ.WwVG®£è™Â¾^Ä{À´¾Š+‰¾%WŠŸõWG0«šÓ¢&§°q-Ä1ù¢3gMÙÔ&n}ï-@Ñûä->¨»!lõÅ(fH·vñ– !ß ÁDϾ! ¡ñ»Oq¶R'(“oÁr½¢§vÎ÷§ÈìK§ ·M¦tõ¦Ì§&ŠÜaK½[BÐ^î–àŽ©›¹Þ@üÖ6çþ±³8_-a@ó½ÖyËÆuÛår°}pÙzÍìÈ8Zó|äºNòÝ0sI»Nšú²ß»{ͦ’êjw®˜×ÿe1 6‹Á_¿}}ÿøøòñÇû¿þüëûO{3À”JI +ÇwcsëÈÚþÁô€öLgævP U,h‚î™ ÒSÈC ]FJGˆFTæ‘í1Æ…AÊ÷Ôg4Ï9Ì%ue¥l[Ìœýó@#„dw–ÂÕ½®lŸ¶ÿߣ¢tqä>ÌÚ”Õ$-Ù`ãlž²ÂGvµ¯MÌEumPQéd +æo­êey±»EDFlÆ>-zÞw»Óûno Dqo* l,Dkw]ô|4 nì>¨õº8¢à_ÄVVr¾ÊسîeÞNÀ/ÇvÜ÷º³û^oÈÆa ’ÊÞkÒÖ9- ``UÖÖ;¡¨À—ËÂPXS“ï"ÙLš.@÷–$‹…~']´·$ Dº¨¡ö–tT<Ò±·$a—¨C­´%Ĺ—ê^“`jS®¸×$Ù£ržý±·œ³Øê +±¡YK[#4»¿õPû¬Ì­WÎzÌž(Æî+ð(p_GðÛò1§uuIÚ7ø’8 +ÜݼQ{ÇÙš¥RÊE¢@¡é´0!XòÊ/lýhΆ# Fì +ŒQ.Þ )JG¸5 saˆ4˜”BŠê:Æ‘£RüŒ)T߉‚‚6ÓÖYŒîû*­CÍ<5—ë‡{›`H:ñ«µ¸/àSôîâüÒv g{ƒ­Ž gâ4A•Œ&âÆ‘'Šj Ñp{U”³¡k5˜æÊ)‡«‘a$0_õ´Cã@øÎÃC%2ÜPy~žyžy¤'%d¢^á¯Am^HÊ£(›.…å¾=ôœ}vÂÆ}z€bl¤äÓ”˜"ûôÀŽªªmz`,ÂHݧ(Ñ|vì®Ô}v€v޽ùì$ ^éWŸíЈÕ'â„Æ¡MÌ-úôHl \ꞘßZ eÒË[Q­i¢Q!ÙÏÇBÅ«¥"$^¥«ûb“UªÏPŠM{Òäh,t¥·VêÉgG 補Mv€Âª>;p+£ÿ¯ôˆ%ûô%RemÓ´–4ѼFtçáDÆ¡U6ÛzÍa _²³P;?ÎúèçÇZ -Ç›³&?u¶Íïýì8«¦u÷îÔ Yë&¬×„5/ÊR+²¿Ù Î:Y=ߊР$å… +”;€–N"ŒL²èë²´æšó }]žŠœÎhž³9õâ¡{Jó&Ô¹ñ?7¥Tæ/Ù”þøúßï?}ÿåŸßýë‹Ô<ýcîJˆ¦lÚ¨#–L|* +Ѭ(ìÇR3Eq£uýܸœ–/µB÷ZX5!³ÄôÔe®ÊJ¬¥1«4Zr +(œT!ÀFD­:ê¦J|ÔA1Dá¹6„ÔÇQݵŽaµcœ¡†ËP’}¬W(D„s\Û†|üP8eYdš³A}*Å!í 4BÒñ¼7L!öЃ`C,™;#m¢-’XæÎ¢Õ¡C»Þ›$¥m­OtØ0ÐŽØH!( ±)gëkM´O^7¤¤¤´·¼-»Ó3¼èAbnÀÿ^-;–Ý6p?_ÑKgá†$J¤´ àÞ8€gòAßÿߺHéH¤î7ãj^žâ«D~·›ëÂÐ'‚ù€ôØMŠçÚ4ïOÌRŸûµöyÏÏý9ÉûžRT’ÞEø’SòG8U=ßc +O¬¥ +^‹^&<%þ0@ʨ¼ÀE9ïE‹/X¨š01õh ¦›‰s«Nö¬{ÛÜu3ñdâ]0¾ÛÔ¥àxõÙ:|fÙP…÷ŠÍJê3”R¾*‰_6iãòÍÆdËUIÜ öÅJªå|ÅÑa1lZC)­¯åöj¹9øZnº¡–;4_ˉë¥Þu'=ËòÕ"XçrªåbPUqäf‹ý¨f¾;¦> ÛmHØf’»Ù†B¼ÍŠ)P—aOQÑó¥²=÷@¥j`í<΃[qÂïwn€b¤š¼ÙÔ»½3†¸KI%¶#WipŽÑ±jU±Äe(š„cÒGö2ù•fË›/†³uuÛn}‰× ‡¬OÎ Ì7™èÒh÷THdÒ»¶¯‚Þç)nŽP´ˆ\\…·—³u98~}¾6ŸÙC6Tá½bVɆ£°ÚåUôbkbë\]r–ìMÔ¬k×gcMæîÈ–õâµ-øÆN“0Æ3*º€½ºó¦Æ Ë-_D*®—fVàSTŸwðesYb&m:Å{ȲÐç÷]Òx°1lý¼,ê½ÆïGV.7îûn®ºgÐý~7™û~´<¨÷¿?Y¡¡º-¿»¥_õÛNÈDý'¨¤Ôãú¥wåv½ç®ô} +·M¿ö?ÐIÅ®XßÿÇÖ•Üùõsu8¸âá0Km¦Óé,nƒÎ©¾½ ]ÑÚˆë¾CcŒ8ΰ®øwOQà$q ›G_á|GˆCBøÚÀ“nÊy½ç{ŒÝÓ<ÇmcÎRO;â;oó´«E‚ß—G=Ìj61 (DTl'>}ì®5Ĉª-PÈ.-4,‘î"Þå¯ÔêsØe¶—÷¨†û¾S×ÿ{í¡gd_{üçûâ+ûâSa *b´v3G/C[¶S©è6™iÞ?]i¬Y{ð—¡‘i­Ûž]‚ø—.ŸlÖ¸Óºð´ÎpMu/H0[áϸÂxÐ(ŽŽ1~ت„§-á½j†b´Iʤ&—ºPJ¥‡8,yhfÔ¥ÔÆËmï]ßQ W· vR(T ÅV9Ÿnw :ø•êô»ãÍd”s,â\\Um.kŠRV¶“`EKµ²ZxÓS7çö”Ø1pÍàØºÜ¸È\“)*d L°•ÏRÄÄÊûEó·)lŽ‚hXz=[ Ý®“Ù±õIØnCÂ6…ÜM7â½hVÌŽÝ¡Ún®Úƒ§ÍŠÙñ &v¨Y Ò’l vM)"Ú4·¹#bªÚ:ð¤í»¸Ì¶Ãz¸¹vS˜À£aÖõÇp¬zÍÖA ¹M58ÏeDñŽpYèã[+Öέ¼¼ÙÔû½9ÜÜ\Ž‹3b}¦Ñ{p çXDÛƒz¿7‡y¶¢»¤W¿¼<ê +(•¢z£ ý7Xæ˜Û&ʃâB 2úl »gâŰ5E…/·…?Žû€·=Õ?nÝ„íïûYˆ ¸\qsñÜA}¸\ 1]ÕAC[°¾ +©_iS4ÕÖ¢þè[y\ɼñwž»±þ&5Z¨µ °N‰úÂ*ª—ƒZzôäìü~'×}uÀñS›§„ ¶ælØ&ïÎ6¨Kã©$”Œ/[-TZ¶Ç¯Þ™,7ƒ®Ê–J$Ûõã+¨ úøÏÏ}®ö§BV7­PB¨Õ{]­Þ:Š-Gb½’“?GïñD:`è£þø¦/ +æc|$ü7>XtMä1Ôÿx}ûå_¿ÿû¿þöÿûöÛ›pðÅh†V‡˜Ž"gS“:U¢ <<Îe´~Ð/‡Vl«Ý<ªÚQðä‘ÕaMs%É„Hjì=ë0¢ÎE <6¾¸=G¿Ó­ (±ªâOT¸"ZE‹±ør,jJh…ãaÚZ„š +chNi.‰?‰î+DqP½ ¡w„_$Ì[oË/Àž‡} C<–„»@×fÖøá ‡D‰™DÏê< ¹,¡ï¤¹‰^!_ÊE`±šª ÂÐ-2/i‡&ý +(Vª1+¡hÆ‹ËÆ¡$¹©5ÔR§ÀW¿V¨ÆÐ°s|æÜE.S÷ã¸Üfl¸2n +úå¦@žb“>ñ÷š-ªíAñøÇöxÊLjøš¶µ›™o="aÉ ]ªàõ˜uìžÑ mú¢ŽÙÑÀäQâb§…¢ä¤ ©¢Òs˜+¬®ºf¾¦;ÄNòˆzÐÛúñ­ßW £hyÍÆ£K,ˆ~¿tÉãŽ÷FCFsɵÒõE•OäØòÉØ°°Ýɇn<µbã4mK;‡†ªoèg©º¡)*ün(þš­f8®êÈeújCOCå‚}f4÷k¬£¾l(ö_6sd¯4óK°Í ÅN^PdrÈl& x¦ºúýÚ¶Åÿ³úíÊ—e¡ ¡|‡n{“/8Þø¥¤Y¼ør‚Ð)X,àZ/œZ4E:îŽna‹y0·äÞúw%Iö¿¢i>Û~ÔNMСàØVEæåa?ÒÉ¡ÅE_í‰Ö¶PQ­<üV>dä6áò ’1OUûÜ“OKJÿȺ +?STÆqbûT äñ™j¥›X;aÃgYšù…?£-Ô™hÂCdPæÔ/SíL´U¿Ã:Q›Ž‹‹ØÑ8ð³gLјUiP?¬.:¬ +V¬ÊöE‘¦«:é!eª‹²  ëƒRë‘Ì¢w›M2î» Ç¯ÏØ¦à“{؆B¼×̤V×:¨H7ÂsB-±xçZflû¡¸TÉy6$Ææ>Šít>eØCÝCCzu–ˆgÒÛó0h<®·+g@©S¾r4ã‡b9KÏ—ò¼.U[wñ‡^ÒLdÝ ¤‡hl2Õ–¿Ø.·MŽ# +¿{½OSyÏ|”…Æ6´70²Æ`P#3hÿè;YU™Õý2Ì:*2îq¢ç¸Ëâ07…ˆðªVGIï–Š¼8|›°Ç—»®Ré(‡á +­dB™ŽC£ÝÝ Y4Í _‡BcrÍÖ·í)›Dê¼ü½YÓò73€Ã'?ÌÕˆÌñðn-— î­hJ—},f›³×ˆ`Íâ ËK‰Ìì¼8•2ù£@0€*!\ DÄúÈiâÿš‘[:™U³x®t€µÅšP¼±g–tðèè{:ŠN2=¼¥CÞPÖ{6s=$ºf´F®-!¨Erô-%€5 Åh þ”Úš5Öš<‹­”öÌIfÇTmpÅ!ÙÿÈI&~a„ui&V›Íä:¥B<,840ÆÒ‰‰ã‰9µ–ÔûŠzR3³öoÒvkÓëxd–Ì»¡)•p:‹Jm†$‰þ(YÍ”R[€Y”­@Ãö\è®ÿ04ôqœ¨Ìmž%‘õ* Aç¡Ì”¥¸}ÊsÖßj©ÈTÒ%Êi>—ª±h·–S(õ}…€B˜Ç5­p”á]êõ›<•‹TÈu1œ¦¦Ádè5\ßìÖ)Ì6P8rÙ–Ÿj'¤Ùv§^Ý/ê¦UìùXEAGÙYï~ÄU„5a¤ËÇ7c¬„¸}íÁãr<—ÖµöÂ}øÒZÖh­å9Ú 0yœï*© ëÖÞ²ö@á­ík”‹W}±.>ôÁ¾× &„«á®½w;±î½Ûáeïéڨᚄ·AW˜DLã ¯H]»QCóŒ»Àõ{‹Ê¥OsÈù:b‰GØZ9Áu‹ @NÒ¶Ï"-ûwÞ ²«dEãhNDZòc—]ÊêVK¨r­O ¨ÐÖ‡qéÛØ¥ˆ¿Âù{Èé]ˆ:!üIwµìXvÛÀý|E/“MCÔ[ÛFM6é˜À8A·Œ'ÿŸâÑ«Èvà…ûÔðJÅâpçáod¯¹»‘¼úqn6­ª*îIÇÖ<ÿœkBu|0QÝîš|ÎÕ\àDÉK{a²•¸)l.ÙL¹ÜQŽI¬vS°ÙrwÊ厵äM¡Á é›={DO¶âOQ8+Vü±-E—Î¥L#dË{»23±¿±ì¹ÔêY§½âAQOÎÔiÇvÇïr½¢xz~ÞMWÄË9ŠÞZ3BvXsÙP–> –²­p±»|#ðiªzò º`M¡Pž|ƒ†{HÐǺ5MC5S7C]·ÐSTbq¢0cÀ;<ˆ1"m‘ì» +J²(C×·'wä*†­ÖÜu9„ëËày{N¤i«7ã,7mí!,AJïI§xðÉ[ÆùÆ(ÅŠÚÝOP!©®ÍoZE3xÕì1xÅLJé›XñLTüø„6TJ³aE#åšiNN¼1f [j+Û”D¬ÚSÌFÓý‡4ÞïÕ7‰f6Ÿ'©ô/u³«D%' =vû cv޳Ė›fº bXgå0/Ø…Dr” 9,i=jbɸsX[ÈÜSs¬ub^¾éLµÃ. =p«5¶‚ú¨`*k€yéqJSV!ú¬”LÃYë T÷4XÞå¾””‡tö+¶0y(C”©*¸‘Å£Ät¸$‡RŠpùž:âÒ/ úÕ²x”R:]¦Oí=8b¿±º”ÀBK.3„¸á!0€æÓ(ôVÒ--ôÄrº¦2\@>ãŠâ*hÓª7™QM§œ£,•øôÚå[6¥ñvO%vR†Ÿ[×WÙß¡Ôlé[D«k¸å"Ë˧ÿ>ð&2‘Vø&hk8bii=‘BýxÀ’Û¢Äs[TÕ¿¹õx¦¬Õ?ß(ÔÐý×Ù)ϸãiWF^í£;ÖØ–2Bç‚GcÌÖn«ë(×Ä}×Ppêâ 4Eßر:—™2Ññ"BìaØ¿F³t¡[R“Òì»4¡1y¾Ð¶ Ã󶯇㠀`†áj.ôâÏ:vøh*u©‹Ã„_Ð Ä@u+k–/àX¤Û*ÂßA⥠ýÁØ›î©"Š•)x,_¨Ö(YÄhìhQÉc«“ütѯ€Ý#ÔUqOºÕ ŒÕŠ4[@¥íŠ;ÑÆÞ†¥ÌWÐ #Úbƒ+1º)P†¬"8chЮ°íA¶$’î±ÄBÇíõu&ྈÓt_ÏÄ@²i!ü‰Ýù6 ¾/×ÙÃKÅm–„Љ6¤Š"K©›#Ö¤Üì2“°#Ž.–Ö¬èŠašMÑR[4eÓËMtꥱs=Å“•ý éµzáZ—ßü ºÕ¾*4I->E%Äd¸÷ÎaØòJÑœRùl{Q:Ö{à=»F¨l;H…ž»‘q +öÑ­XI]ÏŸ›åhÑ®bè5,`5;KðlHbµ¡ñ`ß=?mé5%®1•Žz¨@ÁYmýÔ(w¹î©9ŠIØ(j©Ù‚lJ^Ã$À"³L¨ …òÅèÞ¶)OYzIVQ,¥ÕŠ2uI¢â´/¹;‹ò¼Éí×S‹Sœhï!´®¸ÍO£é6”Þ*XJYÊu󨢡xMX\Ð_ŽGSź e à2K¤ +†¶¸`óhÂâ3Bq2ƒL/Ò¡·Mé~îèëë +ñy‘‰ñy½ ò ó¨ÁWìÖ·-f,U!†Ä­kì_ Z¦ûÁ¦[‰çÔû ý„?Ö+£–H7< `kϸg"Áõ`»ô*ØjYìRr\±ÏZ´:ÁöÐú~)V:PÁàv€gØÓF'Æ­Xrm¦Æê†+t,GqCC7Å0†Ý Õƒ*žN¬_[!)*RÝFÅèUH|5¯Þ6Ê’9§yÕ³»« ­Í"\/MX‡-? +•)!]ݨb‰N—Êøp‡y,22j.0`diÑÅ‹BÉÞŒìÏtÓøÄt„ÓMx¦Ãe}<ƒÊ CA…_g¨îƒŒÑy<÷ Š™Žàº"·¾-×E”ZYºUí¢Îj²{uDÚËÚ îK€¦ø(æ ‚¸KSdK”Fçn%õÎ>p>¯§œÐ2ÎÝn +Ö¹OÒ©ÇÚHɃ$šz'NÙ–^v¥ L¼8ª3ÎH^íNñ§ˆ·ûq¬ÖJŒ=D£ø ݧŠhs¯Ö}’3Ñ–ÑÕ ÐœcrŽb‰è5^öÇw KÞ& ý·¬Ê;*(ôîÚ¬Žà ʳð( dKÍDçžý”\ཎröï£8ý@û\ùxTS¬Îe&„j2^¡Æf2FuK¶6'ö˜OXD \’óh—ž¥cí%~Vˆ×…yùþ4µÁÞÌ–x‰íu.[Eed«£®1(h;« i»´“±G”´Ûw§¢1øVW4d©¦,Øôö{å ¹@¥IîJ5o¢*§çSGP xò0ü„nÚ(cƒ¡Íi¦fº”Ⱦâ\Ü;êòf3†‚à<öÑ@³42¥PÞS/½‘œÍë¦ÉfÐblÎ貺ñœ;Ð i2gS´D]—³-§óžKQ¸>˜€qXg |Ùb|7^ì¸pp¸¨ž¯ö­ÀûGÏÁgˆ8kyÕœb(föJ½Å.ÍÌMHÐÙhˆÎZÔ%Ò×r„‹°-¯É¡Ø*ã¥w§ÈÈTi³E~ÇIï1ëÜEÿñå/o_Àup ¿ ø¯®ç`μâÿø ê5¾¼}|ùÓÛ·ïÿúõëûË×ïß¾þþòõן_þóþõÇ·Ÿ_~üòý¿/¿üöþí÷—¿½üóÛËOÿÛ_×?¾þùíß_~zûR³Õ¡( ×à"2©h%F½'ôú„Ý¢ Õ‘ºOÀÄ”…ÿËÉÙ2Êçz4 +5•מQšÀQÏù~ .ô¸kÄZÇòÚš…PËOÚÈO7PV‡Òï•Í× (6†ÕImñŸº•ChÕ–QÔªÀœ¼e„§–jkèF +×HØTY*ìmÐû5®ÔËQÑ, Aðn—¯‹Þ|IÑV1ÿxКu6™ê*Èw5ѰT­­ÙÄ®…øí6‰@3ÂUm‚£[]#窂fx,Ó"×VÇçšBt.Ö—¨ 8À×ß…û,ÎÖ Ä —KÏÅõÔX“šËåÞFN²ÔÐkË:‡5.u´ðpj*¶º––ºStd—Qmj€v)Þ[éP6äÄDPè¦k¶¨ +Ü$æÚ2Íc9/êÀèÉåå:»ó‚7ÕR=Eg-2Þy¡X™¼0žÑ@Ø'CŽ,ç¦hg÷< ±ôü˜ê +ºì1*‚h k€íÇ*êvû±zQL5óØ¢ÿú';¥²î=¡0›»:h5hZRN3.ÐÐîQL +½é¦(*tÛˆ¯«ÇP²²D–¾!A/Ö“­Ë”öÚ覼5ò?9ûa˶åXÓBQqO0 ‡ìl-Úîzí¤ÒQn¥Uâ·¢ÒÊ@ J–ç8c¹´½Ù¢F°Ü~'„Ô°ÂäLœOˆ=±êTiÑ4;ˆ +6ÖðŸè4FDš ºþZî‹è·äÐý¥½¾üíªY²s§û<Å,a3e˶l//o—œ x}Z>¶õ3·²™tùø“[R«%ks¸¹\Â{<eÊh"¬Ÿ¾|3—ÌNòM¥4/ƒ­Á¨´Õ+ªAÂlg˜eó¹-håT¦Ü=“ÛÜ`&·„ ƒ{¸É-(–Ïá$GÞ³ëVyëlÁ¬¶¼Uï¶mÝ–•Š€;û§dÔFq¬T\Å9‡®:Sô­BS yØË™ð7‡ŠZ¹ŠBìÞä +§ÈÙS…¸»{¹ÒpWú*wî`Uüuºçï»êjöw"+¦+ăÇì¿ 4%*!õ°ÔÜ3yUØRcrÃNÃbn²žô}ôF`rªÚœŠ%Ÿä{6 ¦p©Ô4Â÷Y’v +=ê^uouœï®,§‹gYÊä,¸†sm%ªœÐUŠ +¬¨Þ Ã6Fv N°ф“Xh+cí$‚ŽÞØ+ n,Ã!Ø É7iF“¦“´p›Ý•Þ:;ʳ$Æ=uÚ °Øx›çØÖŠý€\îÅ—RÝ'o•ˆ/¥3¥ïQ¹ ¦ŒÂZR šžV„a”· 7Ú'‚oI^kA’€¦ávù<†wØÄlPWÏ¥I5{=wèÕóó{+QÀ¸‡zN"EO13 ´Ãä™ÂÁ# )W’¼”‹wíGøWÙ+âĨΆ(µÀ@*T«e xMñd•»¨çéúVP$Ùw¸9jÔÀ\k„Ä Y2‘št + +žúðGYêa×™ÞÊX>–%w°TÔî öžu»÷:nŽ0Oì"[þ"ô—5Or©Õ_ÅWÒï^¬ç´Ÿz þF x¤:±Sö@@’– 5mÐßô…Fîª.ßÑ‘§€×Úñ«¾:ÄH±A-ɽ¾‚Â* èH©’'¹CL5pù/†@ ¥ÛÅar,] ]¿HZ0ùIÑH­Œ@azSNçHœ0UÏ;l+‚,^r­9$ØÌ§ÄU +õû‡Q È1Ê ËF ¥ÄHv¡”¶Fáë„éQc)Åßœýѽ˸J_ÌÙW’¢ZI7Îûž¸«$8ÚR‡ÛêpV•aa>¼ƶ%«eÅôÛ:ÔVŸaùX`ÅmÓYºZ êD%TÐR—ƒ8Vó+´Ï4S²OG (*¨=ï”IÄO½ÚùY£Foô¬™væ^ Ïø\ fÚ™XmJõ]&¥  `¯\Xé°*|’e>e9´T+±—k°2KXÌ`Ü!cÅv| +f¯Ã¸.`»Îî£àõFÊa-”(ûµLèʇu (Ñk™GÏ77˜A.èÀ'¼=“À +dÛûøõˆQ•-y*ze†"R®Ü,GN¥4\¯ +³é5÷L±1ànÌíôùRTFp±}[[…bçÙ wkhjK| áDBhZGð¨¿ñ ZfÝúSËaî~ Za®fDÏÚY¡÷âaPó>} –_÷äAŸeÓ¥XPºBvßgˆu©#F¡Of¯…â«ìVÛÅ·ra_Þ!ÉÎÍVxÂ\SôI@ûÚYÌÉŒžœs·ÌÍ +P¼kûíY üÜlVô¬•8½×fŒDÕ'Eƒ=IÁ“§¨ÄIt5m%¾I¹Dùœ(Œ­X—T›•2ñ‘qDú ASË”Ý犘Bä^Ñ›½šº¤ä³â§¢N_G>æñ AáóJw .4å`JÍY“s¯QnƒéC«aÁ¼K‹C@ØŽâ•ÀÐ寄ÅUw,¹GwŠ”§ú · ©í"éƒò[€ <†Ÿ]|”–¼!p–NŠàï…Ã\*-Õ;ÉQð·ÂÜÝjw„"Ë¥ÚÁ)‡!©ì_ö€–ÄÕ?¦‹xäð"’³Ÿñ˜(ÆóÎÓ°‚âK”ý›€æV‚Ï0gŒš{MÚlk¼§Üï«lW(¶ƒ.W®a |¸¾œ:ªa¹ñ¦i}Öc¡mUœ ­Œg°(K7k \k5‘w Ñ… u¯%:Ûå2ŒL<±†=õ‰ŽyrØËVM~_öRöH›©ÓëÒëòßí[ŒÌ : ¨ÝžS‚ž †0ºoD„iqÕ€Äÿ(8€?Ë’>[¹@áyB‡a_­†^”Õ¢·ýû[¹XBz?jr+hÕ¾pÒȱpïQ[·z«­[Àfõ{Ëá>ÉÖ­>ßÖ­Rå ×à»r ©®t±ßÌÄÉNUœn] +ˆ½ ,©‡±\° +Y¢"Eè¡ +° õR“Ûã¤rœÝ­,ÖñÇ‚öš‚?öèñÇæãåk…Î\¿=tdÞSüR.o˜l¦„ ³s +¼dùÔñ +ÖÇó #M„õX(JcËê}nEà“†g`ïT‡†¤&"Å>ÒN˜\TÙ%R¾ã€¦6É7V¬Æf²lsƒâøŠ´øÍ©`IDZJ÷Eý |X4÷¨m8½Õ6Ü ÀfKc=YÕ'Ùìß×Û~S¢B®?T+¥Žj¬<¸Í¸mƒ8·]¨¾B·«ºIŠ_ÆoÏ3ùª–sêA±m´’c»MWFoV°¯ômLZ€¶"ÞÞfEÚ´èµ6-‚Í‹†{òreÓ¢ï·yQ®|^ ~ØVV]^2äbrµî/‹V¬ImÐAÕSY¨ŒõŸaÖ™«oj€mï–öRЃŸ Ï´¢êÿnœçA¸{ìUÏ’j™Û’@œŸvÌÒ|æÈ¡˜DO¥ÕŸŸŠh®Q*j/u_w!8Òç%TAóºÿXhMÊèÈLJßRNÒx#¬™‚γêQ$xf·6¸±”‚kUÔÄ*îœB¤ÒªÇŒëhÕRkð@gòž Y³´ø&wÖ>¾?råБžš¹‘Û’!YÍ: 7¯ìƒýt&ì`¢~\ ØGòï!lZyúnŒç‘ Wúý¦ ÈŹÒ6§³,$rx×ÍãYM穇8cÛÂ`0Á:øº!ѸY¦ó—Àœ=<À‡uÒ!hK©:ÇâÀcXÌïa‘pÿ^"Ža´ANýÈ’'€«vO¤—6½ÔªœZ’,a}6Û÷ v4(î³Íì|"lR4j8»±[zøü)ËÂ'/Hø‡Ygi ²¹ÞÕ`JÖ_ŸŸ~÷Ëë˼ýå?¿¾ûï×—}yÿúóíå¯?¼½¿¼ÿxùó—_ÿùòóëß¾ýûýç—÷o?Þ^þ÷íýïßÞ^ðrjμùþúûÏÿøô§ÏŸà +ÑwHÕúHî•E×Åߢx@ið”ç{´mJý ¼ ´%x†gµ÷Æ„ì]¨26Ï(Æ =·Î¾0ÄbQÈÛH ÿ[hƒ K;¡BÚ’I `w-ƒ‚â³ch»–Ȩ测eôo4ͱ/ Ý.š$mE´Áu£P±½,íôôælC½o`îmRÎëi&KíöòâfùV€Žm”/| +¹šÛÒhù¶Üjp6Ë/G·”ÉáŒ(;ÅÄfç‘èfía1ó +¹«Wô…–Ús÷¯Ë²¦gÀs÷½€°Šë¨¡hÁßçBÏÚ´ÝkñŠ²í‡‰ÀŽFk+~;Ü p¶¾ÂTµî]Œ¬³6„&y[gm¸÷¬{Ú½×ÑpcpŒ}dw±žP}K¤]:Ó±Û`ò™ ]yõ«æS1w3‹ôõeÝñ>†äËÈäY_‰6ŧ‰äR«ë7Æ€£´Ïg:íY™¹}£z-‹_7(à ñʼëâż+ºž'䦥jÈ9Í9BĨÌ»ÎþŸî*¹²#‡a÷ ¦ŸVJŠÃi¸ó¿¨d=ßÚ°>‹+‚Í`®9»ßœô_ÓÄp\;ÑeXÖ,R|@ë˜k‘ýÀê qhì³n澪OñéšFYĽÅîY’³;бqر#ÔÆ×Ñß–ÑyŒÎ‹ ö¬åúSÓ‰ãy!XáˆÏy,x1W¼y‹‹ÇBtv¿Y3è¿<æŠP¦" S6 óqúÃMx‡¸­71C-ª m+†ò£ºÙÒql^2 +°ö"Ì.²«j\G /ÏÓìº".[I}^u&³*™¥‰aEES:¼zß"ÐÒãpó´åy9Üíÿ¾ÿô–«vÁd³I;Z)Í?¦d¢ÐS<**!§e3ì“MøI¦Ny_jø(þ<?J’¼Qؘ2ŒÛúö¿¢—»ªÁ„‡¸Ò´!¥}¢AøFKÚ⣀„ûvk&]ssº¾ž £JÞY¹ÑÞZ(”zж-ž_¶clˆ-ŸlÇJ×&’Ïcèä&¾½úRöÌŠ¢*O–… =½É÷ˆNEE¹€µ¡oÇ›ßßîFªBœôoÞ2Êf½Ó³ª‹©‡L« wÐO•ETx  0lá+Z;7q…Zú°z`‚aq¶Ë”§ôð Ý3Éóù>GRLÝ®rb^PÜ @ûÙQDÅAÙ:}vѹ±Ï·ìCÕÙëÖ[(‰²öÀ‹ê¾ãð¯I“©ûy“Õ목€¯Õ¬`Ö»/åqø~¾—Ó‘^àb ¸[´…ĦniZQ)[¿§ØÿyDoVI²U·Ýj‡é¹ËÃDA˜]‘‘”º6Ùá°ß‰ÆÊb¦žÆÔ…Œ³‘…;¦ÀpdHü¼<¨µê=ðž=I¨‡MNSêET¶¡†¿œgš!B=vªO<@°I·‡Šö“ñ·ë3 èâ½`n‘ÒÐÒÕa—ÙCÿá.×èÅ@݇»h”î„´$,±}šrâ^ŠPÝ,¤ ³>@З¾ä•^e>¦Hl‘¥‚’…[z`RÆ÷á­Mÿ}ïEüPEÀÔw+ŽñçGëÙ :=¼ôÇQ‚-ìäN@Ú“úç¿ +ÍŒ3£D"ÅÀu»MNCÔ¡J!mÍršGQœ%®ÑªÞ$­|Þ"´£· >Œ§ÑjÒCþR§q&:èÏñQþŠ–q6ÿYƒøðÏe³ý¹É›íÏE©hhs}Ò[ŽäÙ娟œ¡ç/g÷Z¥»§p²ÇÚœY¨â¸¸™]P­\§0cwï[ÚµkÒp\0ûfweŠLü *ŠÛÌ "£o¾ØÂDÅj߇´6ý÷½_o´µQ@KÖº{­úp¶Ó ‡[^óuˆŠ0kYµìŽˆI·ØïDS«»#êäyÄ…ÙZÏ®ø@ã°$ªhû½&s((¨ŸèæP¨ÐM•‹i€P9sŸQ›Ü§Ü%Ï껓Þ÷I.‘«” +‹ꥀn:J¾•CŠÕ§‘‡Û$— +„p&ìã*àN™M©º¬ˆÞ{´R‘”0´æ’‚,!‹K:JXKIî-*PÕ»Æ ã3ûF>WÕ}Ý®‚ªú1µ”>1²¸ãvàÃl–†¤Àöw¢q¯¢ç1¢èG1ßÂH¹}ÐÑ}T-…ì¥è»„Ï;Ê&Š-3;0Œ´¡ÐRXXÉázU{\"j 0Õ°†¥šþrX\c ­èïLÝKpë (*ßܱ´/ScUÂÉr R×~"ž"”(íüü_Ñżֱ}vPkÒ|Û8DM´!ÛYQÙšúŽÐX/ÝôåŠïî4PÿïÖ$.ò¿'òòP´ ç¥œ¡57/•RWPk¨’,/)ÚÏÅ5 ™d£ð¥Š¹ÎÈnÌë-·0@| Še¦—îá—0êá?Ó ¬´Éy OhÕ9åä„ OWyÈ |<’mvÍÓç„ äñºvœPþ ѹfYB¯…Lé…_Ðô­ ±9Xq+ [•ÿñ Í-%ˆš{é‡ö§8@‹x^$§Î¡Qq; )y),è§øEsl«Žûç¨öx=&+¸zÁÑP&¯sm“¶ÄäuBØnËÜ\ÙU”‚öâÖ +wrp¨ Å»› ˆ¦ûÄDD)Åå?‹¡¸—xB´+ËøÀ«ÅxF}€#N´¥º±|Oé•ÚWuoÅQŽ0t‰¦g?èõ;ÁÕšäíݱú½•¢§æ Z©¸Ž®!jC G.=#‡³n÷•œG³´Ö¥Ä‰]Þ[Tº‹,…ôì2»<¸Už¿ÜV@±–>oožœúó.LM{nF(*ZâIÏŠØ +HJ±½¢`FZ-!Ül`87ÅŠ¦Ëè'g—ÕHkâŸRT´I´ç=%¥Hf_häe¼¥Œ½Àhf)¤)_f<-i³ûF£t¥“VW›4d÷wbðw_[gèJW>é.çk©VAÜZi„} Þ”m½ícâ¥<€d{‰¦MEÖ¼ÞÂÂÙ Ã~Šb€ª=e…û¹™¼îrÎo`æåÍçüeËì@Æ)ç”ÛGG•“ñ·–{´‚¢-hi]Q»m<Üo½«,2MúÞr??»—‡þ²\ßí,WWÂ&î^(M~rÛ糩‚ ´æ¾/ÚnžÞSÖ±j2p0Ùri¹Æ‘ÕmoŠ‚£iÄÃ4 +z¦¡ÿø¦ ÌÆ­‘‹½IñJE èü9†®†¦3vb­ªxoK<ÞaÖ×–âÌB¤çP²«–^$"®^P¯¥âä(9¹&šÆ>4n½.ø/g¹•)“‚‚™—£0Þk„)ŸÆšDö2¹e/XGùÓø@›|ÿ½å@ž]“ÊëƒIåõ×ä/ê§÷ Zõ½_T±¯mÄ.dí×û爫ìX5I¸˜„}“;“®"¼‰SjŠöœR+Páè(§Ôí½X¥IІð›`ÕÞÆ®»qŒºDu¨„ÌŠ¯¡oÍÚ¼m•âѰù/8 ãÜ'(˜¢aŽEýZˆsGЭ©(F³ bí’1-û(+?£$ÉMµL,·>·¼ŠøWuC úÓq„ý^üdíÅq„HŸ!:RŽÞ,ÖN‹Õ±îCmÌiõÉé p·7çÈY^¢ðÈ©9á¦Ý¸&ˆÁ`±å‰ƒöÆáÐØØ/¢fÖý 㞡Dz$#`q"œ¢ä·Ú¤¬i¯Ò“à$ÃÆi4uTW͹õð c€.Åk¬.Úã—®o ÁÑ;‡Üp©ÇLo“©Ðš&­ÇÚ$%M2ä\Ñ÷} -‘³KDH«ìÖ„E@äÜ. +ý°:ï^˯ã¢Ý‡ý\ôo¬Õå]0ÕÁVÄbL¶f J¸m¹sJ(Ršl“Lm’ Uç¨öàÞª½=èÀ,CMÑK¼ãz#ˆfâì4cŽ"È0JÏxúxŽj§î­Úÿk‰•‹é 4âÏ£;°Ãâ"i‰/avPªã÷ aNï³±DLåÆl04LŸžª}%Óã\Œ©–ÙÀ +lî&]3‘(‚ÇÒ  ¡9Â#z©Ä$Ê!÷{£I{”3³X,3õ3¾€‘ùõ®$™âù9ÐÓºàcy¥4¯ÝsQ"ZD8·´‹LUúWP¦ÍDS«ƒ\Yt'ÔÞ°­HVsµâТú^oôMŠ¡MÖ†˜µa™ ÇA +6O" Ñ 9‹²X„gEj¢ÈU߯_¿HU oûøW_Rµý#µ #·bh}}ùå××Ç¿¾}~{ÿ|üöùùó·ï?¾}þ÷㯟?~üùóó?òÿÿýùý÷¿>àfy¿_ÿøúÇ—~ýR hÁ^q ²÷¤º#hC($lżFØh¡ó÷¨Z¸.Œy´§;¹Q{«}_Ü._EŽø£SCvT“GUm‹Ýºô!Ä +‹~=ƒí’$yNA[«YŸEê±^ªî* +sÚ€´TÒ²µ¼J ‘µµ ÃRnÎVè:榱i¥ÒÙÙÊXTEËœet[æeî}ÆË¢O[iY¹¿ïËrn¨iIãS”\Qvo'pÖš]LV° ê|ÂiEšÌœÍ[Ýš{Q%²ÉÆ_¡Ë'mr…Âàââ~çǵ˜4xRXóÐX PDµ6Iš4×Á×ʈæœöAªbú[+&ø ƒÛ4(vÇ(OèÔóF3s²^L}0YØ›[îÝUQT·ªˆ+ MðöQ×ZÉëÙÌ7¾™Û.ú!&Qt7Bä„9ˆôë…\ºvȃä|:Gµû÷V©kŽê±Ödà™­™E›îÖ°œ*%»Pªzãü^Gã¬<Ö”Bí­öýaUA)×1`umM¡¶žür0€¨Œ1RTÀ€ÆÔ“ë öö;yPgUÎÔ½*½×U ×Z›ëÙ¬­‚E!²‡0J§ä.„e±ût•ÊhÞL ­—æ\ºgµûçZ©kŽê6ÖÄÿ™«‘C +ª®;î=Pîq¡YL“;µÅsÒúnµQ<ß.µDK `“‹8•Åzm£©Ö°Ÿ,?/øIœáJ«'êQX³æ2N ¬I¦"b‰¡yNn?æ~àíGLC¬ê­É®A¼ÁOÝ”‡âÐ/êR„2£¾ÊfBaè„2cµ„¼ÖfXêDÐXæPP“=ƒ5QLŽd!ÉÑÛ–L |çÐÐʺá8l,;K+‹®š‹®Sô(VJä™Duä +¡cÖk¥Ä6µ@k%vƒ%Ëï(ŸâÁwK¹»bQÑ‚² iØ„Ø&øÈiŠ·þ¶åœ""¸Êyœ*0¹q˜‚x“»µ(øQšE™—>4¡ØxD „ôqV±3u/¸'ñ:{mP™R–ª¬¦$QòÍu±Ž‘'“Ð6ˆJ-«9®½÷¬öíÞ«ãpmÐ1Ó‘±Ž¨‰X×¶Ÿ-‡ˆGüš’m-DÙUkDM„¹îU €rÈÕŠ›–“ À’ãZΧ°ú4uy¾mù,Žº—L Eù(j2º)^iKx3CÄlräVÀÔ«×h!`Á&¯ç€–×d8óhneÌ•U Tw¯‚U÷¡âH”²AõÛ5—–OTV÷Ì+÷U•¨Pþïù8F&P,ƒÐFøîËX¥ÎÙq_–ÂB3¹˜ê£×Ø—â1k_cu¨VÔE8‘¡o p“×lÞE%`åäK}“!ÌÅ‚v‰=Š!cìîZìõ²eÞnWÒÃR6ÞoãQkØW¼?ʽH­ +J5ÍåO»¼¡±ZhT‰ýùnA¹çÒg/ªnõï;»Ž½oƒ.?›ˆZÅ»Ÿ€èËE×·àƒ\{ “j¦. m‰…ñ ’šÈ ‚”퉫‚"ê™ Mhœ“çv™>{;RßË/p0oÂmtm¨*唪 ´°Plß–ºcu3!T\^ç ;'жø¡91¨‹+Sѧ!ÝV$R¶&Wü JFFa™¾=6w-˜Zãj‹ÿ‚OCGí«oSû¤L +Ÿs÷ÛœƒrÌÔ²«E…Þe(("XÍ”#d¼§æ©<o(ƒa‚ÄËy‹ˆ{ +1'²*KïÛb)¨fއ¸è°3tï•`®¹¹++öHàèÝAÿR¬¶”ÕQ•†{«J˜2@%W™© +(Šƒ])WÑfeuȽÕYf3h²ï{M¸üZ›pùµFMWCàåRC9hmì)^lä§ÐFÕQ H9JA´§ì vÄ>áXØn…ÒÃTZFîoãRÀè¤1P4Á F–`kìfóóC°æ ŠÃ=à¹óùº³JO…./¡¯àU‹¶ß€2‡fGAvcK¡úƆ¢n1xŽ@ 툓 ½—º¸:[T}ɾ³¡ÀvJ³åR}g«·ªÆ•]ÕÙŠƒêlÅ7;¯T•«¨Ö>±2­­à½õÓZTqŸíUTcÃãݪ§+$@ ïʹÂ'—4»-bDÜÍ"&w=«eT¬]Ó]¥ƒ‹šàÆk“×8&¡ëêòõ|]mu¢Uü§´GÙyK’$ŽÎì=V½3Í‹ãþmbŸ’}ÍÈ;õÛ¾CyqËvÅkTöÞ‹•‚rçì†&¤9ÕÝœò«•âä¨pJëÓöS3X©KÜz³9ÚÃmu&‘1{¸\‘O"¾Swƒ(EÌÛyÆè·Ð¬ëÈÒvIª¬»ÉªÐ•%ÂÿeÏ #²¯{’_÷ÔYÝ ·ó +È×´?vïѲ¨gšÇÈ·)JžZ #NTc2âÔ`[qÚ?ßKÐ(BÑ?½ÀËæý뎕®\….!¹±ÓÝBÆgýB–³€²rr4öûR?ðmw-×ÑwÌ"/ëSU£ÐÓ‘ŒóÓdò»6› +@ǦSq3àáó×W&õqŸú‡U6Í·5!… -Ç ÅÑ£±nÏÎoÃÉ/æÐ‰ÔƉ[EŽÏç ]ß &ƒ`Žà„»##ÈÏVÜ‘u ­ñðM£gi g{R‡ðªÉiBZ»žÃäU“g±œûˆ ˆ©úƒUÐBl’.÷¹òäzð1/ñÕÚâÆ"L™¬Éç1+\¸IN†:¦ù£9oƒ‘Ô¯Mäˆj=GÍäMÀØZšc¼CR±}Ê*?v~üaÄ,¹ƒþíåÏ_^¢\E²(þãåæÀ£Îõ‰ÁWÆ¿¾<_þô—Çëï_ßûåíçן¾}ýù÷Ÿ>ßÿóöúï¿~¾ýúõõóÛë?Þ^ÿûþùËû×W‘ÝÏçë·¾~þúûÛëoïÿ{{üðå_/ýòRÔw ói•œ UBÍ«4,ZQFi¡ÇBCÉí·P |{zÚªg á.Ç\—9ÝÄyL üÉŽÞ?!¸@ä%Ó@¡±b•¯¥QÞ£¸iìÄ$U1‹“;”´Ooûš„‚ŽËshÔ´–/´ðXÖ²H{^;hD'ÔTœ,óJY“m?QìØÊ åZ4q'ˆä¼Jbù{Ê΃â|©_nüˆ¡ÈéqÅámhØ6v¶ŽÎy«¿wÞ*T,#ɲ>“´ —2ìÊ7´TT ^¦†6/tþ=ãôi iS3¸wÕ6í×-'íëÂ,û*w^À‚h=Ž·5aÌÅåk——omãÞÆ¥æGÊch8´åB¶K¸¢r+QI +5¾JA¦^_(•>ª1>%ºívš• ýžÂÅ,Ãrœ'ÑDcê õzÅt|SUCºº!ð1(ºñ1U@Q®wÀVf[ÒVÞÒeæõnššID§5³&ÌhÖ¹*{ˆ3x@)w7£<¥-ᣩw÷öO™Uq> ¶ìÿÐduúŽ[:Õ8‡¸„ÔÝ[ Î\‰œÝ.Í»îÂCÅ„´:¶0†qZcç©Â1«v(èà^tM|Æf#þW'¥š¡êŸÅ’fprÃ¥9,hôê cá +šúýéj«žÁ`†Ó£¦¾Ôɪ09Rê<”g8hJª[GAnŸ<£«"4„H®=pöزM„zzr¦¬ªô*ª[™ã—.1ÜT˜ŸÙ=EãbufQùiŽ3M¥@*[¶ü(‹kõTÇà˜Õñ:tl7[“Ÿ°‘F9”ÚœR›Âs ¸¹J7bJÐ)»Ò—»°æf×!Ô—œ]"r‰±9»$N°Ù†´«åðÕ«EyaV‹?<›j ëç@«\‡#zÜ ºå¶¶p \œI‹¡º—ÕV=Ïìœ( +µ^Ë­….œk=ôÆc«l °QrÙ^`WU"®V Úh+€óÝÙäuˆª½wÐïñÕYR^¨ +Ä©•Ál$p¬Õ: Ûd4C{“ž9 °ß—AªÍ;ІQ×l† zeSY¸ò[ðu}þ¼Ô¨¶êxfÊÛƒZ?ä² .2rAöÑ›z@áØKÕ‹«"ƒ<ï•p½Å´Bg:9ˆ¯EÑq5"ç2tfÄŒJÓ½~ Ú*‘K›DÌ"îV H­³ã¥×fË«ÂJqYÝål8]uE*sš«9ö¼¾uP̤XSq£åPÊþVç0ÕÁ¾ì¯NµÛ½å” äTÐ9›ìNPႼWÞq¼ˆ =êŸÍPÐ͸ °SðcÇaŽCÏê@ÊuÈäE¦\‡¥G{ +ÚûÔ'“ +ŒšÓ”ÙA<Ê͆ `îS«WÙìpÕ;~™·'Jç«pí›À…Qõú –,üv…dHíZÄžf!(•©ßŽoðŒkœh/iƒ8æ"o¥Ü^ž¦­žQª¨ü*¶*¿‚b·ÖæÞЏ.kn»(½:g¼æÀR ßóVyvÌê \LÀîÁA‡ŒÍP7Ú ]Dó:æôÄÉ"…ÑnZD*ÌZ†ˆë•œRÉP5`䔊 -§>²È"&ÛAº +“ˆ(³ÔPt 3à ü]]}Ê ®xÃósÐeò˜Û#Ä`†ƒ`yv¦bËõŸ×õqy4OÕlŸö¸‹oÕß×d)Ë3¡‡õšÀY c~  ÍÊ"ìjµkBÀÿÓ]í:våF0Ÿ¯Ph'²ùN o¸‘ôd@†®{7ñ×»Šä!»ûîB0SÃCö³ºZFsc"CZ¢h†Ë P‘h]°F=s‚(¢Í˜PàúûKy| +Õ5-EuùŽ€ ©O5¦ +è(Ï:ñL -=%2ô_B Û=-\=õó4$èºwÄ–"$!~»t›“¼•"E!º«é{/æn–°J, »è5ÁÇÎOk©Ïð@Ð yë3 )K³Ä!ŠM»ûN•Z÷ §œ Ñ.ѱÐVG–õÔÙËzêÚð) ÅaMÐy»æê_×t=¨0ÜÁ¦"f`Ý÷¬Icƒé]€ 4a1»ÁÑÒOÌ!H+Ó±%-V>Ç,@TŽ yj¬œ­ež^¹iš€«“ñ3Ôº’s/Uçû£gïkªŽ7ÐPªÕôTÜ£ ÷• ÷!¦!y$ïî³&ÜMŒqAŠQR1(œè"Šß})‹ [kj©à¥Ñ_Ãô‰6¯Ê¤Cu‚ŠîaÇÃu +Udw¾WTlÇéð¬Dœ&Z±ÅÙÉO?%V›=&}jïf½GP¡§Ñqòd$7-7Úp…o^|}7¼L1Ú&µßUÌ€ÏÖ¦¿$#±fìÁÞ+ß_÷V)Ï.jÙ3`º”êµR@ž[y×J5‹ÕJ37ƒ©™ ­^^1F°Çؽ‚(ŒKv¸$È»ÜlÑ&èÖÑÝ4'Xóœo·¢nÄp>y¹@]0>G4¯«bRv*W‰BuïÁtÏ÷/Á0*‘­†d/h¢ c{ ÙæF£g€$Vð¼Û‹ˆÖÞÝP€‡6ݕў·„sÅ5»ŽgîJw# Н¸(bÇÊ{©U-S\/j+áÚ«™_yñhdœ²ô”\§o^ÅôÚ„0R_uŸsðïá&xÛhÑ©Dòí^1³cî +‡&6Š`­Þ•Ͻ¹MúZSØ–uÖÞŽObil´–¾ÇÊÛOí›ÊŒŒ¥x¦ZaO\`Au—·°ÚK]Êè’B{³× »‘ ±{ŸuEÿäŒX©¾<à½òýuo•RõՄýnŒêôÖ»$­¸2ŠŽpl+Øbî:ˆØÁǾQ€–š¶<¸×6VÂ|L÷‹þ‰½ºø¯F!a—›ÊM%PynP*”=Q>?¹0òêi{ì¢úJó¶1HåeCÖI¬•¥­ÕTQVÐÒÍôüW똨Ó׌Qc_?¤³ÅÛ^L¡6+_#Úò$lC¯ƒ>Xô!a{ÃC‚õ'´´Eî9kP}¯·aÙV ¿WpQ}OOÛ ˆC_¹‰YfÅDôgu=Î ZMÀêŸUV½Ý|Å®8ÖCIJî ÉšO]Û]2Ö‡&Ó0³˜`j£X>Ó·‘J ò·r}DÑò&ûY¸wMÕëÕÓ7ƒ‚½4v÷=÷ÃÒ 4´‚áè¯ûö¹ò²€õ“v/ ’Ï6Ÿ@Ê—o¯¿üýó˯?þýãõûëŸßÿñÛïÿùþå¿?þ÷ý | I^¯¿~û×Ç/ß>2ãLq1™0騔ĤÛ/h·’e¢tÍ[³dºž ù=²¨b‘Â9:oÎf,¯c£÷^„2¢O0¸«Gé½G2 T–—ÊZ  ƒ¹¹[)e£×ĩΪ2Ö¢*rd ˜³ìWª¼EÁÆKcd)±—AîË<‰Sø°-0<0K®‚9ž+ÁÐcX¹šTÖȡɋȒu´¥ø”/ªŒa9DŽUÀJ,~CÃû!Šëxº„â·ÓæëGêÐNb[6@§4øs‚Y +}:–(èÃu,´ë'˜Ôu,ŸBqh«+£µJÛôt,f5¶,ß±}:ö~;–ØNû“OBP}Ý4,MGY¦ËÔÓÅQݨS1Ò›:(¨ïUãYöѽ“‚Ge¯*'ÜÁ$»¸¡žBuÜ +)Ž·tž÷×V§½Ö%,­Èf÷ BìÉü‰þÐ&ýŸîjÙ­ì6‚{ù‡»´7|?¶„¬ìE¬e6JF°åÌ•’ÆßŸj’‡¬æÑØ€1®áåiVwWWß\6]@-‹ø¯ä h’s’Z¦q(ž6âYç²PïóvåŠt}‘ÊêS®[¨˜p1ÚXAýXaŸ1±©6n°ë†G¨Nþ$ç°¦ y+Ÿ}ÛÉk¦úÎËò7þt9ŽßÏ®‘E-¯g¢ ðt}¡|¤Dé CˆÍQ¥¬Ð­kÑ⨨W°#-ô$J =F Úè¢Jµá£ÔQ)ÁòRMï4R#lHà¦F²j˜“EÑà£+&¯@½muI)À‘}0ºý:’#Ö$ 9_µ )t +Ý@’„¯ywL·YÝ@‹M9kÊå UÉ’,Qù$K‹,•l09&îï±X5ì:¥!² ¥ [ˆX¤è:/@1Šžå‚Fç‡7<Ì€Çb°ìhß hì›-¹KAs:ÜåaD%.Ç®G$6xÆpê %¶Í¥ >ÞéB†%.n5"œhŒ[}k‘u3:u#`ZŽÉ̱bht÷Á—Ú«É%l߇ˆy›ìÂê3mºM8Ðuí™-~ë‘ï…¨ÅÚJŸëã$!údÀ`.Aû9FI¡°M` —6û@vŒz8çÙ²Žä¥Ðòÿ%Ƹ ”ì<ñœuãŠUÍ W…¿Zt®€VcüVÞà+‡ÆÏ …îlŽ‹ në« ŸEW”<Ðu¯“zÙš•EèÌ–ƒ®¤=V tòÖ@ ÙzÀáw¦ª¢£ðÒ{€ˆÙÞŸð¥Ñs¬£Zæÿ«ZÁöc\1Ní$›SINï$ +œÚ¢~?µEvIñ_ûÑ ®KÏßßââ&t¾»ÌK·ñ­ŒcRŽ.¿m±–¶ïËvA[9 EÛAa}R +z>ŒÉw]Š<ãgEסŸÄ9²•ì]¹ètJ(ü¢©Sèdyý|fPm³{?¸P¾T}CâLÐ|'t¬Íë} QÁ  +â1ŽQú®f1SNOt~Ç‘†.Îà/‡$#l˜US ^8­ÑC ø†5¼lp Zò4Ê÷î1ôØ :­C  W9¬(–`Oh.b8®À­¡Òô84Õ66a ¢±¾G…Ó. 5]£{{¨ƒË¿ÒÈKÂ?^O‚HY«ceþêwlm|E¿<ÜY<$Ê4ø7]s#M ×f£9þôp»ûéþzùõùåùöývy|~»üñøíb®Îxw»ýüð×Ýýà +ðª®É‚a?”P€&h§¼;ÀµÙÜVÓ’ÙÈ ä§mFXË€>«š «KóU¢®ëhÿ…O‘§‡(âÕÌ™ +ÕƒaáH]ê1-EÔ÷Ź·¤bÅXÇ{Ëv„Ç6ÖÕµ;UŒý(Ö¿)tE€Ó0³¥›0~™XTßŒÇ 54ã«â5W‹€Ëö6|Ûˆ¡VGQ?VEõ2{•í³lyX¨z]C_÷LMÝ̪xe43ËAMbf9Z°àº™U'‹ÜµWÍ'ŒiôGñR6ÕÙ0R<0†nKí0XëþËÈn”bÿ ‡&;—)MÞ|*d150} +0õÊÂɦ0ÀâÛ·oå!O‚ÖÚdÛÈ"dýDíQ¾A–ÉB•r'½Œ=HâÂr#{Ò™½‹i Çf—TÎçb¸„:Àè¬Õ™çÀ¿blm݃æ[=ÍvtfƼo1ÀÇZ7:sf «v< *ÙfA¥ƒóRüÆu¾á¶1lÕ„E9Õ-7pñ!'Ùå€Úø”' ݃Ûüõ­Fífi…îŭ݃†ŠQçÆ÷²-íf¢ ñúbÝvŸÆùÎy(”¯¡G¡‹®KèAimùM¶Á ÜF8=ØsÓƒ…ù + ðÁÆöDL‚økú¬®]qèÑ*µ …ÓÎRíu¹×yÛ—z‘‰£®#ˆ/õb¸sÝ®Å9¦+‡¿5¦+‡ …¦ëá®§QzÄøçæù,V"›[ÒèZ/V¡ …4G“·pe§òǨ[©Xg‰º—[!0¹+ZNÄ9i=™FJ:W-dðA¾[k21¶xgÖÍ‚¥¯šª±°D ¤º¢€6¤®qnBÄå͆ÄX-e¸/Þ” !˜˜¿SÉè¤dô`’2 )T›·Ä¯À””ÁiAÑÇÈ‹°¦^H›V‹ïŵìãF¡³¹é*)±®M]}t‚|ëA‹ÌÈÖdŒÕ½id‹ÍÛXÁŸ+üeÖ¹02sÛ×(’nÓÓF5)—Ùâ·ú¥³TëëZj Š€ZhKÌл(?@±§†Dx×¢ºhº‘u@1©ò,PTi²úat–H {‰0йárÎk«^Í=‚p5©1AqÙ@ú÷5¶1gUh‚–ªí“¯hò|اu£&bùQöIP<"ö®‚ýMô¥ûMøTì5i;ºØåkדbÜÕt»Ò+˜·]ôV?hñÑÀ.bô  vË87+63˜®0X<³©óU´÷¨èèÆaõ鯡ôf1¼l§ÈûF$Pß>q^ +JàèžÃ² +êrض'_²(•Õ[ÐÜD&Î.+À÷鑾Â%ÖéeÌúbY_„iÖ¾¼4£Šö‚.ufcšÑ,~Ð>+¨7Ã.ÖÝ5»nטv …¶3隢Ùö%Añ©V©«ÔÚ1ؘu<ß§á}.õ¸½›”æpLúŠ–Y‡ów»]d–µ$¾Öû½ÅJ(— +E1]ùW(ÿÓxØÁì bV<>+a“MÐ_7°Æn!©Ì¦"dåªS›ä&o©MUBÝŒ )ôr¦Üf|Í&x@cŒV›U#¡:f'­R3yŸ[C“IÃUBƒ‡!ÒŠ.hõy">»Pºv`ìˆø¦P6)¨%Ôw JË€ysÒ²˜PF'-ê|ŸÎÄ|ŒÈÝIÌ€Úö®ŠÈ‚;‰ÐObFgIÌè^3ŠúŠâ¥¾¢·Q_¤f‹1%f ¦êY *ž€õ«"L6µO€¹ÅMИúx#*:)lSXvÇÔ^'A¸ØHŠ´¶r Ò UE ë¸x¦& A^ƒë<^¼b9͵nñÂø<æë:ë$mi›xŸ0¦ÑÅKÉ TeÃ#I¥+8&TŸÑ(Jjn +¥Âô­QbÑ 4Õ¬.6ÂÌI—%°cÜÊ‘ùèü&÷ïŠñÊ¢ñ/:w@«9 8lŠÞž†¡l µo”=/­ÖGŸÅ¬)¹¡|¯“¬UW¡*{.‹ÉÞâ…Ú´÷вõ†+2Dê&I@k©{w€‡`üÞŸp¦ÑÏã¥ê™˜ª¬¥ÆÁÜ롽´¤aøqglŽõó92€ÚêÓéèçç¯ïQQEª^k1jê]ß·Æ¢‰'ÇNXn‹Ù׆6f±[”} z‹% ¥}T[y&þ»]‹¬ãwÛÀ ôñRz¨òƒ-+@Ɇm¢+pr¾~=s¨†¸s…ÒêÛ* ÊË©GÊ„3(z%¡J#&Ó­u¥;ù„)§øÊßsâþM­sH²v +šƒó=ŠTRk"Æ7¬éìàýMöIK£FùÞ=†›Grâ(W³é±a¹<HGûiT‚.>ºÍè"hþ|A¿ßýòpgÅþ£Œ/ÿ¦kn‡n×a¦»ËÃíî§ÿ¾~}ýþvùç¿îï»üçõãÏËûó—§÷Ë÷÷ç—?.>]¾=~|<½½\¾½½þ¿úr½üöz¹=¾ÿïòü~ùöôv{Æßù÷?.¯/íü‡@/_/oOïןþº»¸«H$âļ¬ JLž ¹m€rØŠPôûþŸî*9²dÇaUHÔFÙñÝèòÿ:€6’Ù=uª‡PJ\A߬v+ éØXÀá˜ý…þ]†G±; àgœk ú]`Õr¥Þ¡ÁYÌv°Â@bWÀ6ÐÖ¢r€Éí¢£a¢ycS–ÉãŒGb‘¼é?ÛÁ: z ê¼râ\£Pô 9–Ùš¨G~ˆ388&ì•"¬On>!dèÏÔ7øB†©Ên0×#öúI·!Ý£ÂÁ„mÊ÷Ò7¹Ûá5ÀŠy)ÁJp[’jˆ`Y{ª/m,}ýŠ`Eåkh&€P› §ë&;éºÉîtÝd¯»™'æŒK¶¹íÚɳûàß„ø6ödç ÀcSÊn!OŽÉ—‡ÆŸj`T`©¤ÑCš ~ùÓŠ ²§ÕýõËCãx_Mëò°6ÊZŸ;éò`wº<Øë.fçɃ9ãò`n»ÂíìÓÀ @ÿš>öú±Ò€`eV4cRC¸=´”†`ÒÃ/bÂÅç;f2ªz’–¼ák®Þl¼;ó¹ðÂŒy TeÑ““|:ã~ìTFŽú‚VÌ®%Pp»ëwŒl ¯ÕÓæ‹I ¾,?©V ]—Ñ%½äþ3nO«8o×ÿzðVÄ;¾*ñ—¨dËGüÌkÑô)áʘ¾‡K…ä(þw™šƒø#–ê¹ò&%XtÓB°U âÏc7)îcK ŸÉk—uÉ!Ø1 zH,Gžø£¶AŸ¨LñºÇÍ^~Bš`4itB¿IèªY‚ÝBëb—p~ÍÓ~wâĆÙ%†ì–ìgãnRxi2 ŒY-¾ÐD¯îõÆÚP‡úñòëÁ÷6Yjg…Û㘂ӣ/¡pÃ7 ÓZýp v%dõF`»g¼°Òn¾b£Àÿ0ðÇ€àp½–þNá'†@[Úè CDv½ŠyÄUÇ”Á‚ šËt&ÛÎ9{Ý‚p t±êP“E¶Z|ÇÏ­ºý}ú“Q§#¾ŒE¢–¨ÏÝIïÍ»Óûý÷rQ\am ¼¨{‰yäUGv£Ž¨Ï JK%Fœ²rà‚{#”tóìí]´»žŠÞ:XÖ#÷;þÊÓ¤ÉÎc;h¬h7^ž6Rtº¼˜+–—F3 Hý +à¢cï„ ¹æ3ð—´)Gé\–Uqÿ¢içÀ¼å¾±ü ÉiJ ±lëè›»ÎÈòÀR+"½E²¶Ö#Ë;ì±¼}ìXAx}Xžd\DöAË%K}¥BfÞ_¾R±èš‡ÈEx*b$¹«Nɦ¨‰Í9cv |Ù<„‹~—Ã9 +ÝÑòGå +åÜÃz÷A¢¥-maÂÂYë‹ÉûÞ= |~‡AAŒïÉÚ½þ1Ê9i Ÿ~j×$^”„‹%V%43´A|4#ý‰üˆÎ=hì$Æp:ÓÇî,¶ÐHÿ |Væ©)+¡›„öÚ7¿·¡ Ez +CPS‹á8 +½GÿŠPÿaãU„’‚ªìZ5ûÅ" +™A†¦زh$П †úq3!õ ¾ƒ ¥T¢Ø ¯_+¬LígÝ™y–\,Vaw XÆéÆ´ß{“X‹¶-°ží‰Qè©xÛ•4#ƒyƒ^B¥ æÁÇaö¹ã0¾ƒ~Ãhê^­‡Át仨¼ƒ× r³øxëÄ©m}µ*ALÝVE‚³œíêƒûç·x¹Œ Ì¢--Â*ø$ ˜vN<7mßA7•íÆrì'X•ÚwЛ7¾ã‹ê*îxîþÆðr0ÇF׃.ÝöN]ÇR4¹HãHèPɺW;Ç5„†ç ‘úÄFÿyx“£üÂÖHs+˜Wp%¥8CÁDòÛãÞѸ)Uÿ»Í‘œ¢qŸéyÝï +Žà]rNÅácZ:CÅÁެsï=·âsƒÕМ9á +`iMBÅCÎЊ|e¸§Ø;˜Q…mëVWqPÍHKQSØ¿ ,:öÔ¸Z¼7z–ÂâI¬ä7ÔÉ?Jk1)5*Ì%Ä ˆÄF»%/)ÚAÛ¹ÜFŠö´K¢ÙxRmŽ8N4—'Zp'|ÊÓ€À‡øÕSõZ‰¶VêÐÜÒ?Z‰ Öϸé(øõ9ˆò)Q+õ†òQÝ:ÍBûÀ×”l;‰"]kŽÂ?=bÇÞÅÕQCÂðßsÁÎ Vm›ñÆOhô5îÄøü +Ʋ€«§ñvm3Í@†Öº TYž¡¦°‘(ÉÏמt¡´+É~ã<[ƒ˜….LÜqšŒÐIq¯G«Û ói•®»Ñ‹O‡ØIïλÓ;þ÷! +\±¨7h(+rÜ€0péÕ¹©¡ŒëÖàhe¬§Kzevæ¡y(¡Éö +à³Ï>w Åÿ×Á‹ù?o/“Ò„Ï,¸Kã¿ Ky樌 &Aº5¼C]]EÍo¢»|ŸP°CK6ž6XyÖ)<‚Ö)èNšhtw^¾ö»¶3 ]å=W¬ða÷©ê_hì °›Ù_‡Ýºi”γî5í.,ªBÚ ¸"Pý-R!TíÔÏì†ìõ'˜{")ÌB` A¤s.ÕTQÎ[WxµˆûÜÖ¾Sq}}p¦וeºV'k)ï{ÙŸZ¼èø1ƒvä¯*¾BÛ„Å‚ú +%(£î.¼o·‰úšUå¾MC´†&j“"©í6¿5JPÒºÏj”`†êkԴĺ;­~Üë–Zg£¥ÖyóRK š¹4_¦.@¾Nl…êÀW©Ðåû¥z¹MP×UNðÊèðùeºÆ5¾÷xÒþÎÏë£L&;ð?pÿ(=ƒìëÕ|S¡[uÙØl£B%Ù¼>€a–•¶â&Yº"'†ùž»3žŽPvÒF—]i3νmÙ6]Y Ê订JÙ¢Önä²°ŠÊ?ÝyàS½vÒ»óîôŽ¿Ç}„BWh±¨üì*ɱë8‚{ž‚K{óQsVmøâ[°h÷Š€¯ïÈš2ãIZ°;º^UŽ‘‘£¶5±;Ö„YSMkv«äKL¥óVX±#!¬#餻kh‘šë£{}'Ö*Ý.ÂÔigåxO«+•fGe+Ajƒ[V׉cI *vÏï +ö1ѰÑgkºÔ܃ŽìF“ü +ÆZ +iþkâîx1bzð£nS9I#&µÈŒ›ðXÞÛ W3¯YTu­ÃI­Î&ªTån+KBžAóçÔ„óp`fÄ0"áP7i~Þ5ûv‘À~  •2À.e¹r‹¤DÈÎ ¬Ÿ=Â\I8˜˜Ù‰LÉE¥l¯+/@VBt þ–½Ü¨¹ix*—@”w¢Í¦ª˜.1ñTˆñnS!‘A°ƒÒ,ôG’EWqÄȇ¯â°ÏMqèC( !ÄIY[ã¡8ÔöTJ¾£BŽÑ%Ô *ó7b7/L(úº +|B­J +‘¦¬·ÜRP'½Õshù éYr)"zÝyÁ{gmÅéäüï B¾%RQ×ÆÜ ,…'VÝ’îTL£*T0 ƒ×A±ýñJæNºábw: +»» ™•;æŠËöõÙQ˜‡rkðn((ØжÓlÒ[sö:@Èe&}]0(°ºQÉc€%¥ñ˜ Q•¶ Ž ÂËÖNºÙ`wºÀD?ï2qGU·$Xž s +ö7¬ +«Án2èC[TÇ¢ç*,«jx#­`‰»çN„ ± Yà)RK”æ_ÒwÀ*ÁÓ¬b¹ìOÉ CU꽃A†§*U¹Ïª,i‹ÐCU +"ÌBÅ«¦×`»£: »V£Ÿl¹ðø°(blÅ©b-—BBzl`>€$²¥CP©tœ¬Ét¦lA²ÚÃBvÁCQfàê6ûÝ–=4¬ž‹ô(­–S|TÄ|ð¼ º¯J@ µâGvVs{ôqX"Ç:UÓéYQ]™kN¥kK™« d|â:núäÔ”Ö¿ +f89ûÊv^5¿†ºÇ]A˜™»là +äzª-sÚUáVŽùdz¦!hÈ]D9ö±ûn|…ÚêãÝÓè>Œþà}:‚Öã²ç>ðAX=u1J3T¥¤RL=–¦—WRŠAËpþ ®ðw®k€èa¥!pÃ|¤H,x ìZ·ËúþN>Ô:Cy7Û÷„r™T ¢žÅƒXTW%ØÇ§Qj2ÇŸ» ¿‘^&s\è:¦r|-«üpÂ;ÔY‘5k¹~L¨åYÏ»øðPÌ)cœ2} ™«±†WLut_Ž +†2{>Î0{L•˜r¸†¤Wc©’šæ1†¥›Üæ„ë}Ý2º$À D‡PñàeŒâDM€/‰= ʶV©Þû;•….uóÆÍ„&“ +Z'ö\9`ÚO}Gñ6º®-˜âTŽ4>„Ÿs+|Û1Ñž…‰I©mÏ [Pµ°f·â.kŽ KLy+ •e]ÉÈï’ü΀©-)E{ô–nS¢q5 b»Œ¥:O °U¨Ì~W«¦À%OT)cÑ)âÜôU•U¥K#u“TWVu +Ö"¬ÿŒ9/ðNì +9dQ| !ê"ãÒYsç4v‘ѧÚsÒÆƒWÚœ°´Øàæ Ö! +¼€)ˆ²(®.ðolT5Q´V+¬J@£®89’U°¤öhl½4«?üŽÙôŸºkt©®Àˆep­ GQ+˜$?f·tù´;Ï:F¯»|^]:ÍK(°^ÂÂÎ2çÂcÏPÔœ22ð2¼.%¬…õŽ%,¨¥B3ÄawØøïX˜'¹òÁƒÙ…yùa£CÍð¨‰xpRP2”'%C1ª€´b;àß™’€Õ±—¤[Ú¥òh„»µÉ.'ÊeZæh –õ:ç²Ñ°šR!V2\ÓÂà± Õƒ•ðrˆ‰YI9[—±FÝ«·Ùß¶+@È!¦¥DVÁÖ;UbÆI<,¬—5ÝÎ1l˜KdQ¥ "FdØI¯³o Oø]!w\/$cwèüÚŒ½ !/Ý·„ïÓÒ4Úcܧ²èÍáCâé™-?¦Èµñ©`M:z0ÜA–v£ –=mQ5û\ô¢‰¤ÓA ’8‡±¿Q÷Œ¹\ù§Eµ†¦yOzoîÞïû¸…qFKÅ{M\2>c€{\ž +öØŠ×bYš˜£°×¹¸(z:U°ÖʃTÁÞ[¡EÌ*¹ó=)),·Ï˜SÎÒKMZ×õÙŒ\>;Oü©ë³ /¿‡9x£Ô_•\­h °sÈ7â•.óÙït×dî]—TGãéh}’@|³Ø¹ý†Þû¿Œo²2±8ª#c<žEÙìÙ{ê<{÷ìùˆÍz¯Ñ.ˈqN~Ü䌎M÷µý›»y_â´Ï’ð6ô”Ö¥¯‚µç”ëxœ´a¯`jciŠÆTeOû?®y†¨ÐÎ¥ûÖËI¡ôx ¹–˜ÃÎh—¶Z4k—t–Qªx„`úB̺ç©þ*#ñuØ0üz`k“€\{,c®’®‘ t-oŸ;ư‡ ô•ÉÈ"—`cu¼KüAÃ>jY•ÛëcÏQ!w9BŸ#,¸+ ê/•†•Ó÷[í'1ô¢Ù‰µÙÁÎGȼÐô +•—z|W¶4;£®žâèÅ:•˜‘pžÇºä”ð$Ðy)ìmñÒ%@1:‰`⺙øØ—w—™‰~™Å¯X[0—!¥ZññhzÅöÐYE®}8ÅÖ*o²v§›Çöº%ËLtYU¥Y“ĦTFã 1¶zá§‹¦ŸEˆôÞœ½Û÷e +£F"¢;Ž;«à 7u¥ ±™¡@‰‘V‚î±ÀR¬öÌKAl6ä›;hA°-ZîéUgŸ…?©– …´µb#DXhlÐAb¥ Z‹–;é¼±;ßö¸…qEÄz7{Þ xJÈC]v%^!…»x%¥FOò¬ªTøLJÁI/´dâ܃0 +ÿeºñ,mö®MgÞòL}ˆ¼ ™«6E~ýôË—OÚõU•EÀÿí%³ìRǸcþ´øòþô·_¿üë·ï¯þ÷óÏïŸûùÏß?ÿøíßßþüùãëÏoßÿøü¿o?ÿöÇgLÎTßoœùùõãõ÷/ÿùô/Ÿ&‰ä¸®¬Ràß{‚uRoÒ­©ÍáKà@öÒ÷瘑pªl°]1'/èï|¼®þ·ïQb~¾˜±MÜ6DŽ_CJœÖúžÖ!´°±U‡‚±({dôüSš¶¨ŒÒ@ +YK‚u‚šV™ »Š,#èç :”QÙ`œ´—µtV—´ˆG‡ö@h\i|yØ]bw"ze§ß^÷!½vÞˆx|œ¯ïøˆOsàöÁAtŠ]¹ç³3î‡6âk‰o¸9L]ëˆ&䡌¢Ã\,#ã‚`›®Œ[s1Mo X¦hél*BòY–ç„]uú§mÕ5;xïå=äX² I7( ŽÑçÙáue“¡ðãZ7͸Ôñù àR/7/ßáoN3"ë•«f&¨ÅVX*…Û%.ÐbªÐšÆh)V6åÝÙ Xb^ Ôºïb?ƹaæIž·40 NÔ«6W‰ïÏ]5Ìa .>¹@ça}:…Ló,ÊpTàò 0CGGÊs6êîvÒå9!Mb¢ˆ •–z烮Áö•®—q¼¼\ëÀv“Â1^ãŸÁ6Ív:å ¦ªèBø+XEØt²åÌæºwŒbìôœ}Ò½{ßé"´¬S,o?)ꜜ‘°ˆÉUS·qä 2Q›ÝšÈ@í‘õxAlÐå¬Ç‹Å-ù$b“DŽ;{¥ucÜ.ËOß.Ûyâ~l°Ð1= “ 3m6,mhQ•ÿvu @tCÑóä݇åÃ!'çÈÅ:¡R§Ä]Ãhk¬èÆÄÄf;F¾„ÿ +3¶ªò8ˆ‹¦LÛ'1![Š”`HR4ø G}F¶÷TeØ%RÊÀ2RçŠEÙ b°mÈæ¦eòäʰ l ©û„xleνr ͎Ϊ|pcîÂÃòáà ’ó¹›h&‰úˆ k¡ªÏü±Zž='Ha>ˆðÆC(Âd/û¬š»· ìØ,hßÉи¢S^Ü’m hG)hdvœÄï +øNК ZÛͽAÉòÔÕ’sŸ^UœhjfÈÅÖ’4?µ L­fÚÁ Äæ&Íok +¶µ>½÷:wÒy¿îôï\Ö}D¦“>p@@çª| ÉÔI¾û>ˆÔ§^Ù–^sc»¸úÇ\7Ò«oÓã­©Ìr´•¥s[vw }}·•= +S'îÊÃöá’k–5êqRÍ4?”¢$ñ4ÿp _[0e 6FÖ‹­OÕª2v™®©$ãÙ¥ò¡:º`!‘Žà<ƒÒi+4LG»Rd*W ë +…ûB·š,ÃN¾l=¥¬·øšY¯v Ô î¥QóºCIÙÈ1ëКiÔ¦¤6Á{æX :(¹ã`La€¹ïœ‹>¿xê¾Ò›÷®nŸØU·¸ÄLÀ‰™8Žb€×„jl\cÐn©§Þ¶„| ° B1’ezC…¶ [Ë<ˆ ™¦3‘C²ÝpȽôŒƒ½ŒrÊ]Ö…б2µæ…Ùª¿ ®Â¿>ÎÏ5ǼÌ«{ŠO¦uzºâ¶råϳÌl#Å; `âž²iaõ—™–/]r3ŽÇ5ù¯‰YüuÌL>¹Àuå;Û‡K®jÈ•mÛk‰{ T¶pø†Xf爯ô¤HÍ®¶[|0õË$ÊÙžºW9÷ý&—º‰ò8ã?=äÀ©¤r; ö¨Èì«Ù LÉmwÝbuí¡÷Üsb¡u Ù²­„®st›uõµÝs±é5Wí';!…HØÎÔ2)è@”R:•@²¥)'¯Œäd`PE=:ºHªXÏÆ¨ÙñPë)j¶ÔB²Ò0i¥’äBƒ>×p Ù•0€Žšwî¸:XMG8²ØØæ +÷ñæŠafh +ÇáfÍêÈÂ\µ%Ò:¶|é••¢ "‹A¯j\å `TP™ªbž&š2B’¨6 :„—Å}pËô}£ïÊeÛÇ}yé3dk "“¥wöô¾2[É6¶­6*ûxŸó¹/¤W_–)<ï9â‹ £#kJ=Pô9 )È=` En¬†7È÷B$—:¤?‚˜âl‚œíÞwäXr$ Ñ3F©úZüä`_ û,ÑþRöjÜ ¬N‹'Ð ,1gaEh˜JL}€EÚd [Ù],ÍëqMl5nVI³6o5n`lqʼ[Žßoñk€(Uƒ¶¢Â´Õ@y3Wb½†Íž– nȵ”ˆÿ[á­Èälmz ‰e’ÙÈ:9yz˜”«}Á!ε\‚y1!À5 +µ@©gïî“®1ÖŽò·uŸÄÛMÊöýßBëåø"üy€W„˜¶êêtÅ’šÊk$v~ IËô\{àÁ³e7-œ#Ĩ¡šªð•h˜¹Ôøß 7)¶|„ýDwöx&ü.հ탚eò4¢kJåƒÆSF|üô#Fü…Ÿ>ôÛyŠ=ä-ú¼‰W¢¢p)îd¢WíÕ@ŒjJ(ö.l_5Ás%£æZ潫Û'rR¸$©º5…  š–î5ToO=rž–x64sÏ¥p호®•œ7^§JYáØÞ¸„˜„×È ˆ¨ØŸ;Q°Cøx&…7…râ1È{â~h¾)5öŠ÷f€ÌÉÕož¦ñÛ÷v€”v°@¼GYÒð£^w.ûÁ‚Ó§ý¥c!Û.ë/À:e£µ}r§w]y²·MÙ½½¤ìÞï¡ü‚CÒÕËÏWŒ¶9/v8}b¹EŽÅkã‡iTGùÔSÎc€y²í~lö;g_%†è¥{ú7û'é'wpÓÝºÑ ²mÚÅi;é"±Xäp­xë$À¤Ò6»X˜•DÕÍ­`¹¹Oº÷¬;ýË—u +Ñ»`ÎCPäÙ_³,ÄÐÐc^†6TúíYRDDáèÕ^ëk[†tÚ-”XŒ$}ì`›+ãPã-]`¾Ä ›{mSôôQCÎDrbyQj{uƒ•¯å2ÊcêeëºË4®/cÿ¢N/Ë!•BÕºCA l¶Ë3¤o½cQûÐ*c‡ºèçïŸ?/ bÀ¶ïÍl…+´áéóãÃ_ÿùãñòýëë—·ÿþ|yúã÷/¯¯O¿½<½¾üûÛo¯/ÏOŸ¾þ|yùþôöãéåíëïO?ÿñöóËÛ·ߟþ÷íí÷oߟ¬zý‡Þ¾¼>ÿíó>üãóØ@lí¥A@ *%*Ä…(2Åè›_ß¿~hGª›;·±öñÇýõ'Àh¨d«I®Üÿº#3ΠMÁøû΢ÚÉ$²­J“· û?ÛUreIŽÃ\i2Ÿj³cÜèòÿ:€V0ªOùIIÜ fä +,ïrí h…Fb3ë–È<2 9¼s¥!M?ŸèHª¼1ÜÌŒ„3WBKqæ=&EiÅÉ¡ wɾû0›6}ï><ý‚³@üv-EíÙôÂÆpf› ÓCçëY™†f‘¬_‚(BÞG0-úÄÁ¾,C¥1öƒ ͣ椺2L9XG´¼ Kìo5”|Å=âÔ+&ο×e°—våæ«ó«–ÄØ`Å:9tœ2i±\‡rí³˜åYcØ~E½#§VœûÔÚó®zå¹mº±–™#UƒRÛï%v”ZQ ÉFöM%cÈqûä +±h:1H o$³ 2¿„Ü´€õôñZ)ì»°Hå +ä–×Þ}“!“£?¯]ìè×¾+šÑwÉ’» ¼!®îEl +ÆõA5CØSñbìÃUð_þPÌë¶Füí|n• Æáð4·†J&ùOªìý¢uLXv<ÑzCq½ÇéG\7Ù¯ús#[kC®!ºÓ +9™&Ó{ÊÚ;õ9´¦D¦jÕ_PÎâX‹å£Ö׊}U [©õ圚ÁÆ0÷ÊÏ& +æ±~J›Tæd•â±À(Ý0 ç;—i©F>½NÝÖk¤ÎÚ6í&JUAŠÀ©ú‹¬ºÑœyàN=Nì¹Ï.6ê.(ž’ï00 ÛlNWŒfŽ¹Î¾ë€!Á³N½÷¬›„$•˜€qù–Ü"p!ØžÑiqwãý[n¼gQÔÑ«o +ë`2(!Hˆh"«×ù}AÅÎiq?°„&Ù>r ûù¯Ãž$ø±ÒAÒå"üÈMÖô l­Ãš±ù%~£&s>PK#º¨ãÒÂN¹=†““l8×IÒÜWÁ×öRw•Sf’&t•æ|HÒÔ’Þ“&ï5qßK$éÌaQ‹X³_õ¯œ˜yïwœgÅiW;qî_1˜‘ èü‘YFdBEOÖ +¬Z˜Õq• `6!¹ž¨wîž*ÖA€Fr#t.U›áÅÂGµ™û÷Ëõ°Ò28FÐëb-3ÓÒ‘†Ú"þ +Õb«ÈÑ[NÀÀ êGlCr™Ók"ÿbË¢:H„Ífn dˆ!lÓc¡†™ •ŒyÌœXþ]¬ë¼$VÊjðO³!ÃOâlb@éÒöU-l¥Ö—æJ¯…òL¬`¤”ÀE¥’òš/÷‡í¹ÁÄ7"˜LŸ«:yfDzgËôR“ËôEÕB ZÈÖL4ä²J€êaNì<­ ˆaøYX‚Ðf[_p[ýNËZ8úͤî!bE©p­è/ͧ ‘?©P1YØÿU ªÇO&T²Ý• §ì¼ba«4?¼ê}ØnóÁPBÆÉh ”²¹¡’ÜŒÍÇ­ µì9øïmbÈyTì½Z‰[ +Ù“¹ZÁuÖ«ê®+ȳäܨ"ÈÉ)·ÅÔ†s›šz^U—<ŸM’Z—þ@ ©P$cº‰}ÞôÒê'ý“ËôEÕB’{#[Kr\Á“båñÙ,1ÐņÛ,v.C·µé‘³PP!?4Ô ¥š€Âd‘2p"ø¡¹êe‘€ÃÈåšÜZD,äèvN¬–XþŠ®¦OLb{¯{¤ó=ûæþS/8$úÇÎǃŸ7०þ꣰ݳ¾œ¯AÚ +vÎÓÆdwÄF¯=鳿 +z= DÕ\ïH˜ÏÃ&öäú/)L“ûôå°ß\_N;0§a½ Í2´Ò$I +®nš3Û9QûöÕŸ‰ tœ©Ø87¡mD܆ŒÐbKû‹õù‰0Ü0¯½5¹@ñÚ½¼,3p¦DÅ cch;-+ìØB¡Žø‘Î5NºX½sþ_Ñ["ltPRõ<Ô·nÁE¢Ö\M@k3¸ Ò/,§Cû +00“NðÛ/äàí+àcõáä&·ù7½&’ÛÁ \^êäž7‘åQ\‡ˆ\ìŽzËQ³ŒX ‡³î»Ä +Y=hð‹\š!X™¥N¬Yq£ˆXO‹»¤ß¹¡®Q8þ{WRìꎱÌS·%C%¯?nþoÞŽFsù9iøGžüI¤ê«£Ü7¤¯]ç9ÉýöZvÿ™¦õì@-ÜBzÚ®÷þ¨P˜ÓF=Š‚j1vçyTOYù~"T@b¦°F’Xo>Ù‚ïGWÃi ¤ÀFö:,z ‹fL}#2#”#ÔºI(¨¦u«1b½²w†m IÒ ùs‚6tL&‘¦xFNv5âé,±N¹fç`µ·]•>WÌS×î³a>¸?\Áb3Ú¤¬"„šUSÅÀnãb÷A@=ù¶\Cê‘Cª†~+m+¤ÂÖÜ&ò°à [¥ù¡{H©$¥¡ß‹!W1¯jL:Èe4pµ»Tð¢&I¼,…’4Q+<Ö,$Mh`mDåƒO,þZ­5ëm¯A¼G%[®ra ¬[ÍIl+ù éœz©Ui«à¨ÈŠ?ñÅF`C7°ƒl7ƒAWðþ®u\*²k6°˜_ârcl™U½,ä\”«^+ÙW2Þeq›e¢ËM `V™ëRÌ“b¾g¥žñ.¤È<_Eƒc»4TŽñ¬iÓ¨Q桃ëWÓ†NœV~â'V¬¨d¯€÷‚¹v(›°Kb1±f$¡®Ü#«÷:)£ûªøu)%Î'Q‹>¡ÄÀÍFý.ÃÆeÖ“{“+n›œæéväÔ†sŸÚzÞU—lM÷‘Bçê"Üǡ!ë(C|ؾ-¡"Œ9N:8ek&×zÈ,kw PÏÁw2PU‹¾á%®¤-ewUŠnŒûj¶NëËYHòØã¨Z…¼Ååš0PW„ €½Ž¤5H²ÛÉNÄ Òá0†nÄRÌ:2T‘[‚ÀZ$˼˜”à=+%È'øƒfU‰¤èe 5|»û ¾ÀK|§¼îp5.™Šk^a0Lž„«ØÖ –°…9Z[kñ$„T·;·áMŒ[OB®×k@ÂHž…\L¼¶OŠÏÈË›ót@ÒzkØ6 59¹žuýàý7ÇC@ q§ã!€ +jÜrNæy°2w/•ƒÛs‰Ãóóì,ó¡`ƒ[$ùí›æØ5Pã-êýÄpÉa#!Ë}®J'’IJ-r"N,Ĺ—ʇTŒÚážÜçï¾7Ïß»ÏëW½0?03Û\tDàØ©óÜHÍúZOW°`=È`)q³áÙà¨}_hi Çq²«ø`¾Ì¹9@,W>üÖYbiÒjt½'çç} K©Î b ¾cÜôYJä¡:š[íÝ„l üÐ$åØPæ"ø;Xéç(=6ÞbÉrã€|äïZ®Ð`26žÄìÙQ LFE"µ¾kÀÈRç~³‚òg")2¹^=ÐcY«Œ@™¹ä…öó×ÉŸwŠ€¢i:îe gjvÜË*7Õâ“ÊtÖÆõ1écŠŽ{Câ:îÅw»ǽT—ÓˆeëŽ{=ìµ°wö51bìñʽ¨‹%SîE3P.›{M£zÞÃÇ!ÚÇ dÌs¬¡ú¾t?0Ò¿¸¶ŒC ˆYŽE»±‘X%â"°@K%:W‚ÆÌ¥50“›,Ä@:Íõ™‹ASËW³|Vâu0„Õ1)ê2’ò¨§]pú«Ä±3€zÇýÞñGÄ_¬&ÞIa»g}9G¶ªž'ÿÂ.³d€ÁìÜ¥PªÅV +ÉÑ[©Æ.‚òur“ëü«^—Ƕ ÈI &CŽªÀ%#“MÉ/bÙRsq'k틲ݸKµfW’`è#—Ø5îÀ× /Àúÿ)¯–;oº ÿáÛHPÌ­D=(e M{–ÝL £p07/šßC=IM²¼ð|çêARäa¢ö„šÉ<Ô%Ó_Ö½ê5,ûÜø‚ßY~9ªhò¡ã.:týÇÙîêÂG•¥ëÆGí¤άœW?jÇÆÝͱ4f@(Å0@/Å £Ð ´(¯%06ÝЙm)Ft”BÜÊd劶d•B`DG)\˜*…k¯zÓÀŠ;J!lAÀŠy³bs‰C;À§˜ƒÕ‹S + OǯR¸¾Ì †äF½¯¬ÉõŒræm§È®˜(MZ‹ðvÕvèÔ†‰Å®(øX-»¸¶¤`2e± ,€š¢Ù]˜bwíUìë“ǿم-±ËáE.¼pžf£Ÿª·fñaØ1Û<´zˆL9dí ”-%à.uõºHVEC%Lh[4å‡Áš‰©,æÈ&Û€ù²×|àÚ”z2-B–yÎ8 W ?U ™lèJ2±–~óCg_€(.M¦Þ×ßæwH7ÊMHËŠõe×D¸¥¦3@YÂ\hü"?Ze,¸UB!ìÈMŒÎ0æ#›”FA7r¦¢ † È+ ,˜OÁTô½ÿ·ßôy[èï{wÚmûœv`‡aû¹ã°ØÐ©ºÁÆÎøÐ56p¼eLqp'V(Y]ê¨16“Y ô(C"Cú8b=³ ñž½Y'o¨Òâ:„ö‘½zïsÖ®fùü0á‡tô#ƒ{¼7,µ{â P`¸É™þ•cŒƒ[Q’Q¦Å>°Èõk¬×‘ã¤$}L‚IŒ&XÃAŠ3â阢ûEÙ¬øV@ k"ay0õU"ŠÚÐ Ï‹¨‹}¸=ˆO¯Š=ô³¸UA(86…'ˆ$­Á>Œ$ú+[ ?9DgBŒ‚(a噲dÅGg:éÆv­ß{wm“;9g¢¬ø,Šh?1¹æQìå«rn»VÜ'æAG†,My GÁ˜û,»Ü‚XÅk/Æ}`Ì K°¨Øb(CóÛx­kݸ°™—£+Õ±f~Ù5y†(i¼1U™€²"ˆÊ#é.ŠEQ—µÖÁ¢¨;®Ù›A˜ Åœ4mÛ7Â6hï3WmäLlzÙxáƒÒ°^ÿ}!£VÔßHºèiïm#|4 9@!kM äS"=ÒA7 pÛ€aR³˜ÏÞ6‚µNѽÎS`Ý«RršçŒýŠíå§j“ “Ç lìŒC2¡”H_²¾LÉ…b*\W1¿7ÌÇ£Tyãlæ‹<”ÔÑ´Š&«VZ + +kÕe ^†7´®uÈæœs0çí‰iß«hæ5Za¿È[»`ú¹ãï!~S(Jø Æ.´V¶Úd*RвW°’‰«¡A‹d×y»¼Xçyåù¨L[˜;lsêþe"줔FÝ\”GjZ pfcâ` &ˆ¢c *ÞÔ›àÐç"·±˜lXf¬ú„cAÇUõaªþªú;©Q¦Ö)µÎS¡]fégJ´¥ò Ÿ f™[ +^Í|÷†qqQ‘Cù_£Öï1‡ª¹¡ZÚó/f]‘ÇÕfÙ}œ k©ê`oÌ ËÀ& +/Ëpnëoú,ôPßG}'zré3Ù¶ ý27i±—¡À––û´“–¹aSÿÒiˆÛÁ2áT¾â¨`3`TŠÄ9ª° +„‚éu  ZVUa/SìÍÓö‹Ú—îTÝfibœdŽX‚á1˜O)ˆmÐdHÙkóÖ:åÅ:Oy»îÕ¤lÚ:8ƒk*ƒÆùµë5”ÈRFÞï/]Ñß<=xÙÙ“Ë](± Åbµ\.ùzº?|Q¾|úááíÓ‰BŸªëw©$ñAˆµ‚&OÔøK +µ¡5Ñ@Sé7@4B×ç+îæZÆïä:ÊRrZäî(Dí6ôRTÛ~î¨ü(¶åŽÆe™Ô*(+-Ëàgl¾¡qÒ² 3 EÄq.NCýðGÉ#ÊòÁÐÎY÷+ݹvqfÎmÐ6@oDWN{!d òåðí°ƒÂ5[~!¦(¼Š…4'–™¸íµ:Æ‹3“é–¸ùfrçužíŒu¥´|¹LQ,–6O Ý·eì7_¿y÷íß¾~úöûï®ï¾zûþ«‘Âxx27] uµ¦Ð¦!H-Ý*(xJÜĹFQ½sèÜgËîæ’4d³Ò úT{ŸÑŠ VF¾Y«ð—C‘.Ö*ü…AÌ%}*þˆÊa•^iP}ª½¿[åoäa—Gwäf¼©~œD µâ%w³ €\yšzõ'Š^“}>ö#ˆMï»ú4çœLs‚Š…}%´(Âì%¥ÊD#±?br‘d´´!®ÛšK¿ o »ðKrKÀ¸¦] GÙ‰<ɱ}¡Ã{¥ ãDÊ mF LRŠûÝáÚÐ:Ê®¢Ä 2«”æg•'Qý&üìsK”6 Wse(õ>VÈÖ¢Ð9NÒ~-fµŽŒ:C·OP¨Ì¨@~˜Wçt†i²R å\°a¹kT™!G£TÖlMFID±LGæõ)Œ0|òœƒrbji§`ˆWX{âP¨Ž‘ ¶¯tƒ*AÔ~Ô=iœö*d0‰6VÁ[´sŠ-)öê1}Õ”¨§ÔT±Y‰|Ìî3‘2&Úë¥åÃN¤fhÏÖø´QíþܯyZiJ‡E†ûe»‰ÓÑ>xâ-cÊò6ÒÕœ  6Wjó #â‘B ÔçÊäHÓÞuîFí¹.ßÊëç”Âôcù쒤ƙ›®M¯¾Z&1†ªgrÍ9ɹAHµ_]Ý¥ÒcÛ¥3iû snû«9s™Â‘ÉN$ §É>-@ŸÉµòa-dHHgŠ*T“°OÐ|íÛ4·Ã.…剨ëèöÙ_-Ë@wr5PP»Ñ';éÓli„…}~ÙÙŒÅCi<»6üBkOÎPjŸ¶XfK‹–†H¤2@Ô°Ñ^)¦n˜,­5Ù,ÔÇb°›ÃL€T-´Â¢j:ŠˆFº5Ï\88´–Ù7*‘ Â9%›Œ(rl6‘O4ÂÀèIeÖðJÆ[åð*³‰ÃŒбnj–®Smªf¼EvC¥uUÕ¹ŒAã8{“µ¶#: Ô‰… 4zÅJ  9Î2e–º} ?½ÝŒC‰Erf#1Ë¥—eèFÄäv%¾o¿70áqôúè#÷\ +þFgh/h 5u šô±V{åQ©øƒhëÜŸ¹b ³fÂô»¨NBœ‹¸ž »-вÓêy{?ìš ‚ªPh ­ŠÏ¥8Ê1žÑMF†2ЃFëÂFß·©‰Àº®ôÔŽ{]íd8d<ì©'9øûõcˆ|ËF—cDuóŽOµ®p}›Z­nƒ./‰ýùœÞ<=x)FRíþe”€U/)1 ÕÓýá »þùüùÃÏŸ_¾ºèúÇó¯~¾¾y¯ÿ¾<ÿòËõá§Oÿûõzy¾ü«.¨§ûýúË_/ïþ|»îcçõùÓ¿þtýûÃõîÓßß_ÿùtÿéåãóŸo_>ýððöé6b`kÃÝ~Œ·‚fn (a•ØX4¡-‡îþOw•$K–ƒ°«ô 2<ááN•÷ß¶ð(ȪÝ}’‡„¨›ã:ªÂl/cË(ûõ1h®ºà©A;²u`¤âŒ 'd)º¬‘×8EGnØ'}Ú>ìdvÚ .ŽLÌ{V†œo&ë$„ߌ±žïÀÕbEo*ŠJűѺNBŠ¡£ÐÕ*fŒ-úCæEhüVdbºÅg¥Ï'ø¯hþ5¨ÉCƦ©XØ +ǤŒú`Ì1å‰ÊfG Y)6^€Aæ*ä·!§P7i½­ö:)«g½v{^oK[*ZK›¶ô8 ðª´‰S«‚?ÅÙ‚:ö:f¿ñZí.j4 +÷%^FÝGI©nÊ£|'¶¯O#åœsË)Ç/ËW¼E¡¦Ñ’^îÉ;qÁ.¢haÔUà‚ÌjUbfY£RªR⟉\.n("ª†tÛdQïũ،-¨QF¬¶É€JhÓ6coŠ[a65Ùb]Ôº’ü¾&C6;6£p©Éð4IaÛÞ.CrF Ý6eÌtÙÓ*•’V&Ÿµé3¬ŽÒª +¼¹B¦Ôi­²¼äæò£÷HÂ,Ðm?( +)=æuil§ŽÙèó‹å +5ᘋPÓQz Ždã ªµCvõ ªBJq±&r ŽŒ€â‹Õ™‚ëçg¢ý͘Eÿ-õÿÅL%BÑÚî•õlAðrê6DÀŒ`-Lp@ðËqÒyÞŠÑöI¶”òç–Ö +E@DÑRƒ( 4q¶‚e,ÒߊÅ\›«:PLдåpŸ-?íùå4¼8c¿ÙÕ¬#F|;qh_€(PË[œg(ŠgK0m4mœa;GQÜhÉtNã.»Ï¿L4äd̦^È«2þˆÉðè…ƒ}ïÕש!;Û›ƒKZÈLÇ—8“pøå;QD+ëkXúyúíxzéîc…ˆ1Ö¹•æT½‘ìÆTÌ2÷0ÎÛ‘6&’ÓJþ7U‡¢HA´½4yoˆÄõZÄZBpCßÕSè¶Š¥-æMçÆp­L§hÕ*;#´W7+TÑ–×ìUÇYa¬y÷¨J)8÷ö£r_+í“N  ;ÊÔ°Gi¶zó6ؘ·<ú•13äáÑ£oY·õ]ÃÛê"[ ÁkmVÙR•‚ç]6ó¬(:ÎÍ>ÛRmŸÛG)Í-EKsÛpk¦Þª³Å2Kâ;ÎOGUŠ¢éd¸pŸ-?íùå4¼8c¿ÙYÇÕ'8=šY}­ê½—ŽPkPŒJ [#Bo÷‘߇a ô€²ý TFßèéHŽàN Y¾ã`z q˹;y×éCñ.\pèÈùµC¢x—€¬jFÿL4Ä­ŒÞ‡òw‡¢²÷Wõo›Bn— †QÆöpd©ì¾(Þ±åã%þ¢àô• òA¨AdÇrvÍ) +ÎÞGÊí¼"†^L3Ì÷6¬å”±~l8[‘™^ŠÒÛØºí>XOV©Ùjkü¶ÙÊ;úÁñ+ŽS Û’[Z›‹JIhúÀòÚbµa4¥-% !T Á*)Š–FcÓ—„'Ã9]è]?i¤ù#”ø¿½™þN´Œµ€) +}Ò(Ùuƒ¶æ½¬/ë-£Íy#†"[b3òKÌG1P‰)^ª1¾Qzq£¢Mßã«ç¢4¦îCÈÚ5»pŸ-?íùå4Ü8c¿ÙYÇš"¢W ë -…/Ùm¡ÖØÛu w—f<ë¡„Vi¶ž„Ríƒ*½´”˜”¾­c·ü©2ø47żÒJ϶¼cHt´Œ^ì¦h¬-v[Ž ý~#[*ù½’C Þ¡piäèiT:J¥Ì0á”v“àWÐ +…Üër-â°V´…ä£ ë½ Ùèñp +ZUaç¼%ß³|¨õê#ð‘½Æd”›­$¼—Æ*÷;Qd£‡±Å47;£u`jFÊvõ):‚g÷:ÀÉ!ÛÍgƒx©·¡Qê¡‹s[ éíp¬(là&Œâƒz4¿ÃÍèŒfº»BGCK‹ýž¢)ÈÖ÷!ªÍqSd› ÙÙኦ˜ŠYá<œÿÒüÖ8ŠîÕŒ«÷n[^Ñ^×$½2ë{K±ƒÄùâ1¨ a®mØöî¸ò¢¯Eë:¤ÄJ_ƒ™Vƒ¶í5•l¸JQÁIcµž¢!{®ªP¼E,ç*Š·y®R³Xy (HÛq*¥Ç ã*¶}\Å~/Wq”b +—ŠAO£ÂQWqÊl‘NcLE‚DnŶåw¢cÔbó]b(6•U9p¸¨Öõ4Ä¥(”ÚFŸÛþIû(¡´j¥ª¶ÌF +'*1í£àyΟ¡Æ. +´R'1ôÅ¡‘þlqv _Eü%gýWÄTBM= ¨eZFˆMUÈŠdôÄÛÔëúšAo§Ü_ß>S…^ÏyÈveŸüíOi Ãš¹ýt°þhé©§³{VWš(pcàÛ™Á'bÙ2à$í÷÷Ç+ÍEð"S´×«³íBG»=¿è¥ÖRr1<ÛíóÊïúÍÁÊ (¹KMLpá`Þ¶¶ü(¨ñô•²óÚÇ5”tТ-óŸž·#µâmA㮇㗺–" ® +òÏÞ÷HÞ-þëiÂ5åhŸW~™ÏÏ u2å‘ló@8ÉÈ_\cé£ÚOD™Ú’:àÙõXü¨ÕY1Ì_ˆ«ë¢×£S#@QÓÉ®ëþ´– Žz·>ÁÝ ¸â>?±CíltGJCGO¢æ:bÙÄ|m .©¸ÈÜme ' +¡è%š ¶èªÉ5ò«ÈÞON)W§õË%ðµZ„ Y‚SjÄNú•:BÉÒä× Wð>·.XzÛAìØvY#%¼BjI~FcÏþtb›—¹ßèz(`åT«A}õQkLNZi£0Bƒ"ì¹¹0’·ƒšY[ɳ_[ŠJñkK†Æä×–¢8{ÜÚ’ù‹HÙ¯Þ”mX}Ã(×IBH.bt..¬î<£kÊÝE¡:5Žæ"Nš7©ÎÙʇȞß߬Yô_¿Îb”-žÆ!Ú÷•à•¡¢ýàb†J–°†Þ×A=zÓ!5:·¸ýJÙ)¾!Ô<¯cº[uáâ.KK°_œØ}âb€Â‰ý'\ù@Žûp+L÷8 >aý{´TŠ‹™Bà$@óôå7Å1 +E1ÍKl®Ókó2v`ç²RÏò3€«$÷è®0EÛ8×ÝõÛ1ÙiÒA†ªJrÀ´Ï8袒w®éãeöú8BÑ4z1t¯Áâlè6_Š©ÞM’ÿ±ÀW4‚éVXç:´I<®¢)u'Øï[Šö& +ɶŸ€¸J ‹'ƒ …÷»B†««i þ·.4Y¡äžÕ¢%ÏÚ_{kRœD¼×Œ(µè°ÖÃËølúüþÆ0cƒŒÏãëÛº8]ò¾M›ãüɽ;ÛƒÝìO^e"è¡ÑW ¿(¥UWK i.r3”¢²P¢Û@s;iuß0ªÑhES:nÀî¬m9í;F‰¿èmHò k ¬™Ò«%a„ÕÚCoÝ–MÑ{±×€¢£öÍŽ·ð”²7*H0„,¶JgÎC‚¡Ck;$@L„ûCPãר_ƒ™ÂCu嫱XP4à]ßC‹M5&PXˆ0[5&ª°¶ú§*ÍC¬ —¬³ù³uUzÖæ¶ÀâÌÄ dŠbI^E^UB®V}ß§ôR¨T +z•R>hÍrГ.[ ‡Ó™äR&ç†ò¤.lñÌ8ÖdâèøŸîª×Ñk·½¼Ã–I³¨ÿ6@ú×eÃ^à:ÙÏ6œ½Éëg¨s$ ¹Ü,Æüt¨9æv_—ïkÊQRïÉQŽ’º×ŽE;H‹þܬ¥Sç4%BÙÒÝ5w¬Z†K+[ÄÓi4ÐÜú½tu(ìÌPÒe:a+°Æœ6r¡öTŸÏŒšˆPskq˜"ïJ½|1U0ÐÚ%¹É-jÙ—߯´çx[¨ ù*ï|#ÐrHö™5Gø¸T½Š +óNËGDÏ8¿´µî<&TÕæ­ÀÖ¢w‚¿ Í¢ÿ/a*,BMaa×é` Z¥Z ÒÝ*ÐûèfDLZnι¡Ç!#ºÇ +ïšk}‰±Ù÷Àj60º•*Š%­:Ç©¢H«(YÒ*ºi‘@ZE„­"œigz‰vìxh³¥< z6ϬÛ.™¦Ã²n|ý¶šgñ„5CaΑ/«Û¬V=îO»QÔfÑ›( +Û‘O¤bªýºÄn°öißEÛsŸà/¾AsJóÒœ»~Vì°[TXH?;çèu‚…p¸="«‡nëá×c**]²õ(…g8sWNŠ‚CWz{Ê”Ï=ƒ€s8r²=Ü(Öšt¨7ÜÔR»T·ßW°§J¹žPºJœˆ­w¼N¶a¶¡MóËÑû˜(¾Z¬GTtôu…}1ØêZ¢ŠªÜ{Û EçÄèmnXSË5›ŽûU4^ë ¿× =Ë»µBÁ4}7k'{hP4´åINyA†X©`¾X*ßíø0Ѧw°´^Ý+œÌ«]½yÒ°ž´–Ü hÉ•#¶“³[Eá»5À&¶Æ’¢UBº +r­]kŸpÖýæš[ff£º5@/BÍö‰¢}‡{Nb̼ö‹’.½YJö˜è2ºs%ËØ.`ÐÜš—±]é©¿C‹”Ûèî€öRïØ}µ‚J•KöãsŽ%®Fryõ0äÆÀþŒDÁ¥°óÂóܵC»/JnêÔ­¯t/zHü°WÁæúT—ÌV›ëi ¨.×ÿàÛÕˆÙ²Š})Ý]²Y6Bó¬b Ë!§÷èñÉ›ÕÜQë«%7«@ÓÞ17«ŠÎ¿‰U=µ_EO¬"/L¾[í6«@c•{ÉØ¬î{«ÀjÑI;¾‹÷aŠÖ"ÍÍ‹¬êp;]&‰Ëm¢–cËXŠêXr¹›¢qäìŽ Úãݧ;™Š ìv%õä¨@£E@Cž2N*L¡4Šèأ”?îÉ– a_ŒÄ€8 >t™¶?0y¦–$XwÀ`­ÊàäÖDÝ~¾ A¨ šsŠ®D…—«3ÔŠ¦Z‰ÊبZXçî÷*cí‹û}­W†ØÙ°!çj€övÛ¸Ñúا¢%»5w”½eKïÚSÜ”$¨Q‰±Ó¨¿ÍïEÉí“m2ýà,€J¹öPÊ‚îá×Äî,Øäž,`rk Ñçf*"ªdç<¸ê!ëS«z÷ +×x:(Î àL.ülš9 «ê/lrÀsâe»MÐ{0pÐÕç§ŠÿW…×9kýª0ú~ÁîTm iy/l«ð_y©W“æAõR°¨÷ž»ü%®ö,17;Ç~3ø!€ÑsYÐ\ãÔ Ó¨©ã’=pº ¶‘m›¦“ºr[_ʸ*#aMÁÒp±Â4¢‘”Ý€ó:‡¢²³©ãjx.kEûŠ…¤;ANà =Vw ôlç ¡¸[ؼÖS*ZBw.Т«òù„ãç×zw.pfÖ³sz‰X³u +6 ;N˜0 ¶¿°+jÂ^0ÊR¦¥ƒ ËX¦¡†>¤:UOY¿Í¤h‹Ú*+òu¥f£? +æ25úƒ–ê7ø>Ô*epiÕo±Jr9ƒTõ#×>ݪh{®¨uS(þdEáþÅŽúqðÛm‘M9‰1 +ÆvùÓ3y(ô>uú>=$¥JN×¢ú +Ž1`ºL)NmiÈ%Ò‹¾Ö‘›!œÌøÞiŽŠ'˜D™õ¬:ÚT! °›u‚-^c+Á#Ê-" ›m xÖ¶ߨ“<ÎßLÌyÝ<´Å¨»‚%Í uo!^ÜÍS>t å²°(«4v÷«M¯KœS’;vçFÉ颛®zƼ¢¡´èž‘Ò2tiçkÿÁÎÇÕ¦@Ñ×iØ$ ºkÑœ°åJ{ .¯Ï±ås}>·€z-.·€-«îït—©9a:eacÊçúfnj„$›ò{”梠T·¥Ü*4_–’DDÔ݈]/ÄÝÜz‘’Ÿ>@S¨ÙjHp¢×œ¡ÇÚÃ(ÍŠÅ’ŠœcˆPD.%KåwîEŒHCˆ,£!„3áL-iH%í2I«á-ñÒ²cÒ% ¶ ëyIG.Ôžê3ð™Ñ\$Ô´gÀ‰CnØž +0…ê•hÛz²‹&2…ÅÐÂ}¬Z½èv*›qor#»·¯‚eì©F_'Zz»‹x×+PX_Ú°²e$g¬Bc‡›ºA«lMèC'¶• +(œ™7VÝÆŠN c¥_'v ›™êæ&ÀÚjrâŒûÊÞÖgpe†ó àöþ0wõö·öQ_r }ÐÍÃ9¶<÷©tzÀ_?~ˆåðÊ Åá0ÁöT=ôããßåùéﯟÞ^¾<½ýþó§ß¿¿¾üûéÓ·/OŸ¿ûòÇç·¯ÿyyúñéííåç·§—×—Ïo?¿ÿ¸âÿûõí÷§ -ýx<=þñ§¯ßžqÆ×ÏÿÂOüxùùü—ÿüð·zFCªv_Æj[ù˜hNS±fð§\[´Ý\Ûúý.Š6m3ºA>Õg  ô<*õ!Pœv—Ú(i‚0Ö£Wª‰’»ÍŸZtõl ]ð»lù±k5i®#–­zËÖ9ªBó)ˆvË>N÷Äž‹S™‚“ÓõžÚI¹¦ŽÚàÌ@¹þ=Zt…Š¿cðS%èdœSœÕ©C[}M­Zg¦¦Uq¥‰ØûR(Õ4‹½ Ãȹ¨¦O¶TÒÚ¸müî*¹–$Ça÷±¢-¨§¤dǸ1åÿuÀP(2_ß꣔ +Š ü½I¸£òßÿ äø ¢î‰Wz{|¬Á”ú®ò›I[¾#b;øa´ÙÚ,w7Ë~[Q6ÝËØ µ¡=ÞjdSÀ”Ò"ñ8Úñ +E²‰ðõ±8T$G‹®VC‘Ì5l¤â-’ƒþ-6%½Eâko‘8„›y÷&ÓѹÕj8{ÓªdH•ì5mÐöº«´®½ÒAn0hÏÍm2QÀ7œ´;†÷jý9yQ¾5G#£– 44AT·WŸãàcúhå˜UPW‹BÎA(í9Õ ¨Y8êe±@GfË{½{þ&Fÿ%Zêß Rûªí´³ j-kIS[[öÝñ7`!Á›åLóQðŽêz#;R;€‡ãï¿>ì5Œº¥³Œòµ9‚'²)A_ïí½{„È ÷!Ž´Æ¼UÙ"‘j4 jÌÚF'®Kõ˜Œ%-]‹%‹¡–°] ©¤€©ž„†"¹•¨-°1w}£ÐoŒ¾ßãÄÌž6‹ç.ÊwƯǘ¨É>,¼ª|ÍÃp»Ñý,H¥k_‘ ª”×›uèÆ–å£Ð¯¼»gÎö½÷bgÁ±ÄÝÏhˆ¸¹Â¥Çˆ¢-ûL7c‡¨öÄõ@Ñ<ËRÄhZ4µ¦³hû~Ôï½÷7ký·ˆ©Ÿ ý䪴að½èš/÷}a@ÖŽò’ßqu…WW–§öÙ¡ïls1'’êܰêŸ[©^ñŠ”ååîq­\gŽaYÖ%¸YèXç ÷ÚßtEôߦRK)Yw£ðó°GÀ9XV›¹ÕjÇ~³Üj@×ç“îÙ³U4Ý;ž8ÓpÞy¯½>û”":¡ÓØAÉ·5zQ ÓÐU)bð¼ô—­ïY0>¤býÉDÎZDÿ-bª¡¡".…­Œ­{Eݧ±KÔjôaŽ‚âg»Ë#]‘ ßh}ÿžvP¸3³ ± DÛz±h0íµo[µt΃yD0å·‚ÚJÊ™¿RÆHá+ÌÆóÚp¾E—ÔÔi@›¤KÁ kÍŸ¿²D—ý)cóýM«£2ú+^OZuA6B§†¬:ˆNHý¨ð¹Zûkn^]Ø·¤]Õ¢³¦¼KfL,¸¬õ<ò~íë’n<é%²ŽG»¤¼&âäÕQ4Aké¬ýÑvì½Ö|Jú +©½pj‹wìcA½s@·Oj«wlÉ𝼰÷á@òK¹b +Û…†}±:šŽÕ¶Cï¾àšíÕN«Ô.-år»Ttë¬Oa{T«6Û´ßÿøð=£¿­qßzÚh£R¤®Ô7.æ…ßÑö‹X‡†£¹ѯïÏO¿9%óçàEùÒðõ'$˜ \áŽõ޵Š+Ú¢ëó(*P$@[,Ð&-«ƒÕön9Z9ý†€/½óÂ\¿ÉÁR^èYTÃÌÊq¡7‡èí×óÒ½@‘¹ç,Å0ݦ0²Ž¡5µÇwÝ“”º”²Epfo°\…\¯§ŠŠõ:Žz=žÒQ“£UNË»ÇÒM¥ƒ³oÒ¸+ o†j´d*]ÅÚ&îãBTÍß Q52⽋‘Qz›€Et ?‹?{Üä~xÀ÷†ÿÚ™°œžüÃÖÆ‘ÞG²6ý¨ëýõG[øiLÆ&¢|#™£¡'¾HˆÙZÑÒãI8KèLÑpZÝCZV~ +c¸|䳈eüªD…Q©u&M¢0@6¡oãòt³´J&-+讳ïhsÄA„LjD‹ƒØ]?[Žæ`í&[©€êLãÑñÏ×t© ýåáû´)TJ=‹¦ÀSPÆ‹ è~ìM×ýXLã×–„…7SÌ}^à ^¢Ö‡åîÓV݆Öwƒ +‚ +ŒrÖѪ»Eèm <ײø¶æÒ[ Õ7ßÍ¥ºö-‡ëï·.Š¥[­Kº¡ý™£ì]‹o;Ÿ†nþš]H jg~­ÔÜÊ´ž„Ð 9m±—(a£Òê;f0Oh‘™Èd_õ§ýá7ŸÏ}E;@¨ K:¨è~ ÷hl £fö…}€¹Êì Úì½à«#l ÌUòŸŽŽ^Û–ãÇH9Úô¬ÑoHèltM×^ÝÊ!Pj)\*Ã}UŒ’@DqóKóÁ´. +ãý8+Fï«ý)õ¬±³E^ôírç´ñÄuvI4 +A\œ]c%]Ò¿fªY†×Á×ÀPqè(±]KÕqMn‡oOun°·6þ,˜’ÄÌŽB ˜„âp¶¸:¯øÖaoÏi®@ØOh õq´Ok9D¿JŸEw©c}u‘3:y{Ÿ/½*…àúÞ`ï#"¾Ï’[ß5M×¢IËœ)€˜ž‚ýŽÒ³î¥œ€ïûœ«ß¼>ù†¶¯eÓšàH’ç(Êjz šÁ"ç#ho›wŸ£ „¦é¬sëªAWƨ愆¦ôü4Tó’j?§!†»ÿü° ƒŒ|}©‘ŸÆÂΖÄÁ¦»KèÕ†Æ_³´À¼ŽÖR[m1ÔÆ¶×üFÛA8ͺbåéèmºõJ€&›‚¥Ùê–ÃÒÙ›ƒËÈ«ÿ¤…@£#å‘Dæ‘9Z{Ñ/10‚Ï®˜D|iY\tŽ¡5ö#…tt…¨©MmWW0zuÅýýUŽåqB”°”¦qž€j×$Âü-m=NSàE¸ x¿ÅUùPÚDâ¤4K ù—á©Öò/Ngľü j=åE¿üí%);ØÉ?†nIL´µ4¹1ª¯@­·Ñb ¥Ð T÷Mµ½èW `5K¼æo˜sôX Kæ€*ÑÁ(¸b‹ÑåCáé:«hŒÝ—ÇÖ»EÏZêäq(#ŸÕwfK÷m¯£U@h`*Š˜z‡ÐÀÝ©bšFŽ*­½ÌJ +paüÇw/™öÔ)@W/#1#ÜÉhöÃñG|Ñ1dü(uÍÐïmzâÄB¿C®Ïíû¨sb”Àâ‚¿,IëÚÍ’œª„ Œ%!;!¬¯ábÓõžPjxº(Zm%!ƒÀÐj3‰Äj#t„¿¤ûrÉ×ï”°Ðï°2S‹ñòòôV¨ÂÕ~J½Úööù(a¡-]öãH‹C‰ &ýGêAãw’Ü ·âÿÛç\ŽM’bè¾3FÇ&9:úèQ] ¾;e¤e7“dwå¹lö´¿üßÃ’Rôaò²Åm}^F—Þ¥ÊPÑn¬T_zµ¥€t8¥+Tpš@B¹8ú\娔ã}|±*a¸S’Ôs16³sΡҚå£çÅòÊò EHqlLûc9áßARGt'g¼`ÎÊ›‚›ñêM¹¿Jt¦”{ZÖÜø¦œ“Å)¿8[>RÁ |‘žÂá9ý!Qd9X¶q¹ ƒ!óÿÚÓÁ¢{‰Ýo ¨s|mÅ)ñï¯ùÞzjb:ŒçèXí]˜‡ñ½ŒÇ7\Æó¼<+0ž£È¹¥œã ¨O’¯ŽZ‹„ÇÉ +u€e0ôK$<”üO3M·â»ª¿ã±¬² CWU|…:Š˜û6¥-yîh“±sF7açØ¬¦??ïÌßÏqÑËe&P·Sw÷Òiêë:›!\K›ù‹7W¯F²NŽÖ±jTC ¢{6µ$t/šoE…êèÅEjp´j]q&Ä©i%ïÄG/;ðµ×z°Äé25«ž6ýÌ÷€²x•ú,)Œû('ò~Ÿ²C¾R"õ +Ò¼-j¢»(ÁjÚ%Í»Pt„jtî^[ +ì>Ë9¸.pºÞ©)Ç©€ß-}§¹€<}ãÖÀÝ&®uô,ivTô~iÙ©€A¡ÒŽHDªb‰ `/bÃSÇ‹Ø€Æø"6œ8Ú[Ôj¾ˆ hM=» -ò"6²½y¥g‰ØÈª¹Ke¥Ð¨4 1‰åµ›0Ck~XíB¦ñÝ^¤4çRš½’rrL¥WÒx‘šÊ¨æI `i1¹G;XüÅi„þÌ]b)B §Íæ:wå9b¿ëX¤D”¶éõ8¨þnŽh€bB­èGâ>ÛÜÌä)ŠUboXÓhŽfÈôa~ôÎ }Ÿº™\¥Î§°hJnh (YFÇÎ)¿(§<ãš@l£ÑP}M´Å£Gî³O±Ñ5{ (ØzwÛ7ãÈH½D;ÁŠÖx„Ð!aE[_;,²mÇ‘ªøìónFVûDkÛ1¥¶sÿ­“v¡åÑa´™Kí¹à4ôcЦ›-(©Í™ºtF­)F%çÊ"¹m|Ö†ê}бš;òœ–}HHAÜdv dÜYµžeú4.ÐÐgØ© -|sVö'VãÔ¹V-áPã¹V½×*¿p¯Õù±ÞCtÅ…c]šmh!V×30<|ÏÜtq›ç&»+¸Í=$lqÕjB±ØöP>~Õª‘9Y¯h7éÀb{qµ$ú G/Ò÷©`£TZ½<«—IŠ¢7ÊpvX¤î¾¯GŸß…dJAÝG9üë§ÊçtfçaÍU"Íœæ­Q‚$Ó‡¥Jöq¡3RuVÑšöx]SPZÈѧ +¶Ìñ î¾àϼ¥Î ”zH†~­:[B ­â.'ÈŸ§Þ”‹ÒѨ6ãz?élÆêæ˜VÏÈV¶_×û¸%ßÈä-ݧwNˆiwX +ƒ÷5QhÆfÉ Þ7#.A¾míYÄq’`ž3D”£JòÓ{Q“^(ô(gû?m´”3hÇcóµ;¡!ü±=ܤápÀÇŠ (öt²‰¢c‘Ôf4mFÞRl„R›A¥7 [³“0Âû3y€€i1ñŽŒ/"~Ykæ5 kÈÌžKŠF[(šsw2$ÇI*N²(Šð³=-2ô3,v«±®hB1Ú‹uEc÷gÛÞ=IÏ^Í.Т$w©È(ÖïFÈä”±\güI;a&í*­Žûà¸LñŒÅ£ð<´ÙFŸÀ€¦¸ú”ƒ°¯>,`Qâ>NÏD\žÆ„u,ÑnBiûŸŸÓêÇgRË5ÀZ +~kh¾ÂÚÔBz=tÛ?”$³öUK×΃«…IoïñP5–Z|êD×) Âç8·GHæù·-”zÚíä?Ö +5Ë)Š.AÊL}ÃÞ}§ÚŠbÍÆaÖ·¢hûj†ƒM&çWïõÁÜü²·7 Ù-%áRç‹ Äø%;F¹B º9¶áT£—Q´Ï>^¶„Û%Ùû¢ì‹ÁKY Ÿô/EACûF@çÑÊFÓ¾°²s{ÙRÑð.r“]ÑÈù”8V3¯EdU§âô$4lÕu¦h”´D²ô:¦k >2¿J T0³íe{Q~Ö{°< ¨V˜mròó5ÑZ ²ž€rÛC~B®ëF»,Â~J5V·vžÑ¬”U$½Ì#gWÓ g’Ž!îÈ0K[vÊBèV­èDZÛÚÒÃ%§múxŸõàXíLÞ#4A +9gì3%äSÈß¿‹z›õ€ºÇ›–o¤ØÒg›–ß¿¾ý%~üóßùñçŸÿùíßÿûý×üøí—ûë÷ÿ~ûÇ÷o¢û ú8âgföÉЬ„NS´!ÍEú/Oô¾P¡þì²¢p¹¾Lð¾úö@Cdó´;•}@òvOYt ÿ’{%C¯Šuš>à}õíÁôLy¥t°zÜת],pžÀ_'XôòÒÔTŒ±l0j÷á¨C MËìÄ6Þ@‹µôKchi›þ-¤1Ÿí5´ƒ¯¨@±wÍò^·Œ‚Iöºå96n=_ëy¢˜0öñ7ôУM£ +ƒ„zpÅ‹qžAP(_˜‡ÔEûÔáFƒ<]ÙE÷çœ\¢Ö'ûœ°JÞ9;ùÅÿÑ!ÍVBÁ"e ®™‚Rç§ ÷B$Kt +Ôd¶B´láÉßçp¯¯œ›³ëØò&@7ïZ­P¿+z+j±ç%í±ˆÁE…ÓõëDK—i{ó…ê&©6] +öTóp¦*LrìîÙ¢í\,0zC³üË × Xw]ÛP ³&J.}í™ËŒ•)-™ V{Ücýdh«{~rëã<Š™ÛM}V.;@@ÎÒ¤mål«§”ª%LïÝ¥Ôÿµ¼Ø+¬vÚÉ ÈþRWpä…6­T6½l{½À¯R â¼@{Žo¦%rÆr·2!«”ˆ^&de˜žÝeA¹‚ãÈ\p§/€bìyŸÕá)Vûhz’Ü%Ž!Ô—p¦54*IÏÁ¯‰¶²$ 4¯A ʾí‡êrêhÛQ)ô¨ÿ¾÷‹¦–PsRN;«{5ñ×DQ¢ÆÜgíXÝÚl'e”.DsHqK øHl[,J¦­…ÂMsÞdÄçQmôµ¯z^ Oõ©E“%´ý{èÞ0?5OÈ©ÕóPÚFOjqÝIjÕ-R ¨™Óé9Bc$¿`BædÇ@Çæ‘'µÀz.sL(·Q“'&³zqÆ<}¢ÌÂýÚSn6µ¥/ 7í¡¤`mÅgßGÍUh­£ ŸYœ=5tXF±×ÀÏ6yXÇðÞ×φÐÃ0®Û…ÜÒÒS°(Gã=±—H‰ÂÎh¥¡¤ÅÎÏIˆá;)¹iÖRhnaÀ÷–.¡>Ñ£Ö)rÊ’‘aAï Ô™:¿& +;?z&¶s£ÝDEm–ᓊ-%ß`÷2ì!¥`È)Ú½K¦têÒ³´xÉùÿŒW˪ž¹Üû)Î&0³9èÚjmy‚²™Í@qð? ü~ª$}R·Ž Á›ßuú“Z}©®>îÚØ eký`{Â`·Ýĵ4ÌF>sh]as"@"çl:y#Z–f: +(:Ç‹9kz&–=ö 7ëÂÉu÷d(õÊ"¹6)¢h‰×¹˜ÖI›^>ÛIâåï±µO;çÚ0lÈ>†w„»fÀê%"Ñ’ËBŸö#ªE/þHØ@KÒK—Õ’.9™´Cïô«­½&ùµ¢ ö®knkƒžIBCƒÎ2¶(âìÑ=ë“rU›UŒ'åÞ YMWs»MOÏñTÉ)_Ue<ÓÆ>ãc¼=(Þ&¤™¶¤|m¸„oKšó_Tõ9pçÙ|šŽh ¶¶µÇÞLÏÐΒ媠Mõ¹k[0u[¹äÑ\Ôµ™f cúm çГ®ZqÈ“H,UIž¤?J.q[L¥ÍïIÚë Ø8UR1]ôÆø/2á¶–â 'bÐ&"Í‹zVRO—)Âߣxž#Z1z’od¢:eù–KšÓÚÔ îÒ’ÓÛû_¿›šél…Isèß?ýõó§ˆ%¦Òù€HÛˆ&£“ÞT0Eù§Ï¯O?•÷·üúÇïo¿þöÏ·o~ùï··?¿|û÷—ßÞ81Z}½Þ~ÿ×ø?~ù)€×ÿòËÏ?þϧ¿}þ„êÇL V<´0/€h!´4@l˜ËÌA*˜»-Ø~Ì:ŸwÔ´ð¹ôEÇ+š.&hSÐ4{«ãr¨X°£,™<ÿu€Y#¼zZ†6íÀ‚KÑ;Ä+ëþxh=®–¶”…IÊà½ËP±¢©?’/k´´—oËãä>Ñ>æ~õˆE#OT´ñ +B”á‚8ö’F‡+”Õ3Á[PÉhToÈM7ì¯ç‰&]çâ@z‰²@!k]† ½;­[ñwõ6´>>'ÚÇ\oöØ©y˜9C`=àÊ„×E©ðµÖ¸bç‘V´þÑúâ²M1sbZ¥‹nÏ™ÌÀIׯíÄZ Sˆ±²@…ebfa÷âfÈ6 U–¦ZÂyÂ\zü‘A².ä'ˆ ‚mÍg>§’c!8¯…Ù‰çH’1¹e‡Í\m")3‰2`‡â5À¬ê(£B»‰:× ‚kŒ»Y±Žê+“@0±Bq €ºy§ªîÎUªºü„FÍ#­ 3pœhÁVûùN!À +h·åí™×íÓ)8ˆvЦ;+æ ©-èŠ.ÐÐÁÜt¦ pä! ²¼. ¡ˆêò +0#]Âð6-ÎΔÔsžÍ̾`Ä0ØçñÐEâyˆ­z€¸É:KTÊð̉rFøš¿uߨ{­“UÁÁjÞò˜¹7?ºèNº€_yÉ*H]`YÙ¡V8Ë8‰íP+piŒX ZòÛŸÛ¡¶/²·gHQÑOÇ¿X#zÇ5 Àž¹¬ÚFΖãEæöŒ-C»xÊ1{ŸX¹¶Í»1gzxI?ÃHŒór*“Ü™(Á"<—# +I¼$û:yàØ‘dûE#äÀïziˆiAænØ%Tn}kÞPûœbûòf +Rœ—À”)wïIÙBá,1ÚZŸà9l˜(ÎlÔèÞ“ÊuÍûYÐå$2w*Ê0¥ìã™*ù û °ƒl›·äµk¬Ÿ3?DÉ?ðÔÄ~ƒ>ú3»æ2£ –•kGÈ×V®QœWÈK[lRý(N`ÈRü(Öª^£ –]ÒÏ¡$`Â…Å?ž«Iì¾ã8¨Ær:¤‹¾ðœ +ç“„‡·¦×,†%:ÆÍâs·¡¨~¤]zf(Áƒq”šˆª'&.§qœ°TMD#¡çšý¢£ qFòsê(6Ö÷˜Kód 0PlpÕ*ëfÌí„‚å‹„¦ëfô•&†7ç´}œŽ#Ä +ÅóD«žÊR^»¶?®2KWÔ»¶‘ž°VÜÒ±Y"=ÍúDO›àÎYÀ’Ð%ûn¨1d/´ÊmÈs¦½ßt†sêtFAxñÒÙq¥Ô:mü<6…ü:@Ñ슆X’îDAbE=ŒaͬÇ}Þ-1{÷COŒ‘!Ašz/ñˆfTƒùœ«D¨ˆNŸ ‚ȶú¸ÔG–O§l-›P>2×8™òét"ò56½N%ÿõ)+´·ÀÑNÝ*ѽ“¢.· ú5Ú «°õÛjµvŸ Æ!PéÚ´ì!«]çŒåá¤}äá.^]± :±zœ´Aâï²S°|x+a’éð&D?ˆÜEôEËU¤F?L öü*Üp¯ã?‚Ú³R¥á*ÔPó–Èœ¶ ž3¡ªrõãÔ€Ž +¸Êå'ô +ÊVý™ œürU°áõ~˜ìÚëõ¢ Ë\¯·ˆ’¿ë§!ŒùÈco +‰£Ã¾`jâd 1éÁɘ‚ lqU7@-+ÅÇSXVÇœ#н›[Ëœóc¡§«BÂ9ÈU!›Š¹… §Tñ†¾ðÓù;1ràü4‘ß }ňRrÓÑ0ë`hÝk‚Rõb6 ,‘«k9.Ѷ¿¶¤NÄ×–äE Á”H3GÄ â_ÎuðŠfµ\’}8¨ÒüˆÀSzh~Àƒrê>Kd½=²bß{´KÁ6&ˆ‘¯s€MÝ»°Þ!Wy4Nóu‚h°«Å¶6úMݦwà FGì¹1e¿†A%B©Ê•y€8N\â + |-;Å5ŽéH‚½Á ¤#….C39yäøÈæ w×¶»©Z¢¾çh!è¬èù ë§æø$(Rgtª’ &Øc±²Ž'bðzxâsâHãXC¬Ýw¢2÷ùº “/¶¢›gøÿ;xKO°Àªv…Ü,%ú´ +›»—cAúÆVDzÕ”AƒYs÷Õ„Ç£?oyZlÝxð„{Ÿ‰ ê¢ó*ÎÙµ8Ʋâçœ9þ“Ê …÷ìç›r2:®‘ï¥í™×í鄤»ûá—ÆçF²k`L\Ïl­`;mȧڥ‚`-5¹Rán+äßÂ(ÖÊðß>Íʾ`ÔÓ§‡6ë–£õB²tv¨å’£ú¹×J³ws¯Kê|$­Õ©Ÿ—,+÷Þç8˜çbÂÇEl—’‘%l[’F•΋_ê­r•—`U+Uü²S°Ô`üCPºÞ–XËz×™•Ž‹sýq¼4ý±A?“[xÌ¢gñ} 0±2iêS†o [h-½.l}¼{.yZÕÛnþÀëæË¡ÇÏ—ÝCñë=ëÐìgY!ØzÉ~OÅö™‚fO\I[h^Îq%•{­ØËœâ;!1IÕÏ þÀÑ“‘š +Ë [(Í=?w0pÊñÒ²+\Ãàïæ +„ÿªÍ0ÁÜÊœDOF xrg>¼$ÔB•Ûlbþ¼ëæË!óÄ zçŵӱ°mÈvî®êHü½zižië)7oÉýã²ÄMÂ5èxjûÔR¼m±ˆšÀ/ÀûE7ôòCp´CÆáxƒéë€Ú]1˜ïiý l8Èñm¦®MaZvÉíÓPÿf@0ä8Änèi¨mi«’Ãv›uýˆG‚˜ü%Nûº_cúŒPÅâåx˜×„{ XË%fè#ÂÉ@¼â®`€©Þ|@Sšçó]Á€ªRX\v ô'^w_.™jÙ ¯(£–W S<÷»†©[Êê-;çãU•P@!þíªÉÑëÆû>E/g6 ‘úß“Ä00؃´ؾ?¦JÒ“Hõ ‹ô+듨Y,ê•Á ]îñµv-æ&êÙÎàøÈ•3Ir1©Ø¢r²›Êó¸b!ИÚÀÑSa%£3OF¢qø0V€X–á ÿ4ç5Û³%n-ªÑŸmf±¥åü¹ŽMMÞ;„eoZØàÇœbX;än»ÂR:vŒëPPððÕö‚¨Ñ+4©¦ÍWÀN{ç*ŒHW¿!29°'aÀÿ£é[æ3J`K‰íÁ¥œªòÔÏÍšpžhÑk|N÷½˜ Ôý~0X«Ò4ºy‡`Ì¢îFÀ¤å".YöB”ZŽ3WöŽCñœlÓt‡hz_Ʀþ¾¶­‘MÛl€q¾xs2Ç +ÇÐ!ñÝù¸\iЭÃëœ\ Çp10µÝíŠH׳RÎBEþ×é?7Çq©\]DGJŽã³Ð”îÞÒÌ£{¸Ä`iY¦SKÍO’•!Ù0dI60Þ5a¤q¼HF:`J,…€Qh¬Å(‡ø›%™ Lau‰Œ¾•¾:ˆ%Ù$à Ñ$ùŒI†sm› › Ÿ 6[2 Çðšô@ý¨¹6Ò êc‚›™ŽXÖmP-4¿Iä­4€ÅŒaå»TNXï”4eüÑÂbûÖöÇ›4€©²‹\+7h·¼Îž!aT¬,?óðç"æáqåHþm•nö1ޱ#Vœr•H]轞¸±Šçž«¿LBýˆøbûR}Õ¤º$»Þ}“êti˜‹HkèyŠ9ppž{’ Œhÿu½ãþ9NL!?+¡$}t“ S÷„‰A­¹DáN!<üðzx°Þ|¦lv\.Hí”nSü{¤{ß°Pøï—-pWBKiYXÂdò,„§®çô5D)q¤PïGýœÏ'CÆ*4x)2J|UÂû©ÏŒ#-yºl• ë³ÐF¯/¸‡Dwg¹ˆÄž¥·`IeWöDð¯2±té}è}ôˆ°Þ+S8dÖb ó``IB:ïð§ ß¼ÀÎß8váìíÁ‘õz0aêOa> 8ex©FF1æ2¨‹´\q€I‡‹sXÉi¾×þéóDú¨¿kÙÍ~öTÉ15²²!A-Ò’,¾è(ý„ËÔž}v̵\ ›*ž£]6`“;µÃÊWÆÄç6ö!‘¯çÓµ†„¡ yáIõ{H²ØfÓþzó°ôѳýÊ š-¯³¯ û\׋è¯,‚“AXQ!¤+«"úÏßÁÄùä|¦3â•|DŽwgœBª®ð ö T ¼BÒù"1³ˆû8¨×öh°Äšëж]jq-Ca¾¥«¸–²¬¾š79m’  ¢H½IV|¿zƉg‹ E§ô〦cÏ–öâÏÑ–!Ã⤞¡¤d¦‚Ø|Mp)µôGÍçQD‚¹%¯ˆ»d¯ˆ<iã»/ÁºWÄØ®·"Fz:»MŒkB͹[QHÆêE‘ êÜ‹b„ûk1zQ$¨9¹ÄÙxuÅaãyJœ –à5Ñ€GÍÏ*lÉ=*‚Á;W7lìRâzÕqµž»ó†+Џë[k©¹Ú‡ùÒÞš¿]xƒ¾ø<¦=ìK;[˜wÂ]ù„(wFíÃGBí/W÷E²¼å˜´Þ„|7’ Mý3eœTéýE0éªò"ñŒ—dÐG+bKò,4%y¶„Ž3ÃýáæiN˜ênb^ø\ÃV–ô\yRã_t£‹«ùåH—ðG¤YKÑð3pÄ„ªÕ9M¬O$°¸î‡Äæ'‚h–fâ £LðLͬÁÃ3ˆµ³1©ËC?Æ ݤ,ÝcÍâÌ #–êú$¡RÚÕÕä+ß s'i”îqðSïà öÒ¢¯8¾ƒï0|*á*€¼°ø-ñwÎÎÀLïu…¶>Ýû+"³l>?“Vñ¢¢å­Çp5S€Ð¨ùh;Ó¦©š¦&ÎJíÙÓ\ëœn8ª”c@¨žS€ÈAßMµ3ëuxgÂùÊ= í}žíÅ÷Ñ–"Cã䕊Øg§{#‚Ùb÷c¡ÝíowC¤½E¶{åÍŽ×ÉW@Ç,p…M¿ã%ÑÉ/9€ßÅ[•§þñ vã¡¡UºP£Àê ›BUjV dèî”Э3µë( yþQZšr¨3Šp¢7Š@ _»ºô¡ƒ¯¹û&F _o£ °”þAàÇa ¦ mIز³’λ.§¼w…sG*xIV¡ñþø€T™u¶Ä$•û"ØKœ R9NuнÖ‹“~äË.<­Òì™´3¯ÎÙOç°1žÆa.CÜý!˜Y ,/Ì5a÷÷JbÉ&ƒ2Ÿbc§TÍÿGwÕìjvÁý•x‡o™Hhd»í¶ÍŽ@¢ î,g3I® 0W&ÀóSeŸcw{esSãï¸Ý?ÕU{6 æ*s6íÉ ôŸ<î!ÑhÚš•Ag–C†ìÒ¼4H°AÚV;' ”+ùñÝЪ3s›Çd` ˜7ÖC†T d7BJkr9Ð5l%ŸC“¦ê…Áت'p>›âü&”uÙ5æ¾|ƒÏO_½}Šø,÷ðŸ^ÿÆä¦G©ƒ‹ûãíëÓúæñüí_þøõß¾ùýóŸ÷øðã¿ÿûã¿þãã>>þôúòþïï¿ûðòøùã‡^>½¾ÿù_ÿ{ùôøîý§—Ç÷ú ¿ûâù›o¿z÷›?¼ûò·_¾ýçÓ×oŸjëÖ€çeé2 $A¨6ð&h(Ǥí +W’>`™ Í†Õ$ÔJæ¡ð+ËVa+Ð1!îè-¨ì9Z÷Q(Ðç¢û +u¼n…RA+ϵ“Œ{QÜHK¨äÔ¤yü3[öÏ áyÍ"´DÆR »JxƒG÷q¤cˈ¯³äCàúekŸ„HÆNåAÔ=¢çš %QH’Þ~±@AÏ.'ÖÀ„ÒÕäŒ1ƒÉ?ÁÞ8…6¯Â„-ìAššš’ÿ9T`¦ªÀEý>/GJ :Φ¬°!¨šL¡ —Aƒ+W#EÀ4Ь-+ÀZÙ=lù‹ZÍIÌ*HX/0Õ\›«E‚Œì e×,É%Ø~²Ç÷bO!à o …;Ž`}Cªãá„,ˆ&å,tŠ­+ðû$¹-ÔØýkÀm×Rø…¬¹Ð7ˆ G\+ pEú:À€U3*\A”#¨X)ÚyÒÔ V=+Ü ã§ré¿YLÓrað7"-l|¢Ñ@ZÉýœŒ(uc]„²EÔʇ´&òƒ ^¹s× œÏÜ…‹ßäáŽa€Z<>˜À¬µUuWlÑEd: û– šWÏßÚä¬+\ï`\¯¨]e>«á(-Üt@r•½1“L™T°^ hÙêFŽ+žQâøq²šwÀzÆ2'¢_²¢h\¸…ê& .ŒžI`zrw¹_+¥mNû‚˜ŸÄŠºœ(Á chÉ{±Éõs`qŒ:c’4.ï00ÑM bï‘ÎÏ HšŒÓ®}K04z3M—/`*Ž»¨fÇ+¸8eq$²a e¡ñ:»X¶î¹ëùI;´RŒº¢ÂHÀ‡Ü+‘ ¬©§î îÜ?7Kq_dÖ¢6”û'YŽ&Ø@¨j¶“6¼»µy°_Z†`Ãi·µQ×\UØ'IŸXoæ“övÓå&¤ýQœ…®%cfîõÈ£˜¼ EÍÊ$†þM® ”B8Ç ÞM@„®î"¨µ7¥um¢ÚõÍ;!6ž†ÑÔ ,­ÉèÕØóuÏ š…°nHƒ÷D­sœoÒ ˆ&¬Ý²cO9‹ï€´Õnì#3}L'¢†‰„:¸€ù„2GŸ—îÞ ®Õ³ê¬É 1‚ظê¢×%Æî«!lW5@tµRªÚsÀ‚ê¢ýA£tÎŽ{øŠÑ¥¯éIÔ'ÏŽœV³Ûw‚~%ov\w2]ËŽåTKu9ˆ ‹ÕÂþ*¾éb»û(²Ý9ö£= ‚ Ð.ÉZ9¥Ù,+IÔf“¼ÎÙ,¯/Ú,Ì1d—ä¤M²r]4·æøl Asúi'ÈçxÃ&Ç;™.Lj”<…P‡¦š\)ÅÌŒ,n)MLE4º,­ƒf íO1»î¶ZAÚRRB¤ËìR‚7@÷Ñ}r¸CúQ{ùÐ$qZƒ]Ìû¤yÏú¤{ø}¹KÑg¹œ)Æl¦ÜdÇô:À”KôX`qò¹†æÖ/Ö9šáÚ«a&ß®@b-±úJÌc¶[×çðBÁöZÛ¬+<Û¬xˆ¤æÏÝ6Ý<:7’ÞÞ@p¤H›F6°O΃%í½Npå`ær·éÂ-ØÁ¯O€’¯OÞ¤aÃY Hð ìu hv­ŸÛã|¯„ªÎP0ôÆ8™\âåè©î³¾R䇜îTIVy““š[´0§©k;’ðfJ3›9´d‡ðm~ +u¹e‘c˜DŸÂU‹/HÂ~åYú91îªU†RUú9Uñ3A?רC6T¸Ó&I¬f†‚Ì_¯¶IÜ=¹ÉVâIP÷A3øëƒ–Äï›m…Vˆ¶–ë1¶êëÙ–ÅW‚|7lr¼“ér /ØZŸN«Ã6Œ³pF¸Ö«`-ÀÛ¹GZˆ½†+£ôÄ“Hš=9ó#N,¬P9ÊõP!ä©ÖÈ”*ê&Õž§ôX¹[QÚ,¯÷¸“÷Ãm–WЏ`b‰ýÈœÍòN§‘útG5ÕæÞEPúfsL?Bõm óV·~ ââu l˜¸u¹ sGd›¾n•žÌðl@_ [jj êå(&À4L­);¾…áâ."ˆ,t·ywéž.\<7Ñ{f˳ 34»lz† Æm‚wÓ0ì‚ê¤)ÁZôXYx£ˆ'Ù•7ƒ¥ƒ²Pé²þ +ÜÙ.›p³tt +ý°…fNCpDY`ûªJtÔ@0/Ü x9\›¡%bUGÇnúÚ ÑíO1´/·e[aÚÓs-²²?ŽOÒ åz\^Ù]꣼Úç\tϾov ú,•#ð)ðhSÜI…cYj†0èEϳÔÀÃsšr½`’¤Ú¶{¶°©Ü 1Êõ¬[<½h^Þ±ÚFÞ þ£8ž™ Ê㻳ÐPÈÕwÌš4)•¶å3"¨Jò$²>˜â(„"•B¤‹$ÔxƒÒóÜÿÓn}¸_b¦_黂¶ªyzÔZ>º¡È4z†Ü + µŒÙÙ +¡p“%üŸUsRñœÃƒðp·óýp°ÑÑ2Uk', âê]óŽ/Åwï:iºw}Òh„}¹­à¥+õýÛçëáf{íy~Ú°iÒNGEPå1;½û:@.‹O ô{Hâw@É,]WŸfÐŽF=ÒŒ>ÂøFÿÍÃ4,œMó ú1-T¼zFŠ´„<•Ëþ*&6/R¶Þ2ƒwA3[YÏ·Y²à¯Äi³¿ƒwÙÏHJQ/× ¢{œ\/DѲ—ë¡Ö\Çœcßµ|% Ëçl]nݹ@áVÎ$õP2bî¤Ó­ˆ¡;“¯2½ŠœcGWƒJ.zZ·Ú‚¸è锚“>.œUÚ¬6hب‡Zù°~nåî˜:O¦4dªŸE„ŽÂ‹ŸZ€`̹ÿ×x¯ù•ÌnÏi³ôës"éÚ ‡Ñêr(Y‚R¸ÏÞ/Üx ×ÚûƧ€™kˆ ª tt…/Ö9tB>­‡~X'M…×'-ÛËm…W˜®Â÷ƒ\…Á"9Ï]¬¾’d.²¹»–í«M§Dz-žSÇ´»š®&Ë88 gQ’D_z€Ü\]“ÀY@zÍÊÝ+XIݯŠuβÝú¢ÕNën›¥¥Í'½WTo+JÂ/k¿ I®þv€h:ïz÷IóžõIûðu¹MÑçÉ9ŽºHïN,ÔìNEò*"tí Twˆ¢˜q’ªÃö<À\Sö‘TiNª9TÀ”²SEˆ±Ê°9FĆÊN­Ç¢Š\&ýÐEx‹+Pë©ù±ˆ\®ýÐE6§‡kÞT"ßâ˜ÐŒÖ21 MëW_­9¥ñ‰ââÉtH’ƒ[#±ÿ£µµ.𛉠Ö<$Õfâ &Þ?7LÌ{$…à*H°ÅSý3ô®âõ3][½ðêŠ;CŽˆsÎYwJiƒ†"2 RÆëÆ;{“y`K×œÝ !Aðâ*N°Åê&7Óöh’fk‘Ûÿé®vÞJ‹%˜[â?œkÞBÐ +Ý„àî†$°{Ä|ŽëÕýû·jžÝc»ÜßLOõ«š½¿*9CÌWŽ›ÝL,˜mXDòöº]dℼ€E&@oƒ¤r¹(˜ÜoQ†óÑbNmzD…IÖ$¿›JÉ/:JZí }Ýs!3Z…"‰õ®"ðѨ½E0@”YP’}®m/»5Ìh‰E¶Æm¹[ã>R¨ý}¹HÂå¥âx>Gq<®8žéÞ°äxÑ)eº*fo[Sn†xke—!†ü88Ξ=áàØ?šì|ÕC Ä¢7*‚Þe'µ1¬ ZttwHÙ:Á˜£2ûrÉñôRrŒç`š&Eñz¶¬‹ÉÎb\М/XLªÉà}7²9¦ñžywäuAQ© ×å ÃÒæå¬D3¨œSaLH,8Y @[FÃ_Å’ ü± ©8³ÖdÈ”!÷ôd h|8™°ž¯U ÁHe —¡¨•u¢¬•u·ŒãòRr>Gr½[ÖÊbH×ʆE­l6ÉL¿DY°çl 9°P­˜+ùÞf6Iq;{>Š€šx\SK­ºÔ†9§gMJÖ¤%µ!ƒvbrήåh $¿.œ„Äî[áæ˜ë« :–EU¨M‚4ï…Q¶ã`2$~éÓo±esŒDÔ ªY³1á£NW“Q§+@ÈëZTº.PiÔ¹®EIñ­1¯ã ô:¾Ñ±jÕžBÍÚÜ5¶ôÌøÓSMÒBþÅG™ÂÛq•Â!!®.èñ +S3Ç”[l:n®U:,ç¡Âr):=“?kõN°yb)AÅu_lPþµS¶Üàû_1Râ&]üÝè×BÜW¨7—´d'èBRÝÚs“,!¨M” )YKY_|J¡u ƒ2L˜ßjÙ–[‚ì#—”—‹Á³¼)´Ÿ#rˆwÁx¥&7EâÉÜj/‚L™Zž;¯¯¤-ͦÈ„ Ïãó™ + +t1´|ŸÏ<"”ML§ÙÄäyÇ͇C»‡nðpžŒ×ËìU¿… +€ü)^õæ î–B H’ÅsMôI©\bÕF=<×ēՖŒ¢ëÒw¹|_WÓKTBÛ\E?"n;8ú‘ç¾’›î)­ªZ===W 6D9Û•ÖóXªP­A¦1!¸¬ò}ÚÉÂXŠ-bÝ,¹X.JÖÖc”å|µ,ôÅÚ<÷¼›äR%7–¤ó¤±W­O+‘çÇ+Ûßš¶Z Æ£’“ÒFshÐ\g¬ä`ñ16±“vfŒ'‡E 4‚’£uñZüxÈ´”s{)÷º]jßé¦ì&ë5‚° ¢3Ä:´Ý¤>OÈåz–Œ+IùHQG h³Öèdp0Wµþ„ȶ ,\ihM;³¶Óî/h ¡+ž9Á6¶›ÙþXl<ûÄÍ:(cåÀÂ%²Óu¡ö#Wv*¡ iW §ÏC§±­·Š›«Á7ÊÁÊ{u­§lP¼¹«˜™W(»+Šë鲊ʛøµ°RXÛ¬¦žƒˆ¹öy=SÍA/;t‹#ˆy¢ÇÚ$Æ^ÕCÓ´‹ôÜ#èjPs˜uµ¸9÷x$ưž{¼¼¦6v£¢ï5'=÷¢…è¹Gɯç^³´AÎ=Bhý²;ðforTi2™ªxèÒ9õˆÕÔD¨{.ØW©)ÅZªf¡š$¶"+?žBŒ`È>æÓròÈãîî豓XHV‚©š ÇïHJ[Å"D¬f$<±«U§ìÐý‚wú<$ʧ¨bè"Ó½?ø¶vlCÑ:׉¢sóxWÖa䥔U—lo1á´„Èü¢R·iL,ˆ¸md.ÊÆ²F «WÓa(æAKnS;Uk§?%UóÁW£ªIµÎɪ\ÃA¦¶]@æÚ,Øö,7ƒŸôÈͰ^‹ðbqd#ãÃíáÛüxyÿãß½ûù??ÿôýåýÇ¿¯×ûåãËí¯—ûõþzyùúúüt¿~¹üzÿt¹¿Ü®÷Ï¿¾~ýûzùúåéþûåéþéúüôÛóõ—o.ÿûüôzòçåå~ùíåõóåËÓ§ë—Çï>üñðîÃC©Bá$‚jâ®H­ $Do¯W`‰­>O#ns|k81yâq7y*h¬¨gÔ´E*¹æBìÙ+`›Go#ˆî„Q²Ø#’-*õÀ ”0/”›g0¡]Þ'èL»'r4Ø:@‹Àå t7•qb뜀˜ôÊen3Ò9÷9<2JX"L¼!1s;RF¶DbØy$|ë–uä1/ÇWÅiKtåȹ*Î$›LÆbï³lb¬çQ( |n`¨8À¡ƒûš;˜ÐPZà +kbrÊ)\TQL^9°µùNéQ¶°?CÍ7Šk ö èG±‹Ï¡—Ç0&QºIÅnñ-‘¾N™x¥E1f•›¤ˆ°º±Öâïu£ ÕyØ PžøæníÒ¢ä&Aå>ç&ªÁª&Æ Lox«‰qÂŒÌ]ù,SUj0ÂÐ;•#ÀbÝpå=@”UMª‡Lƒ|·0žW“qª…5eÝÃê`e¹]"ZØ~‹(m€5s„ÊüÀcBj+2)Ñ_Žbe §naRÙ±dçýà2ìU»#§¼>5R4º¢®lß5ê^!Wòh€>äN&@ðÖYÝjƒ*èÛÑ ß¸2‘– ÔC9¨T +ˆÛÿ鮲ìÚa¶£ÍÃ:ºfÿ¿-›”¾¿\D–( +ÁÞ³h½­…zl£RÔŒCz~–þ­ç„ŠU¡ +•F@æ @!’ˆ´ƒÍ­‰ÐˆÒç†` †‘1êЕt®yéž0Å9Î}`zw’ïã ó—0–¨3p¡ÐŃÞŠ>ÿ²4Íh·>ª®sPw¼Îָ锫Nc¾ý¢ÑgÎ +³û8àÐÐ9ÁHì6Ym DzøÉ2~›éRá‚1[ªÉN_åÝóë Òç& ¬ >Œ}d¤CÔ Üé£p, x³)¢n æ¦&…c—<6æ³”” {¦Y»ö S”øÁ}ææ |ÌãžáXÒ'êÈÍjæmˆaÁoОù 1'>w†mÿYv0Ýï:Yâk¨Áã=úÓX—ˆ¹ìtvØÍ‚Ô ?€íV–äN ¾p÷¥+­÷a’W<@¤¾/aR€ÿ”jÞAÖ0øÒ<{u¬„Ṵ̂›J˜UTÊé~3¶JS4‚œFªIÌO´¾§Tg­øÎ¤€«`>n“ªfÿ;¹:æþ +fcéf`š/sý™8$Ï)À¾ÒñW^ž z}ÆçTŸ8ÉÛ2¡8ú¾f±—:ø‘ó}”Í+4’$Zðk4uò+ãz¥1©SÙÑ*U­ÌM‹¶–î>‹¼&<2ô¦4y `«KSQl¥¦Ó#ý} k`0.’Lì‰Û«u7¾ÅHQ˜”M¿/ô‹‡ƒ¥±…%˜2ì dDÌFÖ5³3ÝHÃ: V|îºb+s­{AÞñÏÙ—v€" ×ÞE®ùBtÉËNî%œl"è}Ê Låªàaæ,×cÁ?Ö˜êËÃ^cƒ“xaQE;Y× +–¾ +6 ¬²¢‚ü*˜>ÒÙéÖ`…töªl±Ãoi?·ÜwG’¸‚Ûý‰v¿ØR-ÌOÌhúCg1+ÔéñPšÑZåã Ìã h¾§<¥xD ì±¢§ÈA ãcGTX±¦"Góûzü¾~~_¨Ü1ÞËô{µ|3qâÜpÐJfö€U,Ù”êS>C@È.~zÀ’¦–Ô£8Acé.¸J°Ü+ÇÏœWÇ˦ØyœçgÒ üÿaFÆm©§/¥1pÕKi ¡Ï¿ÂÆ …¿.¥!Pw¼ÎÖHi”‹¨§½-–¦´ë=\åNo‹ñÊزö¢S‰©…2‘^‚Çí˜2×€­T%"2À¢O¡<ÀÚ­è4Öþö3Ÿö*òéÚ"JªK\§–שyÇÅIi'³†sò|†MÊ@$yÊ„`±#É:«ˆ$Ÿ’qÎG’Ä­YvJZUz—eÇ„I.Š %µuVzF޲ZÑÜÁ(·rȹ3)Ûy]$󉤑Kò7åÄZum†´®º…СB´»ÒÏúÌ|]°'ÛºT]°'MV¿«‹}oº¥*ŒNX‚g]hBw2ýÓ;%µW :¤J +k¯üÜq˜¿ˆ¶w^À½(À‡ŽBSôqz¸8M‘"©‡€‰cœÎxÇzØÂÇiÈì0È}µIöü÷S²>é‡éîé*¨ϾP3"[Öö”çÞ,^¶2¤'ÿ °³æ>VƨD{†¤Ó)ûgdÿ¹ÑZ÷J¿»?(22­Ä×éÇi„€»Ì–=õ!ŽÙ0¼¦:æ¾à©öÒ…ÀPÙ:Áô÷rF%¢g€\G%½p€Â†™1.¥T¸5õ {žŸÞBï0ÏSÝþp“^ŸE^XžS{5Ö€ö+Íä*eiLÏט „âhcðkLôy4¦çÜ\º¿c%mL{I“øZ¥ˆ ±Ûl±Vÿû@£Ž&-½ÃȧžšfàîÑ>IfOeþ~ûTì‡s–SAN…£bÚÀo¯Û‹J¢ :ãŒBiÆÅQæã¥u\EUÄ+r ³hï j¸ó•LDwFYN»ƒÿ“¹à ð¦ÁV9盜~Ííðækº®VMf‚=Û”¹ÍÀš_cëR9cå~†oOÛzÔ‹™)ÛJzÏXIb{~VIN§:Œ8)ûq#Ê>À=V§EYŠƒ8ynêh¥ :äé Èð¡X¢ŠhsÚÖnkSÚ.Kéo7]o·9µ§ŽñU¬]BÂçVg‡¹m×\Ô¡„-Úü1¸mdIÅ Ä­'“µwO¿¢‡ãݼQ]âìtg÷~K¶Ènï ã‡`Z»z®’JRezî‡?Uª=;L܆Ùn¶Ä®¿Ùl7/ 3ž«êh„)¬Ô4§¦,A¾Ó½šn æ©„9ÆFQF}ÈÖvýéÅ +¬ÀdhƳÖÄ×¶Ê~¨˜õŶû‹½³¢Aô[÷ºÔ ¯“5 ó—A¹(†¸õüâ‹:H,ºÞOÎcꮚÚÿè®zÍn˜÷):1à æƒ¨¥|φƒ]t'ëI|{WIO"©öb’þjø(Š"‹ÅµWº”pkUçÙüÙ ¼¹¶=s¶‚Î#6Œ˜Ÿ!{NWPi™ X»8aš±v„öÌÓ]Ê+8Éñ]Æ.“To’Ü; º<êá”ËHœË™¹t9 øã†”/¯”ÿ!ÉpWªl׿F’1Ôb6.M'éáÚ&LM3A¬-­{ËKYêH}âï2e¨=š¾xÅe,í…ŽO{õsºMÒ—tÎ,C×®b„Žk§p¥uܺ©ÅõÛûËÂЫœ‘Ë6.VX(é]†rCÉtÏJ»ôÛ®æt>¡r¦ö7©<Øÿ‰ÒÔ–‚îÖª±OJÖ…1Î •n'Á:žúØ‹`lYËV®‹ðB¾hpzÏ=±\H{h”8KV‡–÷Ð2ŸëÜ"ȱ»JBH1„îV‚­‡ìš2»<ì·ç–I’\ÐÔ5ÙT>©Â<&EvìÙ'{¿³eHç‚È›·§`×õ©=‹_Ù è +äÄhêã`®< 5g˜Æ2µ·%êNÖÆ¼¨ËP¾hŒèZXS¯™æ?†&tõh.©g›lìMÖ"“ÿô½ÚuÖêÕ©kèž ˆ­]ÉÆ¸ íeŽG{ës¶ÍϕǙ\AùÖI[§~N°ôäU%Á1žÐõ>h3T¥o3ðæ×m‰¥J†›9F‘S¥Ädí*öæÛò²>):ÏRC,Ågxž.Ñ M? Ø`<…óâáÉÛÞjLŠ\“)Œ€sŽ;sèJîBªA”N>'ˆ÷ð‹Á:.>d†ƒ1–® ÈT”V½! +¶=P]bÈdS_ +úr ÄŒ>L¤M½OÈÉw˜ØƒFâÃË´t…ɱ¶B·¿RäÀŒÒ0†\Ú¡õñ—bä.³›yx®²šã4°ÐÛ¥o¸| š«Nµ4>.M§ëÙ¦34J“6îfhuñ–hG “î} M±kïì‹âÔÒ^èø´W?§Û}ÉæJ2Ê_b3”Æ$ã9RŠ>zác&?[°¡<†+$ü|A£¸Š#VrYU¼¹‚`®6Ùˆ’N’óH›MD^rÈŽßyG‰.—š—Kn‹àÝyÅ è˜K€#>ttîˆÕ,-æ3É8äâ£Ä0…Ô½%Ø4¶¥]¶Ow¾i#”i£Šr¨ÏâµYÕ–rõ4®>Ä |Õ䈤´¾=åQ@s!º2„É$n;ÃêO)rkžB£3/°·¸ÚG-Ï-C–ˆ+H4m<`ÍMy­-±abfKv_[ñ§4ФErú9æ´p•ЊI W¦KÌë·ÙH2)ÿÓó–6ü8çÑ=¥µ;®bû˜÷¼„#!ÓÝk 2Ó†‰Õ6$Ë(”h¬å9:½ +Nž`£ì[K£æˆ$Ÿîa ÂÊÅíðéÀ–’•[¦¿Ôú ¯€½QÚ¬“• |@!ÔЇ…TLŒaÉ©yz«1û•$%¼¨Ñr"Eö¥=Ô’”ÝÐ@2±«Er|•:7ðON«bó|p0S±ú±¡œ}ø#È‹©&‚½Ó¹-ÙDboÖl"­3ÿÿ­j?%Ëö:±¼hOѱ2ЧÚªÇb»–܃+úÃPIÞvôu¿Ä·ÙùëùþÓ@—åãÔn—öl®IkI3‡Pï—Üê¹Ì­GhxðžÌŠí£®¢ˆ_U…–%_³ö¶4Ç<s>tçb~•‡(÷¹H o2Ú}2°ÏÖГ­ž­ 9}lNG©Cš.ô¹]¾< á%ùº·‚Ç«út¤aj¶¾yLy»ÌÙ›äÕU0œòã­QÅŽ’¸Í‡ [AÞ†ºXVËÕãÌ{§ÚÍ«9w3E.±ˆÉ%¡X) Ö–gJœ+rGI3:Ÿ–˜ÖKaƒ2bwòh‚Á Ý‚8ª‘ªÒð>•ÏÖE¯í«!dK¼ ³æÞ› êÒw2óƒù-ÍnXÂc U&7›¥ÈS>Xº¬õq‹–ˆõÙ^m¼e’ðŠ1·+È£>å£Á¹ùa4ýœrzŽ•-QC]U  +«Zè"!ºYÍ£¤ss¥†ÈQ~ÉIG‚èøæ65‚¨?ZžŠ¦d_áÕâU<¶Á‘½fÁ@õR»¯ØÈ§(Ã+–H]Ú¢-JŽÙNt‹íÑï>>O0·G6ZËZ—×Ù+$Áw=5Ç)1ÂW1omMp`œ”(¡ÍªB"ƒi±Ày€µMj8 ¯Ç&iÐä!R½.üåû›õò{À?(“:2?¾;á}ÿ|û¹¿Þýøã÷ÿûÏïÿþøøëýÇþx—~zýëûß~ýþ–#¤ÞõÛÉÕçÄe&ÝÉòèΖý~'‹XÎlÈÛRQëÕŸÏ fLR)$Œo˜”’çe¤ NÆ š¶[ya2ÁÚì7¢ ™iJ“ûeŠuc½uªýjÐÀˆÖ̽mû(Õ{MüS®ó¡T}šK}½ÿÌ êDê¼È‹ ‹0³…)`ÇØ™¡’œ¡C‘mtÈ(³¸ÆBEÍYª·ä¨óùã\Ø{n<§ ˜B@cŠÊ_ß[Ó!y}œ¢ÇÃT3îøci=>핾\þʉ«á“AoŒ'ž+>x¢†¹àÃ[¡¯ÃBaÙ'„‚m —挅JÅ +4’ÐÒ°¶$Ç´Œp¿¡±5YQ·6ƒM¶kFïeb?´|l ¼”xy…ø ñzBy´A»ƒÅ¤HiR±½˜ÚÚ$l·6]û|›×¨}€/O5—Jþ)“¿™Yš¹^t¹ˆ˜ï ½Ñ›Ë˧EÕµqŒ {Yb"Aq¦ ?a ‚f„PÇo4…˜J\QMmÐ/€‰µå`—Ö$¹Ü!Xk«ÎCêœèÏÓZ°>ƒCœè1-.€„ó urÜÊÌ2!Å¢2ü¾å4ÜaP`ËÕÈuÄùܼԈ1­"ÀÃò˜îK…©«Çƒ‚}¯®!:fI™Ô2ÚÅóZ¢Úºef)ŒÇXG±4ß¡¾ÙSµ ý˜h."mú(5ÏW'Š%îA÷¨J-Ö› ‡õ¶²hBkÌèl1sa4yX^AÔ}¾#4o(ý¡z{\Ïh¾‡¦/#o”[Àð tÌíÊŠ(Þ ä=Óó¶}ŘdÁýh})ˆT±~…n;2 ÉÛ#ź&¨¾6ä;¡$8uÝÓ‚'è“”¤h ½ƒÄò{+üœ¤µÙcz¬üMyµóÚ™ÁÜÿá„\Íû‘"È Âd$ƾh ¾¶d{ÿ?Õó¬îÃh¥ÕuiÎ|=ÝÕÕÕc9´¥)ÀwƒDåÁÛ9Z!ºµÍÌÍ-Q½ËÜÿ "f,«¹5ûÜT¡Ù ¡JÃPƒ9º0u0b‹m5”¸}9³ôf˜ÄØÆsï¢abÄlŒNs˜Ë~ýþÐ;¢ y89n hèq¦"/ÔåšµÃä³{7Õ÷Fì~ÑwñîDËü¤‡—) àzBñzó¥ˆK8¥ü¢ª”.µ%7)‡ d ýò¤W@Q5}EÄZ’±'™u>z“àÆ¶à¼Ö% `Ͳz'ÁtöNi¾—hJ1P‚o¸œa ý§³7 ·p’aüsÒµ˜fvÀÞ8x¯nþþB5å©v÷·4xe³B×6{ò€t£ù² ˆä‚Zmð–ìË*ní®Èr(h۽Ŗ_¦d< }¯<§äˆ:›%n7æð4¢(¢ãEaøZFtÅ„yïŸÎ"19(ÑÝNƒ Ròæ5Çú''á­`? Çx¿Ø›æ8ŒUö[šÇú–{ÕÔM¹ ŽÓYâ8ÝK§ˆ·7\æ8ž°%Ù³7 ÌñÐQŠ¢»ò h‘¤Ý«09˜µ1¨' ˆÍÕëm7tPGô‹)Xì[,vÎ%€Öw%6stXÛB{Y›ÆöŒ^Á7\!h¯e¡ÛDHd©c"äeà“6žNÂqv9_¬Æ¡‰ +u3+ åˆâ W›RÓSâ0œf[í}¦œŽòÉ®;‹OSн¤ T09¢óÞç;¢êÓÊEöq–ƒÁ“5õû“   ÛN}:{Q¾ÖF0#Ý[´É, {‰Å››ÑR!/³¸‡&ÎAæx $;ðdp$Y¿^çˆd¸°¥Á}â#@×·'žûeÄJBñ÷QœÓ=@c¶³VPßã肞–’Ÿ#ao“ò)ïî:Iy¢j#Ô£RõÉ“%¾S<æRýûuøœé‡Uœ#gÕ¾éÿË +Z¬6“W|#4t 2X\B2¥ºG©ª'Wªúø‚k¯bÊ3«„m|ÿN"Êòo‡ÿÊK-ò&‰#1ξ{÷ûþòøë‡¯¿þëÃÇŸ¿~ýþøû_¾~züéÃÏ×ÇÇoŸ^<¾}}üüåõñÏo?~{{üøüéÿûòŸ¿¿¾~}|øñøüõÓçÿø~ñéåïÿýîÏïßÕ‚u‰F¼0(} “«(+&H1tôL@¼-x[轡½dôb\hÊÓÙ‹Þ{ŸcìÀCGG.a¿j¼ ´¤ÁqÜ‘wɰ Ÿ6ßˈ¨ÀèS.…r˜:b É Ôa(¶…:<<Œ0?ãüZyé=޳°–IôIŸ…^ï…ÖWùKÇ0T©%¯°gÎ4~fÈê Asq놊í<ìœÝ¯é\¢s 1o +»Ù‘³XŽüÐÆó9 )/57ó:ô¬ï~FÜÑ3ïX,1Öìë‚T7Û×Áš¦a%Ôë0‡R_7ÔØÃo`œ +Ëg1Âjd6 ìhn€£GƒÇ‚‹cJ!!–UNoŒÕTQ +îÊá=šQxoj¤u3=<»¦$<©ò€ü¦eÈA%G£eÀ´Â…#L.‰ ‹€³ø8;†Â0·L ‘xöˆ—BËt‚zŸW‘O9#”ß·uÃ)=ÐЪŸ,XqËB±žŽTPÃÐY4Éœâ|->b0P‚)Z*½ŒêFY Ù Œé]|ßü¦PU£ˆ©à‡ïÞÀû8ò7±´˜ aØà%g\Cˆ6Ã^ªl†ìu½êFZÊðÿ*Ã÷,ÉÝKRG1pŽo¼œc8ŸWÇܳ7§tHÂŒ%‰âc銖‹“رºù …úµ¾êܤĔ€çƒä;í÷m\Ô‡„ªæ +‰pƒV4üp½‹˜‡V@“ I3з—vvN&zȸN¤¯RÌ\u¼”pÜJµRG©î÷(Q„n¥It æQ¬ÄÒû,"´dÀ—%G^([j~äŒ0•qñp®­Y–Ä&Œ‹X÷ÂÍöe 45S&lª¦Ù€Vtº= µ†Û{áÝÃt,$g„þVÄ$„*ÙpxUº+€Å0=1X¡‡ìôûÕ@Jž^CŸ»(ß©¿®c¢Ž8¿µtÔÁÇ"ò6Ð:ÍÓ©øQwA{ÏEW¸ô ÷ÿ!ho]›³Ò¡,Á­£{B ŠŽí¾[r¡’ÅWnÐha´IEGî¸2È;@×CÝ`ÈnÑut/?ìkª¾+&É BJN A1@j3gÁºX›×µHnCè^·’ÛzÝfk·š ¡3ÉKCã»P‹(tÙLòÒÆmIñt3ÈÅe9Ÿ=ƒœn=À¿OÕ¥X‰ô®«¢œƒ+¸œ/žãŒß†d”²T'ÏE N©^—»A+È«My© tNÆÀ— +òÅmöïYˆHôÞÞå}ZoT-HñÒëU¯Ãú–]6¶ÛÐll})XpÐ/QShêÑͬoX匭#ÊØz‰B¸nØ]¤Û¶^Иœ±õݶžo¸¶^Ðî»±õÙØúñˆ^´­—÷Šnj[ÏS\ÃJ‡ma•îæ×I•K0ùÅÈk1èôbC8zi0´=îNv±(V×»aÐࣖ(ÕI.PT!V\…žäÒ ”\ùVßB’+q UÉÅ"ÈÔtveýÌu“Ý›/]/…o3¾»"ãRPä´j>ÉŠVZ3í–E[²‰Œ8û$ž@ÞZ™®*S Ôo„ª~KpfΙ­ `Í+ÁP’Ù +À ¡«‡#’P&›­@У٠+ÍÙ›­€Ï^'É÷^ÓÉ1P•(^ª(PqöìÍmðjòë€"È…ÿ€å͹hæÀ융@{Ÿ#™cpðÍú ©ÏAMþAP?u™ Pù³hpsëÆ@ ¹¥  ½ìR`EŒ 6g¨*ljÖ@ ®ò“µ­O•ËP•:Üe‰ ƒhJ—$XÜë·ÅÔ c-¸Rð7†©.¸(NJF\Zí}ŽJg±C u¸FX à“Y5º .ý|Þ(@NÙø`ò•êÛ* JȆTâdíð›ñ‡Ä@… M“kGv5¾b•@Bl'É‚á¦J‹¶¸ÖÊCb€ |ïšÄ‚úì‹&±\Ûf¸Dbæ:–'Íb<¢–0#ÓÓ.‹qA€\ši$kVÎÓ8C·›\ um±Äbüø%”9€i¤:'oËŒ~(FóÒì#‹@C¶†7¾ÀSeš ÈC×Í(1dŠ +M¶§ª P´¤†ªw#ñïïL´T%,_ËrÇ{¦ +ZsIf¥ÂsãÒÉÃJOT|M0™·‰ó6PÐqMí¯3Ö”Œëº‰«Z)º)Œ¸A°ã¥¹Z‚.‚bxǦ‘ ±C¦ÔÐâ³·ê|ï^”t \õ.ý¾Œ‹Žö)n¡{ÓâŒÝéLN zS+F–­¦Ì±wÕNP×­Úit˘¾a +ž`)äçƒä;í÷m\WôU¯¨MJdtOPÃè^®"œV÷ÅG´áÎ ôm>hK(hõFölÕÊÞ8zÑ-{‚J‰»’=‰¶×¹·\Ù´¤ñ±«zü°«x¤ß¨ž %殜DcnTOЂ/›™±vÄÆÛÐÛÀJ,I›¾ŒUÄe—ôÊ h‰úû™s}í°÷ ÞºWØ{'ÞZ§ù¸(£Šâ¢B‰6aEIä‹ñ岟pc€›OÅD‹ù)Ú"ù^è½Õ&‹±ß +õFÙ½ãë`Êfø9-ÛX©A/Y¶žêâ)¯r,K’æ÷)Ú” ýû⎤¨O¡×uW`ÆBYmhÆ™AñG2$:ÝŠþbû§”vÀ„¢kVÛ(”8§cÏñÛ¤@¥Dé2‘AÚ×:FÑ{ÖÞc[ü ‹‡öˆÙwÜt)VoFÇ šóõævqs>³N´Vü÷œñýBXÝ +ëà—ÁÌÉØb@úpê†Í¤õ»?{L«‡ïÉ„™“áÊ’ë¶N€¢T“½6Ìþ˜cOÆË¬xOÃ¥ì +!6»¶Q$½J¯©ß§‡§T©Fd5£»t`ö'{lÑmØ œÓ—´†êµèP"€`²Þ¼.¾aKŸÉ+9”çE„oŒ½·6ØÆÈÕ±€5ºN:óKI±/•Ô£“ ýîw׉ +­††µÂwônÐÇSØBÈH÷H¬ò éÒ ¤«q¬²@ÞÓIi™äÊUT4|è|eĦ(ô´h‰H¢3YÎÔ¡UG/@Ü­Ù=·bÑj¡N7WÆpT༰IëÊ?P,eí3ׇôq:ÞG>6Sp…*‰¡P˜%Q¸‘½:ÊvcÂŒ—­ +×'Óv±?•°‡è½púŒxf¨r“aGwSTVÀ~¦¨Æ‚ÿzÊÿ66Ðruû ¡¦5]*©nBÒ;k7BCG³Ådß]¢áÎúêù«»„qf>Æ–­ZŠŸm‚ÎRŠ!¢Àâ·`G‚ p.£ùPì#'wh‘KT+†Œþ)]åŒQ&¢Àv9U´„l‡ +šþ¥e;vÅ,6CE°¦*I· CéÆú}â†R%Ö¹ÙÜPtÌ\§;y§Ò§K +–q¶KÓc™Méz3û0Þ¥Ùæ.³³Ð:RÞèYhJσk AgÙ£Xçš ª‚ö4œatì¥J…úAcŒëÊg¥bu¥‘|瘛´³ÒÚêØ­rv¾ÛÕ¹D¬Õ™KAÔÏŽLI!–1\(Z¥ÔƇ‚]1ô£`·‰ë­n|‡Ÿ¹;Mï9Ú•@Ð8³Õ½"«L »ƒl±Ûùaó:²'hKë%u~XôÌ>Aç‡|,…cCïûJb¨H;?ä Å– ÀQÛ¼eC„ñø@aâÿJ‰T8_Ší&vã { ã$­Ñ]ñ§TŠM`N}+ÜêAÇgÎçh;üÓ³Û(”^N­Ÿð“?ºæÊ¯®÷âWÇÀa£íñ\¿ _ú1Ëã™?ŒÁÀ¦Ñír(P^Ÿk’q¦_P¶Õg`i¼ôY#IéPRý>1pò$ªd¡ê/qŠóâ\+4§¸!'àxi³†ÒôP¾½&ÀL9FšËì<‰À4·btÚ´„â¦)2ùtçëK嘠«1Xgtu läõ%ºê¤b§3©/îשƒ(Oj6¹Ó([34Vï]LÛWñÿmé j†¼Ç—  km¤»bi5;Z†ž/Ø@`–¦+d0§×S“ÖÕS 5„bå”Á«¦ô{RS$ cÏÐÚ_jŠ+€çÆ•*trJt9EFq› 5­E@Éno”hè7ÙÞ/BL%ãﱆ=…—èH,䫆( ¥î(— +iØ×‘ªå}À}IYUÚˆûè@s^ÓºY–6}7S¬¶3{«‘3 r5Yzº½q@ƒŠø²¯£8i/¡æu°0¥X|4¡gYŸÑƒÃ@)ÆÒx°üüUP¼_zöS±Pq3^¥<”v‹€½¯¿@G}¶µ³¹ØP~…{*)~Ÿ„†R%«J—¢gø†”‡¬<³Y‹]éɾÀ¾]÷… Ÿó6h +c÷ä)ʧcù‰æ‚fìœÝÜXÐ4»«rÇç’“ ¨M(_zºuP,†½J”+AøÕ˜vh'²oÛŽœU6c? {Èê<´ŽâlNÆÖ™àÍ5].¢—ŽŒé±²Æjw0Fÿ”°6£Ü‚yLŠÑ½ŒE®Í¹ÇÇaSмîelr-9Ý3Ôé^RçÎG÷MÑëž ¡xÝãØ«{|ìÕ=΀ÊZ“UÊø^Ú-ÌvÑŲG0Q® a\¾=îNñ1F‰u™ò*H,5£¬!zO˜ì,[Uïn„ +:ìֱдæX‘uü;]hG{[å#'|Ðy,ý¼¢G³‘¾øàVKÆšXF[/ƒíJ†…ì ×L@‘ª%5Ãܬ".RúcZd¾OO¥ y*øÃZ³3r¹@ïBvFò™k ÚX!è¶ ÄK¶èŒœ ƒÖuW>«½„Më9AQ´ÖÈð> ý^œ ¶ß9I m挜Ü+`ôY#'hKÙ9¦ËôL ,©O[ @añº»0&A ÝsƒIBñ4–´Èš%/'0x ß‡âÁ!ý«(ë3X™ìµûÁÖ@ûz@<­›R¨ÓgE§ÏDtÙiîdÄ~AÒpI³øhåΜ ¹vuŸ ö´™¤ÑR°è¯ûý¿$áÜu3-?V4¿ z©¾^Q£õÁ•;S­pÔÍWÒ7u÷} ÇŽ’ ²ã6XH ñ]ÂÿÚ%Œ»ƒ6ÈÖþ»/a¢%Ï䂆}f–ÙÈ–Å„3,ÅüdJü” (|;ĺ=(Ì^-?=–ç"‚â%ž‚d×Ol‹b(–¸¿u#c—ï?´Ñ©0¬ -×m°ÂhµÙQ¬¡¹×¾ÿïo8ù·M†Ãè? þÒ0÷·ÿ<Ü"ð?¾Ë¹n†¢½Wñ6`›"Å_;i2ãÉ"Üx2öþÛ€¤@ñÉ餫+ÄŹÂw–¨-UYÞDh•u)¥:ì›|õYQ‘UT“Ê<Íf¹ èÇVÕPÊÁ¦vÇÓ5:զʼ¦@PÒZQú¨ZÍ 7‘‹5]Ò!\@R]©b6K-•Ã0FH†±ÃZ$kT,)=ÄÊÐÂj¥JaßûÍ`–rØ®t+ì.¹¼ 4’ý"Aü›õñ÷ÖOßo{WÌm”ïÿdFÞ¥óz)49#â½—Ã{œÅ0,ßabð¬ÞC~]Ä“éĨ—S%Š­Ùç‘ µánÒ︠´t4xÙ{¼d´.ô;Þ~W´éØ,½äô7èqŸ&V¹G»fTÓ˜» +x2Ô]¨ÌÌÇ%$ݽš!ŠbýÆ¥˜æ¡®™!˔冣VCžÕ5ô;Gm)jyrUV!ñÓ)Ë|eþ¾‘m1êR â¥NLD«Ç}˜}iÈ1ôÓjIרr;n4åÿ_o¯·‡ç?¯·ç·×x{ùÉ›»ýEÇßòÀLت'õåõ}¼=¶W7Þ—Oç‡ÀwæS›'ÊÏŸœz|úâe›fêYÙÔ”¥Î=ÉÔDn´ž¦¿Šˆ(’Î|)'¾¡+?³òDöf¾¡wüàðG!tNü]ùäºöºr‹ÑMò÷þlhçó?Å“:4»O_3J>/Border[0 0 0]/OC 998 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 997 0 obj <> endobj 998 0 obj <> endobj 982 0 obj [999 0 R] endobj 983 0 obj <>stream +H‰|WË®eG ߯8Cdw½R‰<@‘ˆ@Iÿ@Ô‚ ÈâïY®½]ÛM÷äÞu×ñ±——«\_|ûð—o^~øÆ½¾þö›×›{ÑÿÿòöáãG÷ò¯ËW‹¾÷ñþ¹zµªÕÒ®š[ì¯ïo¿ûÃ_üþÏ?¼¾xýüÛoÿõ¿ÿøO„üÂçzùìâ}k“¾û_þÝÌÆïÙüø'üðŸ×[Jþ¾®ãßë}üº¿2~m¯_ßÅœsŸC×g±~}ûÇÛOwOáNàÃ_þô¯ŸùÛëË/~ÿ-"¿¾újü)'ÿ|:úö|Û;Ðòü¼ÐóWB.ᵚ±Oo9Ö3~[Qô÷}šYË<}åç§¶>\îþ\ K[_®vç7Ñ +™u[Ÿž´uõ +w~‹¹°-¢þîÿ“sž9Gw¹àÓý¹j”s„>Å缡;†Ï´Úúkÿ4cÈ9@µæsÚ™¶"êïþ4•6õp¹åºV:scûFCËe* +xd׫¿ÏaBñK¹Q_#sSL1´•¥hª˜‘…±9BF‡ÓSuMRÐ ASÿœ 'ý úã¼ì-?f§üø4`üE5¨ÑBu€ ÈÎj¡º¨Æh¡º@ª0TÚpàT`Ö5F¨1‚„êD?ŒjŒàèÝ>‚w©]%Æ3]`9“ÐGº@Só±éê0ßgº@cˆ2] 8üdº@q–ËtºRzZ7´aÁxuX°¿ä‘:úÜ«è¶8ô#ˆ~dò},¢ù*èGýŠ~DÑ|eôC´w-Ú‘D;¨Ž°Êãù¥|[ŒòpGŒr€O>£šÏIBeWÄDÆ«ÕUÌ3QâÌûÈxa*sy #D*}šöH Èz$Ð\}ŸŽ¹’P=@rÎ=„úuµ>9ŠÞ’­Ñ®Ãa˜z嘴]îhÒ.ø v‰Â.TÍÎiRªÍn³]ú8Ü’°K¿<ìâ…_úå ¿P¡èŸ›~¦\8Š7 sòÕ|6 •]†©è…‹I8¦ŠEèvL½ y†ÁÚ ÃDa 0L†ÁÓ©a`°Kv©84´]€v¡’©‘rçÂÊ«ýRüåqÀTå˜)‘{;ß–Êx9턆ʱžŽÚ´cÕŽZµc€8&ŸŽ…„â¥cFÆ-±t9ZxG áÁgTóyë"©ð®[—¿ãOÇz£÷Öå®ÇøÓ2@!S?C “OÇ­8bêéBá™vz(NÊytñÒž©§gFÑw„Ó3´¿;0NϤ«Æäö¡b±é%¢[h°Ö4ÁgTó¹ôÍzñMW1ß$n²»éÊF V€2ç‹{=è¢éŠÆâ›h?R=HÈ&õ,zÔ'1¶£èšŽ5&zÞcb«lÁ2¾nà3ªù¤øKÉÎõSR fÞZ¤„bû©§¤@QÖܪI u›L·¤@¡L‰§¤@q8qŠ—f8%J{h?%%4ôÙ@^e©êÔ®5v°<Ï6F¡DêNœ”^ÆÅ]ËdÂÅ•ç$ñ2™0Ì>M=Ë$P,“SŒg™„›!g›rÞËd¢Coz†—IøÆ+سL¡X&³2ÍÈX™&Т[ºaš“Ϩæ³ip dç½0 ®˜& Ó5LƒkÀ0 ]^Î!К¢œC ¦ñÂ4tehÓàÊ0L¦ñÂ4TuØ‘íAZ‹Û“t€e¼¶ŒÇWGç…e£šÏ†ÁS6;q¬-ËõœÐc*n¿à% ¿Tázßú^„_ð¾…_¼ð ¸Ûó‘ýBÏޢ𠞽ðK~jø…ŠI½è†Ô¹wáÇDí¬pLŽÁÇ4á˜D÷ìÂ2@qÈá™H¶–‰hߪ-aÏT…c"„¯¥(ÇŒ|cŽñäek“|F5Ÿ–Úd€z½É +Ëda™€½ÀÏicË…e²°ŒÇ.?òcûÅÁœiŽ ã »eg­¾¡}nõü5øaðcõj¬¾„ê-¨±úªW_ Æê ÔX} Õ[ Pcõ%T¯¾£jcõZ«Õ—”ØW_Ú>|C÷bEw¡û ÃÆ%Õ¼@Å.¸®ÆËíÝŠÁ ˜qlúDßLFÑãs¥ô ô\2î%¢‡ÖÓmz9´P6Tñ)6,ÿÄ—Q˜?#Ùü‰*¾âÓÕÕG¹Ø.½{ø âW:$iŽ>CgTó75ue…Œ^1¨Ø©[NôǦOTñÍd}zd§OР?-ÝhÔDŸ"i#(þŒdó'ªøv>’¿Éœ¯Žre¯ÕüˆÓ«”$š%ø[$›Ï¨æÛùHþj×Î_¨æ³ÒبZÏQô‹QÍG$(—E¿$E²ùŒj¾àoÊñ]xêè旫C /ôü-’ÍgTóí|$ufç/TóY9ÜuÐGÈó€š8Ð-õ}űéŒj¾™Œ o—Y¼‚¿ÝùmÛù×ÕΨæ—ç5ðnFÑ›†Í/âM¡¿ùÝŒ¢wð]Êâ<™¨æÌ£KUì’¿"Ù|F5ßÎGò×V´×»PQï¦\¾œ¡£šè%ZºÐ_ð·H6ŸQÍ·ó‘ü¥ø†>Œj~À]§õ—üÉæ3ªùv>’¿:³×»PQ列Çë3Æ,ôaTñcÃ.ãå}$ù+’ÍŸ¨î—™â/åÀ‡>Ièèâ#R‡rEè/ù3’ÍŸ¨î—™â¯ÎìõNTÖ»)W/l± +}ÕüüÄ|7£è~Ù|F5ßÎGò—ràCŸ*ôaTóóöŠÕQt¿l~¯^ýÍïfÕ¯£Þ…Šz7åÒÀOBF5ßã~T÷‘äo‘l>£šoç#ùK9ð¡Oú0ªùû‰KMè/ù+’ÍgTóí|$uf¯w¡¢ÞÐ._;)QqRææïý-]%¸ð?¶ËW¯†Â½WñVp­y ±S¤0-F"ÉþÛJW‡ÆHΞ®Hñ£¨t©Êð6MÈÈo¬²Îw¯dû·ªüö~”ÿœ¼³æ“­*?ö`Ì?ÒV²ý[ÕõfîGùÏÉ;k>ÙªòSõ}ªü{%Û¿U]oæ~”ÿT–³æ%ïï?¾}|úüçÏ_ÿüüû¯/_>ÿøöÇ÷è?¾~ýí;~Êx¿”àsçRícÞ/áq…«·æðÚúÇý×Kûõ)ãaë›p^ÚYQû׌‡·b­ï+¤ö%­–kŸo“’'¢ª«i¾pð–³A.ýéÅ¿ÞÔZÙ* +i®‹\xÕÖj˜j ©õ¥æ–†b/ÛókÅÖ‡JFÁ¡@ë9¾Ô!c UŽøâq—úÔõˆÓk¼ö³Žmߪò››QöøŽÌ¾Ee§`ŽiØCëó¯­â¥*?­„·×x‘«,ÿ^ÉöoUùíý(?aÊ¿ô§f×q—Ú`Õw‡?µ8ÒS{çµH_E)%^‹ôWºm—Ò[‹ã¯š+¢é÷Ô#¯EÚf/EÔ"rjÑ¡´}àçyDyž3¾Ð¥ýÕñDÈ™¨ìvú@j¨.nZJBEˆ~‡òôúTÚN‡Ëmz]+}y;zÚCËeç3RwÄæzõ㬆Jÿ3U_Ç2N$¦Y¸f:I¬é-îæÑ^Õ{jB3æšf: ôD) nO|—*`ÅŠÙ¶íž|—ÿ¢O/¢ZGÛKTîÔ­Î!ìgÛ¾Uå77£ì»§Üö-Jû)ÙË~DÃþ–,·¿¢ÚÌ>{« dÇÛÀ©ûñ‹ª{¨FÝ“ªëªQ÷ÙuO¢®{cÔ=©ªîS·êžT]÷#G«îOßùT}/«ïA5úT£ï‘ªûŽC÷=ˆFß'·ûÞ¹"hkú"تº˜(n}Ñ(ÿ^ÉöoUùíýHÿIxj4ÚñtCË9·ÌÓ 5afo<ݤ:Ü +<ÝPcˆ2ÝP1݈tCô9ÉtCu¥•w"¼À›lEKÕ+>ŸJ½Hø¯•lÿRµßÞôŸntû*ý§02<=GQ^KÕ~¬„ƒÎ¢¼¤ÿ¬dû—ªýö~¤ÿ´¶üD£áE´T‚.Ç‘<ÿø*ø‚ÿLm6Á¦]ízZüCÿQðŸŸÁ¡%àŸþGXåxn‹ë8/Uçu]pÿRåñŸþO‰Ê®ˆþ©'–·ýCD„{ßoûºp[ÞÕþ#rTúýCDû¯¼ýC}ó=Û?©ªýCDý÷Ý¥gû'Õ¿ïœÓþGÈ»ýÐ:ÖmÑ œ–ªñ.Øg)^à*ü×J¶©ÚoïGúÈ·ÿ¨Ò@ëè©/‡¦WÔn¬Ì‚€UØÏ:¶}©ÚonFÚÄíé@»´ëCŸÑ`Sf4Øø$ÀŽìN<Ä(Àî¸ÙÚsÝÇÔ“ØýñÛs²; +U“Ma„’Ú×Q^ª8Ê bî_ª<úƒ6% +ƒ·@»>©º˜ÛPdl×'‚mvE–ʾc_´!í&Ю¯A€]‰ÐX9Ø—±ª6\ǤÁH HI œ¤­*²‹{P…%sR¥ÿZÉö/UûíýHÿf˜ù*ý3x`òœ¦­j?Vg‘êüg%Û¿Tí·÷#ý›cä$kº‹<.îªùù!¦ßôUÍ7Ö±r¾¡6Í7©šo¨Uñ ±€ïÌù„â%ß÷^ª8ÐC²ð/UÀæ{¤*»Êù†êÀ·ç|“ʦ“Á7ÖîàÛsÀ¡"KñMøÎœo¨PWN8© ¼1Â!bþèN*¯œðò\€[°°&j©špªZ” Vø¯•lÿRµßÞô–oÿQ¥ÿ°Fi¢–ªýø/ƒXé?+Ùþ¥j¿½é?,<¼\O‚ðôÔ.W~.UäçBƒû—*óy€¡/g—0é)&`’ç'0éÉ0 cMé‰ÄtALzb¥fĉª‰I††1vÝÄ@õI\‰#ä:F(Þ¸rbáºUL*háX‰ ý×J¶©ÚoïGúw)’ߥ,Æ­j? +λTyA+ÿYÉö/UûíýHÿF›Å{Tï)ÝÛ©Úÿ¢!üK•ùÜà—’ë¨¹åýÊ} 5DW9PSñ-sHuWU ¢ŽKä@ xZŠ¡ÔR`P^kï@jè{T| 1‡T&§Ù C®ä94\*ò°wƒ€Œë +]ªöÃ\wA€ð_+Ùþ¥j¿½é?µ ¿Q¡KÕ~Ì.ÒV²ýKÕ~{?Òظã=ªˆ÷ …ÓïÖð…)áÅ•÷Xñ…P±^ÚÍ{…¤ºx9s(„ZQýmWÿ +¡bþë{þC!ÄŒKa5úw(„šJcGü +ðRu€ fî_ª,€ƒ8æá켈câY Õ@ó°8MÉ^ÜqkŠòŽƒZ€¸ˆÓì¬G!ˆCâ^ N1‡uÉ]0S¦Å+‚²À½¬ò™PKUþØÞ"üÏ\Ekû·ª7÷£ü5øT@-Uù±RjE+ý{%Û¿U ¸¹å?(ßñnUÆ{>üÎ Àý À=îŸßÁw|ãídðW’æ$úßxï¦ø¾â;ªß"™û_Uÿæ;ö'á +>¨|7Î7©²p¾¡â±Úç›Tw=åß=®ðÀù†êÀwâ|“ +¾=ã›ê|7Î7©à;r¾GÌ!eÅ7eZðMYßÉàµÂƒOKÕþL5SšàUø¯•lÿRµßÞôÒàOUð´TíÏx: × ^¥ÿ¬dû—ªýö~¤ÿ|Ç{Tïá{ú%ßP+ø.œo¨EñM¢‹oˆ|xxCM±ï;lâ 1j¼¡à$Þwx—ªÃ[ sÿRåñ¼3¶åÄí ±6:'Nw#ʤ;?¥øVÝPAwátg{Ê%7JLE Ägìbl.¸à/õ ïøCƉø6üÆ*+{%Û¿Uå·÷£ü§¯tÏ×åÕ½–ªü¡¡ª; +ÿYÉöoUwSs?Êúüè^Yt¯¥*?VòèkUtGéß+Ùþ­ênjîGùOß¼ãݪŒ÷jD—ÿ¨†5"îU•ÏÝžðKÑí jÖí‰T6cö5¡=íF4Û©Î÷ ëhOÑgÊž4f‚t"ýiuÙ (¯hP7(RÃ;å5b©¨EdçÞxƒ¢< A­ŠøýÇ·OŸÿüù럟ÿõñåËçßþøþáóÇׯ¿}ÇOhDO +>OC¢/þ5 W\½5GϨÖ?î¿^Ú¯O°?½ ç¥õ·]#€§£ÿ!©¨Eœd§: ­nh%¡ãо!¢pc~ÅZhh$5µV¶èþªkã¤H-èªSÅAµ¾ÔŒy¨èµe{ÑVç|C¥í†•CßCÀqv½Ô"æC”áÿ}ƒÛî‚ÇBÁ¦Gpjÿé.{\Ûn +÷ÅÁ¶þµ.b§Ha S0Œ Eàù·YÔ–H‰¤› œuÖå‘(~µìÇ·³jüîbŒ½¬ÿ²³èØzIžöôŽùÃØMiNéPŸ"Z⊯£l?Gòý¬¿¿íŸGˆîŒo¦«0ꪬ­íœÇ{øW%Îôô9p%Òo¢’ÊU‰„®­Ä‰ÂËu´*qNï¼ßÏJ¤û¿Ìûý¬D‚|´¦*‘¶!•1Gj­ÇiЍOóÛÝ:¶³èØ‘&¤ìKS œ<”V›jÂŒYA»]*öy©~jÄã•óvÛ§Þ6¶·çDc©é­3:»0VG-öÝ*>,5ö¼½h‹¹Nõm’Ñ ÷ÛßË»#àÿÆ.ùþ½÷ÊÛ0ŒFg‘¡°êKT뼆fB}ûV­ÿ Ï1­£&‡í-w^çPv‰ãÛY5~w1ÆÎ=å´³¨íR´‡]Dcç¢=í,:ö|^¨Á´UùóSùPÊ'ÕV>T§òkð*ŸT[ùØSù¤ÚÊ/ë|RmåÏ,íÊ—Î73ª:_MNçƒèt>¨Nç#Õv>œ†Óùjô:ß<9î|rEÐÒìEÀª¹˜h×ö¢1~ŽäûY5~=Ú/é.ïzIr²¡ìw¤$â~FÉ&u=#dCÝÏÈ#Ùåågä‘l¨ûy$ª¼#ÏRbw#Úªí[ùÁðÄþt£ØÖâû·jýþz´_zÑéÕúwYT¼Fͪ¸¶jýˆ„c®ª¸´_"ùþ­Z¿¿å?[}²Óî2^6y [Œ3?ÔNöñ›`?ÝìWê°¹)ö+=%¹˜6ûPÁ~VìW<ËŠ¿! _ú´‹´‹QnŠã0UæqUœ~Q­÷~JS MõþŒ®*›Y­"¶Èë^­??è¿ïöîÖŸñ}Ü W뇊ÖßïÖµ¢õ3ß_ë'Õ¶~¨8ÝÁ=úký¤Fyæ¬Ö?7Í­_@üæ¨pڪœr®ÊDòý[µ~=Ú/ Ÿ~Q­ƒ6€ÐGÇAÓ­q€YR°*»Äñí[µ~w1Ê~@ü>h7…vj.Ø” 6~`çìA8ä¬À¸Ô^ærƒ=æÀSØã‰;*²Ç²i©ƒöq‡ªò€øô‹jýmJ†n…6Ò´‹b*v™ÛýAÆ_…vGš_±m¨‰2~£ÝŸØ“Àî +ìŽËØ‚ Õ›¶Üçœq‘Ú2"¿9Ý$±jÈná©H]½IÕþ#’ïߪõûëÑ~føò‹jý 3ø`Š7M¬Z?"³|ÃjüÉ÷oÕúýõ(¿pÜf@Cw‹OÄÅÝ-ß3?o„ƒoúMÃ7ƒ‰Üo¾¡¾–oR-ßP»åjßõæ{n#µ¨ù>óPÕq +É—_Të_|ÏDÕÐo¾¡ðo¾I½Æ“É7bðoÀ¡"Mãæ›Dð]o¾¡v\Ýý&œTþÞ„7ZLá‘`N*ï7ásÓ_„›Ø†È–¨­Z ½ÞZVÄ*ÿÉ÷oÕúýõh¿°|úEµþÍZƒÇµUëG$‡Xí—H¾«Öï¯Gù–^aExAU• W–ÀqäçPU~8N¿¨Ö¿‘¡_®¡*dp@&)dŠšè?dÊSd +rÑøöÚÌ@3C1Sž f^Å T‡™B55ªbj,êRœ›îsˆºÀ+“Nnw‰²j) MœÊòO7ŠAà/ü[µ~=ÚÏÅHþPªYµ~”\ ¥ß%müÉ÷oÕúýõh?Ã}íWTµ_)ÞÓ¨ÚÏp\~Qmü…¾i5„q#µ¾•_[ RSýFjÁ1×RÃQÖPQÉ-ß@Mx_ªÁÔœJº ÌöÁ¯Ã…©i0p‹¹ëTÚb€rZåÁa«È>V‡Š9ÞÖèV­?¡bŠå?"ùþ­Z¿¿í—ê…ߩѭZ?&‡í—H¾«Öï¯Gû…Žs¿¢ªýÊ`øùþæ`X°®Zy°øCˆï wïo0$5dyç|ƒ!ÔŽâ¹øç`# wä5B­¸v‘®Áji}Žn7âÇöUoO`>ý¢ÚtlÄ1×£BC1¯ +q¨âŠÄiTŽú–ƒÚAªºå "c!*Äi€¶ˆ£Ä¡ñ¨§]'¾æfʵzIPð1:ÀƧ £UµUãÏ/Õ~ùi¿Dòý¬ZÀÝõ¿ ?€* +¨­?"  Ö°ÚÏ‘|?«pw=Æ/(ŸûeUï÷|úC¼O¶€®ø&frëŠo<Ÿ¾ñPrøÆJhìS|ãWÁ÷kø>v'ªÙ|úYu²±øÎã)¸ÂÕÃjßïÍ7©Øe»ù†Šë[n¾I ÇkîãjÄžn¾¡ð]n¾Ißñæ›ê|¿7ߤ‚ï|ó=wJ5|S®ß”|,¯¿¿Š§­Z¥²i¯âUùH¾«Öï¯Gû…4øÁSWtU”Jk¸Îû˜… 5Q_…Ö + +™Ž™´ÙW!Ö†®·ÄøõU¨`±±š(3S ïWim.1}aQhïØ*új*ºmcï×W¡Æš¦JËÅ%†Wç†ó:Bä«£,â:Aq7¼=7gb,»Äñí¬¿»c/«'\v{nÔÈžÞñ=ÇjÃÕ ÆÕø)Ò¨%®ø:Êös$ßϪñûëÑþy„ô60^…QWem­)çñþU‰3=ý›v%Òo¢’ÊU‰ªÏTâDáå:Z•H**±©JËwÕ8hJlMU"mC*‘Úuš"êÓlˤܟ昑¤±“T§·EjÂó‹Iùn R±ÃÈ;LõóF¼]9ßmѨS·±½Í8~jzkã|♫ÃñÝ,¤âÃwÜèúy{n‹8Õ·I>S§9iª±¼;îÞu_=Ôv<áˆ0®®­*T±Òè¦ý ûV­ÿ`Ï18[²·hÜè½NßPv‰ãÛY5~w1ÆÎå´³¨íR²‡]DÇþÕìíþ4Ǽ`¯Ñk¸–t Xu?¿1u_ƒW÷¤Úº‡êÔ} ^Ý“jë»qêžT[÷Pº'ÕÖýÿé.{\Ërç^Å[Á£ Làð ÃýöŸº¨#ŠÉÎõªu%ª>jV‰s/]oTu=šL׃èt=¨N×#Õv=܆ÓõJðºÞ¼¹Ýõäó@[³­šÚ~dŒ¯äû·jüþ~´_Ê;?"¹ØPö#râ~DJ±IåG¤ê~DJ±s—G¤ê~DJ±¡È£ƒ”õ¹Û«¶k% .Õ‡”ÿXÉ÷³jýþ~´_:ÑéÕú98JRábÕú±®¹¨pi¿¬äûYµ~?Ê4¶òIN»KŸv7lg}è u²ßûñf¿P‡MU±_ð6ì;LÌ>T°ŸûoʬFoˆèg…>"rå;q\桪˔Åm_¢usç§"•§ªÎŸðò”£¬ÆÜ»^?}Ð};{¹ñ'”¨ŽÝW㇊ÆßîÆµ ñoºßÆOªmüPq·cwè·ñ“ä³ÿ<ônü‚^ (JP0±já®té¬Ê¬äûYµ~?Ú/Ÿ~Q­Ÿ1h©/KK´n¬È¢BUÙeßΪõ»›Qöáþ»*°Û§¤ì`M•ÑXãuº±„CJ +ëOZßT2ÖcŽ;Ya=ð÷¼æz`‹–k:D¬Ù€}\䡪‹†oû­›Á¦"•')°Û'ì¬È†Š3FEvÃx_»»¡Hu^l¨»+°Û'´¨°†¬›Âºa+k¨Ötä6gŒ‹Óš°rOñæh«†k¬XPºrsªýÇJ¾ŸUë÷÷£ý›àË/ªõ/Èà°…p³´UëÇJ ,ݨ¿¬äûYµ~?Ê/£†Å²]2•F³tÏú4¼ºé7 ÝXL¤vÓ µ[ºIµtCm–n¨t—›îyŒXƒ¦û¼ÎCU×¹AVö%Z÷¢{–©<í¦êºÃM7©×`2éÆ¿è7ÞøŠ4nºIÝå¦ÿjøl·›oRÁw¿ù¦€ïxóM*øn7ßóÐï +7¯+[žXµ|gz·Õ¤xUþc%ßϪõûûÑ~!ùô‹jýLZÅeybÕú±’ëöËJ¾ŸUë÷÷£üÉO®gdÅwþ´”ŸóƒÅhõ9TUaã¶/ѺúÝòLþT0YMò/0ùS`2šº¿\L T31¨2ˆéŠ˜LÉ7ÄäF†Q1PCVÄyè6ǧ ¼n1ã¤zt«˜\W(¿ÝU ?ñ³jýþ~´G‘üO.jXܪõ#p{Úøe%ßϪõûûÑþöu^QÕywvO»ˆÖ½ÀPvV­€¿Ôò<ãjée¿²¤Æô´¨¹†^nH}ŽP¿@EŽkº€ñ®T#!©)æx@umc¿ +¤Æ±q[ÌSÇ\÷7x5Ôè©e ¬¢y<Å! ÀcʪõGÀêP(ÿ±’ïgÕúýýh¿d~'¡¬Z?f‡í—•|?«ÖïïGû…󼢪óÊHøúþÌ‘0g¼¶Ê*Þ‘bï!ïÞýŽ„¤>I^8ïHµ!ü}‡Ž„P1üí~¼FB¨é ¡æÚæØv~œND{8Fù¶³jý 8fáò„ Ç0 À‹ª8†ap‘ƒþÂAm9é/Ô +Àƒœg 8bà€8:îOœ L•V/ªð®á“QÑ¢pbÕøS§ÔèŸöËJ¾«ow?Æ/ Áœ²Â‰UãÇJ U…«öï•|ÿV-Þî~Œ_@>Ï»U}ÞïéÂ…wø$‹wÀw%dE7DÐÝÝx89tã‰äÐ'|Šn¼†@w×t‡Û¢s6æø¶/Õñ/ºÓød|¾ÕƒjÝý¦›Tœ±ÞtCÅ3µç›nRŸã÷Ò 5àóoº¡¢^O¾é&t‡›nJèî7ݤ‚îtÓ=Os1tS¥ÝTÐZÛ§£¢MÑĪõ +MíŠVå?Vòý¬Z¿¿íÎàMMÑĪõÔNѪý²’ïgÕúýýh¿p|žWTu^¡ûõßtCk »^tC¬†nŸ¤à†xÏ­n¨9ÉÌ¸à†š,ÜP#àÎ +îól"Ú£1Æ·Uëg¸Ë§—G}¹!6°ÛEM'/Ûù +»+2Û…~zTÅvÁ;6Õ Ø.øÂ¶ýæe¶¡‚í¤ØFÀvSlCuئCÇœ5Û³Ðe E7 +º“C+^¾(iV4±jýB£§Ú¬äûYµ~?Ú/œÁšª¢‰UëŸκ¢Uûe%ßϪõûûÑ~áø<¯¨ê¼ÝÓ›<éΟºûM÷\, …7T|¼«â;ÑØÞ °Iï„N’›¢;á¢Z­šîãl"Ú£1Ç·Uëgº#Žÿ­«äOÅ·s¨@m5‚Œëlø®ß!ȳN*Õ-ë0’Œ#ĘT "Ue  c\2È*thNÑ™YêѸÔ5¯#£ëº_•KTÑ{êʨd¦b@)OU™©Èó(]…êX Ifê'#3Ie¦âþP •™Š[¨¥¨ÌT1•n237\“ÊLGœ1Â9™ÿ™ñëÌ "3Ue-#©Ì@Eãè*3hí‰;ÏŽL§*­[”ÌàÛ€Ì •|]P¥ 2Ó)ü=©Ì W#3UejÝÝdg†]»‰ UŸ(™Y‡‘È lª.ò%2Ö²n\"3à«1Jd ¢ýÎ }Œ™zg&Íñ6–;34¾"3ýÎ ºè3Ñdfî¸Þ‘ÁþŽ&1Û}FÜ*/ô@^ÒzP„¤Z ‰h1ñŽ =Scç…T”(Üy¡‡òRï¼ÐS yÉw^HE^Úzz„•ã—rÇe¹î +í¼¼UýÎË[‡Kµ]Ÿ" ÁüYZê“ðë¨ÑöK?wý[5þ½Ò·»ŠÙï7ûàU„¿PÛ.«ãˆÚðë1ûyúÈý§~V­ŸWúvW±ûñýz?r^|ãÖƒä~êWu?üGÝUì~|ÿÿ ¯v\[n˜Ï*î^[ÿ`8{¼ãÁp`œý§Sê–DŠdÛÙ½<¥jŠ*QEyN{·ì˜h·â”Ü[ø;ãµïÖˆ¶4ŸÎýnÝZ ìÝz*ºüǶ èËô>Ûµ P+áZÅÖ’pº#ºœÖ6-¦º\õ6-n88/MË}p­ìƒ[¦‚0l¢†ÍBÔ°YÞ[6 —Ö°Y>X6 QÃf!jÚ¬'ciÍ}zñY ÎoDz1Z>ZF Qm´FP-D £5¢Úh! Ãh!j­ÕF Qm´FP­{ˆÑzê,ÖSëJ;X´aäF±bL~hP¸hsÚ¤û€I±8×Å…Hsíy!ž¤â©¯íq2ÐH÷‘´S_w Ö7bìøOÆ÷´Äƒ¶ì^Z(á™^¶ÐQ©Ü©0DñøÊÑoDû¾/Kbˆbg©žCu’³ßˆV'g?Dšb=%6¢Í÷SavÝG=±ž»7í[‘sþJL’ W3%3⹊Gц 8 „( +”D"îÕ’ (Ž{¥ +„( +ÔDà"P . +„(^ Y¡ˆ ”bB´Í6NŠWBšºƒùŠÈ~?ó g”-Ϻp¾P’ÜEF´×äEÎWAN¢ g P Ñ…3z~ÉEtáŒãók¼ ß—ýnÌ.\çߺ ž·aÂË>\¯ˆ­WчaŽÐ‡“hÄõ~E®xËWA¨×Q¦u®»Wl8ÏÍP®ãBÍþN}¸Ž÷¤eч+ˆ>1¢hÄA4â±éq˜Z(uç7â³ +ѹãZ%jhke6MG[ËóÈI4ÚïóÑ$Ñ ŠW© Ñô+@4Mˆ¦ã}ðB4…½¢é¨}ÌU‰æÎ¸øS4ÁCÐ-zC4„g¢ax)šñ]Ñe8Q¿¨ëǼ/R(*' O®ØÄË9…ð|P1XT>6^æÃðl4`x=xïR='“Ç`‚”ò+^L6 Ï&ƒEçcãe>ääXý)ªÎ+3¨A"áGõ‡JÆ„«\¼5…²¨Ük²¦PƒEãy-5‹ÎÇÆ¿ÖþÐZzCÉñ«²£JÊä–L¼º*Ï«o°¨|l¼Ê‡ðl» ¯÷›«EQQÎÁd\-Í¢ñì¸ —ÇK¯3¿+;ªäLﶉW·eãÛ¢YT>6^å<ä,êÉ¢r¿x˜[Ïñ/¯ áùuÑ,:ÿZÿãzÑ~…ÞØÃÈë¿£²>ìÉ4ñ²þ„çõ7XT>6^ð¨Oõ§¨¨˜Rëòx5‰‚³êkŒ —gE{egÅö*{ƒSUØóácÓíÅM“µm%w[”æ!ŠÁeŽ3Û¦hÇIœ6 Ñ/ÜN›†(ÌÛ2d˦ÝcY+Û0-›öd\òi»îÙ®NÛ.†g¶ŽáO[—:îÆAnÉ>ˆÂv–Üû—4j±‹ â]ÁÅyTpDSLÂèŽhFÃQÁ;Ú£0º#ZêšÅVG3Ó9=i%Š΄ +86ˆ"Ī +ÈñT@Ž—¼K5'ˆ5(f”5)ÌáèŽvìý˜ŽF4åò1(Ê4Ç·5ÝÑêfvk:Q)”c:º£m ¸k:ÑŠ™ÈÓÑm)–c:zvíÛ’ÍšŽR‡7h‚ ÜÑÄ‘I¨B4q¿«B4qdUŠM¼Fá¼ ¢}n…4“.Ít¡™tyܺ.D36ÒJQ¢‰³oœ¢)äj¤hÏECx)š»TMh&c°|B3ˆbëEh&£bZ3yTi^sÒ ¢u–™$S.É4!™2Ƙî…dÊå!”$$ƒ($Ó…dÆžqÂJ2cKÝe!™p9H¦’q#“(ãpˆNv‡/¦„`ìpHIQ-w%¦Á¸+C0Mfl£•¬ãöäÉö|)Cx.ÂKÁÜ…’‚ —‡`ª ¢PA‚ WÈ«$˜0ª¤ƒ¨L¸’!˜0Ìù„çcáµµêsŠ£(*Ç.0aJ¯x9FžQšEçcãÏ|ø»OõgQQîL¼¨?óú[,*¯ò!<ÇŸçu[6Ô§õçQY0¡rõÖŸã©þ‹ÎÇÆË|èÉåõßQUzŒM¼ªÿÆõ×,*¯ò!¦‘e±:têàÿîuû¿ïxÑóü›a(Ƹø÷¾¿f§63„m<2²Øþú½Že¿¥2d1â:¾÷†aCRžÝ +o æ×ÏmxMÚö8©å G4Æ…üŠjübú˜,o|ùc²ü“FâÚžj/4ía’¸="\¹¿Zñ¦(üâ§rÅû§áN³«áY¯ç|*Ýx vɧ¦ð9ùå|Kõ€~ò©ÞÎÞâ1<\êË “δþ<§î|œK¨þØôüÉõ«¶ñÓÇäÑ 6×ÇæÙ+Ò˜®dJ°0>4µ`@#üþ TÊ$i4~S}l–‘ úäêUÂsҊܱ`ÿb\ZŸPN<¼ìƒVYi¢½‚È^V¨}À¡Õ§Q!á}›$?ÖXØXqìƒÂêDvdEa¹²çá=\ÂÏ`ÀÖ6ÂQÞU9&¬À©¦Ã`, ÞÐi«0X’…Ág’ä¯ +Í~ø+ÉÂsOw¯:ü•Á¢ëC†É`Ùð]·~PhìôWrñV€¿°—ôØ–VkD8¢w=Jþ?ÝÕ–eË +ÂFt{áÁAíùÿÞ¨X‚Uç«W'¦Ô-À5d ü•òm—>¾ã Å+ߊ×wœ è®]ÅêïÇWÜúÓàZj{}üˆ[Ê®†¿ç8ñ#þë¸Ùêoç]?>ãU{´@_qË{Þ†•9 ÂWÜ‹¡lXÀy–ß_qŠšÙZY»üøŒ_ÿ8Á"î‰ãgÜú‚64q¡â–__ñA‡ ¨Mª3» ‹ßyÇ\(SïÏ8cót+^ßñ¯ŒoÕûHïïlEéÎ=¸k¿?ô(äs–9p"º†™Ô?­Â¿­1Î) ÇÊèõ½ž +BÕâF¼à1ÞÅ›2¾¬y 3(nÊ­•µ3š¶«oÆÖW¬:a*ØÙ nÊ)ÍœÈé¯7ò·ÀD˜š"þÒ…ñ ¢t. nâJßµOÅøÜ‚;Þ2œê¢L!ÆQd!ÁÅØz‹.¸vÎApS¦@µ´i‡7e +i”×å@SõŠ›2~äŠkJ–SÜ”)Ì•F›ô™ñ¦¶‚qÆ s…Â+.j+Ðcú„›ÔîqSSÇ$¡ +zÆicÔV $.¸cD«AqQ[Qò¨Ã¨ŠT„SP\Ô[ÑUþ¥˜ÔVÔÜ&𲿑±(_ì½þÅìõÜSYÛÎdö‚‹ÚЬ}=Q™µ+üDš0¢Ô×ó7µ¡³CUØã¦L‘šH^ƒÂ7e +R¡Îg§º©];[£6a ³>nßÔîdó +œ$ÔBE¿©]ÑKí+œ -9ô¾›2ãˆë°D=žê¦vŸÉI,õ‹ª\Œ­ÏBœJÊa‡›Ú½ºm! ßÔo5ÑžEÛ‚«úòù¦L!¨ª« kÑ«#¯¹3ÃaQ{NUñL n»þMí_*ÁfL¸–ÐÃoj¿_³‹\íõbvši#£Ê§ŸÚÔî®Ô‡•Ìè!noÊB£Bm•bM¸˜Ý)çœ0`”®˜7eõ9'îërÚ²÷ojw¿,R&Ü{¡ÐËnjw¿Œ@˜,•êÚ7µ{Y¢¶àÜ[TÜÔî3%µ:áZZì~7+:`¼‘ðGE(S ¯•‰ÂQh3cëÐ#ü‡ó,TÅ nj+ý˦œc—¹)S”9±Å |³DñäR–á>¿ìXÏc¦Ü¨_Ÿ÷Å$e'H"aÞGÓ˜cs~$ìP/hH½EÁäꔜì=Qµ×óËvÕâ`_Ïã×¢r³ég**7{L…íAs‘Ñà˜üîã-”J: +¶ë-Ø+(Ûl’ø©RCAªöE§®Í‘;¿G´ý™ ûqI›½²;{Ëþì)ÛqˆtîÝvH-Øw¥Üt]§so.\ìkmMº‚ +¦‡Î½kUq°Slb{¤Nçæ¥åä`ßÉÖ(šÆ8ÐÏÅá•ÄÁ¾e4µtí‚}©‹‡‚2–®õiàC‘ÈþõÕZVÑñT=%.ÈÁ¾õ!ôm{‡'Ô1©ôî`§@Ÿ›þÆC=ù—´Úõœd3ç™TåTÂÞÄÁA@ÛIvÖrÕÎö +üvyQ’õC0P¿¾±ØúÚ¥}&üwÛ$eqpPd»7QqsÖ{Em}9Ï®äæ¸¬âà  ‘±ƒbw4|σúõ¥lÇ]*;A‘îàèѳí€pÞ"‘6™GWí§&Оê—Ö¡PâêÙ‚¤d{\¤)j.n NÅÁ~ @vÙö(î'ñÍÁÿ5„Ü©Rm +£¤tw*̃ö +É´~waên|‹ƒ{E+u]•»§£`ñ°Wp%£¨îš0kܰWT®ë×mšvMŠl§Zp²™‚ݰ1ý ~}ãÂdÊ·Cm*Z°W¤²Ç¸äla!v°WPâõ⬽CA ö^D»…(·ÖνaßÔÁ^!ZW¢!@¹? +Þsí‚ÃpÙìggü{^œw^.88ªd™†’ÄçÅ«pr°W±¢Paßä(v^.8¸0 ‹âT Ý˨ýö + ˆ¦ÈZÎÍóø…|º(tss¼“‡½B´,ª`ò;7Oõn–€øÕó¹8Šfw°WV£ÐꟋëˆu{EÂÍ•JêG±3yÁÞ顦®ß=wJÏÅU‡>pp“VÝÐ*ÎФÒrv°TµCO¬këäá`?óVäDõ(’%ò‚½™ìÍ*hBb?¨ sï`¯@}\7L˜PΘU¹³ƒ½Va +QßÏEªCƒÃeKòót^#K{‡‹>`‡¢vP‘Êâ`¯(ÝR–´œD±W{ Û¿~Eâ.ÏÒÕ¶^°WÔ1åL +w}âP´“‡½‚²Ýy× +₽®£ïþ—™NJCs°÷ÑcL\ÌëssáÞ<ì¥Í Uùd T™¥gÃÞyἨœOJžþÀÞyä-Òôd äÜêw¥¼…JO +^º;Øûhp²(„÷‡­kiveO;¬ÇxÚ[ðN(s^ábl=´}€U$úÛHØêÑ*Ò@ ªnX~1¿ÇÊ&ÓÐèør葱õ)ÍWk0ÃWƒ ÄÏ*JâG<ês £‹±õÑ\p7”ñÔcëm¨ãá>8¬¿[oÝ?F'‰ñ™Ÿ½yžù 4…rŒ‰¾mÄ;RHó.à¨ÎN8…Fô¦ö‘Z_(NLá +cë‘y¢…)æÙÅØzΙ×g0FÁM™F`¦FCX ‰ySû™Q½ÇÖ#I¤„ê}S;ŒšÈ‚E¯±í¦LQ;M«Pþj+±aßÔ¥¨cú OŦ1ÛÖKðbÂúŽâW®ÑÓÄîT·‡÷p+*ý[±¨­@}Î F߾ƼHméôg ůǽ©ß´®­cIô䵤Óx'ü÷,rQ±l¤Œ¦•úWáx¨ßöTmŽ Ðe·"µ£V¯N¸¤z™§‹Ú‘ÞêBkãXž.f—§TòÚ½!‚›Úª$]°`x në¦L‘ë2HfðòN7e +jjá7Š~SV¥0ƒÍëVòôM™¢áŒ:á„©N‚¢Ê0ë˜iaÛs(ÒÑÏ›5Ô‹Ùeþa~ÿÄÊ1» ÂZϯàAcº˜ý’×)+·ËžDf?u)ë”â³E"’௒¼ãh;PáÁÂŽ)$Äidv*À4O4£©…p1±¸Îa(fçÅl 3ƒäµü&®Õ¹eI_«±W·>Lìðõxî°<2{}íc0Â/€›…|1{=JÆü…1Ir²¡oBv‘ºy‹ì€R}¿³¡oBøæ"Oǵô`Õ\ëA˜è› ®Ò-‚uÔ¸ÖóÐ}Hô<ôDŸ­¬ç¡'ú&”o‚ñ„ʇF/÷¡ }bNgèMôM@5¹mè“€‘VîCú& yŸÑ=Ñ7ùÊ·‰¾ ÂîCú$ˆ6™z }äÓ¦ž ›˜Ý‰®Œ›è›@zeÜDŸ„\ó•q} +=2ÎÐ7!é#ã }b~dœ¡oBˆŒ3ô=E–úÈ8Cð…0M pÁPG()N3ê•uMj6~î[5Ô²â]¡d¨#@!#¹‹÷D=A”Æxâ£ÊêÕ~Œ:¶DµÜùc¨'Ì}È©õ.Þõó…¦i›©°œ 7QOH9Ú…0–sKõm©›b9[âý˜ÖÀn ˜)nÿŽzâˆÇ\Gù¬bõãl“gäMÔÏDÔµm3q¾¤ÒD=W4FM‚Žº õ”5»£‚Öt†ÞDýØC¬f’oîò9ç´L“€9ð>´¡ž a\k‰ß(ë u„ŒZn&©åÊ·‰z×b[’r—î‰z‚T¶‡k‰uÚPO¨ªj¦x—î‰úñ"ÙNÂ]º'ê ©Œ[Êz—î‰zB v朵ÞÑm¨÷‡R&ÎõŽnC¡TKh¼¸Þ m¨'@mÙ–Ð5ôNhC=A8Ø%%yTŒzwÍöh SÜ}bC¿õA^îê ±ŒWF@]Bi¢ž*Û¸¤K(MÔ0x؉‘Ùl3Ô*WãXÙf¨#TŠdu›Ã=ïMÔ8Œä‰zÏ{õ„¤Å"³î#Û õ„öŽÝÂå‘l†zTM{èHé‘l†:ÉÈ Œ ÷ õ¼ü0=âŽd† CJL3Ô2GK¼Å#Ó õ„’Ýhèuæ$ê MwKÉD3Ôù£ V Š/µ=@ïN¨f‰õI&ê ,£÷‡ å~C=!§ÐL„Çæ+Ó&ê …ºX€I•iõ-ZÌÄ%Ÿõt¢Ž€_%3A™œ‡ž¨'àfB’^™6QO`TT3É-&ê )…h¦tË…‰z›Ý’Æ[.LÔ¤’ÝR©·\˜¨'hÔd¦rË…‰zBÍó ù– uJö…ïIo¢ž€3/ÜU~€ÞµÚ+àºéLç‰zBŽ#VEˆîº*±™X/q>Ñ7r¸lè“pwrÃÞΈŽû }Ђï°3ôMˆüÈ5CŸ„Tïo¢oB)\3ôMÈé‘k†¾ L\3ôM€¾½mè“!öÈ5C߉|¿³¡o׫ÎOôM yäš¡OB¬uðí^Â#× }0~>>ÐÑ7!âÆoBGß„@—0Ÿè“@¥\Â|¢oBNõ~gC}«Â0€2¯‹ÓY´•´ŽxÇ$MyN²þ|;¸uenÊN{…¤Ë½ƒÞ=†&5a AïtpÓ¥i +Å#–•ÂÓÝ@/Yj–œVMUÎ Ý4Q+ÍÂTÜY±í…zi½°Y°ÏuØ¢1.Ôûã¤Y ¯WQÄýš¿¡› +LÉ,WM„²´Pï×/Ÿ¸®’ˆÂ©q¡·†……d©ɪ´ÐM$·Y–€½Î›“­b¨÷/¤Ý­¹Ž›j¢…z÷,cyhñ´üÓðïè6„Ú†æ¼ÜYÇ"ñðŽ9ôgÒq¹G;¬¡Þ?Ô¶û‚Sè*;íÊÓB·©‰¡Bš%畲‚?ÝÆ²Ò‚<ÿÚ>å;èÝ¥ ¹Ò÷µ–}l™è6&æËåG!ñ¾ËÏUÚ•Mt›CkíÛÌ_©…P¨u¡ÞŸRìÓVne êü[jõ*•Us!‘…zÿ>ÂRjZ¹•…K\¨÷[¨`ÅuÜ,9.Ô»'þIWj¡JÚö õþ¸ž %æ•Z9;ÔûYô”Wjeæ”êü›&îÇ•Rómâšêý‹›dI_Êszï^§`À÷¿PËÙÊB½; ÷m +-eˆÓªƒÞ›ÚY`ÈZVb%Í‘êü[y1‹¤•X-¹ëB½¿DíûÄm/‘°É¸PïHµõIã÷´)³%¢¡Þu±¯„ê¼2 •—ÒBÒjžJ¤ïi¡ÕbY¨÷—Þ…`IèÇŸ?Y<èÝyxG _ CPÄzoÊÑÖ ¼ÒŠkoÚuþ\Cé…6½ªd`t¨÷G÷è+qvíŸñ¤²PïŸ,ì™]ûÇKyÔ»S»Üf!×ÿ•Ú¡Î?ªDÄ*RÌRêÝñVÝ€FöE*k¦…zwÌ<柨|?†Ã‰:DR0 éš#špY¨÷OãY­î‹äXÔ¡Þâ¨?;^™%Ù“êüƒØ‡q þ.?¦ªºPïŽñ¢—pkyh‚²ÐÏŸjb+…´+F¨²…zÿ<Š{»À/Ö <*/ÔûS°ã†¬+±¨] sW„^¿}¨˜•Whã£õþÐK¶þýbmá‰:ÿ’z«‡ŠÖºR‹PHêB¿@”k·ˆ„, õë—ÒÖHâDsîh·PZ‹k0ov›~ç³wÜ`Úf›Û4‘Ckö€[ÂoAqš#M§°×çÓô;;,ŠU‡##/÷æ»›~§œ––®€´Ñ®œÓ`@a·Œ¸´ÿM Ÿ¦Á€ÜkiWÛ§i0P¨Å`l{GNÓdÌ/CÌíÉaþCEN5î_8M“QºòŒ ßg’Ó4ZÖF>¥m:=M×70VP|ÃL“Á=•büÑ|Lb§i¿©øÓä=njZ¦¨MjÎ5ïç>Mó½IÕà¤I·sŸ¦…˜ZJ‡#½ûFkGÉ,èc³~M½¿·/söRä6M†´ÒÔOaZ7Æa:×cܦcWŒ~A¾PݦßítW^–áùª)¤ýêÛžNÓ`d¥-T!жOœ¦Á‹ÕHBùÏ8M£Þ¢'µj$ÕámŒ¢›P‚5úÒv›ö©pwŠgœ¦OµÇü^a+"·éë¹g~†ÊßnÓ\´£¦#b¯dþ®nÓ` r’}úP¡·i¦“ÖÔQŒ;q¯ž»eøCmU$„-ýNÓl4D©ÃEAã4 a¨-†8ä]" y4L§¦k .ö 3)~Éá{ðJu®Óa¯ÑZ· úz~妱 ÚÄ«ðŒ?©.b¹zØËcíR¯·Ö6¤L†UoÆŒ2:à§1+v©öãrÕƒlÕOõBÞTû/vØL%}E-„è»} ²ÛŽ«#5½á`Ïd™Qnè#LÍÐAçŽ`Èv߈+Yµƒû°ðÁžh߆„—¯ÌÉÁŽQC,4ªMÍÕÕ§àaÏ@2ÛKJô:6D_u°g4Š™ÇëÜš8;ØË"¨:»ô€Ö½N^ûóÁžQªíʾMá‡è3xKS»“Ç“Ž83Ø3XÉÂ#ô|œ Tžâ`ÏÓµmÄPþNV“ƒ=Mz˜Š|þx>ú@¯#F73äX—¿Iÿù.—,‰Qžhú!øjî¿VÖô®— ‚Äao)–»ô2÷ž_-íÄãJDZÅ2ÔÐ/Ø_¡?Ùƒ½1H,löÛ³¡ ;|Å•"+žêžõN„žjÃaoäJËÈí-<Ý);ì MvÕšôÈ?Á:ÛÃaoè¥ÇÓ…õÖëyìy}ZjKy8ø#cË[x¬GxqØY/¢+|ð[x\¬º6öF± Dsùoá±pê{CG{Fm.®°ž}ÝaoT&û´Ut×>F•&{£­oRõ²÷¾xËë{¾2snëºË¼/®QZöÆ(«b¤»ßÔ[–—ú¯«Ø¾ºTzó,ë0ÕaoèÖn?W3 —“5Ó<_ì i=䳩s~é¯+âÎ$«" _†T{B©>1SÏÕao苯¦RÓ›ãÙN¶/CVÉÎ.cïȨ4Ù#òxNÞ#Ôáè%ÈZ{+/óm_|_ÛÖV¡rœežóšm£—Àlï—õû¿È5;z «!µwOËQ<¾ú¯ÝŽ»¼u— ¯mÖð-¬í†+¿uço4\>?©¯Ý޳ ¹´5u†/c¬ë“‹zlsqØ=­_Eze|— ¤F߆½¸)ù]bwãû5ºÍ¶îÀî&)et‡/£e›mââ*Oj‡áÇ¥äÊBú:%'½ú벟-:¯®ò´ŠÃ`}èvKïTÔç0}1\€ú9Ò;šq»ÃWUôý Í>ï¬ÏÈ/¾ žA—5òŠ+¼el|Õv›KJ›Ô`L|”×3´Ž ƒ=J›¨ºÒ{‰½¡CðlêÃ%Š×0|eæmj.Q8£}…èn´Œâ…3Ê'Qh8™µ¬Mì…3ø“(DO†õŒä…3Ò'QHâbÏÐKNonø:÷Öt4‘ú]‡‹^«ÅcmÉì’æðuvK·%Ò4Œ»ZëÝ ßù ÛoÒT\·5G†¯Ô2Ø~o­º¾†4røJF•×`%9!×òRß_/zk(j~_cj{#õacÉ(Ùí¶c­ÃWL´ŒF®üJŽ^‰35û´Ñùí²æÂèj¹Úì ?YùYÈá+8ë|ZSbî^¾Ây^kM·?újvÔÇÿ¾Ê[ëÜ•žÅ›úþ2š½_ÉWžä¨r¦5%Wx:£Íao¤*özz"Öw¶ud‡ý-¬±šj©ï‚Òšoƒú³ìŸ³µ%}C« +jº&òS ºÞ£Ò“á´a]átúcZ³A7¡µ¾c¸îl{@#×/‰c€áI·ÍÓÿÄõN9?§¬6tÚi. â¿‹^¬ž†3òw€Ó÷ý\|>É‘c¯ª úz´ž3ÏB¹¾]ëݸ®‰÷_CÄùS^ŠÖÎîþ%~7mj™Â$žàIãûõÎ0þ$g›âœz\$Ï ÿ¿^¿CœÞU«¼=·B÷)óßüÜYübúاsÑ[›<¿Áú vÞ‹ãcŸŽzÑ—h÷ú?0tÎúl5Ötæý;†ëŸôÉöóú8ƒ9ýŸ“Šü’þàzêÅqUÜÙë®§vœszýæï§¿þ[Çú¤çƒÄAb7-ß1Nç¤öð/xÀý¥“®D?ÿ~åØqø5wG&­Ù ïïÀúnìð1NÓût'_òý†?ã~:žBÇ÷­´Põ zî=ÿèÏ®]ï~O_µ>›´ŠŒÝ4 ùKµ BËÕ_‹[?Ù‚@ËúE-k`CBlúUß¼¿—Ô4ü$MÀÐ¥G±üþNã öÊ…Þ×^ã,ŠûS$L ½ýØny†±ÑØ2ïǘe”Œ‰±ñœ6À˜éÉcјÔ“¥ÞÛ0Œ ½ã6`LŒ\,ö~Œ‰±¡àÍ C#õNàÍ ccÞ¶¢116 +'ðæ†±¡Á¼¹a`Ðß2›oŒ¦ËcC/7áÍ7Ækycbl¤ÜÃjßÏL…ÜÒZ¨ó±¡·4ôŒ‰±ATÁ›†Fë#ÖàÆØÐ{/˜ÃØ(,ècƒS¬Á¡QG‹5¸16Z!´³OŒ ­5ÆÄØàsÞ\w\ƒO’]ƒ—114¤Ó®AoƆôQ116² ÆÄØ Þ5xC£ôÑK4 c£VðˆIqÿ’xoÃØÐ½¼·ahäÑ*˜qÃØh¥‚7Œ !3n SŒal$°Ö Cƒ;ðæ†±!£€77Œ|2ÆeäC›èdŒË C¯ãd oÆF=ã2ꌡMådŒË(?2†6ñÉ—Á?2ý¥ÑQÆFT†±!z5ÆÄØà‘Ð3&ƆÞÀ|Fú=ÇÜ5ÅܹÅÜTÐË04ú Xƒc£öXƒcc^_£116˜c n 6F¬Á±Ñj¬Á±!9ÖàÆØÈ‰ÃJÜà0XöׯNá¼Ù•<Â06r¸16Hbn pöĽk`¶ c£È³mÌ̶ahèm¡ƒunzbƒun¢ÕŒ‰±‘SÜÛ6ÆFùbchä.¨ú c£‚|±162Ècƒ*ª>ÃÐà‘Á2œ÷o UŸal” +~Ò¤¸?T{†±‘(¦û¡A­Åt¿16¤ ú3ŒL¨þ c#uT†¡‘º ú3ŒÊí½ÑÕ&ŽbAC¶DaR,ÐI^ ,hü鵋o ‡b¡\á…†cÅÓTN¬ðBÁ©âiâ“*¼À8T{¾£{޶î‰ÌÔ™p!uÇç—kßD}.7ƒËRAÈFÅ[×óƒ¯áoÈd¢²>óœïWßMIÖá4†‡Ç2‡FÖßëøwê‰;dD組8@zTä74‰‘¬k«+•£CzCF ä%”2õÄ2‚RëyÊhôÜ BWE×Od>O8_iÑ!#îþÅÚ’5­O¥äûŠ7´‰’˲fê~ÒzC›H¨ A BFhíÝ6©sÓ27¥Zi æoÇÚ2’Dçð Ò—\KჸCFÔ,¼®sîq‡Œ`m}}lÎ)ku‡Œ@¥•ð:]ku‡ŒÈŒ#0eG><îÜ.Ô§Zµ ùƒ{EìyMÙ2N„ŸIßhó2Fáò“Ö2‚»ZÎéÈnoèºc6Ë™¢û·C;+¤JÕf´PGV¸B–yPAÊ’¥¶Àež;´3h] òôéohçuÜ”õ¢Qϼ~…ví@sÖ–ŒêÈÒwhW3ªk=вkÔŸÈ®¯™çq†Ü$åïíª{¹ŒKõ³\²ÎŸW5òxC»Ûi5õ%«xâ‘•Ô–ƒ®îåí>/¡-Yîå íî³ô’mÎRw;‚%5)vtÒٯޡݧÌSëxbÉwèœipiP[8ši~!#Jʺ˜wá î(½´^ÄÄý˜Íî$"ëEâáq‡Œ@™ã%#]ê1iÝ¡IT´5YšLêj`2BÚhhf*.ÙÕŽ dD#²"tvVAÈô6ì4ÔõÄ2-ZËA BF`°“UL 3Ûáz<¦3BÝù±Ø$1ùÔãyäžÁOd¯zïZ!BÎú†ØÖðâO> •߈‰¡u';"wÁx5C¸Xå#˜ÈÉA› Æ¿3ÍÙè§z@¥Ù»sýV/ÄF³Ü—GÏÔý“O´»½ÚówÇ9w'¿c„vÉ@µí§ú޵KÍçó£;ëÜßÇçëµX$§êÞ¯3ÓoÙ J–‹˜]iis·‹5¬HÐßùÈ­‘—½‡”R.bxÈêQnbZ¬á +µò(¼ÈvÉÞ£Ñþª1=ˆ"bzH6Ïï ¢šdv²÷¨«lxböãu÷ã1<ˆ›½,ëg™H>õPºöóùÕð'}Ÿïg;8£ßq¢”’8Ùà¦ö‹µšÃIL‹j ‹‰î»ÈKÛZ®™ {ggü#¦Gjãm7—N¿zŒÑÖiÉÞ#eÍ1º=bzØÊ25úp¤x"'ûFRÕÂG î½ݨ¥Y(qþå(bÞÖSöèŽòELlÓ×I –mÀ$umV°V'{Ì@rßUbz¬¦ ¡*ùÛòšm­–ì=PùúE ”C ˆYá˜íe\¾Œ*²‚“½—]ÄœT›Ä“8«(&³oÏ1Rˆ“½º\ºˆ1Û¢gï1<0ü­^Ý¿=×\¼| (lö1=’åÏ“}§=ŒýÛóNTœì†‡®Â0,”lÍO`ô!˜Ç,TòWÉpü$;Ù[í¿ñ#†‡«M'1=ºU¡Ñ¶ÿ¶œó®@KöµÝÀ°h²—ã†Enu©£æý,p¢ÕÉÞ‚»\À°¨j b[Û$ô«L¸â¬Ÿê ¨4=ŸŸÙ¶âx~¼ÿÁ¾ƒÜ/§#Ÿiu²wH½Ö‹…÷'ÄôPK 8sò+áܲmÐ’‡vÞÿâG .Zbx”fE¾} %\‹“½‡èÚdë†ÚÅÕÒwMíW^Y[sªw@‹r÷^bXàlZ¨~›QRþ4ÿþ¢t==_Ÿø}|¾\‹½ˆË×­•\Ù0êÕE ‡D,1 ™•]ǰøÕ½Bý½G¾ xHß0,°që£TûWöÐó¥îdo¥^İPn1<ÉÀhõý:g•Ÿì<ðMóhzbxH¡ˆÓ[’¾ŽúFŒb‰nËÞ£‘‹­Äð@Ʋµ¢ô•½‚'{¤¾ˆáQ‹j@ R#Pÿ¾²WS¢âdï +Ó/bx˜Äð@K³ÖJ„¿²WsËÙÉÞÇF/bx H@ ²¯¥Ôô•½ŠŽHìlÿØ®¶l»B6£.ñ1¨;ÿßEOÔýÑ®61‡íæ-õRX ”È/…Å€×÷Aeß9’û² S øêØ.…Å@Öè‡Âb$?‚qg_yuÃ3a,¿ƒŒ~(,DŽ^Ññ¦Ó¾rL %Ì1Äñ'°&ôC`!Ìœ FÊ϶µ–Ã!d7O?……H!æ……@©t*ÊÏ·õÕ3&J!Zô-°ðÌõCa!Zðۃߌû¾­É0Ì14xú)#wQùPXŒ.^ðaîã¾pT6/öæI¤_ +‹¾- +Ĩ¡¸aMpµ»ª÷ßW ˜bÄßWm…Å@ëè +‹)Ä©daÄh¬’ú„9†u¸Ka14iüPX ÜÏü`x¨ÕCCNs ‘[`!0@æ…ðS5÷²À¤ +Á ˆwߟÂ"à!è‡Â"¨½¨X¹BÄ$K0` +ââ9ðSXˆýž + QסÇÔWÿÃДÁ#µu²[˜[jüPXŒÖÕ?8”ÕÿpgA× x+:ž[X§¾c…K¡´Šn@Œ;F®…aŽ¡þ> QZÿZ8(§Ð…»èÉ{ò„9BŒ^% + _¯_ +ÄÈn߃ÔÕü¬ž-ë>a +ѯñRXxÞø¥@õªƒj)û¾¥©7¸ sŒLõRX 9íKÈ ‹ne#Ê>©Œ:Q ¦I¦—Âb„â—1zl®ÀÔ¸ï 4Úî‚9Ælr,@ˆ„ß©_µö0J:(šºB %˜B”T/…ÅÀ,_ +ÄHð£“J)íÇàÕ"Á#Ç[`!°íþ%@¤I¡êÆ}ãGÇ£Z0…PUßøOa1ðCéK%¤ù½ Nmæ%4‚)Fí„×[„¤5~­G„ZÕ?W­ßüÍŸ ˜s¦Õ³] +‹jùT F×ì + ¿N†¢—…à­(xúâÞðTw_‚W•B0+ð¦'U³hÄëyuögPq¿û˜¢T?Ö ³ `S“’úkVˆfEK~hm¿ÙÐs!”›žÏ  ?ö œff¼g1ª”V÷k +¥Ì +d‰+²þêf€!R‚Ya¿1) ;¹C¨Ê0+Pqæ*æßvü×ÍÙL +8Œ6÷­µÙŠ"…aVHÊN鞡ȫJL˜:(Ùsp`V`™[„ëOy)Z_ 6aRà û1æ¶g2(pÑ…`V$ñZ›Ëž° ÈÍop¬ÈÍK=ü“ì·¤þt&ÌŠšæQÞVêAO¨³ c¶”`dÜG™(B0)0¦W”žv mê³"cúšFŽ}5o%fE sß8³—ƽÊëa*ç¾­´ìË(¥xL˜H o&RÚ¾Œ"ݻ҄Y¡¹Ï#Áóªû2JL^å'ÌŠ×0)‰uï[koB0)ðcþ¦¾wo?œ;Á¬ÈÁ/ +¥÷—€(„U fEé^‡QÍ~ ˆW˜ %ÌCœ·RóË¿¬ÁÏc¬"NÅòË¿Œoi³¢F/|øQÝGÂ(¡$XFZÃÞ·hòW8aVdñw "ï—.qU° ³Â²`Ré'H-—úCi}ɽ@@q/[ «$L˜*ãâ_xmi+b¯pÁ¬èy”hÓê/û"¬Ÿ¼Š“ó0›{øQ‚Y×à1Â6.qõ²…’ïc´KY+qßw€K‚YQ¢o£‰û¾J‹LŠ„æäŠŒ†4Û-B( jXT¬A¶— “B¼®â9vé})ðp†ó[0+0̵†UÙìGaÁ¤È2½(T‹¸©ÕB0+ZŸß[QöG<ïH0 4«¿ž’î*1ÔD0)J2¿·Ôí-*^, ³B[™g‚D®;Fv{¹`RÔüLPV6AÄÏ|¤h>YY [ ȱþCi}užˆ¶º²/ ÆviÞ‚1qÍ/Ò’WòKŒ$“¥Þ*Ç•{ –´L‚„6ãTlk.±q3ûÎ&LŠEfôÜu˜ºêÁ¤(ÝCäš<÷l0€Uk/AÇ£Õ9êÑölÖ(òˆ,˜P¢&VÜÔPXq’á\ļÇx)WTØ(0>å÷å + }~l÷Š›rFÁá=3êX£éçƒ +»tl/c{/åŠâ“I¶ +@¹ôA¹"*¼ä€‘U”àÔPdÛTLÆT(¤x)W”(­OXÙ§P®<¹½÷¦¬¸)W|aða ?¨¡Àu¢—Å [•û)^Ê[ë?”mª"ÅM¹"H” kçföAùLS¥‡ZÑYè«^ʨªu!ŒŸÕK­q±ù J |³æ¤¾L­éƒZæ³ÿ¡¿ZXqS—CÒ  +$VÜÔ2 +H® —Ãà~P«Å6Kà‘ü*T¬>¨Ý0%ÏäOrT«—Z½©§`I“ð“áTÜÔê4)Ž’„ •ÊôµZGí:('åûx©Õ;lèpÌ©;¿©ÝÌj4}š<ޱ²à¦–%² 8~µÔR¨Ž”ÄÿP\ÔRdzÁ?¢è)8™µ›Ë†á’ó2딢½ünf]ËM¬Õ½ØÈÐìÏÏ¿˜ug}Øãf3Öùó³^Q´Zmv#´r¼¡ƒørÍ/5=áb–jÁŽ>±š^feZж'øØ¥cýÅ,ŸÙ“ž#á‰×_̲׆Á§ Çf|ÍM­U¢÷×VŽy1{¸«óW¤Xç§õãëá¤-‰Šå„ë/Æ×7ü Pø„†³æõ³:BÌÖZÔ¼-ÿìž-ãÔNNŽr¾¦\”³åaÖ´PB9—S;Ç‹‹9ç%û9\\Ìšx +,Ϩ1%°1}_ïƒè˜Îõãë5–>ê©ÔÜìb|}Ó¿R´ó×IøêÚíiì6òò‹ñõ=´`tÌp-óú‹ë†C\¢¡¸B¶Ô³Ö÷ˆ&SgãÃøúˆ§7:wêGux˜µcÈèÅŠ$=~ÿb|}ŠIÓ´¹ðT÷RKZ×§]Á{<uî0Ê6—ˆ—Z +ìhÚ:ÌçWÝÔ:×hÍ~»v<ë—ò›n­·iûY(^j½% e˜Ó„9ã|LµÞª¶Ð¦îEÅMÙ`&[kié°©3ß`ýCè<£aúK9¤a%B\)£¬2´Äs6½˜U°l¦íñÂoÂË)ú“åña|½À’æ‘ä=Kçõ³Ë{²´Âqd¸³¼Œ¯¯Aú°_5UÞíìv€ŸgÐãaÆ×£iÙWâaæxþþÅxùÑͬÀ>d.¿ãëÓ¨Ý@K>¦«‡Ùí¦µüQ`f­¯Ýre$t=ÚÍÅøúŒ¿FÉø™ãû/f­Ç!§w(y™µ>÷4ÑöŸîj˲$a;𣠀ûßØÄ ZhU÷_sS>€ÐÊÑ.¯ÈZßqÎ^¥äH±wèTÌýðÇïйgÀ‚ÄàMïÐ:Uù €ñvO—p‡Ö=û¥1êõ~ìã-FUò*ÕÌÎß¡õö`«ì£¡æâò­× ëã…oò0_WdeÍNý«ƒh“gú\¡`ˆñ|•€yQfÜ¡Up +^91>ÊQÎȪ0pŸìu³Úa¯Èª`}–щbZõ(aWhUH“ù’^䬑Wh™æÑ[m =3îP0¤°ÙFÌã;tù ã`ޝºCÁ¨VfýŸ0nëðþwh #xÍí‹ñ£so_õŠÄznlúµïwh `ب4T–c»Bkij2¼{-šŠæ; UëòõFÞ¡`tä°ÃZLÆÚcmWlèðýlÏP0Ï›äì{‡‚Q-(îXŽáöŠüÖ#Ù1aª§½gûÃZ­^Šôœoß¡`èÌv/^Msí|‡‚!2¼v¡1S^b5n…šàBãø¢;´³Šz‘§cf}‡ƒLÜ 3z|Óz1 +‰þÁðÐb ë¿:ë+²ÖË(¿~ÞÚuuWd*ͶUïÜÂYëmÐÏ¿>÷øý+²îÙ +Šôô/¥‡zEÖKõbKçò3/»x/€ûªWJ_‘• Âösw¦Fg&œ‘XϵŸ;´„ã÷¯ÈÊæ_¿„9E&¶#—@¬Œ¼ýç}õ0ݯH¬72÷²Ô¸_sE¢Fb ø°ô¾ê©‘|Í ¯ÈªØzL¹`ë{AÝ×>-”ÌiÇú+²zŽ)éDéh¶¯Htµ‚7¢?´^­öŠÄz¢2Súõû¯ÈêÌô×~•õg°F¥íŒÍ;Ý‚£ I÷PG{{š¿ü*À‚ƒ0ƒE>llƒÁÖ9ÁùÖ(ŠòÞ4lJi Î-p˜ t{¾X©š—CΕ»Tz\U¡ëp~¢ÅjüÛØ¾­7ã Î=– +û×öY‚ÕQš³¦ûoÁá×Dzö 禌´ôm7ÙE®ÿk¥ÿ¼Ö‚3£øþZÛiõ³=?hÎûVââá3¶»E Îp.,Ûke·¸äÊd ÎL1¾=ÖùSœm‚µx±x¢²m=zmlÎá̘]ÌCŒSß T©–à\OmJ¿P±¾7nDڜءkí -, Î5ý>HϽs¤»õg쪟;ñh{ç Ç Î†ÇFüÖìkÆÂKp&´7…4dÙŒ° ÎŒBñÎ+öJ›1J·ç^(-¶QáöWáãý;œ´žh¥]õÁÐõÎíy”¨ðÝû£לм¾ST¯¢V÷¾ ¶Cœu]êr}&^œál1TÕRt1˜j|ªÃ™ñ뇿Γ7÷áÌ(ƒ}ÎÓÚo†õÊ ÎÆJûo@H¶ŸØwù=õ~¯ÆC¼§0š×ÂgÆ<=U±½ófµk‚£©Ï@8MÛûîh šà¼>*όӽïÞŠôgFÕOÊšêÞwGå N ¶V|ßöø 0FÍN߯&?[+Uö¾…H,Á™ìòCÄŒ&{çÒKüÙQt1º<ù'ê»àÄ ›uåb~òå³g83ºrhÔòäÖIKpfà)û ÒýÑB=Á™Qdøiu߇–àÄ€µcÿ`Dž D«nÎŒ®#¾ªÚ“è»d Î ææ;Ç5?hÝÍ΂3£Œ¸®õÉ@³JœàÄX€ç¤ödà(md83¤ú™À? 8È´&8ÐE㣠+= ˆ—eÁą́éÑt<)8Öcst0š·~„º<8/Á™!Zý6ow‹Z•9Á™ÑÜð T·½ÐÙ£\8œÔƒg"²0í–àÌ(î +’¶4ª‘ü'†…WF¨ÕGbhÕÍëa #Rñ¡bß5Á™Ñâ.P‰;m‚Y΂•õÒJ?ï?^ˆÃ™QJ‰Ãh¸·]g½Ipb¨ŽxŸ(gËÕƒ1º%4„|ÛpƼ¯›êzƒgBkÑh–\÷p5牧é.©ÐÍ€x £LÛ‡“>ŠöçpÒ@÷}$Æœ]e|2ʬŽÅϤr[ ÎáÎ8i4‘x ‰ id_ŒòO0Äñ7ö ‹ÉKœ4:®ãÅ€†­Vs1 ¡ÍÕ ªÙÞRNp’À°q3 1âþ.ºFíFß®ûÆqœá$¡h(õf(R¨} Ñ +ùþJ#ÝUQÑ)ÁYBZ» :g†xþ¡ÌþÙS¢mIÔBNp’XƒÅÁ€,Uûb@Ýa^†Ù±ÞüîΘwÚÍÐYÎ~çñb”Ó½t)KTš•¾J‚“Æ€™å› ?Ãúb@Cy¨‡zYåÿ´öë‰ Î&¿‰ñ`@Ãî³$B¤²fŸyн¾£xäõ +¿h£}¬Çï·Öâ—Ð;¶À4Ú#ÁY¯¼Þ HP+úÅ€Æþ¦™2´5àZ‚“F­——Ѐ‹µ/4¾ë¶RBǼ–ି¤7¥~1 ¹Ë/o6MÞMÅœ5Fmõf@C¬Ð£`¬Xdz®±5ªÕ–à¤ATŒo4p¸ôÅ€ú§•béKCð'8kÀ'êÍ€ÆÐ._ htŒúµƒ¥Ñ‡ŽghÉCq±Þ^ h4Ž,ÐÆ´ï\¸Duq8i ÒúÍ€Å#¹@ñöST4ç}åRêÚøÎl‘9‰ Vk_ hÔÞ}Ûµ¯Ý$^›ÃY'ñb@£» z1 QÚ +éPhšó¥¡Ç€ T±z3t6Þ¨¸£€AQ¾gÛÚWŽù Êá¤2©ýfèÜùñCYÃÖÝ +í!ˆðûÒ c‚F‘‰¡³=túb@^(~¬ì±‰¦ã‰×æpÖP·Ëã4ê¶-š/Úz‚“F/úÍP }>«¾Ðh=³w»´·ª”á¬Á%%1 J¢_ h Ë‡<÷±K;UÎxt3 Á=ób@ƒV"ôJ¶;9ˆ’ᬡ«0$40Ô/4ÐqhRÀ/Ù½ÊDë Ì/&) 0îûfŸ¦šÐNù&@ÁðÔ¿Pe;Šîë&‹þîh–ï< 1„Æ"þ[°V²œ¤GUu8KÀе›¡ðÖªòÅ€D—æïoHv‚cвãpÒÐRë‹:"•.4ÚªHxCOÿ›æº'8kÔaýf@ƒW{¿Ðàf±EüìsV( -ÁY5úÅ€F#®_ hP[_UzßûÀÅÓq8k ´ÉÍ€Fçu„'•ãr ¦eÅÎθQ¾Ð>úb@£p˜{šÍ{kìtu8k Ë•:¥ãÐ/FÁ¡Ð’g}`Å80œ4`ê"Åwè‹ñŸírË’èŽæø@Ôýol +ÁŒÝÊ›( +‚ñËö’éÀŒ¶~:Ù3p­i·£ËçY*\0°wô;ðïä.J±x*{ZÊy;úßÀ=¯¾`ü†|΄~òˆ~|” +ºK_k |Ža¦i©†©?…ûÈR@e?~߬s€€™{:„‘mëcRNáK<‰ì3ÛNraL;Œ.µØÝMÏ)|Ø>ÖC«ìüq;ÀÀñô2QvMØ·¿º—([&«ìe×oç‚P_0°Öö¾­œ¯@-ÉGõ´|Å€­=ñ?±å~*H iMNö„&7¢ËÑ%ˬ€^Ž$gjJÜ-ÁóßœÓú•=ƒw.;=Ùör#­y°£îB&Új±¶ìc-E0b® ÿ11r#}Äi×1üAïÕì³®ž)8ÀÀwŒ—Œ^Ùµ·ùc ««Nþ93ѸÜ0fKååCZ9}”©µƒúv,Ù3òàq;:6Lõå/¥“‚ÛÎ’£èf'{Jõ¸`d=ê>0¨Û\áíè,yÉ{ %{UKçFŸýåý9HŠöf$í·ì÷ ¥Í—A¿GEv–!pWØ_·d`¤æí¢¢9À(­*£#'K>‘S=b¤Öo”ÓÓ‘$G¦¦Š|ý­øÀî˜Nö tKývcÌþr#wc´Z~+Ž=>ØÉŽ×ãv€þr¼`$jƨ©Ð¶ÞËž¼Ì· ¦ oǘ80½úè××Q/ÚzJ+tÅ ô7~Ÿ†Æ#Ÿ3ÿhìš“=¡î¯vA̧C¸þèÛ"Oóùœ{^ö Âáv€Óaônó„ÛV?[#§™ì¾0f{Ä/BÚ¯›[:«Êþî%{Ó~ÝãH›RApµ‰jó7M}ÕŸè‡Ç‘c4Ï)£eìÆ6øqª^ÍÎ •ýø£R¿Bh£?ÂøíÇF|Ê^×d«1ítrñ  JÖ‡aª¥7Z‹SôpWØs´d‡(©ÞñBèûÓB¼ê°úIØ{çÚ´HeOÈ¥ŒÛF­åaXËB;œ![^¨ì %[Qu! «ÎÑ!ˆÂ]g5ä<\@­©#·Û1¤Ηc12ÛLÕ| +ÚkYTöŒÚj»˜/ƒ kZ·Š³ÜeZÁSÙ#ÎmwÑ!Œ4I罎v +^/5““c¦ N†ŽŽÅ ÍàRÏÖÎzÛ²gÈæºÂ`˵ècÌÝyÕ:w?/ŒdI¢²g°Ô—Œ^öçÇbÔý‰™OÅÃÉhK®²gôdIâÂè¹=Â}(¾Ì3U¸oÙ’/5ºµ–'T°ù_ã{Y¼Û©x¨Ùv¬©ì ¿3Ò91¬Ža ÑI/ÔOÅãÁ^õ\÷> pÞññiOî–ã "NŒÑ?a í8„ÁÔu• +êÊo‡s'kÔTvŒŠD§Û1Ð[U;Ž¢C8XÕ‘;:Å':;Ù3~5Ý9„aE#‚6¢ÑlQØ©Àécà—c!€×Gcÿ­ÝTÙ3Ð6äÛ! jƒ H/ºx„Ì둬_W9 úF‡ †mûèXŒj› vŠÓ¾¨ìu3çc_t£a!Põî}g½ë´ŽOå€sÞA4ËÛèjº®Ÿ\Ê΂×j74•=Õo‡0†¥Zt,†mXlý~¼ìv]ehÉ.oÎæ¯?‚(ceOBSZOËÆ¸²e'¯¦#8„ÁùåXŒf†uPoê.9Ù#¸$¾‚Ðþèv,D^‰›¤?t'zN›±äÀèã6Auw0"÷•"xT¨·ÎbËa—ÍàÏþp,Fí6UhŸÑæ,ääÀ`âÛ!?‹‘lrQiÙ[©ì#C”_a$¶%¸ÚòaèõfËÑr½Âоþv,FÙo…5ûí\990÷Û'~9ÀÀŠ[®$׈£tv²gÌšúíåñp,F[§RÂ=‰Oê6tÝÉÑ+ÝapÇbe"š†S[§Qì”ò/„aëã¡Øöï”NýkXŒêä@h¥ß0z®óáXŒ´g +{ñ¬8sf'Æl‡0êþŽàÆ¤Æ Ð£xÕ#p¸æÛ ˆfçKt,Ä^'œÅ§¶¦—Â-êvc´ùp,M{+ÐÏ‚£Æ²“=ëG·Œ‘m'GÇbÛ›˜œS[Ke:90 +ÂØ§^t,FÞŸÊ)ÒlM'F£r;„ÑúË! ä•2rJ Šu*NŒnßáÂýåXŒ}Ž5¤ëYs¢ÆNŒÉóv€«dy8£Ù™ßª;«¨T>ª'ÔÂåŠ@íõ¿Æ§=O95È\4òíDÛß‹‘­ +!Û\¬{«ÝŽ*çưψŽÅص‘˜\D™›NŒ£$œå‡0xXA”‰ƒmÊUö B#x;„Qì8ŒŽÅÀq¬òp²ü_j ÐþŠ_¼ªÞ¿ÆovNaö]BÕš¼ÍÒÙ9bðñdG:Ž€zö7nGÅÉ1lë;‡0¨Í‡CÖTšåìïŠÎÈÉ1g»ÂhÖ DGd`Sýe:Ù3Zâq;#8C»x<šÍcÉ‘-œCÌýá \2rû2T ,ïíðŒèXŒlM9X®q;Œ%F¥y;„ÑéaP„u#¥RêÄ’ÅévbØîˆŽÅH¶=P9ÓcÉUŽ «¾Î±ƒa´i­i}>–\åÀháÑ1ÛËÜx<K ¶´rŽÀŽÅÖŽ !™Œ%F·Ýé``‚êá {"uøXr@Øñé c­? ‹ÐmsàKÇcÅUˆi=s,F9ƒms$4©åÁXrdXV9‡0Š5nÑ¡ ]ŒÔ=\å÷gG@G@”NõVùµÎ&*âD¥úJ[•Ÿ)å>m£ã—Róoâpgá”ìßêw_„øßö¾ãÏÎÓ6|íƒá¨ß½â÷)x‡ŸCOjóeo•Ö­~§¿réúîøS+ð$Wòj©í¨ßS<Äÿ +÷jêü8<æg|U_ã»ø_sÇŸþOp<Ë«íÍV¿•.ÄËø™ùú3<¡êÊœög[ýV뿚ÌGøi1ñ!ý;üR¿ Gˆ—>yãO›Œ³»òVq”õÛ4…x¿×GüiõåGu¥M;ä­†ñqÁ¹âe|ÖéñküÒÖ÷ö†~Æïš>ªÆöx”+^Æ'Ÿ¯×¡®ã—>ówü¥~üÿ»nÝñk|ì¯õg«»¥¬›ÐVÃ%eÔ;^Æ/…¿ñçÚ;ÿxøëƒÞæ¶Æg}ÿ»Þñ2þÀóõ¤¹×× ¯‰ß«¢ÆàcRûD¯±›žœ\[w7Ñ®€ªß«nˆÖ +}â×ø¬GçÒO¦i/¿T?~™z2»xŸ[ùƯñ‡~6“«]­èû«Æ•®x¿%þÆËø3±ŽÝqÖ¶‘¾¥ªa|9»b¼Œ»Ô7~_´´4ªÿl—Q–ä EwÔGA÷¿±~ˆ håcæLQwn%Š€=În÷êÁCßf¿pÓ“'ÈÉ/=WP\‡âèö½È=üÕ[fâÍ_ôƒ_þîËÃS{Ý}Þ<˜õuzåL8ôHÂùË/½záG>rTfÁ{Fôð‹Þ¼ù•ú/¿ü³­}AGJ ý@"zøÕ‹7÷óòðãÂæ5ÛÒ.vw,èá/^oþÖÇ/¿üäã²ÏyE#šýE|ÄI¼ùŸ§<øåßoÖ¥¹jøàÁCß¼ô$z™­þòK¿5²65®áuÓƒ‡³ë…›~çÈÉ/ýΫÖdFm›u?Ί&C‡å‹ë +Öyó×âUsQ«¦Ïr<ô^ mv®ã_öÝoh–(ûR*sD=¾ºxóïúròË¿ka9üÈΈfÿPª×/~ù=i‰ãf$µ ~ƒ‡¼‰ž´¹ÿÒcMX^Õˆj4-Þ-_ÑÃ^ü˜$zž~LN~ù÷¨,š–àþÑ#šý°oÞü{¬9ù埼~•C4üÝ«¸GñÑ&ñæ÷³yâ¦oû"P;É;oJ+[¿¢Y/Ý3!ñÐ7ñÌ9ùåßfô,±óÑìÇ{ÉÅ›¿úvüXúö£>¼U w˜í_ÑÃÏ^?©Ï'¿üËS0åÕ°c´ˆh¶óh7oöæÉsòfïë­pÙ‹Ž%½nûŠöæU!ñ°W¿œø’o¥)ÇÖvñðhÖ#5ûÅ›žû/nzñˆJí +·±m_ÑÃ^}.H¼Ù }ðK¯ÖþÇßD ŽÅ=E"šý$–âéD¿¼ù•¶Ýè¿Öí_ÑÃ_¬¼ùkÿà—_mnÂ7èô±¹¸^hD³ë<.~ü•)ÛðæÇæúóQìî°ºþ³¾¬Vsà¦'š¿üÒëX 7°r±½Cm{Ÿèá_cåÁÃ?„?xóO*ë—(Ë“†F4ù1ê÷zñæ¯L¿üò«oüè­¾eYK)ÑìÓ·7ñð£,Œ_þYšoïh¥ŒðcŠ‹èá§Áoþ²ý¿üs¿˜·ã*êkhöãIÛÅÃ/<è—7?àzþÔϱb\ŸXvËj~‰…¹cF¸Yó"VÂÚ†¼i¯­´Ñÿ/Þì­ñ/¿üžõÚp +½öѬÇík^<ô ï/oz´CÕÊ#ݹG4ûyºxóס¿¼ù¹ÖõºXÒñžZEל=üµÌ‹‡¿­Ñüæ—‹dF¿Ò>U#šõ….ÞôÕ³øäM}qKt,ݹ¢ÙÝê?uÒ_~ù§Ÿ!Òx~õ=ô`Öã²Inúâ5üäMæ¾’ÓGJÎçhz4ûŸãœøñçSõ›^É[æÜhYÈ0âˆ&}Åu\<ôøQùå—ôõºHêhYXêÍ~Ôp½xóÓl¿¼ùm˜Zߠؽ˃»EŽf¿ª¶‹WtÚ5àÞ¼ùgÙ ]05¿~j”¢Ù/ªtñð£uÈ/¿üê5œm}k¾<+˜í(írÒ&'¿tÁª±¯=Lô«áÙÍv_›ÄC:5?xø+±?f›Ñ¯ÐvÚŒhö£ÐÅÃ/öá—/q(¸Jô+Ìp½E4ûIö“o~’þÁ›_yån®Ñ¯2˜#šýUü(&~ääÿ#мôkà +eqaDZd$⛄›·^Ep¾Çu`ÒJÑd¶ŽÌorüâ/û™ »ñøgÙµÛ£Ù?¼G&\£!]¸éÇ^qTŒwU0fùDáѬWò !ñúöÓ ‡^ćRN…!ÉK–G³^vgK¼é½3\8ôÚ¼Sg}çËɼùÍú^h^<ôÕÛÑ… }ííêõî-F`oGÍz\SéâÕöÊ;ÏÅ›Iµ¾Á²ÅÞÊôáÇ£Ù²Ò/^mHíƒ/6÷û6ÖÑ£SM¼•F4û«ú`˜xøÇô=¹ø‚SÒ|«XV<~ä~hö—îƒBâá×™-Ù‚ì|COwž`o}ùn¿ì­*ñæ¯D¼ù§'³Õ‘þú­£F4ûuú©K<üB>7^<ü4u­\™íŒào6P¼Ñì—îµ$ñºn ýƒ/öB¾36—ëëgñrïÑìïÅ›vâág–z^Gg~õR¼¹y4ë›xwK<ô­OþàáïñPÒëó8tÙ‰¼+ 9)é/]¬ëOÿ¢ É½ò1üæéÑl/º7%xè«7÷ /6´Ø<`½x4zô3)G4éq/´¡âàM_lHûáá"îG«3 69¢Ù¯Ã.W?{~ððO)njDïÚ×Vì|>Ñì—¦zñŠ¡´’|ð¥¨77ô’×ÏL3¢ÙÏk?xø15öþʺø1d¼™„’Ñì§I7¿–öÅÃOÝÖ7Òž>?®X3¢Ù_+‹‡_ +õ¾Ø•ÉÑ_ÑXŸÉÁ¤W,p½pèÑÍøƒ‡žýg+^ð‘cÉjh¶ëºI<옞Æ{÷µW<î[Õ0ÏѬïÚnpÐz$¹›´Ê»·¸ímËŠf½]<>à?ñ?î +ky”‡ÄòhÕÑìG2‹Ç‡2úýdqœz4-še?äŠf=r¤^¼þÉM>ø‚K†û EÓjeziðhòËh¾ï‰‡Œ½'?þZIŽ +ÚßÒÖZ5¢Ù/¾ ·Êó‡¾QY !]x¼zïqO4ë¹{eH<>`ü<ü̾pÒZt•¦¼-+šý(ÙóâMÛ÷óœ<ü]º¿o-¡Ç!o0Û‹ÝpÿFä_nT¡åî¸ò¼M‹ëjeO4Ùà ·'.9šõ8Ék±fÑ´pÉójáѬzñöЃë?NòzÙÎV ?ÞR"šý^í­¶`ô—?öo0¾§Š×Qf9Z\¿x|@!•þ:çúež=:VGamM~žä=ñ¶æµôþ†9h}ƒû=¶è’~ =šýÈ’vñ¶æc|ñð³)æYߢܻúrz4ë‘kóâ¡ïk‚ûá¡r óßëû0{4ûmÔºxÛUnõƒ‡_«?~iѲ ~Ö<šôHeÖ‹W[ÍúKú¦3Æ)œ”9"šõؼvñ–3Ó‡¬‹‡s¾›ºÌwsESÍ~Â%ãâá/R?ð‚Þ§¢5Lü¯~úŽ{0Ù Óf½pËÈýð';Rp‰VKÌRèÏ{ÉV4ëûhnù¨>]8ôÍ‹ I +i9(¢ÙNâK™xèQ_¿xè{óÇ!Ôì·¨)n¾)šüø³ýÁ¯|÷ùðâ‹8¯¾„:ü|ë©#¢Ù߇÷ÄÃߨÃÅÃ?öXFuèûüCK¥ˆf?jø¼x;OµòÿÜs¿øö£Å‹F4ùÑ<¼Î&ÞN”(ð퀽¢b|Šž5ŸõôhöcN¼yd ªiûàáÇœ¸Þ·öÒÞÜŸ¨.Ñ—ç¿9‹O‰·‹ Õ?û”‹›LßÓðhnÍzn>&&zyáä¡Ò­þiCÿlWY¶d!ÛQQ@ÝÿÆ:ŠC®õþªBð:0¬ßjÔÙ@iýÖm÷ò±>¦ùƒõ!læCBží6T0È5'”×G_ч?j +ç‡õ[š + ¼ÛÖï%ôN ´~Ýê—ø£(”þ?A~âê¦5Wöú£ØEy}È5øˆúîëg y‡|Ú}¨à>Ó:ÕDi}¤¼<ñ±~mQ">Ö׬ø²#"{:ï‹GI´QZߥÿáª#CüðÓ!ÃàÖÏóB›ŽšºQZ^ÕûC5§¨üAÇêµh€’ô¼®H¼‹Òòˆ¯¿Ž’êü4桁ф Ïë¶´w9QZ?'qòácý4µÇ?a4U×Óºß^„6må¢ÌÇôüZnsAÍQ¿(ó--‹¥S ºµÙÞâž[®õÔ¼ì¨0e~kq›¸[ÊE,—‹¿§–æJÅïl'u«d:Zlžk~:Qªf~QæC!LC¹…-™‹É>Û + BSe*Ñ(óÛm|;/›v zøò/¥»qw]/‹Àœ¥e~î‘(¨çZÊß 2goˆt,ýÐñR~Qæ{[ÇM>¤\”ùh°Á¯º»ø©6B‰/â9V2Éç¸ ²µ^”ùhÈ3H,Ÿé|Ìfù¢ÌwŸ·cé + C™Êô>&SX´åÖ_,â5Pâgñ>?¬Ö›n~íÙ/Èt•H+L!霶BЖ‹2ß=èRR>t5Éez—ˆª‚ ¿|B‰_¤¦¹Rñêç´Þµ^éjiÆNAµ=‡EÇŠ»”ù£M F¶sùI³‹2ûœiž{³kxÚ(._síÁGjŸX³žã6e>$óÜi¶|S O¯(ó[ŽgϹßÔ2D ]”ø˜V¢\gÄè9/îÌ e~iqŸ‚ò|ΫµU¿(óñ ódâéæ–bÆë%¾£×Ïý ^âœwèðvQæãÅçý@RßÜ*-b0@¦£ÖM jÁÍ-”˸ä@‰_“EO~Òˆ‚õ(2Ò),z_!ncrKH9§ÉXZóE‰Þ¢y ++dóᣫ¶‹2_}”M…u³5¶nŒ¹ÍF1nCñoviÒ.J|‹–Œ‘eóSŒ/e>Z@™–ä·F%ñ‹~FGñ6Wjíôþq%iÔÀ2sPžT£õ®ã½êE™‘dî§•Zíð˘ÇJ|)yŒ„6DL•ÍǰY e~³¹|íCƒmºY÷‹=#`çÁPVËÙbËe~MuÕÎq«£ÄGÌs£5€?RJ»(ó÷ÁjJ;« USì‚DWdùŒ4¯UÎv—L(ñMjŸïâ¦â›b~ƒL¯s>…¥œþo¨teñ˧ÿg=nÓ§Û|¤¡ÄÇ=D0Ø›_piý¢Ì‡¶ ‹çÍÎÐ^"*Tflu³Ÿ“ +ª·\”øÝ’Ï'ÁÔÐOœ y%=|̦–êä+ä ´”Æ6J|Ñ®s%ˆúW˜3Q‰ô¢ÄÏMãeÑ'w^a®SÍ~Qâ öƒ¡Ê6Xì¢ÄGŒ:¢)í¼Â`”DûE7¿u¤Ð8˜`I•¥].Šë@ߪð·eòGzÏÉå×á×ôõÀ dŠ}L@ÿÆ1p‚¯iW\·ŸÆT[ó§â>¦oU—1w~^ã×´ðšVw’¡áª½–Oÿ{,‹¯C þ);<–Å/å:ad\ûh‹×´ã¯Üó7¦^Óò)õ«—ï±ËVŠî%2•üÙÓkÚÙײÆe8~è'ûÓöÀ` UC|<ÓöPo˜z¿bä5=ßøé¿¦í=Ð',½qÿû5}UØhY™f€¿LÛ£‰Ö‹òú­;¯i¿*wÀÖž(|M;ª–~G³ö·ûkÚ‘M¦!ìÓ1MË#ÏÚlGøœü5íjØû²i Z¬~M»*H‚€«ÕºM»ò 6† ƒ”ÏŸêö𖇋•ø4$£}¾ñšv±ïW»•1ó®y YÝ»ªp·Úæ*Fº³Ò~sx¸¯ñ(`>Gé1@íЭC U!˜¡¢SMë{~€ƒ¶yŠ *n.Ë„mÈñ(½V‚yrªiMuî~#wW‚¹FC¸-9nÙ{ýŒyˆû&ïu‡P Á\Ô‘²{8S9›J͵ü \I˜Lä<ÍÌã®Â”ÛUuV•Lð'L×ü‡z Â…`n! ³Ÿƒ'¨~!˜s#Üò@Y8Qˆ‚”œàÏŒ)’׌i}Eáeµ3üé5èÂ$ØÉñhc8¸0תèãc*m½éñp_ߘë!ÚwXÜïL*¡L/R">UËN>8 ~1ü)êiݺæSpá!µW‚Ù#­üF.ìI R´£ªLMqÙaª§ñÚ4Ì +·•u³ÐÐÖ‡µÆ0{d[ùŠŠ¾³Ï§$3‚É‘ß#l‘T[©ÃCú^hÂì‘-‡)££Ÿ“×nn³¶‡¨Šo@ùè99Døö˜0{d“e*^ÎÉ+ž­LŠ@‹Ïè¶çäUš Áìq.LÒÏŒ ¡ß³‚É£4_W¼æsrw_·0{èÔ +äšÏÉ]Óö˜0y ·+YäœÜ!Ð +Áìaj@©·›è3Rf4ÒkšªÝüÃ:‰ažçª§µÔû1©]”p®8xÊ=OhíÊðgd”•)y=Ï¡£-L©¶MwvS]´U‚ÙC#FaòtS‰W:Áì!º=J½)X˜Bðñ˜­kWè`'sïÆ0{ gãó˜jn +f4ŒL0{@nÄç›·›‚yeÿ†É£a (aR»)(µJ&˜=<ê7~å|SP²šÌÅg•N¨ý¦ êæ¶Ë-ɶ¢SéÜ@DÔùO¬Ó jZq>ê£R×qû’ÞHfBf‹«‚º!(8y#™¸Ü‘Cí´ ÷6ÔIf¢¹ÆÎavÛÑÖ-ÔB2:ótû) Ywº^•ç‹·ø&œzñ q²L„£HľÝW¹M¢7d&2bƒpƒ;Û²)³“Ìz¬$J“³oÇ’™@'÷w +CRðŒ§ì¯çÌÙ>fÛóaQK'™‰ž1ƒD3ËàaePjbDuœ»®¥×A2æùÔlžF«¡XàÕÌD•’ÊõÜ"Ã%d&ŠíkµŸ}K÷ÜwÈDØì TÙ‰ÍþEgtTžFä8 û7VL“Ì€·üZôt;ð á¶aÈL4™Iøq†wYK!™‰Ú3Âj=ÎÂpE=C5d&p;q´µø<ÃÒ*•d&Òæ¡šU7°¼œ^•æ×Ù2i—x†*l]!31J"‚ã|’ÀÁêUy¾»Vµvèû\öÏ|2Í=âILNo‰þ"¯(d&Öeü½eŸ§ãE4>2(?ñ½¥Ù=4HÀF2}ËêxËŽ=4ͺ‘ÌDAúŠ!;øê*J™±C&NbYlœ4F2chÜŸ|Å& üpxÈ!šk ñ ,‘“ÌD/=OaGŸ®VÀHeÀëª{e¢ç9®M§/Kte&àë=†úq Dt’Ì„}ÝÔ²ã*ЦÖï:ŽÌDškèqh:ÑÙ6’¢Ô\)NñEøQÀ>â{WK26ЪÉ!-‡PêìuL#™‰Ò6Qõ"E¯ú̇e‹$,߀ùz­WfB>‚¡>¼žmÃe÷BòC”•¹×Fξ‘Î\I&MbƒÝDÏ…×ÖËQz®x8^«ŒB2Óðiãò´/oŽu4w†6ìªÏüñ½ŒÀ`ß«Ùò[`JÕ{Œä‡XíFƘå¾@«6HþQ'Çò[FKØl$?D«ñQ5žÖpcù!fÏ!üÛéhÇ ùqUcùŽè©ï{ËÑ=Τ÷J±×$o#äÇé”’Chnì!Ã’x) Á%ßàƒU’b–ão¸nùqxµÆ3ôqjÆ"fÞ`ÈÑ%†ù.ÑÍæUØTŒT~·0ú,?Dë9T”¢oà5‘üšçCmL¿µA×IþaÐ1äî·VFŸqä· (N+ÏÜ*“•lËo£!ùc*×Ò J^!ùíe¾ä£v««EjÙò3Ä&ÐVØ-®^¼‘ü´Wž›0d¿[\áúœä§é«³p·=Kî-dn,qˆIêÍ_k´å‡˜¯­²EM;ÉOó:ò}â̯­(8*%™ ÝÑïwmÅv[f El/øÚŠ2ke™ óC:­XæÙ­’ÌœkÞÉÒ[ÉÈ™ oš?f&ç©cÞ&>™ ôqŒºº­C ý;ÉL Ë$]æèÇÜb·ÕHfbšäP·yœd…oî$ùYÍJC³p›2õI2%l)†tÞ\¸’ÌD•ž?&~ÐÚÌü2V{ü<Ô AD~¾ö™h=6.øÕ³²‡’@Îߪý† šÚI*#O]šgÛÞEXfù~ uØÓr°ëW¶J +æ}Ôï.¶Ì„ê—úò7þ<Û ™‰:¾\…!ÕðáŸ7Û2hký󘋊\Õ}ËLø”øàÑ‘7z²è“™@‰£muUI˜„wß2¨4±ÅQeÇŸ£Lzq’‰p¼äü`é;þ@ôÒÉL !Æ}Üù­+òldùXº£Óó3ߤÉLàu&QûŽ=ÚHäù0±ùSèµú™"PI&nÉcÏ>ËöôŽÃ«¹pÈL ÃÇîh[±|ÉL åÂvˆ¬~[f£‡Ä®R» kb$31D‚À½ûÙyÓù%¯-±lM,Wãwç¥ÖB2Újì/¾Û:IfÂFJ«ÇX€jJ2¸¡8ø†>ì¼)ó•ÿ®Ì"8vޱ³sˆfËDàH,¨ùñþù#™ “\Þêñ däs ™ oáVüFrKg™‰‘‰ªÎzƒ½˜³|€‚tºo +ÙOï6ÕHf¢ö玊:ÏuTÅ!3þ2¾·Âºž‡ˆ[«¤20ÜãÁ­ìrnCÏó ™tÛÐÞoÂź’Ìn*‡àÔÎm .eÌ2K,I7ñ—2Šú™CøÞ³qrf’™°ýrËh7Ñ5%™ ¤Ã$æÎ΋¶¼À‰€M8«Rç@Aÿ×If".°¿¸ìD#™‰®-¾Jæq jËÒ2^õáì\¤‘Èó9ùþ˜ßЙ•©$3q‡”d›rUš4©q ‚(ñˆx%™ ‹îÁñ£ê&|Ÿ‡Þ2£FC­íð»ÚH&ÂñÈJ UÕ³ Ô0'•Þ<‡ä ¨J2¦À¾¡:ßQº°Ì„Gk†!|_Ù„÷Ù:ÉD ÔØÆXöãxÿƒd&zÿ¼†ð!umJe™´.˃œgç0ZeÌÄy½Ë<;7$ÜNò!жx¡Bº8;‡±–B2ÈTž?†ôt¾ªv7'™ „x~°h;_UK«…d"}S¬‹ég ̲I2ø1‰åÉý¬ÆSI%À¤kœ»ã˜Ï;Dß›Ï3d&à}sõÓ˜5D]4±©Ò|Ø'‰DÉŽ?íö9I&ÂÇèI ÕM ç­†LÌen°YÙñgËöI2X¾Ä¾òxÝžá4’Q‘€‡Æ‘Øl; NÁ»“L„iñXÃÐÆ´M gÚ?ôÉDLí?†Ç]du]ÚÊ©xŽh’Ïÿ3’óÑ þÏvµe[¶ª°Ý""بÓÿßè^?5v%f9U¡ÑB1ïÔ¼þaÎp2Ÿl¢³œçõ³GÑÞgþó=˜ÿvà¯zŠS•kÊøÃüé[hγ@µÜ=ïab=|‰ßBzªìÍü·»šÊºe•Z®õë‹Ê:”Ù5V½ÄÛ}×ÙÑÐóäñšë±Ó©úšøî©ífb}›…gyTºüòÃÄz 53ÑælõLžƒõ4êï ãÿÍö@_!þÁÄzˆ™dpµ~Û&Ö#èg NKšæ¯L¬çJuý + ÐW´0±žÂu¢è_%úÁÄúÒÇl“†§ï~~0k½ÁÿÛ´†çi_ôü`b½5 Í÷ù‡‰õª}:ðKX>WùƒÙëkŸ1‹ëÆuýþÃìõ¥¯Z¹Þ¿è%x¨­ ÔÛ7tÒCm…ôåêÊ44ϵo©x=†?ï’Ÿí/µC—Kƒûª©7ÿ¢öËÙ`[°á>.ÅKíØcuÚ:C¸_ÉðR¡¨‡n~#+^jÇ7 ÙB;†ˆzÅ÷ÍÄzAívxä„þE…iµ>= otmñR¡EÌÜÞ¤~©¨2„™IÜ18r.3/ +ÆÛlÔËU(_jWJ¥u!è“CóØñ— +…1×¹5š®˜eÁÃ\•`µqÏ™³;IUò_™6÷rÆ/µ{Uñ@ p/ +¤¾µh}¼ôCí~k<ú‚;?Žò¥vGîZk5ÍŠ— +…Íbê0üÝeø^êvÆ\ôËfjû˜åLöz¹ž µÓŠÁIóò— +…ª²o*vÙ0ŒR4ŸÙ!¼ßšÿ¡ÙPÿдÁÃÜëgÙÂÈÁ¡ö$€–+0ý©gÂÎ-Z0Âá1Ÿµ¿Ê/4º½áÃìwæñ[ð— +…`ʱ_ßô— +³TJ‡ËóÌCm‡(•¼¤ÚrN¼T(tÖÜUmMyê}¨PH…ÍY°¢¯_¹ýR»4mÈñµÇK…‚´þÛ-~Q»B!‚ýcë¼õ«D=Ô®^U0ãÎB|ÕÀ›ÙþiîQ¨ãªi©PÌÁÈaôöÚ²â¥v%G Ó‚™ú­x©­ ¢mÁ¥ð}Œ— +E“2Üšt£ËW?Ì^ܘp3é—à¡¶€Ü.a¼·x¨­àR¼²Ë-¸™½1ÀÅ(y{÷‡¹g X]¶q_ÒÍÜïÇ$Ïæ~i8\k"?z3;öJŽÕð–LW(=L¬­ÍÖaèåžfgÃYÃáèÙúU&Ö×ÖÅÖÄ w ¸‰XÝH§Òxt»~ýavŃʷúÃìš4Šù|4X®ó0»ê¡ß9Zî1÷&¶ @3ZÓT©—ÑøÃì*,ÂkÚDå«Ð?Ì®ó]K]h¡kùMÄjUë>;j××<Ìv §þcýf÷µVç òL­?˜»s®^_/»ð0±¾#0t¡úµþab=f;ÒŸ·Ë ßѵv„Sf‚óý·ÞÝbkç<çÁçV6¯ðiþ¨{ábNŠo6¯( Öyží WŸ¥ÞÓ¾oÒÎ]?4{U 'þIÒéómHÏŒæÀ†þE×ï¡‘Mœ ô¨Ã/DH…ª´g…•LŽ»ýC “üÇ£K›¶¨>vtC1´H‚s©èÕZ×±$½P‚³W}ø¶zú"Å|ÍbôÎPe4—;eòšA¤G00&8+ª·ePrJþÓ8ÂÆál`àõ<@˜qïGa3º?8+ÐðcbrŽÖ‘æp®ò«j¯©Läœ^‹5Á—GÂÜçT?³À Ý?ÔëÓxŒ$~ŒG;ÿ† +‡³C€‚‡í(0µ_FLÌ÷@½ç‡½öÈb‡³EÄ´ð‰CLD¹g¿oOMëùª>,‚ÍáËí©¿ÍºÈʘ9ÎÓT¾Ü@‘þм¾P$fQûÒÏ +™%8»ŒÞŠŸ¯ˆÐypÜw¤†ÃYP÷ÏÅ}”óàÖz‚³ó±UÊ(çÁü%8+Ä­:J¡Óóº© _n¬wkкljtüGj‚³ßC…Q§xŒsr¼µ_ÑVj‚B*ê2qç* ¾<¨ÅÏÉ€õ¦'ø¶¹äšñ.nPô1ÍÚ“b–Vÿ`tÈ]ÜdÚ5Mhàiýr­Jk[@µ2%8+*ÕØ½œŽ E½'8)êðvÉËŒœƒ“6Kht‰kW9ãCc¾u8+X‹ï®¨@¶µ–½ó‚³0~ ¶î¼Â×'Y~'EöÛ~l$8+¤Æå"³è¼F>ïl8+PýÓ&ÑV¸‹ÿà¬ÀT?†<Ï‚¡ãpRÌ™ 2¤œçà9“$8+¢ƒR'ÙjMh0U¿wigijìÛ3@•bñ½R¹€Ø +l7³>îD`ÎÁ[§ gª•oßt| ¸ûÙ†³‚G0rÌÅr®’мžzDOãã-²€“µ˜‚Ýš@ѱY@ÉZ,šø… šôþGàhÈ0(îmjY°Ð,€‘ôÇæF?6htÿ~mâÇ„aöïú…fAõ|A –úGàh(ÎìG®ðOöW°Ð,Pï%s8íï‘Í¡ÈS¸ôíç1:Á°µ§©]Æ«È[dÁÚS†Gä{˜Ã\-”à<(Áƒè«È[dÁÚ‚º8…ŒgÚ[4ÖŒ¦ß^AÚáÌú‘ñèr{x«Ço8+lŸ¸slÜNd»ÃYxôc£ÐÑy üLt‡³ ì^0ƒž=`Èâ‡Î +.QêàpéÜTQÎ +ìî'G»ÖóUø™h“'Šhä"E#ç\WãvÎ +µõàõßÇç@A~!ΊN«‘€RnÊ6œmo!¥Ÿ2fKpT[c"¨ªýÊ:v€y9ñŠA0¥ÉY¯ ;ÁIÑ`ý·æ+Õ£ˆÜÛpVWÿZÛCÆO¥h‚³v4~ s…ŒU‰6œâŸk˜`ÏKLû؜׳šo®pq²J2š•›ß+êõÎ=š^×,ÁYQ¬ùÕ"më9¶T¶„&ŽWRÄê95¬®%4 0øçö¡tŽÝðwMpVtlEë—g…pJŽÁ¢–’á¬h•ü¦z=‡pº¶?¶&ƒ³\$¨r 1”l8+È5 +²Ñ—zµsÃYQ´û¥ ÍÇ t˜ãˆf‡“£c ¬Ö ô:†%4 ðÞ±;U;Ù]ÕjB³@9­­!k žà¬èKê_ý@hFL-4¯÷ïi¸—sdŒ=Ãy9[äÞWÏ‘ ¦'8+j®€óêç± ³¬&8+¨“ŸŽÑÎcŠAOpV‰òÈR¿Ô#ôtKpRÐhQmàû*œ\œæÃ)¨"rö(ƒ£9œÊê‘Sa©ÎE[Ô ‡³ï?V{ù’?\$ÁYæã öú>Š{<·ÃYÐhø ×_î¡uE¶:œpþþ€Xó].²;ÒÞᬀñÒÁ‚VWöÏÜHeDÞQk;ï°~v˜'EIL•vÞ•9 D:|)JThíû¦¦ñCÿŸí*K–#„a7zÅb|ÿ‹E鶘ðó*šo°=*>3Ä›yPôgDK˜£íB7QZÔéš(óMöÝtFýûEõ¬P}S±÷iQðâ(»SÌŠU 0qÌþ¦^yf3¿ÏÞcÉÊ›zP<#Á¬@ÜK¨¬þ)0ê:Á‡¢ÆB}ŠáË—Z`æ×º3ŠWͯFö(Á¬(½ì%ûÆ (jô°þÁõñœ¾q +|ì˜&Û£}EùÁ¬¾ððo €bŒÙ >m„ýßD…â³ÂbDÅ’~ÕF0+4FT,õÒ¾82›|(öM¯€ß½ÔD™.;qæõËn ƒV fAth¬Êq +Þ¸ øÔ'ˆª7ò*PX„`V mºJ~t‰œaV ˜G˜kóVåv©›mž‰‡§Ó‚YH‹¯Vtè/ŸaË &f‰«FoËÄ3³fвOV0¡¤‡u‚Y1ußêS(¿4ys>`V ¯ÛC%SϤ¸|(ºltÒüUùŒ`Vذør ЙzÖD+Á‡¢îPxÆ—/õ¬ÚΖ€Y¡ Ó­õ¼ð‚Ï#ø”¾-ºgùÇónW€Y!»¦v´}IAí•`ô9#•šçoÒ©JèÁï5¢¼’©§Ã'ìÀ¼ׄÁ$sOGßÁ𡨺7k8öO+b˜uŸ9†ˆÒSPwÝ ø”? +ÿ®ïªõ³…­PqMEi Š6ã qúþ:jþloÆ›gF®ÿ) ™¿Ãÿ<Ouß{•ç_‹>w1øn‘ +¶`AX¨ÅR™š Ž’ß¾Z‚,AXôµÅZÖZm¶ËyÀw‹T° –Åtƒ*æ"ņï©`‹~ R…ír„ÈAJ«´IðÝ"lQÉë±úìõ ¾4{iñÆðÅâP|?‚°À¨Kƒ†µx+¼àÝ ùl0ÊÙb0š¬Ì3(Oª83¾[¤‚-X2öy4Ñ`V5}á»E*Ø¢óãcQÛÞ ý½¥Eô„¾[¤‚-X°,lö8ÌÖòUA™c½&_øjA +²8a¡= +­)‹9ÎS½;¤€Xuî½Ð8¾¤UJ_ðn|6`Á2Ðéû” +b9 dt‚ï©` „ÅŽLdx¬Œ"FðÕäp¡׸St¸ìF˜ÎŠ|·H[° ,ŠÇUŒM™h‘NðÝ"lÁ‚e!óýŠ:²ß‰!ôîv`A8¨‡ƒ!éG:ÄLòÂW RÅ!‹çÒ›ÝNÄ÷e|wH;° ö)aÔÎf'8¼FðÝ!ì ?/‘§É¶hšÍND½|·H[° ,Ô· ´lv"}§]Àw‹T° ¢`ðÊf'xÙ)ÁW RÅ!‹ªqPü²Ù!D ¾[¤‚-ôçE5Ú|¿¢Syê£z7è—âÄôØÞtÓkQÚ_ ÃwƒT° ¢[Ü)âŒZ]o» |µ Y‚°¨û+Ä„Z]/»8|·H[°`YTï[ U¾—f3u‚ï©` „…É>¨§é}¦5Ñ»ÁÇçý‰ÛëŒôí®JM:ÃWRÃ!Ø%NñÙ3«[Ûµ)à»E*Ø‚a!ûºxˬÆ!øn‘ +¶`AXtÛ?·Yë‹ß-RÁ,ø±(x“}uê$øn‘ +¶`AX´wÑ&FôS ¾Z‚,Á¶x:h8«Ï¾[¤‚-XuçDëRÆÅbÁw‹T° ¢Ø>¨ZK^wÕÝ'¾[¤‚-XpZT´ZºnÙ 5à«)Èâ, ¼áâ ÐÞl’Å~ñ|·H[°àÇE) Tí» |·H[° ,vpÖ:i>K‡ßRÁ,‡±ÓÓ' hا|µ Y‚mñ.aÌi‹ß-RÁ, “ˆœ¢…âL¾[¤‚-XðómPÃK‹ß-RÁ,8n»”Î![÷£2à»C*زþç1D7ñ<*_ôƒƒÿîÿC§¼Æ +B þäÜ‹^·O>mÏtª¯XÁõŸÂô¢×í“OÛ3šVj£6¥õE¯Û'Ÿ¶g:ujÿ›Óÿkq/zÛžø¹ýA§q+fÔÞ¢I¿èuûäÓöL§a +Ò©µµÚ=Ñëöɧí™ÛØ»ÒÓ¦&zÝ=ù´;ÓiXõ¿áƒ:ZÓ¢‰Þ¶'~nÐcÜ.eýú1:u³T_ôº}òi{¦Ó4L“t³Ãg¢¿Å¯ƒnÊ{Kô ãõ´VPñ~ß +/zðã³lòTŽÇeKôÿV”wר}Û%Ààçz¼8£žYm#;‹o‰t ¾N§ +‹ÃñDþŒôÁ3”:¼hõD™j±ð2kKô Göh+š«¥%x°Ÿ~ñ¡y±ø"O”ùØ(øÐeR©¨'zð{üzlID‡$xÐmÅž|=¿U}ï¾Ðƒî¥Öc}ŽD™oM×JŸüt²Ù,у¯}åΘ’2=øWÛ»yFÚ˜›¿Pæ£û¿ò ev:¶zVšŠû6ÀƒŽý׊ Ê*ïB(ógìoBãŽO•<Øgƒ‡gfÂcÖD™ï%Z*þ“i¥k¢_"á*‚â‹4­HæD‰?K‰Ê[µYO>*]¢_¢xaÇÌ+EÓDþŒ(Ä<’‰¥m¡Ì¯»”Ù3³´‹´Dþˆ(,V2³Tp ‰2©³ÊNéHùä[dz _=øU2·TŸkúPæ÷g£ùçNSêÐöªX1šÒÔV)}уÿ¼ž¡±K‘?ž(óÑÜe­4š£PFfOôà]+Ói0ÒYt$Ê|]9 «͈ñºõs «ÌÞÆH”ùfO®S-3ùþ$Ü‹2ÓÅ:èYÐ+_¾•§Í~èÁŸ²n‹ÃÖ”c.¨Ëõù¨ïè­õ¢‰2ßK\ú@Çü¾Õz‰ßèÁǰ°VªäûÅ %¾—ßj^ó±hbµ%zð=¾ÕÌ3± ™¢‰2ç°‚ +[fba ”ù¤Ö­[k#÷GhŽDþ\—‚Û¤ãŒ@ŒÉÈ“XÁHö¥•ͧ˜}(ó¥Èú1ŠFŸ?Æu&xÐm}êßoE÷/\(ÓUb¡ÌöÅ †~—D™n­¬™úª–Í<ØÞ‚m-SjàõØeþqƒ(D™Sݹ'Êü)¾>VªeN s„2»Vº÷Ì©±o*ÀŽ‚XJ`σ\ýt!q[0ÿ»Ò1‡Êü§­ Yß•âà#Qæ·¾7œ¾ß2k©3Qæã´N Å(ó £MìèÁŸ=ø*ã+•³JM”ù¸¹õûñ»Æ÷½ïO”ùéÚð;¿ÏEaú(Ó- +}Ôöç-Áƒí=èF]%«Êüá}Þ˜ÙõgPeþtYÇ\+u}¯ƒQâ×R¢ø§®ÿġ̯%~ÏSÑ¿Ïõ絑(óñÖ[‡_ÖàþòõÝe–%K +ÃнÆL‹êýÿ¶°p&ª¿ªRd0؈Q/Œrü°¿H‚5XŒjÍ^±ØúåTìÞžFyMë=/åS°²µú–WbÄ“Zwš†>[fÞ4êщüMEv{‚ñu\õ#7S:g>ôj—ÔM£~æ•H;NĶ úf·ÎMƒS?š=ÁaV޾H£>ãZdO4õû=èÑF¹´iÓ‰$˜ÎëQËza”—QMŽ ¼ë +ò‚‚º4ê§»=éçØ‡¾æµA6zÔ¡ëu´û9=Í £¼—är©õ 6`”«8žax=š…ü¨6ÁÚ4¿r{» ÓÛ“~òˆ`Žq!½4¼÷cßz¼ÍáÕÛûU»ÿrÝ÷«fsÕ­Wã†ÑŽ3®—F=b“­ +¾j·è³¥ŽMƒ~¢ÕÙwļÏçT\êì±iÔñÙÄéÕôè»æ@£¾ª¯b/»Ò!¯â[Ù`T÷æsÙóÉ/uåü™/zO6ËmÌ}/¨+’– ÏR%L[öÏl­íkA]S¦åÒ¨Wñ-‹p åè[F}«þ5ØóÈU5Ð(£[Å¡Êí¬ùÒ Ï9û׮匶ÏQôÒ¨/êk[k–3ÜÞk 4êkŸÖ1ªœ}•"—Fýø¬ .©ùŒ½Nê¥A¿Æo3¡CÆÙkÝ®;F¹ôd/Ò:ÇÙjÍb܆Q^“/.ra:£mU$Ð¨Ç Ã¾^q“£G˜—=6¡ë‹5²¾¢}\åš½–ÖoaáàÖviÔwñ­Hw ™·R§A¯I½‰ÉõL~ÍÅ[©Ó¨/µÛ²Ë·´txtå­{@⺕…ÔçÃuõx}¾ +ÙGýè}-ÉçYdÞÒ*»{9úV|o¢ÝÚ˜R Q¬boÂÑxk« QÉ¥AßÖòÚ“–nm Vµ_õMý—3îŒWjóùtõÓ.&ëØÔ[["ÙçÇiÐãÞWlû¬»Û/‚].—F}+Þİ@ùŒ7£ÑÎK£~NßnIïò¢¿´z`PãZéÛ0‰¤³™‘¿z»4ê{_-x$3Íü9ä6 zä‘Õ#×Ar T³äÍ¢W51^q}uµ.ÑÈ—F=ˆÚ™SŽ^óê¦GŸßtú›ì²»õé‹F}·T¿Î‘sþ+ ­9Òm±ÏèGóÈ¥øÔ8zëwxPи··£užoä‚hî¯Ç‰Ÿ^%ÏK£~´lïï¸õ£G`è—=nR¾R‘å|ºl¾0ʧmK<ÑZÏhÑ4Û¸4è±ï’Í[—tuAi—=ÒRóMIÎäë¨C/zeèó½çó=*c¶KƒåÜ]o8› S<ú¥Q?­¿×ÕOÊyIéó–òpë]l3ã2“Îf\œæ¥A&;íM¸ÒíÂRt§ƒÎd ³"ðGœ°€u³£Å}ÓU˸u•p7©—=Z–OBÅIóÙiuÕj¹4è%÷nzE’î[?t–@ƒ·(¯hÅèÊÖcÇ´@ƒ¾fµ5ÇA¹ëªàfj‘iÓ –T×,qÝzŸ2wz¢&nZÖp3rÍž/–5ù!m²GÿíD¼òÎkxž|ë±µ—Fôû‰éWW½†÷ÑÛwŒÊFmßÔ<–ü|i‹yÿË€x,¯Á(7hªí5册lúŒRƒÎÅ N¹¡‹¦ß£Ü€íó®´Sn@"!¿`”ÐÑÈ/¥†‚£~>§Ü€ú~’SnÀ¡ð~’SnÀ¥³¿£Ô€Öà-àËà”p“{픦ßíí”ÅÞÍç”PiíÝ|N¹¡ ©8§Ü ó­ƒ\.Ô›Sn@$}‡ì”pzé»ÎN¹aÝa_ƒQnÀŸï:;农I½9%?$¸·;å„¡ßAoÊ *ò;èM¹!Ïü;èM©'÷ÓÆ6å†^ž6¶)7Ô”ÞA;åéé´Sn@rzí”úÈO½mÊ –ƒQn(:È/å¤ò F©¡Ñ ÐþJx„ãø]§Ü å©¸M¹!ÏF~Á(5ÔÙŸŠÛ”Píï rCͤâœrƒ RqN¹!URqN©AÇ6å†ú‡M¹¡4RqN¹!—ôÛ½7¥†§±âRÜW~’M¹ úý§Ü ‰ÔšSjÙI­9å†þdÃäò•3_½Qn@\yWØ)7 ø¾+ì”pÕiï¶vÊ uÖw‘rCiõ´SnÀ¹úÚ)5¤ùF†M¹¡ RiN¹AOdøºé™äd†/‡üÊ¿9Oh¸Ž¹£?×1‡\]e2½aî]o_áõ†'˜ÁA †©‰hgôèpÌèUÏJlÌ¥÷g%6掬¬„cêè3ﲋÇÜÑF##wÌZ+¹cî©d䎩£Í“¢Ã1wô¾ýô€Gõ¤‡/Gý#>àQIoõmÌ©¿Õ·1uÔÁ>Ê(×·,d¯;æŽ2D‰Ã0wäJêÏ(Õë”L*Ü1w´™ÉO8æm‰ŒÛ1wHIdjSâù$ëí˜;zgõç˜;j™d§;æŽqæŽÔYwsL2*«?ÇÜф՟cî(ƒu7ÇÜ‘+›]ÇÔÿ +Ù‰Ž¹—8²s‡vV޹C”U cîH¬<ŒR}ZWÅ×à˜;°²d5s,Y ÇÜ(Dö¡câsÔ·7æŽ&óé¸sêùùÆÜ‘Û[Sǘ$_lÌ䋹CI¾Ø˜;„䋹#‘|±1uôNòÅÆÜQë³u?”ë‹PƒaîHó=Ð6¦¤!}j|cîhEŸߘ;41â\ŸûÛÛ6¦Ž:õMösGϬþs‡!ëí˜;pïd¿a˜;’°úsLÚ'«?ÇÜ3å«59{V‡m嬠øûߨ'bCÞ9ýÑNå( +Ûò嫾3èâ/|gÔrË?‡¯ üÕË™;|g(ëåZ9¼m׊z¨­N¸*¦,¯ +Ÿùï7Œ:Ôº×Ãò9óßÐb°’z'h#Ÿùo(õŸ½jùjœ¡Å¨ð·îÆÇÿ†FÁx‰Ô¢|æ”ßP0°¤¾ü=™fÆ +†AÏ_dÌùîþ†‚!Ÿü?ŸMÕZfœ¡`p«4_ÄX¨å›ø +„Eßú +F•.öÀµûo(P{àÆý»ò34}üuÑ@Çh/á7Ï«±ö&ú!œ¡`ð æÛAšëÂ% ¾©Ã–ÝÂ% Xò3ô0:<Ö›=è% Xæe«~CÁÀ-Ö€Q7zfœ¡` ~4—®ÜËGã £j3?&d@ÊòKèaØß@—»~ ;í™l°0‰ç•{ÊQþ¦ßP0¤˜¬1¬¥zx ƒ¥ÖKXÚ3ã £1º¥Öš¬Ûo$ž¯„2]VèC8CÁ(˜.½Ø7¡ä/ºüµ2y‹(\ƒ!ø§”å`4¯û7 F»Æ°žzæ% i°.—} Cµu/öÒ™2áˆÄó½r‰k#’*ô% dGùªÖ?gèa(.³v»Õ„ßP0ÞÈaýøèK(ÂcxRöJùÄCÁ0ó „(¹Ó\BÁÀkž?²4—^BëÞÒ¼b&2ùäÆ +Ãjè3ŽÉ2ã ­š µø‹TKùdÓŠºƒW}yÖJêã—P0x¹´Í‘ 3ÎЪ¸jÒ“з¶¡Õdôzcü†VwÂqÆÇŽZ?½æ Ãûì°–Þ3ã ­®,f×’'›ßP0ˆÆ0ßtù¸ÖßP0´¶ê":èã«ÎÐòUÊÕ¥§øhœ¡å(ÑQ| I-•ÐK($½ø6Ö=<"ñ¼ÈÐá)På«p†‚aX'æ°Ã{Ÿ¡` "r³ÕWÍŒ3ô0,EAS̾ø7Œä¦Ù343ÎP0 çÊm^¶L8"ñü¬¦ÑÜå3™þ†‚!A¢Ã]·Ì8CÁ0t3Þ?‘x/aàë±Og(£•°JžC‹!E{4÷BŸ:Cÿ ݽ¹ãSÓü‰¬çkVí#[&¡ÅhõI{À½úÃ8B? dË¡q„ÖĈ:a7Æoh1Ä ÿÏWý†ãVS½Õ1½³×B íÔÑ©2üÿj:†$þ?ºÀòm±½Þ¾7 çNƒ®'ÑiøiP(VnŸ® OŒ/ö:e¥ö=›•ÑKKpb`ˆ«ÛUÍ‘­hÉp<-*ô®T(Üa…œ½Ç2”Ú[Ò [Þœ 4[ñB Ùƒ/£íX‚³SG ô]Äþ¯bˆéV¨&4êê3¢L{ÂÔ6h$8{{eöË \dv”[‚3ÃYÈÃxo 3bNpž`x\ƒÄÛ/;¼&8;žÑƒ`­¾ÍoŒðZgÏö„xÜ‚S]WÝáÌ(Ö‚›¼ v é’à<¢ÀŒÄ÷–5Ô  g83ªß“irÇfŒ22œÍ¡ÕH@Bßß ³RSr83ÚÐhâpoÛÇîZ‚ó „š¡Z"ŸBRâ”Î ¤ß†Ö—½j˜†[v83š ¿ëMÙöÊ©µ8&‡£Œ·]ÜvãG}±„f‚¨ùVÁ)Å —º”83~Ü yý “5Mpv÷½s˜ûöšÜ>¡g‚ô¸#•—O€ *wíAóó­Ç¦×¦ò˜J†IP}Gj!Ùˆ%UNpfèˆ$@‹å}ÞZ½“.83hÄ-„á}Þ¨u$83Ê2ê…˜öyㄚ%8Z(Þª•^kˆÔÈpfHs‡„SyÓϸö g|‘»¶¡Òö N†CQwÜÞŽŒa83ì¹µˆàÁ½îÞh8X4†R$î^w—ßêpf .ù +;Äö»yç]p|ÑJý«ðÚ²Ž×'83ô™Ì¦‡¶²×Û¹œ °„¡^è-mð<œèò¾ $Û}Ã|¦XpbðX›‹¹q¥ì{iÌ Î  ñšåÀh:z‚3Cˆü¤`žú«!•F‚3›íÞ^ûíí‹É g`ök‚“^ÐÆÁ˜ªeÜ:=E÷4¢V"¹¡Ö»êpÒÀÄ[NÆÔè\® h”YÙ†E9€†¡Wi‚“FÇ-¨ð‚õFP¤=ǽiÆ{J$ü¢I`P|ì~|¾¦^ÇëáÄü~·iÄ×ûÑtâ€Î(+ý`L úÚ|[2¶n ”@Kðž]1ªIg;S‚ûÚŠcJ°F›lÓè-  QJNµ®›ó2¦æ0½0¦òÅ5`!”¶FsÓ²à¬¡Öø`L ˜/½0¦æ(ßÜ*CÆÒ .±…' d|‘ƒ15Æç=[BæùE·Çì ûÄQâcsÎmý%@AŠÆ!} S¢·¸Ó”í't‹ g ];² S¢U­”P‹U`<â}àsŽ NPFü2¦jk½0¦ +›¯¥¯î P9ÁYƒ¢ä¼„)!…Û…0%È¢I^FH Ø‡³¦¨z0¦†r\ç/cj [â«Ú²ÎS[œ4õ¹Œ©a«S£ØóU4¯íDZ™%8k`Ž¢ƒ15P\Æ… øÁÇu"dºJŸ#ÒóûÍMíû4Þ®îp¾ÏW›=‘æ™÷å"ÏÁ-8½Ž˜ÇÁ˜µÑ…0%tEÚÛðà4µ¾h~?ÎL¿ÏÏ×£AößççëÙjì4.Yô Ã&ZÉpV£“1%Hk½0¦úŸ¯£S§­¡½i‚³FçÎcjp§vaL ˜zß×Ï3¶{f-8i(ꌩ¡EÚ…150kÄãzÊÖˆ&¹à¬ÑlÐÁ˜Öj»0 a£–U^MÏp‡}œ[pÖà>è`LN2.Œ©YÈoÔVÓƒf/MpÖ°Iñ2¦¶—/Œ©¡R#¤]÷™wtÖžà¬1êÒØ h@™í˜È_¹±È>óÞÚ’~à¤aá˜3cjTÖ aJCµ&ûÈmôµðÎTâ’¼Œ)¹æÆ˜˜.|:Ö¤75zá„f ŽE¼ÏO4¤~!LÜ¿Tjk2œ +Ú"Îõ÷%L ÖÖ.„)QjT•5LN Œ ’à,BÅcjˆ•ÿ¯¶e[RöG»TÀËGÍÿ¿NlPc¯žšsªöCè¬xBÿ`@e%ªB…YÝ÷£â0i c¯ÐÒÀ{Œ©ýOkb©­Å¦v7=Ìqµ¾S£µuVcjÔû@ÛG…úÕÈÒ¢"íÏçï÷áú~þ¼ß³¡«ìо·ì(ÿ¾•ØÀ!LѤ~0¦,_l@zÑ-|4‚Y£Æ©$zª­~¦D+”­l©beîƒ }?`Öõ÷ûùû9r†7×ýû%E_u˜FÊuS¡ÔèŸ7cJ¤.@QÛÎbE’ÂÈ8„×÷Sµ0 `cUSÕ™ü¡`½g!˜5JWySu¯0¦F·ÈG-sD\Í=î‚YC1#½SÃtôÆÔh«ÈÀ¿­«1f ƒx1¦FÕ°7cj ‡ƨ]MFœ®Ã¬Ã\_Œ©±»Å͘‘§2u+` b˜ЇåÅx†ŒÆT@æ…¸¤~v‘P¶f!ñàcjôZ?S4B©·¦{Mºò_J5Šì!L…¡&Œ)äó#[=O÷q8Ì hŒTÂÜŒG#/¥–Óót_ªÃ¬!ù‡ñhà!|0¦FÊ᱊ôcÖ°oe˜5Tó›15r»›‰YU‚í<[ŒjQ+f‰ÕVa*àêaJ ÂxFVv-D&õN0KÀ‰½Ä2E7aJ´•û&s—BÍ­Êa–ÀÀ«/ÆÔ•Å7cjÔUæÛÙÅPSŠBå0kŒ5êÆ£ÑRþ`L C öPÑÓød%“£$‘ñ¨ìE˜º¼î͘ÚÂéçtšfÞu)_•³®Õ¦Ó4†VÍ¿ßÏß—þYy:šŒÁ¬P4F’Ø0øåƒñhļ—”;-ÄrB‡YB–¥=ŒGÂzþ`L‰v¯ í´´†YB×uSí®|0¦D.a6R§ó¡`ªÌfkã›ñhØZìŘÉ->êv:–òŒ” fª*/ÆÔh©|1 !Þû› ™jK/£ÌMŸ-2ãѰR>S£·!tÞså)=îhÁ¬Ñ¥ë‹15z*åƒñh¤¡\Oï+#%%˜5P.ôÅx4ôú!Öh¢~Œ}Èi~¥§$“FI9¶xÆ›15*Ì‹‡0Vì;Ǹ~è/šßŒ©á-ùM˜ÖK´µ}åÅÆÓüÌóï‹ñHôñAx$’øÙ¹ŸÞWtÄcsø’À•¿cæD±úÁ˜*94R>ͯÈ>Ûfb6^ŒG£æ”.ÑZ¯çÂa‚2Á,Jy1ÆJí_ÆÔ(½û›Y=)RÿAYAÝaÒ÷S —öûùóóiÄ‚¤Ðïç´vöÀ—Àz9‡ñ(ÔÑ>S#K ¬z·%<~S‚YÃjÜÄaL’,0¦Fªq°°º8žao³FËM^ŒG#GÚß häLhTÑÝÀsw[±à‹!qUÓ!´ åï{‹“Â`xÜÊvª_Œ<£‹&#øbH”£ßP0à Æ×ýDÖ÷ÛÛÓ¾BÁ@Í +²sž÷Wèa”r‡;rIã7Œivý:G«­0ã +F©öôsÅÐ,3ã +r.^qër^‘øÞF+í½1á +FO>Ý(ºâ¸×ô= \¾b‰72œ_¡`4‹üÀ(gðù +ÃTý4T¯'õ‰ï[k·ú!à|Pœæš ni¾ß`h™&óÀ$ñ­}ûLbmä|oûŽÄɶÜGÀ–ø þ†‚!Ý›fu¤ûºß¡õj»w‚9G‹m×óDÀèZenÖ#iÔº¾ÇV ÃÜʬ­„íµêb`ôÈ™`n—#7W·ªËT€ÑpÍ3ã1Ÿ&Û«RÑÔ ¾lBŠRe¹ÙÖ˜M§LŒ:†úIéPí‹aZb±3Czvym%ïÛ@š˜Ì¥ªµ!yßFµ‡î03Êznèµ²5°Ø8‡‰«Ý£¦"[hb˜èûþc³aîw؆Å>æÚ¢7‰Õ±Õá`&HŠ›‘±…—P”`b„ü:SB[ 'i3ÃðÒžæ••~`ÔÑ„`f î«ÂØ´°þ¥7î(·®æês>ÑMPÓL03ðj"„a¡lG%øj5šr´[·ÂÍ¥(.M6û‘Wu¯*›H!˜†Jâ!uz‰|Pþ¾¤x!¸Û„‚‘¯ÌíoõäœÄö¶q Áÿg‰+LjÉÿe¢µÆ;4LŽ{ç°¤…P&ˆ´¡ŽîgˆR‘•`fàOŒ’½œüCú•L03R1“Ú8ù‡bC…Ãìì‡. ©+1Û&d ÁÌ@ºxÊjž› ¬¸‚™Q›ú)®r+quw¡Sõç'(1u–ŠFð5˜” í²¨Ø‘\3Crœ…”´ò“Jó ˜8B?‹ ¯’$ rö£ƒ÷GÍÿ¯#'Ø•91}è¨é…E EìÄCki3#ÍaŸ×^Î';~Jö:ñ@¶²é!¤}3ct/ÍŠŸ²¨×ÛÑ3£·n€6¾óãÊT™3c)Òg š åÃ@@0ÌŒZö mÇF#G?¬ÓšßæÙã5彃¿ì!Oéþ‹7xƒ¿ìŸ~øºMƒ_öK|WÊ6­ Ù7õ76üe¼}E܆¿ì¥WLoØíevTùýy*™ão•¨ño«6ÿä×аc[Ñ‚{¹ª ¬Òó²ËKŸÄ=veUÇ5‰ôcˆd˜“,IJ™| WPõeØDŒØ«É\}Ýl7|’¬!†\£ôâs=ºôE)túæ6ßÃÒú¾‡5¨=—Õÿ×v hAÛÀ†Ï6VÝÉÅ–Š5¾/7d–¸úL_“í&º!{ß&NeƒÞ—·{˜/‰?~k^x÷czdapº»ùõò¾!zŸ·—c~nîšÿºxÛú‹þ’aÃÜ:ýéCs™ëé{°ò_Zê<%si_³ÀÃGTu²ýñ@4Þç)Ò7áí‡eöbÎ’õ‚/7d•5‰®jÛ<úøp¾Ä¡nëàá½wÜ*& »÷èã}9!¤>ܼn>Õ‡Ÿ÷ƒR”¼œëóÚÁ:xxÛ¾B%j*Kûçv«.KyùÃÂÍ¥üAž”B{x¹ Û¤rË÷?üc‹9'矫{y ë*ý÷i>œáîóö_~ˆ!µ{aòÐúrCöiTºÜçýBtóiõtíÝ|ìY0çýO ÆÑUo7ïkÅRº¥è†Íëñ&õçN +Ñù8:¶ÑY–1󈞙N–½È{Ï¿ÈþÔ¶s%ooó]^85r*ì‡-—¢¥–f›®€þ ÀO #$ÿ¤“߆Ûãót¾ÔøÕDë¡‚hŸ·-Ȧ4ÆØuD0µ®[33~—œ‘æÈæ•öJϯ¥Í(ø6Ä$NQGÜÕïÒf [Úw¨s ŒŸ¥ŸoÆŒ¸_ߨK›Ñ†è׌™/0~–ö]YÀê~?»ú]r†¢JäGFçT¤ÆÛ«ºa ¬}w—„zªFžÕ–ò9Çb$a˜mlþNKZ…áÀÈÓv… ‘z{0˜ulF«ûä``û•àÀ(ÕÅG,c¤Î03L¾$>d=ŒÔr%80JÍöW/†<—¾afØÁ±Òu‡.º÷l™á@¨âŸ(>iC¶£B“–1ÒfhÛ)Æ…ÐUm²µ”²ëæ‡Pz!80tZä®wº"dØ”·afàŸmjÔÞÛatäÁƒÙÄþýFÏÚ  Éþ ALÂsÌ L\¶ÔQùïs´êŽ Œâ—Û[Ë÷9šlG©úRÑz¿Qýr å­ùåvM;!Fp`äÕ¶°ÔfäI eÂ@œÙR/r÷Têd80šø'n=\ õ»m¯ +:´º3;ÿCZ%˜¸mÿFªéí$80J5zM"yøñ  TD[BE¹q˜»6‚ÿ£J×yã0×ÔŒæG¬¢”€¹xT5[@Pfõ 180²§siê9y>h´ÿBÉ”h(Jp`ì‡Zuòž~iÚ72òú¾¸"6fFEØäß}q­©ÃϺXï‹kö@080zöoè üÃØQ ŒºÏŸB ƒ£{ ZèäâíÚàÀÈݾ¡uÍb‡‘R!80TmÚÑ>C¦‡ŽÁ‘ü먋÷àXG‚¸„AÉ¿GÊT‚ƒè~ iG^< aøÿdÒb4/a_ÂJíND…ª›TOƒcG¤"% :Š^£S¯”R¼èüI¨º—=ž Ž¿Û¤3Ñ'ÔóØàÀ(ÅêH—oQwÍcüA£üò:¯=QÞ5ñ180Ôk°–v·äÓ£QØzž"7(íz*à(ž=é5 Iú^üb þèéO0›Ý§À‚?†,ÕB¹çãë†ã ái/Y(ùÐX +Áa˜¿uIƒ²ÓL!80ò´]%tˆ{ò9j!8ŽXÓ"ï²³¯£ËçÍxà1.­½Óo1Î7øcRÄ’M4E%8N£+ÏdbëGT,FŸ…àÀ˜ëÍ×R?¢ ÕÉ01Õ9ÛR9¢b1úf”Q!˜4œ¡GT€‘! fŽèŒ´ŠòfIJp` gŒ>ʸŒÖ+ÁÌÐç©ÖRÅDpèÁJp`ôéßÈJ„ÙæEÙþxÂK¶cß–X¹p t•g©–ï±»?ª¡L€ú6_ÐzOÝÇj? ´g[*Iï{£Ë3ÌŒ*›!]î{Ï´ùÀâö,µU”/£K'˜({΀ +<‘ŽP›ƒàÀh +­Œt¾å!ƒ`füËv¹%É‚@tEwBP|ìc7Q,Ðv¾&²*ë´/HQøŒäñœPÔ8ȇClƒ‚åç—€$A>{/þó_•…%ÈŸƒ,ˆþ#]ÞÍå +Fëñûh:P P äáhu7e<’¾çª4 ÖÆÿÉŸã÷ÑåÐMLýdXu㿼cdkø­µõ{¿£å²\ïë rÖBõó¾~s»ž`¢@COÌ'„ï}Eà~Õ^0ZæEGñ³ª3œ(È‘Qf½=“1R{9ªžþlkluJI¤92ÐàÇå˜ëÝ*¿Ue×a• 4åJA>£×Ë¡Œ*³Óü8tO©0qµÖdE92jÛ“ò9”Ñr/GÝ×<Á¾Ñ÷YrD´Âír(¢§:^ŽªN–/Ú%N©9ȑѩ܎Éè¶— –j“f×>eÔ!Q>͆èe ìÕ—£j‡Okˆ”‹…ɘýá“#cˆ­”;ºF£RÆËÚ¸áñçK.Ò£%‘í8w(ƒÈÖãr(ƒxM#&”|Íù£|0ºÍ•;”¥®/‡hâ…Çþ&_s¤ÃäÈ ÙlÇdtj/óÒ2N¾æ˜Ó(G¶?]edy€hÍjk¢‘|Éqq ˆaóîE”l%ér€Q»Æ'&Lš _rš¡ñ“##Wî—CBüt(#ÍÄ£ÆÃ—œ¸J#£äÒ/Çd ê/ó¤áAëbF'oµë{.GFQ/‡2Für(#ÙrtA¡ý­Úð–|0PS/Çdtâ— ìžõ$—æÃh‰Z#¢ çËÑõÆ[“¼@ VõÌW¼â”92ƦEPîíe¿>V"4½á]¹Õ ˆ>.ƒ"˜R{€Àò¬½€é÷ˆôl«ºä€ÀÑ Ë0ãõº’|”+ñ1àYƒ(ír(!£)¿`4Îö›8y÷«(#Èc´~9”Q¤ÒËFÍVêhÞý*×åÈÀ£~9”!h/‡è³Ù£V¼û!cZ^rdä\är(£¦V^0J[s¢-Ë×›²•í%GDI{àŸc"z}:€Èêz7¿Š³Ôƒ|0š5w(£áúñr(ƒ­$à€z÷CŽÝŽ$g÷CÀ¶Âêeô\ÇË—µ‚kÆpÙ>\rDT¾Š€#¿@ ­c€5¾Z(½X^òÁhc\0rJ<^0’íD’ñÕBTLnAŽˆ¶Gñ&áøLàY±ÀÑõÞ'-YÕYr$ì®è%–èePÄžBiï}‚}Ñ‚| úñh3ˆëË!z±°€Â2?ÕH@riçû +È”¯ãóßfFTð¶'¥—ä@è”r9&aX«º`ÔfYJÓ¢¯u!Û3K>£Ýe ­·—CéóQZ‘7#ï²äÈ@Ü/—CR¬>^0„,MáJWýt£ Œ GKSîPFeko— 6‡ ::#åäÈÈ©òåPR¿``ŒkQ^½ùatûWMù`´Î—c2ºåË*±#‰|]’ìÙrd”bµÂÊè2ÆËu{Ä8¹ßšcý¬‹.92p»¼ÊÙbáåP¥uXFÉÎØ½}É£Ûu¸uöúr€‘öéä\ó·æ;DAŽ ¤^ŽÉ¶Û/‡ «#\¬G”=´•†äÈ@|©—C86ãå‰g9ôÆFΰ‚´ÔÑ{¾ Š`»H]Ú°n‰nǾâ5KP#¡W»†¸A ™[y9±ƒaCú‚‹Uú¥FÄàû}% Ÿ´—A4‹[!&Ïl¥ØJ,õ ŒF—a"z}:€ý±4£Ç‡ ‹žK ŒúÇ¡ ©Vì/Iq=Bùšê—mÿ%GÛÐîPN~9ÀÈÝŽYBôq`õF#׸~9”ÑvjºÊHÙÆÁ¸=9ƒù`4+0îP®ƒòr€Á\l±-üdà’ÅAŽŒ\r¿“ѹ¿`ÐÌÜéo 1øÑHuv‡-GD¡Ùã£CãåÍÊÕáßïlä1æänù`¬` Ò~9D³r3GnÞQ ™‚È–õr(ƒh’‡2Ò"&í+†h5‰‚èär9&cÌ@òã “´}7ÀŒ­CA>}ðåP·§\9ÍP»÷?tþJAŽˆVév("—ü2¡Åj=*âí/Wì GDg—Chîíå½d›)foYêÈA>«ÏE‡2$—AIÖïÅ­À»_.#ˆ`¿ÕßžŸï½¼ÞÝÚ˜`o|Øã’ƒ=ÙþwƒêêV?¯í‘dï|èÀ99"hu èPFË£½`ìAäÄ_D²£äƒÐz»J€>^ðÜá"9ÙÆo×=i,—óý X¹ï~ßO6IØÇô]f®9ôvw9”€è__EìªY+*ÌÇ@jà Œ]ÑÜFEœ/‡ çjŽÜ½íñXégË‘QÄÊ£;”AÙvàåM—{RH¼íñ@’rd—Û¡ \ÅòË!š.Ûª2¾™Â÷kùÄãû½ãíùõn+q¼o×a?TP7¿#Í­—äøýº›;”7à4(‚ÆšT)2ÈÄ%ÈÑ2Ë¡ˆÕË @à Ú(˜ûw¬¹+K>Ø›—C¸ÐË ëQhéã-AŽ Ü`êåPFMÖ .Ù¶xiÈèY"9"Ú嘈nûørÁCÌ!JûlÍkÉ._óåPFÛÇ—C´9yNã,{>¦|0ÚžÅÏ¡Œž­§]ÑÐgÃHÍs-å G•½~ŸCƒöjœ ’ØÇi¼Ý!AI rd°f‹Ó1ÃÆå²f§)ãÜû’ãÇÖ ŒnIÆ]kxµå¸` òØÇÀ÷q`F%È‘‘ÅŽ¬;”á¿êt(cÇÄLÕÛ1$È‘û\¿Ê`;ú—ˆÆuX øG`;3S=C®÷ûl¦ôx]4Œíµä]0Ð(G€Ôt;&¡[Õ¹¢aÌb+ãºö!Z·ö<ÕH¨ÙÂÄ÷¾PþÚã}|¿èír>áâr$´d}Ø}†Û—C;p¢ôÕAÂE¶ù`ìêeTêåå#ïU§Çw*Q½920ò嘌a­ór€Áb! +ÙÅ;š/G92Fª—Aø£—At ÛŽ2yç#-fA>ûç~Eô2èe"u‹?”ºw>»Ì-ùs Üxåz_ 8Eüz_ É:;PÞ÷èKKŽÚ—Lw€Ñ¯²(š*{ã#Þ!qÉ£[1pÇdìé¸`ôbË—Pt}½i_:–,vlÜ¡ ª–/ßÅß¡Òöÿl—Y–Å wÔGö¿±¾DÐç_7I¥ž` +gW¯pA˜£Ê;ò€)C¤‰ÍÂQùÊ|¹/¼9¦êA˜ƒ­ÿúLQªÝjÿ§`ËØ_8+pøOÂRì^õKÀ¡dÇÆ!ï~K^F£‘ÂÙ&¯ÄãèÊ7ôS}=ª…½Æ)œí¹Qn„9T¥ßµ¦fø4Òê#…7Gó ÌÑXnØÉkª2Á—ÕQð{ŠfCŸ©ÌÐÉΟ Cý*SÁ57‡³ã¹ÏnÀ£˜¤7Àµ¸k2”:#º ú˜ûû&½ŒËûø~Ÿ$ìÓ¯|yðDó÷Ñô0ÁÄ/ºŠV£ùoíX¬Xêç–ùE“‚Jý ˜ò•€b öGxK]'§è¦vÙS >o}6$¥Æá®Õ÷Ì +g©ÏTcŒ+aòt€?(7Éû«žpv Ïƒ0GmïðvŽÆ®oS¢òœnJáÍ1›„9˜g»p¨úvF& +G‘™ÂÙÁÍÓAæWé>ñMFñq4KʾŸW8;„™âqÌ~%ààé?ªêÛ²A1šŸ¥Î +-Ja +íMn„)uÖ#4Pô9úLÁÍÐ< ÇûfhªãF¨m‘õD±ƒcž:åh6 ù:3tö¡„Z/0ÖFGÏ?c ¨÷œÂÙ²¦aŽA¢7ŽÒü,ã£íSè(ÑÍðt4ùýG0^/ïIªL›Š¦Ï—Wú„ó÷‡–v&À Ç09Ùz+È´œÂÙ1k=‰A8F¢õFÀì¾Æ‡Î[òà@ª­)¼9Æ«ÿsàá•P«’>DzkÏÅ0ÂÉQ‹ú4aŽZÞáí„Z­÷u»ì|Š:R4È{²ïõçûžèö·ñu>8txi3!mq +oß÷T€ ¸Ñ0Eñ>†{å8eø_ᬨÍpæ@Ò⇼ÓÁ‚{H8¨æpv0{.ÂJµß8X¼‡âÚê—ÇoJV8;ðdÄã˜õ@Q›÷\ø-zPŒ·"¬ð¦hÞa +Ôˆ+¡ví‘5‹ C?G+Û +g‡Š—° ÌÑ…¯„9ŠÚ‰BñèÎ +ìž“0Å`ÏiîkV–¨yÈi•Sxst?A˜±Þ±º2a%Šš‡›gáΊþv~A<б…³©y ƒ°±âŠ¡§pvŒZù àÀŒoÊŽþþ`Ô³+.Â-…7‡±LAìȘ¢ÔµP$eop§–ÂY1½&`ŠJï¸wŠöo¼9bÁëôÞg…“‚ÑRöƒxóŽ€CÅ·aA9Çõ)‡7šƒ0Ç{k<(PDÖL•^¿ª4o5¢Y@íýÔû¾}_´ñå}|æuÈÐ`ö/¡òÞ +V8*ד0…V_Šƒ«ožŸ‘°z yžXáìàâG?s´ÒäF˜‹³¡¶|Õ19¼9ºÊ ÇÐ+­‚2p 퇼ŽÑŸ´ý†³å¹„9`¦GQYO4Vò©2Í%®ûûö}œU½¼/¨>]ÚzÂÝZïè¥Sx3 ­aŠYyÜ8p¡õi¢…c=…³ùa+Po„9H[T¾®£õÎŽŽNä Ǩz#àèÜÖ\¡JHŒCIrxsŒÂ¤¾!èkˆC*Ç8DjKáìÀöla4(óFÀ¡ë‚G˜Ñ/vpvÌw;a~7ÛAÀîgíÛŽÜs…“ßRxsÌÖâqÌz%ÌA¼N ¶kÔ>Üeß=áäô5ræîÃ;8pÂý.0_íCYòͳÂÙñ%… Ì¡z{´Gþ›jÒ׿}¸ÂÙP‹ÐA˜¡Õ)7êþ-4”‘ ½ÍzÛ¢w>S‘…²ñ‡Þ;îm®ÎΖAñ8Pkn„9ÊštdŽo ÇrD4 p¢ý}ûþh….ï 6X>Nɶ¡.Þ Øça +ô}z#àJks6\¾Ò×pø(…³Cõ€í7ŽÞüWé˜QúüøF³Â[£ <Šé tP (úÇðÙXmÔ†žÂ›czQ ÂÀøF˜£´•]¬«šá¨”¢YÑÕ§=Sàèµ…Öæ3U‹~§»‰ähV &=S0ë KÜ~ôÐéwºÛêïÞèf˜>êÌ€½Ì7 +t%N˜-ÅG±ÂÙÕäƒxÓsÝAˆåíõ@) +.Ÿ[8´Háƒ0ƒ6ßa†Â+µúÆXm´x3…³ãÍ^˜¢‰ÞÞ‡¼"IQ޵.cÌÞï"}€ üúˆ%EYÔÆPP)œÕ×(Sà¾Õo€ Ÿz:ÅN®ßZëÉál@îñ(] ±„ê}s‹v Íš'‰Þï±Â³y³{pàŠ¹ö~^´kŠ ?R8;{ê àl4½樮Dž¾WœJáìÐê57smáìÀelý`Ü?è[qmÍ+Ï +oŽé4ˆÇ1½¡88´½z‘ò¥s|¨¦hV|™>SÔNW +ä5T©H(r0:Óù¾X½ƒ<°Öo¢9¢îaUýj°Â›czG„9¤Îy#ÌA^Dñßüê·â^—¢YËÁ<S Eã!–òúZoRÜxBá{sE³b²·¯<ŠÑ¯¸È¬ÃDuFÙS4œÂÉüRÀM½<±œçÙ™J‹²‡ÎÄï+¼)ºß£‚0Z¯q#Ìá]VuÏšßšÂYAâi'S OÑÌmõ^ª`Êb¥úf^áì¨äE&ˆÇ1½HÃ+;2rT>™êS¾Â›b¨„)f÷pPô·?As•³á|…³çŒ-Ú®mµYýoNŠâ'£<'æ g‡¬ÛD&Ì¿õFˆ%¤'yãÚ‹oɱG”RxsL¡ƒ0G-]o„9ˆü‘hÔ?i)…³Ù°ÄãϤÿb]bõÕõOtRgz­yæà¦7 +Öº¦jÌåMÑLÑÍ0ýç`áEí¼Öot4QŸBô%žpvàˆ·ƒ0Ò‚Ü8è]¿¡V^‡u-)œèÉÚA˜£•+` +zZ*<âÅOøžh6Ì"|aT¹bùb:Qz?©âûÔü#}l_:x{Û¾=˜ûïÛbi¢¬Å})Šž”)5…ó÷‰øL€ãL7Šnôóˆ{=Á¼i +oŠág>ˆÇ1}ÂE|OpOõT°ÂÙQ_Å@BEãˆÝruMI›4¾s +æm…³‰`„9Hæ¼p ¡ñGh£g8ˆ5…7Çäqæ¨uÖ‡´î„h”=”O+œèNÂ\F»bGx¬•Âé_.gä¡ÎœÜ~cüÓ]&Ù’«0\ч¾YTíú™ÈÔ ìx71ÄZžcd¸®3(뢼S.Gp:ð™Q\Ècd¬•óy_dß]ªŽb{B>±I(-Œ‘ãÚ">†dÈQ»F!»ú;ã)¯íWñ™QŸ?ö#£øVÉ WVñK£ùökq,«ŸÍï/õ3£7’ZKë÷º±S>nÿÖ‰MD­ácŒˆ*ã#cd8ýMI²Þù––:øŒèiÁkŒ)ØL†D´õK%©ÒwÆ} åÀGFs~mn¯12zXÏÇH£ÐÖ9)UòökãKÅ›Œ¶v…׌ê\id¤Qh«£câ=ö¢ «bŸ~•ø+̈¶ºŸ ¹­ýB–ã{ìÉž^N|F¬Sý}$ø’ñý‘à‚†GùœÏ ‚l-ùÀ&¡¯Óþ5F†\X;’!›ÞúcIz¤7c¯Åg†|Ûú1FF ëÀü’!G¯Ö†¬Õþl†AÖA;ð™!{Â×ÉÅB†d„ÜtíÉS¡Ô5­ŠÏŒìÖó3C>"iTÁÚaB­ïr_ žb“Qsú##OBE QvØ÷ø ÏÙ øL(Éù1'2F„ëÉ_}g\ÞŸÕ¯uø#£z6’A\µä¾3eÏ;°É¨¥Œ™Ñ=’ÑÖ§•^é=ý䧬 LñÑäžú1F„ü]OFÓ³ÊÉ—ðžr(ÆŸ=¬}ç5FFÏk:>†dH±è§’}ô=ÿ‚—áÀ&c_½^C2š´“Œ‘á×Qãçn³3\_— ÅG†œ4µ|Œ‘áwËñ1ÒX£ët’}<¿SîÂúCŠÏ zù3£µLFkÔë8Æýà™sßË*YÅ&£¯ÛÌkŒ ¹O¢12vã(Ò³­ËZ¨â3#”Uÿ¯a3¬a2Âá×2é™ãZ¢Ïû6 üüûr:?wy´ÎKÅg‚ì¬þcØk¼å¯Ëö\j|‘ ôÀ&£ÎÇi—a2r~@9‰C;ð™!fû6Ã&#†·qó²œÛÏŒâ}û6Ã&Cêç©qŸJñ6uv§a3¬qf´VüSã>¶yZo|fÈLåa2>†É(cE>á¤gD óör +6Â&"9÷–xÈ4 =”Ïû6Á&ÁW÷lêò_;èÑól°OÁFX㌨=öw¾ýúJ·ÐœTWèñ#˜k؈ê޾ͻ¸‰MƼzž‚0‚â™m'ë¿øŒð¥|aò{ø¹Öz?ð!=ÄG°F°.¼gŸ“Ië>#ä–P?†Í0†É(ÒM¼Ã¨)·›Œ½M¾†É°†ÍÈùmÛ\©ëƒ(>3’ôÃfÃfÄøL®¸µá)>3²žY§a3Œa3ü{kr9VÿR“PËç}p¾_ãŸ\Nª¾Ÿ[[BgpöõÀÛ(Mö .-ÙA.­Òû¯Ÿ¥Zã8e|d|}ŒQkùÜïGÿVt꣓¼ xd ߤÝÑãöƒ| xô?á“ñ|ÆÆÅ±¹b6rO0rÅlÄÝcX#þè1ä‘ß=†5üÃÿÓF®˜²{ k”=†Ý5¸1­û»7f£´»7f#å»7fcÞ0ocb4jïw nÌF-w nÌFŽw nÌFttCUÌ‹âûòÕýuÞlÌFñ"³Û]³áó]£g¿B~»´³­˜”;̶b6Bh0ÛŠÑÛBƒu®˜ 9±a+f#Kõƒ11ÑÝ{ÛÆl8è/6F#¶LÕ§˜ýÅÆlDè/6fê>Åh„aNÊïWGÕ§˜Tà'MÊï‡Dµ§˜ çïî~c4|­ww¿19Qý)f#zª?Ål¸Fõ§ ×2ÕŸb6J úS̆tÙ0rÅlxè-6¾ ßÿäÌZõ7î€IÎû³QwoaʽÅx”voaĽÅxvoaÀ½Åxä|`LŒF«-µÛPÌFÎ)111qOOœ|w&F£¶aÜŠÙ(cYÜÆÄl$`Ƴ᫇WŒFé©Á:TÌFõÞƒ11©9ʘ˜Œ\1.TúU£‘k§ +TÌFÞý…52÷ãQ¤e5)¿ï]&ab4dš¨þ³QÕŸb6’§úS̆o$x¼ÿÉ“Ø3}(ÅlÔa.³‘z€ùVÌF(TŠÙp‘êO1¡ÉNyŠÙÈ•êO11Qý)fÃ{ª?Åhø¶û c(f£ìþÂ…û‹ñ(yª?ÅløF»›b4\ßý…1³Qi[Ÿ”ßO½ÂZWÌF(j\1.úQƒÑþzså*ÙÙÈ÷0å÷cº÷¶ÙðᮿÑh­ßõ·1%'ÈPÌF +‘2&f#¸»þ6F£JW¿J15Þõ·1ÙÝõ·1Ò1_õ·1.µknŒFiptlÌF¦ˆIùýˆ W1>Üõ·1¹õ»þ6f£ª?Ål¤xw÷³ÜÝÝoŒ†ìIf\15%XëŠÙÈž*P1¡Q*fÃå#WŒFlÐ_lÌF†þbc6"ô³á¡¿ØС¿Ø˜ýÅÆl¤ä`µ+f#x«]1¾7ªAÅlÔԡγ‘}§Œ‰ÙjP1®P *Fõ¸j°Æ¿RªŒ÷Åld©O0&f#ÖUƒÖ˜˜ ©ÎÆÄ`Ô¿Þ}¼~ÕÆl”¯‘oÌFÊ«­11a÷Ö?zŒú×úî1Œ¡˜Z|cb6rôŒ‰ÙˆnÕ 5&fÃÕUƒÖ˜ÚàýÊç²<(®Ã¨³k‡Q+fçó­Ò}ƒùVÌF‘; ³‘ò]³B…•®Ü{‘+f£–#WÌFÞ†5òCÅÝaX#þè0ä‘kV•b4RÛ†1³Qü½»mÌFl÷î¶1¾Pý)F#öHõ§˜Òd(f#•ó¡˜ ¹ÅÀJT̆ì00ŠÑµR *fãÂË-¹a‚'Š +X¼ï±À­+Ò´+þlMˉ—£S…Ùh•:(ÌÆý½°ra4êÔAa6fP…Ùh‡:(ÌFÔAa4Ê #1÷+fãç Œ³(ÄŸùR„‡²í½5>„‡²p;ì‹E¡­õ~ðýWeaô÷sïCx( ­_´( e_´( +q?ñE‹²0£û¢EYh§û¢EY¨³mŠB=­ùæeáž½¾ùDYè+ü'‰²=¼¢¢,¨Ã1^Ö†¾‰²po¨ßgQZ¿Ï¢,”Sü>‹‚Ð^g󽹓²0ã|oî¤,Ü'æ÷¢“²Pçþ^tRöiû{ÑIYXÅŽ±¤,ôeÇXRîëÀ÷ÖKÊB©vŒ%Eá¾ Ø1–”…1­oIYhÍú–”…Z¬oIQ˜{vÿ¢,Ì^ý>ˆ²Ð«5.) u[ã’¢0ΰÆ%eaUhœ( }CãDY’²P'ŠÂP¡q¢, ’²Ð|pHÊBõÁ!) +m¯ù}z'eaöéÛ[”…n‡7äø`!ÿPâç]ÏQV@ßDYèŽ1Qb6¿Ï¢,”Öü>‹¢p›Øü>‹²0Vøæeá¾DøOeáþù¢EQ({Ã1&ÊÂôÁ!) = o¢,Ô³üN‹‚¯s~‡ß÷®_ÌÆjsƒñ`6FÉÆ}f#Öá‡rþ¾a’ð`4~nR¸!ÌÆØ9¬fã¾40ÌFwCuç£á†0sfó>Œ³Ñ[ÀÊ…Ùˆ°ra4æYV.ÌÆú">ŒõÇq?¿Sć1þ#îGñ;F|ñÇq?*¿sćQþ$â5v¥ +³1öÝ.ÌFv»056´\;Èlh¹0“’‡r¾7:„Ù¸oX°na4ÚYî¸0«O¸ãÂlŒ  +³‡(ÌÆÏë(F#vÐù&ÌÆ,Ô@a6Ú¢ +³Q;5Pz +]]a6hÖ¿vaíÚ'ÌFTjŸ0åljŸ0kPû„ÙAÿbðkáý$΂»-ÌF™ î„0õu_<¼}‰Ù˜ÅÛ—˜ûîaçmb6j¶òÄhìS½}‰Ù˜0]$f£Ãt‘˜€é"1ëÀt‘˜ÓEb6L‰Ùh%l¯'foŠù{Õ«u<1³VøÂlÜwT¸ÂlÔQ`ÝÂhÀS_ÓóPû„Ù¸k؃ÂlD£ö £ÑÏ­¿Âl¬EífctjŸ0­Rû„Ù(›Ú'ŒFÛƒÚ'ÌÆŒw\˜vü1˜:©}ÂhÄ¡õPίBíf£/jŸ0q/<f£TŸì£Q×òÉ>1£¸ãÂl´z`¯ ³Qö†½.ŒF¹ï¸°ra6fÐÙ&ÌFƒé"1¦‹Ä`”×}jùù–˜ÓEb6úöÍž˜€é"1w¾¦ÿñ`4öÚÝv{b6Æô&f£5Ÿí³Qî•ãÁh¬=éê +³1›w01½x³Q—w01óî؉Âl¬êLÌF‡ù"11¼ƒ‰Ù(áLŒÆX0c$fcÀŒ‘˜FÛꡜ¯eð`4î5¤ +³1;5P˜~_)Áx0Õ_ßóí ºPÂl¬ðé>1ýøtŸ˜¸Ó +f£Ü§F#ö=+Ýfc,:Ý„Ùh½ÀÊ…Ù¨0a$F£n˜0³1Ç„}(ÌF ÛJ˜ +Fb4îÑJ§›0«Q…Ù¸oI°ra6bQ…Ù(®®°çuvµ?)æïùÞ†I1/Ç÷­HŠùV¾¤”ßûXõ’b~N+^RÌw*’b>Š•.)å×å|½¢˜_>N$Åüða")æÃG‰¤˜¿›÷{Ã%¥üÜþŒHŠù_ÿ@L·±¾(I1_c}—8)åÇ>V¯¤˜ŸÓŽ®¤˜ïmøÝÅ|Ý“R¾ß—¿»¢˜¿ïfQÌ€v‰b>vóõŠb¾ 8­D)ß¶ I1?´Kómßo¢˜¯>($¥|œÛ_ósA»D1ï3áb:*´K”òõlh—(æ×°Ñ<)æGØ`žóq ]¢˜/Ú%Jù²´Kó³@»D1ßV÷õŠb¾vh—¨ç÷럒b~ú,óÝg¤˜Ÿ’R~Ÿ’b~Íú½Ÿ“b~´ú½Ÿ“b¾•ò]¯¤˜/÷¹éù‡RÞ».†Ù»(¿ö¢˜oëøZE1_»ÜI)?Oµ;)æç±n%Åü}±õß#ŠùˆßÿPÊßG\OQÌßÍ»%ŠùûÐ÷ß#Šù» á÷<óe‡ïQÊ÷mo;oˆéÐ,QÌ·ÍÅ|Ð,QÊ·Ó Y¢˜÷KÙø:¶>m¾NŠùh6_'Åü=,àÇ<”ò±ôJó£/?3E1ßîóØóÅüý¡¾^QÊßôJóÓg€¤˜o>$Å|õ )åËñ )æ—ÏI1ÿ3|{þ¡˜ŠÇ_éR›÷VÔóëuî¶úîmRÌaóuRÌ·°S*)æ‹OI)¿÷´v%ÅülÖ®¤˜ïÅÚ•óuøþ‡R~níJŠùåS@RÌ÷míJŠùÖ®¤˜/aíJJù¹Ž=†’b~L{ÁIŠùÖ¬.I1_í±ò†”{Y»’b~vh—(æ{ _­(æë¶ù:)åû¶üîŠb~Eõ»+Šù~ªïfQÌÇ,¾›E1_´K”òwØ…ÓJóÃg¤˜o> $Å|õY )åcû,ó÷¡æûMó½.ßþ¢˜¯{Á÷?”òõŒéûYó«A¿D1?ŠÍØI1/|ÿC1_:ôK”òeWè—(æÇ†~‰bþ!¾^QÌ×€~‰z~¾Î>Ö¯¤˜Ÿ> $Å|ëWRÌ×cýJJù}|HŠùåÓ@RÌ{iyCLß¡ý{·%Åü¿Û•”òkWkWRÌ=¿ÛžóÍÊò†˜®> $¥üÜÇæì¤˜ŸÓæì¤˜ï­û½Å|”æ{Y”òãÜKayQ̯ngUR̾^Q̇ÏI1_|HJù¾cûnÅü8Ûw›(æ›ÏI1_[ñ¶ˆR¾íÅü\Ð.QÌ÷íÅü¢üú‹R>Ά~‰b~ è—(æG@¿D1ú%ŠùÙ.·,YVˆŽèôñƒºóÿ½bŠýס‘»L-¸_Kæ“pp¿–Îo¿½ÀVÃù܃ûµÔp>ýö[æãÉܯ¥†óÛo/°Õp~ Â;ÅpvÎAéZêïüú‡ùça´ÕpþO¥[Z8·æÌžj8?ñÞÜ­†ó±iïZ·Íùí¶ÎGJz#»Õp>÷þFv«á|*ý íV£ù}P{OòVÃùmüܬ­†óKýÉT[ ççßN`«áü”~nÖV£ù­÷Ÿ›µÕp~-ô{Þ–ÎçßN`«áü$?wk«ÑüŠŽñ÷n-5œß~O¿já\–àn-uÏïeð¤úGå»`eºï—Ù‘?Çï9:AÎ`Twƒ¡ù£³IÁ9$¡Ê¿*šFl[ìøšŽ„7ï@vЭÊ×±û™ëôU÷Îÿù/Þp(½âùóšß²[ È´äžúãx†>ÎÜ’©ûÒïÐ牖œ¥?Ž{h;FIyÉEü«êwès4äÑ)·ìß¿CŸcìõ«Úÿ™£&²-ìâÔÏÈ7¿–1UÜÑVnÃ=ô9—ÌLt;î¡Ï¼äÂïº‡Ž£÷%Wãq\CÛA”× +Nõulß¡ã†W¾üzô—[½Ïá;dw#·B‘#2³¾q×&ñ`h:Æ×Üq »^7×°ýŽì3ÕYÖh]ø>éÏÐ縯å•=óÌSÅ¥Û™"ÛLxåÉ·3O¥.c%£\HèÝ^´xŽ6r²ctÔoyÊ(Mjà˜Œ>£ŒLß:2%[Þ’=C*îÄíP IàPÕyr1ÔåÃèy8Ù3ðGChKàPFæí(ÍZ3e@®NöŒ6,Ç1¸gCL??»œöNùbÐ5´ë^¾†‰1‚Bν°“=¢–ÄC8$%p(ëZ Gûi]£2‡œê¥¥ñ€¨£ØNÝEÔbÑàZˆJÂNö Ÿö8”ü9”½5Já‰x݈©^¼uƒ"pÖZà˜ˆa÷†“ÔðVì9ùb¤Ö‡2˜%rL†˜ƒóIˆcpv²gHîåq('Q‡2¨­ROüåCNµ'{D·-9% À „Ìf@éü6Š)çædOhMúãPÊE0íeg„ì0†• %{F{k?hèr“ñ9Ò)œÛÞ¿tצ[rÏŸ€L×Ï£.®ßŠÒ|Š3[I^²~ +²]º ЍÅNZÂ塃v#—ì(áíq(±£Ï‡ E§ }×›‘¾²“=#ï°‡2Zé‘Cȶò4Òw½¹~¿jÊCwûv(£¶TÇdôþCÚ_Fç6÷U L¯AVà^‡"ŽÆB3Q¯('{F*ó0x‡2¬P¿e n¼†Ð§Ÿ÷’»“÷‚éqLFÚË»`´”ÄÔä„\R/Nö –Ç¡ŒL•ÇdH_/ƒå„\ú(N¾©”Ç¡ Ê9”Amí‰ 'â£r²Gô\éq(" JÈÅ¢!(µ_ÄK¢FNöˆV™øQ#0(‚i¯/×RÏG'{Dí܇"¤e“±^Jtš¶B¥V'{Fµ=eàÇ·À¡Œ²ºnFÿ-§kÃéÕɃlsCMF`PD]í†j;¥¯dÍÉÚ9ÇD$®Cm7¤ÌSü +:ÈìdÏÈÕNúq(uZ‡2 Oé¿RòÞ){^²ùq(—<ŽÉ@öšC ]ðYGäTHC^ƒ"À¨C²Z áÝz.GµU,õB ¼?E ×¡À¡ˆÁÝ>VèÀ‚ÔìeàT?eP¿dÇèi5Tú²’SQÿFw²gH³»yÊHÝòç혌aѨ£žXz³”·dÏèï|ÐGJ0]û°U´þ_*,’-ÜK¾¾Ÿ¸<ŽIH•‡"²Í/rjº#"'{Bû1(@HZ`P¯Fhv¿§ô•Ѫ8Ù#çúãP†~)pLÆs¤|JvÓŠþ’=£´½#ŸC­\²gûbx*_Å ­Nö¶-9%ÔzÉž€D¸î=.Û©|ȶSK¾vüAè )0(¤ý\æSùð4°-Ù#2zÆÇ¡ ,®e ÜÚ¥þ¼â-“ìTm×Cߟ“!VÐz´v½g'{FÚ…ì8&ƒ˜‡2¤Y8¸¡ þH¶^v tdvFŽC”m¯n‡2ÐüØÇÊyl ™çqÔ‹@Rïù +HÖ]Óñy”s+bhGªûþ®"KöaË-Ç »‘·a"†E-oýª7&ëЗì½ZXCÒ,ûße`ë|d¤«¯ê!—U/{FCÛù8”T>‡2ð¿} ÅæD»‹eÿ%_Œ$Cm÷X·Cœ-=Á¹àR39Ù3*.Á㘌$#pLưN''æsÃG¶3²dÏ(…ÛãPÐ9p(c—1D>|ˆ=Õ–ìŒJö8/E ^¿—ÐÞÏ>«ÑKöŒ<ì÷‡2À¡ ¼ÒÌÁå¿F¼S¾dá8eäj‡Û¡Œžì¢?¡q£{Ù3ˆùu(窎ÉK;Iätl-7ëË–ìi÷½Ç¡Œ$Y‡2p;ÍÑêiÙI/;Fû®i Û«Û¡ŒQ,O¦’Oý÷þdÏ@¯ñ:&'6p€1P®ícÁwÍñÌI^¾dà8”!û™z;&cÌû‘ÿúóŽÊ31lÙ3:ËcPD_mòkP­B‡¡Ž\÷!Zš9tËv«?™AH-p(­JYC˜s¶ª­–qËž—?eÔº÷ãr(Ñ>¦©q#z)N½ioÉž¯´fõw¾~¿¤f«Nå@T‡Yå¶ì +]xƒXJ Ñe9ôÎäƒ"'{iCy›Û¡ŒºÞRªH¾c”*Nö \~~“A¼Û¡ŒÆ}-Q¸–¯ÁÅ;Šº“=ƒ$·Ç¡ ¤ÃÈ¡ {Ð`ˆò)€È‘¹:ùb¤R‡2[oÇdˆÅ£Ë8E)Nö Ô~2/]ŽÊ&ëú¡g<°g^v •éq(]tÊÀÁZ+ï…Oì¨Y^ö Ùiä8”ÑQ\GoØFö±œò‰9WË.KöŒ>ìj‡2pÚZà˜Œa9©!ü'æ%ÓpòÅ Jc2R‹Ê èå@ÔNö¼ƒ^‡"j¶­ºŠ@·!”­r{ÎmÙ3ðœ+C(I5p(ƒ¿_•%7¶½dÏ(ëUãÊ@†¡Àñ?Ûå’-IÑõAÑýo¬Åë9©A”ÁM€Æ°y­J+±ãh8Éáå7; Qw ñëXˆá…¬õOµ{îÞòÅ ÙÆ@‰m‡1Zó€ ˜_bW´ØI͈*¥þ QÆË`„Ξ0P·ç—×uîÇÖ‘3‚NVÇB”ª‡1”tߨFuŒãø*Mò嘾¶2¬Ñ?ŽQkR³at_(é=¸âj´³w ÏýÖit™3ÉÉA¥ö½yR‹~ÓÆ;Ñ÷bËÙA~žyâL|ÑžåËàËÄ*ý;‚Õ,gJО^P‘nG=«·åì`öNÁñQV€’œrv ít  +ÒHòåðÊ„g¢°Ô–³¡uo*›_šÒÙfR³¡‹Ï¢"è÷M:zKj6(oÂ|¾oRÅMJò嘞†i–XZdï¶œCû> 'P‘6>-žâ—ˆDâžj;•jËÉ‚£ûÜЪ¿Çb7“œt*IYoÖã`ñïÜòåžý‹¶¸vZ›ß»-gGm¾‚¥Õ@úG-5göYX[3&IÎñ/èqcJ)Y¾ sM‚ÐvpÜ»>w|äìh}å@ZÅ÷»xHsšåìèû ‡¿ÐN~™¼ÛÚ&9;°ˆcÿEÒ¾‰w<Éf’/Çô¿Æ¤¸x½uâ$gÇØÏ%üÕGÜ< ü«¶œ³ù<ÐøK̜ǬIN.Üü«êשš£Ô–äì âóЙúÎ^ÉdË—cèž"ŠiܽNÕ¿jËÙܼ§¨-õ„½ˆÕ–³ƒy¸Ÿþõ6›&5„üsSöoÚþä~Æ!¤õ–œ¾ûÝðå’äìhÚü¯NœÛ™äìè»u&Û/á(R“œZûžD§VbÒ´'9;Fé;X*õ8þM?…¼á£ûŒ«×X$ËÙõÞsh(Ñßl¸,#ÉÉ!…»Ã+ÇÕÃ*%9;бl<ŠûF¾à[¾ÃçÆ3®žIÎŽÚ} qaâêÉ$ÿª-g‹5aŠ«‡²Ð³œç0£"ÇÍCS5É—a÷„iqó¤{:Øj6´s<¹Wþö[Ú®bGÎŽÞü3Ï(‚Ƽ&9;´ª;°-ßœšäì@o¿§Qgú(>ie©×xõóBçÙ3¬öø}Ýò›ñ9†µ¦­Ññû eX=ÏcÈLêCŒSto‡!¥ÜѰ5ØÝڑߌÏa ¾T·Ã,~ÏìUFg­'ùÍøÆè§Ý¸Æ@VØÿ”14ìËoÄçXˆRùá0D+žÄÍFìøð²¾Õ'" c=ê|8B½ B)ÐØð1™’üf|cûJÝc «ÙkRø´…Ƙ8âI~385’ H{8Œ¡ì%·_cÇgó3²å7ƒRïÉÖ/>Æe£üCOÓcËÑÉi’Œì0i©ÇbŒU2ñ—žn ÆÇH’ß Mý-£^´‡Ãxzù_2¸c¿áŽüf|0*JæÃD/<ü¯zâ…èg57Ä7¢¦ºN¢—Ã6`ÿ…dšÆîòŽüf|Žqž¬‹±ïù‡æG¾¼ÎTy$ùfÔ_‡1ôi0ò¡Ðü÷@4¦$gD™ª?CôæKu;ŒÁrÌDÁØ…üÈCW#–ÆÀ]ž‡1¤:¢àP¼S%É¢ÉüqBvÿu¢ß Ek;Ž7‰&ùbP­?c oéÇb ?>x†DÄDG’ßÀp,Fñ¥ºÆèÍ·C¥D ä:ýnùbœ³c ëy9Œ¡ç6+i”@F~«IÎŒÑËøqƒjo‡1ÆÉJ@ƒ¶'É™¡ÃóB8Œ|>ŽÅ˜²ñÈÆQñèð£»å‹A}ü8À°Î†c̳¹]FAnÄ5É™ÑÙÓt8Œ1ºoìíC‹øqèµEd·šäÌ@óM?c` ùá0~QjAÆq«IÎ Û‡1° üp,ÆÔýWÓEO¿µ[Î œ~ùq,FñµºƨÚ÷õl­§"8 +q’/F½þ:ŒVéa0Ëp§l5zsü*4ïáíHû;ÞÂKÝËÚ¨´?9«9>žEýÇ`|å|8Œ€ ½gŒ“ÕO +%1ÐüŽ7Bíž oÇ"Œ¾7oʨ}T“šØg_¾0‚ÔWévÙÖB"‚¤gùbŸåp5cœÊ+4‚Pk§P3`°ß¡o<âLí1ÞÂã²O7žUq’¤NO¦[Î=54 Q¦<‹1}qÍø»×è¸}Ò[ÎŒ>ú¯Ã£>ƘêÕ˜eÖï^‹à&ùb”!?c ððÃÆ(âMÊiýîµ ¬$gF«^JÂa ëc؉Þ<Ù‚¡~“¶œ"Þ>„ÃÍkÛmXˆéWJúR¹à£f’3‚Õ» p]?ƨª{†Hòѱ‰VÒ$gÆY©0‚géƒ!¸ùnT–;®S²|!èÐ?Çb¯a·ÃR=Q‰ ÇáÔ$gJ.ÿ8 Qi´‡Ã­x=$”ÜØðÉ3©¾³þ Vj< 1|3¨ÛëЭïZ¶œõ»Má0žX/‡1º§<’Ú%gnKÍ„/'„a”m´‡ÃúÁiD·†Gƒ§Š-_ ò»c ?µ·ÁH†û¢f UØoØ–3BÙï~8 ¾\ŽÅ˜þ½È4Qø(J–3£7ýu£ãIùpc¢øí¿Z‰Ò‡´ÌYÎ äúq,Fñ;v;À˜¸ýþWÕ¨} ·'93dz³c4´Ï‡1¨zµÄÉKÙ³'ùbW¡pC¬Áùë0F-¶Ç‚¸B­¿:j&°X«–Ç€Wiø¿âŸH8_"l»5Ç_ù?·ðµþ;ÜÂsÓ ÆˆK¡Õ^³GÍáqû=Þ⣠Ç[|YåpÚ^DÉS4Ô+~áŸñ¿ ;^¿ã-~£¾¾÷"Ê]Ûéä¨9~©<ïñ+¾ÕŸ?ãWüaýÍ´µ®M¦¤¦ø8>Òïñˆ¨{}îñ¿Ÿ/Ž:× •¤æø¨õoñÑþÑßñ_¥ïj‰"×w¿xÔ_G›÷x‹†^ÿŽ·øƒ6 TT¸N¢-Ô+¾_—oñQþ_á§RŽâÖ‘P“šÃ£%”{¼…oûNÜÃ-üÔ¾ÖωÙ"üܧa«9|“I÷x /ºÏà=^Ùâ«ÎØ]¾ÔY@ïñŸÇœÇ[|ªcGBvýò[—KÍñÑÉ=~Å/üoñkÙËßGz= ÷hõŠOt·ðÕ¯è=|…{ßñНGòáOÌÁѲë5Ú‚SÝks¶Ø¼Ï[¿gIÇ ŒCÍÁ©U¾Ç[ô""Ç[xäµõÇ*1'¼RçPsø¢|GtMÇßáYmqª}¬ŒŽñŸírË–…àŠ¦ˆ‡Äþ76)Ò…„¯zz²¢£\`$Ñ"MzÜÏø8Á»ß”ÛqóÛ¿y”ŸØW›|;˜^þ:ÆÍ»_­ðîGQ£¿·Çv5é‘f¿5žˆàÝÃ`y÷kWþ2)ãœ[-åyžf¿žóà·¿rÏoÞý&\\F ¿æ4ûñsÇÍ»Tî×Í»ÃÚ~žŽ‰åTeE“è‘fÿX¬²Á»Å~þå·_¹r³g¬H‘^þj/ÞýJä/-ƒëJÓVø—ŒH³MÑnÞý2sšý‚¸reÄP…1U%Òìo“]:x÷W•õ—w¿ÛOÚLb¨B“[iöË3ïþbóƒß~cÉÃ{m í¡J¤—¿Þ4ìi··GÞæš!Wq¦Y^[yñ[_{ýË»¾w.>.£1RáÕÏiöãíyñî7á–ܼûGe1ëŽ_¯ôðË›t]7ï~í‘^¼ûG*AÁìá·Õ"Í~[iƒwÿ\Ÿÿd÷“W#Ìè\ƒ^òÊm9´»ÇóºÞ4ÔÏ-R£iéj‰™f¹6³Á»½[]<ô¿=©¸Ãž®eØÀ”fÿ,SÁ»¿-¾ /þU¸òõVïϷî4ûÇSPƒßþÂÏ‹w¿õýËЬç6­öÕ#Í~ÞzóîǺ¬^q9<æ*¢ma~é)½ü• 3x÷ÿŠ×‹‡¿>m®báÇ­)Òìo !x÷—._¼ú†sžB?¶…¿sdšýÂY?pè1pÓ_¸ë—¿àb{{+iÖã½y÷Ûä ýâáG]£¿¡µÿ("‘^þÂ[mðîWã,ôâáï<-¥öhZ6Pö#Íú§*îög@ѳÙÊU–e³{¤Én«Ëºù­ßoÔÞýËG*|2-Z&¼²"Í~|õ¸y÷s°üë—9êÑìcoõùM;ÌvÔD¹q·ï¡ø9N2E";kcDxÙ‹×ÁŒ»¯ãüà¡·Ö· ÷¤èX(ëaÖO/ÜõùÖ¯Þa¸6†‰q†~­³~ôYoÜõø7òÁ»ÞÆþµ6Z=UßY#Ìú¾§¦Œ»#úüàõšÿà·RNÃB÷o5Òìo¦ãæáïk™}ðêý]é/ضãG)ª‘^þbõæ·¿Ê?¯Þc“ݸ:¯VnÒ2é^“ÑÿnõÚì9vã¼ï(Ä«FšÍu”yónׯUyñð7åªkÓ›Ú¥Y¤Ùín7ïþ9ZûàáÇÄÏOpiˆç¥I¤É¯û¥¾x÷ãæ¦<ü8û÷¢X[ ÿó«˜^þ*/Þý<Æ/ÚíËHÏja²X‘f»5®Cðno+§Ù?•_Üg4*Ì\¦Y¯£­›ßúò,ÁÍCïÃöþDDãñÕËN³*OxðîG»–^ý>Á#‚É?½œ6f„Y·ß¸ëëS_<ô¨-üD5ZÕ¡ŠðÒW¶À]æ½>x× ÔýשVü6£_èMÂÜÖ亼xÅwÎÉOPãžuA+.šÂ¬ÇàÓoÜõxºþÁC_;ûÂ(&ýèqŠ0ëEY,w½ZÕ^}¿Ù`º 9vT·zÂl¯kéEoy‘þ—v÷štOùµ¨õ»¶þÒË.œ3‚wý¬C?xø›råqæj<|›¥Fšý¥×wýŽxøQÄö5Áv?ÞŒiöÏçtïþ²Š}ðð[cUò!–EíyÊfÿxwððËúíÑÍ«O ,ª¢úëP~iÜ ¦Ùߟ²üöWÖÂï~cÁ¡ëø—pÎbzùŸª¼û1’Œ^Q&×_š?Âñ/ÎÐL³¿=M!x÷kïõƒ‡¿bzØŸÓ³¿~gÔH³_^´Ûç°/v©¶yügžÝ­õ)èL³½jÑ›wÿ`é~á®_ìuÊ<›‹¢ÅšÈ4ë1þ¶›w}ç¾pèñ˜üâæcàÑ?¥›é¥¯/ÜímqäyáÐc®ââÔ9ÎÖâBÇáiÒÕÓá·¿pD}ñðÖ÷ƒ ¬±µ]x ˜f¿=cdðî—ºäƒW¿…î“ë£xìm_\M¦Y `ݼëëó£^¼ë9ü!î§Wœ[‹4ëQ¸ìæ]_:WçÅCak ôÊÐÏ^í„—½r¯ y]“íñ¦á¶¦ü Ôvú,ÞíDZÓlÇ›VoÞõ¦|^<üËïÿé&%üæ¿õ—f¾)™w¿îëÑ^÷,ÈOþzü¶/7¿4û›ß›.~ûKé¼â L£¿IŒPxÏdFšý¨ï/Þý³6ûàá¯Ý‹,>)~Ÿ9þÕg¤—¿.½y÷A­ÿË«âs³¡YœW_Êä®0ÍþÚ¹Á»5ù‹‡w +ÙŸÌM GÅ4Òì/Ü®À]Óÿ…»þù½è¬ÎyIi²£Åɺy×c‘zÔµ½n¨“%ž=N#½üeéÍ»j|ðð6ö>êêѲÐ@»FšýÖê¸y÷³õÁÃ? ×GµFÓ’þì9ÓìÇmWn~ûKN/?·Q1jÄò`•-Ò¬Çȶnz¼’\ž½Î¹_6•] =´X¤Ù¾2nÞýÖJýàá·>øüE¢mÉìb‘^þÚåæÝ[]ÿàáǬµýSWÜ€D 4Óì‡ÈnÞýsLýàÝ¿Xö@t ?¸H³¿1nÞýXÏúÁûR®ÿÄMà7±Qg¤Ù¯n7ïþ®<Ó/þÚYlgKŠ,ió„Ù^—]°»Û›Þ°ïµÌmÁ<} Åw¤ô’W¾ÊÁo=‹Ý ‡ž£Š·öm µNg¤Ym7ïz©Ú>x÷c‚ÙŸt iÇ #¥ÉßÖ¼i·×Væím<ß[1­;&Œ”f»Ùc:¼û˨_<ü£qñûÑ´šx¯¢“«V4üKz¤Ù·cܼûýððð[g½ÀK÷kBÎ?K¼ÃŒ/>}Óµbí‡p¯˜^8Oaó)õà½ña˜&ÜPBö2´ÖV,N{ +/ÓÌ×§D5tµø±ò,¦™,œ"v.¹àñGJ33ÁOpÅ×ÅÂÎôâÏ/˜pzð…ÏÃ4ó¸ƒòÔ“ã·%Ïóì4ó87_Q™ìð&œ*™f¯þ6¡rüêxíœ ˜^üâSGigým6¦™Wåóc(áǶ¶H3oÏh†ú+gý­?Ó̯}gStåGÝžúÅ0áË‹ÌþWœxáã0½xeG,¸áÅÏáã0Í|ÝW|R%ΖU”ŒH3Ù ?Q=Vœ-+£ŒHÿ§»Ü’-Ga ¸¢éà!^‹êýÿŽŒŽèéˆù(ªnú# ï×y-Í•ZÖéÒþ\ËRá¾gEÒ:^z»ñª÷K}*­®Ä±ŽWÓ Kõþ2/‘U÷¡®ãÕê¼é¾ª÷רÌßò:^Zõ5~*üã©mºRÂ÷5ëPi3EïÖÍtpø>6§Æ½½Ï¹XWt¤øÎVË%å¥zÿ˜snÕ÷×ÙjóþÔÏÿ\NçåCWJ¯ßYo¿7`"ì­›=¯“Ò°§™¢wÇÒæž·øÍŽ=ü1bvT¿NAs¥vm¯¿j!IKõþ«­èÌüílíÉ«ð2ŸGGùv¶6ùQ§êýÚTÌŸ4úùµÄ¥z‘:ß[Ñ/âû½Ï(+KõþšæŸ/ºýëçJïKôî6g])1­_+!ÊR៳‡®¤¾Ê”^N{]ª÷÷R槦{•)½&ƱTï׋Ç|Zøú÷©iË-y©Î¯Wªfþ2ú÷©Õ ö<¦Âßíù%» èñKõþXºùuüŽŠŽ±VwLõþ”­d­ Ëßúpª÷çhÏŸµ1¿÷iþ}©ð#ë `­¢ÍÌ©Þ/ÕêHÖÙì{ÿÚ›Ï3Uïׯm¾95¬ÓU$·%z{Mæne­’KkKõöl“V²õöSýýù©Âß­P¥4ÖÙ*±9ÑÛû¼àéJ¨ëh•0b]ª÷<bÏëd•d,ÕÙ“–žù-ÄêFJ{Z*üÞþé‚߯•žcYª÷Çj£D+I\ª÷§l§Zà:[:7 Yª÷çh•DKåšt€L}©ð«yAÖæŠž¬ø‰Þ-ÍÚAHiµ,mA¿§™ª÷kRÑî2‚,¨NõþúŒº°œè4’_Í[[¨¦ëw¾ÜQ‡ä¥Âß‹Aõ^ûZ Rêý}~àºê*Rú¶bZª÷<í½»Þ¯ÊsyUgÏ!>5JW´}ûªuå©,¯ +ÿ(ö÷³ÎËìqLõ~ní/Ei߯æeªÞŸ¤LÓƒô}Ç:-èHô©ÞŸS™d‡Ö¹ÒÒ”d©ðf~)«Féá³ç1ÕûõÙÓ’›rz>îWôöò䟕Ö±Ò—`߈©Þ¯ÚôW×ã„Qêý-ØWø´ðºü!¥Âßíñµk®*¥/ÓžÇTïí¡¯s•zþ=ÎT½}Øæ¿c•šH\ª³k§¯¶R¿/_»V^ Þ9ꨞû:W©´Ð—úùEe×)þ¿(Ú@â¯;/Y ¯þX™þüâ.ÿ±BŒ*7?¶ŸKO¢Ýò9_ì„seú›v ½~]üÇ +ýß‹8xG7åç´œ‰s‰ Ý%WÇÏ•ß[Ò"vœ+ï›yÿ ߇Áå—ñ žNÏH¡#K¼0¦ì:ùä-A`ÈHñò;LöŒ’ö QGLÄ”=BË÷Ød A†N㘲g¤ôÔ$È@‚ }ÀraLÙ3¼9 AdÌ)ÿdLÙïÁ¥“úšÍ “=c^V‚"t¸ÎÄ”=¢> +d AF~ç|22}eHëyKá½p;P†õd$È@ -Bå²å&{FlOOB &Ȩï-„ŒŠkˆ2ÂÙ‘  2ò{s!#ãî’ÿ„ÞcÞd A†Žý˜²g´¼ùI€=XùRMö½éÖ-d´/ÑdÏ,uKò\vNÆ”=Cç«=Ad¤gÐ=SöŒ˜cßd AF¸õŽ©~„¤w¨yeð~¿GÐ"wÙo“=AÇPÙ@0A†žËË 7Ù3tân[‚ $ÈÈÚv.Œ){Fɹm 2 #Œp9á&{†^óÊ–  ÇÈúžË8ªú+{†.í ÇØdh×9ªú+{ÆSª¶H‘Ç9»½²cô‘kßd AF¬ýØóWöŒfs®OýÙÌ“a²gT‰²%À`‚ ½W^öÜdϱùI€ŸiçèöÊžó¬ê>Ad¤"G5|eψ½—-Adèö²ã&{FÈ-n 2£ic»ì¸ÉŽÑtGã–ƒ 2J=;à+{F“ضH‘óÙ_Ù3ÊxÿØ—  2b8;à+{†ä±ˆ@ˆª'ëò3Löˆ4~Çc%À`‚ =¼—ãa²gDÉuKÏ&øÊŽQÇH{‚ $Ȉýl‚¯ì]öQF9{à+{D¡m 0˜ £Å[4Ù3ôrT·H!ýÖMöŒ¬Ö  2R¹õ@“=#½Çc%È@‚ `/[n²g„‘Ê–  0¤[4Ù1Ê_e_ 0˜ £Ô[4Ù3ÚøUö•  2tô»ì¹ÉžQ¥m" "†vÙr“=BF©[‚ $ÀȽÕcdeÏÈ%Ö-dT©—Ân²g¤öH!çÍã§zBÞé'@î×]‰½ÜSv=À­l "Cçßriä&{F“·LÑÒ­šì5¤¸%È@‚ ·áÍdÏò+ë+Ad$-¦Æ”=#‘·Hr¾q“=#Ê‘  0´9æË7Ù3B(qK€Á¥¥KY7Ù1r/¹o 2 #Ë­šì-`éd A†þwÙs“=£”ž·H€ñÜR/¿ÃdÏß§»@0@D-·áÍdHåWÖW‚ $Ètë€&{F ²'È@‚Œ8Ú嘛ìZ$n 2pŒôgŒrNo¯ì=¤¶%cOÑr=Jâ+{†¾nÙd AF g |eÏЊ˜·H‘ÚÑ¡~ª'äùQ9;ÿ¾·óÏ9;à+{@ +R·H€ñ𣾲g„Ê–ƒ 2J—£¾²cÄŽH‘‹Cî+{F+­o 2 #¦³¾²gÔ˜û–  0Zg|eÏšë–ƒ 2j=;à+{F2¶H!ù쀯ìQ¯6[‚ $ÈH!]öÜdÏa”-A`T½¯\öÜdÇúmî 0˜ £ÉÙ_Ù3ZœeÝ'È@‚ m\—=7Ù3Jý•õ•  2´'\öÜdÏ˜ê–  2B —=7Ù3RíuK¥Ç[ 4Ù3žÿo 0˜ £ôq©í&Œ¨]´–¾%È@‚Œ\Æ¥¶›ì=JÙd AFLýÒÊMöŒY*˜  0ô†×/­ÜdÏ(ql  ¢Þ’©z@®­ÑO@ý×4"’o£‚ÉžbÍ[‚$ÈH¡]¶ÛdÏÐyfl 2#V/GÜdÇPÿ¯¬¯LÑ´·]SöŒÖBßd AFI·h²gÔ8dKiÜZ Éž!µo" "”rûSöˆ¬¹-A`¤žnӛɞ¡Å°n 0˜ £†[4Ù3BŠ{‚ $ÈÈíÖMvŒÖë[‚ $Ȉrë€&{†ÎmK:%ß>]“=£è¿-dܪad1l’$ÃÍ¿þ¯REnÏdÿ÷SKcK€)Þ:ŸÉž¡JÝd FýÖùLv üZùŸîrË’…èŽú Äsÿ”˜"Bh>;:nêVÚidGÐ &xF¯ÑÉ·cœ1róÏ ‚gÔý–ℵ[îóìóççÙƒßöŽqÂz’Gð"xFj=øMìghÏâžA̰-IߣïÄ8#燀žà-½G߉qFê}:‚gÁ3´×g»=1ÌX+_«ŽàDðŒµP>×üÄ8cý4Ä<ƒš1¦¼g߉qÆZ<Å4ƒ žÑÆ{ög”þ{ž#Á3ˆà¥–àšïghÅ<ƒž‘³×|Ç8CFQGð "hFŸSƒk¾cœ‘´x‚f0Á3z{ϾÃŒ2FŽàDðŒõE×|Ç8£«Gð "x†¦ü<×OŒ3êHâžAÏÞ¾'”<:÷yÀÿ¼ +Ø™Sä9ÇOŒrïêÁÏh"Á±cœ!ªêžAÏÐÑƒßÆŽa†Î!Ó<ƒž!5×{Ç8chjŽàDÐŒún<;ÄÏoã{¦×wÛá6v›ÑÙ·cüüª­8‚'Á3J‹Î¾ã Õ<‚‘5:úvŒ#rtý'CZØé(ž )"HªÌµ¼R;F©4fs„nßuJ€RL°Ôï`~¥~1Hå©i:ÂF×,@R )"Xª–è4Þ1JÙ+œ#l´ö4"‚¬.AVD°Õ:¢ë÷‹Ñªi­Ž°Ñ9·du ²"‚­ÒˆNü£Uµ8ÂF§s€:‚¬.AVDÕúéF;ÂŽÑJ×ÝktšúVŽ@+ Њ ¶jË$°úÅhµˆé³ê£‡Y]‚¬ˆ`+ï‹Ù‰Ñ*éhŽ0«V¾#Ñdu ²"‚­¤E›ËŽÁj¥:¬ÊüQGÕ%ÈŠ²Z¡àþRtêE]ß”´|ïRÜG£ÛG!ê³OOÑn´c4ªS†#Li]Óät ’"‚­J¶©£U)©8¬RÍ5"ÈêdE[åõÀ¬~1ZåÙŠ#zþ7g!AV— +"Ø*I +žê;F+ùnó ˜T¯]"€¤.ARD”ôõnôJí¤ÒzƒêŽ0«–SH hÅ[Õ2ƒ‡úŽÑj½[VG˜UùkÔHŠ–R™Á³c”jó[U.aRš[޲ºYÁViŒ`ƒÙ1ZÕò­*—0+G– ²ºYAViÔhÝ1Z©-ïL˜UÒOÖhZ1ÁV-Gïe;F«\jqIJcY&ÈêdE[éúmV¿­Ò,0©®5Hê$EK­7ûŽÿf¤õ¬,¹9¬Ö)¤AV— +"ÀʦéûÒxb´ZO–á³Z·Fĵ"âZy‚­zz_3OŒV­Œâ³Ò¤9"ÈêdE[•ñn0'F«2 f%õ·V=Y]‚¬ˆ`«õÓznö£•–ÚaVi­ÆAV— +"Ø*­×ËÀê£Õ:I»#–Õz9Ôdu ²"‚¬FåYcNŒV©~v ³ZûQH hÅ[Õö.¢'«1明0«ÚFHÕ%ÈŠ¶R•çyub´ê¥7G˜Uù®«Hê$EK­·Ëè«úÅ(ÕÒoA¤rÏ3"ÈêdEYÙÝÜì;F«R³8¬$×ÕhZ1ÁVMßEôÄh¥ÉKªÍQfÔ%HŠ–*éÝCOŒRRSs„Y’#€¤.@RD°”ôw=1H­3pª#LªÍÔ#‚¬.AVDU[ýàhÞ1ZZ=aVµ´hZ1ÁV]Þ=ôÄhÕ×.ä³ÒY5"ÈêdE[-ßà^ß1Z­¯ª:¬r•du ²"‚­r}÷УUI"Ž0+I=GY]‚¬ˆ`«”ßEôÄhµ>B±¬ê¬uDY]‚¬ˆ «Úg´ˆî­$µé³"#"Ð +´b‚­j‹ÑƒU[_Js„YµÖ{DÕ%ÈŠ¶Òèü¥è4Rq}SªÒ¢>itRŸ}$ÕHè£Qkɦ¤=kDÓ%HвZ¿ËhÝ1ZÕ4†#Ì*ç¡V@ lÕJ´‚î­´öâ³ZÛºDY]‚¬ˆ`«"¥V¿­rjâˆeUÖË…DY]‚¬ˆ`+‘”¥è”jéÜ7¥>ƒ6ùüµIûdc'Wp—ï|êLªŽ0¡õFÓ#€@)&Øjýv‚§ùŽÑª×ow¹„Y•YZDÕ%ÈŠ¶*3Oó£UKSaVz¶?GÕ%ÈŠ¶Ê-Oó£U©}8¬dÒÅV— +"Ø*©»ËŽÑJE»#Ì*õÏdu ²"‚¬òHì.;F+iô_Ÿ•®Áˆ´­˜`«µ’wûŽÑê,T0©õ@R— )"XJK +nöƒTí[].aVMj²ºYÁV")¸ÙwŒV]¾Õåfe§EDÕ%ÈŠ²’µ,7ûŽÑj-™â³ÒÜ[D hÅ[µÚ‚CyÇhµÎ*q„YÉz㲺YÁV%·àüÛ1Z­gKw„Y%Í9"ÈêdE[Ɉ^KwŒV"¢ŽXVyŒ4#‚¬.AVDUš5z-Ý1XéZõÕfÕ¿§•P +”b‚¥ºFèŽQjHŽ0©:C€¤.@RD°TMѺc”jíÛ .aReÝAV— +"Ø*÷hÝ1ZÕœª#Ì*ÏÑ"‚¬.AVD°UÒè¹°c´Òö­1—0+)=GY]‚¬ˆ¸Vóߢþd>):e±%û¦”ľ¿§ÿgDý?!ß'Ÿuÿû3ù¤è“š=º±¿|dTûæž>úÜ>úPŸ|Ö=âP'Ÿ<³6î›Ï: %è£Ïí£õÉGò³už}zÏ®o>µÙÒ÷ôÑçöчúè3Æ|öÍ“¢O³ N}óYKpúà}ðá>ù´ölš'EŸÒfå¾ùä^[ÐGŸÛGê“OÑgÇ<)ú¨ á¾ùH.ôÑçöчúä“Ó³^ž}¤µÎý哿H9è£Ïí£õѧÏþ,–'EŸ”sç¾ù MôÁúàÃ}òéú¬”'ŸµþåÆ}óiS£>úÜ>úPŸ|êZ ^Ÿ_Š>=‹ë›O-9¨£Î­£õI'÷ùÞÎ;EÚ»pßttöôÑçöчúä³v¦ž}J®ƒû擫Π>·>ÔGŸ6døÍã¤èóÛ¨o>²Œ‚>ø@|¸O>5øz~!ÚHV*wù7בXß2ªÔà›¡6‰h]öcòKA%Í.û&3Ò¾\mnu¨O>ëømú¤è3òÞ3nß|ZS úèsûèC}ô©c>ËáIѧý^±o>UfP¨ƒ÷I§µçmñ¤¨Ss™Ü7í5¨£Î­£õI§h}ŸÊ;Eíepßtò·›¹>úÜ>úPŸ|Ö{ÃûTÞ)údMûæ“úlA}n}¨>eþGw¹%;vApG@óÜÿÆÜ\$ªJ´ŽvN:GG:4£½¯å3åÿ?›òÞ3}ÛlO=ÄSòÒ㯷wË8ÓËûZ¹ÊT|çŒYË‹KxÎQ=ç´,…gÊ9cô®üîéõ,ÊKxîQ?÷”iï×ùL¹§—öÃïžó‹SZj@sÚ¹&µà +x¦\SgþáwÕ¶^^zÀsú©Çf ®€gÊ=VÖT~÷øt½<÷O=?~îi+X Ï”{ò8—ð»'µÔ^^zÀsú¹ÇúzÒ3åžäO\yï+õöòÒž{ÔÏ=Ù‚+à™RÏœó\fÀïžÑÏΣ¼ô€çõSOY)XzΔ{†”ß==çüòÜC<õüø¹§`'=ä˜jIéÝbgOXR.Ì%¢æ’ƒ•ðL9¥Ìž•ß-þþòRžsÔO=yÍ`%§µ——ðÜ£~îiÅwϧçoÊ=ÓÌ”ß=~Ãm//=à¹GýÜSV°ž)÷øíh)¿{|÷ xéÏ=êç³¾çè™rO³s"€ß=µ6{yéÏ=ê§žä߀÷=Sî±yNð»§,[/Ï=ÄSÏŸ{z +–Â3åž²Âïž\×zyéÏ=êç¿-¼ßç3åÿ åwOJgïQ^zÀsú¹'×`+§ÜSWÍÊïžZ"^zÀsú¹§øE÷íù›rÕ}ëb~÷”‘_\r€sŽê)gú“üý:§œ“çùxÀïœìÉçÂ)çGÏ9¾Ùýnß)礪´Çì{ni©Ï5jçšfùw×øN©¦ùÒ<”ß=þl//=à¹GýÜc)ýn…ß)÷ ¦üîés´——ðÜ£~îI#ýîÌß)÷´e¦üîiÖóËKxîQ?õ¼ü™qK­{Ï»Kl­‡åŽwuÿñrƒ™Þ÷Í™r‡ßDšò»¤Ôùâ’œcTÏ96Öû>SÎɵ7åwNN­¼¼ô€çõsO®3øxþ¦ÔãkD7å½Ç—S[//=à¹GýÔÓ—ÿѧçL¹gÖ¦øÎ™iÍçâ)çGÏ9}=ÛàwÊ9¾^tåwO÷}ùå¥<÷¨Ÿ{j¶Áï”{Z]]ùÝãߪ€—ðÜ£~î)û|zþ¦Ückþð»ÇF +xéÏ=ê§žæßÓ÷ó9Sî)÷*æwO9¯"Å9‡pÊùÑsÎÁ2x¦œ“VkÊïœ4‹½¼ô€çõsO«Á2x¦ÔcëïZż÷øÝ&­——ðÜ£~î±,ƒgÊ=c÷ øÝ3f_//=à¹GýÜãù{d)÷ô¿kó»§Ûç) +/=à¹GýÔSg{‹¿!×Ô5›Ð;¦®Üš[@SŠº¹¤—`ßáo‡†ièÏ~áÅ_g¿ŸÏ˜¹4LC?xö /þÒÚ}¾£÷œ1 ýàÙ/¼øSùžEîo~Â`úÁ³_xöwÿÌïûmXoÓÈO<ù•ëu^)y`úÁ³_xñûÍë¾ßF£cúÁ³_xñçtõ}í æ; íù¹¬üÐìnsàìêcšFvâI¯¼ø{ÅÙÕýEÓОý‹¿ærŸm¯~úbúÁ³_xñçYîo·ûÑ21 ýàÙ/<ûëj8»z^s`ù‰'¿òâ%ßßnßû¦¡<û…]ù¾›}í7Ã4ôƒg¿ðâ/=Ýwsm¦¡<û…2œ]­û€ièÏ~áÙoca·jµ·Œiä'žüÊ‹¿õuŸo³’1 õÀY/¼èÍïßfû†zà¬^ô9a³j~@tLC?xö Ïþ26«:gî˜F~âɯ¼øý:vßnuX¢ièÏ~áÅï—‰ûê¯mvš†~ðì^üyô×z¾>gúÁ³_xög_¦îÛ¹–•&¦‘Ÿxò+/þa8½j®}`úÁ³_xñ·d÷ë_S*ÓОý‹ßýí·ÙÎfx¦¡<û…ª8½l¤Ù0 ýàÙ/<ûÓÌ8½ü-R¦‘Ÿxò+/þ6qzYÍ–1 ýàÙ/¼ø­áô²Ò†¡8ë…}.8¼,^ŸgúÁ³_xøû¿5¯²fÆðÕ ~õ¿¼è{ÃÙUüÚÛ1 ýàÙ/¼øýpŸnéÓ¯wúÁ³_xñç…ë4_Þ0 ýàÙ/<ûçê8½Š­”1üÄ“_yñÃéUJíÓОý‹¿¥ûr.iÕq‡¡ýÒ,gZÜe_ƒ>r§ihÏzáÅï«ì=¹²¯G†ièÏ~áÙ?|W¸Nî½tL#?ñäW^ü~˜ß“=·\¦¡<û…¿á`ÉÖ? ϦYná©âÿÁkïï6û³bÚÁ³^xö÷é×™ëOÃ0Œô„“^yÑ÷^ïÏ6­²0 õÀY/¼è«Õû«Mcï4ôƒg¿ðâ/Éî[9u³†ièÏ~áÙß–?øë¯þ1bù‰'¿òâ;U²zÞúgúÁ³_xñû 7¯š1 ýàÙ/¼øý$ÄóM ³Ðší‹=µÏ†Ô׿µRÇ0Ô_\ô³¾Î2çÕ¿bùÁ³_yñ·5ëõ÷|úÏ4ô_^ü‹ßúgCÚþÚSÅ4ô_^ü‹?ï;Ü×o¹WLCÿåÅ/<û}IðÿGw™\I®ÄHP•Q`êž5ú_™HDömó$› “̳´K)ÿοù~Þå9îõMeÕK1ÿÌ»|7ïò[çú®5ç…Æ]¼›wñ%÷³ýòâ¢Ý¬óϼËwóo¾¼#ÿžDŸü¾Ö¾”òïü›ïç]þì¿GÑ'¿ÕÙ/Åü3ïòݼËï¥õ—rí~¥˜æ]¾›wùeÿžEŸüÜv»óϼËwó._žWçúÊKÛºãϸ‹wóo¼ˆõ\Þ¹z»âïøïç]üHõ\Ý9óe˜~¦]º›wéu–smeÖ¸óϼËwó.?·r®ílY«_)æŸy—ïæßü´ó}rÍ2ô­P)åßù7ßÏ»ü±ò½¸¹hõ+Åü3ïòݼËo÷Ö{Žz ¦7¸qÝ´Ë.%ZK_öbøwénþÆwyOØé´ò+íKcþ;óÿwù¿O³Oz¯cÃìðçg]n/û&×]Ö¥˜}æ]º›wùeïó´¥É•?óϼËwó._¶é^Ö´g»óϼËwóoþñܲ}îXƒÇßx?ïâå-èܱ}¥büwñnÞÅ×9Ï ÛG_büwñnÞÅç6Ï Û{ãRÌ?ó.ßÍ¿ùsË?O~u]JùwþÍ÷ó.ìû°ê%ïy)æŸy—ïæ]¾|YÝ«›fŸ—bþ™wùnÞå—rߥÚ.­^ŠùgÞå»y—ŸÒ}^µ3ÿ¥˜æ]¾›ó‡<ÁÏÿOu<”òïü›ïç]~où”[k«íK1ÿÌ»|7ïòkºïR­¶´.Åü3ïòݼËOë>³šÐ~)æŸy—ïæßü¾ú}hµÔ˼”òïü›ïç]þ8Õ/ßK¹Ãìkÿu¹u݇–¼áÏz)fŸy—îæW‘¤ñùXËCT{鉮ö'’¹<˜^~Ïo|1³ÿžtÞøb6¶†7öžÇ”Nƒ£RÌFë©‚ñÅlÈËÎã‹ÙØvxc¿÷3V® ŽJ1u48*Ålôý{ŸôƳ±¬N½±Þ>uÆNVðÎPÌFYÎ\1=¸æŠÙ˜mÂ&*fcÏ÷‡b0¦¼9§¸%†Ùh5‡ëa˜1r¸†ÙX;‡ëaœK ×Ã0µ8sÅlôUá̳!wœ¹b4JªŽJ1eÄ-1ÌF³/o´÷cij„ÕýQžß=ö´a4j^±§ ³ÑrìiÃlŒ{Ú0knØCÅh´œhG³Q+íˆb6úˆ=m˜¹cOF£§{Ú0Ò®pæŠÙh+ö´a6fŽ=m˜ ù4„MTŒÆÈ3ö´a6àþ3]Þ*ak³ñùŒã‹Ñ˜iSC+f£jhÅlÈU…+¡˜¹¨¡£±R¦†V̆|jÁ™+f£ø7ÌÆØÔÐŠÙØ…Z1;wjhÅlTªÏ/åù‘©¡³±þă±þä"6´a6jÚᨠ³ÑkÜÃlÌwÄ0{dž6ŒÆç­#܆Ùh=6´a6ÆŠ m˜ Ù8sÅhù}8sÅlÈgœ¹b6ú¦-QÌÆ*ñ9nš`þyºìø­e˜^bGfcöØÑ†ÙØ+v´a4Zɱ£ ³ÑZìhÃlŒA¢˜µiC£Ñs‰m˜Úã3Ü0}ÅŽ6ÌÆÊ±£ £1RƒƒúRž/3v´a6zŠm˜YiG³±íˆb4¦¼‘ÃÝ¡˜ Ù7¸;³1:u´b6Ö¢ŽVŒÆÊ™:Z1µQG+f£OêhÅlÌM[¢ +m‰b6¤áîP̆ÜÏpw(fCöŽê‹ÙØzZ1û/å{Ú0-Çž6ÌÆh±§ ³±FÜÃhä´ã–f£–ØÓ†Ùè=ö´a6æŠ=m’rìiÃlÈ÷gØDÃl´{Ú03ÑA}(ÏïJ;¢šíˆb6êŽ=m˜QbOfcõØÓ†ÑhiÅž6ÌFͱ§ ³!oÀpæŠÙ˜3ö´a6ö¦QŒF/väKy¾õØÒ†Ù+¶´a6dàÞPŒÆÈ-¶´a6êÜp5³1rliÃl¬F-­™íˆb6ʦQÌF/ÔÒŠÙ˜ZZ1{QK+Fc•L-­˜Öl¢b6Ƥ–VÌÆNÔÒŠÑØYÆ¢¡˜:hK³!w\Ål|þÁøâh”ô—R=}0òÝúï&̆|ùü{æ³!Í÷ï™ÌÆž¡§FC>*•b6Z [r0£‡ž>˜X¢Fq¾|&£ ˜Úè'³ÑgèéƒÙXiÓQ}15ÕÐÓ³Qíˆb6Ú¦QÌÆ,¡§fc÷ÐÓ£ÑdöP1òfg®˜ÑBOÌÆš¡§F£çzú`6j =}0î¦äé¹Ã“ü`4F*¡£f£ôÐѳÑVèèƒÙ˜™:Z1»QG+FcæI­˜–èþSÌÆ(á{ë`6V§ QŒÆJ‹:Z15SG+f£78¨/åù9©££±S¢ŽV̆4œ·b6ÚØ°‡ŠÙ›vD1òû°#ŠÁÈ)÷ØÑ†Ù¨+v´a6ä{!ì¡a6äm3œ¹a4rš±£ ³QSìhÃlÈÿ œ¹b6¤½Ã–fc¯ðÅu0¥È£¡˜ÖcOfc¬ØÓ†Ùwf¸ŠÑ¨¹Åž6ÌF±§ ³!O8sÅl¬B[¢&ûG¥˜²bOf£çØÓ†Ù˜-ö´a6öŒ=m^Ô—ò|«±§ ³1FìiÃl¬M;¢‘ íˆb6j=m˜¾bOfceêiÅhÌÔ¨§³Q&õ´b6z¢žV̆|™+fcwÚÅh,ú¨3ÌFËÔÓŠÙzZ1kÆ/.ÃhHWRO+f£6êiÅlôI=­˜•¨§ƒQþR*qK ³!íŽÊ0mÅž6ÌÆÌ±§ ³!ïja £‘å6l¢a6äJ…M4ÌÆ¨±§ ³±ð ÖSI;îˆa6j‰;b˜ ¹²p5³1WìiÃhÔ”cOf£´ØÓ†Ùh3ö´a3æ’[r·.êòZ`G%m ™ý?ÿ›§¼ë–÷Ч¿$1òøÉÎ\‚>sC‚ª¼U¦ZÞßø÷O_cÈ=1ä.úõõ¾¿Í&¯€E +ïûó#¯ßoÌ?¹j«<{Œø§ÿãÓ{´ëïOòN4ŽÑºüŸ^ìŒÜ~¿!oÎå"Ô?F–Æ[ß?µÝ~cä4üÒzTòBôÛݯ±¤/~)-ýS³ûãc̱_ücË÷÷Ožº>Æjk<ØùwŠ-Ù—ÝÇØe=ôzÕÿ©*O½Ÿæ–¦M¿CUü +­ýñÚíûôkÌßY(~:~B­;Aö`>øä=ögä´æ1J]uBZz-Êš¶…"TYÑ¿FþîíçO£Í{Þuÿ.ªâ×HmëÏ—ö‰5C^ˆ÷ƒ#í™~ayý:úcôþ[Nů±þŸî2Ê–èŽÞQÔýolJÁHÒÌ_Ÿ2·+FÁrm€5T§xË]„6/“_Da›bí¤÷­:æäHt÷8d“èªñy| •ûüèUƒÑb;©Cî´'7 r$xØ­Ù<Ë] ùL~ÅÝ‹œºˆZüó™‰¶Âøj'ånäH¬ÖfCõ$éEø609Uty0 +ô¤õEìí}åH”>|HÏ`\÷v>òC( +bC|n›˜E‚ü"êdªçf³Tér$>ïèwæHªäHtÝ} +C½Õ;óN>“#{ˆ½ÕRîÌGÙ•ä³Ñ†¨—;ó14¨")”õ8¾i r$¸u²Üò£Ò:9Mú´!·ü¨VíAŽ↽pljs=`ÂAŽÄ^Ÿ=´2Â%†OÏä]º‡pɳÔ„{#QZ³µUÕ[‚H-\ƒˆ1¹ÛþQ<ô,z Q#¸hST¬ÁõÀ­Œ‚‰>¼rdö[‚¤Ú4È/M׆:ßÄ}”f#¡­Ø[!8ÞÄÇäHˆøKѸHÓZÒ‘#À½úK¹HÓkßÔ4/të¯ë«G~hx6$óÖÒµ GµáMoý!nû×09•‡­WÄÔK ï#&G¢¨÷ªÛp‚¯-<Û'¶¤éª÷Xj]Q~…üßѹïû aF9Xÿ3ä…§ôÖD)È‘èìûŸf¿¥×tø$LŽ„zÿ–»èrÕø¸XjâU8ý.õhÞVL~¦#ÑÜužÕg`r|œÉ;3á\¾ë<çyÏ-G%o¯„{Š>û×Io&G‚ÔÜ«LyV𫸷39ë/l¨©<³fjÞM~…mâëÐ}&ÎØ÷äH”êû Ì*¸ Žr Â}•°ooÙ1«ÏÃäH ñþ„v÷8 û>39½{gÆav;+ù^69x­åÑp‡PÁÝNÃ#¿ˆºsr[Çò}~ìæab|»òá¼¼…‡²›QŽ[ÌÁݺ㹮¡GŒ·Þm`·\ʺ-^94ýЏtü ³÷ ¿ˆZÌ| –Ÿu\Ÿz#Q[u¼Þ³B<ƒ"û\k«ÞÊÃåiŸiGÎ&¶ê³ÞÊÃ]Õ§ar$p¦ÚÂu4˜;q¬E”_D³ï,·ôDƒ‰ÞÔߊ薞(ïú:r$ûÌCg‚ü¯AŽ„ôbÚC˜@«“äH°ÝsÛÚŽ7Là‚èó0ùE±ýƒóû–: k#ÑèØ—&p¦¶(G‚اˆˆò¼”¢Õ´«Æç±žöº¢¸Â^`Vr$p2siƒžóEÑ`9È/Ânºª÷n…Çi\5<ÏÓî¹mýªOy+ò9˜•ýë¬×Bʈr$°œþg¬åÎ[FAŽ:§íôü›åqv +r$pë2]7ÌkoS‚ü"ª}Z”ò-?´ð*AŽzµmÂ&ëÆöÃ;¡É‘@tð—jXɇ@ÿjAŽ ›wÃÍï™w/"=È/ T¢;LåHTK9RºÕ×É+ÌÔ”¦ö¥¨…P»›roÞÝ¢†PÖâÓ09ˆò¶²u¶ölC„qŸ†É‘èÓ÷[Žηáø+¸ôhb ù¼ ¨šË¢úæAï>õŠÿéâ'¢É/‹³ l[Éx({/¬Ä§ÂÇŠMƒ=f÷Äòè~ +|xˆú·-õ~(ô)½j0@”:o[n}ã¼ó>ø~ÏÝ[-6çi!0@§A޵øg +,Fk-#àѼÆP çþ î~›ü²^z˜ëL%͈e±ŽÛ=ÔèÜx–GñÖirô œ_by ?c><Èç‡pÙ‡Õ‚ÚÙœ˜ëâă*eyÓßD@›É.–#¿,Æ>^Ä\qe¯Å¡«UB“Ç£AŽl{çEÀƒZö¼âÖ4›¿Úö]îJ;Ó9:ˆÞ/b®{/eÀ²°Œ¡ªã®v‘ ¾ fŸßç—Á8ßâMÀa4¶?ó‰©q¼ F UÒ/ m’°è"öAFrí²ð=`j´ÀåM¿,¤UÉX¨â'ÃbìrÔ—Åœí ÀBk äZŸ=ѹ¯{5ZŒ³°,fI‰eQ¦»—'kÃBÇœAŽ“Ï KHç¡ %à®koÕû“ΗGõcrðÀÑ-ü%àhJÀãl©}aßû[}ŒR?Ïãÿ' JžÇß“ŠmŽ0| ¸{ùšPxõKLÜÙJ׌€G꟩̓P—G©3ÈÑt|‰å14%–Gñ!\ˆx<­u +òËcxb®¢– €E!Ÿ¡"\óc/Xƒ-šzÄÌ¡kúB!$\ D¡zÕèÀëjö~8tzò<þ(ù¡1Üå®Tk_óÌúËbÊÈxôÓ)u‹»°×¼ÉÑi¥}‰¹6¡¤Äò(ìCHlO³÷(Gm^«€‡ˆ¯Å‡€R±MQx[‡¦¾,¼µ„çá ­ €ÊØÍi]MŽÃ@þr´xæwX 9Ö €î«>„Pó´ÁÑ‘6ƒ-·/°,&IèŠj»‘ƒîwÒéUor´˜^y€N"Í€eQ¼ý3n÷Céé¿&¿,úì_“ýÀýð@Ó±åC *w"DA­HbŠ€E}Ük¹Çš¿Ÿb&G‹zÚÑ%–E}¾Ç›€R®M,ÕëQ¼±˜üò~Þ_b{ŒÒ3B×}Dm¸ËèÓ¦åýü69z4ú˃4y^;"¸¬OÕ?¤XÏÙW&<Ã7ÚïÔjmr_"úŒû«³ýí·ÏNÿÉЇ¨hЃ²™ï·Òómß/«é·ZCÊç–û"¶œ\Îþ"¶œµKæ±å”àÉçx„É9Ñ2bË9³%Ys“s;2óØrNj™Ç–S¢!Ï_ÂäœÉ[™œ­Íä­LÎ Äòž[N 4üÓ¦#arN(÷dæ&çמìv“s—‚d'šœuŠ&;Ñäœè”Õ É9Á3)¨­æÏïþ l9'JË*Ðä”À€“79'¤s²â&çâU²â&çD­YšœŒ„0~+ðÈ9¡B?3?rN0ÑÏÌœuÖŸ™9%nˆ?3?rNôöÛߎœRJ2s“s‚zIfnrN”öÛߎœ}Ôß +a½³Ñ;?ÅlÔT FúÌQý 4ÌFKÓe\ÃlÈyv37̆ôt37ŒÆ˜P_f£C}a˜õ…a6Ô†ÙP_F£w¨/ ³Q«Ûº›rÿœPX˜0ýÍ0R wÆ ³ÑrqgÜ0%ðPî/·˜·b4ê,¾²7ÌFtþ³QF‚õV̆Ü?)ÆÂl„DçO1¥O:ŠÙo +<•b62ԆوΟb4äÛØ`ͳÑJƒm¥ØŒQ¤Hò1ù“êGÊø¤o÷‡c“šõ\Á!CÈ!ÿÕøbo|û—òOõãÿžêùeÕúñT†Ù˜v#¸yÞ.£ÄÚ›7³‘÷Õôòq3½û7é ÂÂlŒ‚!F£Ê7%yC19Lx*ÅlHA «¡˜Þ¬†b4ZÁíCÃl¤D{D1¥ÒQÌF…žja6fÜÕ÷m,ŒF¥Vo(f#÷ +3WÌF Ö\1#7؉ŠÑ¡u؉ŠÙH“v‰b6j¢]¢˜nµñmô³6¾9"¬‡b4fŠÖC1¥$˜¹b6ä-Â̳!of® )æcÎnæ†ÙÈÕïÃlÔáw‰a6FôyÚ01x¨E¹ê>Of£Ÿ§ ³Ñ³ÏÓ†Ù˜mÂj(F#Ieçö¡a6d¿¹=b˜Vi(fc Ÿ§ £‘côyÚ0R™»Óa˜Ú}ž6ÌÆ>OF£È9€™+f#5Ÿ§ ³Q&@ÅlÈ€Œ…Ù˜ÕçiÃhÔ8|ž6ÌF‰>Of£Ÿ§ ³1ºÏÓ†Ñh1øKf#eŸ¥ ³QšÏÒ†ÙhÓmÛM¹ÿŒþKn ùnQÅläî·¡a6$'¹Õ0ÌÆ(>GFCŠlŸ£ ³‘ƒÏц٨ÙçhÃlôæs´a6æ =¢œ¢ÿ’f£ÿ%7ÌFë>GfcŸ£ £QdÁNTÌ\7åþuúm˜‘|Ž6ŒF •öˆb6Ò =¢˜}–6̆ä=8ŠÙ˜ÝgiÃh´|–6ÌFÉ>KfCjM˜¹b6Ƥ,­þtõ†b6r¡]¢˜Ú)O+fc„IOµ0#@¹`˜Ô)O+f£ÊÓŠÙè™ò´b6f£<­)=ᩳ!u9<•b6Z¡<­˜Ñ)O+£~B >Of#CJ4ÌFm>Of£OŸ§ £!7x¨E¹ª~f£ ¿G ³!çÙ­†a6fñyÚ0)vŸ§ ³Q‚ÏÓ†ÙÛÌ\1rƒ™+F#KŽ™+f#GÚ#ŠÙ¨öȢܿwŸ¥ £QBðYÚ0)û,m˜ÒüË0mú,m˜™}–6ŒFÍgiÃläA{D±=Ê5Ovÿ?ž_;6òOK±4Á¿·ÔÓSîç±úöÒ}ßC†,f)«IJ43ü@‡Q%°6Éeòg¼:™×`A>×GŒ÷@h<7žŸñÈ?U›’ì3:Ÿ¹­ú§úäß®4åÝÌ¿ùµ“¦X«{»ßc/ëc¤×ò}G9ºç'½Æ rô#îŽ ¸A¾BøŒV÷Ë8Þ‘ç0º„.ïuðF+R¼×Ú„ƱŸü@þ©î=ëò3¿Ï…È¿ÜûìùÜâ½ö{¿9zºWÎkyiµÍ£ëÜ{¢u©Ør©ç†»dßÑF|™ß—eÆñá1ÈëšßÌûå­llJÍŸç‹Rþ‘—û‘Éï¬øÃ9}DÍ¿/HŸÞÖÒÅö©cìÌÛÒ'ÕÆ¿Ïï›¶!‹2ªâ9b;wÓ6fNJ[>‹]ß²úg©,6cÝß »w-=·…åÞ‘ÓÙÿÝ´ 9²(ýe¼›–Q>ñù-<çyŸ…¦md9 B»lû|îײû·Òžï™à,©.ŸÂ»iò +ä–õàšêq#€¦e<µêca9(ç,|Ó6²Ü5êÂså…oÙýkÎkË Yªxõµìþ}OÒ|NÁµìþr-YlÈý¯54-£}BhãyÏ™GM MÛEqáÒÎ* š¶‘ÒÌ}áÊQC“²Wd¤ › ÝOõnÚF.rµ\¸Œ.ãÝdÆ•Yx´tf&ß´ ©:ÃSSÅO’1ëi¼›^1âs€c¥ÖôšG’ûßu’äã"ÓZÁ(ßïbÙ# É®>ÒÇ»iOAŸÇyn+ßd9-Ï—ëíú¦môf×ýÂ9sßtgA¡-´YÐZv–Š!=1rŽ{4YÞlMÏL))Œ+qÞ-»):Híç¦}ñÝ·Å™•ÊÉgûÕ~óÑ3BHýÝÿÉØãùV½ûßãGIU`á+BïÎhßÛîÛ¸b¤ù=Kg Åg ùÜ•·ñĨ­qÇè© ˆ±ð£GgH ©qwŒòÍåWŒre‰‘âSIÝÆ#7î²Ï'„Xø +QûxOÉt`Ü1B¶Ô|ÅXøŠ!ùÿmHŒ'Q{á +¥ª>„â3DÎ=½'D•²ÞwŒú­¯µßup‘ím<1F/`Ü1ò÷»qÅÈ×—æÉ…qåÃ9¥ÆCþ`ÉC¾½Œ'FkŒ+†Ô„–\ñcîŒqOmRãŽÑj„5W|eÃ<ÚÛxbäÑÁ¸cH•k®øŠ±×öž#îñ[L]!â¼?˜Eîžím´§îÙ[÷6ŽQ.dr!}Ç0|Æhqe¥ËxbäXÁ¸cô4Ý’¾bè{¿Œ'F[ÇümÜ1ŠÜ ÆÂW ¹,½'ÆHŒ;FjÃ%vÃWŒ‘ÚÛ-ìïûmÜ1¤lu‰ÝðUÁ„ÿè.³,IRÞ¨‹Ärÿ‹ R.|þúycaI i‘XŽzßp¬ƒó4Áƒ£hÄr¨ B C{šùÁ!½Fb9lè%:ªtö_ŒÓÞxˆå˜] [Jö|Çà˜q½º] Èz0ØÄúöÀð—K–ÂÞŽ¨°Ç’ñcP|C.KÑÎ[ € +Ø[|1YÄrÌSG@GIo ¼18zë‘0ÇȳöM¼-ðÆà˜Y"±k¼} tty[àáÒqJ®–â^@…õ-²ã;Ež‰å˜÷5€@Go¼18äþT?Âöv•èHú¶ÀƒCÛC,Çt#µï‚lùŽÁÑSÄr”4 ý»—‚CãMÖ®¼ pŽª“”ÃcމÏA tؽˆ”ÃÃ]¶œžíˆå¨§¬#;Z¬îõüVŽX»-Uõ/ƒ†Õðøö%]lÐ'»½cxþ=ÊŽX +ûùÉnï˜;~Äç8§ pÔ¹ +éãØ1u8Â;@G·±8¾˜;~Ärôs2@‡f%'|ÇÜñ#À:Ê` pÇÜñ#>Ǩ„@GR%U}ÇÜñ#–ch#8¬ÙóS‡#–cžã:t +ÙósÇhÿ$¥ÄtØ(Lö|ÇÜñ#À:re£Û޹ãGÀo8ÖÕìùŽ©Ã~Ï‘@Gë…ìù޹ãGøo tˆ°ámÇXs[‰„?ƒH £d6¼íRz$À8’5OÒ:vL»“#|MD]YÜ1í²ŽèОŽ/G>—Gø…:ÊLì=¾˜N$Žð­ t¤ÖÉùØ1¬á'$œ#ý›£¾}ðÆdBâçˆ:Zzûà¹ãGü&ÄH £ö·Þ'öÑ# Бåíƒ7G}‰ßÄ pØíäíƒ7ÆÛMyˆßÍ#èhãíƒ7&A ¾Ô˜„@‡èÛo Ž6%ËÑ;PQÊÛo +鉥ØÕ8àès¾mðÆà(­Gb9J›„@Goo¼18r‰ÀR¤ÆTh}»à½¢Ï¸Þ }[†šÊSo †6b9T&!ÐA®'ƒ„ÕëñµÌw5<ݾåüÜln ÏϧJ9b)’ B £åL^aÇÞÑìÉ„9,ž„@‡}O÷»18´ÖH,‡Þ÷Yßîwcp-‘X» :É/µBÿ|:qõzzªú¬Æg·1ɱÞ1<¿cí3è8?è°?Žëƒ£Ž‰åÐû@ £”AÎõŽÁ‘fÄrÔ¬„Çš`H%ß±wüÕ'G,GªBtôÖI)ß18DZ$Ìag>jE†8¾Ø;l6ÓH,Ç5€ŠšÞíÆ sô±ù|mH #u6°íØ;ʬ%樧<" +댬éíRK$–B¤vòÉŽïØ;òЉåÈ*„@‡ùÙ{|18ªöH˜ãœq\†ÜX×Û±7¤q¾)G,ƒœ³8¾}|_ +ûÕÃú%ÈZßõøüžXßÛ±3Ô9®áG˜"Ÿê…*¤‘_éKA`»Ö¯çß³ëñùEXËÛ±7ŒQb)Θ‹*RN¤ +îå|KŽ0E§Q!ŽÜmJ|;öŽÞµEb9äy$Ðas9;G9»íˆåÈu5³Î·cïh]j$š}ª½WB # Öùv Žr?b9ê)çH€ÃöŒu¾{‡ž¿×¦°+ PÑ +k|;E9“Ÿ#–£žÃ:êdoÇÞaa‹„9ú¨Œ@‡u.²å;GVÄrÔóé"ñsäùÏnPOçû‹½£¶µåH˜ÃF5F £§·ü/öŽ2K‰ÄrÔÉtHZß_ ŽÔF$Ì¡cfB £ÈÓúþbïÈeÍH,‡(#Б²ÆÎô{GZU5æ°ú‘ ŽawÏXÙÿbç(³e‰ÄrˆfB CUb{ú‹½cŒòæ°Owõ™nê }ª„õK 9¿ëñù6ßÇ&þƒáYo«†¬Cí™Cþboh5µH,‡]úŽï^ø:¾Ø;TVB¹çFtH*ä„ïØ;lÚh‘0Gš³ö‡¾cï¨ýþV?b9êÙ$Àaÿxà_ì¥÷‰ö/ÏV&!ÐÑsŽUý/öŽ<Îp„9Æì@…ŒÄ^㋽"Ù`‰¥(è(úÌn±säù÷ÿsô–*!БÊÓÿbïSG$ÌѦ6B€Cûd pÇÞae¤Gb9¬’ªÏìöƒ#å s¨ŽAtTV«¾ÔZê=¬7ÀSøósR&øboÐÔ[$–¢”LpØ™aÍoÇÞ!éÔ=G˜ÃfF!:š°æ·cï(3k$ÚŠK':$³æ·cïÈ þëÏ‘Z&:ò`Š•zCÒóyþÖ›`Þõðü:•}P;vkngHp„)’õh襒S±coù4pG4ëé%H CÖv½Ž/öŽ6ZLñ}F/€ ++–¤îØ+´ç sôqÕ@ #UÖûvì"³Db9Òd8ʰ‰ñuìØ;êw=B¢­»Ri„@‡ýdËwìÅ>ÑH˜CkÏ„@GÖüvìéŽüŽ0‡èùt‘@GάùíøÏQíRtGeG˜£öœ Ž<ú${¾cïiÔH˜£ B £Ù}8¾Ø;ÚaŽ<Ï„:$³æ·cïÐ; 9b9ò™ ‘@GlnÛ±wÔqö#Ì‘Š6B€ÃêÍ {¾cï(z†@G¨} +õü„H £³QýK½!Û§Ö›`ÔÓ°`=>_f'E}Çΰæ© SôšŽÒ:iâ;ö¡Â­Ü—©6öC}±wè<ÅÕº>µ– ác«ötØ{‡­‘0‡”®„@‡¾ÛqRo(ò·~½ jù¦°Ÿ_åÚnì ©i‰„)¬¤gB #—·ÿÝØ9¬Ï}4æÈ»DÃJõS oì=éC˜#U ¢©×رWh5j'¦¦NtH©ì5¾Ø;¬TÌH˜cÔol‹:JzÛß½Ã8„9zÉ“à賿íïÆÎÑf~ ]§rNB £×·ýÝØ;ìE$æûMoû»±wè³Þ U†õh(ým~7ö†šF‹„9JîƒèH2žbxcïH=H˜#û@€£ rݸ±s¨íèC¨í³N BÙ[|©¨a½=”ÙÞõøüJ‹í޽¡Tm‘ÐUZN=G¹¼½ïÆÎ!ÖåJ$Ì¡»%Fj# ù¡vì­¿„9De­±Þ·cï¨ç«u€)jQ!*¤*9ß;öŠÔ戄9òÙpPQ’’ã½c§¨vË“H˜"µÖ ›ƒ”ð{‡”µ¹/M@E!}Ç^‘sn‘0‡ÍYèÐ̺ߎêÐÙZGè"D Ž2X÷Û±wH9­ÔæùÛå–,IÑ­Ì +n¨ êþ76iáZþ:RO£¥ ¹*º'| XÄàÈU¶1RÞv Ä ^ÕÅ.þ”‚#WÙÄÀp¢_1JZ·Í>F%8s•mŒÜÇ/€hçZø$Qߦ² ²×¢þá×mó„‘)êÛT¶1P1Æ/­5 £Œ”ƒ#WùÄ(hÃáþ~ Ä¢>Æì2‚Ÿlcðìý~Ä`ª€ð1˜SP×U61zÏ{Á—@ d` £äÔu•mŒÔ×y1r.F=zU61Ú.@ˆ`²ÿû†Ç3øûO6/h‘é—¨ÜË*êžð1jÑ>ÙĨhü~„€¨àC”=*›ïÒ Ä`tµác  œ{ΔV÷§rH¤N÷qâ\Vc¨rLT<\› Áè1@í¾ÔÚêµTŽ ¼(gã$iÝ~•¢ý‘oMÇËû=½[Ž é·BS)½9&¸Þ‚K©42rLc{K׊·åèØØ"å»V[މ&ùÜu<¤y9&*åsu±”T”nÙÁC:Œ©Ý’{þjú–C¢]ë±òrÄx¶¤›àpœÜÔn¾æ<>¹å˜À¿žãNƒÅ¨! #÷sÚèa¡rLHoç´óú°*Ç×›|8ˆÄFމRÚºçŒ| aÔ¨cH;€ #ÇDC9;Ó: •c¢žÆDÖ·rË1A§Oç¿õ®o5R/|i_ƒ¹åà~zhœ×i¨r:b™k7rLÐéo×»×fä˜ÀsÑ!j‚¶4(7šó®p%7îz3rL°Œs(™›øä˜(4Î=”*]Œ(/ç<ų9$ +ŒÏ9ŠÚo嘨ÜÎyÔ*«P©”ÛÙyEù,FŽ ¬÷ìÕCš‘C"÷zSQ—ÉÈ1!å¦ cb7rLи)H9&²Ü$&!#‡D§¹‘0jä˜Àqv^jOb䘘÷¹®«å¹‘ãé)“œù”ÖÛ¤r@ÈßÀu+›@½)ÝÈ1QëMÀ„¢VŒhYÖ.hþógb·é´ Jû·-‡Dï²]¡¡¨FŒç m„ùY¤9&8¥¶‰Æå³R[މÜmB4_· OÞÙvDÝÈ1 +x¶ Ô‹‘cÕâlÏx%#ÇD©õ¬Š¤2rL¤RϪЭ¦aävº Bí VŒõt„ Jk*ÇÑN¦éS…ª‘câ¸K8¶ÑÖ­k.n3sY^:½ñ¿×MUr¹¼ãà,Ðpí—u9ÈÞ Jý×9À9   h©ÿºÈÎ`ÆÞÿ¸ùÎþÌù<{o.ðë~&Ð[[ä¸8ó q.çœ÷™¾²ùë}à¬A­Ó‚z­¼ó™ójz¯óq€3>èeu×ø8Àù­”ª›¾¾ÇÎ÷Lýž¾é×÷8ÀÙ=¥eP·í±Ó­ë™“iô5p\›îLÏàËÓãçyŒÜÚ2\Çó8Àyž à˜—ñ8žÇÞòL`H²ÞæœãáܨM?éu<p†gmwß×ð8À¹¡§| ¼ß™Šô:~ÇÎîL`”¤ŸõÚ8·  Â¬%·ãçv&€ºŒÐq;pfTëj~ïu&€³,Êñ:pVg½-¿q­ŽœÓÀe7Ý×é8À Èîñ®Ñ±€÷9jâªçp}ŽœÍ™JŒõ3à\ÎP~]ŽœÉ %¯“¾&ÇÎãL@’èÐõ8ð@K‰–39ÇÎáL€FYæç88ƒ3Ö×I_ƒãço Ikd~oo&€2£çp휻™À¬›¾îÆÎܰ1ÖÅ<€ó6hÔ—Áo×ðX›„G›Öƒx­¼³Pó:éëlà €ãs±q󋟳ìä56n¾÷5dXÿâç?®&Ísk_À›¨1Ë‹Sãïi Ï\KJoÏðXš„ü«c9‹ci,ðãiÒìÈ—±8–ÆÍ÷Ž&¡s£þëhà Ü;k]À%ãŸ74øñ3 ­òéŸ÷3ðvJLûç팼›Iß ùëfàÍL‚+Y7}ÍŒ¼—IÓªüZ;ÿÇÉ$4*myÎëdà <%º¢kdà} €Q}Œ›om ¦C_ލöö$ÛV-ÐÔÆ`H8È6U 0rékˆsmªZõE·\s:ô­Z!tË ö=UÑ»¥¬›æV‚lSÕ2–›eAº©j€œæUü†Š馪P4uÓÈÔ ÝTµ@A¯d›ªf>,CÑ¢Gõm¶já®{&z[†­ lºgÊo˰U  ÄhÅ(ým¶j¾¶€µÙ¦ª™ÏO¢qno2¨jY1t(÷ö^nU-€ùZ·3,Ç{¹U5@¥ÎzõrÃz_àS-ÐÐ÷è?Þj‰f:¬åX#e>ÏüOµ +ŒB†¥y·¬ªkþ§þ¶ [5óŽY¤Úž}«@…Ñ' ï1«j€žKÒ‹—ð+XÒ§Zf.©þÞé÷joÕ#U‘Z~lÕÌeðâò$ÛV- } ÊãI¶­   j_ÃPgKù$ÛV-ÀÒt³‚¿Tµš[]R¯ëY¢™ŽäNkAhõ/ÞVíÿ‹6ÛÂù½x[µ@‘ï5¯xtŸ\Ûªý¨ýë‘0Rû“j[µó™«^‹FOê,ÑNO¬ëoùí¶j/z2]ûéÌ·jRòyRm«6szκ$<ÂOªmÕœ²~R)éIµ­ºäM +£ñnZUW^úºE3ÍßM«ê +X[¹YkrMUW Eô³¢kÚ…­º\e ¥·]ت+ò\uÓ³Ç}7­ª{FˆuÓxP‚\Sՙʊ@o»°Uû¢CY`—ÞäQÕx}5ýƒcög\FJKyžœ­Z€G*:„Êü.FU  XCørÁz>Õ6;ÒšF(pso*«jÝï~·jÐh€ž†|« ‘š~ Žõ{Ä[µãÐ!jO¢mÕ©7ýJé÷Œ·j€‚RñÀ€Éï­Þª_Ú—É’þäÙV ãUô#5®OñÚªP+D‡ÊÛ(lÕ¨úUñÜ>÷z«˜µC#àŠ?ÂV-€Z¡Ç õm¶ºh¥r׋-ô6 +[µŠ…ޤ·Oت™ö·)P{° O´Ókoºã*¹¼W[U dí6y:° ÛT5@ƒ YCxŒÞCPÕ(GÉoU £’~S–‘ß|VÕ•ÇÐÌ¿‡ ª²vœ*d›ª¨­¬À0ï¦Uµ*†F@â馪Ð*ô5T9H7U-P¯!z{…­Z UWi>ë/ð© 鬟hnªZà?Ûe–e[ +ÑU.E@Ô›ÿoŠGôšžp_;ªe† Rz<·©!„Ìm¥ò[-,5P!Î(†;S~¯÷T£!±G€ÜKù½|S LÐ}¨¦ò{ù¦ (iæ¶"â>^ÜTƒÅ‚¸˜~“çT£“‡îœÏaˆßçÍ’¯‡€dßÏ÷Sé<çO8Ðßsžj4äÆN(ôS•/5bÆ\rJ=ýžóT£¡Œ T¬Uí÷Ý^jø¾v•6†”ú}·— "s ôŸ¶Ôøy.­Î¡¬í^ñRƒAë,: øoŰÔh@Àð¡ú[1,5e} +†¥Fú7"áûÞ-5R÷‘ô[1,5|Ï:«Î‚ñ[1,5häNŒˆþ<µ¥†ïqÉ¥ü<µ¥FÂÅÜ£šÓÏS[j4$QC¨n~ú£¥z>/JèŸÒ|©Ñ@£ªÂ矷¶Ô¯"Á[KIfÎÞá)*üÄ^¨Ly9CÃaÝk[!7I¨‡CÃZ„dô)?Žß¡á@Š%¾~ÔÏÈø¾"ØÎgûcø»)þ“?¡šªß_u'¶,ùóýÏÈ¿÷v‚Îè Ñþ ã«ë¡·(SÆ ½×Ðçâ)çâÌcès´$S¦V/Ç9äg—ÐÓÖ)s ¡é1ô9æ‘BÆéêé8‡>GË.ãåÉé8‡–#§Þ§ÜÎ u|ßÏוlðòNÃ9ô9ªLpC”OÇ9ô9Zžd”Ò÷:‡¶c¡¥„<ôú]ç!5í!î?†–ƒrö‰zÍ'ãºxÎ*_Ž5äoÃŽæéør¶¡ùÕÁþKtÜCÃAXT¶$Rÿ)\ß‘uÓudµ•ó¦_CŸã|–GìD˜ºz› E꣹±0…[ȷ‘x%|:£Wg|í12*Ï  ”É· Ñ”cd퓱;¨Áèôj¡À Îí6Á-Õ‡Á4_ì¹ Aʯ¦ËM[½`”¦õá0²³3¾6Í…Žî-2 Êí0®ØÃa N¾ð¯±3§œƒ| Ý­ !ˆr8âîA%Ê‘ %éí¯¤<FñeïæÑRj rd Dÿq€‘ø#C‹ßî7¬+AŽ ®%ߎú—ºx3p:ŒúÊ_‹:¨Žƒ¥{C` 6æ‡c0æ1ížVGÒYx4µƒYnGµ¦ˆäá0.úü¹³á]Œæ|ªAÅkˆ`B»_‘Óa4`“NŠmÞoä¦(Ûm0Dò}:‚&×|îö˜÷y¯Û<ÕˆHUù6!äu: ‘“úF!0·…@Ÿ@5ȑѪæÛS9£úaä^ŠnF­䃜|;À(’ÊÃa ß÷\SùbaËì¹aÊ‘ÑJÿq€§_c€é¿Š+í½BØá G°ÞŽj’úÃa ÄB"&Þ ¤Þ G†¶µ»Ûn•>ƒÑ¼ÙÈi§†Ím[=ßoú¾WÜÿ¾Ö¿·ù‘çüx¡;õ5žmÔ’#A¨Ëí0DN/‡1t +ƒœ7£ù£œrd°xsj +ÓÃa ÔósGpÒ÷ÂzÈ‘Qjúq€QKkÇ`¬×„Kßo%È‘Ì+· ʇ1<º«÷Í@> òÁÈÞÛ‚šêá0b’Ì!µ³\ 4äÈøÛ×±U·ˆŒ̇P¦ï#G¨AŽˆ$\o‡Ú?”ŽÁè£j+V¿µ}ä­·(JI)·ÃiÔf·Ãèçž PjûÈ»öäƒÐs;À z|o?Œ†&ö;pÌ"äHhÄ·€\÷0¢”:w¤qÝE¬r#¢2ëíOcp®¾BæÍ¨ëÇ92Tý0‚Cmk3=ƒÑýœòvÙ†"9È‘½í·Œ¦ëÇcˆÖ9Y­m—m¸"þ,§|0Öí 0P¿ÈÃa e·§Šîü×K--È‘Áä?88Ô¢ÂÓaŒšýmZ§ùå¿Î,QŽŒÂk‰ÛaŒÔøáŒÞÜ÷¾Ï\òZù#5R»` ևíúyhSÞëYN.92rO?0x·Ã»O¦œ÷û@òÁÈ9ß0 +û^0(‘ŸFvìÖc92RñM 0H92rj>Yn;öŠê)ȃ‘´ÅŸgp€Z¨<ƒ1“vù“.;"ÇhP#¢Õrª”—Á$~‚ÍÙ±S j$ Æî·Á‰úÃaˆR‡>Fòjët£‹/± OñÇâ%Ì”#™oˆ/Ó‡8ïUhòÛ9Ô¯¯1{.¹ü~m³ç•«K¶°ôM¿‚Ú”Ãü(ÊR½@$öêát Fóª Û%ô1*û&M92šøï ýÓ.ýå0À ¸½+‘ÑÖk\³äƒq@]UÖù¹ØïšÀo~ìä8¿RÒÛaˆäIýt D÷ CxÎßÓF£ë{Ê‘!œ`höjêtCªWlȇ%oþ rd°æ~;Àì7ÿtU‰3Ñêcd¡äÈ@+Ñn̾W§ÃÕcú¹¾·jU_S=ÉKë`¡¬ˆ}:Œ€zÁøëÑüMN92ðóíƒôeˆêá&µ–÷*ŠzM6åˆÈ«ê  råòpæ\a‘ígZ 92ÐðíoI08/Ÿ­¼ß[ÅÝËç)2gýq#å‡ÁŸO»~ï/ëç)ˆäGŠ*-ËË1mTdÕdßËÀ%‘ GF£‘ÅûÃa Ò±‹µÊÇè‚•ûmÂãóm0Dauº½UUK”#AédžŠÈÃa ì•;¨~‰)·"Al»^߀š¬ý~?æ·ÒjŒ um@OIƒ|r—Û¡VÍ~8Œ"k2ìÍÐfÔQ;/92èv€QfÕp;Œ¡âsIã/"*WrDMív"Q}8 Qiî96Ÿ¿ºÔúMC޲q9€@ì,‡!ÐäøP¦ü`µó’F¢|;ÀÈÅÏït F«s…ÈØ;ù¿"SŽŒLÔn‰ýžŸc Ε£RÜÉPgµ G&ûq¨Mä{u:À@X}2.;ùaåÀЮRn­ú^cä\ç=´}ÞgÎ\%ȑњÞ PîÐÃ0øUcHÑ1î#ÿ^Ù”DR½`ho/‡1HýW).Ò>rÜp +rdüÏv™%GÂ0ôF)l0Ëý/Ñ _Iifñ‚§oGgˆÔ‡£3àÇmèIky¶If¢^¼`ØHî·£3¬|ÁŠ¢a1Š*Ḛ̈â’`¤8÷êpt†­Ý ¸b›Qef¤öëÈ=;xH:£øyX•ÿ!§‘|0æE$j/CGdóKm˜tÅumYfºÓv;€8=Q¢_‹½%YŒæ[5df`½õv€Z|:q\C=X·!x~òá¨þ6Smu¥ØØÔ3ïÙÒÁyç}„OîŸJãs˜‘×hçXd_ÓÙWã?i(ë³cFÒ$ùp4ÿŠØz1ÈãB2;ØÇz±¼naL¨dIf~sú…õþbl¾ª!³#©GÄEÚ«Šó†Ì ^…Å`¶*þô‡|8ªX;/Gñ{;T6àw¦9ìP…6Ä/ÕÙ{;Ö«øg-J’ÙQ%]TI;Œ(–ÚH>ÍÆ.¢”Ú›‹0•dv´ìùLö-Ô<³ƒœ—•¿$A —÷øà+2;ЯFó¶ßžš¦Dòá˜%´ºŸâz’Ù¡Å¿!ÛO£‰ÌtƒcÁÁt#4û¢>•Ç'õú=h"Ó e®é“Ù+8.JÚ²O" ’|8jî“Éjãýø4„/®M™9û/9ì·‡ýþØ”ÙPb¿Äž ¦1GIfC•¯’ÅOèL×w£’üb×”Gó¯¨èÄÖwK6­$³1EÆO™Jb´~¾ª!“£†TÝ‘¨Â”F2;Dý;ªR½*±±zšÏUŸ¨o}ž!³l|a)TJ¢ˆ …dv ®Žƒ*F…¡HL¤²!Å0¶¤àŸuÏ%¤¹¨Of‡Ê?Q ~«ÇøZƕžËzßÉMIfGöãÎH7›PFA:e6”8Ø9Ö²N"並̆*u|^ÿÛš|8Z‹¢l'­¶DÁc"ëÁpG>e™ /r¬È¥×ý *B2;P/¸QiµæXHf‡†<–‹HU7CüˆzJ;˜JÙ/D|’Ù­Œ£ÀsÙEŽ/jÈìH£ôÂOQæÃ³¿Ö¤ÊQ ±-Cb$ŽysP+χGAb!™½Pú~ÉuP4’ÙP’ŠŽýá°â‹2;Ü!y><8R‹úäÃÑêØm´¨Ø<à|*oe|„–0ß],‘¼jÚð׳Âx’(LdUÁ2Â2UÁAE~`¨xܺ`ˆÎå*j3F51å7c;ÀãËÂãØu ²$eùÍØ0Bò«v9:£z ÅëÙO©)d’Ÿ rØ_ïDãAˆæ9W,5Û„R”ä7a;@@xŒ/èÝ{M5ˆF‘ä7c;À@˜_0L<þKÀR6Cçw|ò›±äéèŒæ§nö‰£}3’Ÿ r€‘Q|¼` &8Ê>qô`™ä7c;À0õ‡y9À(És+Šâ²Î¼ñ7ä7c;ÀH陪Â,«ŠìŒ¤¤¾Û`½Ô˜[u::¢}©) ­²³#ŠD’ŒÃÆè\ @´â¿”U§‚ á+¦ü&lò…ŠCÀ%³/‡‡“£nÄ×¾MõMØpYÓËzY–®«n™ê± ^áåBCuzGúŠšI}#¶ÁpÍ%Ç—£#jëÅß´B:ê_-$3Cš79À¨ÚòËŽ¬ªZžÉ¬3RL$ŒÚ~`ô¶ëå½Ïœ«ŠQöÃ@œ*$Œâ'E0²ù^]0ln| ¸Ò‹1Šð©ˆØô6a%Ô—£#æÓ@L¦{c’FP»` y:ÀÈÅ ÈÎ~ -‘Ì „èz;Àø¢ÓÃøã—vú«(åäÚ£#$Ô—#ô.µøz¥ìô×û‘BòrDÄ!Ó¨Aäå£Í”ñþw,LÖŒdfTÄâÛ2k|9:£æG ÞéU­É#ü€½8 + «îHug¿šQ¦Ìˆ¢Rn‡ýySöcB¢mV£ä—‹±Ìˆœ4Þ >ʈJv|PJ~(ß3É̘o™ @”jíeèˆZ­%?Ôû™dF /äÛFnþô/1WÿÉ2¥¿Š(MòÁ@­w;:Cüé_0pü§H‘jíǧ2!jÖk<¦¾QçxÌo3¹Rí µ´L24ùᑈ”ü½\ŽÎheÜ\¶ýš„Ifž¾Ý0¢Åúr€‘' ©Q

$Î-Á‹ŠÑ<çù@hÈ·ï&~]¯Ùb@öˆ9J23,ÝãAÈæ±ùß ÍC‘kV4o%yy9d&¤,ívXL~•/±xņ8¿+¶†]IfúÝ|;ÀH¨V_Ž~<©ŒMÔ˜Â>pÜN–F˜øí÷Õ^0 éuü$ö‰7›èOf†jl·£3ÄÇåèŒæ•§ ïú ê_ï"ÉÌ@„°ÛÐéå#û¥Â¸\kŠ$3" ?Ü z¹ÿrô9÷D’æ´%²LŒÒªWäÃwüB]p©³üU"ù ÌÐFûK-ǧ£‡./(HgùDxCfDÕšn‡õdäµþåè5¡Ä™Ç:¢z…>dF”Ôn(gãË€ÂÖç²öqcŸ„dF ¼”ÛÑ!å—£g‘ä‡2+íãFí $3Úçvr€‘ÅCäåCenUˆtmñ`„äƒ!r€@©ó4tDëµNûB“-B.½í›*Rìä@ŠÕã1?ᘠ·@ÖüèuIåùq”ñù#ºÓÇø^-˜õÀ¸Ÿ"„n•ç×¢íù5÷ úúÖ•1¿¨î÷P«Õ§òüÒR½Æc~ô^å1¾WTaì¯wìûÞÌRùÅìùC{ ïÓ—1;Êéuºˆ¿!n•gÇõk|Ÿ=ä×xL_æ:q-Öé"À+©4?Z¬\¯ñÖcÎØk|/iãØýª!”=Iq«:´Ÿñ}ú:&*q§5韸Äcöï±Ã1{Fáú–"äú}k1\—=} Kåùsl÷xÌRLã{Ë’òwÓðdÚ>[¼7Ù*Ïo9È5ó§:"É5>ôlmã{YWlëMëRyþT¥]ã1ô÷vï]]°œëjúü­ÉVùƒæk|Ÿ?Ô×ø>)c~£åc—ëyö¨ñÉUëc4æN6öÝ]ÉkrǺUž]Ó¸³4Þz¹ž^ã1¿¡èú~ÄÃ5ß±¶Ë(I’¢7ÚPÅû_l± tœ¿ÉÊxÕ… +éR3w­~ùÁ/ìmçòƒß‹÷ÑsËSÙ§f~Qsò nMÝWäò_Çz³ôQ«NñâêÁ/2/?øê÷²Qíx¶:m|+»1¸šðpûª'?ðC3%óöýÍH×ü¹äR3W¹üÆßöòƒ?}ZòDøðµ'1ÓÇè|ÙAïÕ·÷å7úô!Áˆ+_SnCËôî-6™·Ãù°—6WÑ0xcbáªÛB<èµðežÉÏå¾bd­'M)V–¼“º˜ñâÍ4¹AÇij;è­í‰0…x¾ëµÔŒg©ãòƒ…•‡ßøÓûš4oQ®f> ÄÉ~UyùÁ'¤ùõkÕÁé©¡f~óµJv±m\_vàY¼øD}öÀwïR®øšŸ|üÂüðƒ/äY +/²Tä‹âjæ#«Êåt‘ªóámp•§Í-¿iñEq5ó‹üñƒ¯ä‹rù?=Ë6ÜV9øê ÀÕÄÇÉô/K~ðgJæî ¯q\ŠÚÄK<èÅ«n±[¯>Ü`ã(8»Õ˜X„»é 5Óµ _~àeoØËþoUêÔ˜XTöíÅÕÌì‡.ùÁgõŠ]~ãOÏuHÿšî:û­KÍ|ÌŒqù¿Êå/ˆ'»ÉbÄö/jRãbÆ‹ŽÛ.–I~àñeîo3&Áâ߆dþ×¾.?ðèIþ¤ôX´/}.f–Wµj¨™BËåc´?üàcµÆzÒZ‹åë~ôS3L;ë‡|æ]ŸÓþlëÅŠÊ}Ë‹³¢I=ðu\vÐIü—Ýè^f„ÝÚƒ>K5ÓÆå¾õLIx-cø‹ÅBÚ_ûþ¦¥f¾ ý^~ð뺶þñƒ_Å‹¯TÊ7µ¸÷P3ŸÇ¼ìÀ—½"—x¿‚©}Gùf.Sé=ÔŒ§9Çå7þÞË—¿Ø u}XšèŒƒ5~ÚÁn…/Ûaúk5¬Žµùl9¾-Ïèë#ÔŒnÜÚ忎~ð1ßÖ¡ ÌXUÁ5óñøöƒFöò[f/» ®øý2y„šùÖÓ/?øˆŽôðƒß«®ïµÜðÙ=´êÁ/|ûÁ—Qåá7þìëÍ–Ù¾–ƃ*‡šøm6ÖË>†ö|ø‹3?%{L,ÖZ4ÔÌW¹üàÓÜU8ýà+û)Ç•eÄïWõUt5óGïõò¿îúœ~ð§o»+ÆÏŸì›ÖÕŒïêÛ-ùÙ¥¿ôò—³/?î®1±HB=øÅ›Tòƒ_ÑÃ~ãÛy³'Â1±šj5óý&tøÁ/²«púÁGÐõ'èv_}¨jæû¼JnF‰EÇà z£áu+Ú¾®#¸·öP3Fé—|»:§¿Ø²{7e•¯72\ÿÄLo³Òé|LšÝÆV¯<÷ãJl¤†zЫOÕä7|ôðƒQ¾v2PŒ+añ6ëjæWòA–üà÷VúÃ>Pþ{ðß7®SBÍü"Ô.?[{¤ùðƒ¬¶žÐ¤˜W"hU¡&~ƒn?øÈ"íá7þôÊQlËŽ¼»¥LÖé»’bK’|Rf" ­jafÏ8­C)Ôƒ¼÷WòÞöÊ]~ðÕ765¬Æ‡W®P3~ìã‘üÀã­íá~zS´èEA‡–P3¾ï³üÀ—ß +þjÙÁ+ÞÆˆQe“0©™/»7%¿ñË|Ø ¯>óšX2Úø^°ñBÍxžó²³%T_«Ë|Ý]¨î¼ßgÞÕ_çí;g<üà7ZÅo¨Ú·¶¸ ø…ÅÕŒ'öD“üÀ³—t¼n}WU‰9…iæ÷W3¾õÖ.?ð}÷íËoüécÙâð·¶ŠWÇÕÌ·­ùÁ—ÑçÃ>º™óñ¢X\­†zð Ý~ðy–öðƒ/¼ßŒ]«‹œI¡f~i£’|š½=üàãƒÖ“2)bTÇ ¬¡&~™ì1*ù¿cÑå¯v'õÖ`±<ÖWÔ'›«™¯ÃÏzòƒÍ_~ãzÐùëÆH™^OW3cO.?ø•†<üàcC­ú£®Dü‰½îßÙ¼È.N»Ø“ãåq5ó1öèòƒ òòÚÄ“N1¶pTfˆ_­¾§xä§öð«Â*r‰±5Ð9CÌø¢¥_vàé÷ÒÓüšcö¤Ž¿ž…xàKm—øÖe>üÕõX~Dè[8ÜRCýüÍ"F—üª…~ðØWñǨ1·†ì%w5ó•I/¿ñK}ù¯þeƒ5æVdÖP3tæË> ?üÕ¥—4‰¹ewÌjæw•zù©íúœ~ðç^ÉQZÌ-Üò|3»zð‹ŒË¾’<ì9¢öµÛÐ=â4Æî®f¼´Î—x”…þºrŠû¥ów‰Ú}7»šùÌã²³ÅöÚvàñëÝA­m²ïAW3žú¸ýàˇxD¶µÙ°¿>ºb<ÌOÌ𦻠+5î'ÂYÌltÁµ:chiÙÛÕÕƒ^æe7ziú°~úG¡d1³´z+r1Ó+m|ا¢/?ðAþׯo]µµ6BÍü"U.?øè±òðWKçûÍUÛwl•J 1áuŽÖ.;ð˜púðß›ž#KÉ÷ª‹¯ÓAÉ<Y{øŋψ¯ß¡µÎ5B=ø•n? ÌÃoüuOÄžõkÊh,Û¿ÔÌÄõòƒÔñòƒ¯Þ“¹õ2¯»KÍø.¬—xo!—pt´õ P Fí¡&;æ¤w3Â÷êxWÿôHœQK¡J¡fõ¥"¢¥Á_5Ûûd²¤ßJ{ +¸šý´fÓtÇe U õðc­'¸`|‘1f4Ôìçáá Á~|]‡Ëôùæjö£ÙùÄ­à#H¨Ùß›çš:¥EQ 5ûGÙO0¢¾>Eº.³?õð« *È…Ÿp§P³ÿgG%ßwÂu5Û§§4ßè X, +1¹QR´Æ9ÇeÁ·ˆ«‡ú *¢qn‰‹÷RW³¿zÎÇÕ5Ž!Ñâ®f{Û÷¬Nœ+Äïýs–šýôŸîjË–$a;š£ÈC5ûÿø(E›¹_÷DÒÑR P/` +“ÔNjõŸÏõñœúö±¢nŽ(i¨~èo½(c…é¤ÁÒ8ÔNjԩœÛÉ-tIr¨×Ò ª¢œ;ãŽb7e¢>ÞÆ\¦½¾Ü"Ë»¢Ç”…•>F~ÁÃY,Ì㙵±@fû‘P+õñmÞ†CÖnrOÊuèßdìG$Ó9.7r¨¯:÷/ä¬ ,fu¨Ç5® öãÔ¨\òÚOz¼ˆ&šûg´ïýÖ2‘Öƒ^ñ­Îxéè‹ÏœòA}|¶ùCÅõþœ¤ÈA}8ÉÜ>çnæV<êèÚÎ@}|)³•–Nb¥î˜êãyX/¬¨ÔJ}î<è_§2¬ÿI­„Êr@ŽYd¼žK¶¿~RZÛ¨WÁ¾B­žäÂ×™Û™¨·<·’+Á¡ÑA¯ø6ëJÓI®„:*õñ¨ó—¨ì™w>Qß¸Îø¤'»P¾šC]<ÌYd‘°'»Ð•êãsšûÏêÚ¡ôЇË+ÈâuÞò§5LSõñ$³àÙ…øZÖ~òãº=+©m€x›¢ôáœg±Jº Âqëå W|Ù’ø»]„‹Ío6@-:7Ÿˆ¾–…pnôáÊݶ >GûОúf>ÔÇããÔ±òu8Dc*ÝØÛz•Žx¢‰Ø¡>¾Z¯²X!\ÎŽÏ¥:ÔÇÃGν'­ç¨sjüP_ñÎÆ©jÝ­¿t‡Àõ >>«ƒÔ£}¯µ¢.ôŠï !}$49áò±0óWrŸ ¾`Kšêã˘3‡ÎºßpE§ÒƒúxÎs玲œÍF…ƒ^ñm*jÏ9+óübõñbsÿFÛ •[êãѱǭXJ'§`‰Ö~êã SB_Q³“SøÂÕ¡W|›_Ÿ5ï·VSc9¨¯6>–mzx²zPÞ†ßÁJª'«¬ÑÚÎ@]åbm£vpÌàÏ£ý°¤vÐ8ž¶)ÕÃ1Î~~w寄CfÞ—W¾N0Žã}ÝÈkòpÌ(\öuÃÍispÌ@ÜWa‘ÙÁƒacê±ÝŠÃŠƒcÚÿ>7é×”ºùP"Ç Ôí³Ÿ¦E3ðèö0ŠIÍÌÁ!ƒàêwòqÁçtpÌ0>¢IÇwOº 8·Cc;j¸{õpÌ€MÞW݇LvpÈÈ•¾)qO»vc&±—’Æ­!MZ 1`§!•^F7ÿ•"Æ­QöÌwi”kJÄBFíeŒ‰$dÜ09аŸâÞúeô9)—€pI ¼~åÙKLØI4./CzÁlá–Ð=½^úL»©èj½Ž!¨â,á–àí¿. öþ 9 ÑË€DI­Œ[ƒ¶c»4È;¶®!öC€®¨'a¤m‹w$>ØI ¨Œý^ h ÒÖ€qk˜ +¦×ï£Pó_¯Iõ'úþm¡ýú€Ýï\e}P€3-ãÖ ¯2_ä +sWÀ¼ñc“(ÿÆß¿?öö+0`¯ÐP¨_$¨d—Fí¦ôWcÂNƒ‹‘¾ h Q"Æ­¡É~R⃽\.¿ hp[Wt3nbö“ì46£½ h`Š‘€qkd¶ '&ì5Pâôe@Ô[À¸4¬eý)‚ì5Ôä%@UÂ-¡õ·í}°—hU~ÒG‹n –ß®÷ÁNBáèe@{·€qkýv½ö0åe@î&ŒKC[ûízì5Ì–†c@ƒK©ãÖ0ým{ì4,Á™½ h¯|3n ÙsÌ¥!~Žéè>ú2 r®ãÖ(é·ñ}°×ø¿— ³VÆ­‘ì·ñ}°×Àߘ KÀ¸4àÄ‚O5P§PSZ5÷ÄËŸ9 >Ñ÷¯k¦ ¦OØÿ>•*/yUá›pKàG9°—`mô2 Aœ,`ÜY‚Ö7P¯ ­Ú”Zù¿~Ÿå }OØ+ {òË€ê+Œ[Cñ5;†V]_4¤jĸ5XSpÝöÚË€†}.áfÜ„„ 4ì5˜¯¥OÕ¶ŒK£É=a¯¡¹¼H´lAü­€ö”Á {” {ú'¥tÁ±†””ó { Ü­¼Œ®ÑR ·FI5:Ç€·¼w.Ë!;4òê|7á–@é .|Â^âÝe–d9Áu°H,÷¿Øcž«„毣š$ŸA¢X…öD[ñyUD£ *ߎÑ!é=R0G•™‚­D•oÇè°¢Ó=a«‡# ØQGÔ³ííœ@˜Ã.iìÈ}º;FÇHã"ÌÑÒÌAŽEø›ôË: \ýv[Ážÿ´ú‘nÖò—D×û†Yý÷àþIôo`²¶)?óŸ=Ë9³Ý6òºd®‰[Ç“Ô8éó²µ§¿jî§ñUëzý«ü4Œ´ ç*ðßÈý-ôfrÖËÿ¡0Rg??*Ÿ3ÿšÆW{›ûRäŒö“ÀøÒë#ÍvMÓo~žÇÛ,ÏwØSýÆûi¨]êC”Oà'ºŸÁÖyÃM„oéiè Ð|?Äo\»”îÔªÎG¸yp]M®´ÉîI`¸Ø}¢Ð‡î¦À±wÙ{µ”_ÛGà·>ëz –WêhŽßƒöÕÚ¼ãÏäŽZ÷»ôÐðÚ”·ý5 ιŠKüohû³kÔûìð¾ymEúZÎ{’Ý2÷JËî&Ñv7}¶ƒ-É÷cÜ$0|Z‘Ø'rµcá7ÜÏ/Æz׺ky[ÿ`ßm±Ûó¯Ö~‹Ä“Àh+gòäSõ{•<·O£<[óûÜ0z´ç%Øè–`¡hü¼ôìû?ÆÏraýû¼Ü06õÇ.Á¸œ6A¹ÃÃX± Ô?Þ=TL»Î®Ÿ—“Tó·ü_ž­¼LZO_ÜPÕN#[÷»äWû@Kë¶Á¬}ÛH-¶7úêf²5µ$~S­nCòîs¾iNzÆ‹UBµ§åñ_câ†óôÖÉFó?1 +ìÓVGRûË­Ø1(ì¤ÐâT0ÀŠ^dŠ'FE¯g²A +X!S$P<1(J^g(¤ €ëÔ OŒ +Í£:‚°"­Âp+žÓ6—#HA)²•â|+v Šjëé T0À +í¥Š'FEoóÿ¤ €v\Ô@ñÄ 4Òp)`E>·V<1*¤y€ 4ž v +å`µwŒ†¡C +XÑ4«½cPè¾®A +X!%«½cT4»Å:‚°"ϬöŽAa‡ìŽ  ÈsžÊŠ£BÊs3EâSx€ݶT xbT »ç:‚°Bæ¼–ûÄ è%ép)`Eiã:ËOŒŠfí“#HA+l¯³üĨ˜v :‚b혫è O ‚VhïWé>1*z·ÒÌ)`E•=ŃbZƒ<A +Xa·›`¹wŒ +ëpÔ¤ €ö†ï¢wbTXÓ +XÑÚ]ôNüSØQkó)`…]£§xbTXÓA +XQÒ]ôN ŠœKŽ ¤h³ßEïĨ°rP +Xa·¶àEíÃܤ €öë‚åÞ1(J™-;‚°¢Œ»êÖãTG‚V$½«Þ‰AQí“êŽ ¤Ð‘£ª·cTXS +X¡cÇàŽQaMNs)`EÕƒ;…í,)Ž ¬È%ªz;F…59ͤ €2fTõv +[ÌÜ +XÑ¢³üIQ %gOó·ÿä"5ªx;F58Ýd €Ö#K½cP´’Þý¤ €uöìì£Bçû5}*`E—ìì£bŽÙA +X¡Yƒ½cPØÑñîì ¬(#ªx;FEïÒA +X‘Tƒƒ|Ç °.ìý¢>‚ÂÚy –{ǨP-Ũ`€ö¥˽cTLywöG‚VÔVƒåÞ1(f-s8‚°"רMÛ1*¬òG‚R¬ëY°Ü;þ)ªÝãòûE}*`Eë%Xî£ÂJ¿:‚°B$jÓvŒ +kpº#HA+ì„–{Ç °j3³#HA)ÒQÅÛ1*ZïŨ`€]£Š·cPØY- gƒ–=Ä£AÚ»¹?‚°¢Ì=Ä£bhnŽ ¬H­ÛbÇ ¨¥¾ÔG‚P¤¿9ê]ôNŒŠVµ:âSx€-ÝEïÄ TžÍ)`EíwÑ;1*¬ÃG‚Vd¹‹Þ‰Q1ÒlŽ ¤°-{½ƒBóìè`€v+ –{Ǩ°Š£Ž ¬½‹Þ‰Q1GéŽ ¬(å.z'E«½dG‚Rô9ï¢wbTX¯× +XÑÛ]ôN Šžµ;€ 4ž Zïšwb4¨hq)`Eµ](žÓ®’Ž ¬:ÿ7Á¨5eOóÿ§íOö%çëòrbX{£Ž@¬h9°cPÌÝz @φ:îzwb4hq)`EÖ»Þc–æR@ +Á[Záoz±r9F¦Ñ89æ©Û˜Á~Þ1No]:‚°BtûyÇ È©5O‚V”2‚ ½cTȺö0A +H!ÓJù­Ø1*†¦æT0À +;3ƒã{Ç (EÜxÐp¨Õñ@ðÄ(°¦FA +XQÓÝšëXó)`EêQk¶cTH®Ù¤ €uhTåvŒ +kj†#PÁ+l¿‹½ãt—[rã0 o”â$ï±À‚¡`ÀÉ×nuÔî8I($FõÂ+@®Ç‚ÖÙ—xp,̽F2 &ª°SÎpLœ5%ít²ù=4ôl¯Ÿ—ãǯÂN9Ã1°¤Ìd@L !£‡†€TÝðzøüx9~|ìˆ3ºŽd@L”ZÈÞg8&t˜ÙÉ€¨K'Â;a8$–Ž3=1&æ`Gá˜Ðf% `¢WvÔ‰]Ëe@L”ÍŽ:Ã11ŽÔd@H”=ÙQg8&t¢ÙɈ 0!u†CB5 P€ë±Ð;ë Ç‚¬2’ 0Q…u†ßÄü)Ef6 Â_¢ž}KºÎºÇ„6=oâ0±Šä»ýâ˜ÐÁf' `b¬ë¬{qHTÝ‚Z2 &Ú¸»Ç„´=’ 0QêÌGÑ‹CBw¹µ“  ±×y/qLèhÓ“(`bΑ£ÇÄ.ún‹$@ÀD¿†§! [\I×Ãçw:|~Rôa&ŸÿàйF’ ±¶\SÇ‹cB÷†Œ˜@úr« ‡Äè2[2 &t5‘•m8&t¶YÉ€˜¨zX’ăCbÖ±³  !g\Þ‹cB盕Œ˜@«Ö¼‘¿8&ŽÎÂÉ€˜»°oñàлÙ[2 &Ú¼¦´Ç„þ–#º'°?ÔƒCbétÑ’  1×a'žá˜Ðù¦'#&PÀĜהöâ˜ØûûDýmQ ÝVO×Ãç÷ÿö§YËdŸÿàÐáf% + @B ;í ‡Ä)"-1&d°ÓÎpLè‘,É€˜•v†cbïÊþ3 &êf…}ò£;èw]¿×ÃçÇËáãû™ìQ2:جdÄ +˜X­“õ`8$ª¾¾­d@LŒÓȪ6£HO$@ÀDvÚމ]êN$@ÀDéì´3MßÞZ2 $tìªdŽ5sIFL €‰¹Øig8&Îú¼A‚ 0Ñ;í ‡„np£' `¢VvÚމ5ûJ$@€DÝëÛm8$to8-1&dr» ÇÄìµ' `bTvÚމÓd' `¢n6¢‰©ÃÍL$@€D9s“Ûm8&ô™\Ɉ 0±Ø@þÐÝ+^Ÿ¿þ›ÆËÐõD>ÿÁ1 “rO@À„~*9³ ÇÄÞ’(ÀõX(]ØéÁ¡°Ú-!$¶ÅE®ÕqLˆtIÆ_" ˜˜÷øÒØe>E¸>òÛ ?éãžÎÇÀð£«&j»;Ç1±»¬d@Hì}îÃÎqHœÖžc"1&dò- Ç„´*É€˜­³oñà7±ô,g' `¢•û°s:ÛÌd@H¬³îÃÎqL¬3V2bLè«ùC Ý£GM$@ÀÄ,÷aç8&>ïnÉ€˜hë>ìÇÄ‘,@®ÇBûÚ‡‚žt«% @B6y¥pkˆ$#&PÀÄd_â¡!Ðëh¯‡ÏŸÿ~ƒNwXÃ1 cÍLú¿›¬ÔvŸuŽcâó€àz(Ì}î³Îq(Œ®ÓW2bLˆ°³ÎpLèÓ"É€˜}’um8$f-¥& `¢•IÖµá˜ÐÉf& @BgžIÖµá˜Økg#&PÀÄÒã˜$¢?ªÉ€˜˜•w†cB4’ H€€‰¶Ùyg8$V™- P€ë±Pf'wÛp, }/J$@€Dß­“»m8&tºÉFL €‰ùÙîăCb·6k2 &º°ÍpLèt³“ 0Q;›Ñ ‡Äù.í¿ë!—C ©In¶áÐC$#&PÀ„.'r³ ÇÄÚK’ 01F!;¹á7±Šž—=­²“Ž +f2 $êÙìÄ3Gj6bL¬qȹm8$ÔZ#³ö-:Üìd@L´ÃŽ<ÃÜÐÉœ<憩Qvg’anL={ˆñ`nôÅŽ ÃÜÐs|sÃÄÐUuê½›;æ†ì{svÌ1ï½Ö17y½uL}ÈÛªcn,©×³î˜:­^®cnôro<޹QÖ½8¦Æºß ò«¥Ü+Ü17ô?ä[憮_r¿ SCNÝä~æ†ìEî·anŒy¯?ÇÜhm‘'Ý05æ9B¾¹an,òÍ sc’Þ17:™Ïs£ìFž*ÃÔ›LÏŽ¹!dvÌNf[ÇܨÂÖŸajôÓÙú3Ì 94 scÈ!÷Ã07Z?äI4Ì ÝaÈý0L¶[ƒ†¹1[ƒ†¹Ñ+[ƒ†¹¡¿/ù憩Q÷dkÐ07ôm‹|sÃÜèdÂpÌJ& ÇÔ(‡L޹¡gù憹ñyY%ƃ¹Ñ¨Ðþ½¾ÔNÎÃÄϜ߯óÆ17æ¼W cnôvïo޹QÈ|á˜{Ëýêä˜Òï7!ÇÜ¥\wÜ17ê*׳î˜ëónw†¹±Ê½¿9æ†î䛿F›÷ +tÌÒî蘲ȌᘓÌ޹Ñû½ sƒ¼h~)½~îu¯@ÇÜÁV anŒÊV anÔ}OøŽ©1Îd+Ð07Vc+Ð07Æa+Ð07š°h˜¥³h˜ú/[†¹1É„á˜L޹QÉ„á˜m“ Ã17„L޹1ê"ËÃ07ê^äi7Lz¦§Ý07–þÊÄx07Æýšö¥üú&“ æFé“|oÃÔ(›Ì޹1×=ã;æF÷Œï˜µ±h˜óçìݯgÝ17d¶«á˜£Ý+Ð17ê¹W cjì#÷ +tÌE& Çܘ÷ Ô—òëõ}ázsCŸžë9tLµë½þscî{ý9æF¿—Ó—òë+™.SCö¹ç{ÇܹןcnŒ~¯?ÇÜhå^Ž©1þUnÃ07tõ“on˜³²õg˜Ì޹QÈ|á˜c“ùÂ17&™/s£“ùÂ17j/d=¦»áÿÝí.rL޹¡;7ù} sCÿ~ìWz05š¾’õm˜k-ä¡üúYïÉÞ17ÚakÏ07а[a˜:- i憶ö s£/¶ö s£¶ö S£èóO¾¹anÈfkÏ07Ûnʯo}†‰1~t¿_Ísã>+ ò«g»×žcn´s¯=ÇÜпàõ­SC§¦{ªwÌ Ý»®»í˜}Ý«Ï17êX×ívLuª\ϹcnȾWŸcnŒyïl޹ÑÈ\á˜rÈ\ᘋÌ޹1É\á˜Ì޹QÈ\á˜s³_ê¡üz©<놹Ñ7[†¹¡g¹†©1N«¤a˜r*Y冹1„­@ÃÜh­@ÃÜ(…­@ÃÔÐÕÌV anÌÁV ant2[8æFÙl¦FÓŸon˜ÒØ +4ÌN¦ ÇܨÒÉÓn˜õôNžÄ_ºË,9®‚7r°/÷¿˜[ƒ*›–?Žò¥å7Ðʼncb¦|OvË þU'މÒJ0eO)ÚŸ4\Ÿ¾n’/p☰7¼ñÇD-o¯¿qL¤‚7~
ÿöêûù®ß8&FÙÏwýÆ1Q÷{¾Ý8&òXÏo~ãX;h7މ4ŒÇD Æc¢ôö|o)h7‰9ƒ†qã˜èãÝ7މZßxã˜ÈéÝ7 kDïuëÆ11ÚÛïo-¿{ðÆ1‘×»o|‰¶>שâˆÞÿµU[@Ñw7íUÑì§#TA€Š™£]~bU¤Ô†# @E[ѱpbQ¤¾[w¨(AOº±*òW#Eù£XÙG©DωÓî_+UG@Š6wtRXu¦ìU ¢ÕíÆ¢øj¤\Aÿ£éÙG5hz7VAo{9ŠúG5´rP o¬ +ûáòU²ÚßæxFøÅ0í21¡ +TŒ6‚Sð΍6*ÚÛC¾SXÍï•ëñü·û$¯=ÿ« §ž(¬7ô`XÖÆ²#TA€ŠY¢ÙrbQô±“' @EÛѨ?±*ÊJËP ¢Œlë‹¢Y‡Ž€©Ö`cŸXv \Ž€6k°±O¬ŠÔvv„*PÑg Nñ‹¢ÚµÆP ¢¶hÜX¥Žì(Pa‚×}bQ«“ž€i­¨AXV=†#TA€Š\{n¬ +«ÍPŒ?îIöQ+Ѹ;±(ò°í(P‘÷ v÷‰U‘wnŽ€€(Ê¿½ƒ›ØEñuŬ޸Ux€ŠYÇs ÞXulO@€ŠžÞ‰wãÅøü+§# @E™ÏDúNUÐí0çz<_—óñ©½ïÆ*°Ó0€âk·<ïÆ¢XÖ<š#TA€Šn×Ò@ñ‰UaW¸î(Paÿ¸§ÈÞXs—Ò*ry'ÞUÑs)Ž€síwâÝXvsÍŽP*Æx'ÞE1¬}LG@€ŠV߉wcUصd9 +T”T‚×}bQô5çt {¾ïƪ°×¡ +TÌöN¼«"õQ*lP¯ûÄ¢°J?ÖÓ`2xÛ'VC©}9 +T¤ž‚·}bQT+ÓP€¢¯ ¼«¢•â U ¢]q_Å'V…Ý,º# @Eí;8ËO,Šbå£: +T䲂±}bUXù(Ž€míŒí‹"ϵª#TA€ŠuOª‚ú}xü,ÇãÇ_½£µµ‚ËóÓþz PQÒ Þô‰UaÍc8 +PÔ=G°±O¬ +ûÑ¡ +TÌ6‚}âE·ŽgÿŽ€½DóîΰîQ*ÊŽæÝ‰E±¬{dG@€ +{Ñoñ‰UÑ¿7Ý/ÖÃ`·¨£X 9íìU ÂN`ÜXÓFær¨¨3w'V… ›ê(P‘[4ïN,ŠaÕ£9 +Pä¢ïì‰UÑø‘W ":ÿ²ýk\ÎŒÕxø_§_n-šs'–Ç÷Ñkv¨°éœ~'VEiÅP€"í͹‹ÂžU–#TA€ŠÙ£9wbUX玀½D¿ÄWª‚”¿ï]?ëñ|]ÎÇ—=ƒ}bÔ‘Vs ¨Hc{áĪÈ{G@@ùß^õt7E±¾‘ñ«ð#½ƒîƪ°Æá (PQgìE‘÷¬ž€Æ?¯ûƪèã3®•€kçwÐÝX¹×áU b¬wÒÝXÉJGs¨h½¯û΍öÇP ¢”¼îÿ(Ú¿½­U8 +P̽kðºO¬Šž= ®§aŽwÐÝX 9-O@€Š^ßrvcQ¬±×t¨¨©<çøUa7žá(P´ýïTÓ*Gáz<ÿªŸ­«´üŒì«À +‡TÀõ4ŒœƒßàÄjH£G@€Šºf°#N,Š1zËŽ€¹§àMŸXÖ;¦# E‹Í åñÝ:GÇj}x+}0v4çN¬·Ò4*ÚˆæÜ‰U‘ò¥FsîÄ¢h#íæ(@ѶòWqbUXçp€¸ž†9£1wb1TÛÒËP ¢·hÌXuuÀ€õ4ÔM¹‹Á¾MÍP "­hÊXÖ8º# …ýúÑ”;±*²u/G¨‚£Ô`WŸXÙGq¨¨ûmú7VEm©: +T之"m›cŽ€eGÿOŸT=¯Åõú|,çãgЯ܉U`uc8T´͹ÿ(ªùý½í~ (PQìÛ(>±*ÊîÓP Âþ‚}bQØÕ¶UG@Šl`gŸXm~Oë_B¨èm;ûΰÎá°ž»uÇø‰Å0G¯ËP "­ã'VEéÙ0`= iõhÚX ÃŽÐáU b”¨šXÖ<š# @EÝ3xÙ'V…5ê(P‘Ç Þö‰EÑGÝPE²ÛZ}+ÚUQÒçu+ñ«ðV±Ÿ×}cQ´¹›' @…-zÁ«¢®¶*JëÏë¾±(ìm¶á(P‘r~‹O¬Š>ór °rמ£üƪ°îÑ¡ +T|}Å'E™ý3µ•€µæg_ÜXÖ=²# @…•Šè·øÄ¢È6ô<(æÑ—öΰö1¡ +TŒúμ«ÂNëæ(PÑÒ;ón,Š4SŽ€y¾CïÆª°þÑ(†íüà<ñ¢üÛËJ·#TA€ +Û´Á1xbU´•‹# @…Ƀ×}bUØA:*J§ÞE±ÆHž€©¼SïÆª(=MG@Š>w4õN,Ši ¤9B¨è#šz'VE«ŸÙ­¨¨ÑõIUÊh\ç׿Χž¿vìûüO,‚açtq  °ïY4ñN¬Š’Fv„*P1Z4ñN,о¾§Ñ/ÖÓÐì +>±êþÛ¿¨È+2|¥"h{åÉõx¾.ÇãëîÑ7éÄ*°âÑ¡TÌRƒM}bUXñ(Ž€m—`SŸXuv·,§ Œlé« Ö½*’]ÌÅ'EÙßø/ÖÃP–µÃ×pb5ØgžP*ìk¼ë«â뉎€Öì‚w}bQdkÕP ÂJQð¶O¬ +kÅP€"Û˜ Þö‰E‘Ö.Õª @Åè#8þN¬ +k€ëih_óå5|b5X\Ž€yEíìÄ?Šüo[鎀V>£vvbUXéèŽP*f†Ý‰E±V›ÓP ¢§hØXV:ª# @E™Ñ´;±*¬väÿt—[¶ã:DGt³$ôžÿÄ.1ÁTÕ_½zŸMʼnAWEúˆT?¢4ö̱¾Ä\>!ùŸpt‹×ÿ^à4æKÕY“ü7ÿÖS¼>÷ûÏiˆŸúÝÙñIOñzûïnpãuݘÙñIOñU`Ê9 ñC¿Ï~ŒOzŒßûÀ„sãõÝß²ⳞâuÅ[k4Æ×Yköc|ÒS|o0Úœ†ø¾ôò³㓞â¥ÀXsã[Ÿ—ã“ã×Y0Òœ†øv¾“üŸõ¿Œ3§1^ÿ4³㓞⇾\1þ¡1^½™ýŸô/ëà­5âõL)=û1>é)^ߨ÷KÍiŒoE$û1>é1~n<"8 ñU7‰šýŸõ?ÈÅ?0†ë‘í˜=þuåm¬ûðá4†—uû1=é)¾Êº§®Ó_æüÝèÇø¤Çø±Ì*§1^¾×—üŸõ?',WNßø¢³¨¯žýŸôßÛÀŽ5ã{‹¹ã“žâ¥ ìX£1¾´&ÙñIñý¬k4Äïïi+é!=Û)]÷|颀ìÇø¤§ø!dP ñK÷¨•ýŸô/»á5ãÛ±—åŸ㓞âõXE®þ¡!~ê’ ÙñIñm Ù ŒÆøß”ýÓCz¶Sú8dNéunÉ~ŒOzŠoóà ÍhˆkìšýŸô¯K)¹ú‡ÆxÝVöc|Òc¼œB^õFC|×ad?Äg=ÅÏEæ”Ñ?Z[ÙñIOñÎ??ë´‘ì˜ÝéÉGÿ •Ì)£!¼éÞÚ³Ó“ãëÙdNñ­œ–ýŸõ¿ÆÄ·™Ñ/ºXïìÇø¤§xÄÍÒhŒïûÒcz²Sº2¦ŒÆô²öåÇø¤§ø2ɘ2â«®#û1>é1¾ìFÆ”Ñ/³Ïì‡ø¬§øYÈœ2âË}d?Æ'=Å·ÕñÎñ½÷–ýŸô_;™SFc|i]²ã“þ¿?çT˜SN__«Sdgÿ=ÆÏ sÊiŒ×af?Æg=Æë|¿o­Ó¿uGÙñYñ"rßZ§1¾éz™ýŸõ¿õw»o­Ó¿ÎÞ-û!þÒcüÒññc}Çlôc|ÖcüЃ$Æ?4Æë’õ˜ží˜ÞJ¹•Ó>¿WŸýŸõ_ô¤ˆññmŒ¬Çôl‡tœàÆBòÐ#ÃŒnæ³[¹Þ +|ÚÆh] zöcxÖc¼þ wÈ Õõ4‹édúÔ¹ ½aêóÜïx‡Tïó~g;¤ºÈÂô2]7Yü! R}-|G¤ºžáb R][/æT/[à 3Èô¾<£ò|c¤z;ø +0Hõ:±¥ 2½†=jêð6þê1áÀÝ4HuÑ/ú©®o(¼’2]ÖÂ.2HõÑL ƒToºÀ‚þ@ªëUÂW5ÈôºacvHõ +°Cª7XiR½ÂŠêéz¦ÀבAª/X!R½¯®Aª ±å_r© zÔ êësôQºzÔ!Õ‡¾A Õ›Ü/#‡T/°ð8dúÞóî%‡TŸíî%‡Tïåî%‡T¯«`ú™¾N¿{É!ÕŒv‡Tïûî%‡T—q÷’Cªëv=@ Óç:÷ŒqHõ1ûýT×å1ƒT¯÷Ðø1&½î^rHõÙ±— R½W/jêu߇ ‡Lïº:Á=5Hõ%î©Aª÷Sáñ5Hu™_ƒT/ {É Óõ|)¤ú€ïê ¼CªWð™.¼CªëÀ‚GÌ Õ{]ð¸¤zÝ ÓÈôzÆ„Ø ÕWÃn2HõQî5Ù!ÕõWÀôR½tì&ƒL/»b7¤úØØM©®{|UƒT¯‚Ýdõù9ûÜÝäêF¼Cªw¹»É!Õë¹»É!Ó÷ïê F¼CªûÀñcTÖµ{‚ý@ªë>' ?ék×»—R}ìÙA ÕÛÝ?Få +ãÝ!Óç>÷ªìêsÞ«²Cª÷ÖᎤº”¯A¦£¿Â­¤úê÷+É!ÕGøª©.0àR½À€wÈô¾eÃfêãlxÀ R½Á€wHõÚ +4‡A¦·S°— R}.ì%ƒTï{É Õu'‚ßÝ Óålì&ƒT_»É Õ‡`7¤ºì&ƒT/»É ÓënØM©>aÀ;¤z[ØM©^aÀ;dº2±› R}€wHõŽ7õaTÁ±dõñÑ5÷>Ò8¤ú=Ä QuÈAùT—sôR]® ú™¾7Œv‡T×WÏýTok ÐHõÚWýL_§Îuë©>ÏÝG©ÞÇýBrHuñîê¥Ü}äés­»R]Ï»ðˆ¤zƒñîêeßäÐõþ}¡®i¢¿‚5R׌^õ¥èðµÿþPõPçÇÎþ¬jýL*úGît°ÿ‚ˆýE¯)Ÿ>¯Ü¦í£/Ä›éšsÀûóO×#Ù¹íªg©Óè7,Ÿ¦ 8å?G¶Ãu·¥KwCs}º`nÀÿȽlϾ¯»5]jVèï=sÐ[Ñ?údbÅNWô>ˆ¢ï†ãå¥üÉ-¿—#‰ñ‚!:ЖŽËÿê÷eåSCoá¹ôÎJûH/ñ…ŠÊûûâ ¯Tù¾±Ú}2|)/Xå>¾”ôuŸ_Ê ¤ßç×ò‚Rï1òRZ0×¾ÉKyÁ÷(y)/hr“—ò‚ræÄ‚‡Ò=ÞîKyž° Ê z¹O˜/åu ò ¥ýô¾¡À(/Xr¯h/å]×=,x(/qÏé—òšäJ ô_ÒqFyÁ˜¤ãŒò}9â%嵎3J d/ÒqFyÁì¤ãŒò‚^>ÞFyAÝ÷yò¥´ žqŸ(_Ê –Ž3Ê ú½j;äºLÒoFyAi¤ßŒÒÝ’î“åKyÁX÷Ùò¥¼ õ{™{)/øþ J +ºnúÍ)/˜ã>c¾”t¹·ã—ò‚z`pJ ö™ðsÊ t#À/m”ŒRðKå² +~i£¼ àâà”è ýæ”è0»ûÍ)/hý>}¾”ÔºÉ'<”Ì}Þ£¼@Ç1Þ£¼ 7è8§¼ žûúRZ0΂ŽsÊ ´ÛñK壒Ž3Ê d“Ž3Ê Ê g”ô‹ƒS^0pqpÊ Ú$g”ÔVî··SZ/ÖquN=Ny¾ ñbŒò)¤×ŒÒ9‹ôšQ^°`7üA®÷LôÊ t]Á;l”èâ‹wØ(-¨[&>ÖFyÁ8o²Q^Ðô ‚åú_üÒFiA9¸28ås“N3Ê :® NyàÊà”´Ï9¸28åënc\½æ”´Úr]»»œÒ]…`9wÊ ôuß§¼ -è5§¼ vè5§´` +½æ”Ì ½æ”ô½æ”ˆ@¯9¥óà²à”,\œò‚Ë‚S^Ð +ôšS^PpYpJ Æ&Wô@®Ï*øpåmË=Fœò‚ +g¤¤z?R±›ò‚y*~€Q^ÐgÁ¯l”HƒÕÜ)-ÐVs§¼`-ÒmFyÁhm£¼ •M>á¡ÿ3^eY´£ pEã<,êíÿ·1F,†ûºÿrªRD > t§ˆm« H£:¯m[}@KÎkÛVÏÀ' §­g03‚–h‚ë +!$òƒ–â1¤D3-­*¢B"þJògÎÍJl3HP:RÇ“”P!A?É‘xÍ(Q:B"„„‰Ò¿º!%^3JŒF/]"„„‰T¾J#%^3HtJ +Ò_(„è…)D¥ÞjˆÒ_ð‡_…†ÞJtnz›A`Põo + + + $èu9Ob›Q¢¤ÞBHH€  +çIl3JÐÏbR!!B‚ÆÙìH¼f˜))! ݯ@zæ¨_AcFfQˆ+aB¢¥Y‰×Œs¾ÏBB„usÙÇ|%P¤Gí +!$@JÄ6Ìe3Jô‘ªB cžéXHl3HDª>]!PB¤D?ó´”è8P/‰ÚÞ—!ÑLà´TÎ.% +ŽàKbÖÚBH”3;-¥bÛÝ1ƒDÊ¥*€PH?†|Z +Ñv»cF…žß§!~ü¤§÷ó[ $¶$rLS#PB¤ÄаUXV¨qDé/øÑ]Òçäò¿f˜¡W… + %¬¦3H”5qJ€PþBÚp1íú˜Q¡ÍT%$@J´\L»>f¨a„¦BB¤D žÂ²¢@é-JÁî’>v;™3 +ÐLSB(€¨³dçMo3H´T‹F „H‰½^·Í(Ñ…D …z½#ñšA‚ÆÇÑBH€”H5z§xÍ(Qh|”¡ ü¥BH^«ÛfT =V… $JŸ^«Ûf‰ªŸB „H úÏpâ´Í(A.*„)‘³ÎŽ%h² +!$@JÄൺm‰yòé„‚ð +ôËל·½Í¨@í¸(JH€”h¥9åi›Y">Ô,sS!!ù¡ÆAñŸN•'åï¥:m£E03‚—Ú|¾b™!æ~lÖ·'Å«™À8vùO;Ò…53—.¼®ñnP -œDÙ·‘òƒ¥sFÍyJÆþ”—¤ÙÖ=:áø1*éB‰¹z?™Ó÷K™ëjdËXJžÝ jE¾ôlT¨|iÄÙŠ©DÑ àB,íµ×X¯»"ae@šß‰F9Þšùs/ãMÐx·£XÀ=ùå3½¨»Íˆžâ÷0JåØhx«¡Ôߥ֯ñ—$àèÙµwfø³M‚þ³¯žÝãss@s€{¤}Ö×½…|é fXß¹)a7šÅ&Y¿¦(À7“jCß Æ í¹˜= r¥UGåé,—zZTMè$3>ëÚ¾*ÇæV>óA¤y–b»B”ö¤ðVÒÙhÀâJJ5¼¼…ŒÍŒ¸Kt1‘wÕètqƒÍb<ážÃÁ®ÙÄ1Ûš-\¡ÿ†ç°DØÎ{cÕi‰ktßùüñï'¼TòSSuH?QµÙ?>#ÆC„«ø ‰èË©Aí1®Ifñ ;š7‡iaÎxý5 ¨g¿ÇÃ=9D¶›h„&Dlo}’»²D؈b?¾HÓ€ÿ‚Þa^04à_gÎ{&Ýë¯i‘vÛ3(h"DÔþÞv£ª¡ˆœSTJkÔPD€ôŽú‹h±éS¼ ê‹{)ŸÁM“àM×^T‚pïÔ&†õW,˜­s¿7bJý4¼ʘ¼— +…bp¶*"3¦H TÈ\‹ßCä) V4@ó˜™/Á²Ø¡/YqØe]~Æ‘Bp؉…’+9 ÓØ¡……' +Íb'–¹ò8Þ ;°½·~Ý5‹ZV®M,Lc‡ò‡¡KÓØ©…º3µ0\V¡r&r’NÔTKdÇÐDv”‘»²Df ‘·<<ž$š%êZ"è6 %í-0lfÄ]JðxR>M”Í¢ÂÁ"F\²ˆªÇÓû[ä®hZÞÂhDúi Ñ Àl4úÉŸÐo؈uÍ×ÈÞíä¿ä§¦›Þgmùë3öŒ Ní1‚®›ú«AdzJÓ?mrw¦•©œR ÒYzÑ–‘o©Œ~š•"ߥ˜¡‰ÑvK[ ZçEh"G#?‘G‡È9GzFŽVã9±J_“úã9÷‘¸³84΋¬Ò4àRAø[ñ#§"L +È0¯5P{lÒ9…Ø•GtvÚùHþ¢®ùþ]‘1)v1½-* %zGcÏв€û™#á‘+‡›æý»‘¸ûœ«¼.ËáDGÄ_±°;GMyk ·ehŽOlö¶:ýõ…˜§|B”a¯Ë!D£ *ãu9,àN#£º.ÍápãuÜ=Ï—ç¾'>x††ýoà”¿¦qxe#¨ÔÇ3¹?W¡¯"^ß3ˆŸ«E”Z}#MÃÙå§_¥ý‡VýÆá™'Õ$Z*‚FªûõëÈOÞ%ÙO*„êô<Ô´ûÇ'â3´ÓÜjx2ž!ͼöÄf@Ì=º®¥ÔáÔŠâD-qõÚº^K¾MˆHòã] +¡œ{Ó4ö&Ê|úÍUMc3ƒüëñÕ.{r^òKb÷^Ýv½ÞšÄƇ#V³{&²w@K=Ày5‘½gZ¹ª‰ñ¥€Fh"‹ø‘K±˜wœ¥ ”Æ™AMy¾›q—Ä®êiãVƒrW–võ‘ý@xoB?ùï䙈:e¬~ÕÚUÜÿ…´Tî»+çm³i¬1”Vê “æ°‡^Ê àüMYdßäè08äñ‰1IÞ¹öõ[DÞiF{Ç›#ÓXZ̉/h +¡‰,BÖzKdsûÂæDåéxâ«¶Dæ†i +‡å±¡¥%(N†ÇË!(}–{<&D®Fyþ+¯-­em¸u†Í¶^®%§gY—RZòzÙºOK¶g1í*­»=룱=‹üuÏb +—ÝëY/‰³÷æö,&qâÓÜžÅDÎ4·g1‘sÏÍíYLd;Fh"ñ#— ‚Ÿ#ÅëYl¶HîŠë™Õ¸ˆáv oW‡ìBgøý¥ÃÖÜÎÏm ïÏÃÊ”ÿ៩ҿqúŒàýí‡î«6$à_s_‰³Bþ$- øŸ6ºà—4…|uhœTÈW‡È‰P…{vˆqçšÈAt¸g‡ˆ4üǼØ +"ç+ýé:XÀ+bOéé¤P<ˆ-ØÑ¡ò&õhö ÄÔGXC}ü’Oá.‰C„gæ^½=]€Ø“åÄÇõ OÑ'MöêÀ¬%èß–’3u +‡ÈA K°†©ïâVe+Á#ªÜÔ5;ˆOB®„ÙÓè£õ¤ªåzECŒ¡®Ú.ÙTÖI­ [w͈>âw^è[–¹ªZãÙzOKÐ-‘GW¡»ýÝ"ºË@žI £Ìâ¹7<µ q·3RvÜÛ¯Sd;3Õ5ŒØÇD€ôP¾Ç€Lš{{ÎE?j‡ÈŽ»RÃÙN-Ïa‰ðoëk9"V–ÈA´ûë§Iœ'äx7œ)éS]sjʨ«r³ÕR¯%¼ÍcJK0xÿËw•eۮⰩ¼ìzÔÿo9„F¶|ê/‹XŒ™‰x¦‘_Gx3 ?@é(¼- Ú×Y¨Ä¾× +—]MLH✽éyÌ’8þizæ³DÎ4=VZ"ç™›[$¦óMϺ–‡~ Yû÷ŒRnË-D9mNà,‹"_Ë!2|´é ï3¿“L™Ù–"ÈÍ’åU÷¡âk»Ì³kŠ˜Ë¢%Es½ËRì½cžúàüúçÁ=z5÷Ó ßÙPD]š‹úñÞQPœ^ç¯ûDö—oµö–Yvoó× (‡kœz[ÂEX"DÄðf@ ï"g!>F„!Â{´ôf@§%:4ŽgÌ4Dƒø ªò£´ÀžfªyŸ5uØVΉ, ÚJ~tv°4hÿ…My$àØ¼Ãóê(Üúíð°“^†“áÁø›êÐÚ[$)ŽÍž‰x ²ëu ¾5ó„È­>>ÿÝyCV“ܺÃ2ö/•Du×XN‰ƒÐ÷f¢ƒ8d øâIœ>fýUˆôË_@1"K$ŒMv}ËD€ˆ¢t>ßžvíð@äÚŠÝ®™Ì×øúÆò-ã–í屿ì*ÛÖR¸ì·[>º<ÎíÖ yç”é>?€®­ÄÃo¬#y±ž_#˜ˆÄ‘WðwúvÌ ›‰ÝfÐî­² ²Q3Ý6]ÊmÓÒ§w›>ËŒÈÕEœe8 íE¤>ê¿0¾ì \dVÏ?¿þùD\dÛÕ ÚÀ3¿Õâ[o>õ à[•áó Zi̱ç}ËÁ%¿ ;[æ/@0 _@LDþÑ/Æ<\5‚xœ"Ü̈›SÁOzå›·Á-Àb•†ààÃãT±Àø°8%òq ðbq +ðØ47þr ðã`qµ[€Ÿ¿ +°<æáÐG<üÆ:Œ˜‡Ë©F0‘S²ý8"DK¿Z •ì»L%»Å_Y"Û‚CĽDj¸ÚØed­­L:UGÛ,oö<†Ì£ø;±¹eDxöDt_Ú!:ˆç7ê¾Ù&‡=îyÖ!D[5‰C„ˆRWcŒCãÚ×{oK㞨ÇäÙ×?nýг4aˆØ³åÍàA·>Døz¹l5yö"- Â•‰QZã=˜+˜õ=˜]Ü­¯˜ˆGá:$N±µV·ãœ’!ËMŠŒ;‰ÉTR²)z—=D0õGïÁ9—öd€BRjL÷4GH¾bĭ…àí<åãi:ãÄߨŠë]æâzYp‡ÈÉ!µ§º#6ÒŒ ±Ü®Û +BêkV&:q^ܺ˜ˆ'W +çl怵Öãy_I>J;jÀrÀq¹[š?véc4ÿ:Ó<À–ôšÂᮢ0|òвIÇTt%ñ`;Í,ƒèz&±D$¢ñ±Ž¾µÞ?ÚZ¿–áà!‹9xȀײ¹z-Ãὺã?×¹UuÇ ~®ë¶êžï7 »ã#DÆJ¬Äy;æi °³Œb5—J¬鳸5 RâFŸŠ‰0>UÚÊQy7mdTÞ{Bé¥m®ë,P`_C{÷µö–9µµñ}iæ@é}Sù3ñpšÉ/˜J˜ϧZÅ©‡‰!3NŸ¨t–Ƶ¯xmMãžèŠ<‡Æ¹uáâ9Žm Ž"|»–&Yæa|Hz•ña‰¨pÛ-,w{ À0fkO1ƒ¨K´9$N9Ö%Þ.>²zÅÔ[a¤H6XÆš´~]öâ§ý9{.¢™*fˆ Š­â£÷¸Ëô§øÈ¯¢µ§N Ó;XǾéšgi"DYßH zµ]„ˆoYN°Ìé£dê Š³ì †ÛÍqÉþ@ ëÙÓ/õ©î2!N{Ò{Üe:UþIIY§Š¥š×“E‰emë9îÍPKö9ˆi8ž,¢‹°öLLˆ¿1j`Õ`"@d#qþ‚²ÁDˆxÖŒÓ ,º  K·CÂKXçŒ)²7Ø—k²uà+|,`ßjI_˜5¼€¥Á·îA%Ø?Ÿâ)Ô:#,Fxk{7ž,L¹ADü0*ë­O˜Ϫ¬bŸ­ uˆ`ÎÍul‘WóžY£Äxòíå´yþÙiJ`ÜÊœKߢӶ²`ÞkY3Å U‡C¥}cÅyi‡ÈElÉäиg +™ÍQ/ÁIëoÄ̇ Ùñd…p +ç¡Dt%öåfÀ~D ̈ð|ªÞla‰âùZÖiÕ%, z kÌ<.b°oŸ¨ÿ[0®4LZ×bÇr¸'èdç®*ü™Èñ'¤Ó8/ÙkIœˆPõÄ’œŠ5~E„Ê•ÙÐ÷^«¤tNÖ€–ó'Ž%8–—hç¬X 4 &’„Íœ#ÃYfDxž Áuˆ#,²¢´9Ö¤AËŒx’‹8ËûT÷W B®ÿ×÷×ÿGwâö63YncŽ.ï-žŽöñSúLLˆ';ÙÇDÑEM¥M¶ýÊ4`_Ö£ª—³4`Ÿ>Y¦cƒi¾INÇ!â™KÂùÏgqÍûWP,Îy¤ì±éÇàÜWODr q¼)½3D{ÓM¯õŽo1Ž7?ˆ‡Ç¤R1Ê4£ðvæ@“îÑôˆ̇8"ZÿXÇ^Õ/¦Á¬ù惿¶~Iÿ¬Sr¿Ù>c’¢8Ü\bÃ$™†[ÚŸ¨•ŠpÃ8ˆºÊåuýYÞˆ "ç“j*y…^䌛¼±îMY–Ιܒ?ÒèÓ°[0ÏA(É +a‰QEtUQ°_*J~ÕP·½&ëÔÇw·q´:q ùª÷õÏË,4Mk‰C‚o/ʑЖ¬ËSÒW7Z…÷2$¨"i¾0Öç°€}[±ß~©Ákiä_yý*ñtí- rJ+Q¯.rˆœ˜ÃäaÌ•/U ÂBÆÁu`8"Jv{s&‚„¶¢÷Ÿ^¶{¤&CH™N÷œZ—ÞžVtTU»àî‘úŸzè+‡è :øŸOté7¢³Ç›™ÁÕÛ€P÷`¢ƒˆ¿”Ú×1žñUá$/NØŽ[[åÇîŠ>Š¿ƒ+çÓ³§;}&:Ï-ä–nïùäª4*ÉÕ¯‘×ÚÑ>õRLãtX Ú•£œx ÿz4Ä8<€¨ñ«CêPLˆÔö´²»¹Cö{JÃvN4`/¥ke}LåÚ[šƒ-{Xíüª5‡÷_7“¾Öέ™È¹…ôµ‡!B?ejZLöeìIå4EKÖ#lu ¥Æ’@(EÑ£™í- riÙ +æÁth{„È⋾†ç¨¹Ò¨Oþ¯‰€¿§¥Îò›­²|3(Ô9k#¯B›ƒg‚åxdvý¥ÄwœC#ÒÔáÉ"î2j¸'îR)b­áÅ!9ˆðKÏ,YšŸ‰ÄVŸ hÄñKÊqƶ:x÷ÊØ>ãÿc}}¯xëTgö°¬¬¥êç9Ïd)·cç|È"œ3ÿñjYµì6¢óþŠ3L>ÑûÆ·=HÀØ„&scBÀé=Éÿ²ô(©¤ªkÂÜS{ÕR½UúíÛ“´•æ/€Eº@|Jk Sˆ˜F€§C#xfÑMÄ5¦±XÇ×Þ©)g„%Ü> Ã;WgQ…µ© +%NG$ Ó ’HÑX!I.¹8ËnzlÚL¤¼9fÿþpXcé”ü[cY#I˜5D¤ .ǘ7V›"$>Ðm€õÝøx×™€§V<ž{Lƒ“B¸d·˜–ÀÓn…€M¨Ùø©¬˜c~ÄØçÓ²YCò9ªëóf‰¥F6{:Ý$+æ™Þ‘íà¸rŠ5¼ôke‰|Îü)îDz;e-k·°í CmÿÖ%±ÇL⻣0voS$ SHØA„†àa +ÁØ:Öã’‡iÌjÀ§lÙ4¼‰˜†/1›M*IÄϯ=hÐn¢Ð0|ÄHê_bæ,rPáÃ1ž/> •KIåšR‹…OZ´^ VáȦùIÃðq¬uÀ‡²ÆìÅ!9>íôf‘·jÔÄtMñÅ!ªn—ôÍÀëÍžÍxjóŒV?ÛgÙpjóoÈsæÞMÁ¦p@a$nöK;ŽœÏŒ³=–øFOÞ½¸ålZkÞžMK$ÑkWÕ1HŽW® a¥EÔj‰À7ƒ»Ô»öxîÝ, î}„í‰{S¨pjä‹B±÷îæ>/#¿Çn%Šüq¤Ð(yÂKK’hø=9SÈ_x‚†áçâ~òß$l£/ÎN"æÁMÃ_˜ùޤa! çX$ ÃûRÏÜÞv3suÅŠ£ OÅË]í’A âÑL‹’#Ö«’C©jãG£aÛ’7Uâ·XTÁZDÎ*“DŠÆq†$Z3­â¾©ápÚ´5Õ, ¾ÛÇôfaðs».vÆ +Ocîåp³pø¸™w¡)*|ÖðM¡X²Ûã&P¼äÝ'8” òîVhd–öøPXØUL ä…s³0xðþš~ +Ã[¬ ·ù7 »¼kгÂYx S ¦cÁ—, ŸÃhˆØ›Coîƒ@1ä¨Ç‹BqtW»¤aÕ*°)õñm=ƒc×^¾¤Š£aÁ%Éö´dþ"ÙìÙ’W ®<¹õ¨$"6*üMy×:ºÕP)©K +øÙífê^©ð%‘tè·ÖóÆAtï`GF8»àØÕnP¿å„+$¿¼zT/bSp›:V0Üä—ö6îlKaSðKªÓ¯I#Iv4k$Ç6½ ÙÑ ~ ƒ+$¿üzT/¢³§žbôÁïs8aìÏ4jpŠPîP¡ WÑÁ³¾· Cx£%…@/CDE‡ßaYÕŠ»ãü¬`\Üa?WvçèØ!»q\c% ×Ô`Ä +ÁÝv}HèðäQÔe$4ì‰5.Á‘ÞÕ#´cíîÜ:vÈdÔ)wÌýJ×ÍI{¨ßŸCou‰^<оŒ‚†=¢p˜V#Õ]à9&æÜ¸íI~;WÙëG²< +ƒ´Ã¿ãÑéD#Mñ#tïeÀKWžÞÆS h·ƒ#ŽwòØIþ¨ ÷šÉÑ7ƒfG¤Þ\oGµ>öc’ßvÄ|nö'Ë£0H;ðN«ÛŽÍ]/W¤Ë•:<àœÇ +Îh§ïGË¥{ßD¨è*eSŽKã ܨnøs+JÜá3Ý“}ª¥pܽwþ×­c‡L›ã>Wþ ¥MƒÑÞê÷]Ï¡·ºÄ/E_FAÃò($Bîwÿ¾ã™ôzåî/GÁpñõÊ É¿}Џkù Lz°¿'pñu‚ÇëÑçÝq“^'ì/Œê9ÄW=[WA Žxa nN±Ù éaüÀͪ ÿo#T–©’ÓÛ÷ßÑ¢®’Éyño ™íÞùå­yÇV~ æß&m Á,„FÙ>¤’í0yKñüžý\[>‚“”èá_ðO;>µKT˜²±à Ù–Ž• Û–ø‡x’n~‰©:²½-YdûeÁÑ Dɱ­±ŸÂE–¯DV´J º^N6®DǺY"I¿e¦gN0ΛNœíVp ê‘ÌômS°Ûu‡ ä‰­z`­j2î\ <ÙÜ6Ÿ:6^c>ªÓ»É¬Ô¬¨ Sß•œTêJäx4Û¨8™y‘À] z™1-æ–ðJ&DÜÁŸ Å]fCžÛ£¤CDß”wÛuìÄß9Ñf‰þ! ¯‡I%÷£[-v“üœ2F z]Oì’J|~›5%Ë6å2JÂ_/™%åH<öôS0Çly.%‘;äÚ&¢“%¼JBðspÜem{ÅàxÔZ'ø18µÌ·Ñ×àxÔ*çk {‰HTO]À[:°?þôùõé/¿üúÛ~ý÷¿^ß~û—Ÿ>ÿ퇗÷¯ï¾ûþ|ŠØw‚11€{£=èbB˜ðdR&Ãi:öÅ´—ì·O1–¾íŽÜ2Æ(ÏþíC›+™mÜä¢8€É–!L›™ðfe˜ö‹±Èó–™ÃÖŸ?¿`¤uû¾ÿòÉ¿¾ü÷…©å3Žü!3®¢ RIþ…-êí𬭯/ϧ?ýðç/¿úñË'ûúýe_µU ·¶J2äsˆŸâ¯MŒ™Q=^z—ÇÂÖÄhÓdúb +1jÙH]ŒÍ¬ïó]\¬Çž°ô9ˆÛ ²›~¸±iÜ6Ø£‹š¨M:’¡mnhøzreЦ˒ö¶‚Ø_vÃù”L¸œ\!ùªGê+rƒh᯦V¤ýT n•þÏþf}¶ØŸ^ÖÛèJz›àCêbxWò²èA7­÷©F{‹s{VØ!WÔcÚ_wB»RHŒ(âG@d +ĉœÅl â€ÎÛ‚\!lOÅÅ/k³…Õì@b†·\ £Qö£©,f˜šÞžMêŒ÷™\t°Ã³@΀ ü&Iqqñ iQ ¥"–Mœ¢KqˆûfSb·ÏÅAòa>c-ðÐ8ž= +¥åó{Êg³±…†Ã=–ñ<Ë£‹`F‰Røáštš‰G8š¸f—ë²>x´j ‘“hˆ+Ä«·p9g 1|)Z5Qõ.–Îy„±~(^~QxÑ›^ЧûI†ôF,57ìåäMÇ8ˆc³ÏåzÌËì’VëDÖËì-þ¸CJíñù¶(™‘¸¿òF4¨ú—{kútbPUKøu¼Uᇠ˜a‹ê™ŠÊ+c15u—V ¸tÚ‡¤…Ðë÷ªÃþcS}SèZ=ìs¥u( ²Ú.lwЇ‘ LÖ†È;ÏÔÅ%ÙƒˆEÀ^Èidh‹ÛŒ¡ï·Z‹$®,ƒ©è_ß4—K·Ó.;ñµÚ€I:¿¶CsyƒmdÜçåÈ-ÃáÓƒ4ž&F”eº l×~'É(-ïÃLõ/¿üãçþï*Y¶ë¶{}…–Éæ €Ó2޵OÙúWE•(~Ï‹¸üÿip8Á—6R_ +c£ñåG›ÑŒþjϳ82´ahhÄÙV–’@‹Ü0èÛ^á’;§†œ;œ¢ ¦QD…YP8&ôã‚SÃæŒÍÆ2—’ +eΜ:5÷¸¼%ìˆâMc‘ YâÉê_LÞí¬þ‰qeäýu¢fa™ §é`Sã³'ñ:6?ïkáéŒÉø~|vÃGÆ·‘ Ï~ŠÒŽfóhL7 ëh¡F·ËñücÀ”HdÀˆidWQãÒáÌ2… `œ8eDÔÀ +¼`)%Ò¡BòÀXÇĆ«³Y ./«tÆHWü'1Øå…ƒMœ2È„./ƒ;x›rÀ­’&%9ÛªpPxOú¯wZCTŸº 7|¤ä±qäoðÈövï¨Íæ¨ä]÷ÙqîWõ0uåcÀ5•\î÷X$ÌäûçAÄnÛNØkÙ‘ +`ÔÄ‘ŠñDÕù×àô°4Ò5¥R$=Y¹£|?ÜÞ¨™[Ž]”¶ñd•Ÿ)•†JËž;qó…&3LØNŒ›µ‡iȼ¶ ¤¶u†çqõ¦ñxßø½á'½åÚî87|Äo¥ò§€˜ê'TÑ'$fä;Îýúˆ¶!€®8·'GœÛo'Ôúø!-‡J­_§ÅÀã=Vl©íèþù¾A‰O˜<ŸYüS…‘êŸ) üz) øÿBaÀKaÌ* côR•ãå"ëÕ™¼Æøño_¿<~ +éÿLâ¶£`.õ޽¶£°Ê–œ\NÍ{»¿ lSmŒœ{qJ腑Úéïõ")Bî½OÚã¬ÜÓ÷í F7—ÒÕAøn^Ѳ’vO”°.’â-AP‡W"ÎÀ‡™øRÄ~%â˜^Š8À¯DàW"ð g[gL[g±"θmDœ‰ÑöË‹DÍU âÑàôF½Ù#QÕ™Õ9‰ÈÉsüôË¿¿}ûíóüþý·o¿ÿþù¿ü÷×­ý±DZâˆÿ£÷ÏËH7Q‘f,=›µ`jÎ1–´V%¨«I3xloÖýCyN#—:Ò‹Ô*Ø.—Òíã$ƒ¡WR¹ °€êZ$-3åá vä@µÄ™’ñqÂÊs|=†½PËÎëùáà2þóXSÌuúÁ3‡0êÆW…˜Ÿ¥_2`u¶;œ!¡fÎkžZ)k…iýØò‚üO.©ÆÇ(÷hBR‰êcŸ%^ûl›nÊÕûŒ€~Ù{½{ÅFyâ^é€þL¡=ðJ>¨ìvgõ¨‚MöQAt%²¿áÝoF7çmt1Îe¹˜Þ0üÔAü¼Ü=² Â^ |¥á\ïÒ<^ Ës+º\ÞðÜ…£Ìâpã´–$^å™ÙZ×Z†L¾:Aë@WÑ)_¨‰¬¢E¡ c†‡#`ÚøØHL±£ÔYm¢B ÇÁ¦{]}ˆH²…B ­øÌ ¥ Óégˆ–ÔFiÕ³@€‚Czü0ýGë±@yß, >[ãæ“ÆàÙò;×IŠæ’ +¸µL¾/hZ\²ƒe[qÉ̸ ›K¶Âàä²­¶»htÙ†Û¸ºl£ù+ºÁgû‰ñHvÁêY\´Ò§bOzÆUMÉé#@WÅžë}VdÔ±4ôÖÈu‡Z ü>`Ü!ÑÏŒ@ÎÖèÈpá\É{ˆ3Tx6Úö‚¦””}致–·Â‘fG5‘ýÅï•xã6íÄ hY|Õá_‰Ô‹j4Y¨úŽBìxž|GížäšHgÖ'Wžd™R>Ì\I«ËÆí™¥¸\±NÎÊ÷N,ƒ9ƒøÄ2$‡|[n±VÏ‹>EˆñÛ’üŽ] +)¢¥;ƒî% QØÚÉó' +]+ Þ6ö®P¸@£¿x½acÚûq9hU•ψ*Œ8جú¶£%ÑYKºn‘¦DrÃP)µ¹&Ì]rž ªpkÓ“MK + +ÅÑ’ÚÎÐµŽ–ÔïìwÀ~¬¤dB´£ ¸Æ¶Æ{µ›^“x=%ª]gªÃ1çt‘’¨`¡æZm£g§IÆÍÊM\! le`€WJ!¾rr3/zF°ø-¸I^=²_ë-B!{Û&šåG÷Dheû‘Ý€k‚Àsó +-'žLoŒàCŠõzýH5?0$=Ó9"@3ÇÔܘ ˆ£êEöá#'ˆ=ruööÏjOQ­g¯ +•MÒ+bVgó·ym›Õfd0éûë´:·7¬e`Ls­!:BŒ“±&WV9$î†è½*U|m ÷J¹C{…æë ‡C';>6ðIGÆm;$G4vJ¢*F¶½¿¯z 5r‹^ág¿îEÏ*.x&e/zØÆ7kvñÆâ/E ‰ÀöŽMNÿžE˜áTv‹ÞÀ¶QŒ»èõ“¡ºÁd]‰Ù1้m##tô 9†6é;×<£eK›µ7éVEµøtCD¬¢™l§·*ÑŸ @³ÔÆ>Ù3)92H_ñ¹>œÛ¹Œ†#Ÿë ¹ÞFŽ\CÇÅ’ýÝ¢îU^êiçÁà_^½kä¹ÍÃÅd{gÏe›Þjú}-®žmˆ*äå4à˜«ø¾d$¹»NIü-RÃŪµÂf&±vC¼ý>†xÛyûûø¦wåÔßÓ>ÞÇ·„‰š#…ÏÍäF I¸âŒÊ±Å“‡7\y³3M·øUÉ+~ÀÐ:ó‹›­fšÇ¤5±mW±±rBÐzGŽÚo·NÙ1}µ3b׎ɟk ûƒ)„Í·eSBx$t¿Æ*íºÒÙ. ëñIܶ“Ü ¼Ëãü^?|øplœ SÕ ÞÄ·–ô$í—'–nç7€±MŽ4`=ÍÞ½¯œ"Ô¿}`c÷öárnyýqÂg𩨊Í4ÜÇ€c•0椶0‡ +pή™Ss‰Km‡q”IssX°ªÅMà!0tcçøXÖÎËn^ÍÛg´YPJiï„e ã²í4 í4M##™ùIÇJÞþ¤Ëê¨ðÇ ºèÔ%a×€^mÒ_Ós?„Žîa#—É÷‰…MWO’ +¨F/ž>ðaØyá½;ÚïA]ä8Jhä#ßð9zÒôÔíwƒ5o`4Ïj( ¸$9Ьmò=ô@8ÖÜ„Q´»ãqb'ggÛ8þ8ÒýÆáÕ‚$·º»:S¸²øý˜Uâv˜Z¬/^ÃØlpÀ±0{â\Gñ(=@béw×KÐ&DíJŠ>OÆ9K€±oÚ€s.;¨¾4ò$ör¿ŽRþÇvÕìVzÛÐý<…—-’(QÒr’…Ñé˜Ùw ì¾ÿ²‡ú%y s®>ФÈÃÃØ#ì7I>¥Îë '€·øïªØN»tàmæyÃb;­ÀÙBÍe ®RÚl~Aá òi–Éó,ÔÊ" À­PœNƒÁÊk¦<8–jiN@´Û$U9˺Hèl±8v¿¾Ñ$=éxYâÛRB=¬˜kÔáÚÓPèÎØ€³ï9|Ú§â´²&£a˜st `•j¬±…ìAÔ]ï>ÿQ +Œ³o +Q ié ÕB…ÂCÃnëUNÙÝ£z )Ãz|)7ô¨SN#_©Q÷šT?æhm=êuîpcž£pÆMlK²öÈ.Ù +¾yU¶ ˆiü‘ A^ä’­ü@±3?ž½“p’eÑuó'¾[/<"ÄT‡[ËLcô×Ç„ÑG{+ð:¶àXýüQçõC(Xå䚸Sz¬Rhi|h—©” d»Œ“”ñר¤~üç¿þù¿Ÿž¾½þëåÇë¯ÿüééõÇË·¯ß;[Ued§Élš_}X æó^2«èš1˜, ]Sb SÙ/”ÇuÀ%Èš²`*¹M#•âZ'g.¡ôVÏéŒöÛ`¤kbŸE&ˆÓƒeY#vŸ(?2þêT¼×Ø@x÷‰Šq¤ãý“Í÷­yË9•¸‹™ Y=d>(£»G‡]”§:£ãÞê¬›Š®h¢ºŽËê¹7P )R÷n`žÄ(L©ã`8u ûð‡…¯ÏX[r¬î{ K®¼ž(í¾à*Œ/CãÀç<ÞŽMÁ©Ãç2…é Ôç6o\·A I†Íf,–Ç«Õ]DÁ¤dœ¸˜¹ðÚ50cy¢Þ\ÕËu)E_õÊ B½Í‚9ðÙîÚøÆœß’WÐòø"¬.Ï˳¨êY~HûuاZ¤æSÖ¬žŒ‡ &è~vµ8–H«vòvEH…Vü•·°+ ¹@¡ÍêÉ[ØnµÔ}®¥¸CÎ2iqK;e[¦hbmm& +)ª×íš²}5½KÞæVñ{rtÚb\õ9 U4]À>”Œã<-[Áy˜$»’­÷™1ÅÐVÇAíÑeÓÝf]m`q#è3G5€¡ì/Ÿ½²dí°ÂL]\»^ ¡-— ê9yªQ^\ªQg5ÕˆepsrTóI|ïÖkK5wñ3#0ÅóÃ] cQ>£0õ¹}¬¢Ùؽ˜±Qd¼­‘ÃY .3@Áúe±ÕlK1ERêÃɹþ˜úºèçFÝÙm×ÅŒçÆÆõpþÂ7 + MGè$ôšCq »VëM Š uµ%ÙDZ^ÌÊu¬šZ^¤R}ÃØ\*;­Â&÷ÇÓ(í¥|ŒížyÕ"µÅÃÕ^Ï;)̂Ҧ¸|žü9΃zãœXšV3¥EÂ)æ^6ŒÑ¹"a^ +Ž—¸@Q±ù°¡÷r\ãþÒ»uï´&àZÙL<¶\÷Ús Uð¾Ž{%ÇÂâ•´è2§râ#l¤F¯+¨8?TâP#-iœÀ&½Sõ‰%AGŸhÀX“Ot i=‹Êt]±—j\‰Ù˜²K5à„Umª­ƒ'Õcû*.Ù¾éVFtºåJª{)9錙Nɧá€^»IwÂ^“[¥û¦Ï¥[¸4ÏÑ€sYiU¡×ç2ÓgòTe ]"GeUØ?¯<©Ó B±Ï €1_š—± +V«œ>«0Ë„ º9sšŸä™ÇñáÃ!»É¸V¬Þéò\ð,͇Xž©Qõ 8IŽ]QŽàrÜ8”´¦ä][Õi%Á”i-Á”#úÕ•Û§@T„º–T> ç(lŸoò\Ýèö\Ì’§Ä[ +k…ð1áÆÉ=®¨ÙÍ"¨0=•]có ä„ÑP¸ym´W)/®0RgMyÀrnÜœ0ú$¾wëµF¿¼}‰’ððOŠ)vaI8ZeÚ)™·/‹ûë˲؊ÏBýü¾ò‚"­jø$qåΘèœWÆÁÊPýø‰‚yM7‘aŠ}9³DósC:†£_¿ýöû?ž~{ùãõ×—?½~{ùñýëÛëïÀO µ?s‹ÍÌÏÂ)“Ù/:¬‰?-<×VdÕ]„T›”+ö­ŸÁ7 ¡ù1‰ƒÌ뮳BcJóó€'à{ùûD¹ã¤½ ­G9ë7b¾•ÿÉ%+Ç/t‹„W³2 ºœã€ÂnC "B +;‹ *Ú©TÑQMa  (â,}×襲Ï$Fe¨UY+sŸs©§Vx£­tYÈÄõЈâ©Aâ¶Y ’G3–¯UlŒ””ëHXŽ{ÿo‘…Ñø(Ø]eYDu6µ€ +ÙB‹Vsß™}•ìøÏ²~ÅÕ%X¢Î+Dˆ…–´ÞÌ 8šÎˆêÒÓïàúè1éŽ.«¶ ͇§¹Ór¾’©.Hë\c0€Ìã=Š­d¦¦Ø}%¯•5ÑÞ£ç® éʺß:ðØÉt/d Q[P(Â@¶`¢„f^îÄ%,ªœÚ”—=®'+z…jYJ”¤C\WíËîцFóVQ°˜¸ì<¸ûj™ë­âàØM¡MÊÊT|N½åÓÇD¡æSwžTwPì\s‚Ý. +"Ùv‚܆QwAˆOm¤JiÍsÊfO׹ݩûÃsæ:#è”ÿ Š],YrÐèÚ‚z­s›yØí˜© m?kKÕKv/€RJŸ ØbÖÄ?$  +­ÏÛ i×›%ŒfHWÍý€Ð²K­œ](M¶¼bmnEŠy;çð¡Í$Å—R²‹Foµ»PÝËôòuüÒ{Ú Aït7V®ÔEõø]1‰‰Þ,ÆmÅ|q@v´ݺ +”s*NJhTeáÿtW½®.I Ì÷)NÁúºCl\‘#Ø݃àýE¹»Ý.ÏÌBÀ¥Ž?Û.Ûeò` ;s¹Õ¸\ÎnãÒîzcBÄ|×x†ž^J’ñj¾ÃSñ5wd%,ıY€q5ž›øyÉØ’·ˆTȤ5æ¯AâfJøËAî׸Gr£%ÅŸäI:6\—‹>t¡ß¢œ0ò¸/añ—›LSˆ¿Ø)ú?|û!¢3/Ñ„ÿóÇM¦5¶4…ÿ||ûúá7ñ·ßþõÃOßÖã0¸Dí˜ÅNYÎs³¾_ƒólÄQ¿0<¤ó ÷…§ÇÓŠ¶_cG‹ºÄ8¦°–ˆ{ÛÆpˆ?†‚9”Oà8±  +¥¦_ûò9ÆjœC$ɦJYO¯âä$ÂÁë +ãð‰d·ãï'ÛÇwçú’3`aØeš[ƒT.±u8¢eRØ­ÅØ†xó¥Ò¡JQãÔ$ØmU³ x”©ç{ýìçpÓZÌ}¦'ˆDŒËÚŽ8ŽåÄYƒPq9©˜jgççnÕH6\j XöèÓµÄ$n:dôRßh• 'y§Er¯ÖŽÚ~ú6xª=¸©++Uþ€_άࣨטŠæ&ž‚¹çcõ$Í +Y§Ï\\1y îa14eko3+E˜žÔšf”}ÕI£ëqó¤äC²¸i|’Íeª8Ã"Ž”ÛågAù*›Ïù3dJÌ3“å³Åõno9ï6/¸½·°Jê^ U¹éÂÕ kîoómý-‡TÑäï$g¨ÒéÔ58.‘M¶[ƒãJNnpÀµhZƒÃ{j«ܲˆ#\ÚÉÆp9߯sà%uבðXLr ^ Ó«ßÖÐ3nnp9ùÖÄs þR/½dƒŽcnph{PeºáÜ»>ßZ§„VŒŸƒ*'Í +Ycï‰Å ŽCË&­58àÚ—5“ž`npr”²OZ7+k̺ÆÅ[6)¥æ¥ôrþ¤9JÉ'8ºçp7‘ö‘ŸL¹Çk¡ÜsÛi,îq Ö59žVƒr£q†Ãæ47ùk*' m³|”„Á'CP…#{ Qí0Cð){ìM[Æ™WËrŠº˜‘ÑP´!¯®Ý‡ò/‚ËPqÅabLYÁMAÖœ=ò ]{ÒD‘hK|wq;’Û ]K@ýÆðÜy)Ÿµì|šMI¡ÝNq—#Ü+ÍÚ夊¢ Z$.ß'n__Ç­‘ËYSò Ý ±½®ð²í¬$¦Y»ë(Óü:ýäÌ|XIŽƒ!¸ÿZгÁ‘)mpN…ÀÖã'q¢Œûx¤yÂgž¢°5•}SÁ9¦Ç ÛqÉÞç˜â™ Î:™à\'ÆÆ<ÀíR©a̬ÃÌ#kfùfæQ$Ì<‹Û1ïVÅ}±`xJTó`Éûȉ±‰†´§¾N¬ß#+6œh©¥¤ÿ *!…Ú›Ü4^Y‚q–ŠÛæì´2cƒUmùÀâNe¹A±ÐO—s3í#¾„tßDß]¸/oÑaܦ!e KÃ\tæ´ú£")ö Ä>QQ>®ëŒH +ÿòÓß~þëÏþ“åQÄYÅÁA;./Tp“ýAÆ7جçÛžK7çræ4piÂ8É&}£œPõZ‘4Ô¦(Úzî £´¬0vEÀ8öðÌ—RŸp‡u½ÃXz¸.ëÝÉõÙkÉ×ý“(ÉõŒ¯K|q z ÆÃ¥ñÑÓ]åªjåaÁ£Z¾£Tó@4Qª· …3Wj÷'Ì !'œ¾óAN5Ç…¡§p_j¾ÈPñ!ôÊi²}ôf>Úp üòð¯ºwöǽ§¦\ylZa&µÕЀ/ˆ½Åð¹øfå±Hñ§;ï— êÿ ÷RÚÍE‹}oé®*@s*ÿ`Ûr½&Üêá_Æ 0ìg…1]7I×T[ž0ꤞq^½¦;å1Þ+Î c¾¶¤0–ÕX¼ xʱÙVNK=_Lx`lËøªÊmÉR#n”§,Ý` ¶œV'ÄŸe©¯²Ë1³u-¶þÐ'c}pm‚ßñÁØ7dcÜø@ðÃ^ý;þ˜O g36Ýý£sjÖÙv8QP±Uýtƒ½Ú0=g=â4L7è¹6b!xÛ#É#_ù–²wŸ5˜sON|4¸*ºì¨E±K²/Þó”2W~$ ;¦+Þ{š`þ,yw0´@H!ßè”E9„è™àba¦’5:T- +c2ìôZs¼¼ó»Ûà¹`#tΨ[¤À“ìWQdSƒ#kË‚ýýë(áãç¯ÿüòÏ¿ÿû¿||ûå¿ÿÓm›æ59¢¬»R´,ôÚ>S¼t/¤Y_çj¶t¯Aç»ËöÂ)EY‚ÊK~-tË<˜‡s²^2³§:%/ž4½¡˜­—>Õd(à})â‹=øÒSpŽäd¤),Kß"eÃuêa ÉÂ+Ÿ =èôc‘Nð¾zKa´®½p¸è1–U“²€÷ñGÉž@·Nßκ}bxN'æ[ÒÝИq•ÿªzÒ@YŽuŸøû‚¯´ +ß$);rÀûÎÃG{ÑŠ- +[ˆ€5³""Ùåqϧ%õÇwÛ%F|­<ÑŽ‘qPsñØ Þ5ãº#º}nVÑDç‰hê|çë|y>46NQúÐÑÅN¨¯8#´ Róæ_>‡¬ˆäÍ…cw [ÇYÐË–K()X½áJXéÄ%”4®ƒÉ•P&~y²¬ˆÜRØJ(?½î,sr K=çÌE$'\DÙTëÀrUćöéæª(™È÷Nئ‹U‘2諈…´9R¤Ýä3ãá0˜³‚é½IÉ)”}WàœpÌt­—ðžŠ\K i·#z*m, ‚\¨g¬>÷ö´OTØ-ãódé|?¦ôåMdÒ&f‘Ç"fïû‚u»ìAÓU%&¥Ë¿ÇGª3Í'rišËÈouâ>ø—{ßn ¤+½KVsÀXñ{úaëî&üŸ¾†G8W¿R'\΃˜%€÷ë™$ ’=麱gÖ1Ì,!ë.ñi ǵՒãp•·¨Mì®û(#`W$XóçÛÌþàê@ö¾Q.ÞúÚØ_ ÍûüUQi0·GÐí>! ¤J~£ú k)À5O×®åF-šp«Yso“oe• ÄñÁ¢vì±7:®!#)+™–>û O«®¢ƒÜú&Œ×MÙù¶‰¿m¢_7à·MÃë&B$o›ˆäMømÌ›ˆœð&ü¶‰àÛ&ÂsÞ6à·MDô-ÒÉŠJɯ—ñòütô¨KV~•’¡œ9í¬ËQÀ\¶P²á"N]{ÁHOÖÜ"ä›§àÜŸY±¸]‡üìlÉIX=Âs€2øk©­I¶×Õ4µOÊ9Ð5»þÊ­¯oáÈéÂÿÚþ:$´Ç»Tˆ£ŸÁáŒ;Mò<ä¢ËÝo‚}ÓÆ‘éì ¸‹fÑ{/Ÿå¬/Š¥‰í"¯çìpÖíTßù~fÐÿ9ï~¯Pï;çÞÿ§¼¹ïã®Á ºÛªëcjnMÖGœxûê=v€âÞÎYÆ.h&¾Àí­©Pd®(œvBåZ<0û©<6er ‚Õ|»l¾©'9Zr7÷$½{2âZÝ'¯·ng8ßíÌE‚GT•q76eQÚÐ+ÍÚåÄ|» Z$.ß'n__ÇU\9‹—“_Þ¶€êYZ´X¢\X<×®ÊS³$Žëxãø‡\W\á¬!²Æ²ÍwíC®?6ŸÀÚ¾ò“ž`'EÊ¥°}ú;è†6‹¥oÑ ©Ã£-›f 8­ÓvЬ)/ +¶ºb/«ŽMIlM¯CG©½p?rá:¬¥h™žxÛ ¤-UaÏSú5•“ñìQ·÷§¸ØX¥j»k~_€Áøk:qÜ|íœÒ2޵­ÉÍ X§¿ph[TÚH‡ëŸKñ—åØn#ëdYËÏÛHR¢]ä|'žÐ· ¬‰¥ûÏ ²&6øü\>Úm=L¨Q™Ñ› »Î|çÁ¸%§!ÀcÎñS´Ó‘y6âÈšÄûæ +Q$V™&³V1L©åYe"ɉÈ와GEZ‚VÀ†ÉTº’KÚ èÞ3~†º,ð8mðègÅ «yö³ÒYäÏ| »Ç@<àQXclAûQˆ<ã½à!Ï3ê+M^f†W~PËâ$G!âÈJeÔ!:¿}…šEâ"á oÿX)þçËÛ¿|ýþóë¿íšÔW:$cÏä†1Ý‹©.´$aK;xK¿õVÎTñÑi7相 ËLNM‚pœ9Åi+´€æ6¸Ö”W{$­™£ÑñqÁŒI^¬ƒV Å+A÷ãíâŸDÊV30æ9¯†7ØÎeÙ·]?#hËJ¢—¶…ÁI½ê XBò† ÐrÅg6èhÙû¸Ð+ [žýàìmÞ•šíÌ•ÈgÖG9D<H}9 ‚éü@¾J9‹ðýB«ýßÚïâDSgf'ϵi-Oyô‚íÅz[ƒæÆ0h>}=à³,«¸ +rã`1V4l/rÀ‰5ªe¡B’ÙUÅ>«Â†LÈAŒ¡5 +î°ÕÂ3£‡Õn^Ú^L䜑 +Õ¦ÆE% …lº nø!?õ_ò[ÿ#B1cMiw«Xµ›<©Q°*ŒðQÐêÎþ>Óqhw°f +Ùe †Š}Ø`»eÂÓ– +Ö“yiÅ^D4–î˜sÏÉì¼üüuÛ½áæg2 +Áé˜/ïfÊ¥;„6ŠpE£÷d"‘Ò&¦Qއû6Œâl0Ææ¨0ÀYe„6 ë4a <ê1ÕÄ:á$¥Ëç\8&”“›^‡nœ6r(©˜j=û¹¦´Ì.:¶ì›!´-Z\)6¸ÆÌêac9¨Wú꨷=/žÕƒVÙF}­¹”>,È[z¢µ7iï®Æ[~u?¥êMï ÅM¢§B9ß:€¢:ˆŽ¬ÊcYÏbÒæ}ƒ³Ì©XpWV7CÌá\]ÉÂleâ`ÒÜ’£àå0j \—˜t£’wQN¹v%h‘R?lH98Q!ñÍçC¨|µqK2Î"Ý¡XM¾%M^Ñ_ƒjtxÈã +Êr E'æí€O#%÷ä唳ŸÄ|©!#>õ‹£ª#¿b>åì&`–<"ƒ£6ç ×ÁC +œà+Ö㳘·08.:¥xÕp8Îix’;YCÛì³O¶W`ŸZ\Ãè&ÒÖÕí¨ËÕ®ÆA¤¿~ûúóëç¿^~|ùëËç·/‹L Ê0b}BC¬Øl³êlú@{Ê2ê0Õœ§rL—[|¢¿µnŸ¸Çz©8aÓ-6ðK©ÐRlÌöy´ªMu©³½¥¦ÌþAÁˆ(’=Œ(aϯ±ÄäýÞ@…8”†®Äˆ5Žm@CQ|qÁ ¡oê2£riè® „ÁÒ#½'’ùÛ:¼É®«Áµ5®k&aÚÙUeð.T莡á=€±ü¤º ¬09‡YÆÜíJÖš³0¥ ÔŸ¬}Úµ|au¸«…¤o†–¯ˆnO!ðÇPÂŒ}”N„×Ü.”ËšX$W&cF=~Ôk*¯ê³^ºœy¤~?ºÅÏ:™èmÉRáë5[piôg~ñ~ÂN¹X[^–¬ ®ç8}ÍBñéRƨ—ùóÙ;§¦ï.ŒÄ0¿=Ëqž ˜ãYÖ3: òõìû ßÏ.í¸Tü¹òÅ£2¶ÛYy—-gkÒzÞÐ-”«ëÆüüu»³á·ÎukªD.Ù vQG­þ \`»5jk¦³iÈŠ#}4 ¾–ê 5³B\A±A²èÙ5„û³„G–ÀAož%i\5–”½³þ­z'?Ôû‹–îÌÕ‰ƒú˜Oü”G>¨zù {s" å+ ƒµ +òL +¾ˆ˜¥ýþ­þ‡|×ÿ°, ;¥z{&|'@—€+©{íF{•ˆöÆX³Ô‡õWìªâ¬_ðò]¿“Ÿúo{ÀI&1ZB ä±Ñ’æ-*ûå_²FJ¢~þþ#ê"#vò•ž3dƽ§%@»aèQãPWÀæL„[¨Á‚ê.Xm¬ŒÃO>F©Î“BìC03ÀÒRœ§,Á6, %уâBzÀ\0AŒu_×™Õ¯/ƒqL:äÜ` +*yIgn^¢Å’î£,ጡ—Lqéžá‹¸*K]ºµÚÕè¤w/ÝVõÆdœ%€£–ò´»jdzzù÷BE5 ÝW¼ñ,=²“^C #óG.Oé#ó;‚W ‚¾¨\ý­iˆ–§|U%ì/ÛÁK&L$v’»’²•Ò<-šŠ€µ³±xï0š-óýžÝ§Ûæ|ïÀ®÷¶^ †Ö¨¤ZeÁ%Ú@wµ±­@m$©i )¬Õu…JJù‘í§‡¿n»7<¶EÂR»|\Ðé ö +Zä 3¦w1«RêEr ž°€íõòg)Iï:7Ý\ë¨Ü¢1{KýQË^fo´yˆm^ÛHÀ­È0|®ã¯u˜¯)i»'Uö­íl©äÊÔضÇOl9|tà +Šåº 0äæõÙjÑ:0quy +ï.6Å!ñUò,m®fsADŸ0²ùé8”pG’’–ÎÀ3àx÷ @þ¡ûÿ·)ŠzP:×;»š—‡â«Š õk@3á+lÀej‘¥>;*±¤S}Æ;©êYÊìèU‡Ÿ>j¯>AˆÁNåVü»(åÙ »ÐŒèfõöix#í2àZ[í„Y”kU<©R-2ón¯°}h%ˆoâ-„D“Ñ8f]\ê^h¾ xÉE{TÃáí^ÐôLÝžßÀ…3îÒw ò¶†ªQÑK¹z“¶|»'շ³T.iÒ~Þ‰»âsøL>¦µ§œäK Õg_ô~Š3÷_ßß¿ýç_ßÿ7K“6j$Œƒ +­n7E€¤!À_ÝWå@—ÓׯvÒØ÷—ߥ¼¦±ÿà†—ë¡q `9`uƒ„“˜T§ji? †ÊíÏìÍQq-H¥[£'Ò( Â©X,`à:7g^7]ÐôG½mT4—"`¬9UwRû%|¼NäÅów€€U3ò„‘hÓô)Ý0–©Ru}î·Ocüë‘«ÿUF¯wløÝÄSÒûãlûw‡V1PQ™þ ¢ZpG–|–]•AÞE×`‘©9¦÷ oõóìXgïÓíݱçGË +ÆðrïΨKTe®¯Ò;B'ƒ›ç’Híþ(VM¸[¼/¯”^8a]í£ô¼6>Vs_QØ.Þ î«Þ›Eœê„ Ìl-ß{r{t@§ÆhŸT½¼¬Ó*ã [Öà–hSÂo1M Çd¶9ÃER6Ûpûêš L8¿ÈÓ ã+yvóòÍ«m÷ w*fhKûƒ¯à²&m§»€*êÙäÆmS¬ä©üt‚Þ—>—¾d@k¶Vö%ë;k³KxŽ•/Y™7ÛY2„møŠáR;ê ”¢g ¯ ¸ ·aÍÇ.à«Î%é†[ŽtÕ ï#›™»^Q•¾Ôz¡¤.¯ƒ–”ë¨Ô-ÛäŽóû`¼ö¤(½¥,š¿B t‹\€yßrFˆJ¤?¿ýwÉx†¤,·OFÂû÷œ3j3hÇ-c;pŽÙYÛ3/KYÔM…†¦hbˆÀ©AlxØ7t²}vú¿ìýg¼?{8¹¢¦ê:^? +ɈçHÇG‡½V³Ä|G³áã³Ûûc8}ÞáÂN-¤Úa]¸<á ^O¦Ûƒ‡…NËwé(Ôܸ^<óã {ýI`^4 †²÷†€ÿ$Ž&ùºZiN› ÇT—Ù"øΈÐ<²‰Ù¤mÓ_¶æG‹Ø,`Hlš,³ˆP‰œõˆvF¨Ñ‚¬t +~³Äõh¿$p/qøãÏïßÞw[‹Î^3°"™&à&©¶ ÕQ#Fa8—¥…ž°0޳§Š’ûâ€zBA(ºeI¬×IRa=¯LÀ(X·å`o,W¡ÞC€YÚ8kÇTÉ`jó ÒblÍI&™Q@ZrÒk0wÙ¢=T¨`Úï8d½ÖKž×šæ(׳)eŸ¢ÄÉ‘ Ä6G™¾Gëp©ûÀd¬îÖF>w¢M+ƒ3s¿Ö¼ìÑ1%¹º\öG¹6ìBÜ.&ønë-cõÕžàáU†`,ün‚!Xe„hîS,Š$ ü8A]òc €ÆRнƒ3¨Êà€“•F+IåÙA»&ñ]@az£†¥<]›tÆÁl’Ç‘…Ña +ƒc›µ)³<Ñݎ·ފq¹û Ú÷V¾ÃÛbo DénÈ0/[_Ø S˜å£Þ”IVí™èXa›-ß`Þ¾•ƒ0‡÷’p°o0ý~£_ÀØ“˜°ICsð°gURïHp¶‰.ñ˜®~ÄMC)èzaØÅuÊ¥'¥ §{ôÿüò[Úk +K}N£4'`Š¥Ã¦ ÊÒ ÑxjEÖ³§ôÁã^ëò—N5li4ŒšQ¡úyy\t¡*œ£‡9'³¦æ¾Rì+PÞdGÖ ×;ÖÈ™Îw`Ò +c¿Z—ïj‘D.]Wh‚çUÝÔš¢A‚è´ó„Wg€³{F”W5”)ˆ0@²“7ÚÈý5%/mcPÍÚK†)>7Þââ€H®¶ |u{ñä\hÿ$mœbbúà￾ûùõÇïŽt3¨<Àm7˔ľ¸âçE³í¢+Õ›.†-£s`¬Êçþ±Ô”Ø}hÀEX· àPãœE]‘º5ô¢¨iò­z.ÊÉ +s«c+†’-vHµ±›ðˆ†28—¹à—V«Á B Fñç¹Â#…íP\Âd\õmT³Ê+nôz»Þ¼e?gfé‚©¶4¬ñÌõJÁ’Œ©2{(CŠ.J}&x]¬Vhø{f'¼ÌŠaÕë2^õr˜Îý|ÃÝ/²™jooyô}Ö §å>_“5›­>¼#›TK}ÂB¾ó +8ƒ~Ê]LŠ´Ø¬f©f¸»Rsu¡9»R%óv u5º¤•@·g [Ë.h5›*Š“5j£myáÙ€ÊqÏàL |`Èdd¾Žö,Y™D?†-½¬)vé«“„-·ê’À&Ô“´ë½±#Í8zq<¢ØØUo0p«c¼ LLce¥m ´Ña½p|ØÄ ®G`íƒ+]~ÔAjH}3®×Ew”K§¤Ã¶‚lóöðybþcÛí…fH´|õ›~-¥”Ž<‚ð;ÂY‹îþÑê›EÚµ–žïû8£Þp¢JþÌ÷Ô+¹ã‹©Oº^ùhg»ªí°#ë×g$zƒØ‰~±}žðöŒÑ å«Rä©ÑWÒ¾ÅÃïFÚБ)^m¯‚9´m– yÂЗÂçøªÆ‚ì³–•’·ñ†7#>B)³ öY{½Éß\Çc „':Ÿ}¤Ã`•Ãòî•kM;hüØb¹Ã\h¼Æ=ÒÃ.%ÞÉÎßþâ‘ìßQšýš£WÉ­ L¨‹²³‘@ø¸.ê³ñ :Z¡ø´Ÿðòý %¤…©|œ*†þøùõ÷¿ÿý×­…”¥+”m7DŒ2dšÊP„fTó–(¨÷ .$Þ°.a\Î d+$jtŸ0AØÑ§zgÚ‚ˆØ.ZšHw«Ø¹Vb Pðvž0Ö÷VaÐ[ñ¾ùTˆ¤bÖ™d†¡W\P¹¥7_]b‹p2Ø™„+ÖI³–%_Ÿf©Š\ØÎ‘ã[, ×ëâÓWçZÏsŠ¡Ž+îó„·o¨µTÉUû‹O 6ðÃ1HºRΧÙäÊç ts ŽK‹ú‘›j…Í<HAd«+æ+/ù x±˜¥åm¼á]¬íÝÊV&óƒØOYÚ#<¤/ÎâUqÐRãå.wØPëò4…Zå½ÖÚÄ}ãï ¡­8ô¦9^èa—íäÈÞþä‘êàQ˜ýœ£Œš^Èo ŒÔîf ÈT’ö¤]ìZêóéý°ž¾®Ô סCÝ1äHzšb?P¾qEú€`êËâ”?è|–G§ ¹8Ôtñ½Eé2ø÷ÜÙZ*ó¨!Êe¼ƒRFQ¤îøHnJˆJ wUb¬‘$镪®ã6†8%é +dÁ1Ô• ¦Æ2Æ©É]¨\Zíp5¸–M¸dšMXðû ½š[!–>ß“ó»hØõžìqµ+ùɦ5S}ÎÖ‚‡Îrö Þͼ\ã® +b%öQ^¸`jóo¦©ÒRiÆE3 C™e)ì¡ìƒÝhÐÒí¼ßQX¥“„Î%°KkSmM4YJIèëÛ·×ïïzJ½üõ·×—·ï/ß¾mFÊà0¨ˆû7Ÿ†¨e¶4ëšï§Œ {k< Œ8!VÉot{Ù&È‚æ>y`ã2ÄZý'1\DZwgGHåVÈή\¥Õõ`WÉ¡)´1“X3; \5ÞC97Çê[¾ÑÛ/6e‚ÊôäÀö1ª†Ç0Vï:ëÍ–E%œz[°ãòšÎc\wà€ó¨ &pÐRæ |t-^Ô~­P!£³9Çc}à«WÛI?^Å}P›#-»èt[IJљŠÞ9ícbæmŠ—±„9Eg –óïŠt +>DÕ† °Î:\™]èU†íÀmÍ–x‡æ2óðíóÍÞ§R(•=Çê”ÂOÈ#êìÞÃôiÐ?ôî̇s7(F+sÖ/bB1¨VÏ)8¿‚?í¤>‚â Hyú’È󒞯ª³/)H-©kAöŽ–Gk¿!LëŠÎζPŠg%ýN äX ¨Ä1©+Áqè'ïÅJZ£ÇbØr ®q±¤¤õÁNÈž”¨ê}húýiàÛ5i˜!ù r`;„c»¢6b0áØiµB Byª•ËÞ|uÃ&ÄíÃŵÔF®}Ø8IZÂ)$¥ ¥ÚØÑÍAÝ‹ÁU~|’µZŸö¬â"¹vÐ?tï̧w›?.‡¤×sà;% úV|¢èª wÏ¥¶°“Q`ú~ªÔî `K§…‚¦ÂQ¹Êª"ÇÎxv!žÏëR„½k$¢÷ZvqèûÏ-f³a‹“ ©ŸéÿŸcˆ G|L]¿Ä~ÿþ¯×÷÷—ÿøçëoÿ}{}yÿÏëßßþñöúõÜcDšô#ú£Oƒ`MÊ>uôrÍ£CkêUÁö,-O´B~rQq6¤¨²*š2MÚÊTeè§ÕEk(vQMÎRð{aïW/ ØºlžÅ?±"ÁºjòÒü?óš3ÖiËÝ#:2©#«¼(ªá:­ñ_<}ºjº-÷W6bê¹yÐî‘­UgîxŒ:๚(#TaIׯ? zYnÎrút_í€9ÅeÑŠä¼#]€IT÷f—âöS Wöe:?OMG“u…«‚IgþAåôg,·O÷õ¢’z‹fUeÝS$\ú j,§?c¹}Ú¡`è¤XÜÆd¨/Nt5Ž¥D6QnzfVºìðÈЋ‡¤a¬(¶ÞlBEÆðm5³ÃY÷Ýâç æÛÛ£CK£¡0Oóô;1Pµõ|ýŠÛä +õ‹6Û |fõaâ=hÏ «ŽhúØOŸñ R£âß>¬±¹å’êÇrW{#¦û—®ýýZ:»û$¼=Mgkoki¦b£W·öïw”±_'ö*ޱ +§ÇXÂK<9ÉzÐ]éŠôÌP†¹?¯1°T£äd ¡Û]¹|éƒâB+8ºME:hnßµ1Ó‰Þ$tÜÛþ| ÊrÒ¶dè‡IƒÜóû0ÉÞ ZXRzØâ%<üâXª9°‹¡ª¢¤æâ ä ärÛ¨©Ãöp—lÌTwf:±“p]»º;;ÎzbxqT*Þ¶]G¤;¢‡ëÍPD5HÈ ˜A/n€æX™ì"#]odÅZJöâ(ÖÛcúñÒ¤YA5U¯m4¡œJ³› ((+8ÒR[.cÎ&Z˜#C-I®~g²84¦<¶éÙdš0…*~“4·*®1Ѓù¡0€Jk|év ‹|Ý„K4…Gc@0}c:í -¹,N%y5^›xÕ©_OåÑDI’Äu&è™ùè ¨ §LqÚ(÷£3AŸÀ£3».EÁ–/µß™€õ]‹°]=@Á\£’÷ê MíÒÖrõæ wTç—–Î +Õ"»…rÐíUTϳbRÑæŸh6b¾µ‡Wt=õƒ¸h´J)9…tP0˜”9Aç*I²ÓTB–~!Ë(¿‰Gžktv8Káò Z«c]Ÿ_àÁß~ü‚p øÇ a<#ÔÔ t8àÏ_þôõõ|WÉ®]¹ Üç+¼ ‚«ã]ÔWn[ÆÌIcôÆPKõ€ÇM É!ü7Øzulè¢bQà€´­õÅQ:_ÜàÊÚp«¬58>ŠTz3û×…dû$=­ (U{|bC}* +q¿QPàÒT@¶GRzûà›¯– +ýv”48'’]Í®ø6üi»kRzê¬1¸ˆ‹PÔÓ>eåýÛ~Àg·w¤…œ› ÚŽ£ ™ú`~“Š(ãJ‡k^çÔä­»n·õ‚OßW$K `¯H›¯' 1б´øî h„ÐFM]_€À¯ñî ÐÖ¸uhÙÅ[§,`n·)–v¦Óñ1„; tEuÑ ÏL­'žÍŠ"Ý©·5´àhç[6º# ÍTî¸I/Ôã‰ÛôÈÆv|än‡qdz}ÖåYÅQ^›iŒUhâæË`Î³Õ ^Ç^*„ÈšSMÞIö¢²þAT¥ÓÓ}åc¡_Ý&{lsVè´?æpÛ_Ï•óoÿ»#¼ð¶?ý/ûÛ?}D-ÑåŸ ¢jMOÿËþô¿ìoÿñ£·þ K|Æo +8œìÆÆ^ ‰ËÃÚçï+’ÿ¿o ô–ä Åï[]·©ìm YõæÂBŠ“U!õàbY©s´DÇVÝXMFk¶:Z¹/ ê@«‰4œãUÙk·¯ugÌ]måšuŽ[LÁÂÈ+™ƒ´Ùnٞ˲?wÄh&!¶T!Ÿ]lÅEb[Ô—µÐu~úÆDéu†ßµ;Œ¥#ÛвGZ·û}Ç *«×­2´+U:¾†3“tYŠ)­ÀŠ´x¶×åMTå#…¦-.Q:8¶®ŠtǤ‘gœDJ(¸¸Æ#X(tï¼ùbmª‰…”ÒÝ';¬ =˜’¥]t‹4Å8r¡eÄŽŽ†7ìzÓ;q]¸Ø‘{[/øð}G²¸:<—Y”Aä¹Ùž>Š? ½ú],$|×0.¯r÷'à˜ÙF5²‡‡õ“íø˜¨…ˆOÛ ùHÒ~ÝQ0![x—5†A„ËwoºLÏ@äâÕÕëbVuEŸÏÛ¦W2¦ã+u3Œ+Ñ3è«*G× +mAW´·å=N†@©9xØ7ÙÀ*BAc¡xl¦c§Òr»œæØS~:Çà÷–ŽÃ6Ā׳2—ñüËÞ?‚&æ1ùÓsÆ%&ÅŸ{sž·½÷Œƒ‘(§kte±õ’îñ:à=Œ‡“Ýgs,üb½àÃ÷ÉXš2 +rµêÞìßz&!ÿX¾qÓkmaÒØ“=£,pS1 +X$=K2–‹(„>²´RèMQøŠm ­à‚жš/Û$~ãô0ý"ñ”sTíUáCQøÅ»Ŷ®9ЊÌo»JPD­8ØáP‚¬ËH<)Ú¨y=”dú@Äš“N3b¬`"drdjDñNY9mÛG‰ÌoÕ¬ +ÚE“ÁÐØZ¿2™f&z-ú5ø¢Ëˆ°V#¹îY¼åDúÞ8n YÀ)ÿUúTM» dEêõƒHëlùn3'ƒi(9+b—E1uìL)¤ªN@/kMØù¦uÐH$[^B i„jƒþ¬æ1RÞš°‹8¡2õ¿t}ż÷!­°ûÕ;XËmxÌ­Z~r™!B µ$¬³Ó6º•‹Pñi IY¹ ߳ƤxD1GCÙ9‚›ƒÑ]ú9œÍù­D²>}'êQ2{J˘÷~ëŠ&·ŠtvîӦȣ)p÷âÍâjþ?#…•©Tô'Pˆ *ç“ôx”'Dà”<øIþ€°­~ö§¥¶Ö²7ø:`×,â®ã’öÉ¥˜²–¶€ä4¡ô÷7ŽøSýÒ³«j»¿´ÿÚíñ@Á†<»×RÈÂe3×3þÓ®.Û•í¨KNçºxyÒÏ#üʳòêj,­h„Í¡×5ë݉KzŒ¥|­¬æ\ ,y½aüv#þ·›1=<è :{°ð6Ÿ@ »¯& +:çmq €}åoÒ 7Ý4èÜ:t!8t±zØïšlqeD³$â6m¶‘#x2;Wöϳ¹s¼[6ÃÌþYÓx t“Ä °Î;õECˆ9Úþ”ò\Ú*(uöU#[uLä<ô‘¡ãk(µÑÛ#,>õkXHö–¹6Ò:1ìæ^Š×ØÚÝã£c*º—î¾ \Ù>ì…ôxl³èœ2®m>ð”«C‹¥‚÷òºôZæ(©a]60¬$ûºˆ­(íÊS†‡ìvØôöÉÙ`Ѭ=ݰÇ]¢kW<ìÝŒ3ßz+R\ƒÅ¡•ñL¾°­†àÉoùRÑ·gò…ÊkJ®VÅ TáÜÞV´14Æx25 ”KÝãl 9CÇsµ­šŠÇŸ­¸-Q„¡Ì3(‡èž‡ÚÍïÄÍÚÃÜMðíÚ)‹‰:x'&õbÔ·6úeƒbUžC.{VÞ÷Îr –êyEá͈½Õ>Ñ}›ðdâmîgÖreL—±IãfàœYå1}¹¥ÑÔ°å›ûF:Ùš¿K +ÇŽ†yÖ ÃÓP¬«¢ì¸¤A/+ …KÒ¨~ £o\ÔÎÓñzÌÀ. ¦q)%Q,×X™ mHš.ø›­~@'® I&³¡…œzÑREq/ pµŠn³ªÏ†2n: åúF[h…òÁxìRpo®­EîÌWž°œhk:íýñjÖ)¡W`Ó÷ëmwEýæÌáÕX Î3èÀÔºîO m|¬m@•ãðz5 ø]#(({÷Dqíòn~qç:¨çŠ·îÓ€¬äÞ±†¨Y&ÏýºîœÃ‹½umno(º' iÙYá>´'ý€QC„kö7Ò$s]7O?Hôì©ù`‘cŸë ¼v#.zV’uÄþë?e~!1¦µOó@ ÚûPœ%üª¥Çt\Ú$¼­k{{¡ý§í=m¡©çôXh¾Ö­ª›ûÔëOÂÍѦ5´Rç…N&Y¨ íjh°½|¡š­zfC£X| í! {'Öù…v$p15 +²Û:ßK°œˆƒ(ƈNvÐmÏè°X¹*k{Ö +ùBßÑx1":Ò85°´²½RYÓåÑœ[×ðSñ¥y»9ê- g õ•ÑÌR¢)üZŒ ýbë^ö¸“Úé ØT”åä¢]Ï­}¨œáº÷^ }M‹èÔLSuR:4:¤¥¿¹6ÁQ›™~4Ö£»¶…J˽ `M 2kÜ€FW(ÌÕ¹˜²cf®±Òü@Ë,ª§ #' õÁ•¤%æ G±wYÀͦ­s ðOí˜Ä3(Ÿá?²f¬Šá†úG)f¸â|(ØÁ_¨gZ®‰aŠñeC0ilKÄÜ‚ªÀZ1Ëk«`n"ˆýõ]q&Üÿjð¬SÔØz_Wa ÙÄ\¢3î< xˆSAc«Í:Ðç¨Åj 5dÕc3b¥"hŽëúB‹0&ˆ¡ÃhûËÝÆÇ‰Çò\h&:Á¥æè¬Äé9ܱ"6#'g8šw"…Π\(šC“P0$ãÕ§±<øÇ”°©6buÆzÞÿücç=àgÖc¡–ÿR^&Gvæ8v¥,PÜyí6¡æ46tû$¸>)¢æ&åcáÇšHλ>( ýçz {Jûêx»Ñïëµ²ƒs£I@{:å&íUZuW%èë8¢Æ­,¯Î»üD\—:*ÞM5t +¦™-¦².(K@sxª#üû-ÃMo·_Á¶ÏÃÎÃŒ÷}kÎíÃnHPÜí¨'õ» ¤;4E©l¹Óð –±ËÂÊîõµ³Û³³j;ŠÏ +[32ªé¦ c+}A÷üï_‹|­Žœ&DQåªs¥äÃËUçj¡½±¡'Q=*Iµw?Ã}é~²ýÆ Æ˜T(K†^¢a)µþ±¬Ê°o­óe± ÔëÒÑäŒ1YF¤ûŽ–†¶€+CßuBÃ>° •)‰?èôŒ¡ý«¡¥Æ8Ж¦]úйɉ5ùç)ô%1>‘%]tëïŸ$ÞÎ.ð{plëgÍŠìß¾1$¤Pïx·GdÇÛþQanÒú“ÂÔ.]zk)LPèÇÔÒR˜»KO…y ‡†:, +óøÚ¡0uªLÝ +3êÎêîP˜:—K›-…©3,}O…¹'ûT˜QåÈx{(LÐè¦z^ +3ªrEëÝ +S9'Ïì,…¹YëT˜zfGUnññV˜úµ¸ô÷V˜ÛÆ©0˗¼ð¥0*] +sóç©0·§Â<üØ +ó—ÂÜ):æNç©05õ¡Ÿ§Ô2…¥§ÂÔò/åºæ¦åSa‚FYè²K .度¶ë8QN‰¹“vJÌ ]ó°ph̽N© ÃÏ“áR™¢ÙJ}xÝWûJËEÇB¡¿ôO¤pžãËߣbã÷úËy“êWdÎ@ùûâF>4c0Qì(Iô=š€`fuçŽj{M«²1Ï[¥Mñí±ÛÏ‘"ÝMx0š÷êCQmàÞ·ºFPÄÝDfÜ ¾J±§õ5% ×#ñ[vtÜóÖ)õÄÚíÆlë)êJ÷¡úývg‚éÿ¯¢?S"Û¬6‹ßéE[²G +.†2ÄÿÚ‘< YsÚp§ƒ;F]ÔúßSK A֬΂’°´”|HŽ¡]ŒOaR—ö*$íßûEf¿œ?«@êl¿Áú«â¤QÃùgkΛv #vç.³?s’5K†Ãߦf»ÕØ÷¤¯{ š|¿Oô–‚£Õ"Ç ‹Ô©25”´ê¨U†£Ÿ·üÎñ0ßN»üN9gQ£ºgASJn¶÷R¦ú[Vr¾ß‚–b–Y&>f. ðçSËÞRç%¡çßW©‘l2J×B –PÏ:ñ3„2ÁžEËLÈ>•²0гü»öZ« ÅÔ¹v@˜¹m¡–ÙÖ‡f™¨ z=j ‘iAÒÌ8û7柶KRæGO§£§u_ûþ»Ç÷`Mëh¢+ ý®–pY:H÷º'ý\¥(üä?"?rœJaÂ3Ù$ÅÑHÈœÝd|1t…¶2³¨M#KòP§D”§‹U¶§6kE©RîÆMjûmƒ‡Êc—$¤âÛS+²ÐZ.º}øQUªJHP«?˜†ŸYaèž‹=z·oåŽpåmjÔP„ü#æC#H2©R±1çwÈc¥éó”1Y[H÷€*8â£M¦=´™}ï³ë-Ã…’ÏÝMžº¼”{ @ñ¥Íuâ!Á’“®«+7ßËž{Žn/ÒéJ_GS»ÝÕróénw@/­ä§J–»Ý5 nRÓt%¯*n¢¨Ç½le¥'Ì—1÷U«Å凇W^ÔC¨ñ§]€¾b]àW@d¹¿£I|°¶ôq œ¼M\zê’hKKÉQC.;Ü"ÅAt QÜäDã9@_²ÌˆŒk ¥Í}S_(¤8ßÚÆU_f¦l7©cRýäÛMg›WÀW FÔ÷ n¿~’éÈ(–aÏtù˜ÿXØ”%‰µ©%hlmõƒgÏ”¢Ùî ðïäOúÐÞ²¾Ú3X "[-°Ö þ§Aøy4 úP„4î)ÆØp¯´ìËÛ=z9 s—B¯#Ù¬â`•f$Á$yŸ:ù=omy¨]_ë=!ê¨} ¬!ñON⮆‰ÚF.–‡î¾=»[-Ô´‰m´?¨‡­ÂS€™²ûmèE(Ý#e‡¤!íΘþ‚ÖÖÞØ°Pç¸þÙ™é%¶¼÷í,…nlyÊÆ¶m¡»ÄÇÛ£Žœ­C΂, O—ý°guÿ'šöl;zvhP~†PóFCØ/9ßß…Fry$ “è'û› ü«´4»Ð¶5h©aéJc*Ecʳ~Ì—vÀƒZ­/ Kƒ^_[=ÚZ¬5k¾Å‡š£òŒ_zÕìjZuÓ¸c4_(‘uL 5š¸<ÖØ¥ià|k«ÙÒ–ó~4‹^™ÑMtèÃËÛÕmYÉëit½W4 ÙÕ?çq6‹×¨i’ß5K€±ÛlqÇr´ü…„²OÑOÍf¹fYÔºë2æÔ»°¶˜í6Eë¾Ñl^AùøVÂC(šªkWRΧ{mœfWsŸìž=½Ý‘ÏÀÑ:îÞÃ*ë=çZ,ÓÖåh¾¿Öð ÝžÜogºN³;µ‡ GoS²©-`´37‚ŸËj‚¾¶®\ž·0²öRê =çc™ýaÃÁ²>—!ÆD>Vj@ñµò8‰!\h¯“° 9y|4ðrÑl>®C…ÿÞ` ƒÊçÛÄ.{¿5ÑëcÓ¬åµfIp_¼ïÿ¦¦xÄcÜìˆfã{ݱZ• zRÔQrOJ¬ÊÑ6ȯl®(>™*¬üyºì4Ç (¯5^%_)ŒO±èl7ëgÏ €‚Ÿ ÔÕRGMXñ.âPÐ+nìµÉ«¥©Kšßw»*ʯï3Æ*­AáCcߢ*>OIAòÑÂB­E?‘º;ÔéÀF©'iψþÚƒ-ØíR´‰q$¦4#0]ÐRã“ÄH·«|¿Ñ„Ô/J_c)ÇךXµÒ³èÝ ˜[!8©Í2£C~;¶DG[™åŇæ-;ÞO»H‡˜žì™W‘qçQ;´ªpöÑþ_Gª¢ìOp¹xßQN'ë +^x=¤îdhâ¼JÃl);|‹Ãl¬£]~Ä&}.ƒ5~sÃy*P=÷ Z!ÐÅã†ÍõC˜‚&?ŽÊƒaA±$Ï¢¥rq‰•ÁÜ ’½_,?Ž8E«”)bíˆS d¢¦Ô³è×¹kGÜÅ–•+âs©)È–ð/8ýº8­Ë’&ÿézΪϷÛ¸Üþ›èÅÓ¬UÖs1ÔÎ~³°ISÝPp_Ab´¸!?þþÏ÷QØTáé‹Ü²1/dÔ¼òhŠÅ2F9Ñ`ÛÚ@éæú¦¢ªí5‡„t|l )_ÑæŠ PŸü #"ÅÏ·YD« êY5eº@cG£d“K:õ0Þ@K±~QžUY­(Ô=Í:åŠÕê®P1Ùß’ät¦AQí.ÍoÕ$¹£ž,ø;57ˆˆ-fàeª”¯‹#„ïѲR”2— <ø,\–Çë’F½Ï×Ý%²¦ƒ†F€âÔ“Ñ¡,oÿ@C,O|^—Wôò”Ê=g†t¶ªVüÊ&hiâF5j°*+*ÊP½Fa[È-öV¥öÙzJßöËH›§Yé³P®LǘY—½µ_8ÜN¬×ÅšRC+ñéjM‚k1} 1öóá1wçø˜ËKg”Ì@É[·æ<4¯ù•ÖCæƒòë\pÝšüŽJ$xcö³D ¨ga ÒQ×Õö?õ,˜(ƒSâÇۤ꾣üÃN•¾~œî^ØÐÿQ^%Ivå6ð*½w¨‚஽·¡>†êþ[gœ[ÑÞIYøx’@‚g Á–·ƒòµq¶Þ¿œÃ£"û[xºãÊ¡Ys€™š½=¢˜—ÓæƒôÛbÛ/ s÷ÈpÞ-tp¨Ôdû´ž"ëkp[ûGÂgn‹ ǯŠ#^Hɾ +–cê^F +ÂUòÔ%ªGu³ÞWø=í‰~²e›Ô5sN®ú}š ªêS?LÝ^º×Ë÷5QÑî¶©Íà3Ô$÷‹é<*ãÏk¢‹qÛö¨ÉvKu=p„0éýë +÷¤ìNí¤wå á>lyè~qåŠ~Äf´p!…£|d6Mï*L·wÅfwug¸w'Þ®ùøÆÊ(AÎv³›8x$X)w!ÜZ5”×z£ç‹Úž÷+ù ï*hžì^¼Û7'U\lõù6æ9þÝ>"Ulsèè뉞‘nÏg¤ ©Š¶öøh¼±JÿøbÅí×­G§õFÏ/nÏ«6˜àXßí­Í©¬s5¥N¦±}ÁÍÅù%»”5æ\LHiih±Æ;Nª—šUo.Q½ô^âÍ;ª—Ôj»9JT4zmñŽûô€Wís5@cëŒ k¤ÜSñÈÿJcâc»¤í!'‰7ÎÈ®Ž%›ÂáéPÜ:šþÂ:–û‡õDϺmÏOc¡•Ñ`׸!püÀ8Âl`¿ÙÛºhµBðÚêK Bÿl-Pó„+i2.xpäp\ HÝ|mö-”xZ&6S^—TD¼,€º~Ïa‹£“0tRÙÇ겦J ëf®+jsn$Ì$Ë=®/‚ÐQ’_C®bƒ¾ÖÜ„š²ûÎóÎãe¤âiS› 뫚%O×hWOuΚñm×!Óz}±c^›ä5™[[±jòÙ™@û7qxg’Ð¥Þía×û gw[³ÚHƒ‰Sª1†J¶þQØI†ZË™2ŵ +'Ó‘­A¢úÚNlV ä'úxôi†x*v Ô1éÙÈŸ»˜j[b|[îP¢rþÌû‘F ¯õ@©Ò'Ï\-ËòÌG p6ØÈ¾5¿Å*ªÖ»uÏJ£ýŠƒhÉ(ÕÚñjûí=Ídåúš£˜aœ÷@[ØýŠÉ,EïÇÓçÜZ@sÃ:cè1:Úâðkc£ÚPMÃs;²U"èxù@‹j©†N;¯‘.óK<•oƒ*²/ÅØÈγæ»2ªûÍ=´f65;¿†¨âo/<†íx¼ôÁÚ!ln%—šMxX|{˜UÇ ÁßÏâáïCȯÕÌàñR|ac>¥4Ð +[>lù²åïf µ{¹[ú¸âîå~Ù.}ù]ŠÛÖ ª}«sÆ+ª·`j5·øa +fµvß©,3¾ïÔ»mû•!]Ëïð{è!ÆëÐáë¢ +jL•˜vÉJ/áÑ,CìãBXšŒ%‹C‚OIö¿ c3:ñ!L;&Öøj±mUÓÝ¢ßöStfdsêÆI #JÎí$ÁcOâEåˆG»é ·XHz¿yQd£Á™QYO €¶:Î5׋߆Ƙ¢÷>Ì(â¢èÃWçsq«ÿ‘–Ñ‚ÜJa=ƒÊ^(ÉÛú·?¤æv%çÎÓ äáUÓ¤$¼âhHwI)X4©¹_f¡Ì’vŸ‘@³€¶1ÏtúE¦ñ%ߎáouEHÆœŸ®äÕ° t}®´=?-EÒž‰Ë‡ª^èoˆ~a¿¿é"~EÖ±ÊCüг¢ÅzhéÁ|䡈Ò®»„»0Î×1ïÊkZËà½6i®Þ3.¶æž©@c¨ï¤ºÔö<½b‚_oF˜¸£ ¶™Çü¥Éõž&DqqLF„ï¬ØùzQ±bÚæ±»ýâÆŒå#†*Aä‰$Õ‡«ÿouDÎS_¾8U}z¶¿=; Ïþ΂ÝT m´y)6‹Œû)ós‡ 0uéÂðƒ¥¹Ã#ʼnÒ)¡¾Or—ŽIåŸÀÁy¼ :âV†Ø®˜ÁÄòDÝ—enŽÔÕŒ‘Uï¤ ÀÕÀf­¡VCíÿ¥q–­ÿCš´þü +»Å–ðôO Û‹³[0h¶é(Zâ›ÉCÄwâü}Âé€äe¨|¢‰êh(´!.çÐ2îË&GqT[ô쟨?ø,}¢]Ç@;n¨™8²!cŒõãŪQcS˸Žš?Fë/@,¹‚U¥¾⥩2IB…n£ho³¡Ç˜Ÿ”A˜ìeL_ÜBe 9–äD-ˆ! 4ª¶2ÿ[MN&fðAÁ‡›‰6 +¤?LÜ5¹ÑR w=´’¦žÝoVgÜ^åúË5‘ x ¨üyþóÏŸÇžÀóåæŠØ{fLsTV p9pÈ\“¨¤ìl?І…‰]>Ðé¡á:­mÍ¡ñ5¼'‘*sÙ7ˆB€yþzÂÑmkçΣ°ÛÌ¢¥„cSl¾1,«9üÇ0e¼]t¢Åަ†Ñ>è¨ú)ÁyŽ;Ê>[[支-C#~Zî=ÁIVyг8ð°’Ð\ãôòL¢%ª©á†„†IXîU1Bz×ôZGN^ßW“&:­ÇÆ‚o°iùñ…–lõÎd +Å©Ø+­Ü% +±Wò]N ò2¡&ësâ å|]JÓC… [‹°N>ã¯K¿ŒEH[ŒãÉ@•Ùö ¦‰âm®Rhóæ1øýy1›¹Å"ý =”òx@É +•ñµwYÞ,K¡ +–[ÀÐáôox*½ónµKoNd~úÑz§h]= ¾/töhMµktÙÞè¶õƒ aûÄÇs`V2„ËelaëY;š°§5aâ`l½zÀÞºf)4zçEý9ß¦Žº?65רdû¯+‰r(;á³h|ÔŽ·-O‰f}9ý +¨cá‰ÂaÑžx6Mon'ºë°=œ5Û_;Ê»»;1“¸»övxpôÉ ‹øæbÃÌ”]ë€%—Ü똈½P¸ü>¦ägV th pI㣫f™…ƉBzTC¡ÁGð§m‰i<ÐÓo…jÓFÎC[Mÿ¥¼Jr%ËmàUzo ¡YÔÒ†m е²Ïðÿý·ŽEM/«^UýxLŠ3ƒÅ4 Ýl[¢‘–ÅüP½ÅÇ9E9Å—îvéD‡Ò?í¨÷¦ƒ$ÜAcÒpÒ Ô ‰íŠ”¢ø}nYðš–ToZ²Xÿ)m6(Z@YjGáO1Ñ¢‚ÕoJC#u*›w‚†±¨ëp ¿¨¬f *³ +À‡0Z5/ œQ· +F:ÆpÕX'«‚Äÿ÷ˆìyA—4ÈžCt”°V :+4_ Ï½4²)àÂZÔ2ª4a ‰K®—\ÛÖ|)AõâH̶—Ð9UK &Ó°œ@ø£•çrm—†˜snW ,Ëú‹X;ž Ù_±öÛð÷ ”ûwþYªÜØÑOiC÷h/ÍÈ¢Û Õ4[7²)¦±Ž`þõ´ôøÎÁ¨'ÔB ;¸ÁLi—ˆ-¥Í¾…~uTí[š?´4óÜ(hZZ¦¥ÖFüÀ'ÔRk ¢`/:ÅJ†(.1Ô»>)2K¼d)À]z±“bp2P-:¢¨"—ªE×QT—ÉÆÌùyËúÊ&¹õº`zkªÊ=·ˆ8žmáÅÿb¦ 86oCiÊŠ„d?õ¥LC­h äNQsýZ§b}zê ‚Cƒ«Q”ب ¹˜¢ÕÊ`pØq†º†j'œÍŠ2°òqÉd\Y9hqç­d´ïù=Àø8JƉ¾®¯¥Z¬›Vpw@ˆqï”+‰§Sª–Ùd²¹ŒÃf«°‰‚ÅoÓz^µ¼àÆé9ä‰HX!k¡EP¯R&uÉͲ…ý×c s±@òC¶Išæ¶…:«c³>ûqùÉ Fk«bÓpÌtŠF”2•V2ɯ· ºÑ€©–>.ƒ窿8’3âwçJˆ£ ”Å’‘Dïò•˜ŒÂ´¬$fpÂèæhÔqìØ&ã˜vC-ÞÔŽ‰K4Öf²ÊŒ:šIlÕ”£ÃB5– '´92–ÔáÄœÓá³€¦ë….Ë> +vB?W,Æìúœ L$ÕùÞ&ÐÔÚ,Š"&›’¯× 1‡ƒEÐ3T±ÇÚÕ\@½ÏåŠÄ¾a?ó(±ƒ£Î5yãQÂô¬J±Wï$‰ì͖Ȱ=b/.?G>€¢5òœv˜-¹£üÀ4”Üó|ÉŽ-B½AäìBÔ(Êk *¨²ãÍ{¬ ‰—ì9ôˆò²9 ›$¯ñæLoÀÌŠW +,d§lìi¨—Þ=dË„![i,{Jk·oÐ kŒý?ѱð·b‹w¥‚«Û{¥ kÓ³ˆÎŸ²nE}Æl•býÐð,³OËìÒeÐ5–mÛ–ßà¤øŽÉZŒ%)Ƀ/åzÚaGÕ‹t¸å,Rƒ’Æö’Ú&+‹h•qª­‘E4åI;P%òDG¾ “’¯Í:ÚZ’kFÓ‰ÐÒ5£ “¾½ CgÆmÈ•ÌûB‰ÐŒcdö^¶×–ìô˜zk 6Ð0‚{¾aCIÎPe‹‡¹³äèZ-ST¦ÃRœühšG`êËa;F¹/¿%R»ÊÉRó +=ÿýËŸ, µ¼¸ùùùoÜËß +õ¼|ÕÄÊ*ãn‰žg£o2¤<©l¨JcldŸ²êö­»’h31qÛé@šRÆ£G‡…4°œnb zÏl’(+W´ä©5êÍN σQsQ>Ý!¢˜Ž×ÊÏP„ɹiFr-Ô,CNÐØ2Ð*ØmÙôâ^lÕ=8Ir¸D37^º<ɇcöû+ˆ§±DÀ‘jÖÊô /ÂdÞQØd7Ï6Ù…~Öp °Èký¹ˆ‚`f€<œPAE]§*Ð"†4½Ñ¶ úýµ+€Âü47~5| aNI=‰ˆŠ¯ÆÇID ØÆPƶ¥e)ÌëqœD‡“ŸMµ@c6~]Q ¹²‚´ ‡ ÐèF³4>Ä›ïèô‚ÁR‡<9ÿ.Z{åªc¹k,©¥ŽzoãÆ^ ™o6–å í±õäp¡2¿±ñÛŠÀõFêñýã÷üùÿüöã÷¿þmD:瀟5d%@56Eà=ˆ0úo¡|&gVSÉË%mè׎Šýïk×°¡ÐŒc'yþòмÐ]Gʯ´>PÆPŸu9PYÕØècÍmAmmh"C;}è²hõ¦…L4J©]íõŽÞ•fô˜ë×ÅnœŽ¦Tͬ±Çýògß›ˆôH¦ø+ Ìðìç•aù +Ô÷޾U|ˆNÅg¶0¼S‡÷TíUT‚ÖÒæ†®„ë9¬ÚWÌš‰¼ž0ÊÃö”BZýŒxlK°:ýyarM4EšzOêû)+Z™MdXÂnPA8U£Šù™‡``{kÊÚø»dm !¹à‡:׬|µ*û{TôŠÆ…614O˱€¢&{Õ5râåÑYÈ xF—Þw>þã·*zŠf’­GC£“*Z™±Z»ÿ¾°\}÷ÜBwŸ—æõŽãr²9o<Û{3¡]R8ÓèLïfgnÉãÔ×aüBéTœe]Ø7ô— 껦Ѻ3( Îä[iåÀÔÐùß;ºéÀî‚®Õ›¬aˆ¥KD¡ó ö7[æž@Iê£*¾wôgŠiU|”U?a“­+«Î­Þ)FFï¿wtwyi¾ÐZ ç ÍâUV» í’ZeEu¤Ôí(«wN}ÆïeÅ{âÙ+º›‰Qo𬏧S5o½Â’‰µ^‘Q˧욂T:p¢›µÏŽqyømŽúžÿ•ôr}¸F°&R”¿¯«Ñal tGºÑƈ‰’ája+˜¿‰¼=ÒCïµÈ` DG,T¥ /"$ºc‚%¼aÒ«”~ߨ²®r‰…Å +¡Q\¿ +6ôGMÁþ"„VxÊ îÿëŸæþÀ½„ŽMÉš6ôëEÊ|Râ¿É.ôÇ!ÝzÚÕ- ¸jGkƒÿ]GDKU´¡ ê@½é¶ã’ ¢â‡G$u€¸ªŠú,I*µ†r¡ ä÷¡ ~v³Ž·P>®+8Ì‚ÃÁŒ].¬0˜»·,FTi½1—O +)c‘Ë\ à’O׈"±õ Ã…Žˆ]4¸Çc{–a{ΖÏü®R£À`’½ÁÓ£žv”÷’ô›·ØñqÞZÊÃ4¸Ñˆ‡´K!õê•áÖ …¥Ù³iÍZŠ_âvDÒÒ2-õHI”Ø¿ÿò2ɲc·èܫЬþ™ÚÞÁ÷2¾ö?õ0“|%ŸÒLŠâC¢ R«myжJ™q4æŠ}»ƒô ìuE÷d*ó|*Ú­ï§n}ˉäÅ’åd­œ@Z'þ=sæwŠæZ‡¡-^?ÞrõúØ…“Ò‹üŠQö·žÜª8ÞO‰Œ^qÈVjb›q:zÎu%ŒÎIDÏ8ù¤ÑrÓV p4´o ]®n!t›Di‚ì)›yôáèj ñ& # péJC7-#vëN/ì×¾Ý0•Ö´Z»¾Z»áPÔ¿³Lf¶Ö.cµ×\_Ã*¦¦ƒtp¸+€äj3µ«E6^q Ütšh†AËW°·e³xÇL·K˜Í ƒY³[F­žü2 •.èW+£áa/Wu­»çx:G)ý2K*GËU­*·Mëú¸ð½º@…Óº”OÊ©*¯b;Id£g#© ï»³E–†¿ë‘Ðg¬ô±x”_ÔbãÞ¤3K­F-%êT5=Õr='thmRÊFk-N#3i[o“Lôåa÷!QùWŠýœ*Pšc6·µz $ÅŽDm·ä6š6áêøu®ä5í–Ï–Ë3ի囊àÞ>Þ˜9ž-/qÄœ¡ÜbŽR}ky[R—¾{Ó(]ÞææcÐvvºh±¿¿¬Ð¢hsùv4¢ëÖéÕ£éІ -eëL´‰öA¥Š1Ô«2•Îôœ±–O.¡µgíz!dqǯ¢±5ãœó*ðù֛ᲧqHYŽÛÂÝdßmZf+ÀØÚ´óÕ´&Iù;¼Ú\$-˜9iÚõin¸Ö/9bI¾L‘æÉ®ž[ÛÞí#o•iŒ%h©ÍKXº6Á…Z¹/ ¦H¯í6³Œ‹¡%ˆ4ËÅРi¤>N»’†9‚ÍÉ¢d_KÝ·qO^u ï·±Øís‹º°Ô‚øÀmç¼kbñðw÷œÄÖ[p )¨ÉC ã÷™ôŽa÷‡L§|Ù1æžÞ11ì–Ù)Ì•µRKrgéfmŒñ”fM-(Îí}f[NÐñ\mkjùö#‹—´2øgVŽ·{{fw‡.ì¾=Ü}b÷ÐηìÔ‘veÜ.»¾µÑ/*jyŽrù šÓ¾x<6P„õ<Óp>õŒ½Í>Ù}»ðTâíîgÕ\4zȈiΆä[k£iL2÷kh ¡{ˆ÷ƒ²-·ñ ÝÔú’g1~.ØÌg¿=Åÿœž’%rs9jàé§™½ ȉ¨Å_ši§þÅëÊ‚»¿çèùA·l‰AÈY6Â~ ÿ.•-8ù÷˜˜CV0ÉË_n|eÊÜ'ÙÙÁtëyH™åö4fæŽBèMEG iõý$á²):}[MZÅ£hG¶WC'?kŠ–áv§wx’â…T-#‰]"ŷЛl9AKõ¯q-VmÛ”„½¬ñŸ(ÒOÑÍP˜\ƒHoy%éôêA¥Z"cš x’…_Šöõ[™Ә¢þŒ#ŽtY®rKÅû{ŒVŒq^dÿ<_[(ÿW߸^Bަ4»ÜpÑs.ú<µ•…I%Šû0SJšÇ”ÜnEµË¦Î7 Ä–j^(4jÙE›ŒQµ–öÿ&ó¸jý;…ŠË%¡}€éö„šíWÏ!(¶º”Ë#õ…΋¡m:Úåà0t :”ìhïiuÉŽN7§º†±q  ±·î &ãº>J=¢¡È=ËM*³TC[]Að±hÂø…¾sƒ‚˜+7¤Ê-”"yÒÐr ¶2Æ u–Y3sŽ|¿çƒJ~5rÔ_³?%E؆+¶mótrþµ3–,B9•0…Úë™"ÐÜG-g:A·š—ÔgG‘׳z•rq¡£.v”êc·.YÂ`zõ!dëq[m†¦èž½í¢.ÌBáÝ›5¶±¾ÆlY§¼g'¥çfXLò²@ÊjkÞk!h_JzËÓ—è‚°Þ¢fö Ž’­jR…ôO¾‹Ï?ºpy•í.ÓÛmv¡yáòü]Ä› u4&ƒÂ²‘«ª{Aeˆ*(K·MQÄ='Ð%u‘° 3Éf髪9)Ú˜2õ&gûš ìYNúu4Aø¸Çÿd››;ÃÉ2{õxðKáFp {ë’AÏg <,ÂÌ¡*?¾^ëXG³èÏE­í)1rêª7!ÙǧK›'üU<,~ªK65û¹%V•„3,œ$Z¤VÆÈÿ.ÑÀ8Pgã­ Ü'J*I„V’›UÐÙ’R« $L¿ÀÑSi†Ê6µ¾èÎmÁßB*ˆÅ…vàÖ´êXè m Y¿6ekõõ5¾¡Üz£ü¬-´lÏd§ ôpÚžgÑØ¤o¶gp J¯ˆ$6»Xc[IßÞ6óÌr&—€ælEÁËp¿Ý9;ìBÕ­„ÛH¹„qûËa58Ä®Øþ$;(¯™Æ¸ò+j=Ô‚†E‘ö«nÏÛwwÎŽ~@víèÏ>û]Ç¢‰»\×>-ËÅ‹·õœ@ùB u¤0rE'KËš¹x°+õµŒ¼×ª é §/ž*T—ÜÓaÑ‰á ¥_Џ¹ìÚp4ŽÁUzB>`’1e£t Uìr…Ix5¬E¦rQD=0›>åE™öZT_¯“”4yC{î^Ì!NS©Yî×OîÛh²ßžt!òÞ§¡ãÒûG|š$ì.#ïL õú]6®~TñyýüÉÝÑEXw¶»“¾è»¯{5‚P™ìudÛ>[ ÿÇZ˜ØI›h½õw9V^XÊŠýý8\û¿±(Rµ­w).%J'¢@@åz,Ê>X#sEQ´H,ˆ TB-ñ®ûÛÆ´ŠOÂå|»|_Óö²¿YúäåAŽÈ½žÞ‚"9•e^qYü‘“ßå¶Áœ6?Pˆ¢´üZðÜâG抽ƒrù¥~º4ÉÓ¦ç·);ÍDWµûDÚʆ8QüËpE¡UZRéYƒz#ìÜTÁ ÊX+ÊÆÕ ãùÔ̓Âü©baŒº>•´=fg¡ B—êf‘125j6‰¤MÌ•%v`)™¬³±s7, %´Ð/”ktÈ.9,H=ëÊ>õŽö5©},æX@?Çÿ3½ˆ–KB4,º¢Õû×®Þÿ/—\ÍnϽŠÞ€ëý:N&Œ,“ È¿ÿiJ:‡ÅR# 4p¯T÷;zPdßjÿá¤?µŽ +÷}ø1»1Šv&ŒÑ竵tDÑeO^BïqhñÎk1Úg-{FcÞ4ŒÆ_={Dx‡4GŸ5>'Šúå~:ºöóp¡j<ú® Ù4×w ¸IØ¿!…=^›Ï=ÌcÈcaï&¶É´Êr÷1 ¯ñAžËÝ£?»(_ò, è ðÙyO¿«WúèWÂðé¹K #OËØ@ÏQƒ¾3äÐ\¡Ôâù¸G:v‡iáøûüùÇ_~û×?~ûóôãoÇoîǰƎб<ÙùßÅÏßå·_Ÿ_üð×/¿š©_Ï?à_ø0¦êÌñnòåçÿâ«kê‹_äg»Øü,¶ÌÙaÙ ¥C,# Õ`™7ÒFÚø7- SåHRHdÞviŒ¶Š&£h E´~´Oqê=,V}õ–²õ8i$¤©÷ã)~¯Ñ£FvÿΠÑ[Šè‘’Á£Ÿ)è;G#Pý²þùH›Y>C^9²lÄ¿JzÙ»5¥ÎsNóÙŸ§#£[QÅžË*ê4_ +F‘lZa½á[Šè-x”Íè‘Þ=oë ãti=‹BëYz÷:ýŽJïß`@=@¬ÕËrnru%2ªbÁ—GŸâyW¬–éóM‰Ü0¶ü]%6åþ» 4ú8Cð{¥P c&s /Š=›ã¦BlôÂq¯.öýJ09\²NvgÖQ3Ã…Àýh{ =–pѤß÷ݪ|†)«ÁdATŸŸèGkÂz4œÐ{~çXÿÓh>ï°–X¼UY-æòì }Aôç;'ýÊwУ*–'+3Eå…:ÌàÔ×äê™5eësEr5|¦l½ìì\¿¥l}ÇÖž/£‰iÉœ¯¿ç’·£GrÈN¯ÞR”FzÊá$WѲµüîæÆPô§'þÞ êtzsÏŒï5eY½PVz<‰KQ·ëü;1¾|&ñQÁãÚ#ð6"7Œ­®hÇNš¦þ{cP…8Ö¾*-fåö#ò7eÜYkõ¢?ù–bÓÚ8+kÒrnò¦(n$»DvG¼¨ßä‹™„äî +±T!ò•L_Æçá@‹Ý«P¨B@Ü³á …ÎFßC(å½°\]첃=J,3%gX¸•ÒJ +£¨¡Y§„”±ýG¯¬‘¥¨7ççLÂÆŠMCÙú–ʬpè-ríb4-…Rf\Dã#FÙP˜ÖûΔ¶(¼~ÿ)a˜ãï•¢’T +#Ûa&/·Ã”ÿ§=ù®FÕz°È§X¢;Zço)6%c"ä˜%KYˆ’cgCïàøC+GJ^*£FIÉ¢Nß÷ÙF #TvA1Jù˜ÁÿºÚ C¡‚;ô!îÓ1•òC{¿¬ù–bsþø°ë+,„’þq<á¶@¯~·v5Ûæë·¸)˜GÒ¿ ÷òùˆõš’Y¾Pȃ½2–¢<~uÄg +u@˜)-JN³jø0Ó]5 0¨–ãü².Ä`¸GÄŠsa¯Tu{–Býfªr:–¢Þ‰Ëî ’†z#gi)ên±ûB|KÙúQ~+­ßRn¡Ñ9Ê;·.@:vv²±°K‡Î ›~÷:†o)”5Ñ_°×¡åÜä* Ê( }˜Äà +ý‘ס£Ü« Ç^gA/É÷{¥pBòEí°Φðµ/}S áŠrê „åêb/j RS&-MÇÓR£T°RUΑ)h&(§ _熙‹Ó\_¥Óßñé/Š=ýc9 ¡ã4zy ZF²ŽxÚ¥>-ÅåÖž£Ö÷ØÇé -øò$å=áFBo7=NúpêSD×{×·O¾èËèÍšg}Ľ\Öß½.‰oµ>ÀxHŒ©—‡Ýy6fÜ2wL¡²‚/7xƒx¦ýE± +书e_,DÉsÉiÎ \B9Ö!zF¸#‹Ú0xñè|Q,ÃIŸMFôÆn*î‚ðÙ£»C¥7%qQ”yozÕYŠ*‰¡Í|K!;eÖo)d׎ãaÊÖ×êœ=~¦(} +Å›Ëe +óuð0…ׯc“)|>:ö™Âç¯ßSø~åÕ}¯”m1r¬Ã¬ñ€ú€üz¹^È{LÏE¦Üœ$r Q&Ï3 Þ/ˆÞPv¡pn„Ç8ïç¥PÊÖçÜæ—Ë'Ák•wù–²õ¥ôçœK‚{å¢äÏ9èË%†R'_ƒ¹[blùë㎫eˆ*¢5ÎSÐWË”}ö=Ñ£aóâî …ï +$dƒôž½¥p, €Œk1w%[tÇ‚OHgM§Ð¹Éw%^£Ö=b"Âù…£D_Ô¯5Wãç÷¸ä1OŒ¿XÆëH` +ù—qh°Ùðm(¬}éH`ù£7–«œppÍ‚S)ÙKÎ7ˆ§³«MÇO­˜&tQ8§Al-ÚRTÎÌEf’ïÖEåäîgÈv¼U¤ÆY +çüŽÇášÔKQ5åõÑ#À|&ç …øÐc¢eãÆ…B535âÑüE¡š‚™ÖÞëb?f:.^Žß@Ôí¦`éÌPÁã²Ö¹x‚Jã5¥"õÍB¸³‘(ü^)¤7±ðóXgÖÇ«HéÔS,¬•bÆa¡ñ\Ï¢¨ÓWcן¹ÝÙòЫOW¼¯l¹«±eÂ[ˆŠÌææ‡ÛHù]ô–¢JÊÓáËÙ%ËòwŸ¨Cm÷‰6’—Þð-…òfÿ`-˜´l—s“«<(£T‚ð Q>ò™eY-Ý©ŽLbP ‚<¢x4ÓâÚÀÔ3…KТP /Õ£¿\KÐqS ¡šbôÂ%H]ìÂI§~|kËö˜Ë>G3v«ŸyŠa’àÊ|Y=¢¥pD©GƒñÊ-„žaBå7“_=“C¾žÉågrêe´¡tåKc[1M(XüM®Î^FmØCCÈÆófY-—‚ˆGØ/‡½\á÷ +á8SG£FíÑ wau#ÐpÜê¦ÞÀY£ìE ™¤ïAÁÍ#C]Чá[ +÷cZ¿z»œíÁ|ws’0-„=~üxXvé¯,…û±ˆ|+5_(ÜÁ®ÀüKƒe)ÔÁ~ —’ŽÉB¨ƒû@/%tÃà~ çä•ϳ÷cÈðÁôcá~L‡S¸ƒ”ô{–Âwœ®œ½¥p, ÑsWBá¦{tÝI…È5Çp‰¼ÑÂ…(ó¶©ŠJ#µålB™)û颴—@zKÙúÒC‰çz.”­O½½¯¢ ”Ij°®AáÓJ/ÒYÊÖ‡ìò宇VŒ]ÊÖûžŸ¸M¡)q¢ðØŽ?ŸCxõˆsäI¡†:œŠ~ç ó\7Âuö%ÍeŽš×â-d뻽œoåBÙ±ãa*é-EU•P^ý~»LQ±ßÃûeØÿ,æËR¨¥LñÊ6RÐã\jö†! +ÿVo¶ž!*Å4göÑäß•Æÿ_i¨ðn‘Gåÿ«ÒTöf1EéSÛ¬o.S˜¯)\™§óX +wN§³Y +—¦xÞïJáÞFëwocS÷6»ôu‡ô"`§‹þä[ +57úxw—a—s“«vžîêct±ƒ{!ìÚy… ƒ{! 2¬$ a¼¾çLQ‹ÑMÀsl{-{Ñ×wé“bÈ­5Óza¹:Ø DôåÉáKNøÂ\¾8»G}}Zi±i›j®cßÐ.½AžÐŠ:ŽcÔá¢èλ0gð,xy-…ž ¬Ç!kIçg)tÑ¡«bŠÒûæÇDBcîù‚¨®„î˜Á>dñ5Q.\¢™†×@ð¢löM£ÍpÏ»š!¦¨'«†å G³lÖPè´:  Ø¸¥¨Gë;Gè3š¡xžÖ¢P³uTÃj©¨VK{TS¶^zZ] LQ½ë×Ôêb`ˆ’M­.b(õìiu-cË¥¥ÕµÀeɳ¥ÕµÀ”½÷ÒÒêZ` +ÕQ LÙúyŠG-0…|§ò¾]óU*)x®…íI˜Aÿ¥3›b§ÜEß5Ô(.Šm1Q¹Q\nU©1„E|!z¼`:ESjªÉù£É çê…[Eì3ùZKáVQUυ­⩷nu53…[Å÷©—VÑV3š¤ò¾~¼8U¤Ïh× Õ*«ß¢Š9”QV/w÷&7ö»BT(ÞOR+QjßÞ•‹“YSöé"¼e»;LQÕÓ|çz.UæÖý®”©ñ¶ô:¬ØFæY£¾ÁU0ºªÿE<¯=>‡‚xSÒˆû¥µž8œüä—‰CpRÞ–Y-¿ãOùmæw]¡è‘ß\ßv¢Âh<«Ñ­qxFu;°m +F(¾õ†o)¢GkáKÿåŠÛ—°ͷ?Z0=¸Õ ‰¾Œ ŸÓwo™±åxÃÂ7±ÚÊ DéñX~¿‹ZÌuê-…ùØyT.µüú®/Þ½ùLýÞ·So)¤?‹)¢–Q?}“x½G/ú9üÐ#†ÌýdÊÖ—K3·L½¥l½ÃñÍbÕöSo)¢‡M÷æË|/S¶I—øLÙz„¦ÔÌú™²õf2ûÃ16DéìRB®Oò­~!c”¿S¯:¡ô‚È×(áôÓKßœü$LøS¾FIŸü….ƒ´öôÞÖ¾F™~×ÿ‰Gû¹7reü]uݶY/3ç×þ­o£z­^Fyýå)XO0ë‘Qæßõò3në×(Ã]ïŮŰfÎâ±ú=3BTu†/£Ì¿ëÿ,ÎXożF·¾ø˜{4ÆS [ú0òøUëŸ3èßJK²?B‘Qæßõþ·ÒÐnç»Fé{ïúèL=ð̹?ëãí|×(­?†[ý¬Qæßõóó­Ö(óïz®ÙÏr»ïk”õùæ'¤ß¤»>“_I¥¼=O~/µªB¥úD8n¥ÅvÖÛ%þ]oø—O®èŽ˜ªGMf®½¾¯ú)Bïñ¼Ø„`Ÿ¢ËÄ¡6ïÜmæ§’ô<ó»-QäÈ+¹µr¤ŒR‘ªÐü9J ]ŸÐý}) ¥ÛWÊÖçæÞ™ŸÂ¦ÜB¶Ûgz:n¯OSo "÷hžÞö¥c´WQVc![Ÿ†Ü—vÔÂüZKQúo0Ó|£ìŽ¡l}B|úÒ®kˆCçn.ÊÖ‡ÞáŽp\Gƒpclµ{Ó{&ffì­Dî_µ+³˜A'ÕAoönP%¨~âF™ú~tHöA7O}MM¨¶ê·Í¡ïIGótaly@[ÒŽæéQúÜägót£0_,SÔò8z§„÷FŸ,A¶\vMÉ/ÒëK~¡°‡ì´¬è $¥”Fï‘`9ø±™ Ô¥S£[^bKe˜QÆå,ý[kfùgˆè{ËSZ3zÕW.˾!Œ™7»y¡ˆ¾·` *œÈãàFNô†²õñ-cÁv4LçBÙú–j«c¦ÀŽÒÔ[Šèñe¹?§}¦õîsê-Eé¿èoì(ÉþŠÒãæ|5§s?e¯¿Æ:õ ŽäEo([ŸJ0ÅÀŒ­Éõséz’ìæÉ ³êØ‘¨-ƒj¡W!®¨?ÏjQ䦴^5Œ]Kx¾¥=5”¸vþУbb²Ýúìò<•ìà“o)[‹ŸU‚êm¢·”­Ÿ+Å—á<}›zK!¾®… E­?ÆY% VN¾­…ýeº.ѯ3zK!½ö† Eê!âscç2·Ø;Û®_)˜)ê]ÿfbð¯´\–¢ÞõìÛ§ß=SÔ»^ßAÂÛìœÈ-„bäÑ—,Ë1%O~ìƒë%•X¯þÅmy³¤ KQ»“2T]7!F³|¡¨Ž´äö™¡îH-eë[y/|KÙÕãBï2ú ^ê6å¢Bdœí- ‚'vaw¯Ah§ZWFðÂÝnW¢ö¥•žU0³;]†PšÅL y«¥Pš=øLÙúèj4«gÈ­ŠCB•O½¨ü¾uêªYY“ª`åµ^©¾#\(”“eÊÖÇ·Dg—)[?S÷±›L¡ìÞ¯3gwÚνÚs˜BÙ}¹éïJ¡ì~x2SLv?™”ÝG¶ >+pÞ¼öÞ2¸¿¼ÄŠ 6KÙú1§ß‚ÏUÞ–A®UfY*¢?Ĭ#‡Ó²‚—ŽgXÈ.œp(Jax* -˜ÍÚò¿õØÉž¦þûª–ǽ•ûzkY +9.*>ǵQòöý0 ¦³? W äÿ—ÒË’ˆÚ{ÿÎT$+/ +ù9*V)~n)”§†}_O?_åç¡åbøL!?Ùu· ÝPÈÐýa +9ú±þå@´ž5ÅQÉüÒ%ýšï¨tú !Cç+–‡¨Ÿ.‡×ÓÏ„ü|Ü¢Ô–gY +ùù¸¤pâõn5òó1ø»(äçc´Nbìü„ 7?&¬Eð9^)ÁŸnNóua|Ü<™ƒ +ùÏïà;üÍöÍúå'ë+¹¹žj +ùí8s~åÚ©¦V0aj0~»(ÌWp¡Ÿk¿ºPxT3\(äÏFo)¬WsáBQs§ô÷áEµæÈãòuëCÈit +rF€Ì)KQs°{—_}Æ9h)*_ÄžÞšuw†Ð³¯ aÈr „§¦þµûžÛÕïÛ¢-Sø6ê_Ë›úç2…ç¦þ¹LánC®¼Ü^³~Õ'jÔ×ú8tOUÛ?ÃPê³2»¡×ØÕ×­wøùXijOÂ=’a)”y wx|H¤²•6cÀBSEØ*N¦…Ðö=o?¾þ±ý ]¶Qȶ ÇA†­¥m¡’a8ËW …l lK g;/ +Ù*žc|kQŒo‡Ë 2®¡‡éÈnž º*ƒË›³ ºŠÐ6®E¡ÖÇ©t6¢õ•Œht ,$žƒö¢Ÿ#~œ"fŸyW. +‘ný åÆ_g{¡€…âg«~™:Ý …FƒÑ[Šè1™ÃxÈâß ë÷j Ñá´¿Šž+§F]ÕÃòRùÕê¹ò»®Rñ{죂Qú쟡ò°ÿýuómåÔ¿iþKåwüU«çÊïºJÖ£P‰f=ò•×sÕ'ÜÌûúWåXé¹ò»®’ùééÐׯ̿ëãˆ4-^ôR9¯Õsåw]%óËÓ¡÷F/_™×c–ÿÁ—ÊïúW¹ÿÝ“ÐéÉÜ/ùÊ÷몘(õ«rÜ/Òsåw]å¶öä[z¯/FΗãwX_·¼¦>L»¨d2!é ˆå"×x†(¯Cù›Å×&RÝpv|M¥gí%ÔášÇr˜¢œºÂIÞJƽ¥¨$0Þ§£1Ýäh!LPK­|2Ž$å}>C‰x娽§O[ÄVWûúЏî…ñ/=œmê‹vÝ‘µ\ +ßαIl–B •˜c– c)[ïñšÊoïVζ(JÒì³Vú÷\¼PÔú[ùú‚wd½¡¨ý)yä§ÑÇÀ]Öo(*á¥Ôƒé{¦l}èEî‰â[ÊÖ»ZÂçºÅõ•Ú,E¥<ïJ2ûÃJU𝽿øQ*\Eé1)Ã#½&Ñ[ŠJIµe³?ÊÖ‡–s#½¥l=Îû=ùs=–²S^=žýp¡PjÓûy¡l}Ér3V?_([Ÿñ˜‰¯>…ZäÁh)Šâ¼8Ò”§ÞRxý{P] j{ªÏ휃 Q»_Ò”¯){l}DÈêç¿P¶>Ï?«Õ–¡(ýsƒŒ—•$þ“¡:¿‡¬½æwel‡Ë¹Œ›…üŠûò×v¸ñV•>Æ<+±b¿§ÞR¶Þ÷û[Aï:1\KQú&©ùVãÔ[ +óaúµY¥¨õ—0fôQÞÊÖïã—º$Ëú eë[«-ÞRD¿—GuÖÖ~ZÊÖûîæ_.5ÍýdÊÖ#8¥/ˆ"ýõ)·…/ñ=˜ Íø—¿dÿÚ^ß¹ yD_ Ý0(N¡’жeþXQ½‰WN:3¸5õÚ ²åo¶†! +ïZˆf癢’)Ì8ÑÉZÊ¿:ÍRþÿNó±Ì¿¬;ÿïNûTçÍbŠÒç2ïô¾¹La¾ž LáÖÔ“‡)ª7S¶&S¸9eæý®•IӻѯŒG“z4ˆ7¿—);#ùÜG:C¥GEn [ŽfJ_#âv‡,O¢dný{¡f˜¥¼$,„ž¨Ô4:øw¥Pb÷¢ú´ò¾¡(}òã s\^¦¨÷DjS¿fCT ­ÑÌB¨W\öï™@Ž÷—lå‰àsÆáÁ!o8Ãà>Èx¦Æ•}-EeÍ›¹·;›Ú¾ùC¿Â޽·#µúbçÈ…¢òH ³Gðè’0,…²8*­×•}-…ùª.µþ”ü7±±3Ë2…÷G5Ã…BYÓè-…õj.\(䡱=¾y'>4§¾èÏñXÑI©HB²› ¯¸Báã ¢Æ2’Mx+ Uް 4õQñ±Ï—"C_žæR2SQhõåɘ¾Þà›SðXŠÝŸ«ï}“&[òˆ¡ÇÙf³÷B¡sð™BéôX>S(ÃÛÕ–KóúØ}¦P?N—)Ì×ÍÃ^¿nN¦ðþœ½o)¼ÿçݲ>_¹u¿+E9ÊñÓû1Ÿæ,î]~—ƒÒ—P‡å|¦(—«˜«ß_ÆT½¥(&ùþ0ô"SLñ-eë]]SÕu'|KQ9ÉËTÝûÃòõq2H,&7Øõü¡_>½¾RNÒýv¡PŽ‹„sÆ$Ûnj¡_gl Ⱦ&áB)IO’ …wGMª …RÑ[ +ëU·](üzuO)Ù>þF¨îýbì¨$<;“y¼N¿ý ‡£ÉÜ·å+¹H%ùf2Û¢(ßB3ç·‚˜–¯ +ù"*-»Å·廽ÆñÚ€÷¬ÑÌæ_k’,…|•ƒk†/ò]T*žVâÓ–Âûys—ßk)êxS˜zÍ·Õ=®ùLë·›:Q@;Ö•™ D…ZÓ‡¿ä&ßÝðw3/—"E’ŸÍ°ÖûÓƒ+ù\@Ô^â¨Ë+ÇÌHùü± ²õ¥§YÁeZge)[Ÿj|Gžæ3Eõfs³ÒT¶åˆOݬgû®åÝïÌÃ/ËÍ}½Ï”í[û[Þ‹ÑÅ zCÙúäjòæt™¢|=·‘ǹ—0})ÚÆ-Mmù´¥PŽ}ˆtÏØ¶(JÿµyîiŽN¦¨˜—ÚÔï»È•3j47*agß¿™Ôe7OŸ8Û ùÚ0¨Æk8sVB!WÄ.×KÆ0½ó‡~¹ÜúJcLlăpºèE?ý[ž …BF¹‹B†<ª¢záB¡”1vù ¾éõËT7\(”ŒÞR8e¨Ùp¡°!n¹º|¥Åùñ±úr=Æžl§¥Ði Æžµ¥(£þÎú‚á™ÎãZ5ÊQŽf=èÙè^>†Ué*t"e…ZíïeŠ2¢Zü·žŽ±!Fj)Êè|šÁ'2òÝq¸1ËçNÈ…‘¥Ã麋q[¼ù?ÂË$ ކ¢Wñ *@ÌçéuÞÛŸRB’»½p8Ä÷+Rh †¾ ,opr{OJ¼½ü‚üŸñµõË*†’ieÑHã󽦘!cf]Iå´iMa=¾¦®¤Îƒz½+áGzÊeP{¦µqÿÞª1§½¢ˆJßUïâ#bÚ»/NJìO®‘ßɪœ×ζ²q”|X1²$nÉúZ¾éç‡Âú‚ùo‘:µz*³¦>¥ØîÒéPl#ÁïPXß¹¥3NL1­u‡ÂzÂÔ×^SDlŽUeîûhŠˆ}•ÕKÙú†WEYÅ/‡1G—ò©ÂZ˜9EìÓ¯µx«?Ûß´Ç>µè¸=Çì¨íÉ­?¿hõÞ]¬: Ãc‹§æHk¢ؘ$Â;G㤖H}Ó{M³g}ÏzKaßÄR1crÁľ[®  #Óœdþ[ÏÖòË©pÆ ÕÖ꫇=T¥?Öç’g˜¿Ükn[¯)âm æ}qÓÇ¥°?C¦°>Žå‡Bye¹Ã°¯%½£V}¼ö¸ û¶¾^ù¾ÍAeEI»æ4d^„3_+Á,ä(±ûÛj?„õnXúHm5‡ÂúšÊä¾ \ +ë[ï£ÐnÉKüF‘Þ|b?%DSX_*šNÒ,¦ÌWÖ§Ôfóƒ>6Ä×ÖkÊÑc@—;„U? ¼ Ý©âPXßq ÊE”Øk¼SÅ¡Ø÷•|Kþ=Ð,ž¯ô¥X½‡²õ5aPï é2br·¸:o¤ñȱCæ1}àÊ ¿î™½Gã5åè~\…ÿŒú6Øb"~ý=AØ®µ –#7[Rt ±zyyK9¥g.·˜ßþ¤V°z" _ßWŒšm¶¾ÏzÞÊžÜú†, £:úsò\¿ªõø²^q’cÅ{ÎbükêxåÒØ=sòoxD”ÐÒs__‹Åì[„•å=Ñ\„p‚èmo%©È¬1ã—­ç6acó$Í"¶õH¿Ð…•õq‰ñ:ø™%†Óß«+‹±¦õ³!‡RÈ,¬B.„€û°y® zB‡KÂÊzl/c@—ÚÑc\ïÂ*ôiäuRbgë#^AZ…>ã–ïI•X¿¯³Œz{OR ñ\'Î9GXÅ玱¯Q7÷8„Uèó\Oæ ò9œ·¢†ðb£xªV@(4øo'RIó½QBK¨ó Çݲ _ÉÄV´Ac†ÈÛvF+'pÆ»Õ|VÖ·¨`µ;¾Áš:¿è³²Q\V¨ÕÚ +¸d ·UØf½.Ï%þ÷gû̆_{×K¡ülLt~ûŸÝµ"VZ¾CRçÝ…¶uæ–¬<8 ïÃO_ ÿú-ÿ GÞ~M{9#gnŠ +ÂrxŽˆ°¬žb!¬ÇÃÇõÀ_Ýt(¬Ç̰_Lò5…õXxæ0w]ßRXþ(÷XʉˆúkXVú½Ü«ZWœ“ÿXË’£·'·^-[ÎÉãÞ’û–³& +«Ög»&~¶¿iåMÒßÖDçäÖkÏØ“ǹßQ—¡ÑÇ{V†õ,˜•{ì$ô¼à•˜Ö,åPSîšêZïÑk +ëf·´¦â1ÖnàPØ—[Àš•CÚ ÔBX^ê»ØÀKöm CL^=¾#¥Ä-CÌa¼1Nrß ¦ ¬O-uw [bÛ_•3å­W–Ÿ%Ž~•Ò¡k†GÏøëÐDÜ=uZ/‚ú[‹Á/ë1›­e*–3+XˆpeÏU­|"Gä¼wG‰×Öv}{Ka}^uz~W ~rJS„~„½k~¥CñøßFéP¼ûÏq¥þµQÎ/CcŒ&5…õžN÷Æ$‚AmdѳUm â—ÅêP„piº7D‡"*,†Ðqo ET]ïn¾¦°>Ž~ïŸÃÖLéͰj±}: ›ç¾^û¾c,5ªØ‘VJM,ˆ˜Q2ÍÝn˜ZÈêïØÁ„£¬bÙRX©gºë”…xx®Sbo¾Kãï:5'¬º; vÔýV–ÂzÌ£«>¢x¤¸åÂòˆ +¶~8`Òª[¯ < $î®0 mµfˆ! +å·©2e ,Ÿé³Þ°b®ìg&R%èÞl)¬Gq¯u½ù ]e-…â|»©§Ò÷ÓZŠ}+™W|µ¾ž­:S°m•U•²š%ë"e!b$Ey©ªHË+êKRx a=6ºÑT•²[¤w,Åêeݱm¾^{?ÎAè­¾2ÙŠ )¡ÇìQõ$k)GM9½»1šk<¾¢°>µV•ÚwÝ´ÖÄIQþd«þÞ€½ª5RÑf)¬ïݳ,ÅúG†›¥°Ð~yæ[ +ëËèT¼YŠ}_éK±z?–r6ÖøØÕæ/‹=HXÕžåœL=^ÛTuôöäÖ«MË9yÜ[}B_ÍQm¬Âúw½ä—_ßÙ“[¯¿×ž<î-¾ý +N´?ÙªïcO¦~`^ožH;y©æ5ª:Ö÷Ðz3øãRX_r‹{Äu¶…õ “ð¿½Â¡°>†Ð×P{ì´õš"š†ð½MÁ¡°¾Ãë¦gIs ¾7Ú×7¾}¨)•?×¢à@¬wÄ¢àPÄë¢èéâÀ×ÑÅÇ׳U';lj,µ–ÂzB•ŒªZŠÈF ùMÕZKÙŽ2©K¹¥Øj"‹­¥Øj%ýc)V/‹§¥ØhóõÚÿí—[["¥ÐÛž¶QçV›U,õWÛ\¶qä©ë®Ùaô3ghësλãc>Í+ö-…õ=Ö¶’”P%·\CXî¬|{ý´ßôä0£ô–$r‘þ`PÅ›÷qºzïÝ„­[Ÿó¯öŽ“„ª€¾‘/¬¨èxÈïö1ãt[Ç`[ù°ÖJ³­ÃJu”Ï9o^ÞqkêqѺõšÂúúì˜8I9Õ×›…õ¯²NG®!,¯…'˜Sþð +béXc\Þw ööXû¨RøCa=aw+ï †ð\Ôõå¿õ3oóÖ/«¸OªDïIJƒÎçjŠpÚðú²XÒwò•È>¨÷ãž"ä¥Îªy­£~rÞcöœä¼« CÞA´÷„*jÆñ¾¢°>´zô”èð5…c¿SŸ~S|Ma} }:nþrØ3˜Ca}δ=Áþ±”£GÅL›î×Bõ«åM-å}Ìí­;8€dM¨–ÁòóÚÜ÷æ@„¾ŽHè}yK±üøÃÈòÑ+Џ>ª.Xˆõ¬;Âòã5)·£¿BÇRŽãXj}=â@]_ûY}˜SÑ räØÂbn»2Å@XÞJÜ!…`_ Ô°¾¤‹úZKá·Â왢múÈÓrVü˜g÷À’VᆶßjCæêпŒ\Ñã_ÎË-É’‡¡;ºÁû±¨Úÿï2#åôDÌ_Gâ>Å5¶,ŸT†PÇNRúÏå×-à©ÐzóŠë«yÚÔj£Û(Eâ¯ë(åܾbz fqz½/¾æîúóu,695tßçI®¯ù Õ©q¦¹üjO%¬x¢ÕyŸ¥üÐz~ñ™râƒ3)–:2ñæG)§zKÎ?ñ¾¶u¦œøÚý<É•ßj`Šq0°ÑqÆ#$La‡Ô#×Ùé¶iù¯e>Ã÷GI&B2Ò°~lÁ +ókìf­ih³¬pR4™›râQ$þ!¤a¦˜ä;?V˜qåÜâ3Å$Ãû!y”ÉN>Q¬}tód¨‡_á ‘·Bx +µ¬N'ˆ Ç©óà´®Bôö˜Ø¿V)0Åd'—Rg|‚‚%ºþ¢áÁ¨NN«+åÄ£ýažo¾RN|Ž£TÇ J¹¿á 1ãTæI_vD¢ HƒÇ³ûüf(³ÅoYؽ»GMaº~QLnz ä{[Y¦ˆìàc¡¬\2Ed‡øL‘™uÝ_)_¥aœVm2EÆÐUË{ Imîr)ƒR4Þ}¡eH¹ORûaØï…’™÷Y_UÙ`ÓAZŒ)Å÷é¤l‹¢ù±÷9ùaþùeö>JÑx{¥h=”AÚ.#—룑ž8–’<´¸ÅHÕ á«®òØ®Ê΢ƒðš\¡â\‹WŠiÞçgÙÛ+D, Nüü×ßÄ„cc­‚„¸”Öbˆ8ÄghÒvme4{™RL)¸6ò†“³&*E¦N|®+œ!êÝïǴñQzø¡s¸ Côöð}aÌ©¿OŠ)äFKà$aÚdºþ¢ü¯ø× î¯2ÓqcßÎ]U`ü0!&¼¥aœ +†q‡fЦòBDFþ쳟“ýÇuãäÙgÿ>)" 8 åø)¦ˆ(xÔ~½uaSŒ.„–»ð™"Â0þ²ën+QX®ô(D¤a$MniØ_uϵ­¨·éQй~u3qÐw“ÎU ë«î}H!”pý^¦è^9*ÒíÍ#UØÕž“Š +X)2…°qzXÅUžLÑüç‘ Éÿúªù¬Ãú±!üG¼Í§RDÛR7|ä³×!µû«¼ÔÆ^²Ç"SD|ïà–¸1ÅH 0¸1UÈ^qåŸM‘|"þ#Ÿû«äçú½JCƒ1Øûþû+»†˜Œ?˜ Ü_Mщq~lne”ÕEǸŠþ¿„»ùW‘ŽÖ¶WfÆ ¯9Œ&BüÙµrÂ{J=?áð•Ë40ädÞÇVÏ”ÿþ,{{…œpÌÔö€2Š1Þ¹áÛ#{]š'a»S…|¯C‘ðR}©¸BÌås›?+Œ9žÖ^F“›R†¾Œ:€­\UÌ“{Ì*…œpŒ†÷ï&ôÔª‚œðg62le|£™q£wåi† +1]#‚ f æ2ÂG/Ú8k~|dŸÛÑÈ8~Cb˜yò*—Y Hžž8@‹ÖHê·J‡ñ­£ÿ¾ æîÃÅ¿"Ê)~AÄ'ãä85¥±ll¥ÛÙňwŽ£÷Ç dt¥ž)2ÜÆÀDs®áÌq¾ãŒQf +/ ãõ{*k¡dˆì·ã_m/ˆÄ`i÷=;!ĦÝlBHQÚ‹ Âxèl¥´Cà•u…˜•r-ôªJù_UÆ”ÿ¿Ê^ëUý¿ªl™ÛTJ‘àjZ¥(ßJ‚R¤*­â(Dέg‘²Œ÷ú@ õ7ñ˯ï¯êoò—_ÿG|üòëRù»bûùæ]¿›ÖB¬¿Ž*wnˆ(âkõ)ܵ°)²{â$¡ÊË-!›"µƒµ”–ÏMQ~ùµm”¢÷/0uëS4?ý»§û/Ц¿üf<õʦˆ¿D8^7SúDTð‘ùvÝ^!"„Wv”"Ëá•}¥ð4¿W!Š·Å#½½­M…hvlí+E“o[K)ò¶«éþ>!º<Øøm¹s·ï¯x”¶M 3ty@`Ìó½<,ˆ.6õ +ÑåáÆ3E–{{…èò€GŸ:ÿ÷ÑåÁÖ¥Bty°u¯Ýа…¶®ûãümÛ*EÖ« + +Ñõ'cðÜë«Âvþåç1úh{XÝʸ¯[»ÉÍPoá@Ì<›Z¤÷¹ÄI‚)H·\.ˆÌfDãAÚ­–›¡› N’o÷,Ü£ÝãŽ8ð*³ j†¶k[ˆ¢Ë‰ÿyﳿõfS”ïqÓÖ–º2E·ÿ+1¸FüEQKí~8Þz¶)’}?o¹âLY&`ð]éOüùŠ^‰=÷øu‚øŒáP½‹ÿqrǯ¿ªñß÷¡xTÆSñøŸ#á}ßæClókªùªæ”R~N°s¤¥lL9ñÍ œÐ‘9×ûª~¦œút.ä2ãcï.¿ñL16#ä÷¿¼¬ndŠÑ¶„þœ')T¿¤“)'¾ÄœÒ<)Á¹½èåÄW7^iœ@>ÚZt™bø(­03á}iK;™b´¼`”Ñ{)ÅN–:;o½äß'…ïÝxSc"KœõƒéSª¶ßÑðãå#”iõS?àÁ¥Z=Éy +ŸK?Ú;•râ¡Ú¸ßˆ‡Ûî«>¥¸,¿‡i@pÒKÍ‹ÏSÿØyFæ`átúÏSÿÍ÷>ã=þCZõO®ÿyRë[ŸJ1úÜúì_{¥˜zö!<ñ-`]zKS?½952Ë~_¦h=¤_lµ¯zcÊW<&b«W= +÷×xù^ãæ3Åz™·°0Ù·SbˆÙj}…&À~/ïð|Õv[LÏOc÷ìßô”Q”ÃZm +óïx¥è}V#ý]_ÇŽŒ\-ÒÝŽç>ÜŽ–â•bƯRûæQÉ´/Ê©}•¢÷IØeg”òŸ|ò³(_÷y„€ãʉÇÖFr¢³5†Ø;µ£R̘¦é½äD)ÇÎ@–z%9QʉOwOr¢c— …SoBàIN”râ}o$&ÊÐj¶bÂŒ¯è#%Ê8ñ*àIJ”bî)I¤%J9Öªá$Ï®®h¥ðZ±î:¶4éuœ`k€Õš¦¥`…xã™râLÈ£%X´mø œxZ +·õù ¬ß‹¿×ã«U1=NàrÂáÐ+aœh—îË+ãØà±÷ܹù€ÛŒ­wî?('ãòz•¿O +ó§ªa¹f†ðõ§ŠhŽ ¿!œœiÂR{M¤B(õã G÷zB…ðÃÎøÜÞÛ „ëæ?œ—Y²õ6„wäÒ<,ÊûM{@È4ç¿UÉC*}¿#b°x ±yù¹½C±yÿqŽC±ïj÷½Q¹}p§±™ðí¸zj:îÂ:èuû–“Ópwü.·-VµÅ§”¦Þß‚¯Û@}ý~ú-ÈØ€*Ok% Ò?ýÜPï(¢Ú];Ü+·m½¬±¶ï¼ÀN… ï@TßgŸO±µu“ +Œ7oÎaˆ'_ÍÐplé?¾¯ ©Ü^n#Ú|ôzŠa3_S-ëÅr鯶CwôlùêåWYïßÇêûQ¡/†¯§¿õ;¿üìèÙòÕÛïeËéÞRôhÐÛïÕÓßúß"êG¼w£ß,>ßùÞXï›b+%•÷{†Ógxo¨_ú¸0Æ¥öVÐÞáס¨>aL¿å)äò¸‡!*/WÓ{ô¨ðåÕˆÊ; +W'¼…¨~¢Æ<«YÈ]ä¢ÉðºêýY(ï o ž¼F˜ß\°ÕÇ’Úãµ\z‰¤(ªÏiägEJaJªYÈ–ú˜ˆPĤ2^½¨| „= ”{ê’É"ú¯¼à_å•[ˆÊ#JRÚRêô } UÆWm|ù=- ®ÉpßÝ\Þ¦¥: –™Z5¾ŠÙYkŒÆõBùw¢1åÿfš¦,‚!´þ‘iú$n:_>SøÙB‘;š‡%ª +_¼…pÑÙS“ ^MÃ|¹nc!ª·ÕÎÖ´‡ÂÞ,G/5dS3±ôåêz=­ÈýZ“Ý‚17½Ã,STŸ0Ú<Ý>Vº‰®P¶ìÇlÓ·›ž.…×—o)ªŸnæóË©ôd^—åë³ÞýÃÖ‹çN—ÂñõõÖÿùÈq–f^KFn7ßðú‘çÙ”B¦¨>ÔчÉ7¦lz\´šÍÕ§Rê[gÂYô†¢újœ¦2Eõ½á§M×eŠè1â¶;ñ-Eõ #·éÒ Q9ÂW’éQy ³Zï3ÄÃk5a +ßqŸéÍ~¦l0ºH4mš)ª·yxºΆ¯þW6§kwèÓ܇)ª¯ØÆªù^¦lEo×)£¶öê-EõØxêCê(ikC0P½¥l÷Ï#=ÃhLÁá?”­: S­”o«¡¯×S®>u»›êÏ·½:3eË·÷6uº-Q¶á DåyŽMíg¿ÆÝ;Laý^Ë™ÂÙãë­÷ç1áæü­-)ðÔòÚÆ–ÍCKo&9"ëY@0Z¬æsÄzs¶ËcÅëa~>é•'TºqUÆÜûÑ ºSg;­ø üü¦ÇO °£<£â•ÞúŠF4sÙNE;„ûŒˆ"V“ð-…ô°¤”Ÿ¹Í¡¼ú®‘åJòýþ¥m ¿z*zµÈ—Šù^Çrº¿úê3üÛâõaሱݷÏã(3O=­=ßµm ‹ç¨$^†sû5R“átî&ß‘B=¾>Ÿ½Ü9ƒÓšÃ•w+ªýã`)å}ßEõ!ãŸÛÒÚlãÕ[ +]¾aÇhO=Ðï—CÐH_˜ÛÄÏè:öûˆÛ?ôp ®Ø¶Óíöø½q[p­"zKÙ¼S¿-F§ÜÇRTÿÞaAÿKS¼c(ć>ÏwÔt(ÛýK‰OšÕ’[ÿò…üKÃ[½¥¨þõÜGÏүȜ.…ã…õ +žN&^rÊñÂúæÄ‹õâévĉ‘ÈÄK(/X +<]M¼„âñ;КÝa„ÂþÉG§Û7¾‹Â3ë®g +ë%2§Kù÷Ž¡ß[.»»ÃˆåËÿ5C—áÌënSº·ñ¬SÊœÇÑ¿qÞÙx…²§ oãYïl<‹BÙ‹³ñ, +ûgzÏ¢P´>z¦h´j*øûœQZ+\9Ô²n“ž±|õx]}ÖìèÅr~~ÕêÙrº·´“gnÎ>³mnúêþcûY†=“IM†Ó»©§³s¬Cº‰§F6d÷ÞËðyVM†Ó»±‹³s¬Cb»êücCY†ÏWZ5NïzÄnÎ>³‰íªÇíǯx†­µÞ Òor¯WÀi¯#´½bô” jI1ýiQ¶ŠÃóâtZgŠêÛ¨-=ST_fýºSTÏŸïMÑ…o)TÁ`m6™F-Eõ¡>&cJCú¥¥H´&æ¯z{1õ&ÒR6~ÊW­…¥·ôÌ+…ï_ð_eá dsÊE¼åÀßñ† ›÷[yë¯î† Q}Gá©·eßõ,Eõ¾‘ÞR¶þ—Úk©#Féß–²eÿLï/ü¡Ls–Âý¯xÓ(ÿiô£×®X~M£°8Ó¨£—N]¼itQxž(Þ4º(̯Þ4º(a[Âz5Y¿,Ÿmƒôl9Ý[Rþ$|¦4yï﬇ӈYÏy_° !6y_ïìsQüÙ–³ϢÐìËàÙgQxöcËøÎ>‹ÂùŽŠ¤Èfø +?x©˜[²©'Báé'¼{ïéRxú‰of.…§Ÿ¯ÞRxúÁ_bn‘áÍRxú ×TJÓPhöG¾¡ïÓ/VVÑìé×ûb +Íþ=Shöÿ܇)4û¯Ì=]Š~oéŽ WàÃöu¦9ñnbÛ½9"ÊÏ-/½.ïÁÖ´RúW}•¶ª§ŽC*!†÷0ëÜNI^0ö¤U˜kïiÀ»r>ôšµO†ª•ÓÂHÉÊÆ+Çÿ¯xw¼¤ø<òÐáê<“Šš uÃN‹V–/˹ÿ$éÙrzWdyC”ZOæ:rúêã¸*.R©ctBlî‚°ÂúvúÊ7K½Šp» Bäè®ÚÂÓÜ¿"2ðQ5ß_šâÑŠ˜ªºöûmH­>µƒ*ï×ìvÊYä²éÛÏïâ5?££Ca>ÊÅÈOët(Ûõ/À­_‹‡CaçD]$ŠèÕo_½¥¾O]<Šè¯êÐÇ£Ÿ2*è©£/#•tëšêøêEõ‰ÚoKAéë¯ÞRT¾ñÜE1½zK‘ÔÄï]›©ù^¦¨¾£z¾CQ}íñ*uûýŠê švýúÇ¡ˆ5tÜu¡à—=žÿ5é¡Êk™µÝ£IgVN^vc½Á[ŠèQÏ18‹üdÐæ¡®!w…[ž½{Ï¥P<÷¾ éC Sÿ=Ýz\´Þ•Œ¶Ð¦ÞRÔËbêúôž¦ÞR¶¾ãæ§wÅIª¾P”>¤Yk8ÁÏ +/µÿV]~õERÑ…¢Î§ä>oEq‹o)[SêÕÔ>S¶]LîŠâ[Šè•j _(ÈŸR–²õÕ;„Ÿó|˜"z7¬¨Í/wúê7V.û¹êÝøªøO=Ýúä˨ó£Þ˜²õ¦ýnï]ä²ås£¸F0/ 2ÄÒÇíéù. µù”ÈHBgsøC$­S3zK!½®µ Eö“³õo’‹£N_îýõY<=&Ä¡ÇÈôéÑJÒçƒLÙz‡ߕГ¢7”Ý'fÃ){€»@¶¼¸a]8²= 2dËc‹ï{AîÇý]![ï»W@r%ä©·”­w'ó«/Ú.êrÇ~V—ƒ¾Ý»ÜñºLáF_F]‰sZ +·!4”íB¡.7¾#:”è-åÆhQâü–rÛ¿GbþGáÎUpÜé„ò—^:<åN—Ÿ1Éù[ +;!ô¸!Á8¡å¢âi*#J`¥»Ïw˜AaÇ࣋+ž †ã~vâf„÷îÕÄu6½¾§€‰)=›Ý{3­œ‹•†«+gi)”– ßR¶>`LkfÿL¹rÌ1KiZ +¥åãÞ®´<îÕ=-¶ÀJ›Ã1Ö(ÇJ³Ãsý™6…Òò¸Òȹg˜]Æ+[ oÇò=ˆAÉ÷øV ùK?“òå[ͤŒ• “ogR¾èÂd0µÀ”­ï9”¯ +d²±¥Gé}Ž„,}ê-Eí¿U—?H%Éþ-EOɽ}SÜâ[ÊÖǔș²õ®—ùËšo)¢ÇݬËÃ\_å`)[,=-rŸS(½/ƒ™D&•9Ð~®úé×Sš„ŽzcŠUFáöÞEn!4 åq$ˆ„Ǭ² D—äñ»2h:Œ„ |6Ú§B“Ñ[ +ëU­](²Ÿø4ᨒöt{éC!ö×—å)¥µŽÿ1ϳdÉëS°iцÁ¦ص7¦ßŸRzêÓ×»a +ûf*Ž9Óçýˆ£âá×Á§PØô1dÀ°ƒñe¡ÜøŽíí …÷ß`NÙeâ6òMLvÿBùK/Æ/OÙøÛSaÙÅ?ëŲ1À²£1~¡°ñ£®`ÙÍ¿PØøÛÃ[MÝRØø1žÀ²«1~¡°ñ£œ‹DH¦°ñëòg +ÿÉ·6~ü2,;ã·ümüú|˜Âf…/ NÆ í~®ze>ò”_×SÈšQ¸øÏã·å¶7Úñák0Ö,¢cÃðlû²Â`ã×fB>íU a#?õ–ÂzUk +ø2<{ g½`¢POÕ¬ˆ‡cÍ¡µ(ßRx È^¬¬I×PxX„¾&WÌ@!O¾¥¨k¾Ù¹KÙGíùwůÚgŠÒçïÖ¡½¹4½„)J3ò¯>ã’Ê|i)jÿýë‚8sV½¡ðÀ˜FbIkÜ5uþ©Ï_Æàä<-E}_çç/;¸Œœ§¥¨úqíuüUÚ dç’žÂûa É°%)ŸÂÉuxËð»cDž¯«Ÿ)Üy˃f[Do)ÜÙ3º'¡prÈèi9¿¥Üøù’„ÂûϾŠc~þOr@ÃT“Ù¿PþÒKr§œPÁ—‘‘õÒóQÁ9¦5r +'‡ô,Hg·N Ã'¡prз‘)œôma +'}™ÂÉáä[ +'ü2z¾ð-…“ƒ>¦p·Óî¹›©ÝÏU¯º—uÏÝôu½1…z; +Mß[m{Ÿß‚Ãd\Ø-?šWçm%á“ÑNÅΧÞRX¯*íBÙ>ž¼¿DüUÛêë%ôò> pZÝ×Q²µz¤¯[Šês®ô®D¼™¿¥ì>êp\ߊ‡GJ›3jë—5¦‰'ÓqWááìê »Ç]…CƒŠêÒ çû®$Ô`6ÛÊ_úÔÓÔOÕ~â{C±ár<–B©+³•lÇ@”¼bV°4‚PF‚¼ÀE–Ü@ÔéûîÒ»’Ö|ÆÊÆa|)Ì`å\Qc=U­:µf¶Ã’ë݃ äùR†ºŠvß§SHQú„†ù­ ‰$3.ŠêµÑá0eë]ËÓ›µÞRvoiýíëf?–²õDý[)2U\(Ի⛥¾!öBÙú”ßÄ2¾‹äŒ eëcÏó;";Iå–¢øxŸ¯L0¤<õ–ÂûǤˆ"xQǃÐþµÒˆ^çÍö'D~I³È3z¾à-d]VÎZ¾P¶?Ûmí3EåŒNŸçá%øXŠªþæNÓ;ü®”}Õc.cFƒ“Loþ¼êãé1ŽãÊevŠ¢è-Eô{ºŠOƽë±¥Oa’šosJ` +ó‘Y*úƒè Eí¿„^^}\3&S¶>y?L2¿âWŠšêZm•ô–¢fÌ<þý®`ÞûÇyyãÚ’#AÔŸUô +¨…Ýs–òöïv°Š"QŒ[Œ{.EŠÈuŸL9úÞßyššö}2å̼.•gþÁ/ÑûÔ3ÅðK|^ƒ.æD¿@”Žñ>‡%'ˆî÷² „_”£ÏþñW4+åOúPÂÔßÑ ×çÒŠ[ ë¸L1çíuê}Ž Ï#ïù±[#lao–G%ˆ‘‡4c­À=-9CÌî[uo&Ô¤ºôD1·Sòè÷Wì+åè±Å^)ö•rô®¯,µ|¦œ¡Õ·jàŸá¦ãÔ3åèáYfÿ>÷£ãÉCl\Û¶‡—ý|ê)”ÚwïËŒómJ1®­…ô†mï}™0†ÈÈ‚•1kD ˆÐm—S†Ù|JRH¢wcë”BÄ“ž)ª7±öA‡Û*½[mz £íõùvg‡Š.¶å¶›" ú +áê‹L1} VÝ?+ ¼ÜiS¤/bÅ£h´Õ·ˆ¢üòÓ\JÔ7E÷_~2’ÈQô~ÊOh±{Úÿ¢èýäkMä6EúèÐã}3Ýÿ¢ˆÇ#>SÄÁ_ûW +»¼ëzbŠÒG»®_ 2¯\¯«ÅÛèQŠìÞ§Bôrîà'ˆÞý[ Ñ·]Y÷ûI9u¼„ÚÞ(ÄœšÖ4ç\Á|5®&—ð +¹4aHa—ŒrMuSíS +Õþ*M+õ=Ý…ðCÿV`,DÔ÷»Gl†ô¬Ô÷zUñÅø`Ÿ0P„´ˆñ‚¨îáwœ3ÙwRˆ”|Ò3Eõæa?(:Úàˆ%ódà°ýÞ?*Vf’tW´ÑÁr$s» Ú†˜¤Êe­$ߨamŠÉÙî]zVrwa4¢ÈØê~ZvÏSqzãü‡çöWIØ¡{l³µº +1¤à`¥ÄàÚM_)8XANûxœ Ñ»‡ùÛ÷»àlŠ}7Ÿ)&rFÙ>S¤Ùb%ÆT·Y й+?)_ú ÿʇäFNÌ«9oì\É´ŸE1÷‰)Í?z”Œ”ïónÊѧžæJAæ®÷bÊч›àb‚³¹¹ÒLï'Èé¾öÑhÆ»ûÑCÞ~Ò£{Æ?†‹d§¸jmJÑ!q‚Š·SÌP‰Âø¾{εrÅèKož¢M)_ü“êJÑý#®BvYøw²c ônÖ°†îÄû_”?éC Sÿ~5c®K³WØ ²ÆP¢˜ó¢½úœc^c%S޾c²x‹$Üqkë¼D1úæ?;Œ¡uê™böߪËoxb¦Úz¢˜û)¹ÏÈ-ð•kÿD9z8‚Ç÷ÙìRÊÑ»þ 7Ÿ)Ç®µúšzü³Cá˜z¦=ºøìQç~”¢£%^æÃñ~>õfT\_Å]ñ¦vIWqVˆX0$F &µy/ MaŸè°›!ì*&Ñ»±µJ!â©HÏõ`&Ö>(Ú©aE$«ó¢>µ£‡/פ2‹|ˆþš³˜¢¹gŒXË”‹˜„‹Es+èn©Q..ŠäâØ¢<ܹ¸)’‹×þ•"¹H|¦H.ŽFÅ;…rÑÞR4~àî‘“öc^Þœ×|í°|9X§7 i÷$2:ôøês»œzÎ\©(ËY1Å8™þtñè†{Ü®œ)⬠iäÔï'ÅèQÜ_}†œØ¦'VãèúX©ÈÔ°ôD9ûoãøcÍÙocH#/.‹ˆ~^ôïÄølØ£úÊ}më6"¯5H®„eĘbŒØûŽÐ—]º_kSNt–0œÓx—‡™æXápÞ`¾g’Z£Ó*D*3VN²àkÁÉÁvÂ+;YܰmwPl²»ñÿü”™ßOÊÑÇžçN[¨e% S )î`þ hqFX!ƒãâåè ‚ë ó +ËïýoÊÑc }Z>md—)çþýˆóû½>(Gÿíü¾J1­ÌÙ¢p¢ïNa~óÒ3eé1ß–þ¼|3Å|'ïþ*á¿#ë÷“Âá|á%Æ€¯M¼KóŽqSÊk{âÊâ•rô½›O« ýi²´¦˜h£<úý¤¼úÒñîÄ_±á6§Õh­é[ÌWÖ‡ŽQ+ƒÿEyõ‡ô­?__ýÿ÷÷_ÿùG€º¹a +endstream endobj 999 0 obj <>/Border[0 0 0]/OC 1001 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1000 0 obj <> endobj 1001 0 obj <> endobj 977 0 obj <>/Border[0 0 0]/OC 1003 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1002 0 obj <> endobj 1003 0 obj <> endobj 27 0 obj <>]>>/K[0 42 0 R 214 0 R 703 0 R 51 0 R 48 0 R 358 0 R 706 0 R 729 0 R 45 0 R]/P 25 0 R/Pg 978 0 R/S/Package>> endobj 42 0 obj <>]>>/K[4 43 0 R]/P 27 0 R/Pg 978 0 R/S/A3SIZE_METRIC>> endobj 51 0 obj <>]>>/K[13 52 0 R]/P 27 0 R/Pg 978 0 R/S/CNHDR1X2H207>> endobj 48 0 obj <>]>>/K[10 49 0 R 72 0 R 58 0 R 66 0 R 62 0 R 56 0 R 68 0 R]/P 27 0 R/Pg 978 0 R/S/CNKEY5001TP>> endobj 358 0 obj <>]>>/K[74 359 0 R]/P 27 0 R/Pg 981 0 R/S/MRHT-692-1232>> endobj 45 0 obj <>]>>/K[7 60 0 R 46 0 R 54 0 R 70 0 R 64 0 R]/P 27 0 R/Pg 978 0 R/S/SWSML646W228H104>> endobj 60 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[22 657 0 R 59 0 R 281 0 R 206 0 R]/P 45 0 R/Pg 978 0 R/S/S1>> endobj 46 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[8 633 0 R 44 0 R 279 0 R 200 0 R]/P 45 0 R/Pg 978 0 R/S/S2>> endobj 54 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[16 637 0 R 53 0 R 280 0 R 203 0 R]/P 45 0 R/Pg 978 0 R/S/S3>> endobj 70 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[32 700 0 R 69 0 R 283 0 R 211 0 R]/P 45 0 R/Pg 978 0 R/S/S4>> endobj 64 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[26 674 0 R 63 0 R 282 0 R 208 0 R]/P 45 0 R/Pg 978 0 R/S/S5>> endobj 63 0 obj <>]>>/K 25/P 64 0 R/Pg 978 0 R/S/assy1>> endobj 282 0 obj <>]>>/K 66/P 64 0 R/Pg 980 0 R/S/l1_primary>> endobj 208 0 obj <>]>>/K 8/P 64 0 R/Pg 974 0 R/S/silk_prm>> endobj 1007 0 obj (218-12LPST) endobj 1006 0 obj (SWSML646W228H104) endobj 1004 0 obj (SWSPST24P_SM-218-12LPST,E022324,SWSML646W228H104-\(\),SWSML646W228H104) endobj 1011 0 obj (\(7450.00, 4850.00\), 270.00) endobj 69 0 obj <>]>>/K 31/P 70 0 R/Pg 978 0 R/S/assy1>> endobj 283 0 obj <>]>>/K 67/P 70 0 R/Pg 980 0 R/S/l1_primary>> endobj 211 0 obj <>]>>/K 11/P 70 0 R/Pg 974 0 R/S/silk_prm>> endobj 1010 0 obj (\(7875.00, 4850.00\), 270.00) endobj 53 0 obj <>]>>/K 15/P 54 0 R/Pg 978 0 R/S/assy1>> endobj 280 0 obj <>]>>/K 64/P 54 0 R/Pg 980 0 R/S/l1_primary>> endobj 203 0 obj <>]>>/K 3/P 54 0 R/Pg 974 0 R/S/silk_prm>> endobj 1009 0 obj (\(6775.00, 4850.00\), 270.00) endobj 44 0 obj <>]>>/K 6/P 46 0 R/Pg 978 0 R/S/assy1>> endobj 279 0 obj <>]>>/K 63/P 46 0 R/Pg 980 0 R/S/l1_primary>> endobj 200 0 obj <>]>>/K 0/P 46 0 R/Pg 974 0 R/S/silk_prm>> endobj 1008 0 obj (\(6350.00, 4850.00\), 270.00) endobj 59 0 obj <>]>>/K 21/P 60 0 R/Pg 978 0 R/S/assy1>> endobj 281 0 obj <>]>>/K 65/P 60 0 R/Pg 980 0 R/S/l1_primary>> endobj 206 0 obj <>]>>/K 6/P 60 0 R/Pg 974 0 R/S/silk_prm>> endobj 1005 0 obj (\(7100.00, 4275.00\), 0.00) endobj 359 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[75 659 0 R 357 0 R 360 0 R]/P 358 0 R/Pg 981 0 R/S/M1>> endobj 357 0 obj <>]>>/K 73/P 359 0 R/Pg 981 0 R/S/l2_secondary>> endobj 360 0 obj <>]>>/K 0/P 359 0 R/Pg 937 0 R/S/silk_sec>> endobj 1015 0 obj (RHT-692-1232) endobj 1014 0 obj (MRHT-692-1232) endobj 1012 0 obj (MODUSB5P_4PSHLD_SM-RHT-692-1232,E032007,MRHT-692-1232-MRHT-692-1232) endobj 1013 0 obj (\(7100.00, 5556.25\), 180.00) endobj 49 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[11 634 0 R 47 0 R 201 0 R]/P 48 0 R/Pg 978 0 R/S/F+>> endobj 72 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[34 701 0 R 71 0 R 212 0 R]/P 48 0 R/Pg 978 0 R/S/F->> endobj 58 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[20 651 0 R 57 0 R 205 0 R]/P 48 0 R/Pg 978 0 R/S/S+>> endobj 66 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[28 687 0 R 65 0 R 210 0 R]/P 48 0 R/Pg 978 0 R/S/S->> endobj 62 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[24 666 0 R 61 0 R 207 0 R]/P 48 0 R/Pg 978 0 R/S/TP1>> endobj 56 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[18 639 0 R 55 0 R 204 0 R]/P 48 0 R/Pg 978 0 R/S/ZB+>> endobj 68 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[30 675 0 R 67 0 R 209 0 R]/P 48 0 R/Pg 978 0 R/S/ZB->> endobj 67 0 obj <>]>>/K 29/P 68 0 R/Pg 978 0 R/S/assy1>> endobj 209 0 obj <>]>>/K 9/P 68 0 R/Pg 974 0 R/S/silk_prm>> endobj 1018 0 obj (CNKEY5001TP) endobj 1016 0 obj (CNTP1P_TH-RED,E019485,CNKEY5001TP-CNKEY5001TP) endobj 1024 0 obj (\(7525.00, 4375.00\), 0.00) endobj 55 0 obj <>]>>/K 17/P 56 0 R/Pg 978 0 R/S/assy1>> endobj 204 0 obj <>]>>/K 4/P 56 0 R/Pg 974 0 R/S/silk_prm>> endobj 1023 0 obj (\(6675.00, 4375.00\), 0.00) endobj 61 0 obj <>]>>/K 23/P 62 0 R/Pg 978 0 R/S/assy1>> endobj 207 0 obj <>]>>/K 7/P 62 0 R/Pg 974 0 R/S/silk_prm>> endobj 1022 0 obj (\(7112.50, 5125.00\), 0.00) endobj 65 0 obj <>]>>/K 27/P 66 0 R/Pg 978 0 R/S/assy1>> endobj 210 0 obj <>]>>/K 10/P 66 0 R/Pg 974 0 R/S/silk_prm>> endobj 1021 0 obj (\(7500.00, 5275.00\), 0.00) endobj 57 0 obj <>]>>/K 19/P 58 0 R/Pg 978 0 R/S/assy1>> endobj 205 0 obj <>]>>/K 5/P 58 0 R/Pg 974 0 R/S/silk_prm>> endobj 1020 0 obj (\(6750.00, 5275.00\), 0.00) endobj 71 0 obj <>]>>/K 33/P 72 0 R/Pg 978 0 R/S/assy1>> endobj 212 0 obj <>]>>/K 12/P 72 0 R/Pg 974 0 R/S/silk_prm>> endobj 1019 0 obj (\(7825.00, 5275.00\), 0.00) endobj 47 0 obj <>]>>/K 9/P 49 0 R/Pg 978 0 R/S/assy1>> endobj 201 0 obj <>]>>/K 1/P 49 0 R/Pg 974 0 R/S/silk_prm>> endobj 1017 0 obj (\(6400.00, 5275.00\), 0.00) endobj 52 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[14 635 0 R 50 0 R 202 0 R]/P 51 0 R/Pg 978 0 R/S/P1>> endobj 50 0 obj <>]>>/K 12/P 52 0 R/Pg 978 0 R/S/assy1>> endobj 202 0 obj <>]>>/K 2/P 52 0 R/Pg 974 0 R/S/silk_prm>> endobj 1028 0 obj (M22-2010205) endobj 1027 0 obj (CNHDR1X2H207) endobj 1025 0 obj (CN2P_TH-M22-2010205,E023091,CNHDR1X2H207-CNHDR1X2H207) endobj 1026 0 obj (\(6625.00, 4250.00\), 0.00) endobj 43 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[5 41 0 R 73 0 R]/P 42 0 R/Pg 978 0 R/S/Mechaincal>> endobj 41 0 obj <>]>>/K 3/P 43 0 R/Pg 978 0 R/S/assy1>> endobj 73 0 obj <>]>>/K 0/P 43 0 R/Pg 979 0 R/S/fab1>> endobj 1030 0 obj (A3SIZE_METRIC) endobj 972 0 obj (Mechaincal) endobj 1029 0 obj (\(2400.00, -1600.00\), 0.00) endobj 213 0 obj <>]>>/K 13/P 215 0 R/Pg 974 0 R/S/silk_prm>> endobj 973 0 obj (ADILOGO_537X150) endobj 971 0 obj (\(7775.00, 4175.00\), 0.00) endobj 919 0 obj (\(7375.00, 5225.00\), 360.00) endobj 918 0 obj (\(7450.00, 5125.00\), 360.00) endobj 917 0 obj (\(7450.00, 4875.00\), 360.00) endobj 916 0 obj (\(7450.00, 4925.00\), 180.00) endobj 914 0 obj (\(7450.00, 4975.00\), 360.00) endobj 913 0 obj (\(7450.00, 5025.00\), 180.00) endobj 912 0 obj (\(7450.00, 5075.00\), 180.00) endobj 911 0 obj (\(7450.00, 4625.00\), 360.00) endobj 910 0 obj (\(7450.00, 4675.00\), 180.00) endobj 909 0 obj (\(7450.00, 4725.00\), 180.00) endobj 908 0 obj (\(7450.00, 4775.00\), 360.00) endobj 907 0 obj (\(7450.00, 4825.00\), 180.00) endobj 906 0 obj (\(7450.00, 4575.00\), 360.00) endobj 905 0 obj (\(7375.00, 4275.00\), 270.00) endobj 904 0 obj (\(7325.00, 4275.00\), 270.00) endobj 903 0 obj (\(7275.00, 4275.00\), 90.00) endobj 900 0 obj (RES_SM-510,E015511,1/16W,1,R0402-\(\),R0402) endobj 901 0 obj (\(7025.00, 4275.00\), 90.00) endobj 899 0 obj (\(7225.00, 4275.00\), 90.00) endobj 897 0 obj (\(7175.00, 4275.00\), 270.00) endobj 895 0 obj (\(7125.00, 4275.00\), 90.00) endobj 893 0 obj (\(7075.00, 4275.00\), 270.00) endobj 891 0 obj (\(6875.00, 5225.00\), 180.00) endobj 890 0 obj (\(6775.00, 5125.00\), 360.00) endobj 887 0 obj (RES_SM-4.22MEG,E026640,1/16W,1,R0402-\(R0402L\),R0402) endobj 889 0 obj (\(6775.00, 4875.00\), 360.00) endobj 888 0 obj (\(6775.00, 4925.00\), 180.00) endobj 886 0 obj (\(6775.00, 4975.00\), 360.00) endobj 885 0 obj (\(6775.00, 5025.00\), 180.00) endobj 884 0 obj (\(6775.00, 5075.00\), 180.00) endobj 883 0 obj (\(6775.00, 4625.00\), 360.00) endobj 881 0 obj (RES_SM-300K,E030120,1/10W,0.1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 882 0 obj (\(6775.00, 4675.00\), 180.00) endobj 879 0 obj (RES_SM-300K,E030120,1/10W,0.1,R0402-\(R0402L\),R0402) endobj 880 0 obj (\(6775.00, 4725.00\), 180.00) endobj 877 0 obj (RES_SM-1MEG,E020373,1/16W,0.5,R0402-\(R0402L\),R0402) endobj 878 0 obj (\(6775.00, 4775.00\), 360.00) endobj 875 0 obj (RES_SM-1.43M,E028555,1/16W,1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 876 0 obj (\(6775.00, 4825.00\), 180.00) endobj 874 0 obj (\(6775.00, 4575.00\), 360.00) endobj 872 0 obj (RES_SM-340,E031767,1/16W,0.1,R0402-R0402) endobj 873 0 obj (\(6975.00, 4275.00\), 270.00) endobj 870 0 obj (RES_SM-300,E019551,1/16W,1,R0402-R0402) endobj 871 0 obj (\(6925.00, 4275.00\), 90.00) endobj 869 0 obj (\(6875.00, 4275.00\), 90.00) endobj 868 0 obj (\(6825.00, 4275.00\), 270.00) endobj 867 0 obj (\(6550.00, 5225.00\), 180.00) endobj 865 0 obj (\(6350.00, 5125.00\), 360.00) endobj 862 0 obj (RES_SM-23.7K,E023711,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 863 0 obj (\(6350.00, 4875.00\), 360.00) endobj 860 0 obj (RES_SM-10K,E028323,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 861 0 obj (\(6350.00, 4925.00\), 180.00) endobj 859 0 obj (\(6350.00, 4975.00\), 360.00) endobj 857 0 obj (\(6350.00, 5025.00\), 180.00) endobj 855 0 obj (\(6350.00, 5075.00\), 180.00) endobj 853 0 obj (\(6350.00, 4625.00\), 360.00) endobj 850 0 obj (RES_SM-200K,E004033,1/16W,1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 851 0 obj (\(6350.00, 4675.00\), 180.00) endobj 848 0 obj (RES_SM-100K,E025813,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 849 0 obj (\(6350.00, 4725.00\), 180.00) endobj 846 0 obj (RES_SM-42.2K,E028647,1/16W,0.1,R0402-\(R0402L\),R0402) endobj 847 0 obj (\(6350.00, 4775.00\), 360.00) endobj 844 0 obj (RES_SM-42.2K,E028647,1/16W,0.1,R0402-\(R0402L,R0402L_ALT\),R0402) endobj 845 0 obj (\(6350.00, 4825.00\), 180.00) endobj 839 0 obj (\(6350.00, 4575.00\), 360.00) endobj 197 0 obj <>]>><>]>>]/K[124 699 0 R 196 0 R 278 0 R 345 0 R 423 0 R 480 0 R 552 0 R 608 0 R]/P 28 0 R/Pg 979 0 R/S/F->> endobj 28 0 obj <>]>>/K[1 327 0 R 97 0 R 197 0 R 113 0 R 161 0 R 141 0 R 147 0 R 149 0 R 163 0 R 75 0 R 117 0 R 115 0 R 119 0 R 135 0 R 143 0 R 137 0 R 145 0 R 139 0 R 77 0 R 79 0 R 81 0 R 99 0 R 89 0 R 91 0 R 93 0 R 95 0 R 83 0 R 85 0 R 87 0 R 121 0 R 103 0 R 123 0 R 133 0 R 109 0 R 127 0 R 111 0 R 129 0 R 105 0 R 125 0 R 107 0 R 177 0 R 179 0 R 181 0 R 199 0 R 189 0 R 191 0 R 193 0 R 195 0 R 183 0 R 185 0 R 187 0 R 165 0 R 151 0 R 167 0 R 175 0 R 157 0 R 171 0 R 159 0 R 173 0 R 153 0 R 169 0 R 155 0 R 101 0 R 329 0 R 317 0 R 325 0 R 131 0 R 304 0 R]/P 25 0 R/Pg 978 0 R/S/Net>> endobj 327 0 obj <>]>>/K[43 668 0 R 326 0 R 463 0 R 591 0 R]/P 28 0 R/Pg 981 0 R/S/DUMMY>> endobj 97 0 obj <>]>><>]>>]/K[24 631 0 R 96 0 R 227 0 R 296 0 R 372 0 R 436 0 R 503 0 R 565 0 R]/P 28 0 R/Pg 979 0 R/S/F+>> endobj 113 0 obj <>]>><>]>>]/K[40 650 0 R 112 0 R 241 0 R 305 0 R 386 0 R 454 0 R 516 0 R 583 0 R]/P 28 0 R/Pg 979 0 R/S/S+>> endobj 161 0 obj <>]>><>]>>]/K[88 686 0 R 160 0 R 266 0 R 344 0 R 411 0 R 479 0 R 540 0 R 607 0 R]/P 28 0 R/Pg 979 0 R/S/S->> endobj 141 0 obj <>]>><>]>>]/K[68 665 0 R 140 0 R 251 0 R 323 0 R 396 0 R 461 0 R 525 0 R 589 0 R]/P 28 0 R/Pg 979 0 R/S/S1_10A>> endobj 147 0 obj <>]>><>]>>]/K[74 670 0 R 146 0 R 253 0 R 330 0 R 398 0 R 465 0 R 527 0 R 593 0 R]/P 28 0 R/Pg 979 0 R/S/S1_10B>> endobj 149 0 obj <>]>><>]>>]/K[76 671 0 R 148 0 R 252 0 R 331 0 R 397 0 R 466 0 R 526 0 R 594 0 R]/P 28 0 R/Pg 979 0 R/S/S1_11B>> endobj 163 0 obj <>]>><>]>>]/K[90 672 0 R 162 0 R 254 0 R 332 0 R 399 0 R 467 0 R 528 0 R 595 0 R]/P 28 0 R/Pg 979 0 R/S/S1_12B>> endobj 75 0 obj <>]>><>]>>]/K[2 632 0 R 74 0 R 228 0 R 284 0 R 374 0 R 424 0 R 504 0 R 553 0 R]/P 28 0 R/Pg 979 0 R/S/S1_1A>> endobj 117 0 obj <>]>><>]>>]/K[44 653 0 R 116 0 R 244 0 R 306 0 R 389 0 R 439 0 R 519 0 R 568 0 R]/P 28 0 R/Pg 979 0 R/S/S1_1B>> endobj 115 0 obj <>]>><>]>>]/K[42 654 0 R 114 0 R 243 0 R 307 0 R 388 0 R 440 0 R 518 0 R 569 0 R]/P 28 0 R/Pg 979 0 R/S/S1_2B>> endobj 119 0 obj <>]>><>]>>]/K[46 655 0 R 118 0 R 242 0 R 308 0 R 387 0 R 441 0 R 517 0 R 570 0 R]/P 28 0 R/Pg 979 0 R/S/S1_3B>> endobj 135 0 obj <>]>><>]>>]/K[62 656 0 R 134 0 R 245 0 R 309 0 R 390 0 R 442 0 R 520 0 R 571 0 R]/P 28 0 R/Pg 979 0 R/S/S1_4B>> endobj 143 0 obj <>]>><>]>>]/K[70 662 0 R 142 0 R 250 0 R 320 0 R 395 0 R 458 0 R 524 0 R 586 0 R]/P 28 0 R/Pg 979 0 R/S/S1_5B>> endobj 137 0 obj <>]>><>]>>]/K[64 661 0 R 136 0 R 249 0 R 319 0 R 394 0 R 457 0 R 523 0 R 585 0 R]/P 28 0 R/Pg 979 0 R/S/S1_6B>> endobj 145 0 obj <>]>><>]>>]/K[72 663 0 R 144 0 R 248 0 R 321 0 R 393 0 R 459 0 R 522 0 R 587 0 R]/P 28 0 R/Pg 979 0 R/S/S1_7B>> endobj 139 0 obj <>]>><>]>>]/K[66 664 0 R 138 0 R 247 0 R 322 0 R 392 0 R 460 0 R 521 0 R 588 0 R]/P 28 0 R/Pg 979 0 R/S/S1_8B>> endobj 77 0 obj <>]>><>]>>]/K[4 622 0 R 76 0 R 218 0 R 289 0 R 363 0 R 429 0 R 494 0 R 558 0 R]/P 28 0 R/Pg 979 0 R/S/S2_10A>> endobj 79 0 obj <>]>><>]>>]/K[6 621 0 R 78 0 R 217 0 R 290 0 R 362 0 R 430 0 R 493 0 R 559 0 R]/P 28 0 R/Pg 979 0 R/S/S2_10B>> endobj 81 0 obj <>]>><>]>>]/K[8 620 0 R 80 0 R 216 0 R 285 0 R 361 0 R 425 0 R 492 0 R 554 0 R]/P 28 0 R/Pg 979 0 R/S/S2_11B>> endobj 99 0 obj <>]>><>]>>]/K[26 630 0 R 98 0 R 226 0 R 291 0 R 371 0 R 431 0 R 502 0 R 560 0 R]/P 28 0 R/Pg 979 0 R/S/S2_1B>> endobj 89 0 obj <>]>><>]>>]/K[16 629 0 R 88 0 R 225 0 R 292 0 R 370 0 R 432 0 R 501 0 R 561 0 R]/P 28 0 R/Pg 979 0 R/S/S2_2B>> endobj 91 0 obj <>]>><>]>>]/K[18 628 0 R 90 0 R 224 0 R 293 0 R 369 0 R 433 0 R 500 0 R 562 0 R]/P 28 0 R/Pg 979 0 R/S/S2_3B>> endobj 93 0 obj <>]>><>]>>]/K[20 627 0 R 92 0 R 223 0 R 294 0 R 368 0 R 434 0 R 499 0 R 563 0 R]/P 28 0 R/Pg 979 0 R/S/S2_4B>> endobj 95 0 obj <>]>><>]>>]/K[22 626 0 R 94 0 R 222 0 R 295 0 R 367 0 R 435 0 R 498 0 R 564 0 R]/P 28 0 R/Pg 979 0 R/S/S2_5B>> endobj 83 0 obj <>]>><>]>>]/K[10 625 0 R 82 0 R 221 0 R 287 0 R 366 0 R 427 0 R 497 0 R 556 0 R]/P 28 0 R/Pg 979 0 R/S/S2_6B>> endobj 85 0 obj <>]>><>]>>]/K[12 624 0 R 84 0 R 220 0 R 286 0 R 365 0 R 426 0 R 496 0 R 555 0 R]/P 28 0 R/Pg 979 0 R/S/S2_7B>> endobj 87 0 obj <>]>><>]>>]/K[14 623 0 R 86 0 R 219 0 R 288 0 R 364 0 R 428 0 R 495 0 R 557 0 R]/P 28 0 R/Pg 979 0 R/S/S2_8B>> endobj 121 0 obj <>]>><>]>>]/K[48 641 0 R 120 0 R 232 0 R 312 0 R 377 0 R 447 0 R 507 0 R 576 0 R]/P 28 0 R/Pg 979 0 R/S/S3_10A>> endobj 103 0 obj <>]>><>]>>]/K[30 640 0 R 102 0 R 231 0 R 298 0 R 376 0 R 448 0 R 506 0 R 577 0 R]/P 28 0 R/Pg 979 0 R/S/S3_10B>> endobj 123 0 obj <>]>><>]>>]/K[50 638 0 R 122 0 R 230 0 R 310 0 R 375 0 R 443 0 R 505 0 R 572 0 R]/P 28 0 R/Pg 979 0 R/S/S3_11B>> endobj 133 0 obj <>]>><>]>>]/K[60 649 0 R 132 0 R 240 0 R 313 0 R 385 0 R 449 0 R 515 0 R 578 0 R]/P 28 0 R/Pg 979 0 R/S/S3_1B>> endobj 109 0 obj <>]>><>]>>]/K[36 648 0 R 108 0 R 239 0 R 301 0 R 384 0 R 450 0 R 514 0 R 579 0 R]/P 28 0 R/Pg 979 0 R/S/S3_2B>> endobj 127 0 obj <>]>><>]>>]/K[54 647 0 R 126 0 R 238 0 R 314 0 R 383 0 R 451 0 R 513 0 R 580 0 R]/P 28 0 R/Pg 979 0 R/S/S3_3B>> endobj 111 0 obj <>]>><>]>>]/K[38 646 0 R 110 0 R 237 0 R 302 0 R 382 0 R 452 0 R 512 0 R 581 0 R]/P 28 0 R/Pg 979 0 R/S/S3_4B>> endobj 129 0 obj <>]>><>]>>]/K[56 645 0 R 128 0 R 236 0 R 315 0 R 381 0 R 453 0 R 511 0 R 582 0 R]/P 28 0 R/Pg 979 0 R/S/S3_5B>> endobj 105 0 obj <>]>><>]>>]/K[32 644 0 R 104 0 R 235 0 R 299 0 R 380 0 R 445 0 R 510 0 R 574 0 R]/P 28 0 R/Pg 979 0 R/S/S3_6B>> endobj 125 0 obj <>]>><>]>>]/K[52 643 0 R 124 0 R 234 0 R 311 0 R 379 0 R 444 0 R 509 0 R 573 0 R]/P 28 0 R/Pg 979 0 R/S/S3_7B>> endobj 107 0 obj <>]>><>]>>]/K[34 642 0 R 106 0 R 233 0 R 300 0 R 378 0 R 446 0 R 508 0 R 575 0 R]/P 28 0 R/Pg 979 0 R/S/S3_8B>> endobj 177 0 obj <>]>><>]>>]/K[104 690 0 R 176 0 R 269 0 R 350 0 R 414 0 R 485 0 R 543 0 R 613 0 R]/P 28 0 R/Pg 979 0 R/S/S4_10A>> endobj 179 0 obj <>]>><>]>>]/K[106 689 0 R 178 0 R 268 0 R 351 0 R 413 0 R 486 0 R 542 0 R 614 0 R]/P 28 0 R/Pg 979 0 R/S/S4_10B>> endobj 181 0 obj <>]>><>]>>]/K[108 688 0 R 180 0 R 267 0 R 346 0 R 412 0 R 481 0 R 541 0 R 609 0 R]/P 28 0 R/Pg 979 0 R/S/S4_11B>> endobj 199 0 obj <>]>><>]>>]/K[126 698 0 R 198 0 R 277 0 R 352 0 R 422 0 R 487 0 R 551 0 R 615 0 R]/P 28 0 R/Pg 979 0 R/S/S4_1B>> endobj 189 0 obj <>]>><>]>>]/K[116 697 0 R 188 0 R 276 0 R 353 0 R 421 0 R 488 0 R 550 0 R 616 0 R]/P 28 0 R/Pg 979 0 R/S/S4_2B>> endobj 191 0 obj <>]>><>]>>]/K[118 696 0 R 190 0 R 275 0 R 354 0 R 420 0 R 489 0 R 549 0 R 617 0 R]/P 28 0 R/Pg 979 0 R/S/S4_3B>> endobj 193 0 obj <>]>><>]>>]/K[120 695 0 R 192 0 R 274 0 R 355 0 R 419 0 R 490 0 R 548 0 R 618 0 R]/P 28 0 R/Pg 979 0 R/S/S4_4B>> endobj 195 0 obj <>]>><>]>>]/K[122 694 0 R 194 0 R 273 0 R 356 0 R 418 0 R 491 0 R 547 0 R 619 0 R]/P 28 0 R/Pg 979 0 R/S/S4_5B>> endobj 183 0 obj <>]>><>]>>]/K[110 693 0 R 182 0 R 272 0 R 348 0 R 417 0 R 483 0 R 546 0 R 611 0 R]/P 28 0 R/Pg 979 0 R/S/S4_6B>> endobj 185 0 obj <>]>><>]>>]/K[112 692 0 R 184 0 R 271 0 R 347 0 R 416 0 R 482 0 R 545 0 R 610 0 R]/P 28 0 R/Pg 979 0 R/S/S4_7B>> endobj 187 0 obj <>]>><>]>>]/K[114 691 0 R 186 0 R 270 0 R 349 0 R 415 0 R 484 0 R 544 0 R 612 0 R]/P 28 0 R/Pg 979 0 R/S/S4_8B>> endobj 165 0 obj <>]>><>]>>]/K[92 679 0 R 164 0 R 257 0 R 337 0 R 402 0 R 472 0 R 531 0 R 600 0 R]/P 28 0 R/Pg 979 0 R/S/S5_10A>> endobj 151 0 obj <>]>><>]>>]/K[78 680 0 R 150 0 R 256 0 R 338 0 R 401 0 R 473 0 R 530 0 R 601 0 R]/P 28 0 R/Pg 979 0 R/S/S5_10B>> endobj 167 0 obj <>]>><>]>>]/K[94 673 0 R 166 0 R 255 0 R 333 0 R 400 0 R 468 0 R 529 0 R 596 0 R]/P 28 0 R/Pg 979 0 R/S/S5_11B>> endobj 175 0 obj <>]>><>]>>]/K[102 681 0 R 174 0 R 265 0 R 339 0 R 410 0 R 474 0 R 539 0 R 602 0 R]/P 28 0 R/Pg 979 0 R/S/S5_1B>> endobj 157 0 obj <>]>><>]>>]/K[84 682 0 R 156 0 R 264 0 R 340 0 R 409 0 R 475 0 R 538 0 R 603 0 R]/P 28 0 R/Pg 979 0 R/S/S5_2B>> endobj 171 0 obj <>]>><>]>>]/K[98 683 0 R 170 0 R 263 0 R 341 0 R 408 0 R 476 0 R 537 0 R 604 0 R]/P 28 0 R/Pg 979 0 R/S/S5_3B>> endobj 159 0 obj <>]>><>]>>]/K[86 684 0 R 158 0 R 262 0 R 342 0 R 407 0 R 477 0 R 536 0 R 605 0 R]/P 28 0 R/Pg 979 0 R/S/S5_4B>> endobj 173 0 obj <>]>><>]>>]/K[100 685 0 R 172 0 R 261 0 R 343 0 R 406 0 R 478 0 R 535 0 R 606 0 R]/P 28 0 R/Pg 979 0 R/S/S5_5B>> endobj 153 0 obj <>]>><>]>>]/K[80 677 0 R 152 0 R 260 0 R 335 0 R 405 0 R 470 0 R 534 0 R 598 0 R]/P 28 0 R/Pg 979 0 R/S/S5_6B>> endobj 169 0 obj <>]>><>]>>]/K[96 676 0 R 168 0 R 259 0 R 334 0 R 404 0 R 469 0 R 533 0 R 597 0 R]/P 28 0 R/Pg 979 0 R/S/S5_7B>> endobj 155 0 obj <>]>><>]>>]/K[82 678 0 R 154 0 R 258 0 R 336 0 R 403 0 R 471 0 R 532 0 R 599 0 R]/P 28 0 R/Pg 979 0 R/S/S5_8B>> endobj 101 0 obj <>]>><>]>>]/K[28 636 0 R 100 0 R 229 0 R 297 0 R 373 0 R 437 0 R 567 0 R]/P 28 0 R/Pg 979 0 R/S/UNNAMED_1_CN2P_I152_N2>> endobj 329 0 obj <>]>><>]>>]/K[45 669 0 R 328 0 R 464 0 R 592 0 R]/P 28 0 R/Pg 981 0 R/S/UNNAMED_1_MODUSB5P4PSHLD_I150_1>> endobj 317 0 obj <>]>><>]>>]/K[33 658 0 R 316 0 R 455 0 R 584 0 R]/P 28 0 R/Pg 981 0 R/S/UNNAMED_1_MODUSB5P4PSHLD_I150_D>> endobj 325 0 obj <>]>><>]>>]/K[41 667 0 R 324 0 R 462 0 R 590 0 R]/P 28 0 R/Pg 981 0 R/S/UNNAMED_1_MODUSB5P4PSHLD_I150_G>> endobj 131 0 obj <>]>><>]>>]/K[58 660 0 R 130 0 R 246 0 R 318 0 R 391 0 R 456 0 R]/P 28 0 R/Pg 979 0 R/S/UNNAMED_1_MODUSB5P4PSHLD_I150_S>> endobj 304 0 obj <>]>><>]>>]/K[20 652 0 R 303 0 R 438 0 R 566 0 R]/P 28 0 R/Pg 981 0 R/S/UNNAMED_1_MODUSB5P4PSHLD_I150_V>> endobj 303 0 obj <>]>>/K 19/P 304 0 R/Pg 981 0 R/S/l2_secondary>> endobj 438 0 obj <>]>>/K 14/P 304 0 R/Pg 939 0 R/S/mask_sec>> endobj 566 0 obj <>]>>/K 13/P 304 0 R/Pg 941 0 R/S/paste_sec>> endobj 1050 0 obj (560.96 MIL) endobj 1032 0 obj (Total Etch Length) endobj 1049 0 obj (UNNAMED_1_MODUSB5P4PSHLD_I150_V) endobj 130 0 obj <>]>>/K 57/P 131 0 R/Pg 979 0 R/S/fab1>> endobj 246 0 obj <>]>>/K 30/P 131 0 R/Pg 980 0 R/S/l1_primary>> endobj 318 0 obj <>]>>/K 34/P 131 0 R/Pg 981 0 R/S/l2_secondary>> endobj 391 0 obj <>]>>/K 30/P 131 0 R/Pg 938 0 R/S/mask_prm>> endobj 456 0 obj <>]>>/K 32/P 131 0 R/Pg 939 0 R/S/mask_sec>> endobj 1048 0 obj (547.24 MIL) endobj 1047 0 obj (UNNAMED_1_MODUSB5P4PSHLD_I150_S) endobj 324 0 obj <>]>>/K 40/P 325 0 R/Pg 981 0 R/S/l2_secondary>> endobj 462 0 obj <>]>>/K 38/P 325 0 R/Pg 939 0 R/S/mask_sec>> endobj 590 0 obj <>]>>/K 37/P 325 0 R/Pg 941 0 R/S/paste_sec>> endobj 1046 0 obj (578.07 MIL) endobj 1045 0 obj (UNNAMED_1_MODUSB5P4PSHLD_I150_G) endobj 316 0 obj <>]>>/K 32/P 317 0 R/Pg 981 0 R/S/l2_secondary>> endobj 455 0 obj <>]>>/K 31/P 317 0 R/Pg 939 0 R/S/mask_sec>> endobj 584 0 obj <>]>>/K 31/P 317 0 R/Pg 941 0 R/S/paste_sec>> endobj 1044 0 obj (200.81 MIL) endobj 1043 0 obj (UNNAMED_1_MODUSB5P4PSHLD_I150_D) endobj 328 0 obj <>]>>/K 44/P 329 0 R/Pg 981 0 R/S/l2_secondary>> endobj 464 0 obj <>]>>/K 40/P 329 0 R/Pg 939 0 R/S/mask_sec>> endobj 592 0 obj <>]>>/K 39/P 329 0 R/Pg 941 0 R/S/paste_sec>> endobj 1042 0 obj (304.54 MIL) endobj 1041 0 obj (UNNAMED_1_MODUSB5P4PSHLD_I150_1) endobj 100 0 obj <>]>>/K 27/P 101 0 R/Pg 979 0 R/S/fab1>> endobj 229 0 obj <>]>>/K 13/P 101 0 R/Pg 980 0 R/S/l1_primary>> endobj 297 0 obj <>]>>/K 13/P 101 0 R/Pg 981 0 R/S/l2_secondary>> endobj 373 0 obj <>]>>/K 12/P 101 0 R/Pg 938 0 R/S/mask_prm>> endobj 437 0 obj <>]>>/K 13/P 101 0 R/Pg 939 0 R/S/mask_sec>> endobj 567 0 obj <>]>>/K 14/P 101 0 R/Pg 941 0 R/S/paste_sec>> endobj 1040 0 obj (147.28 MIL) endobj 1039 0 obj (UNNAMED_1_CN2P_I152_N2) endobj 154 0 obj <>]>>/K 81/P 155 0 R/Pg 979 0 R/S/fab1>> endobj 258 0 obj <>]>>/K 42/P 155 0 R/Pg 980 0 R/S/l1_primary>> endobj 336 0 obj <>]>>/K 52/P 155 0 R/Pg 981 0 R/S/l2_secondary>> endobj 403 0 obj <>]>>/K 42/P 155 0 R/Pg 938 0 R/S/mask_prm>> endobj 471 0 obj <>]>>/K 47/P 155 0 R/Pg 939 0 R/S/mask_sec>> endobj 532 0 obj <>]>>/K 40/P 155 0 R/Pg 940 0 R/S/paste_prm>> endobj 599 0 obj <>]>>/K 46/P 155 0 R/Pg 941 0 R/S/paste_sec>> endobj 1036 0 obj (426.02 MIL) endobj 168 0 obj <>]>>/K 95/P 169 0 R/Pg 979 0 R/S/fab1>> endobj 259 0 obj <>]>>/K 43/P 169 0 R/Pg 980 0 R/S/l1_primary>> endobj 334 0 obj <>]>>/K 50/P 169 0 R/Pg 981 0 R/S/l2_secondary>> endobj 404 0 obj <>]>>/K 43/P 169 0 R/Pg 938 0 R/S/mask_prm>> endobj 469 0 obj <>]>>/K 45/P 169 0 R/Pg 939 0 R/S/mask_sec>> endobj 533 0 obj <>]>>/K 41/P 169 0 R/Pg 940 0 R/S/paste_prm>> endobj 597 0 obj <>]>>/K 44/P 169 0 R/Pg 941 0 R/S/paste_sec>> endobj 152 0 obj <>]>>/K 79/P 153 0 R/Pg 979 0 R/S/fab1>> endobj 260 0 obj <>]>>/K 44/P 153 0 R/Pg 980 0 R/S/l1_primary>> endobj 335 0 obj <>]>>/K 51/P 153 0 R/Pg 981 0 R/S/l2_secondary>> endobj 405 0 obj <>]>>/K 44/P 153 0 R/Pg 938 0 R/S/mask_prm>> endobj 470 0 obj <>]>>/K 46/P 153 0 R/Pg 939 0 R/S/mask_sec>> endobj 534 0 obj <>]>>/K 42/P 153 0 R/Pg 940 0 R/S/paste_prm>> endobj 598 0 obj <>]>>/K 45/P 153 0 R/Pg 941 0 R/S/paste_sec>> endobj 172 0 obj <>]>>/K 99/P 173 0 R/Pg 979 0 R/S/fab1>> endobj 261 0 obj <>]>>/K 45/P 173 0 R/Pg 980 0 R/S/l1_primary>> endobj 343 0 obj <>]>>/K 59/P 173 0 R/Pg 981 0 R/S/l2_secondary>> endobj 406 0 obj <>]>>/K 45/P 173 0 R/Pg 938 0 R/S/mask_prm>> endobj 478 0 obj <>]>>/K 54/P 173 0 R/Pg 939 0 R/S/mask_sec>> endobj 535 0 obj <>]>>/K 43/P 173 0 R/Pg 940 0 R/S/paste_prm>> endobj 606 0 obj <>]>>/K 53/P 173 0 R/Pg 941 0 R/S/paste_sec>> endobj 158 0 obj <>]>>/K 85/P 159 0 R/Pg 979 0 R/S/fab1>> endobj 262 0 obj <>]>>/K 46/P 159 0 R/Pg 980 0 R/S/l1_primary>> endobj 342 0 obj <>]>>/K 58/P 159 0 R/Pg 981 0 R/S/l2_secondary>> endobj 407 0 obj <>]>>/K 46/P 159 0 R/Pg 938 0 R/S/mask_prm>> endobj 477 0 obj <>]>>/K 53/P 159 0 R/Pg 939 0 R/S/mask_sec>> endobj 536 0 obj <>]>>/K 44/P 159 0 R/Pg 940 0 R/S/paste_prm>> endobj 605 0 obj <>]>>/K 52/P 159 0 R/Pg 941 0 R/S/paste_sec>> endobj 170 0 obj <>]>>/K 97/P 171 0 R/Pg 979 0 R/S/fab1>> endobj 263 0 obj <>]>>/K 47/P 171 0 R/Pg 980 0 R/S/l1_primary>> endobj 341 0 obj <>]>>/K 57/P 171 0 R/Pg 981 0 R/S/l2_secondary>> endobj 408 0 obj <>]>>/K 47/P 171 0 R/Pg 938 0 R/S/mask_prm>> endobj 476 0 obj <>]>>/K 52/P 171 0 R/Pg 939 0 R/S/mask_sec>> endobj 537 0 obj <>]>>/K 45/P 171 0 R/Pg 940 0 R/S/paste_prm>> endobj 604 0 obj <>]>>/K 51/P 171 0 R/Pg 941 0 R/S/paste_sec>> endobj 156 0 obj <>]>>/K 83/P 157 0 R/Pg 979 0 R/S/fab1>> endobj 264 0 obj <>]>>/K 48/P 157 0 R/Pg 980 0 R/S/l1_primary>> endobj 340 0 obj <>]>>/K 56/P 157 0 R/Pg 981 0 R/S/l2_secondary>> endobj 409 0 obj <>]>>/K 48/P 157 0 R/Pg 938 0 R/S/mask_prm>> endobj 475 0 obj <>]>>/K 51/P 157 0 R/Pg 939 0 R/S/mask_sec>> endobj 538 0 obj <>]>>/K 46/P 157 0 R/Pg 940 0 R/S/paste_prm>> endobj 603 0 obj <>]>>/K 50/P 157 0 R/Pg 941 0 R/S/paste_sec>> endobj 174 0 obj <>]>>/K 101/P 175 0 R/Pg 979 0 R/S/fab1>> endobj 265 0 obj <>]>>/K 49/P 175 0 R/Pg 980 0 R/S/l1_primary>> endobj 339 0 obj <>]>>/K 55/P 175 0 R/Pg 981 0 R/S/l2_secondary>> endobj 410 0 obj <>]>>/K 49/P 175 0 R/Pg 938 0 R/S/mask_prm>> endobj 474 0 obj <>]>>/K 50/P 175 0 R/Pg 939 0 R/S/mask_sec>> endobj 539 0 obj <>]>>/K 47/P 175 0 R/Pg 940 0 R/S/paste_prm>> endobj 602 0 obj <>]>>/K 49/P 175 0 R/Pg 941 0 R/S/paste_sec>> endobj 166 0 obj <>]>>/K 93/P 167 0 R/Pg 979 0 R/S/fab1>> endobj 255 0 obj <>]>>/K 39/P 167 0 R/Pg 980 0 R/S/l1_primary>> endobj 333 0 obj <>]>>/K 49/P 167 0 R/Pg 981 0 R/S/l2_secondary>> endobj 400 0 obj <>]>>/K 39/P 167 0 R/Pg 938 0 R/S/mask_prm>> endobj 468 0 obj <>]>>/K 44/P 167 0 R/Pg 939 0 R/S/mask_sec>> endobj 529 0 obj <>]>>/K 37/P 167 0 R/Pg 940 0 R/S/paste_prm>> endobj 596 0 obj <>]>>/K 43/P 167 0 R/Pg 941 0 R/S/paste_sec>> endobj 150 0 obj <>]>>/K 77/P 151 0 R/Pg 979 0 R/S/fab1>> endobj 256 0 obj <>]>>/K 40/P 151 0 R/Pg 980 0 R/S/l1_primary>> endobj 338 0 obj <>]>>/K 54/P 151 0 R/Pg 981 0 R/S/l2_secondary>> endobj 401 0 obj <>]>>/K 40/P 151 0 R/Pg 938 0 R/S/mask_prm>> endobj 473 0 obj <>]>>/K 49/P 151 0 R/Pg 939 0 R/S/mask_sec>> endobj 530 0 obj <>]>>/K 38/P 151 0 R/Pg 940 0 R/S/paste_prm>> endobj 601 0 obj <>]>>/K 48/P 151 0 R/Pg 941 0 R/S/paste_sec>> endobj 164 0 obj <>]>>/K 91/P 165 0 R/Pg 979 0 R/S/fab1>> endobj 257 0 obj <>]>>/K 41/P 165 0 R/Pg 980 0 R/S/l1_primary>> endobj 337 0 obj <>]>>/K 53/P 165 0 R/Pg 981 0 R/S/l2_secondary>> endobj 402 0 obj <>]>>/K 41/P 165 0 R/Pg 938 0 R/S/mask_prm>> endobj 472 0 obj <>]>>/K 48/P 165 0 R/Pg 939 0 R/S/mask_sec>> endobj 531 0 obj <>]>>/K 39/P 165 0 R/Pg 940 0 R/S/paste_prm>> endobj 600 0 obj <>]>>/K 47/P 165 0 R/Pg 941 0 R/S/paste_sec>> endobj 186 0 obj <>]>>/K 113/P 187 0 R/Pg 979 0 R/S/fab1>> endobj 270 0 obj <>]>>/K 54/P 187 0 R/Pg 980 0 R/S/l1_primary>> endobj 349 0 obj <>]>>/K 65/P 187 0 R/Pg 981 0 R/S/l2_secondary>> endobj 415 0 obj <>]>>/K 54/P 187 0 R/Pg 938 0 R/S/mask_prm>> endobj 484 0 obj <>]>>/K 60/P 187 0 R/Pg 939 0 R/S/mask_sec>> endobj 544 0 obj <>]>>/K 52/P 187 0 R/Pg 940 0 R/S/paste_prm>> endobj 612 0 obj <>]>>/K 59/P 187 0 R/Pg 941 0 R/S/paste_sec>> endobj 184 0 obj <>]>>/K 111/P 185 0 R/Pg 979 0 R/S/fab1>> endobj 271 0 obj <>]>>/K 55/P 185 0 R/Pg 980 0 R/S/l1_primary>> endobj 347 0 obj <>]>>/K 63/P 185 0 R/Pg 981 0 R/S/l2_secondary>> endobj 416 0 obj <>]>>/K 55/P 185 0 R/Pg 938 0 R/S/mask_prm>> endobj 482 0 obj <>]>>/K 58/P 185 0 R/Pg 939 0 R/S/mask_sec>> endobj 545 0 obj <>]>>/K 53/P 185 0 R/Pg 940 0 R/S/paste_prm>> endobj 610 0 obj <>]>>/K 57/P 185 0 R/Pg 941 0 R/S/paste_sec>> endobj 182 0 obj <>]>>/K 109/P 183 0 R/Pg 979 0 R/S/fab1>> endobj 272 0 obj <>]>>/K 56/P 183 0 R/Pg 980 0 R/S/l1_primary>> endobj 348 0 obj <>]>>/K 64/P 183 0 R/Pg 981 0 R/S/l2_secondary>> endobj 417 0 obj <>]>>/K 56/P 183 0 R/Pg 938 0 R/S/mask_prm>> endobj 483 0 obj <>]>>/K 59/P 183 0 R/Pg 939 0 R/S/mask_sec>> endobj 546 0 obj <>]>>/K 54/P 183 0 R/Pg 940 0 R/S/paste_prm>> endobj 611 0 obj <>]>>/K 58/P 183 0 R/Pg 941 0 R/S/paste_sec>> endobj 194 0 obj <>]>>/K 121/P 195 0 R/Pg 979 0 R/S/fab1>> endobj 273 0 obj <>]>>/K 57/P 195 0 R/Pg 980 0 R/S/l1_primary>> endobj 356 0 obj <>]>>/K 72/P 195 0 R/Pg 981 0 R/S/l2_secondary>> endobj 418 0 obj <>]>>/K 57/P 195 0 R/Pg 938 0 R/S/mask_prm>> endobj 491 0 obj <>]>>/K 67/P 195 0 R/Pg 939 0 R/S/mask_sec>> endobj 547 0 obj <>]>>/K 55/P 195 0 R/Pg 940 0 R/S/paste_prm>> endobj 619 0 obj <>]>>/K 66/P 195 0 R/Pg 941 0 R/S/paste_sec>> endobj 192 0 obj <>]>>/K 119/P 193 0 R/Pg 979 0 R/S/fab1>> endobj 274 0 obj <>]>>/K 58/P 193 0 R/Pg 980 0 R/S/l1_primary>> endobj 355 0 obj <>]>>/K 71/P 193 0 R/Pg 981 0 R/S/l2_secondary>> endobj 419 0 obj <>]>>/K 58/P 193 0 R/Pg 938 0 R/S/mask_prm>> endobj 490 0 obj <>]>>/K 66/P 193 0 R/Pg 939 0 R/S/mask_sec>> endobj 548 0 obj <>]>>/K 56/P 193 0 R/Pg 940 0 R/S/paste_prm>> endobj 618 0 obj <>]>>/K 65/P 193 0 R/Pg 941 0 R/S/paste_sec>> endobj 190 0 obj <>]>>/K 117/P 191 0 R/Pg 979 0 R/S/fab1>> endobj 275 0 obj <>]>>/K 59/P 191 0 R/Pg 980 0 R/S/l1_primary>> endobj 354 0 obj <>]>>/K 70/P 191 0 R/Pg 981 0 R/S/l2_secondary>> endobj 420 0 obj <>]>>/K 59/P 191 0 R/Pg 938 0 R/S/mask_prm>> endobj 489 0 obj <>]>>/K 65/P 191 0 R/Pg 939 0 R/S/mask_sec>> endobj 549 0 obj <>]>>/K 57/P 191 0 R/Pg 940 0 R/S/paste_prm>> endobj 617 0 obj <>]>>/K 64/P 191 0 R/Pg 941 0 R/S/paste_sec>> endobj 188 0 obj <>]>>/K 115/P 189 0 R/Pg 979 0 R/S/fab1>> endobj 276 0 obj <>]>>/K 60/P 189 0 R/Pg 980 0 R/S/l1_primary>> endobj 353 0 obj <>]>>/K 69/P 189 0 R/Pg 981 0 R/S/l2_secondary>> endobj 421 0 obj <>]>>/K 60/P 189 0 R/Pg 938 0 R/S/mask_prm>> endobj 488 0 obj <>]>>/K 64/P 189 0 R/Pg 939 0 R/S/mask_sec>> endobj 550 0 obj <>]>>/K 58/P 189 0 R/Pg 940 0 R/S/paste_prm>> endobj 616 0 obj <>]>>/K 63/P 189 0 R/Pg 941 0 R/S/paste_sec>> endobj 198 0 obj <>]>>/K 125/P 199 0 R/Pg 979 0 R/S/fab1>> endobj 277 0 obj <>]>>/K 61/P 199 0 R/Pg 980 0 R/S/l1_primary>> endobj 352 0 obj <>]>>/K 68/P 199 0 R/Pg 981 0 R/S/l2_secondary>> endobj 422 0 obj <>]>>/K 61/P 199 0 R/Pg 938 0 R/S/mask_prm>> endobj 487 0 obj <>]>>/K 63/P 199 0 R/Pg 939 0 R/S/mask_sec>> endobj 551 0 obj <>]>>/K 59/P 199 0 R/Pg 940 0 R/S/paste_prm>> endobj 615 0 obj <>]>>/K 62/P 199 0 R/Pg 941 0 R/S/paste_sec>> endobj 180 0 obj <>]>>/K 107/P 181 0 R/Pg 979 0 R/S/fab1>> endobj 267 0 obj <>]>>/K 51/P 181 0 R/Pg 980 0 R/S/l1_primary>> endobj 346 0 obj <>]>>/K 62/P 181 0 R/Pg 981 0 R/S/l2_secondary>> endobj 412 0 obj <>]>>/K 51/P 181 0 R/Pg 938 0 R/S/mask_prm>> endobj 481 0 obj <>]>>/K 57/P 181 0 R/Pg 939 0 R/S/mask_sec>> endobj 541 0 obj <>]>>/K 49/P 181 0 R/Pg 940 0 R/S/paste_prm>> endobj 609 0 obj <>]>>/K 56/P 181 0 R/Pg 941 0 R/S/paste_sec>> endobj 178 0 obj <>]>>/K 105/P 179 0 R/Pg 979 0 R/S/fab1>> endobj 268 0 obj <>]>>/K 52/P 179 0 R/Pg 980 0 R/S/l1_primary>> endobj 351 0 obj <>]>>/K 67/P 179 0 R/Pg 981 0 R/S/l2_secondary>> endobj 413 0 obj <>]>>/K 52/P 179 0 R/Pg 938 0 R/S/mask_prm>> endobj 486 0 obj <>]>>/K 62/P 179 0 R/Pg 939 0 R/S/mask_sec>> endobj 542 0 obj <>]>>/K 50/P 179 0 R/Pg 940 0 R/S/paste_prm>> endobj 614 0 obj <>]>>/K 61/P 179 0 R/Pg 941 0 R/S/paste_sec>> endobj 176 0 obj <>]>>/K 103/P 177 0 R/Pg 979 0 R/S/fab1>> endobj 269 0 obj <>]>>/K 53/P 177 0 R/Pg 980 0 R/S/l1_primary>> endobj 350 0 obj <>]>>/K 66/P 177 0 R/Pg 981 0 R/S/l2_secondary>> endobj 414 0 obj <>]>>/K 53/P 177 0 R/Pg 938 0 R/S/mask_prm>> endobj 485 0 obj <>]>>/K 61/P 177 0 R/Pg 939 0 R/S/mask_sec>> endobj 543 0 obj <>]>>/K 51/P 177 0 R/Pg 940 0 R/S/paste_prm>> endobj 613 0 obj <>]>>/K 60/P 177 0 R/Pg 941 0 R/S/paste_sec>> endobj 106 0 obj <>]>>/K 33/P 107 0 R/Pg 979 0 R/S/fab1>> endobj 233 0 obj <>]>>/K 17/P 107 0 R/Pg 980 0 R/S/l1_primary>> endobj 300 0 obj <>]>>/K 16/P 107 0 R/Pg 981 0 R/S/l2_secondary>> endobj 378 0 obj <>]>>/K 17/P 107 0 R/Pg 938 0 R/S/mask_prm>> endobj 446 0 obj <>]>>/K 22/P 107 0 R/Pg 939 0 R/S/mask_sec>> endobj 508 0 obj <>]>>/K 16/P 107 0 R/Pg 940 0 R/S/paste_prm>> endobj 575 0 obj <>]>>/K 22/P 107 0 R/Pg 941 0 R/S/paste_sec>> endobj 124 0 obj <>]>>/K 51/P 125 0 R/Pg 979 0 R/S/fab1>> endobj 234 0 obj <>]>>/K 18/P 125 0 R/Pg 980 0 R/S/l1_primary>> endobj 311 0 obj <>]>>/K 27/P 125 0 R/Pg 981 0 R/S/l2_secondary>> endobj 379 0 obj <>]>>/K 18/P 125 0 R/Pg 938 0 R/S/mask_prm>> endobj 444 0 obj <>]>>/K 20/P 125 0 R/Pg 939 0 R/S/mask_sec>> endobj 509 0 obj <>]>>/K 17/P 125 0 R/Pg 940 0 R/S/paste_prm>> endobj 573 0 obj <>]>>/K 20/P 125 0 R/Pg 941 0 R/S/paste_sec>> endobj 104 0 obj <>]>>/K 31/P 105 0 R/Pg 979 0 R/S/fab1>> endobj 235 0 obj <>]>>/K 19/P 105 0 R/Pg 980 0 R/S/l1_primary>> endobj 299 0 obj <>]>>/K 15/P 105 0 R/Pg 981 0 R/S/l2_secondary>> endobj 380 0 obj <>]>>/K 19/P 105 0 R/Pg 938 0 R/S/mask_prm>> endobj 445 0 obj <>]>>/K 21/P 105 0 R/Pg 939 0 R/S/mask_sec>> endobj 510 0 obj <>]>>/K 18/P 105 0 R/Pg 940 0 R/S/paste_prm>> endobj 574 0 obj <>]>>/K 21/P 105 0 R/Pg 941 0 R/S/paste_sec>> endobj 128 0 obj <>]>>/K 55/P 129 0 R/Pg 979 0 R/S/fab1>> endobj 236 0 obj <>]>>/K 20/P 129 0 R/Pg 980 0 R/S/l1_primary>> endobj 315 0 obj <>]>>/K 31/P 129 0 R/Pg 981 0 R/S/l2_secondary>> endobj 381 0 obj <>]>>/K 20/P 129 0 R/Pg 938 0 R/S/mask_prm>> endobj 453 0 obj <>]>>/K 29/P 129 0 R/Pg 939 0 R/S/mask_sec>> endobj 511 0 obj <>]>>/K 19/P 129 0 R/Pg 940 0 R/S/paste_prm>> endobj 582 0 obj <>]>>/K 29/P 129 0 R/Pg 941 0 R/S/paste_sec>> endobj 110 0 obj <>]>>/K 37/P 111 0 R/Pg 979 0 R/S/fab1>> endobj 237 0 obj <>]>>/K 21/P 111 0 R/Pg 980 0 R/S/l1_primary>> endobj 302 0 obj <>]>>/K 18/P 111 0 R/Pg 981 0 R/S/l2_secondary>> endobj 382 0 obj <>]>>/K 21/P 111 0 R/Pg 938 0 R/S/mask_prm>> endobj 452 0 obj <>]>>/K 28/P 111 0 R/Pg 939 0 R/S/mask_sec>> endobj 512 0 obj <>]>>/K 20/P 111 0 R/Pg 940 0 R/S/paste_prm>> endobj 581 0 obj <>]>>/K 28/P 111 0 R/Pg 941 0 R/S/paste_sec>> endobj 126 0 obj <>]>>/K 53/P 127 0 R/Pg 979 0 R/S/fab1>> endobj 238 0 obj <>]>>/K 22/P 127 0 R/Pg 980 0 R/S/l1_primary>> endobj 314 0 obj <>]>>/K 30/P 127 0 R/Pg 981 0 R/S/l2_secondary>> endobj 383 0 obj <>]>>/K 22/P 127 0 R/Pg 938 0 R/S/mask_prm>> endobj 451 0 obj <>]>>/K 27/P 127 0 R/Pg 939 0 R/S/mask_sec>> endobj 513 0 obj <>]>>/K 21/P 127 0 R/Pg 940 0 R/S/paste_prm>> endobj 580 0 obj <>]>>/K 27/P 127 0 R/Pg 941 0 R/S/paste_sec>> endobj 108 0 obj <>]>>/K 35/P 109 0 R/Pg 979 0 R/S/fab1>> endobj 239 0 obj <>]>>/K 23/P 109 0 R/Pg 980 0 R/S/l1_primary>> endobj 301 0 obj <>]>>/K 17/P 109 0 R/Pg 981 0 R/S/l2_secondary>> endobj 384 0 obj <>]>>/K 23/P 109 0 R/Pg 938 0 R/S/mask_prm>> endobj 450 0 obj <>]>>/K 26/P 109 0 R/Pg 939 0 R/S/mask_sec>> endobj 514 0 obj <>]>>/K 22/P 109 0 R/Pg 940 0 R/S/paste_prm>> endobj 579 0 obj <>]>>/K 26/P 109 0 R/Pg 941 0 R/S/paste_sec>> endobj 132 0 obj <>]>>/K 59/P 133 0 R/Pg 979 0 R/S/fab1>> endobj 240 0 obj <>]>>/K 24/P 133 0 R/Pg 980 0 R/S/l1_primary>> endobj 313 0 obj <>]>>/K 29/P 133 0 R/Pg 981 0 R/S/l2_secondary>> endobj 385 0 obj <>]>>/K 24/P 133 0 R/Pg 938 0 R/S/mask_prm>> endobj 449 0 obj <>]>>/K 25/P 133 0 R/Pg 939 0 R/S/mask_sec>> endobj 515 0 obj <>]>>/K 23/P 133 0 R/Pg 940 0 R/S/paste_prm>> endobj 578 0 obj <>]>>/K 25/P 133 0 R/Pg 941 0 R/S/paste_sec>> endobj 122 0 obj <>]>>/K 49/P 123 0 R/Pg 979 0 R/S/fab1>> endobj 230 0 obj <>]>>/K 14/P 123 0 R/Pg 980 0 R/S/l1_primary>> endobj 310 0 obj <>]>>/K 26/P 123 0 R/Pg 981 0 R/S/l2_secondary>> endobj 375 0 obj <>]>>/K 14/P 123 0 R/Pg 938 0 R/S/mask_prm>> endobj 443 0 obj <>]>>/K 19/P 123 0 R/Pg 939 0 R/S/mask_sec>> endobj 505 0 obj <>]>>/K 13/P 123 0 R/Pg 940 0 R/S/paste_prm>> endobj 572 0 obj <>]>>/K 19/P 123 0 R/Pg 941 0 R/S/paste_sec>> endobj 102 0 obj <>]>>/K 29/P 103 0 R/Pg 979 0 R/S/fab1>> endobj 231 0 obj <>]>>/K 15/P 103 0 R/Pg 980 0 R/S/l1_primary>> endobj 298 0 obj <>]>>/K 14/P 103 0 R/Pg 981 0 R/S/l2_secondary>> endobj 376 0 obj <>]>>/K 15/P 103 0 R/Pg 938 0 R/S/mask_prm>> endobj 448 0 obj <>]>>/K 24/P 103 0 R/Pg 939 0 R/S/mask_sec>> endobj 506 0 obj <>]>>/K 14/P 103 0 R/Pg 940 0 R/S/paste_prm>> endobj 577 0 obj <>]>>/K 24/P 103 0 R/Pg 941 0 R/S/paste_sec>> endobj 120 0 obj <>]>>/K 47/P 121 0 R/Pg 979 0 R/S/fab1>> endobj 232 0 obj <>]>>/K 16/P 121 0 R/Pg 980 0 R/S/l1_primary>> endobj 312 0 obj <>]>>/K 28/P 121 0 R/Pg 981 0 R/S/l2_secondary>> endobj 377 0 obj <>]>>/K 16/P 121 0 R/Pg 938 0 R/S/mask_prm>> endobj 447 0 obj <>]>>/K 23/P 121 0 R/Pg 939 0 R/S/mask_sec>> endobj 507 0 obj <>]>>/K 15/P 121 0 R/Pg 940 0 R/S/paste_prm>> endobj 576 0 obj <>]>>/K 23/P 121 0 R/Pg 941 0 R/S/paste_sec>> endobj 86 0 obj <>]>>/K 13/P 87 0 R/Pg 979 0 R/S/fab1>> endobj 219 0 obj <>]>>/K 3/P 87 0 R/Pg 980 0 R/S/l1_primary>> endobj 288 0 obj <>]>>/K 4/P 87 0 R/Pg 981 0 R/S/l2_secondary>> endobj 364 0 obj <>]>>/K 3/P 87 0 R/Pg 938 0 R/S/mask_prm>> endobj 428 0 obj <>]>>/K 4/P 87 0 R/Pg 939 0 R/S/mask_sec>> endobj 495 0 obj <>]>>/K 3/P 87 0 R/Pg 940 0 R/S/paste_prm>> endobj 557 0 obj <>]>>/K 4/P 87 0 R/Pg 941 0 R/S/paste_sec>> endobj 84 0 obj <>]>>/K 11/P 85 0 R/Pg 979 0 R/S/fab1>> endobj 220 0 obj <>]>>/K 4/P 85 0 R/Pg 980 0 R/S/l1_primary>> endobj 286 0 obj <>]>>/K 2/P 85 0 R/Pg 981 0 R/S/l2_secondary>> endobj 365 0 obj <>]>>/K 4/P 85 0 R/Pg 938 0 R/S/mask_prm>> endobj 426 0 obj <>]>>/K 2/P 85 0 R/Pg 939 0 R/S/mask_sec>> endobj 496 0 obj <>]>>/K 4/P 85 0 R/Pg 940 0 R/S/paste_prm>> endobj 555 0 obj <>]>>/K 2/P 85 0 R/Pg 941 0 R/S/paste_sec>> endobj 82 0 obj <>]>>/K 9/P 83 0 R/Pg 979 0 R/S/fab1>> endobj 221 0 obj <>]>>/K 5/P 83 0 R/Pg 980 0 R/S/l1_primary>> endobj 287 0 obj <>]>>/K 3/P 83 0 R/Pg 981 0 R/S/l2_secondary>> endobj 366 0 obj <>]>>/K 5/P 83 0 R/Pg 938 0 R/S/mask_prm>> endobj 427 0 obj <>]>>/K 3/P 83 0 R/Pg 939 0 R/S/mask_sec>> endobj 497 0 obj <>]>>/K 5/P 83 0 R/Pg 940 0 R/S/paste_prm>> endobj 556 0 obj <>]>>/K 3/P 83 0 R/Pg 941 0 R/S/paste_sec>> endobj 94 0 obj <>]>>/K 21/P 95 0 R/Pg 979 0 R/S/fab1>> endobj 222 0 obj <>]>>/K 6/P 95 0 R/Pg 980 0 R/S/l1_primary>> endobj 295 0 obj <>]>>/K 11/P 95 0 R/Pg 981 0 R/S/l2_secondary>> endobj 367 0 obj <>]>>/K 6/P 95 0 R/Pg 938 0 R/S/mask_prm>> endobj 435 0 obj <>]>>/K 11/P 95 0 R/Pg 939 0 R/S/mask_sec>> endobj 498 0 obj <>]>>/K 6/P 95 0 R/Pg 940 0 R/S/paste_prm>> endobj 564 0 obj <>]>>/K 11/P 95 0 R/Pg 941 0 R/S/paste_sec>> endobj 92 0 obj <>]>>/K 19/P 93 0 R/Pg 979 0 R/S/fab1>> endobj 223 0 obj <>]>>/K 7/P 93 0 R/Pg 980 0 R/S/l1_primary>> endobj 294 0 obj <>]>>/K 10/P 93 0 R/Pg 981 0 R/S/l2_secondary>> endobj 368 0 obj <>]>>/K 7/P 93 0 R/Pg 938 0 R/S/mask_prm>> endobj 434 0 obj <>]>>/K 10/P 93 0 R/Pg 939 0 R/S/mask_sec>> endobj 499 0 obj <>]>>/K 7/P 93 0 R/Pg 940 0 R/S/paste_prm>> endobj 563 0 obj <>]>>/K 10/P 93 0 R/Pg 941 0 R/S/paste_sec>> endobj 90 0 obj <>]>>/K 17/P 91 0 R/Pg 979 0 R/S/fab1>> endobj 224 0 obj <>]>>/K 8/P 91 0 R/Pg 980 0 R/S/l1_primary>> endobj 293 0 obj <>]>>/K 9/P 91 0 R/Pg 981 0 R/S/l2_secondary>> endobj 369 0 obj <>]>>/K 8/P 91 0 R/Pg 938 0 R/S/mask_prm>> endobj 433 0 obj <>]>>/K 9/P 91 0 R/Pg 939 0 R/S/mask_sec>> endobj 500 0 obj <>]>>/K 8/P 91 0 R/Pg 940 0 R/S/paste_prm>> endobj 562 0 obj <>]>>/K 9/P 91 0 R/Pg 941 0 R/S/paste_sec>> endobj 88 0 obj <>]>>/K 15/P 89 0 R/Pg 979 0 R/S/fab1>> endobj 225 0 obj <>]>>/K 9/P 89 0 R/Pg 980 0 R/S/l1_primary>> endobj 292 0 obj <>]>>/K 8/P 89 0 R/Pg 981 0 R/S/l2_secondary>> endobj 370 0 obj <>]>>/K 9/P 89 0 R/Pg 938 0 R/S/mask_prm>> endobj 432 0 obj <>]>>/K 8/P 89 0 R/Pg 939 0 R/S/mask_sec>> endobj 501 0 obj <>]>>/K 9/P 89 0 R/Pg 940 0 R/S/paste_prm>> endobj 561 0 obj <>]>>/K 8/P 89 0 R/Pg 941 0 R/S/paste_sec>> endobj 98 0 obj <>]>>/K 25/P 99 0 R/Pg 979 0 R/S/fab1>> endobj 226 0 obj <>]>>/K 10/P 99 0 R/Pg 980 0 R/S/l1_primary>> endobj 291 0 obj <>]>>/K 7/P 99 0 R/Pg 981 0 R/S/l2_secondary>> endobj 371 0 obj <>]>>/K 10/P 99 0 R/Pg 938 0 R/S/mask_prm>> endobj 431 0 obj <>]>>/K 7/P 99 0 R/Pg 939 0 R/S/mask_sec>> endobj 502 0 obj <>]>>/K 10/P 99 0 R/Pg 940 0 R/S/paste_prm>> endobj 560 0 obj <>]>>/K 7/P 99 0 R/Pg 941 0 R/S/paste_sec>> endobj 80 0 obj <>]>>/K 7/P 81 0 R/Pg 979 0 R/S/fab1>> endobj 216 0 obj <>]>>/K 0/P 81 0 R/Pg 980 0 R/S/l1_primary>> endobj 285 0 obj <>]>>/K 1/P 81 0 R/Pg 981 0 R/S/l2_secondary>> endobj 361 0 obj <>]>>/K 0/P 81 0 R/Pg 938 0 R/S/mask_prm>> endobj 425 0 obj <>]>>/K 1/P 81 0 R/Pg 939 0 R/S/mask_sec>> endobj 492 0 obj <>]>>/K 0/P 81 0 R/Pg 940 0 R/S/paste_prm>> endobj 554 0 obj <>]>>/K 1/P 81 0 R/Pg 941 0 R/S/paste_sec>> endobj 78 0 obj <>]>>/K 5/P 79 0 R/Pg 979 0 R/S/fab1>> endobj 217 0 obj <>]>>/K 1/P 79 0 R/Pg 980 0 R/S/l1_primary>> endobj 290 0 obj <>]>>/K 6/P 79 0 R/Pg 981 0 R/S/l2_secondary>> endobj 362 0 obj <>]>>/K 1/P 79 0 R/Pg 938 0 R/S/mask_prm>> endobj 430 0 obj <>]>>/K 6/P 79 0 R/Pg 939 0 R/S/mask_sec>> endobj 493 0 obj <>]>>/K 1/P 79 0 R/Pg 940 0 R/S/paste_prm>> endobj 559 0 obj <>]>>/K 6/P 79 0 R/Pg 941 0 R/S/paste_sec>> endobj 76 0 obj <>]>>/K 3/P 77 0 R/Pg 979 0 R/S/fab1>> endobj 218 0 obj <>]>>/K 2/P 77 0 R/Pg 980 0 R/S/l1_primary>> endobj 289 0 obj <>]>>/K 5/P 77 0 R/Pg 981 0 R/S/l2_secondary>> endobj 363 0 obj <>]>>/K 2/P 77 0 R/Pg 938 0 R/S/mask_prm>> endobj 429 0 obj <>]>>/K 5/P 77 0 R/Pg 939 0 R/S/mask_sec>> endobj 494 0 obj <>]>>/K 2/P 77 0 R/Pg 940 0 R/S/paste_prm>> endobj 558 0 obj <>]>>/K 5/P 77 0 R/Pg 941 0 R/S/paste_sec>> endobj 138 0 obj <>]>>/K 65/P 139 0 R/Pg 979 0 R/S/fab1>> endobj 247 0 obj <>]>>/K 31/P 139 0 R/Pg 980 0 R/S/l1_primary>> endobj 322 0 obj <>]>>/K 38/P 139 0 R/Pg 981 0 R/S/l2_secondary>> endobj 392 0 obj <>]>>/K 31/P 139 0 R/Pg 938 0 R/S/mask_prm>> endobj 460 0 obj <>]>>/K 36/P 139 0 R/Pg 939 0 R/S/mask_sec>> endobj 521 0 obj <>]>>/K 29/P 139 0 R/Pg 940 0 R/S/paste_prm>> endobj 588 0 obj <>]>>/K 35/P 139 0 R/Pg 941 0 R/S/paste_sec>> endobj 144 0 obj <>]>>/K 71/P 145 0 R/Pg 979 0 R/S/fab1>> endobj 248 0 obj <>]>>/K 32/P 145 0 R/Pg 980 0 R/S/l1_primary>> endobj 321 0 obj <>]>>/K 37/P 145 0 R/Pg 981 0 R/S/l2_secondary>> endobj 393 0 obj <>]>>/K 32/P 145 0 R/Pg 938 0 R/S/mask_prm>> endobj 459 0 obj <>]>>/K 35/P 145 0 R/Pg 939 0 R/S/mask_sec>> endobj 522 0 obj <>]>>/K 30/P 145 0 R/Pg 940 0 R/S/paste_prm>> endobj 587 0 obj <>]>>/K 34/P 145 0 R/Pg 941 0 R/S/paste_sec>> endobj 136 0 obj <>]>>/K 63/P 137 0 R/Pg 979 0 R/S/fab1>> endobj 249 0 obj <>]>>/K 33/P 137 0 R/Pg 980 0 R/S/l1_primary>> endobj 319 0 obj <>]>>/K 35/P 137 0 R/Pg 981 0 R/S/l2_secondary>> endobj 394 0 obj <>]>>/K 33/P 137 0 R/Pg 938 0 R/S/mask_prm>> endobj 457 0 obj <>]>>/K 33/P 137 0 R/Pg 939 0 R/S/mask_sec>> endobj 523 0 obj <>]>>/K 31/P 137 0 R/Pg 940 0 R/S/paste_prm>> endobj 585 0 obj <>]>>/K 32/P 137 0 R/Pg 941 0 R/S/paste_sec>> endobj 142 0 obj <>]>>/K 69/P 143 0 R/Pg 979 0 R/S/fab1>> endobj 250 0 obj <>]>>/K 34/P 143 0 R/Pg 980 0 R/S/l1_primary>> endobj 320 0 obj <>]>>/K 36/P 143 0 R/Pg 981 0 R/S/l2_secondary>> endobj 395 0 obj <>]>>/K 34/P 143 0 R/Pg 938 0 R/S/mask_prm>> endobj 458 0 obj <>]>>/K 34/P 143 0 R/Pg 939 0 R/S/mask_sec>> endobj 524 0 obj <>]>>/K 32/P 143 0 R/Pg 940 0 R/S/paste_prm>> endobj 586 0 obj <>]>>/K 33/P 143 0 R/Pg 941 0 R/S/paste_sec>> endobj 134 0 obj <>]>>/K 61/P 135 0 R/Pg 979 0 R/S/fab1>> endobj 245 0 obj <>]>>/K 29/P 135 0 R/Pg 980 0 R/S/l1_primary>> endobj 309 0 obj <>]>>/K 25/P 135 0 R/Pg 981 0 R/S/l2_secondary>> endobj 390 0 obj <>]>>/K 29/P 135 0 R/Pg 938 0 R/S/mask_prm>> endobj 442 0 obj <>]>>/K 18/P 135 0 R/Pg 939 0 R/S/mask_sec>> endobj 520 0 obj <>]>>/K 28/P 135 0 R/Pg 940 0 R/S/paste_prm>> endobj 571 0 obj <>]>>/K 18/P 135 0 R/Pg 941 0 R/S/paste_sec>> endobj 118 0 obj <>]>>/K 45/P 119 0 R/Pg 979 0 R/S/fab1>> endobj 242 0 obj <>]>>/K 26/P 119 0 R/Pg 980 0 R/S/l1_primary>> endobj 308 0 obj <>]>>/K 24/P 119 0 R/Pg 981 0 R/S/l2_secondary>> endobj 387 0 obj <>]>>/K 26/P 119 0 R/Pg 938 0 R/S/mask_prm>> endobj 441 0 obj <>]>>/K 17/P 119 0 R/Pg 939 0 R/S/mask_sec>> endobj 517 0 obj <>]>>/K 25/P 119 0 R/Pg 940 0 R/S/paste_prm>> endobj 570 0 obj <>]>>/K 17/P 119 0 R/Pg 941 0 R/S/paste_sec>> endobj 114 0 obj <>]>>/K 41/P 115 0 R/Pg 979 0 R/S/fab1>> endobj 243 0 obj <>]>>/K 27/P 115 0 R/Pg 980 0 R/S/l1_primary>> endobj 307 0 obj <>]>>/K 23/P 115 0 R/Pg 981 0 R/S/l2_secondary>> endobj 388 0 obj <>]>>/K 27/P 115 0 R/Pg 938 0 R/S/mask_prm>> endobj 440 0 obj <>]>>/K 16/P 115 0 R/Pg 939 0 R/S/mask_sec>> endobj 518 0 obj <>]>>/K 26/P 115 0 R/Pg 940 0 R/S/paste_prm>> endobj 569 0 obj <>]>>/K 16/P 115 0 R/Pg 941 0 R/S/paste_sec>> endobj 116 0 obj <>]>>/K 43/P 117 0 R/Pg 979 0 R/S/fab1>> endobj 244 0 obj <>]>>/K 28/P 117 0 R/Pg 980 0 R/S/l1_primary>> endobj 306 0 obj <>]>>/K 22/P 117 0 R/Pg 981 0 R/S/l2_secondary>> endobj 389 0 obj <>]>>/K 28/P 117 0 R/Pg 938 0 R/S/mask_prm>> endobj 439 0 obj <>]>>/K 15/P 117 0 R/Pg 939 0 R/S/mask_sec>> endobj 519 0 obj <>]>>/K 27/P 117 0 R/Pg 940 0 R/S/paste_prm>> endobj 568 0 obj <>]>>/K 15/P 117 0 R/Pg 941 0 R/S/paste_sec>> endobj 74 0 obj <>]>>/K 1/P 75 0 R/Pg 979 0 R/S/fab1>> endobj 228 0 obj <>]>>/K 12/P 75 0 R/Pg 980 0 R/S/l1_primary>> endobj 284 0 obj <>]>>/K 0/P 75 0 R/Pg 981 0 R/S/l2_secondary>> endobj 374 0 obj <>]>>/K 13/P 75 0 R/Pg 938 0 R/S/mask_prm>> endobj 424 0 obj <>]>>/K 0/P 75 0 R/Pg 939 0 R/S/mask_sec>> endobj 504 0 obj <>]>>/K 12/P 75 0 R/Pg 940 0 R/S/paste_prm>> endobj 553 0 obj <>]>>/K 0/P 75 0 R/Pg 941 0 R/S/paste_sec>> endobj 1038 0 obj (1642.78 MIL) endobj 162 0 obj <>]>>/K 89/P 163 0 R/Pg 979 0 R/S/fab1>> endobj 254 0 obj <>]>>/K 38/P 163 0 R/Pg 980 0 R/S/l1_primary>> endobj 332 0 obj <>]>>/K 48/P 163 0 R/Pg 981 0 R/S/l2_secondary>> endobj 399 0 obj <>]>>/K 38/P 163 0 R/Pg 938 0 R/S/mask_prm>> endobj 467 0 obj <>]>>/K 43/P 163 0 R/Pg 939 0 R/S/mask_sec>> endobj 528 0 obj <>]>>/K 36/P 163 0 R/Pg 940 0 R/S/paste_prm>> endobj 595 0 obj <>]>>/K 42/P 163 0 R/Pg 941 0 R/S/paste_sec>> endobj 1037 0 obj (1605.83 MIL) endobj 148 0 obj <>]>>/K 75/P 149 0 R/Pg 979 0 R/S/fab1>> endobj 252 0 obj <>]>>/K 36/P 149 0 R/Pg 980 0 R/S/l1_primary>> endobj 331 0 obj <>]>>/K 47/P 149 0 R/Pg 981 0 R/S/l2_secondary>> endobj 397 0 obj <>]>>/K 36/P 149 0 R/Pg 938 0 R/S/mask_prm>> endobj 466 0 obj <>]>>/K 42/P 149 0 R/Pg 939 0 R/S/mask_sec>> endobj 526 0 obj <>]>>/K 34/P 149 0 R/Pg 940 0 R/S/paste_prm>> endobj 594 0 obj <>]>>/K 41/P 149 0 R/Pg 941 0 R/S/paste_sec>> endobj 146 0 obj <>]>>/K 73/P 147 0 R/Pg 979 0 R/S/fab1>> endobj 253 0 obj <>]>>/K 37/P 147 0 R/Pg 980 0 R/S/l1_primary>> endobj 330 0 obj <>]>>/K 46/P 147 0 R/Pg 981 0 R/S/l2_secondary>> endobj 398 0 obj <>]>>/K 37/P 147 0 R/Pg 938 0 R/S/mask_prm>> endobj 465 0 obj <>]>>/K 41/P 147 0 R/Pg 939 0 R/S/mask_sec>> endobj 527 0 obj <>]>>/K 35/P 147 0 R/Pg 940 0 R/S/paste_prm>> endobj 593 0 obj <>]>>/K 40/P 147 0 R/Pg 941 0 R/S/paste_sec>> endobj 140 0 obj <>]>>/K 67/P 141 0 R/Pg 979 0 R/S/fab1>> endobj 251 0 obj <>]>>/K 35/P 141 0 R/Pg 980 0 R/S/l1_primary>> endobj 323 0 obj <>]>>/K 39/P 141 0 R/Pg 981 0 R/S/l2_secondary>> endobj 396 0 obj <>]>>/K 35/P 141 0 R/Pg 938 0 R/S/mask_prm>> endobj 461 0 obj <>]>>/K 37/P 141 0 R/Pg 939 0 R/S/mask_sec>> endobj 525 0 obj <>]>>/K 33/P 141 0 R/Pg 940 0 R/S/paste_prm>> endobj 589 0 obj <>]>>/K 36/P 141 0 R/Pg 941 0 R/S/paste_sec>> endobj 160 0 obj <>]>>/K 87/P 161 0 R/Pg 979 0 R/S/fab1>> endobj 266 0 obj <>]>>/K 50/P 161 0 R/Pg 980 0 R/S/l1_primary>> endobj 344 0 obj <>]>>/K 60/P 161 0 R/Pg 981 0 R/S/l2_secondary>> endobj 411 0 obj <>]>>/K 50/P 161 0 R/Pg 938 0 R/S/mask_prm>> endobj 479 0 obj <>]>>/K 55/P 161 0 R/Pg 939 0 R/S/mask_sec>> endobj 540 0 obj <>]>>/K 48/P 161 0 R/Pg 940 0 R/S/paste_prm>> endobj 607 0 obj <>]>>/K 54/P 161 0 R/Pg 941 0 R/S/paste_sec>> endobj 1035 0 obj (351.61 MIL) endobj 112 0 obj <>]>>/K 39/P 113 0 R/Pg 979 0 R/S/fab1>> endobj 241 0 obj <>]>>/K 25/P 113 0 R/Pg 980 0 R/S/l1_primary>> endobj 305 0 obj <>]>>/K 21/P 113 0 R/Pg 981 0 R/S/l2_secondary>> endobj 386 0 obj <>]>>/K 25/P 113 0 R/Pg 938 0 R/S/mask_prm>> endobj 454 0 obj <>]>>/K 30/P 113 0 R/Pg 939 0 R/S/mask_sec>> endobj 516 0 obj <>]>>/K 24/P 113 0 R/Pg 940 0 R/S/paste_prm>> endobj 583 0 obj <>]>>/K 30/P 113 0 R/Pg 941 0 R/S/paste_sec>> endobj 1034 0 obj (369.13 MIL) endobj 96 0 obj <>]>>/K 23/P 97 0 R/Pg 979 0 R/S/fab1>> endobj 227 0 obj <>]>>/K 11/P 97 0 R/Pg 980 0 R/S/l1_primary>> endobj 296 0 obj <>]>>/K 12/P 97 0 R/Pg 981 0 R/S/l2_secondary>> endobj 372 0 obj <>]>>/K 11/P 97 0 R/Pg 938 0 R/S/mask_prm>> endobj 436 0 obj <>]>>/K 12/P 97 0 R/Pg 939 0 R/S/mask_sec>> endobj 503 0 obj <>]>>/K 11/P 97 0 R/Pg 940 0 R/S/paste_prm>> endobj 565 0 obj <>]>>/K 12/P 97 0 R/Pg 941 0 R/S/paste_sec>> endobj 1033 0 obj (455.01 MIL) endobj 326 0 obj <>]>>/K 42/P 327 0 R/Pg 981 0 R/S/l2_secondary>> endobj 463 0 obj <>]>>/K 39/P 327 0 R/Pg 939 0 R/S/mask_sec>> endobj 591 0 obj <>]>>/K 38/P 327 0 R/Pg 941 0 R/S/paste_sec>> endobj 196 0 obj <>]>>/K 123/P 197 0 R/Pg 979 0 R/S/fab1>> endobj 278 0 obj <>]>>/K 62/P 197 0 R/Pg 980 0 R/S/l1_primary>> endobj 345 0 obj <>]>>/K 61/P 197 0 R/Pg 981 0 R/S/l2_secondary>> endobj 423 0 obj <>]>>/K 62/P 197 0 R/Pg 938 0 R/S/mask_prm>> endobj 480 0 obj <>]>>/K 56/P 197 0 R/Pg 939 0 R/S/mask_sec>> endobj 552 0 obj <>]>>/K 60/P 197 0 R/Pg 940 0 R/S/paste_prm>> endobj 608 0 obj <>]>>/K 55/P 197 0 R/Pg 941 0 R/S/paste_sec>> endobj 1031 0 obj (514.45 MIL) endobj 29 0 obj <>]>>/K 2/P 25 0 R/Pg 978 0 R/S/Test#20Point>> endobj 22 0 obj <> endobj 1051 0 obj <> endobj 1052 0 obj <> endobj 1055 0 obj <> endobj 1056 0 obj <> endobj 1057 0 obj <> endobj 1058 0 obj <> endobj 1059 0 obj <> endobj 1060 0 obj <> endobj 1061 0 obj <> endobj 1062 0 obj <> endobj 1063 0 obj <> endobj 1064 0 obj <> endobj 1065 0 obj <> endobj 1066 0 obj <> endobj 1067 0 obj <> endobj 1068 0 obj <> endobj 1069 0 obj <> endobj 1070 0 obj <> endobj 1071 0 obj <> endobj 1054 0 obj <> endobj 1072 0 obj <> endobj 1053 0 obj <> endobj 10 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 21 0 obj <> endobj 1073 0 obj <> endobj 1074 0 obj (function F\(n\){app.popUpMenu\(n\);}) endobj 4 0 obj <> endobj xref +0 1075 +0000000000 65535 f +0000000016 00000 n +0000000471 00000 n +0000004012 00000 n +0000732019 00000 n +0000003905 00000 n +0000124010 00000 n +0000124076 00000 n +0000124137 00000 n +0000124195 00000 n +0000731492 00000 n +0000124247 00000 n +0000731552 00000 n +0000731613 00000 n +0000731676 00000 n +0000731739 00000 n +0000731804 00000 n +0000124300 00000 n +0000124363 00000 n +0000003943 00000 n +0000004072 00000 n +0000731865 00000 n +0000729921 00000 n +0000193801 00000 n +0000123903 00000 n +0000004161 00000 n +0000004219 00000 n +0000651110 00000 n +0000669283 00000 n +0000729822 00000 n +0000004346 00000 n +0000004609 00000 n +0000005616 00000 n +0000005762 00000 n +0000006324 00000 n +0000006950 00000 n +0000006976 00000 n +0000007498 00000 n +0000008060 00000 n +0000008566 00000 n +0000009120 00000 n +0000665135 00000 n +0000651273 00000 n +0000664722 00000 n +0000656133 00000 n +0000651749 00000 n +0000652503 00000 n +0000663511 00000 n +0000651489 00000 n +0000657810 00000 n +0000664347 00000 n +0000651381 00000 n +0000663746 00000 n +0000655796 00000 n +0000653117 00000 n +0000662329 00000 n +0000660797 00000 n +0000663038 00000 n +0000659004 00000 n +0000656469 00000 n +0000651888 00000 n +0000662565 00000 n +0000660198 00000 n +0000654962 00000 n +0000654347 00000 n +0000662801 00000 n +0000659601 00000 n +0000661995 00000 n +0000661396 00000 n +0000655458 00000 n +0000653732 00000 n +0000663274 00000 n +0000658407 00000 n +0000665227 00000 n +0000723144 00000 n +0000671568 00000 n +0000716949 00000 n +0000673545 00000 n +0000716274 00000 n +0000673764 00000 n +0000715599 00000 n +0000673983 00000 n +0000711535 00000 n +0000675292 00000 n +0000710859 00000 n +0000675510 00000 n +0000710183 00000 n +0000675728 00000 n +0000714244 00000 n +0000674420 00000 n +0000713568 00000 n +0000674638 00000 n +0000712889 00000 n +0000674856 00000 n +0000712210 00000 n +0000675074 00000 n +0000728088 00000 n +0000670040 00000 n +0000714920 00000 n +0000674202 00000 n +0000686705 00000 n +0000683237 00000 n +0000708803 00000 n +0000676168 00000 n +0000703973 00000 n +0000677712 00000 n +0000702593 00000 n +0000678152 00000 n +0000706733 00000 n +0000676832 00000 n +0000705353 00000 n +0000677272 00000 n +0000727367 00000 n +0000670252 00000 n +0000721764 00000 n +0000672005 00000 n +0000722454 00000 n +0000671785 00000 n +0000721074 00000 n +0000672225 00000 n +0000709493 00000 n +0000675946 00000 n +0000708113 00000 n +0000676390 00000 n +0000703283 00000 n +0000677932 00000 n +0000706043 00000 n +0000677052 00000 n +0000704663 00000 n +0000677492 00000 n +0000684984 00000 n +0000684116 00000 n +0000707423 00000 n +0000676612 00000 n +0000720384 00000 n +0000672445 00000 n +0000719004 00000 n +0000672885 00000 n +0000717624 00000 n +0000673325 00000 n +0000725956 00000 n +0000670680 00000 n +0000719694 00000 n +0000672665 00000 n +0000718314 00000 n +0000673105 00000 n +0000725266 00000 n +0000670902 00000 n +0000724576 00000 n +0000671124 00000 n +0000693612 00000 n +0000681031 00000 n +0000688781 00000 n +0000682577 00000 n +0000687370 00000 n +0000683017 00000 n +0000691541 00000 n +0000681696 00000 n +0000690161 00000 n +0000682136 00000 n +0000726646 00000 n +0000670466 00000 n +0000723854 00000 n +0000671346 00000 n +0000694302 00000 n +0000680809 00000 n +0000692922 00000 n +0000681253 00000 n +0000688091 00000 n +0000682797 00000 n +0000690851 00000 n +0000681916 00000 n +0000689471 00000 n +0000682356 00000 n +0000692231 00000 n +0000681475 00000 n +0000701902 00000 n +0000678372 00000 n +0000701211 00000 n +0000678595 00000 n +0000700520 00000 n +0000678818 00000 n +0000696374 00000 n +0000680146 00000 n +0000695683 00000 n +0000680367 00000 n +0000694992 00000 n +0000680588 00000 n +0000699138 00000 n +0000679262 00000 n +0000698447 00000 n +0000679483 00000 n +0000697756 00000 n +0000679704 00000 n +0000697065 00000 n +0000679925 00000 n +0000729100 00000 n +0000669068 00000 n +0000699829 00000 n +0000679041 00000 n +0000656324 00000 n +0000663603 00000 n +0000664440 00000 n +0000655988 00000 n +0000662422 00000 n +0000663131 00000 n +0000656661 00000 n +0000662658 00000 n +0000655154 00000 n +0000662088 00000 n +0000662894 00000 n +0000655650 00000 n +0000663367 00000 n +0000665430 00000 n +0000176283 00000 n +0000175867 00000 n +0000715690 00000 n +0000716365 00000 n +0000717040 00000 n +0000710275 00000 n +0000710951 00000 n +0000711626 00000 n +0000712302 00000 n +0000712981 00000 n +0000713660 00000 n +0000714336 00000 n +0000715012 00000 n +0000728180 00000 n +0000723235 00000 n +0000686799 00000 n +0000708207 00000 n +0000708897 00000 n +0000709587 00000 n +0000702687 00000 n +0000703377 00000 n +0000704067 00000 n +0000704757 00000 n +0000705447 00000 n +0000706137 00000 n +0000706827 00000 n +0000707517 00000 n +0000727461 00000 n +0000721168 00000 n +0000721858 00000 n +0000722548 00000 n +0000720478 00000 n +0000685078 00000 n +0000717718 00000 n +0000718408 00000 n +0000719098 00000 n +0000719788 00000 n +0000726050 00000 n +0000724670 00000 n +0000725360 00000 n +0000723948 00000 n +0000693016 00000 n +0000693706 00000 n +0000694396 00000 n +0000687464 00000 n +0000688185 00000 n +0000688875 00000 n +0000689565 00000 n +0000690255 00000 n +0000690945 00000 n +0000691635 00000 n +0000692326 00000 n +0000726740 00000 n +0000700615 00000 n +0000701306 00000 n +0000701997 00000 n +0000695087 00000 n +0000695778 00000 n +0000696469 00000 n +0000697160 00000 n +0000697851 00000 n +0000698542 00000 n +0000699233 00000 n +0000699924 00000 n +0000729195 00000 n +0000656225 00000 n +0000655889 00000 n +0000656562 00000 n +0000655055 00000 n +0000655551 00000 n +0000723334 00000 n +0000715788 00000 n +0000711049 00000 n +0000711724 00000 n +0000710373 00000 n +0000717138 00000 n +0000716463 00000 n +0000715111 00000 n +0000714434 00000 n +0000713758 00000 n +0000713079 00000 n +0000712400 00000 n +0000728279 00000 n +0000686899 00000 n +0000708997 00000 n +0000704167 00000 n +0000702787 00000 n +0000706927 00000 n +0000705547 00000 n +0000684564 00000 n +0000684348 00000 n +0000727561 00000 n +0000722648 00000 n +0000721958 00000 n +0000721268 00000 n +0000720578 00000 n +0000708307 00000 n +0000703477 00000 n +0000709687 00000 n +0000707617 00000 n +0000706237 00000 n +0000704857 00000 n +0000685941 00000 n +0000683684 00000 n +0000685178 00000 n +0000719198 00000 n +0000719888 00000 n +0000718508 00000 n +0000717818 00000 n +0000726150 00000 n +0000685559 00000 n +0000683900 00000 n +0000728801 00000 n +0000669905 00000 n +0000686323 00000 n +0000683468 00000 n +0000725460 00000 n +0000724770 00000 n +0000724048 00000 n +0000693116 00000 n +0000688285 00000 n +0000688975 00000 n +0000687564 00000 n +0000694496 00000 n +0000693806 00000 n +0000692426 00000 n +0000691735 00000 n +0000691045 00000 n +0000690355 00000 n +0000689665 00000 n +0000726840 00000 n +0000729295 00000 n +0000700715 00000 n +0000695878 00000 n +0000696569 00000 n +0000695187 00000 n +0000702097 00000 n +0000701406 00000 n +0000700024 00000 n +0000699333 00000 n +0000698642 00000 n +0000697951 00000 n +0000697260 00000 n +0000657407 00000 n +0000651638 00000 n +0000656804 00000 n +0000657509 00000 n +0000715888 00000 n +0000716563 00000 n +0000717238 00000 n +0000710473 00000 n +0000711149 00000 n +0000711824 00000 n +0000712501 00000 n +0000713180 00000 n +0000713858 00000 n +0000714534 00000 n +0000715211 00000 n +0000728380 00000 n +0000687001 00000 n +0000723434 00000 n +0000708409 00000 n +0000709099 00000 n +0000709789 00000 n +0000702889 00000 n +0000703579 00000 n +0000704269 00000 n +0000704959 00000 n +0000705649 00000 n +0000706339 00000 n +0000707029 00000 n +0000707719 00000 n +0000727663 00000 n +0000721370 00000 n +0000722060 00000 n +0000722750 00000 n +0000720680 00000 n +0000685280 00000 n +0000717920 00000 n +0000718610 00000 n +0000719300 00000 n +0000719990 00000 n +0000726252 00000 n +0000724872 00000 n +0000725562 00000 n +0000724150 00000 n +0000693218 00000 n +0000693908 00000 n +0000694598 00000 n +0000687666 00000 n +0000688387 00000 n +0000689077 00000 n +0000689767 00000 n +0000690457 00000 n +0000691147 00000 n +0000691837 00000 n +0000692528 00000 n +0000726942 00000 n +0000700817 00000 n +0000701508 00000 n +0000702199 00000 n +0000695289 00000 n +0000695980 00000 n +0000696671 00000 n +0000697362 00000 n +0000698053 00000 n +0000698744 00000 n +0000699435 00000 n +0000700126 00000 n +0000729397 00000 n +0000723531 00000 n +0000715984 00000 n +0000711245 00000 n +0000711920 00000 n +0000710569 00000 n +0000717334 00000 n +0000716659 00000 n +0000715308 00000 n +0000714630 00000 n +0000713954 00000 n +0000713276 00000 n +0000712597 00000 n +0000728477 00000 n +0000687099 00000 n +0000684666 00000 n +0000722848 00000 n +0000722158 00000 n +0000721468 00000 n +0000720778 00000 n +0000708507 00000 n +0000703677 00000 n +0000704367 00000 n +0000702987 00000 n +0000709887 00000 n +0000709197 00000 n +0000707817 00000 n +0000707127 00000 n +0000706437 00000 n +0000705747 00000 n +0000705057 00000 n +0000727761 00000 n +0000686043 00000 n +0000685378 00000 n +0000719398 00000 n +0000720088 00000 n +0000718708 00000 n +0000718018 00000 n +0000726350 00000 n +0000685661 00000 n +0000728903 00000 n +0000686425 00000 n +0000725660 00000 n +0000724970 00000 n +0000724248 00000 n +0000693316 00000 n +0000688485 00000 n +0000689175 00000 n +0000687764 00000 n +0000694696 00000 n +0000694006 00000 n +0000692626 00000 n +0000691935 00000 n +0000691245 00000 n +0000690555 00000 n +0000689865 00000 n +0000727040 00000 n +0000729495 00000 n +0000700915 00000 n +0000696078 00000 n +0000696769 00000 n +0000695387 00000 n +0000702297 00000 n +0000701606 00000 n +0000700224 00000 n +0000699533 00000 n +0000698842 00000 n +0000698151 00000 n +0000697460 00000 n +0000716080 00000 n +0000716755 00000 n +0000717430 00000 n +0000710665 00000 n +0000711341 00000 n +0000712016 00000 n +0000712694 00000 n +0000713373 00000 n +0000714050 00000 n +0000714726 00000 n +0000715404 00000 n +0000728574 00000 n +0000723627 00000 n +0000708605 00000 n +0000709295 00000 n +0000709985 00000 n +0000703085 00000 n +0000703775 00000 n +0000704465 00000 n +0000705155 00000 n +0000705845 00000 n +0000706535 00000 n +0000707225 00000 n +0000707915 00000 n +0000727859 00000 n +0000721566 00000 n +0000722256 00000 n +0000722946 00000 n +0000720876 00000 n +0000718116 00000 n +0000718806 00000 n +0000719496 00000 n +0000720186 00000 n +0000726448 00000 n +0000725068 00000 n +0000725758 00000 n +0000724346 00000 n +0000693414 00000 n +0000694104 00000 n +0000694794 00000 n +0000687862 00000 n +0000688583 00000 n +0000689273 00000 n +0000689963 00000 n +0000690653 00000 n +0000691343 00000 n +0000692033 00000 n +0000692724 00000 n +0000727138 00000 n +0000701013 00000 n +0000701704 00000 n +0000702395 00000 n +0000695485 00000 n +0000696176 00000 n +0000696867 00000 n +0000697558 00000 n +0000698249 00000 n +0000698940 00000 n +0000699631 00000 n +0000700322 00000 n +0000729593 00000 n +0000723725 00000 n +0000716177 00000 n +0000711438 00000 n +0000712113 00000 n +0000710762 00000 n +0000717527 00000 n +0000716852 00000 n +0000715502 00000 n +0000714823 00000 n +0000714147 00000 n +0000713470 00000 n +0000712791 00000 n +0000728672 00000 n +0000684764 00000 n +0000687197 00000 n +0000723045 00000 n +0000722355 00000 n +0000721665 00000 n +0000720975 00000 n +0000708704 00000 n +0000703874 00000 n +0000704564 00000 n +0000703184 00000 n +0000710084 00000 n +0000709394 00000 n +0000708014 00000 n +0000707324 00000 n +0000706634 00000 n +0000705944 00000 n +0000705254 00000 n +0000727958 00000 n +0000686141 00000 n +0000719595 00000 n +0000720285 00000 n +0000718905 00000 n +0000718215 00000 n +0000726547 00000 n +0000685759 00000 n +0000729001 00000 n +0000686523 00000 n +0000725857 00000 n +0000725167 00000 n +0000724445 00000 n +0000693513 00000 n +0000688682 00000 n +0000689372 00000 n +0000687961 00000 n +0000694893 00000 n +0000694203 00000 n +0000692823 00000 n +0000692132 00000 n +0000691442 00000 n +0000690752 00000 n +0000690062 00000 n +0000727237 00000 n +0000729692 00000 n +0000701112 00000 n +0000696275 00000 n +0000696966 00000 n +0000695584 00000 n +0000702494 00000 n +0000701803 00000 n +0000700421 00000 n +0000699730 00000 n +0000699039 00000 n +0000698348 00000 n +0000697657 00000 n +0000010850 00000 n +0000010947 00000 n +0000011044 00000 n +0000011141 00000 n +0000011238 00000 n +0000011335 00000 n +0000011432 00000 n +0000011529 00000 n +0000011626 00000 n +0000011723 00000 n +0000011820 00000 n +0000011918 00000 n +0000012016 00000 n +0000012114 00000 n +0000012212 00000 n +0000012310 00000 n +0000012408 00000 n +0000012507 00000 n +0000012605 00000 n +0000012704 00000 n +0000012802 00000 n +0000012901 00000 n +0000013000 00000 n +0000013099 00000 n +0000013198 00000 n +0000013297 00000 n +0000013396 00000 n +0000013495 00000 n +0000013594 00000 n +0000013693 00000 n +0000013792 00000 n +0000013891 00000 n +0000013989 00000 n +0000014088 00000 n +0000014187 00000 n +0000014286 00000 n +0000014385 00000 n +0000014484 00000 n +0000014582 00000 n +0000014681 00000 n +0000014780 00000 n +0000014879 00000 n +0000014978 00000 n +0000015077 00000 n +0000015176 00000 n +0000015275 00000 n +0000015374 00000 n +0000015472 00000 n +0000015571 00000 n +0000015670 00000 n +0000015769 00000 n +0000015868 00000 n +0000015967 00000 n +0000016066 00000 n +0000016165 00000 n +0000016263 00000 n +0000016361 00000 n +0000016460 00000 n +0000016559 00000 n +0000016658 00000 n +0000016757 00000 n +0000016856 00000 n +0000016955 00000 n +0000017054 00000 n +0000017153 00000 n +0000017252 00000 n +0000017351 00000 n +0000017450 00000 n +0000017548 00000 n +0000017647 00000 n +0000017746 00000 n +0000017845 00000 n +0000017944 00000 n +0000018043 00000 n +0000018142 00000 n +0000018241 00000 n +0000018340 00000 n +0000018439 00000 n +0000018538 00000 n +0000018637 00000 n +0000018736 00000 n +0000018834 00000 n +0000018932 00000 n +0000019031 00000 n +0000019206 00000 n +0000019794 00000 n +0000019893 00000 n +0000020388 00000 n +0000020976 00000 n +0000021075 00000 n +0000021663 00000 n +0000021762 00000 n +0000022349 00000 n +0000022448 00000 n +0000023033 00000 n +0000023132 00000 n +0000023719 00000 n +0000023818 00000 n +0000024404 00000 n +0000024503 00000 n +0000025087 00000 n +0000025187 00000 n +0000025772 00000 n +0000025872 00000 n +0000026459 00000 n +0000026559 00000 n +0000027148 00000 n +0000027248 00000 n +0000027835 00000 n +0000027935 00000 n +0000028063 00000 n +0000028648 00000 n +0000028748 00000 n +0000029333 00000 n +0000029433 00000 n +0000030018 00000 n +0000030118 00000 n +0000030701 00000 n +0000030801 00000 n +0000031386 00000 n +0000031486 00000 n +0000032075 00000 n +0000032175 00000 n +0000032762 00000 n +0000032862 00000 n +0000033450 00000 n +0000033550 00000 n +0000034138 00000 n +0000034238 00000 n +0000034826 00000 n +0000034926 00000 n +0000035514 00000 n +0000035614 00000 n +0000036201 00000 n +0000036301 00000 n +0000036886 00000 n +0000036986 00000 n +0000037571 00000 n +0000037671 00000 n +0000038260 00000 n +0000038360 00000 n +0000038949 00000 n +0000039049 00000 n +0000039636 00000 n +0000039736 00000 n +0000040321 00000 n +0000040421 00000 n +0000041005 00000 n +0000041105 00000 n +0000041687 00000 n +0000041787 00000 n +0000042374 00000 n +0000042474 00000 n +0000043061 00000 n +0000043161 00000 n +0000043744 00000 n +0000043844 00000 n +0000044433 00000 n +0000044533 00000 n +0000045121 00000 n +0000045221 00000 n +0000045810 00000 n +0000045910 00000 n +0000046499 00000 n +0000046599 00000 n +0000047183 00000 n +0000047283 00000 n +0000047872 00000 n +0000047972 00000 n +0000048561 00000 n +0000048661 00000 n +0000049250 00000 n +0000049350 00000 n +0000049938 00000 n +0000050038 00000 n +0000050625 00000 n +0000050725 00000 n +0000051310 00000 n +0000051410 00000 n +0000051995 00000 n +0000052095 00000 n +0000052680 00000 n +0000052780 00000 n +0000053366 00000 n +0000053466 00000 n +0000054053 00000 n +0000054153 00000 n +0000054738 00000 n +0000054838 00000 n +0000054938 00000 n +0000055523 00000 n +0000055623 00000 n +0000056212 00000 n +0000056312 00000 n +0000056896 00000 n +0000056996 00000 n +0000057585 00000 n +0000057685 00000 n +0000058274 00000 n +0000058374 00000 n +0000058963 00000 n +0000059063 00000 n +0000059651 00000 n +0000059751 00000 n +0000060338 00000 n +0000060438 00000 n +0000061023 00000 n +0000061123 00000 n +0000061708 00000 n +0000061808 00000 n +0000062393 00000 n +0000062493 00000 n +0000063079 00000 n +0000063179 00000 n +0000063766 00000 n +0000174401 00000 n +0000175636 00000 n +0000174334 00000 n +0000174366 00000 n +0000669020 00000 n +0000174255 00000 n +0000174155 00000 n +0000174124 00000 n +0000174095 00000 n +0000668888 00000 n +0000668972 00000 n +0000668767 00000 n +0000668840 00000 n +0000668647 00000 n +0000668719 00000 n +0000668518 00000 n +0000668599 00000 n +0000175013 00000 n +0000668470 00000 n +0000174905 00000 n +0000668422 00000 n +0000174788 00000 n +0000668374 00000 n +0000174671 00000 n +0000668326 00000 n +0000668207 00000 n +0000668278 00000 n +0000668086 00000 n +0000668159 00000 n +0000174195 00000 n +0000668038 00000 n +0000175749 00000 n +0000667990 00000 n +0000667942 00000 n +0000667895 00000 n +0000667790 00000 n +0000667848 00000 n +0000667682 00000 n +0000667742 00000 n +0000667634 00000 n +0000667504 00000 n +0000667586 00000 n +0000667384 00000 n +0000667456 00000 n +0000667264 00000 n +0000667336 00000 n +0000667133 00000 n +0000667216 00000 n +0000667085 00000 n +0000667037 00000 n +0000666989 00000 n +0000666941 00000 n +0000666772 00000 n +0000666893 00000 n +0000666845 00000 n +0000666724 00000 n +0000666676 00000 n +0000174436 00000 n +0000666628 00000 n +0000175509 00000 n +0000666581 00000 n +0000175388 00000 n +0000666533 00000 n +0000175267 00000 n +0000666486 00000 n +0000666376 00000 n +0000666439 00000 n +0000175135 00000 n +0000666329 00000 n +0000666281 00000 n +0000666233 00000 n +0000666185 00000 n +0000666137 00000 n +0000666089 00000 n +0000666041 00000 n +0000665993 00000 n +0000665945 00000 n +0000665897 00000 n +0000665849 00000 n +0000665801 00000 n +0000174554 00000 n +0000665753 00000 n +0000665705 00000 n +0000665657 00000 n +0000665609 00000 n +0000175819 00000 n +0000175701 00000 n +0000175588 00000 n +0000175461 00000 n +0000175340 00000 n +0000175219 00000 n +0000175087 00000 n +0000174965 00000 n +0000174857 00000 n +0000174740 00000 n +0000174623 00000 n +0000174506 00000 n +0000174286 00000 n +0000064037 00000 n +0000064064 00000 n +0000124422 00000 n +0000173857 00000 n +0000125836 00000 n +0000126096 00000 n +0000126345 00000 n +0000126594 00000 n +0000126843 00000 n +0000125600 00000 n +0000153227 00000 n +0000153254 00000 n +0000146548 00000 n +0000146575 00000 n +0000138825 00000 n +0000138852 00000 n +0000133644 00000 n +0000133671 00000 n +0000127092 00000 n +0000127119 00000 n +0000133356 00000 n +0000133504 00000 n +0000133550 00000 n +0000133594 00000 n +0000138587 00000 n +0000138735 00000 n +0000138781 00000 n +0000146310 00000 n +0000146458 00000 n +0000146504 00000 n +0000152989 00000 n +0000153137 00000 n +0000153183 00000 n +0000173619 00000 n +0000173767 00000 n +0000173813 00000 n +0000174005 00000 n +0000174051 00000 n +0000665563 00000 n +0000665352 00000 n +0000665528 00000 n +0000176396 00000 n +0000176656 00000 n +0000176683 00000 n +0000650868 00000 n +0000193900 00000 n +0000194165 00000 n +0000194440 00000 n +0000194710 00000 n +0000466829 00000 n +0000466856 00000 n +0000246127 00000 n +0000246154 00000 n +0000222340 00000 n +0000222367 00000 n +0000194980 00000 n +0000195007 00000 n +0000222102 00000 n +0000222250 00000 n +0000222296 00000 n +0000245889 00000 n +0000246037 00000 n +0000246083 00000 n +0000466591 00000 n +0000466739 00000 n +0000466785 00000 n +0000650626 00000 n +0000650776 00000 n +0000650823 00000 n +0000651018 00000 n +0000651065 00000 n +0000655318 00000 n +0000656757 00000 n +0000655281 00000 n +0000655250 00000 n +0000656420 00000 n +0000656084 00000 n +0000655747 00000 n +0000655409 00000 n +0000657673 00000 n +0000657761 00000 n +0000657639 00000 n +0000657606 00000 n +0000662216 00000 n +0000663699 00000 n +0000662184 00000 n +0000663464 00000 n +0000663227 00000 n +0000662991 00000 n +0000662754 00000 n +0000662518 00000 n +0000662282 00000 n +0000664601 00000 n +0000664675 00000 n +0000664568 00000 n +0000664536 00000 n +0000665382 00000 n +0000665318 00000 n +0000729791 00000 n +0000684894 00000 n +0000728770 00000 n +0000728057 00000 n +0000727336 00000 n +0000688060 00000 n +0000724544 00000 n +0000723822 00000 n +0000687327 00000 n +0000687296 00000 n +0000686653 00000 n +0000686622 00000 n +0000686271 00000 n +0000686240 00000 n +0000685889 00000 n +0000685858 00000 n +0000685507 00000 n +0000685476 00000 n +0000684932 00000 n +0000684863 00000 n +0000730011 00000 n +0000730086 00000 n +0000731447 00000 n +0000731314 00000 n +0000730165 00000 n +0000730210 00000 n +0000730303 00000 n +0000730348 00000 n +0000730441 00000 n +0000730486 00000 n +0000730578 00000 n +0000730623 00000 n +0000730715 00000 n +0000730760 00000 n +0000730852 00000 n +0000730897 00000 n +0000730993 00000 n +0000731038 00000 n +0000731132 00000 n +0000731177 00000 n +0000731269 00000 n +0000731402 00000 n +0000731914 00000 n +0000731962 00000 n +trailer +<<56935D645353EB499AC873DD7CDE4E73>]>> +startxref +732177 +%%EOF diff --git a/doc/Schematics/AD5940/Layout/EVAL-AD5940BIOZ.pdf b/doc/Schematics/AD5940/Layout/EVAL-AD5940BIOZ.pdf new file mode 100644 index 0000000..8a5b7cd --- /dev/null +++ b/doc/Schematics/AD5940/Layout/EVAL-AD5940BIOZ.pdf @@ -0,0 +1,5583 @@ +%PDF-1.6 %âãÏÓ +1 0 obj <>/Metadata 2 0 R/Names 5 0 R/OCProperties<>/OCGs[6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R]>>/Outlines 19 0 R/Pages 3 0 R/StructTreeRoot 20 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2018-11-27T17:18:05Z + 2018-11-27T17:18:03Z + 2018-11-27T17:18:05Z + Allegro Design Publisher + + + uuid:7db9c4bd-17fb-4e03-af95-68608138a6a9 + uuid:27d9be3f-516d-4953-9cac-beaece424cb0 + + + application/pdf + + + Adobe PDF Library 10.1 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 5 0 obj <> endobj 19 0 obj <> endobj 3 0 obj <> endobj 20 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 38 0 obj [35 0 R 36 0 R 37 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R] endobj 39 0 obj [226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R] endobj 40 0 obj [712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R] endobj 41 0 obj [797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R] endobj 42 0 obj [882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R] endobj 43 0 obj [1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R] endobj 44 0 obj [1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R] endobj 45 0 obj [1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R] endobj 46 0 obj [1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R] endobj 47 0 obj [1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R 1332 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R] endobj 1324 0 obj <>]>>/K 0/P 229 0 R/Pg 32 0 R/S/paste_sec>> endobj 1325 0 obj <>]>>/K 1/P 460 0 R/Pg 32 0 R/S/paste_sec>> endobj 1326 0 obj <>]>>/K 2/P 231 0 R/Pg 32 0 R/S/paste_sec>> endobj 1327 0 obj <>]>>/K 3/P 474 0 R/Pg 32 0 R/S/paste_sec>> endobj 1328 0 obj <>]>>/K 4/P 466 0 R/Pg 32 0 R/S/paste_sec>> endobj 1329 0 obj <>]>>/K 5/P 304 0 R/Pg 32 0 R/S/paste_sec>> endobj 1330 0 obj <>]>>/K 6/P 478 0 R/Pg 32 0 R/S/paste_sec>> endobj 1331 0 obj <>]>>/K 7/P 300 0 R/Pg 32 0 R/S/paste_sec>> endobj 1332 0 obj <>]>>/K 8/P 482 0 R/Pg 32 0 R/S/paste_sec>> endobj 1333 0 obj <>]>>/K 9/P 476 0 R/Pg 32 0 R/S/paste_sec>> endobj 1334 0 obj <>]>>/K 10/P 974 0 R/Pg 32 0 R/S/paste_sec>> endobj 1335 0 obj <>]>>/K 11/P 558 0 R/Pg 32 0 R/S/paste_sec>> endobj 1336 0 obj <>]>>/K 12/P 589 0 R/Pg 32 0 R/S/paste_sec>> endobj 1337 0 obj <>]>>/K 13/P 980 0 R/Pg 32 0 R/S/paste_sec>> endobj 1338 0 obj <>]>>/K 14/P 985 0 R/Pg 32 0 R/S/paste_sec>> endobj 1339 0 obj <>]>>/K 15/P 987 0 R/Pg 32 0 R/S/paste_sec>> endobj 1340 0 obj <>]>>/K 16/P 697 0 R/Pg 32 0 R/S/paste_sec>> endobj 1341 0 obj <>]>>/K 17/P 562 0 R/Pg 32 0 R/S/paste_sec>> endobj 1342 0 obj <>]>>/K 18/P 569 0 R/Pg 32 0 R/S/paste_sec>> endobj 569 0 obj <>]>><>]>>]/K[343 568 0 R 796 0 R 881 0 R 1006 0 R 1107 0 R 1210 0 R 1295 0 R 1342 0 R]/P 36 0 R/Pg 24 0 R/S/USB_S->> endobj 32 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 9/Type/Page>> endobj 1345 0 obj [1348 0 R] endobj 1346 0 obj <>stream +H‰ŒWÙªeÇ }?_±퇻»æŒ!âìûBã8˜s!Øÿ~–TU’ê }CÓpÏÚU’JZš¾z½|øÇ×LJï¿vÇWß|}\ÜAÿ~ýùòáõÕþxý÷%Ÿ-úÞùÃú»»#äv–ñãõíòÙŸ~x=þüÝß¾?^Žÿþë·ßúço?}üüõÈ{ÉñL)åv¼~óüÜ·ßCù·bŸÖœ5uçwæâjƒ=?ü"ÿ8./ý¬0¤>ù3µãMùãz!€Ì[×;9×Ë.?^<49ÒÏÜéë~Áÿ¿—PÜY’ƒU>»¡Ú@!ŸaIQøÅ·©Æ.ª0”:ÌŠt‡RÀ¡õ{;óâý™—¬qL¡qRÕ‰@Öµ‰ÓKòÙw(lß¡¨y‡°fò[#9â3Üa„ûÃßúýøâ ß}sÄãË/%ÏsÏ’Së‹!q7øBTÄKjJLít=³bûs~Êuk¢5Ê/£|ÄQ¿ z3 ä#Hâ3ÐØñXeR•ÿÛW +¸=(Ÿ.–GÐû/lK_ˆ¯©¥©œ•= ÆÅ„(nàÕ‚é,5OP®+øDgUKì—ÞŒ$­xxàÞ>ÑD§ï§k!ú# A£¯ ?T,èj¡zú0õéUŸèóªoIŠm^z3’´âc¹3C 'úœè U  Œ9$÷ø}•ß U–Žãø™@©>Á®m›ÕÁŸ}¯«õò;V'e‚?Ëx»aBègÛÁ«-äú΄xC=Lý‘BU«AÄ'ëÒW¼ ªßåR<ݪØ*z›¾t¦¼@¹®àxÁò¯òUü«|U¨>Íû|ÍúŽåß­,ÿnu@Àô <7u@ˆf½3©h}3!ë™yq÷˃7yšÁ8 Œ–NÝ3ŸUë8Ãø×º³ÇZÄQ ‘X²ô>"EÚp”Ç WíÇ`Þ:%}ð%—rV§\r¥NÀ«Ñ_¦¯×õfÁÇOÑš‘:Ï#(²d$Ùsëh5¢Ü M5ëª!­ž=ŒùH ¦ânµ~„•n³‚ø»Û ˆˆv›ò—û/÷Rܽ֓bѭΉ¬ß/ pú§Ñ'ØË­þñaº0*×9™ Ƚ§VÉA­P"Ș*Ç´ó\×'£r˜©H -AÀíœ1·Å'ß{Æ#íçÈ^Ÿïj —w5P@›ér}ÏuÚ™sÙmB&£P"æãGP~0ŒÚ'HéðÔ¢CÇÅêfùóèw­&5¯„ß#Wa½,ÐcuíAÈËÙ`®ßCŽ•²ßƒû[—ïŽa<ÏqUÁŽn°Ç÷YŸ=!˜}ljópð·U£ïM)¾Pª¯ÜµÕW ¡Ý{ñF»·0iuoaÑÞ½iŠ\mhÕSª¡6´šÐ®Ë[hµÞWwº\¶Pƒ,¢ZíƒãòÎv#qæê$ö#h—•`­#’ÚfBLHDSÛL´ÍD®ïÍÄ,"(í» Î»˜ÜþWVTdqI +ÉMYäî‘Mš.j|ÐnirЬc ©@Xo7×86ׯ^/ÜwŽ_¾ÄãõWxª˜œ ge’¡£'wB jçëÛå3ÿùë/—o×]dŒÇJëi¥¥Ó¹gÏKI]…`/@¼RRЃֶbÏN0ŽRmD¦‘Q?²Ý,§ODvµ4LKé[ ÞE\ˆ+¥=r…@—;0°“ãi®g:9À’H©VaöuÔš©½æ vŸÆÌˆxÉÝžrà…2z†žXuê +6T¶1rŠ19»DHOzlšéÁ¢z>•o!¡;W­×16ðç‹:ôE= +¿´<ö¤ÑwløÕX4€°.ºdÀlxp­RölY{X6&N©èù]ý² ¨š¨q÷§«­gúŒº\ËâcË‘A¤Êt Cä…õ³)ˆx Õ7!édY´A†«ØêèôzÊ©ú±g°ºœiÅëIÁy­Î—M“M @-œÆWŠïÔ.Ï,øº®ûÓ»Þ½„1©ìp«`DBõk7¹7s%C[5- LßÄåzÆ¡.S(R¦¡6+8øàyf¶RõE˜æü'M¤‚ç’10Ü–):R‘1™tzc°Eç¬+œ”ÕÈx–VgÞQRû6GFÇá•E$Êè4-iYïbÁS|Cë0`‰¸å‰œK3dbKÆ5PRr¨–²®‹áàÊÒ.OÄ(T'Rj©[Œ=6*#ÉÔ·šfèð•gÔWš••f´Ú†Y§F9{c0ö‰s€dOÆMfhlz£.ƒ«–br ûAŒ‡T`w‘43Âd!¹¦ ÖNn°Eמ”ò¬2M½§Æ•QïëÊ<23QâÕvÄ¥ÄÛ“) lÍ|D u ¤Åo9©HôŸ·¢¯"MÑ'ÇP9*Â2³M)TNOº’À0‰ßtqè,2µI?rGŒûH ÃÌO“G¿#Fb`†M¡ð[‹T9] Šƒ›1þ¶Îo#«‚£Hm.‡¦TÃîq<Á‡›Ñ DO´ß‚»ƒÈL‹ºŽÅ¥œ‘çþ&%Ô–2ž¢,…Ž9X95°ÅErÃgGSÅ.Œ‹}ŠèV𓀎|€$ Ñ†Ê¨xðÍ‚Vñ²l#èò±ÿ¿:f]ï&†U0ôÖ6©Àwâ/sY-D„^MuñsáºícïÖZîšū婀ƒ8¶6L²”ž?áÀ ·§$ +•æ[Úm¦Dc¿ Êɘ¹TÑÞ£2'{Ñěʜ\õ”Lrr2ÓBVE0™¦AÌÆÎiÓ'¤0xšÁWTÔ“íÇïRÓº:Þµeœó)ÓB刣ÓÕ‰¥ï +Jǹ‚Ó´ÒU¤—ØWRNä$¼*ETdz +„ð¡ 2h#Eõ‹âS*Ò-ëqhÿq$ŽãçðŽi{F䮾æ>€)FÜ:ÚZ +uu5œáPôöcÔ›¨*“@ 2Þ¹˜±Þ‰Ä6,‰ÞãþO\ˆÆž»žÃt ¾‰ÃôO=|>Ž?ÇàT©ôÝå?r ³}£…ÕÕUÍ1˜}nɱÔý¬€KþÕJ­2¥?7‘F(Þ6ecÀç„Qº°°:7šÅxèXW>ÑÔ†CPRÐccÈ›4nbc †I[—«ÊÊ{žia(†,¦íLì’€ã[Åôè[nkvu4*“[…E'$ÇRt¨#1®EµJèHÇ$P†à6uLÈL9ðIY3ÄHɪe ™¥f\/Ë’ ÓÝ:#63øÉëhøHé4Š—Kêdr"¹Sò@7ËQ|ZÝ¢ìs£Á9|î!jàŒh¾ÍU–¾ÁÞ;ˆÂÙ)|!WF‚Š{ß.dNñÞï; áÄÅçÂy3t¡ET¾SQ‡—ºæIôõìÈÇzqzŒ=_@K‘Œ\ ¢irôeHx˜QÈÛ“km‚x äÔHŽË Ÿu‚‘ ¹5 ‹úº«u/@t½°ƒjÌS‡æôM—ËøB²\¬Ý})¨Y.Öî^Vd9‰Ç`©X4Ë~Œ‚Y3]¬Ý)˜4ÓÅú‚Q3]¬ß¨™ÎÖïìsÍt¶~g!!Ù¢U˧Ÿ­ß½Îk&ëw +É·èè;žtn3?gmGçó™é}+NTñý%HÄ€îÇiÄ2ñ¸¬ 9S¼œ•ç²`Ažm­ÐU²Eª®à°‘¨KüÙ"õÔ× Rk`'ZR·Þëž!]ëöõÞr¿ ¬~ORMy±°‹ƒ›žžÝË 0Lnb/ HXÁ'£6Ç +Ѹ…"`:ê®D·ÞßÙÁæ-¼±:¿³_¡ð¸ýóÖ<œZ”d\*…ÖWààBß÷{ çqÓZýw<ÏQü!Éúô'll2d8ÁM†Ýd8NÙ|˜¶ü7V,W¿A961°† cËÎ/<Î'1Ö)'7ð5ZI¹¹19¯žÜ˜Ô×OnL¦7Øá߸ÁõÓX´¸ÁÁ(£üŒ½p¸X6=v zlðAj'SäÀ²¤Ç^™ÓŸ˜v¾RÙl|£\VcÊ:¹ü©—ÝùLã_hFuáuùFd0IÞª’]€±ÁKâ@‰ä" ~˜³î•v÷ØVúH7EÅ_°C°5ÿ¶&«‘(sÿ3,ûÀÇèwÝ…W2 ÃHší“Û´ƒwÌØÚæ¾ÚkåH0Õµ B»f“'4AÄeì0Í®g½ÆüLÆFQu ~ 8Ð Ò9á>RNO[Åùët‰?~Š cc»q¥ò‰î*(%fçKÀ) u‚Îô$Õ`K¢—ªO`+ƒý~E…òŽJ"¦ÈNdFBy;!ç:Áâ]ÊÜàh½F}ÐLÅ0—×\¶™…]yáu´]°‚ƒ†¤B?³~s–ùü$B†W!èi5>EÈÎAnG]¦üX ›Ï‹zãak û?3 0Ö_C„¯T¤Wˆ»îô|‘øýL„¨ðq°ÝÌÓUÞ)D–±AÔïê +Ð IËæ´a7¥¥Ï°?/•ÂWIØ)DsG-6X3…(À>÷A£Pˆ,Suì|g}íôuÍÆ…Ã>ÇF(DJ!µ›krÆ?\*Çãm!ÍXE!L;©yÒ`ÍMµÀ™§é &;!4v˜*âçÓP‘îÔ_Îö›ÿ1D³7øc¸`¾ ¬PÚ°® ~ày°Gvt à þ]ŸÀ°îoŠÁ[¶”>Œ +BAd2¿ÂåmäÈrú:ºKä`ÿ0Ç~%ìáÛ(õÕ"~iÅÚä눣›VîÈG¼(ÔF厙Mò0mNæ*­*BÄoŸÆÞh«ÛÅÕÈÇ´,ùP u„©¡+Ž8-ø`+æë¼f 'VcˆÔà^•ήÓ9¥æ™êü6–a ·.šÙS]8(£Þ+m:Î,<Øš«à˜-%ÉÕj'ËY]MtùŒ,Äâ=JÁ6xVŠý¡öz×”MzTý<ëéÿêà Òãîa±WÌðÌtM×}KÎnchG”§ÂN5’Ðôn3Î&ve:\Eƽ«439×<4’3™ÿäB>2eꨃ}éG,¢zð{9ž¢ÉàÒÙúÞÞ?Þ´=Ú h×½êhßjZAr,ý¶] û^ûRé߇H %ÃâÚðw”nâ¬ÛÆ@-&¢`÷÷DÕ†ê¨l0bc¨W€”›Ø’€ÉhKyè©jþîE3Rž—¾·‚]¤Cß»}bcKûš$!é%Í@i»ƒo¼¹¾®Ùð>öçP ˜ŸG%ŽÎòðù¯äîÜvªOnc´ã®ýJ—UOÆÖ€nPjÏ,Ž”ãÓÖ@q~æH+?ÄŠás;[q­‚ã¿õ]ø_®]¥b°o4h:©ñ²E% ¹–wT‹Ž4[Ïm™‘PU!Xj˵f„¤”£×þ@Ÿ­W|Þ<’ +s‹ËÁmVÌí~ëv¿†´I)r¤üˆ¤ßEf™Îõ~4d³ý¯%ä<~U9ÖÁ;ü=Snà˜1|Gèâý‚c p[sîÈK´Ýý^N‹1Þ; ÈÃÅßMÞž…Ñ囎>ìÇÕd–˜ë5:(f³…m&™o e„K³t€šR‚±9ˆ/+ùp°„1 Ä•èPž¦"5{0ŸÝÀ,ü `Èûv¯3½1õÒ î`¾Mh­ÖÃýŽÿîJc +j…Ý¢O©ô"µqZ¥8!Z.ß +½Òö½<þUlÝfÝUoúêVÚ2ÙõÌî$€¿YíTíÞLßÝëŸË9TÜ6”æMÈ«`óâ†ÁEPÁâÅøå–Ú¼iiË+Áèå¹ý¼Xó–úÖÜ Ôæ}Å^¬y¯[¾Îdó%p¿¸ÀÒ›^~–èXPšÏ®¡]õ_Jû¢,x«äåÔfMD\ pÍœß[å×áOgì¾î‘~¢Ö"›LCGù!<–ÖŒI&ŒšSÖô½,›ã¿‡Ñ Åèp¯àK@Ë©»{æôÇH;ÇÉçíƒFQ:SÇxqú&a:ˆÓ¹è.˜e¢ +wPÏ€sþòs™oBWŸ°”Ìesúò^Å\v§/v‚ÑÜÒé °G;§9}3§šÝcô½bÇFìóàôÕäqî.¤ŸÄý‘ÿ§¼Zvô¼mè~žb–í†ÓEÑKŠØо@bfÓ÷_ôP$%JúœÄ^ù?âÈ#ò0zms¿AÕÓ#&¸‘˜N^Øs&/2·¿‹ÓÕ¯ñ"êÞiy)ùR¯™[r§•¼Xg^è^D]{,/¢.¨–QTË €.ž¼ˆº@X^D]J¶Ø1¬ãN +MþÆ >Sã¹§aW‡={Z¸xA{V§üPê¼’ÐQÜøÐUV×ÖN[@ñ2æÄhEãÖŽ c/`+YG LŽ6€âD 0+Ém:ÙGpJX $[ŸóħXJâ¨}]f5IŽºŽæûeŠtô\÷Ñ…Ž{˜†½‚ÙºøoN ZW+­X%IúF—‹øbd9I»{g³œ¤Ý½ 0#Ëaxt’z€‰³¬Ç09ÓIÚƒ3¤ß1è9ÓIú€œé(ýN>çLGéw’=´j2qJðQúÝ›½f~Ç`ù:z'Ømæ×3¶ÃóÙfú¡Ïa%à‰:|¿Äc@Wsaƒ¸mV‚ØOgé\$HÛÖ¹JP¶HÕ6v‰?Ozê}Is`M¡JïUÏŒ]óòu·ÜoÆa–¿MRõñbaçmz|v-T^€®Ó&öÆ–ðIËE±D@+´… 2: +Àêx:È»@]z#|G‹¶ð,Ä"Pùõ +‰Ž ^?/EÃɉIFKå õ8¸P×ýÞlÂé¸.­~‚+žs?$¹I—~âÀ‘N&“%ƒ,ºÈ`NY|è²|+¦«ß ‚R,b` k–•_xì'1æ)–ø­$íÜè4¯NntÒ×'7º ÓÔá/nÐú),šÜ Á8F¹=Ñp‘lLz¬z,ð Ç£Ú‰$r`™Â±WÆðч•€÷‰dj6ºQN«ÖÇ:9ýµÎ—º³MãïÐŒìBëò aÁ¤ñ~P•¨ŒüH(TÄ Á7cä½RŽ ÁÝ–?ÒEÑáÏÉ!X„Š~›ƒ‚YHiÿ,êÀÇèîª +¯ †")²O,]^1ckëëjo3Ï@œ¨®‰HœXä‘ÞÊOØ)^½k$A€—HžP:1e{kšÓ„Ùe-èÁc·u +' FIð‚z‘‘ +¨È·ù#çPË ¡O¹ÛaiŠ€ú4 žÂvذ-ÝÓŠ&ÊP.c–Þr•eRÒóà˜<ä•[¶9¨ÅuŽC(sˆ+C@KU§HR¿m9I›SÄwœÜ¤!îQVs\çû²Q‘Ì,Â`Ï:½Î»BËv–’´ûc>hqð‡ûBŸõž¤rˆõø”ö“ãOæ&düNbeoñõ®+è¥wªhdÄA›ÎüGªæU( ®ì$…²•ŸÃe£ÈÊÍF''Ò~§gh£-’7™=µƒOŽvŠOß‘Žt)ÖYg“v u¯±Ó"®ìØRÓ”MW—9™ÃtBqópˆ3OLŽi‡m j;•äè×Ô‡¿ 1@’F™¢¢PÒóiä! ̶ÜõÚ¡ÀAŸßnĘçx'd`Ô»›a°Ú²·¬ ò4î/§N;/ЪùD™kÏ~·ÅæF¿ã‰Ú‹ú-iÕ½×σ¼¿9èvRDƒòQK+AGξðRvT6`c¼+ò,VP»+‹µ(彬´žÝe ÕtÇyaƒšâ.¶¸r”-bêwe†£²ÔÙa•”©›Ç¨Ж言©é2´5…S¡ÚvË4éoÊ*arYCÙ‹Jëæ]ÔÇt¡®^Ñ ²yð(b¸kãfÇX(¹u×(~èÃØFnh ÚÞIéš¹ôÚì(òvuy Jš&wÜmëîº$­MŽž¬~³1Z²®ûLVã +¹ß†¥’õHWØcÔb‚ÃïõÊ猕¹.{³i‘#mþVl6ÑEY+ }ü¢VYÚŠiÞªJÛ‡×ñïƒwsÉó¢÷KÛ[#Š^êSkºZ㌻Óçæ# íÙR£ºû±i_gÚò¬ølå"³Ú¥æi-úlžÆ[uf2͓ƪÁáGº«­&æ’Ë×–yߖávN)¼ËâäüÔ ˜¼Ñšlx¼9íxFw}¾$*H¤ˆ½’AíÝ×ç6Ië(›PŽiËü ~«Ò]Q•b)ïÉ¢Jû1çC^[a&iwgÊͨ šº +ûî€úY¯(µY4Ç;¡Ñk +ƒ !šÆŒßÉ]Y2Þœxà“uƒè²í0*â€ÖXÕ̸QÚ[8]]Êt *®íç'€-š,רç™÷„æÆuX– éÉóì +S©]–´n/QLm8úµ-ÃüvÝ1}ôM#çý>På¶ E-àvX„„Š7ZMk[ ’ÍIŒôIåb¾ÖÇì©s«9OA™ˆÃsÜg¢LG»ÀuÚd‚Côö¤l㠨ƓpçëÅ_ g?]yØP ¼¢ŸÏTÇÁ;¨ –|U˜Iܦ›ú°«"#c%ÎÙ̘õ&V  ¶òA…à÷êù4Ž´eöi ù ʬ—í‡e*Sz ´ºÚºòwÝáQ^—-=Ž^eVaËC¶nàÖcÜiõ}|jJ@óMœÜUmIÇe]Š,(#O€Æ~R.?H)—/)E[Òñî!Ñ/)µvUóñ·ÏÝlø_“èE8 ÚωBÛÚ ¢Õ£mnýI/[ã×8Xç÷'mnÉ®õN wë©rZ¾¾7àv­ZÎÇU{¼•ÚΧäx)µŸ¥¹‡wðx&@îWo÷#Á¡÷Âü|"ïRËö@`s¿€÷óÀ¹÷ë X¤?¼ JÂÃÓ¨ááe”~?ŒÒÏwQýù, ¼¯WQ¾¯½+b¾+é¡Ç—lvÍÀ:2×dôÐåQ„ ˜¬”)tµ~æ¼±{ŽJkX ùòòöÝW÷ê_ÿ÷Œ°á·{EY_s’æ»>ç¯ï/øü˧¿}øôcîÉýð—Ÿþýúóç_>üðǯÿ}ù¬Î~þóKp^T’Çsîž O( —§[AƒŠ Œ –f édà4,“jä±Õõ ¿ùYàéϽÑн»Y +úª¶Z@åÄZ £ÄŽ…‚ð¾‡)â¬a˜¢m^ ÎGù”(ã‚кá);õÉÚݛҖvtX·ÄgkîRwö޾5Ò-33øO š’Îmª)ñRÇw +±sí¦ËŸ15G(¤É7šS½+:"g¹žZ;`SG_í§ +¤G¨·ù;Òû˜¡ßu#‘=Œ6c­dzñù*ÔúÛŠgA_ÆžÙ‹¹÷ûX¼¢å©11 T«- ¼alY˜ ¡Aw¶¹0ZtÀŠóº«%·nîß)|$”dIö6¯EAöÙy÷ßvl‹äHzÝÙcZ⟜|¥pÚ:³%úúHV58 ¢èEïi¿g§Vùr§-S¤Jy-›£ªö¹ú7þ*}ÖÌq@Ýϧ'¥Ú_{Q'× ï»LúJ¶ê¿ä½\Gª›Ê‹1h9‹M̹¾¦ü$óA÷<Íþþì8“ñ³¼ÚÀ8êÔšyqk>Ð5*ªÝÙywg–¥Ú2&ãh”Ç %ò_ˆÊÿîC‹!m¼S;CäN,k–Ú¬YÖ›5Û“ˆcÎÞë•íZvܬ³hL‹‰¬-M#Œˆ½çÅîëòþ ohg‹,¿Üdù‹‡Ÿ 0ÁÐÐ`gða{×·—ëUôáóö2|zéÔ?¡>]EÎóõù ·Ú§^‚5 ¦õ?WŠi! +endstream endobj 6 0 obj <> endobj 7 0 obj <> endobj 9 0 obj <> endobj 11 0 obj <> endobj 17 0 obj <> endobj 1347 0 obj <> endobj 1349 0 obj <> endobj 1348 0 obj <>/Border[0 0 0]/OC 1351 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1350 0 obj <> endobj 1351 0 obj <> endobj 1352 0 obj (var n="Drawing Origin";F\(n\);) endobj 36 0 obj <>]>>/K[1 298 0 R 267 0 R 389 0 R 653 0 R 470 0 R 637 0 R 435 0 R 496 0 R 231 0 R 462 0 R 482 0 R 439 0 R 478 0 R 480 0 R 357 0 R 419 0 R 300 0 R 488 0 R 385 0 R 383 0 R 381 0 R 359 0 R 533 0 R 528 0 R 531 0 R 510 0 R 508 0 R 505 0 R 415 0 R 413 0 R 476 0 R 229 0 R 437 0 R 304 0 R 494 0 R 433 0 R 609 0 R 549 0 R 233 0 R 235 0 R 543 0 R 452 0 R 250 0 R 458 0 R 456 0 R 442 0 R 450 0 R 454 0 R 448 0 R 595 0 R 333 0 R 335 0 R 603 0 R 252 0 R 242 0 R 317 0 R 265 0 R 310 0 R 237 0 R 423 0 R 421 0 R 468 0 R 472 0 R 484 0 R 486 0 R 657 0 R 276 0 R 410 0 R 283 0 R 378 0 R 655 0 R 651 0 R 490 0 R 425 0 R 665 0 R 642 0 R 644 0 R 663 0 R 661 0 R 659 0 R 640 0 R 614 0 R 353 0 R 330 0 R 564 0 R 554 0 R 616 0 R 690 0 R 567 0 R 587 0 R 367 0 R 341 0 R 699 0 R 697 0 R 627 0 R 546 0 R 346 0 R 371 0 R 980 0 R 985 0 R 974 0 R 987 0 R 673 0 R 306 0 R 319 0 R 314 0 R 263 0 R 240 0 R 393 0 R 398 0 R 259 0 R 256 0 R 293 0 R 558 0 R 589 0 R 562 0 R 569 0 R 464 0 R 466 0 R 492 0 R 460 0 R 474 0 R 446 0 R 444 0 R]/P 33 0 R/Pg 23 0 R/S/Net>> endobj 24 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 1/Type/Page>> endobj 1353 0 obj [1357 0 R] endobj 1354 0 obj <>stream +H‰|W˪-·ï¯èa2¸ºz?ÀâG‚CLŒsæÁ'ÎOLþ>¥–ªJ-U7— §×^ZU’Jõøêíõù¯_Ÿ¿ÿZ_}óõñÒGû÷ëϯÏooú0ÇÛ?_AegJ9À¿sRÉDzŠÖôV_¿ûÃoÇ¿ûË÷ǧãÃüý¿¿þ»þôëÿ~ÿö È~ +NyïC>Þ¾y ~û=8ñ-ye†W`­hsh¢NüúñO ùÛñúTT‡Êa¼Q>•úããÕ¼Ì^@ƪMçãõ¯×ß^,éfË©PÚ¯¿ð üÿóñ²Q«è5xe‚î¦'ÈeQ…áO&339²ASw˵å@òHø}á|2FÔê4†:“Í‘àië"Ç‹h4ïƒáyŒNû`ÂìæIXc£UñÙ'™MàÊ&™*I|,žˆìÅùœåȆ#(ÞÅ´úgÝùîà 2¤SÂÉEy8ŸtÐ:B ¶¼~=A°Îfmä´  pÀ çS<_BÀ<¡‘v’2ö†‰ÐÂDº/ÆT¦”þr%l±oTÖ:ËÔE©“ëjrµ”—’£*.C@VÆ`y +T0G+_l» JØ•J +u_½8 Pû7¹ÒxŠ(§ΚZ1¶->Ë­ËÑŽÁ rçÚcZŠDäÂdu 3 VÛ¬ŽÐ3ÖÃ3?âù´5ºÓA(TÖ¶â:³ Þz™MàÊ&™*I|,žˆìÅùœsÁcvš'Y†žR×ÁC/k[A!¬oê´Ž÷—kM_ËÌB„”v{ý|3¶P†„YFÒ' Zy?U•KíSâ¶pI£ +ë?®>HÜŇ»„èð`á |+‡ÄâœõÍKh;н‚ä”I¶ç^\ŠÐû |Õ~á1„j‚Õ~¾ÙBзššZ±=[h„ŒUÙ4fßô:¹« +\‚V.‰TIàãâƒÈ]¼¸iõŒÞ[½ÐšÞÞ½s_G C¾½›sò¡¥QÃ7‘ÎoÖÙíÝ7U>qâ\›{àYº0&!xÀ]€@†<äèú¢þM‡m“`ójüLß“ÂÕÌ“oañÍ{]oF'GdÞÔܱ¨̾ŸÙWV¸šyè•õ”ÿ¡_±¥] >Á:ƒ­¯šJ8™¼†6‚eª$ìÍh•$ [ÎûàÅwüNsAn—>uõ¹‡öýãçócZ¾™y8w˜µèÜáº}i}¡¡Æ~ݵñNéÔŽAf›Kk?±73»ßÒb´J Ù$ÜX´ÊêQ‹`& ԃ쓜wC Š¿={e‘‹ØÊE*¬ÜÍ^Ö?Ž6š_¯†d¬ƒÁÔAߥÏDm¡7L¾Õ4G¿Ol˜¥\lÇZ% œPFd¸²EOöMj·Ô“@–UÐT¶d=¹s¾ÿz({‘›Îa6´ù†ŒàJF‘* w³XÇM%Ï·G‰PÏS¬3XTðé2ùõô"³ÜØ(S% Œ„Íh•$ßUäDmaqg&„v:w¹ tmàG 3Bk¹í Á2U’À>z3Z%‰Çyši¡qðy˜±C±¤Bæì“aD5c;±•‹UX?¸›½*¬ ÁÀ•§@VÚÊ=Ñhœ9èÀ(L t¼)6Û"›À•M2U’À§µ­’ÄóÆâ¾18>·Y•æzÎvD6‚eª$±mLd_=¹IñÁÏ)¾øvźÑS¢¥¤bh*rŠlLû²IFd#¸±EO®ì›·åèÆZ³r†ÐòC»á.ë Fh9§rÜj~+‘7l76ÊTIb°w£U’x.Ê–CÑAm ÚALÑeb«ŒbÀ0ú¸{Ä*`¨$óÝù²?WþÝ[ãt_ ˜{ðÊ[|=‚°›Þ8fÎÚ/³ÜØ(S% doF«$ñüÖèæ¬ÅÔ ú,#ás,ã=;C—ªÇ{Ø%2"›À•-z²°onÌ9N"fä$§i~aæµË´ NOV"›À•M2U’À$²­’Äs(jÞX Œ–ÉôÖo!,?t«CïÜd2‚+Eª €ÜÍb7•õÜ'ö¨n?V…錬¶#Üe6‚eª$Á}âb´JïËÒ`iM&Lnä*ƒæº±3[µ¨Ùîê*³ »ºK {3Z%‰çZæ…Z¥Ñö9aáÀŒXËD6‚eª$±Õ2‘}õ俯ü”йÉgz`FíYË)›ZôˆY‹ØpܺAÙ$#²ÜØ¢'WöÍÆLáyåΧXLÇVé³™!;«F£´K ›dD6‚[ôäʾÙÈN1úö:Kžž,‚Fëå!´lú"À•Í:UÒà´¸š­¢ÈãæòŽÐ›žÎHÆŽÕYeÏœQ<[âà H=« 2ø¬$ó Ýø²? ÿ&õn­2dÝNÄ´S:Ïêc*Êšî¢8š0&¦ÔIeð'%™èΗý¹òïZ,OX ÍvƒŽ]w`½æÏ7"¨pbw´¿Þ `¹Š*Ïäâm"6€ÓL-öhç–™ŠÙÓLµK ›dDö2ÝíF«$ñ\ +x5~DõŸOc3NìÙø&l’Ùë1lF«$ñX¼3u%íŠíÙMHÀ8D0Çk§v +T>r™àÆF™*I ön´JÓŠ>ªpûé{}…Ƶœ½(a]Œ¹àBê#å¾~pICâ"¶r%®Ü› %*Ú|º%ù|àÑŠ§)² ÜÎeª$±Ý«Ä^<‘7–îËh^Zj…?¬kñL˜K“e8<–¸„-\Ò¨ÂúÎÝíUaýcƒ'·eÁªèÖI+hR¹g¥AI&#¸’Q¤ +ëX&’¯^È›ŠŽ^S%!Yõ ú^UÇž©¤ŒY·î«éÙaÛ©„-\Á…zsA%Ï#¦ í¤Ì9ôŒæ[ÃXÛËd”AägeB}⮂|V’ùˆî|ÙŸ+ÿnƒt[¦@xŸ'ÒÆ|ü úKðÈNåiev¼„ÿÄöô doF«$ñ´±0]ˆµ3”‹Üç«íè1 ä¢Ä­éy\@¶ú×MàÊ=YØ7ùƒ›](óé|Î`O† ’«ý?ãÕmdIŒCýbØ.jÁù—¸ËüÝ@@w3õû̓"Aˆ’b8@zãȆó[£ž¢—QR£²lÕ“›ý¶žìÂèÒz³ÅÓý`¼³Å›õ–u¶¿²å`Ç·Ra´i*>s~FH “kýIå©ÆÃ¹ô™lOK±ócs\l¡b¯ŸKÊFP°UOn¶X¡3¥ £B%j‹+÷Ð ™ŸGíÓ¸éz‰[ö +äWØkŠüçvâ” ž¹õ±!Õ~ëYódï‹_ªr~‚KI獤i +›lš‚¯€öŒÜŒŸ)­áycîq¾?k:txÁ³I.bœ‹:š"¿¸Â^Sä¿âqãù ƒåXQá/üJ#‹þú'º1°8µlóoú ¨Xì­Fe#(ت'7û-ñ袌ËNXÇÕþ$hnŽÎNu;¯ƒlšŠÅÞjT6‚‚­zr³_Ktc&®2ÐSŒYƒ†{L}j3½Ù«l9›Ô4MÅbK£MSñ™‰™2F•KÇ”×ðºAØ’æ$0µExµÅ×2ŒLJš¢`¥¡´ØŸ—µë94·'„èÓX2èí’ìöòCè:ÒÍ70“ædú›Ñ´à…‘&O¨àëþ0¾à®&ÉYœ¡õÅX‡.¨U^,BëX‘é`ñó«piôqiШ„1®â£þ…²‚…»sP?Ceó/DžL6ðjë“`?«’mãjŽƒ-T ;?©zh:AΆÉÎB§É+TpOT6‚ S~.ööD°EøMSñ9•jöÎCN¥èû¦›žP½Ã,%Á‡äGHâCË¥ÿjª–Åßšt>¡‚¯ûÃø/æ`€œrr*@c‚r?ìCY¬0mä P_À,¼ÄC¡_Ð}¹À"mÒêïŒöØbÌ6VÊØ™¢2ôA‚þ1®OPÅ£ýT€'—àAÑÙröé‡T±ØÜÁ¦)ø,°–Wå‚Aäþ8b]Õ°Õˆ‘›¡š„êFò«e Kãj>0îK@u·wp?ÖCîÅl}ÁÁñ+$ ¸ã›óú—ä t’‹Ë¬4Uú3³[ží›Þö ?o50ÃöËIÛ'$lŸNŒ‘énBìûaÓðá4×+A10?÷âÐ <·Ú/œ@\f‘Ýס +´³¥ +¬r¨FeÈÙª'Œýö>(€ŸÇAÀÜ ýbœapHõÈ*p)×7.aœŒJš¦`=4ÔDm…boD€׬xð‡5-x ¤IçóËMÕò ·´zÚŸxŠBŒ×RôàŸ+Zð@H“Îgk–›ªå³¨DjºÕCÙGž’gªå©7‹ Nu› ËEIi ™ŠŠÅ&5*›@ÎV=aì···‹ Œ*qŒ’.>.à|‰ t•jƒL̰àªd™”4Eöa±) +>ÓÑÙ=QØ'ˆ÷fs~ŒþÞ6ÿL/E òI“Îçé¨Xnª–Ïtôtk–šØ%aNÎyÎ_Å-„MeÄM†Ò9×IùÅE—0ÆÕ|`Ü—€0Úua'¨°^K-akCnòOr1u¥qŒE?—œDi¦)Âß—@AÌÃæ‡šè'ýX=sS¦Sc’ÔYç§ ÀˆšiÆ}›áÅEĺV×ãˆC||TîBãƸ¤£)òìR4.óámd§­²Ä¥ŒÒ’ÞÀŽZ¡ÕFH§cìÉòû§@<)ãs¿ aé÷=ós¢@Õ ß¤uE{”ĻޓFnÑÞ¦¢ó¥ÿïS62 k ù¡PX_Êí© “…&û`h²wæI#èv ¯ÐpŸRÆf¬~ŒiXGîR¡0'ÄxŠõ“÷HÚ+ŠÍgvl Ðÿͼ· 9Y¨Æ©¼råì©£)ò‹)ì5!ý™8)í€ÌzA0¬ÍÎÑNЎֱ̚4žŸÎDq§‚&…1fªqÑÏ@•x×ãéÇC e¨ÉO°Ý҂бÉsþkg·(òP\aĹŠuÆ} Äï§ücÌÏÿóÇB31õ2þ?æ«G’äêóŠzAn܇La +\€|B ALJ$Àï¯Åáîqe¡[¡Jkó#.wsojÙÉý¨èe„XÙTÖdF¬nº±°°¶ˆ#ëaC·Eþº­ Ê»Òàs?\X©Pì2òÆ3·C+“]Ü»9q·p÷ÉÁÇ•9'— C‡ªí¹  {ö8àIž¹~îÄµÒ Vsºl[¸{7ÿXϤoS.´{•9'÷;nà£C©>u®†6£"º˜“]¸mÜc3ûá„"wSwÑñ³-»Sž-C´çÌMýÙÌå|ª‹3 ec u¯¦Ÿ¯Z¯š­—´ÌHTnÄf ·¼¨uóÀ$pá6÷n,×l +u¯¦ŸBë€dC)WNí¦¶owE=ÜÈÚP·råÑ÷Ê#ûû`Û¸sœû`ûñ‰Dy"xZa*|%´®•-ÞðЂÆ +ØSv¸b4ÙWöæ‚ØìæÈ&pc3™Ùç…%–2e¤>7<1cÊù +‚×—å*”aÔÄ3³!+ìïͶ3·H÷Áúãè‰bGO^C(¸rò˜f|—wZc‹´¨ß~áêÞî“bw'G. ÷ÃÌ|XP”þÙíÊÔ¶…ep‹‰n »1ÙÅë¶éœÃÌ~Z̷Ц1ÅVã[ѼGPÕúH¡1aæ83 \¸ÍÁ½wÞê^M?.DŠ2ôB¬;#Ùa‡ìˆ5gÂ5}8Ù­;“=ìL3L'{¤{³ýXÔð–ý(‡ÐØž" &B›R£@OWRéÈ$ha’ƒ{7&æêÞ?.D™¹¼×©?å•jë2ÉŽ)ÎÅÈ…¨b«=u¿îãÄelážrX¸OO…_J¸lÈÚ¨ÖûPâ +/•b`©ñйAŸ¹„­\òqì;w‹wì?­ÇDË röR˜%peK¹ð½˜ô rªµ„Ù€Gîݸs×P÷ÉüóÁÈBzÁ@í‹äŒ ØßàZmN\‚6.9¹OæzwæÎY<œLN&÷*âÓecw' D«B;WëË™KàÂ%÷nNÌ-ܽ›\éoÕmq^νM¹Ç¼@t‰˜¯Ðç“ÍœNˆ]¹nìC3÷¼ Ìµ ´Ê c†5}0rêJÎÒå3s×P÷Áºs»‡“°™¹GŸy@Öã( +ƒH«®[:¯-º•A<;ÝÔ5ñî‚ØäæÈfpe3YØç…y'³&ê}±ÓÐà†c£®”ÐÒàÅluYÄ®5nwÁM…ÜÙnìc&3ûá%%yôK¿Ôëï¿×§ë6A&L®¿Ïø-ƒ +½æX.‚ŸÙnlrsŸ\HMY‚Þ'ŸV´,Pa‰X GOWá¥MŸuïqj…b¬¹ìÌÒ_Ê«^ ;‰ŒZû\8§ #ñá]Eqr›}߇饸Ý}Ó·ò>¹X_á™MàÆ>f2³ +«lÌKÞºâ*ù^xòej e¬ïec&ÜïÔwr±í¥Œìw&# ó}á>ˆS>¼EÕì2Gµþ²%jž< ÓqÔݺs»‡ÓM«^cÝ›íÇuðy@šÛzêeZŒ±®.M VûK6žph7çà‚«"¹9² ÜØÇLföà +2=¨}Û˜«£«—– 1‰ 3‹2¨¬úÌíÐÊd÷nNÜ-Ü}rðQ¤ÊXWЦ{aC౺ +xލ+I0A00*¥ô«Ñçû„—rå'c‚°›9Òû¹]ÚaV‹6$D֥ܫÛPÕAì„ ‘§SOU?\Èìä>8à1px|VÑò6 ÑË㪫}ÛuÊ|[6™AÊ™†º—lÊЦ +ÖHªßƒŸ-ÞóÞ[¹õÌê5O´rÏFÿ I +l:æ¡.ÌHªßâg÷)O½çi¡cž ©C¤9O†8ÏT¿ÅÏï9ÏRo¶sóäCÿr89Â!Ï~ÎBªßƒŸ-Þ§ý´û~¢èû¼î'ƒÃÇË©y?âýHõ[üìñ>äi-mȃºœíyæx•ŸI@ t{I"KBe‚Fý\l¡žSÔr5q‘}]º¨©GzÿÀêmÝ5ÆÁØ×n3jŸïR¢¡àú?ëo6Ý|ºŠy¿Šã󽓣‘Ûɧ'·j8â~õ„T¿?[<γ%ûÇ_^ÈÒ¾jz¿ýíŸÿ“´u¤´ ¸@±ô¸ÿøþþ +›ßÿ¡^ÿúïmì•s¥Î¨ìMÙrmô•1‘¢+ùKÕ<º80“ª7qf¯ˆœ T³õ/Ÿ.‡užØ=»4ºõÌÞ\t6M +kRX“êkÒmMe²)%Ï[œGkù%Måü€ý°p¹d;ÆÆnƘm½0ø™˜Bp‚ -l|M¦ zWÇÎ<†º·=ª\ÙùÜó÷ÎÝ]:a¿¦Irð¸NŽ&\¡)¨‘ºÙËÉÞ–3Ë—Çv›‹mSGöæâkÇÞO3è+Õƒ»‡Ódp:âŒû½ÞÁ¶ ³.YMÇNàáªÎÇNÐtì#¡îmúpìî[ÏÝ`é1+h³`¯dUªÒ K7ˆSÔëíe»œ9˜w6$ +u±ÿÊ!Ü« Ê9¨Híz‚ :ÔšPÃ\Ö˜ý#Hæ-*oeê.…ÒV +˜ÑþrÆ–ö@à7eP ;ú~ÕÚL$†ÄÕï=íVy-‡²†À Rq̾ßÕNÇp$1$®ÆxïñDOØr¦­ë꘮‚EÂÝ„ »ö]”‹¹:ša}N¶`5™n"©ä€^a{  EÒCL•¨“h{kx ‰·-ê{¼*Úáæ¦ZµT¯ ÈʹË@DDr¨ÑðËvíù8"H1úûlꮈTMñ-ú@ Fài÷šì´«ñq;”þß¿ÄÁ¨Æ‡Jr!¶±$8ß;žÇµŒ9 +8@ý×’&¦! ‹R›v‰ÇÐèm‰:ß×_)«CA¶v+Ȩߗ™Óµ2«R†$j6¦ŠBcʃ8 žÌ²yy¥9Ç–@'H…, ÐgK £}š‘3@âiøloJý"[q8±à¿¥œœ.•ËÔ„ ÍQ(Az¯³¥ú<˛ݰ]Åòîa û bý‡ÁvöìÈ8 W8+yö0°UÎfNdsAlh;¥MÜØ³‹/I8ç{σN Îõzgøû'{ìa¨ßlBЖ•È6ÜÚ¤eÛu96š²lylòÌcˆ¼mQŸªÄ÷¦´znzWW€¨H)8^³ïJ s(.ã½Ú­4´DOz~±%*æ®\TE õIÎT¶ÿÒÙ⺥rÝ_*¹~ºyjÐÏòÐÓ]›‹©€ÿ溆mp.3UmÒ¤à{Yàϱš †FOÃçÓÉò¦AMqUV!^eaE uÝÄv¬¬ 0¡]DYñ÷àd V+ÿ³²ÂˆyVV±bÓAY!2o[ÔYY¡ÁZ䩸2”Í}€¡±3Wñ`½ÞÍ€¡Ñ×±µE¥1¢=7Æ¢¦Ç†Òñ]˜[㉯)â"m~‰mÙ/µuæ[S¦¥Ææè5cÄ)ï°ŠÞ8#S!©4S7ûþÞs¼RÊZ¡ªLùq7°ÊxÈë|dûÚ3î“}OC¡‹`_Йˮ·O´šŽI_Å}>økñ ¯kúâo¶|:›uRyñ/‡òkž7ój;@¼ÁŠ8ºWpÞ¥{3¤¼ª~tn¦nöã*Ê^aO}íþ+wßéný•VB»P”g«hXû +„$Büº¿a‡Ä‡I ®æxå‘Vö¯åà!uªl%P ¬Îš1ú.9èÞiAƒ«9^Í¡ÌsÐÞ©Ÿ/u¶¤! .§*—Í@#ë3D¦tD¥t—‡P©4’zJ bsrkÀå”s° ™ÓcÄ‹S¾<”ÓîWgth‹p&ðçêõçh. ]ÖÔ®Ô˜¯Çó†(³À?i¯–ÜZr\¹•Z!R¢>ëéI¡aßö_ð§Tfêz`À‡”(‰ ïñ†ûþ}ëUk~±ð•ÝZôU»Û•²4ñOž#/èïÏìZ¯äŸIuÑpôþ¹èE©9õ°|z_œÖœ¡|Æœ#誚°¸øe +9–ƒÏÿ—5r§‰Qµ‚¬¡*(ýß-¼ýo¬é‘ÝäëÃèã@’Aiÿp™$†J°êvÈŸ9ÌáWWreú¼õ4zy¾•¾Öx꯶ïûpï? T¬q‘ÙfϺ(!Ls3’œTš?oj­wÛß6þjãÉ£¼ dÈË÷÷É£‡Ñ¦Ök©û~ õ%tçQÜhá;m~ÓýÉ¥øÁYñäRÄLvÑæg0Ýs]Æ Ù +ã}´|U&%ô}@¨ýiÕNÐì÷›áËû˜Uì2k½?Ÿ–xZóŽÿù´Äe=ˆZãVùf¼Wx«Ó»ûŸq¢vhe?wÕƒ +øÐ2Àt¥ì!/ÜÂoC¡ ·ßV›úÒb³c}±Ï]@^ð¡!/ÞÛÂoC—<¼ÂX7^vÞ;ì6;îÕÞ»:.m*B¸äÌøÛÔØ·KÔÅ'(Ÿ +R˜7ùïN®êÀo6a~‚Ì/Wƒ6”ŽèwœÂ ¹aßѲ’MÓ÷ÂþWk¾ º÷?köÖ1ë_ºcËÁL—@ãöúœ*zŽoŠ*û¾ìË®·jZ"öõÆÈFÂVb¢P+e5@P¤6ÂV J2bhmh·1Q¤¨›Þ–CR'¡>±T@à5ͯ¯Ù¹™ãЫü… o«t‡0úUZ\ #¢ŽÑ“Œ´¢"ÄìA×8ÄÅ-À«ì+ÂÖ}M‘û†ÌéߣPmú͵%"8øNî‹ARÛÝ¢E ¡cü¥Œ,-ýš°nÆÂyYýP¤5ýÆP„æbd º¦ÉSŠ8'é¬DΊòP¨ðÌ·è¬~eôK¡“Ø~E°C‹«âEèjUW*EŸÒ‘Qqߘ04­ýí1ᎩÐ(þö*Vu0$@Ÿd68²ˆ +uR²“wu³B­db)×*‚IÖ°C5?¬€™ñ +Õ«³1„Bl9 +’*è7€¶›XZ)4dXàt*¶2.¡Ö¦EÅÒÓ\»ÅÙTÈ!íÈ‹cÃÚªED·ë¤²j¥Ù,¿EªK¦4 ¨Ù‹6i5öÔûp,:Í A!Q'knDz*$½hS-B€î³¼¦™Ъž²eŒ°êÐ&š/ÐC××™‡îÈ(ƒX¾W\–DÉkGÂ’D­.êz\G®$âje%Ò‹Wdkù½“%»}ÛšÜS¥ãíCIiŽ )M(Ä&" B&(TiP@c¡ä1ϵ!¢¥×ŒŸ Rb„râ !—µf»´C¢Aè/7¨+#nhó¬i}Ë (?…\5 äžA¨ñ‚ ©_]ͧ"V5€º“ƒ©1*¨<¶_+šZ†i$Æ< nŠk@9Ínoít«²Ø3B8‚ª4G÷¼ £ÚØ ‹b³Úw"*ÖFúX.SA=:¤¬«¯_f¤7 ©ÅØ©WNLg5 =–ÒŽTÂfÜ.Ö+la +HÓX­ÕxÒNÒ­VŠ qâA7‰•úGðhŽ œÝ™oJ<;¤©‘Èèy½ÝÎÁ:³xU’`ôÌÐ +ÖYÔ쵫¢0!™~^"R󌲹¯7M]e®À9FuH³QPçá7§•iú‹!‹‚vPÞ˜Fã,´{=?Bw²Ôƒ>Àÿ¼³âµGtox\ÓH¬X0=‚Þi|‚–;šsYÏE©“ChtÆ:hÂ^*ë[³4Ÿ¥Åêh!Z A(–U:jmšŒrÎR' ;;ø‹ÕüQv9‚oVC¥Œí9+ú„Ú%ùŽ—i)ÈßÕáß-Ÿ°ic_õaùÏãÖúhÙ®~Sf{|¹qDâÅŸYò“À­ŒgG·~ðy@ +=‡ó²¤ +dØ€ra -Öõòíu?Ú&öxãÓ6Ÿùa»µ7a¢ MÜŸ cŽ…¶·¼À¶¿=º úcR´¤ª¸øøúÖ¯Åúåg_D1Ì`ßžE‡®øˆÕމ–ÙE1ôVÙhJ¡A#•Œ6@ I‘„oPCËK-µnÆ…ôD3¨Š­2$…ºASá*SÅŠbã²C3g}n´Tp¨ ¬¬šyly”«D@JKØ4 ôº®áGˆ‚D©y‰¸Ì­nyuç_0d«!¬ £$Öj鼦9D½[u@«´½Xuè²<ÓX-1/6‹­ô9á¶’ W—´öѪW]Ç ÿ[š9ÙŸŠÙÆ.…ʪ5›I{›…µK[hØä Iy d3†Š0î w!>ÚZ«È,û=­x¦hu"ºâŽ:Õu­u¬ò4¦ê“˜j5”½…`ÖlÖP µYŠŒL”3c•Y΂i"„¬4GEµ°Í†;ïC‘ºÉÞÚl¤¨©i²&Œ¬Ñ¦â¥4§‘ü’±‘çQį<…±ÈŒ u˜X†µXܬÙùs1ÜÙÙ®­K–oÓHhÔ7ÁÆÛc¸ eíRÞ†|Q§|.å{)/ØKyÁ^Ê Öd®`9oûœ½ó6Ü—6'¶œÌ;/ÐËyÁ^ÎÛx]ìÓí¼`/ç{9oc6¹èå¼`ÞyÍÑ9/Ù0çÛÒ †„)—ô6Þ>›É–^2'½@Þ|I/Yù’^2/½de¤ë¦k»KzIR“Kz9‘a_néÕÉ9éÕE8éÕÅ:éePœôyéeˆ½ôr+¢Meg]ž§n«ØÖËsì­‡ÕÓzÁ¢·^2g½@Á[/™·Þ„¨·^²ÊÙÖ«ŒŠrVÀJu¼­Wûs֫㢣S{u~·öê*F?­—èe½ÊËzyá½õ⪼¬—›QÌx¶õ6œUiã²Þ†Û•xmëm´ÉÛz; +…·ÞŽ„ªë°ÞŽXL!ÛÖÛñ‰·ÞŽ;â­·Ó:K¾¬·#hÁÌu[ï@ô¼õDÃ[ï`öqÖ;lùe½ƒyí¶^Πå~ZoÆìqGËa½™¯Æl–º¬¬xëÍŒ­³^0”^NëÍ‘5Uòi½`ÜÒxj/XöÚ V—qh/XõÚ ÆTÛOí^{3Þ^{Á¢×^0\´$§ö‚e¯½`⵬à4Ë©½™ohí–ö’9íj– í%óÚKÖì2/ë%rÖ«¨‰œwž Ö[OëÕÞb®§õ꨷õ…™~–õr Îz¹|o½d)[ÚËÐeFñÐ^†Øk/·ÚÛÏLæµ—Ìk/´·žÚ«,‡zj/T­žÚ«Œþph/Š×^e5Ê©½ÊÄt`j¯¡[{]Úk½]Ú«Èi¯N.§|j¯²[{u­N{5NN{•ÝÚ«!fóK{u+níÕ‹rk/´·ŸÚKæµ—Ìk/ÀÚœ¥½dÐÞ|j¯”[{‰ ½ùÔ^²ÆˆÚKæµ—gÑk/™×^2hï’ÕuËñn§ö’]Ú›é,§öho;µ— Ú+§ö’I°¼´— Ú›Ní%óÚK6¢™ÐòÞÌ3ä¼— ÞÛï%‚÷ÆÓ{ÉJìíô^2ï½d­Û2–÷f=W·÷fõØOñ%ÃÑí§ø’9ñÍúEê§ø*›–¿Ä—Ì‹/Äwœâ«ì_"ˆo9ÅW™_eN|•Ûí}×µEtš¯"g¾:g¾6»OóµUÜæk«½ÍW£r›¯¢ói¾ãhe¾ºÑV±/T—zš¯åawv™o¶á.óí§ø¡¼ŽÓ|ÁVVNó%óæ a¾rš/™7_eÎ|ɼùjÎ|uÜNYÌWçw›¯.ã6_"-à‡ù2(Þ|õÎ;óåe‰š,óÕÍpæ›yÕ¥õÓ|Á†7ß\PÖoóJ0_9Í,{óC=rš/˜–ÞÇ{A7r9½lxïÍõsôÞ †ÃØûé½`‚ÌQNï«Þ{Áº÷ÞŒ‡ ªà8Å,¾ÄO/¾|9f©—øâ%ñ_¼$Pë%¾êäÄ·³ªJ¹Ä·ãP{ñíwy‹/ž /ñí¨^|;ßN|ñ”@øâ)ñßnZ“K|/„ßsãÅwPüœø"l/ñå3Ä‹/wÚ‰/"t[/€0—œÖ †»?.íehµÿG{‰¼öòzíew÷üÔ^ë´(è­=´+(,Ƨ÷òÐxï ¶ó^Dî彈ðË{õÔ2üN¿`/ï{y/ØË{ɼ÷‚½¼—Ìlskï`Q°ê½µ—¬ZÙÚKæ´W‘­b—Be·öjoy\ÞKæ½—“óÞKÖӸė‹‘K|¨hÚâKæÄ—1öâ˽pâË‹äô^—÷‚Á{ûå½`ƒžxzï 8ï{y/J®ñ_0ˆoºÄ Ù/]â †Ô$—øâ0¾Ä â+—ø‚½Äì%¾`—øþëÓ¯ŸXíx ûˆÿÆ¿¿~|úîç_ÃÇ?ÿÃr…ä篚ÁõçqÙMb¶åŸ‘“æG_æÛ¢2 I=ûýö/þ•?x€^mןçsmw“sÐöÍѶà}cñ# ˆÿùS@D"fD£F‰žùó³šÍÔcÑž$}fyùÉ×hÏnÀ"¢õ'/R +ÏbAi’ç#ýó˧ŒüWðü¹:xóåyq<‹Áqj{S®ôÏ/êDiý§ýÞŸ¾ørˆgÍ<÷š¢kz>škÆlÇšŸ?WïaîÁ5ck²µ'¾‰.ëùh®9Á[Öšçïõé{€/× |ÖÌ8î)obkÚÍ5GªÂükþÞŸ¾¸‡}V«ùäZíClAû£µZˆÎ^­ýÞŸ¾à°þåG\™¿ýã¿ßÿÝ/?þå'ôã‡þô0oWàýú_y …ïþAwC*-v0á2\7èÅ϶ð‘PDžÛQ…´~³­ë—å#À`…jÌ'Á‘;¥ÏænñæÚoV·/xz øeßïæÿg¿{^ÖöÛé +ßU¼J8’æ–¬§ÃÒRÔ“®@Õp]ìy3’†'ã&=Ve0÷ºX…ÇÁ7cÁ%ÃL6ãË“L_8$i$û}Í#•‰‚*†"8˜2(êjÆÇ¦²ô Š—n‹kȆõ†·d_,ë-d-ºÌ–UGmy²ÞÄPh}!ÌXY/úª"k©[;n2ì‘[߯TË”Ñh ²†2Â5ÈX4&ªãd™Ž¥,å5.lÝÆ¨!·ÉàÒÆ +Íר›9BÖWi]ÉQk‹é=P6fHzïmõ¦ÏeµìV]òby +U“•27ÊP[ŸÂ“º±‘g˜ðÌ sÊcOEJŠkùk*¹æ>Ù +{Ou…)Ê|-â=8Ç8Xîéw²Ë$Ynˆ‚{Æã|ÿµß«AJ+ÿHK€š2¾egå9–È>·ï¬/Óœ±ìáþ‘{á>Š,[¡öåî)2š¾‹-#cÕaÆÞá¼ËO`pw†Ð8Æô:ü÷ZµLÄÙ4ÿ¼z,²;ÕÑ\Eßì‹ÏëÝò þöÍbðµŸCrtÿ’ŠÓV&{ÿ’‚©POø¯¡I òô$0T²oó%0[iˆÿ<e^kÝ÷UÚªúXEðÆc±Ù:úÃê¶Ü®õô@‹µß±‹<œÿXÁa’U ;e €ÕÝÛŠo«Øä!E¥ÚÊ*¬-öŠ/ +HŠgYTUŒ5 ‰¬N‰5Põµ lÆ "f†²1j\#®]”µ)¾F…¢4²zçwÃú{{µ<ø×ë–µdÈdíÙGCÁYÊPù}]\ßÑçP?â¬P˜Q¡ÈPÊü÷=X¿eZü¾á4¶r!"´·Òõ[VÃæœ :/¾Ý÷Ö7âFY±ªÂm½Ú»¬Ì†Þúê<çÉdÍxe¿â£•!1$©£õ+4cøÏ•¨eƒ7Öã9Ü}IÔç-þe]¢i¡T›oæò¢%1«ÛøïO]N˜í,F½Aôn{>Z;F5ˆ-Žç»U±'diÎ’až°‡´ÛÒwkŒdKüÝOmC§Ìi/ÖY‡3D„½XöòEЬ³¢M6Ä3!~o2ŠÉvYñ{»ŠŽ4 =Ú7†ÓïöÜX‹wÓ´åÛº« )`ïJÕM†>£€Ø—3TpÝMzÿd(Öú{ˆ–Þœ –m²¥‰¢S2Yѯr$P†bK  +ëQáùC¯WVú³š®.‹vtb]íèÇ<ïj[%ct+ÓXÛ-¾emgµ~ëN´²Þv°Á?ÉÚ\Á:šŒ²ZŸ³ _9³ÄcH}G1_Žx ¥Öؼn·=—ñD +ª²ÞjDÕZU‚vº"ªÐm•UËZæÊêvôuZ±›¨öº]üì¬ÆPtQ£G¬³œ¡ì‹2ÌÂñ{M ÍàXA«X¸‘õS¶?ÇK2Ûna›úX]: ÃõÆ,ýµRKsf…½ãLÇÙ(4°99FUÅ +ö ’ºü×BT*ĉ§pÛó¶2T1eÈ*íÓúkì]`C'_uëc‚­Æ­O!Þ»¯€÷{]Ûÿöïűâ3;e »ð#éì*`«¢ÅùÉ5^šßX«lŠ`p˜ê·LG€€5÷%Þ˜vt°Zp~³ÝŽ^u0x‰C¢ÝWñ%ÉSµ=túÏt®­JV猲š6Ð÷=Ø£âsxÀsBœd(¯ÕÙ@€ê»möéï.)G¿¥•ùˆ>Ä™vbÙÚD[c./ý½j£oãHUQíʲëíLý”‚*UMNFDÝØv§³*™ï¢QjδW§~ÁH¶Ä±TfWÓÅ}Úï b° }û?þ.ŠŠ­‹ÂYœmä±µ‡¿«WʃR 꾊 +Ú°Næ`RŠ]Ú@c=‡2`šÀhzk¯Á¬ðÂW †ôš+ðÅåëÂáè?ˆYÖ[ +¡ŽðlÂ¥:ã,§ïâ¸m·½iÜ"ªš1N¸Œoôªc¬NW`§–âÏu Ζ/kûcxþXZaÒôe‡Îr'Hckt}n–¦:I¦“y?¯’9O†Ymim@ÌÄÏA´ªÈêϧÈäp~Ø‚,‹Îк‚™N|Yt +±Êu<€p‹ó<+œ"´ME°øb˜€–FôÑé+TÄ™VP„…uÜÝI«/<Õcà4mTœ‚öðXÁM±¡±%˜b€alíÚ¼ +,·{¬à2´³`\ng˜>Ö«‹€ífùé6`sûs½YScz÷È‘eïN›9ɤYW’'`oáÀªØà‡ì~V-£x >ÃYƒZÚsˆ£¬.kßSª¯øðV½KßÁp 6"x¬€!…»ãŒ`¬Dd"'ÖXËvûŒ&únÑÞŠ:¯b°ÓV,ϧô©ÛÀËó)Ç&|ñóy3›°úsR…åžhö5‚mjÐí"—¥Îm3‚àÄ)ûØYk‹¿nòŒW»Ý’‡Ùß'G‰³…¶‰µ?¯îagŒ³©qçl{w›;±rQ3u(Æ»ŽÚ96xcÎZQàÆê6xK\OŸŒ§îŸ×— f0»í«vƇÎúeF¸c ÆzlbXJ©;Ä +¨3¾‚²9ë$ ûh4D^öѰÓíŒ AY.v…pÊö±0É|YØÇBXù“…},„,[ØÇBȲ…Ûíc!›ùš,„Œ¥ýNu²l!ü½l!dÃRç±²jb÷X÷‘-„,[%[/[9Yo#[o-[/¹ø²A¶0XÈxõ•XÉzúÇâèiûXÆ`XHYÇ`¶°ÛBûzIÈbóå \ÂÉ8KX–Åžû’ Äj½¨d!·€di˜±ßB’D™N‹×0Âé< ˆþZ]uc—è§½ ¤©ì[@ˆ>‚ãøNí# 8ñ€,vÇ!/Áe!ÏK@8û!b_‚OÈ‚/ýb ²^²µMÊK@0~„ó`œ-bS^‚;ÀpÞ^‚»úÈa¿ÿHãÀw Èai~ lp³Þ]"ÉÉqã0¼`Â6²€€Í, `”=n$[cR^Vq¥õ6a’'Å÷"œK’»Éû6°“ D tÙ@Àj6°é·€I6°ž  !Üûm B¬ö\Y2 …ÿ­·e![–Ì! DI@­Þвo!›.%! dY@øÁY@Ȳ€ð°ðå$…õþ§<9¤ü¹ýƒ'LϽýƒ72ßnÿàeÿàÍfÿ@ììŒøÇºýƒQ–ýƒ,ûYö²ìdÙ?ÈÞþA’ýƒ,û‡æ@òa_Oþ¡,ùYöe°ˆÛ?ÈÁrû‡²äÊ’Ø»60¸èÕg÷eÞÃ?”ÛZø‡nãíVÞþ¡lÛ8þ¡§—üCOóØ- zI@ôΖÍ)a z·É@Ȳh¬$јJ"ºs_Ä cO½D+\R²¬ dIAˆÎ°Ñ*„!Ÿ„ÌÒêç šÉAÈ^"ƒƒùå ­ùôB–„,;ÙÛAHN±ë +“ì dps;Yv²ì dÙAȶ›T8Yv0t+[7$„,KY³ü !‚ƒŒÛAÈú²Ã !KB”D™ßV8Ùjžî Ê’ƒ(KB–DYreÉAô÷’ƒ(K¢,9ˆî#9ˆ²â%ÏD%9ˆŸåq(ˆžrø†;ˆ^§ƒËAôÒ¼”ÏënÛÙ·‚h ”~n!ƒ‚ôWk`L%aª@AÆ­ `%+ˆtÌ{Ü´“Íl `h\"·%š³^$c—s+v-¹„ì¥ •_{)XݽŸËAˆ²ƒ(KB–D.9ˆ.ËãºD¿íí ÜVr"þÛAx ÙAxnÙAxæps;ØÊÂ낃ìÛAx«ÙAxûÉAXðà ývSvM;Dâí `¾naå·€l ‚‘=˜À@öÎË$G’㈢û:E^ IŸ€àB¤@HµÐD]+ àõõ¾™{dDF5@qÑ芗>šÛôÏ +F÷zR  öª@`ãUduØ#ϳÅ›Á´7 ÒÕ@•v‘ zªW “"AÚE‚ðô7 ‚‡Ð¥×‹‘#½J®,#ǼIÁû½Jœú&Ap~¥€‹AÔÝ$qC) B|Ý$ÍøM‚›7 Bƒ~“ R„¯ö*AP‰Wý 0Ô‹þ€õZæE€À¦­ÿ B¯ÄTè‹Ýì&@¤1Šžû$@”«)ð,@ø¯™g"ô®ËÝ$»Ý$/q“ œ R/dZ,µ‹™ +oò ‚5ndXG8.õC†L!_ê Ò.v“ J§¹ç‹òŠ‹ AúE‚ÀhÝûE‚(ª·ø‡áé§|æ,AÄ^%Œî$]$ˆØ«Áõ"AÄ^%ˆX÷ŽôèIlîU‚h Ž‘ bÅ uH±W 2L螈%Ù/ +DìUÈxÍ»þCÈȯ +DOñª@ôd¯ +DOûª@`¼Z»(¹Ê«‘K½*×M %ï¢WÝ}kËcíy‘ °›Áåi(ÚE‚ÀnD¡AšºHØE‚üúöË[T~æíÄÇoüûûãíÛŸ~ ÿç-‘{ð‚Ò¬@¿¿%’C×øS&Ò2wþþ–“µvO†yŽÝëüO®{œk%ût}žÏ›,îëÞ8ci4><ï^÷|Þ?³îËyã#`ðþô°~ÀúaY?Êú*¡<áx(â»Z©(G’„žìË“•ôMØiÑgD»©°“ésîõð?oÔDgMc’~~Ëy]ký¾?îÛ|¾l”Wü¹®×Ÿì êËisûül`Ú?ÚßÏ©· >Ÿ½çtg¼g^ï|¿ÓÓåÖ“ú'8>îÛ\7?Ý™ɶùqðMüZÏÍ× –¾ïìSï|>{àéΩ*ƒ]Ž¼ÉºÓá¶ëÎQ Òúò¿ŸSo\·}ÞÇ×Ûd]èØvß–ÇmíïçÔÛÚö¯?ÿ@Èüã_ÿ}|÷Ý·?ÿð·êD¿ÿþ/?Â^ÁŒõã$ƒy‰¾IÀE;x ¼ñ´ßÀ4SßáMÕY§¸Œ¾-±Gg@÷ÑÄ÷æï¡4¬1ÆÏ¡×É$g 'iÊ” )^–¶…Ð-&xøå««ºàž~‚~ºb™¤Žuú÷5µO{͸²Ò‡ð˜¼Ö *¿fãH~ä¦fJ$^à—ÔHc{ö“ýú±?P×ÿÐ )•¿ÙRš±Ú7ŽSŒÐ_©!µ¥Ñ5õþBôŽÑQ©tªB.Èæj ¥©;6„“ÉÝÚn¶G¨Øv%”P T„PnÞÀJ)æhûåì75§ubøÑyr»P+a#,h(õ¹Q©¶Vœ1×3Ê<Òu­•ÕŠ›jÐŽ´†BÒ­k­6ª£âDGí6¯ÇP!1Š4Fû4šçdû¡{ǶŒÔ‡A±Fål¤Òð»°²(¨†mÑžŠ-U“ª“¿Wñ#”Y–±æš‡® +¾Ô,Å÷+eÝxÒÝ# áHRB4¤jÎ÷MHÒab}öÍÐn63#=æb3²ˆ³9‹h#‡Â‹UÌj,…1›J6bdŽäŒ€5#æ[_¨E7PÂÖQ/þ i.‚ç"yÚ¦qÅâ‡,rJ—WM¦Áÿ.è>Šü8 …œÂLfÈÊJÜÉP“êI¥BR !S‹ìž›*‰ÛŠÄê+%<­Š ¼ËÇÄ<01yY¦¡rlBm˜QѤ[EªE—P',³PAöEC-ûò¦G +>”²¡„óCxP´ýxÎÜ å´V©ÆfBðvù^Ê~†ˆBWöµÂèáãë¤! Tšv–6[‹ÍQØ›·5YNŽE@!4‹3/?úPaZ¤Vre5ÚB¡Ú šãØ£:b”‹ ³l4GsÝC‘ \R³äÊ$ÏGï¤Ã¾OåHB“_°Ì …â– X^¨náh(Z@xGrc¥¦"j’JæXBÜÙí—ØÏ–3”…&UÇPÏ£.Ô“ªm¡Á#”g µdˇÇXÃÒ=Ñ’r®ÆU[XkÅDNj^ÛmyWˆ&¡íµt.PŽ­ï³#Ü:ís›8f‹sŸ>ÛŽÃ2éºcöQ-n4 +%B¨ÔT·½f3¤ñËªæ• ý2t¥Ò Ñ•·5ª¨ + ÏŽòð¼FõÐ×D2–Ú+…î×ée›&Îì¦á—¹PgoC©¬àŒfxHÔ¾FJ³Ët=¢êœO ¼#˜¡6KX!6ñ3CTm÷š rå¨_=´ @J©/?M~**Dm;6ƒ¯µZ—¬ÆdÎ3ŠXM%“¸(ÃÍG*mº˜Â®U«Ê®4í¡QÖ¢>±ñø N‘éŽ +­ºŽda"Ñ’’È…žâ‡]ˆŒÙÂô‰½$J$¨p>ËñÊ,¢‘Y;¶TŠêÁ}+¨I™²Zªð‰…bÞ…æèÅ—ÏÃJ*!N¯Qò@ÕÝ&÷ñzD\K>€r[K…¦T)}X t3ŸWG)ÑÐ ·G¡6²åÀ 7ÆI†0[t¥–êË“Ýc¯6¿kÕPÂÏl✞¸TˆUD‡ò'õOJ涘2É´Â#K“6a‘~-:£7+ÎȻ͙.0Œ<Öz­*¶ÅfjkY®,¦ +oŒ©É§{ÌOXÍK¶¶~w$—=ÑÁharò#+Û£l~â5æ“\!v³ÙÙ"±ÚôÊJ=žK?%Õ³áö,n<G6®Wïc`´@Ù¬µìgNò²iVf˜¹.Œm½R=—Ápp–ùM¥wìæ$$”º' ª`a漎7iaÍ1yG«ÎŸ2y¹›Gc«‚B„‚9«bt Óáªy~Î~‹¬wÉæúydó`‘åë¥b]¬©ÛÒb4ò‹Ñ7YìÎØË—ÃP­VÃ#U,¾ÄøÁ¨Ü6f ’ý]Õlú÷¼õðç [±˜žBPˆýŽÎù. ƒd!–Úχx—×-Õó<˜–¹ó÷7¼"öë¾6ôÉ:Q¢I>v7’GÓñ~î-1¯¥`D5àxí£‘§ŽÅU)±»ÛX\A>™šÒhבּê·B­Oüõ¡’‰QB1`Ë€-òe4[⫹¾\ZLJGO——OÇÞ̤¨kt!Æ(dy!e5KåÑÊœP.©º ¦Í*ú¥™«šµÅèŠ, +±µƒvÀݼ§°Æ)G$‡±£+W¥Pe}’Îjd§1ºŒ½^œÝ 'ë,1†h–"º÷ÀE<ø#g_ f"…,q¤èâII‡vÀ’s¬qا˵¬Fx'{®]Ó)×Ѧt‰¸¢ ÐS¦`AÑ‹\ÈÑêzˆ^Ÿ¡[W'Á…TåܵA¹¸Ü‚è¦É±.¤õ™Sl]eè{Þ!µF‡•7d-›厽­¸vÙV|‚¶BÌnM€6õÄ~>-õ›6Åþ÷ùs¬¿nòÜ 8bT£ÕÊ2®%;"›-;…:IžRˆd¦ée ¢V¸D…Yt«J}Ø)ÆlÓLŽ>J Pò×N‘ Á>ô™Àꓨ,m¶µ6»wèLN>ò ¢œ‚£Vl•nî +ùÉŽBe¡@úP2GÙˆ\òᬅÈ64bª>7à#ŠY¥Ô‡‹‚:fó''žŠ,A6ч äƒÏšúô„z„³!oúÐ%©dsUÁ|摃í•}ÀÁ5 õh˜{ÉÏÀZ7!°ƒŸƒœÞhE­ýì¬êÖ&J¹“æÃ ªXŸwYåH¡Æ¨î©Òç0F‘4\§p?fÑemê7 ÖÐÑHýSZ„¶HHWwqg¢ˆSíC,:ª"pn~î‚6+¨þêÇ[éÜ×pû$¾P¥™¡²fxd\žYA¾*Hgì]Uÿûì‰è¨ViƒÎW„¾žØ;”>#|߬ï¶¼ñrÓö²¾Û2&¢ ºÝeí'b'ÁÔWmÒ©ßÑOçL3¥ŒÇÔyGæ:<ïdUG/›W+ª¶a·v¼’±îys®yCH#‹ Ñ!aÍuü~ÍßZ\5ý†ýø}ÿöè ×·‡ºÖXtpÂ.-}µÞãYzKnŒä£4f¾e;¦¿ï›õW[TÀz0Ë»)ŸuŠhAe=F³ïëò“iÕ¬ ln/Ë?‰Î=]qnÆ7j¬,†úkì¥Þ³ÝÝ-kçéкP› +ñìi'¯èì”ìÖºÅÌÒ@x×õüòo ŒG‹.¨³Jƒ€fJ¡pƒùÑI³$rÚ`)Äj ÷Ÿ;¬MR1Xš s ¾ºD{ƒTÈ7G!°`O÷Ée²Œ1–(}p»-ŒR' ¡š%µk‡sC¼qöÌȃÂ<މ*¤˜BŽJKlÇD׊ÃRJ`[K¥ ¹ûô(Ú(:¤ÆöAxÔñAŠ­µUîñZƤÎ+âŠÚk¯5 K ø[1Ñ ˜‹A,L¨4c”dBŸª°ÖjUÀajæU˜¦KÆŒó):Ëx'™'Þï ‹ö{ƒelCx©è¬ÖY(ÖæB%›$t·ì0Îë…¢ò­<.1?q¨gsÁmÙ>eÀDœr‹†Vú÷ÔJ4`NìߣÑ8 BªÌýÞ¾PÕ}ŠHÅÈ¿œC–SÊ¡ÒÛ€aÀ !uX »Ï\™‡ee4ƒ™hì^)&c ¥³Òðí#y (싵eŽSAHTY7`J~›ݘŒâ×ÁMý8ÌènvÅœ%OXU$(„Ÿ2`a2ˆª”ÇFÖ',w”‘Un™âZ.1¤–ãø Ì¸ƒ9Ì/µ{¾,!ªòk‡ÅáüJ0<«²ÔÃÝ!.Ñj"ôÔÚœØ`ÔØ›PÃ0àb'Ô=µR¶Li~PÐå +×3ôrÀ¤A¨y:‰Ž‹èŠº¶·E  ‚ïC»x1ËdK®#ní“í¹mœ›äUà@µ¢|ªCÍJÖj,U4˩ڤ4ÝüáÛ4Z‚ +´l…ˇëÁÿÏópÕ2±£è'iÈþæ]!Ê¿Á‘ʰ‡±T[9bå·gŽBF¤( Ì“iÉÃ÷M,¶I-Ú¾:C¶‘AÑÊÑa¢ãÎÕ'6H©NËÿr]mɤ lG·ä¥öþ76€gfªÿR¶(BÐóu›»8b˜Ü’ 8Yç±ä+Ó ÑH˜‰³¿wnȆWègÏ­ÃE¹Ò÷éíºÍ±½ç6hâÿ±ÍÄÏŸ!ÅÒØ^ B‚y¬v³À{ν-6W®_vw©Àýš à`´îM€(¯eMtì¯ ¢ÊÐû[뾘 ü«säå›(;o¿}Þß_çl‰L"ñJ‹Iƒ:<0ɸR¡ßûº8ê²"+Á{ˆ´òw»ïÖ0Å&|°û*7[ý´ŸÍ3~b yôÁ +2: +prŽŒZÔÝІª‡}#­ö'Ù0ÙÑ ’ò5h QOP.ÐÑ\ ‚ýfϯ ›œÝØqhh‚èð[Jæ`)’L×^»~ß Íá|È&‡Ãݦ:A4Ñá&cX;¥¼AéeXûÀ»påë©2²P®H§xø©ÀãϦ€º+:ÞÇôp4CîyG›gÆ@Q ¨y¼ XjU’ðз±¯,G^™¸ý‡2kpµn@y…1Ó`R`íèèWk0Žò>°%]Gð&b¤æ¶;Ío(0»AبÑ¡ÄÜ•³'>…Ñj6øcS £A˜ya3‡v½LpF²¹ÏBN£ZCÃ-ýKòJ-3+ñLE€0´\`ºHX&0ŽZÎ`šCi@o‰ÐMÔã²ùÀlcõëÖï0“ÕzÙC³#†œS±Q·[Ä{rGk±NÐrœMP§s† ¨m<-*G&ë)Úí]dC6PY/EGÓš%ˆ\N2Áýäj€¿ß÷!©ã!í·)OE|® <'žb]ùvƒ#…áýx¡Ùû}LiÎsAÇ<Êw^"¯Èë ~ßJØ,^µ={~8¹Çc„tpÏ첩ᓟwHL³^ ãÉÜÿë2²Éú‡ÞRÖÛ‰yŸï+ØÐé/Η’`ŒŸ†™Y]G`Øæ¬‹‘Ñ™"HeËÔÍ÷o(–$X¾= D4cÒ#7®ž!¢»¤ŸQ§¸À^›bèó”’$—¹œ8ásI·ÊÎsÚ/ZßýÞÕ^V¡ãk^z“qi™,ìƒ5ùK‚® ákر2AhHXÙtÝÊMÔ`ð!"¹+›/±+$ÐÈó¦Ä%×- "û) ò'+^œœ2zåÑ™QQʇ`F‚V +œ ƉƒtxJ$}Æ^ø’2¬Ø[ywž.³q?ªLÍJž¿âô›åËi…"EåˆÚ¡ €,È¢‘fnQ¤ÂZ'"}Ò¡év¹,¢Hcrøúí‰ý=JZßÂ--%hÈ»L½Bc«:+ÓíÑ ‰½AƒÍ­žÂq;›)ù‡tíœò…Ùn<´5 ¢SªK×vvÀO÷{C»X™~­JŽYˆJÇÙ¦¢È€Q/æ‹ ~vuú ‚ì,O•Í~÷œ$qRŸùdÖ ïäyí¼#å[t0óDßîZ+qK›@Ñña[ÎìRCÎÎÑ᛹¯{šæT0ôe*{gç„M£gFc|¨OÐôë¦F· q¾!.z§¯¢œg CâN_aÇ”øÈžÕé@8K«=Ñéœ^²©×­-ÑÓ6ͯHqa`ÜaÒD‚ÑŠiBÝ‚+7Y8²™Öª0Óî?tÓ:^93ËÐ^Wêwø5ÞCu1ï +›2ìŠÌë>z÷ö¡Ò•Ê‘9‚ª_¡ux÷4aoEHɨÅg¥ÑQ3ÔÈXBêÙ`{׬Ü^â‹W‡…³ÌhY3H‘Ž~Ù‡© +i÷û¦T¡V¼Êa@¹5‚À‚âê¼u ܨ‹«ÖDÔûÝÏë¿o•1ä陎/ù²@5{Ò]ÓL‚à”Ÿt/ðf‚!öSþt: n·§ÝÁ•ÑñkpÚÂè÷>óŠ­j¢ûÝ·òbZ©=¿çøž^ù +”ÁQ­@¨¾g[ào˜¥ÏäÌ‘Ðxö<¿@p òš@˜RTîçORka÷¥&By"4æä£-`‚r~fqõï±t\ÏYÊwÞö3 ÜÑãYŽ÷º1(ii“‰T¿ñ`› ï¨ß~ ìCLç†{­ÍuxÇgÐá &wŽƒ‡±ïç?Ó{öýŒjî_“‰´ ¬Œ8Ï(¢þIš ª÷ó:Á…úÖyzÂÂÄ_”`PÔ æyC»Â‡…ðʬT¶.å<3 šäcC/÷Ü¢wêÞ³ÒMn½\Îʲkù–hŸ‰#ûcÉÉúšÄ!òÞE£¦MEšbUF©½ æpQ๹´‚h&¤ZÑKñUû²ž‹¢,X±2<ªYUä 4_šì«µ§›ZUçΑã›èÈ oU“}IƒpÙ³ò\ï=÷zGwob®çøe¿øø› 5Kðž9{*H·àZîëÑ{ž¦-M‚[ý{< ИÚm¶Œö J|¼yèË;ì$óîÞ#A$‰+íîÙ3vËŠƒ®Æ8º¾É[Ø=<:\ɤ!yt˜Å[tÕ£åsJØ2ûïÉ’Íh4ó +BgX0pIg4sé˯Ç×E(ÿZÜsÉ\Æ‘ƒ*L½ásH¤€öB÷°x‚9&X6eÀìùê¼Ï€Ê\(¸ÌÖeÖÜßôº\]ç¿ ÚO"ºéCÞÅéf8í­\Ùzm’TG28÷=ƒ¡T‹ Ðõ>7y5> +hÍ#šå€[„»Þµ³¤…üä:+ÑíA›ˆ³R“ÁÈyñM‚TÒ eú«–T ò¨$ï7è}x<í« YÕQIÒþúq¡€kO$Ë'°$B¹í%g +À±û€0¡\ÒÙ æüÄ•¢M090ˆUp7©ä £—þ|ÌÀ¦V¨†ÌÂ1R Êz Øâ–1žJþþ7XÎvÍêÿ‘+é/•3AX/aÖÒK&I0²&j&ÚßWÖD‚GIO|ý˜dd@´v]SMtáQX[º}Ï97j“r¼VÌžè¨ÃÎ~‡8mÖÜÇB¹y{ÙsNäƒGBç~ó{:Ž“ *0²(ŒwKD §;¹ñbZ Çå • n\I‚&ÌÑíf‹” ’÷0k‹}.¾& 9r÷Ùõñé[]%fMÄõ¯¼(Y dzÀ/kà?”—KŽl· †ç½ŠZA[ï`x;0ÀÄK( ‚º£ðöý“)ªêôE÷À×u¾–(Šâ³ 9ަø½ì2‰J) Lbn€L‡$ˆÄ`#—lišDô,FîzíšKÄ`J«“ÀVì*f—NEÉ«%r‚Hzq˜Ÿ4Ã(›8œ ºEó«^¢ˆœ¥Ûu02‚+¨@¤˜ GÕƒAÔ Ur¢Èʲzf‚æ7‚M4JÑÏÁÑ ö©á ,‘SpFå©Ç´è1 âml¥<>ÃZ4·‘_œ¤Ì¥c²,4Qä”b+Q<—â0oÔ"½)-_¡ñª¢dEúдÈå æºÊ ú-fH{ÆÐ]Ê;Œ®…0Àÿ¡ph=€ôÌܵ¶"w$qY­D\’ -)Pš!˜â®P¹Š ô¬H­K8¡ý¶Î–æFñ^ë{à â§ÍÆÀBî@0„¬µ>#¯IŒ €´’!å:4°Úö qÜÕÝt¡¯Â+SÔÎQ¢Á1y{¦~Ǻ…ÌJ¦™ƒ5 ÜSøì° ïì¡ÿyû]ŒŒVrÜØ°·o2Îêé…<Ƀ½¥+¤k0ÌË¥R'ˆi°Ñ}á±Ý[TØ©/#ˆ„®óQã¤H0„¸Ç«BjR‰=ŒsªP§qûÒb’¬:Šöʲ¡údH²B´.¬Í´*ê&^IU]5™=£S·Us m’)h0éÙ(SU`ÈE'À‰a‘7×QÍjsd>ºö`Ókˆ­ÊºfÊJs™¬+«‚Ã^¶OÍ5èfDªÊ*ºkai 1Ô? ¹ õ¾zLJ¡»l¯‘ê{è/0…VÖvÉKÐícÚJ„«@äu[‰R®* eƒ:|fE22 ÝÓÕ;$qU†ä•þ/ÁL¬Êk•ƒ­lh`såB¢¯Xâ°í¨Uªªfš œô’ÒdˆþUWVä$Y×0@ú×\÷€@¬… ©‹V5ëH¢&2\W‘-К©Wº±y!ÚÀ¨ +¡ +²V68ÂÁò*ê•zÚ6X¡£Ùm•`øçÌCEvy³Bµ/êS x†ÀVÔlzq‹Ì.ßTs”ÖÌ –.œ1Y˜«ž2iN‚nF† r +ÊÑHjHþ²’íðˆÉõòC¸È¬‹H‹`$bÆcPð +eoë¿p‹gXnez¬ß9¿¯h +”Zó\‚пhClÈq™yåkI#7ÃQ”¬qS䌚‚0ž>’þ¼³½ŠCÚ5à$ìû>½ƒŠ2‰ß¢Šg‡ÒO9´Å†ÓþjÀIØvhæBûtS…Ñ0‹)úqÜv¯0ääìwt/÷UèPB¸£åã¸ó^aÈÉÙz4Ï›Z®hСD}*ËX?ýí¯œ„ýa‡æwêÏû<:ÕúéïjuÀ$ì:4ÞÂ-Þþù+vwô&Ü +hÎþæ 5b&*×—Ð¥| A+ÊDÙôrë@zZI@%\2Ýü,µPC2ž´%k‡±R¥‰¸‚¶}ËÍ~â­À"µß<¤©4V-H³Ñ[\CÝ.rÉÈÍ̵ž² n9õ©!" Iì:„•Ômpçæ ô²5¶œ—óØ×ý¾Ë¸Ø)±¸E†¶¨ó¼S‡0¶ässC‡àñÔA¾ï2¥‰Éý¢…¶¨ó<¯ƒ…üú +†‡1™$ù:l  l!çIçé©ìÓ×u:¤¦§«¦gLÛUÈy’œÞÖ`ˆžÅê+òQ öªZ=÷Öº«lán™²ý^ghK{9õE«¸€-qSèPÕzꕱº‹“Gm~Õ^ÒÓ‰—e&© ÿÒB[Cûª²ÏÛchõÛ‹ m{œç:lKL­ö[CûŽªÃ6ÃİtØ‹ò¢üyÎ73JaxÎêgtÚ··ÈÐužwêà³”ƒA‡PJû©ƒ|û9-4Î,eß^"véýˆ†öSË>ïvé½ÈÐužwê°ýÁ.½ÑÐ~jÕaûƒ]Ú/Zh‹:Ï{êÓâ{ +F-”œYVç£Ð·d¹„‰f\CÛ®Š8ú4ƒP#X%w:ƒœ/ºUFLÒËy×΀éá+‰ÁG“&õ§h,ֻʼn2;fŒ~æá ï\¹pƒE²Š$µÕRÓ›åöv¹„ÌSäôrQWÞ§''wC'bo’{a¼ËHúÐxîVØNè gUãaD‰ôÛà猗)žÈ$” +KŠè¿3DÐÃ!B­‘n4D§™þ¤O©ø+ + +;~œˆ1<6ïyäõkÓF×£º¡ûŽ—E„m&/›ÔöÆÈÝ`œ˜æö¸ µWÇPÌ)/dèò ëÐ+˜œïÿþ+¤HíÙwâæ±.YHÑ£zøp0†hejï÷T´lTGH!/¿Cóðáà)Y÷_HK˵Ehk™Í—v8ZwÀðÞýýAXŒùµ°(ˆÂ0ÚmÒª1úòºÀ‰ðx[׺Ñ‹ˆÏú“ÑàËH¼aHq‰‡€…¡RwÍ>¶uCÑ//µÆ´‡£øÈœS >D^ÐÚÛüÀÌhû¾”º©""n‰ê,ýŨ»U¢4®T„?¨/ö¿¬žÔŒÇ´V?‰Ø«% ®–už«U„®nï±§s-M*D +ûÇwÅ>íþ¬S 6"4Ÿ!§å‹!˜ˆ=¸êMŽK¶öªvi%]Ì +3•U$5/ôp(÷#ÝhHä•¥6÷’×m¦±Zq€"Æ)ùÚö,ÉÉÈŸÕ–LnõÍ—<&_+m…›˜AVÉå-á…ëŽ Ù¾¡D&LXÊ)¹lœ"…xykÛ)í¢¯ùK3VYïQ{ÚìmÈÄ#É.rù"¸†™ñŽé3>­~±VÓxÒùýZ*¼úUÄZ—–‘«`þ¾&5#/6¸öÓêgk5 +k¡³áÅvY‰vd¬Ë¸ÕçöO‘ÔŒsáŠ4ZôÖÅR +a†šÎÚRúêv9µãýCs”Q¨52„¤Õ[¡›4äô˜®‘n|¾oBG +S“ѹáç†ÅúÞ¹»q¦Rt+¸b=áF&íâÔûiü ß0e¨›:Dß“2Š  TH~ÑúV9ç}0¬¦öTqMŒAÕaã$Ž,@GÐ3 ó}–PôEÑ8Ô&,†¡ýúv%aMpùOæ«;‚\^EØ~ôæ<“l ¹º$Àf¾”ýHê8’0¤Ã&}šXÒÍ5† êrðÁÀoò¹š$ݰ¥ ú²´SòŸÁ©.§ÇÛÈ­Pc@uŒó W…¾䑇- h©ðü#II`=Ä⊛Db h0ݲ´>Ç$Þ)‰¿)϶韪e’ï'ý¹} ù¹·ê¿ºCʾ2oF'«­t >°MA^l §ÆMJ5u¸|1y7pA‘„«µ2"à¹ÒÃn‘Iônø]R QS7—/›´ûï˜ÆMBê uaŠàнÜv%4‹MN kìæóe—Ø™  æ©®ï¶–¡Ñ3ˆÖøB,.b;+ΫÀ¬ëé%É9R¶5õž»šàÑ|P-úÞkdgSÀjÄzÚ‹Z²t¤¥œ&îT-¤ƒeVæ6àRWæk5wmûÚómÀmÙêÿsÃIþOŒ*0é¦ÊÕéQ*=àÍ(©ó¹¸}`êØ$õ)M3m¢§¾ŠºèÐô +uia7ý»h Ú—N}éK˜yžÍ§òf•Ÿù½@4|çk÷KqÞdqðše×z?™šÁ QtŽæ}(ÿxˆ]ù7Sn‹?ºŒø‡!Ì2ÔȪ©Ú¹g­CLèÅöÀ¶P,›Ü€ŒµÃëkžŠ^ ©L‡š31;buÜf¤ñ4ç-aM…n)IÊ»ï>YðÛ‚^ËHÕd»ì‚i@©WŽ´½-ˆ“)f쨵çàTŸñ¢\J´y[PܱíåÐ~Õ%àOÕí¯Vˆ›$æ £d‘¶ƒá.t^ -ž_à\݅襼 ñÛ¼!_-#’M÷Ý)s[’2ÿlô®þP®…~Í«8øÔÛÛô1-ï]í,eDâS Ç›ÊÝÎO—qÓÿ‰ÿl×°F¬§ýi­K⣂Ié©Á.ðÛ‚ b1 8µi,xFß—ŒŸêm땹٨½‰<÷ßP⟠+ ltí+â6iLÓw)ü­=Ðñ¶Rª%RÏt—s½zz»18‘»iN¹|EìÙƒ¹©)rßÎáØ¹Ñ°ˆ…+Çp­o"ÐEÀÂ3"ªž™ßƒ‘Í„–òÂJß LÙN#±…yúS[DË$ã›ô®?ïÀëéOµÏ5Õ~3¤ÐTh¶!¾HôU½Ã(nbAß +aLdIrRÒÏ[4QÌŽ—#¬*¨Õ~#Ò¬ª Bƒß¥ä\°r2Ö¯¯{0¡Î`*ß_UÐ@è•nfAL”ÿÜ‚ÔÚᕃ±9Yk—V…²¡•*¸A`†ÜÂê€^l8Nßå4­^?¬!ýií˜ÞQ_õÈŸÖs›Àc\¡¹äuï~/Rõ`bnhþ:„OK +³æ*-˜>û>6¢Ÿ¿bm¡ íò¾ {ohYlŒvÄAæ>¡mѹqã‚Ðà}ê¡È5 6$Ÿ¢óùj¡ƒÉ®»mž ˆX8ã&¶0cîæõeBñc|†R.ªåfP‹á?¨w eJ íÂ&¦˜š»y݈Çö€4:«Ç"ö¬ £XMˆµ.Õ ¹-WmÉu+· µvxå ²0¦Œ‹Á „±]Ž`ôb{¡$ÌÍMN µvxÝh‰¤³Æƒ´k¼b¨…©Ÿ²G’QyD…ŒÄ‚Œ=†§¦ñ'ºO«OÉXö¦5§0O8ú‚ò…8ÿÖ +¬Ly4‰<-©üiåwÛÛŠË–+­oùV®ŠišS™ŠuíÂã’X’Š‹§ï—,²Óª©[,¬¹ßêÖ`« ¶)]×¹cx+i0µxú1¡¢@̶n¹0Ó¡•¥mœØÞ'MGHÈP$b EÅÏ÷Œ 먂¢-1‡¯¥'ß/¶[Á5[AÔÐÍÝ8à³ó+Ÿãˆa€äJÖrmÃã’YÈ4tsw«ýµFß$˜ºàpX¢ŸÛ00ÂI-Œ¢W)ÔÖÍãs/Àkÿ¡tš¦”KX%iuQ²«‡«Uå·ÝË1%oªC + ¥6qñRuS2)«À&/ÝÍ¡¹^x³EÁ}*¬g$ÔD¼ŸÛð&}ÓŸ´ƒ2G²kØRùYOý¹ñ”ê»ôiâ.±_&pæ÷‡‰_í +úHÈ//»‹+blBÄ-Õ Ã:G+ßjçðÇÅ 0²u. 5Òÿ 4¿B¾Yœ…áÁ×¬ÐøV;‡? +£ÑËýƒþ\ÿ㼺±#É• ?§˜ôƒçig öýÝTHªø—ü´XÑ)€”‰݃o½0GÐCl[•ìóýg`µíwù4‡‹Û1ÅíÀˈo¹0GÊ+ò?Ë­|Â-&f¢ï" Yf®žxŽV)Ny…’¥¨Dy÷ +“`Lñ ™ªV?”¬êº'¬ƒÏ)ñà²Už SÕ:ÆN¥½B/‰¤æ‘¯o:PxõÌœþ\Êbó>óâÈ6ôРG5Ä–ÎrØ Ë·éyAÄÚ.aßËÈá‰;baV±Å³*6ÈrîÞ­.bígalÐ2uøã3Ä ƒ{ !“;ƛڡÕ÷®º‡þêõ" rk7¯Ça¶Ïá­îwÕ}D Î.#B¾ÝÎÍß7”yþjM&~nKS¦Qè-ÙÑñØB•gÖcà-xÓ¾,±MòAý\b›ô©.1diös‰ÒØ@²¡/Òw§4â<ØXž]ÇAhð\ 7CŠCÕÁ¥l  Tå‡Yò”w¤0!}€vŽ-?"KÑÇ‹Gÿ MFn LÌ^Á’`¬´8 £Ø†+˜¥0†œfÃJ•³ô–ÜŒS°^Ío+i06`Ù°9DwƪP¯½ DDF°‘›Ã€ ]±ÙíÈg,V;Ê@MVÁd¨Š¡óIj¢#)FÔ›±axÍ +¦›iI0VôĨ¼"'Éͤj +â!®ͼ–“aSbÌr;PCr‰6¦ÄrËÞµ‰Ùõ²“~·Ñ Ø¤T*:Z/6S­*—“º€ƒ”%sè5fÁ´¬“ÃËLì¥Ø¢a£ÉÕ"¦£b­‰XŒÉŽö'nCµŠš4†%Ý“WYÔ¡'ÕhL@Áaa¸ xdVFP)D`©§¨*¥VA ’a³³¹ZG˜Šõ@Ñ)T¹+6ra …šÍíY°ªôcRá%ö‹Â +ª‹ ‹_j`õQ±·Y%³b½u‘+±ªnCKUÆ"ºP±Ô"ûH3 ½G«9°J¶«6ˆPVš…¯Ç08V ãSíu¸kŒ¡ ë9±\œZç¼0'û}6½ïÈ3süPeü˜! iݪU8©0ijªê¢ºCfô|håÔ‹\è˜ì/‚…FçK e)Þ14Žêæ"b[ª@˜ Š•!'®`O +$ÙˆMn‹¹PÝYn[²aeñ0zšŠ(r)$®4`(ù$˜›ÊÅò/ße’"èuá}Ÿ¢N ½y¡…%#lÖ„±1Ý+|}‘Ã_UÝeÓ4TE½!ÿ|™‘­ùkí +ã9›ÇªJmí{OYq/;§eª—1c]£-–ÞKÉuÛxl®›ënï^AÒv¬×æ9˜åˆ™c†7ÆŒã:bàÐÆ†-°" ™â:rYÄThMìÔæ=´wk‰ã=YëÎã(ǘ4WbÛ#¡€ï³îxfÛ¿bÖ3oÞW1Ví6ìa„õrgbsš“9ÃŒAWm +´¬BÕéÚN˯^yKü»vbRW0†ëôa½d]Ðó’°13¡cn÷T˜¾|[¦šáëh¥Ü{ +$쬞!_Ó60R{¾ijTj)ñ¨‘k@ÁD–‘ƒaTËœ˜µ7g èæCÎ<^ˆ=®§ù ÈL|U1}+„·R<­1ãVB?ݱ“_±fóh‡ÄÖ ¨e,Þe:FxŽ‘N× ÖõH<;"bŽðöp…Æå[ìÕîp¬øØm-g_±Ÿ­FÚ†¹ô‚a+Ýj•Ñ3bDÛ-©E0:7ò>FÜ{"87жÞSP©I ‡/ûzAMMYÔx0Jdf}0[ç&ñàíÝïSÃ,@Žp d|õr®=6¾Åªò¸ÓnÇÚÓ ëÅœsý¼¹<{Õ|ÍFãzÕïÐ,á’.î[I°ë~ìB]Ï>ƒ¨+*g{w{øÅvÄàuÑôÍÍöÒ¤æµÀfãŸ0Jµ…>P˜UI,‘ÔFrTÜ@ ’ŠgéõÀàHó2’ŒÕ‘°1g’úáØ›œ¹“âûò+(¼%ÕªÊ ŒZ;©[k“í²g’YWQƒ¡ÏÙ,±é +ëå¤!•T5®ü¬¤Y,°UïHláF…í½GRÚEØí«'íAè|G#-s$¶džÀÚ|xuè1€4„<¡ˆ¥Àæ:ï‹ô€‚žPS©oiv¶m[]Åö¨µ@.À°•ÙgµYò8£ÌdŸBì¶—NO™ï×ÖÍ]Ò‘²0j0ˇ±‰¾ÝjêZ£o5„ÝVã½Þå=ÔÊ6n¨Ê`ç&Œ˜zVã(¤vËì¡ÔBÒ ;;š@mlËè¨dqÊ–*ßÁÖì +ÞÉ¿‚žªj90Ìfž™S]ÂÆ]UÓQaY^îê[açxSeÏ Ãëõ‡¾ ØûÆ.ò{ßa:}(¿Sú6ž(ºn[Q%D‹ÙŸ†“´ÀXS쥗ˆvMæ/AÐhl…¡•¸Eλ[%³)¼%[Öã ˵ֆ}êÑÓô:lkgˆŠgížß% ¿sér0ü’yxUD‘‘[½î¨&ê¹&ƒÏˆÄ®¥µK„r9ÆÎC¹Ó§”ºE«¸gtz­7!÷ù8D™T0ŒR4éQBmî{š:ÚÂÖqËmîMcéÖ|Zj²‡Ø§³ÓW”«Þ9L}¥mÚÁÓkОSØ-Kl.[§)ëÙ;DÈ o’¶UßpR"Š«¯NûÚ»Ü(íRÓÒblº09¶Ìd¹„¬¤…U¦·îN9/语cNK>æ6eJ“F[ñ¸N°EšÀôF)ƒµ6£~¶òÒSô›ˆ^†A*ƒ僨غ‰wŠu̽2ˆ…Š~nheÈ€¡ Þ¸w&óOw18 d×ÖswT<±iÔ)”~ÑzöJA†»7A³acÏ”iºÄ \L@Œ:ÖUŒO(‘Ìbé•ÄÕØÊ›€ Ø*J¯|ý±væ°+tU\Á²aÇÁæV×ÂÚµ­²ñak\ 9†üØišÄâÄÖSŒ+9‘Îu—§“*ÌPâbWðÇWìjƒ +²×ŒxóœÇ0\`®ÃðvJÉ#€×báÃò}gŠwv5Uüǧß>QŠò¡/ÿy©/ÿäÿŸ_>}ÿËoååïÿzç:Ûj¸Î/oT©Åo‘/ïT aÔøÁ*Í úãsJ})\þ×_>")DR"’š‘x…Ó¼ÔÀð›ð’-°2¨w&CkèÙn4‹e¦!ËÛZ^k+[f–*Ú”ñu:Vò‚Í eÌ‚²·“aç$›I‚Ú´u´‡€¡ ×Øl‡#®|ƒ±Áµ`%ÌM±kK9'¸°—!·ve}Ò"u&/ãLçI’ëͨu«ã‚ ™í C#[\‹øúqxï~~U·ŠøÀ Öáí)ã&‰`DJ·†„Z(Ø€™ö¼b{]^BÁP:S¦Cxéþƒ)S'!(IÐÄ|ÕÄ´-¡›;ùûÌâW Q™½Ó‡éƒB*R)Ρƒ‰’õRÜWºìgÂ<ÛŠÜ©mÕœ^‚©c¶¤‡àló³:oÚ`w3éy†L¶S›´ÍÁŠ{g‰P®YÜTœ†kÔ+jŽ=é~*ei®æÎ…‚ÊsNLi3 +”ïžæáNצýn.ɦ#—ª#ƒ#7Å|›®–µu‹þ O8ÒØa¿n4åqÌò:-[¯ÚN¼oQ$Ý™8˜¯‹ZØ¥³†E~L¬°y†ë×Iÿ"Á¥º¸^£™0`µÖßnýz(æó´óJfmv50}ñç~‡½"¼ìF_^÷%òû§J­ñŠäïÏ)ßÜõ»"¡ÕòÍVuò—7˜$¶9ç@!µÿ/,÷?†Ëy¥_”Tè-öù öª$oÍÄ[uy+” ?|±*h‡¦6Ì5VÄ=ÕèíîÎ!«mU(.1MSA˜ÙPªØ_X¹ ♆MŽqX®kÃ#£Íˆ[éôbça\kü•-0¬ôÖÒÿ•kƒ,Ò}¢—)C?ËÒs”™š.4ðî]b/>§X,Œx5èb˜{ÝÝ#ÇôlVJN¨4ß1ŒnI +](!%S}¤©*J¢NäÀèLßÁ»&¯B!ÝÖÁõ'iºÉÞléÄNê"/âÕ&g6“W·ì+Êz’“å™d ±ñ¾°øGÒþêqÉâÃÉLbW˜8±-K ¶öÝyíP&Áq†‡²ÆÜ2ÛrÖyÒdùÞÄÞTR™™=ÈÓ rœ¡¬VÅJPÑ'Es.‘·ð3€ ‘Lû¶dt² ƒ;óÁI¨-Ã>$S7×`™Õ‚äk×Ü6ÚÊÁE*oÇõIæ£ ‘ÛKÛ¬(æƒÛ:fÝH6ÆÀÎÃ×`y¦/i+ƒK¼š}Z!eÑB†}€Y)v\©'¯À-‘) !M]#ÞVØ!/Á›iïéÆó°lX?Ɣ尽õ^ ’ÝÇ×]aÉ3Ÿ?àž¯9‰N›×9Iï}ïyÅ^^›®/¯û1ön¯¿ûoÏ ßÜ#æþã¯?ákÿò·¿üðÃ÷¿þô§Ÿ_jyùñÇ?ü , \d‚ÿ)½døyY|2Ó‹XúÛjœçK¿ÅY‹»¡bç×kÛhçú®FV:%z.•9ñ\ë–Ô¿=úÐ$ÇW)⤆oT¹®©Ê{Yذî÷:0‘¾8/6íCÇt|-™°Z0ãÍæH3»(„Ùo96Í~ «r³†ùˆ6,HߊzÄV¤Ò¡ö_¶Ë%DzÜ¢óZE® ­õYAº—ƒn¨‘Þ¾#¤î}]ï”®HQDj¼ebËb·>ŽÉB¿µY†ù“&«¼2³– "MGÀØÄP4túŠ)7ЂvtjøÖ8fµ2fXEØåúÿI†ÜpOš‚b}v·Š§mi¢A58à G²Zdƒ­2Ä©Ö!^3Y)~²Žcä)ʬn—Š<×avpÿ .ï9J]¾äŸ¶ï•wÍeî +êì¸ ã›3œã~;̓7FÏÛ†{ +Õ˜5¯ÇPî@Ï{ܦã"*×î+Ëafóëž]1o#îƒX»—¶t²Å, ¶ÙÈ ¢ó6 3þ%ÊNfC¥L³W\™é2lÞe‹YI´ë=ì>Ý +×f¦TRTh©[O§)Aކa¹®#@Î .3cä +¬ JÍÚ;ØD||»Ýwf1D‹¦óàTï•h¤+JycË=ÎZ)kŠU[œp B¸ƒ!iÍÙØ‰ tŠ:›F 08̹jÐþŠuèÆ|xÅÚJ˜8¶3ʈ[DlšÒÉ\·mÿ#wC‹Tª¼lè Ÿs'k²10ìæ~J÷Ñ2º—j2/Ê/6QlãU›Ss°8Ÿó~ý`tœ öï0¸Á´øü ÐQ-fQgs¹wV…0}îD¨ÅζÍ˨¦É0§ÜíVóoqšÜÍø'Q$Œ³Ž—å—h¶;7» ³j°²“™Íp$·;k†ouDèØÙGú® Tßseì6k ü²È“³O®òî,–‘Ã(£”Óå,H¨ª¿±:(Fâ°#ØbrfÞHÀPÛ¦ï‡>lÉ%9¦l=‹Õ}d‚#ñ)êi˜EYútjf%CcP Ô”‹—ywÌÛáðZ¸Ü:àÇ„þw†Q$L îw¿F”§øÔ*ÑÞiÕP[< Ç' 1‹7{4Oá…V/¹þVço¥¨ ö¥Âƒá}¶`hÈÓÙÜi‚Ï÷aý W¦Ç‡¬GIãTF´JO‚ZÒP:óCÈÍåŒKæ¯xr"=Ÿ ʆžýõã5jã¿ê׿ñïŸ_?þñûåëÏÿ¼ôTÊçŸ>,l*UV\wù6_ÿë÷;ìTb§ê;Ñ´o…ÜÁµA(a¯f…¢òÐ7ƒkHÓõõþ:Ù7öä+â,ñ^ù°»ãÿ±ý ?y9áÓ@kÜ/úfPâõï>%£OžÏ¨vï•{vüÕ6}b £ˆ"Šüá‚T?!òp#ÙC&Ù×ó•~ãi¡zWäï÷Ÿ–èÈ›B‘^ûÐn_ì!ó7æúÛ>Ë>šÛ׊üýÞãÓÒ÷;žB–yüóUÈ>r;¶Ûã£&až>9M…Í;õœ>þçeA–»Rx¾K‚ÛÆdhì!¹Ó¯ö¾?¼ Ê¾^0ûa(RŸ^$ùviÝ^Kô3÷øÕÒ‡}N–õ¾ì“‡»Ä¥ð‡ýK^QxV%¹;ýjïÓ‹ú¾ ù²K8.ýòrɱ涡ð¼WÑHGï`x;2pÙÂEfϲä’¢TU7†=»õ]‰Ôƒ"ëu‹¬SØCäÓm<=ÑCÀ3:&ÊO }å›!H„ “ìêè6CÊY¤z*j°¢j4 +š]AÈ: +¢§Šèk³ !ÞA­TA5t1wCçè”&{-"´FHÂ@¹Iñ lVAJ‰MH }ˆ¥š0QPÀáË +Z`ßW‚Ž¶ë¢ Š´Â ^†.ÆqfÒFQÃ@ÍZR”¨ zÄÉ4UI(/Ð+Dµ²g ´v•õY*) +inB²­”¡ çD(ãº$j]ÑAh(† ´¥ZDÑPÅ"óF²ê EV0qÉH…î#ltÚ¼ÌD-ƒ43ã³ +É)$[§h ,³+ÌKåV-aI#!Û(ˆ £Ðo&]'þL…Ç©ÇÒó€Àè7RUœ¢p‰õŒèë"ƒM¤Ÿ• "UZWÜ)O¡Õš Ð[¼- Þ®†Gb„ã·`È‘KB¯–,ÒR*²¬õNŽˆñQ6u¤"GNCã±×ÂÁ1:¢€h¢ªG„S”QÉuÈcŠ1LY$ïÔ÷…ÀçÙV®§±Í]Šý„·+ßšÿ#b óDÞ2œiÖV2â†å¹¿e¡/‡³§>‘gŒ· ¢FW–-} ÓNŽà}• ¥±Œýõâ½ïOùXS¯¶™ÃþþÛ/YÿúÏ?ú鯿ýòÏ_?gøüùç¿ý +ìj@ÊäWðæpMñsL¤sÖWgTó¡ ÛY Ø™H2PÈõ2vÍ¿]óûÍü?¢‘ž¹è¾ÜbFΰôdEžךºIÀ[W…x ÛÌÍݽŠ*YÕŪ&¢÷+ª6tz2öf·¥Œ²–‚'ØÖRְͶ¹›×‹R܇Ї"7ôR•ðÓÙ&Lêÿy^†’×G†œqæl·ôð÷º]wO¶ +–ñ¹ØI3—U,"«˜HØNö·[¹ùº*FÔ(4‹ˆÈݨ¾/ íf‘híþÑy¯Í _Qƒ%;C>C…–™õ'Yó^oÖ¥Ñÿ|ÁÈšâ#/9§‰Ì×Lª;Caj;7áJæ˜ÕÚ÷›éäQÎÆ’¯£æÀžC´bßì ¢/@­Yëûõ13;ÖpÂ-KWg¼í…:„÷ò¯*ÑÙA(r¨h¶ý†x òðö –¥«³ËóómR~5% ØæÙ7Û¥¦Žkàç냽A[Ÿö±&?<¼Î‹„-êv¢`˜WEPÖûÅiéê”âÇ>ícϽٿ<1ÄLï3#åµëœ/ìÇÁ¿¡hµ™‹¼éùVy÷.Ot`bâDøêÒÊ*±€f["y»è¸cÚcP·,óý˜©C) +Vsþ]v‰zZУ„šëgƒ¬«×ÑËÄr²Þ=ÆàB'DÕuâÚ¹ñÓzÇ倠»Â~ôoß:²Zë+ãCÍS"°Ú'¶Μ0å•TÛ§Ïs‚˜c3UwŒZd[zø{Éâúà3Dx­{<9ÁË +£nÐyÁ'Àjð¾³õ¶ÿC%€8E¯Ø Eøˆ†ATÈLO­®A•MP=*âå¦Õh(ê{:V¥+§7ehœ²±Xº¸ìATÓdC6Ñ +AΛ¹>Ò©ý× ÏÈYÊWi_Œ¥˜duhV¥)k³'17 ó»1ìGÂf˜‹VÊH k-6tHd5ÙêpJS‡¹‡ZÑK’Œ™l!568⿬/3ÒXÝÆ• +=#,‡b‹+‰Tج +Êc6Vx¬ÊðN†0Ôs (ŠZ¶m¥a„!‚'ÕÛ gQó°Ù”A$Ô<[ÝÉŽ‰ËÈÅÔ¢\¤š|Ñ6Ÿr[¬Œ¢."Ë“²(í+lí]Y5e=Þ1ln¬5êmAÃEc©å¢·…„¡ -ØÐ¹ˆÖÅ ­ärÆÌÉ졈%­÷ÅRýP°Ã| rû#&}%?PMÂ¥Ò!’µ¦o¢×” U‰‘žBiFr×Ðl£51Õ*‹kµHGaÂRȆÂÈú GmkXHº¶Z¡w”ɇ@õHˆ0e¿r;@ÇUþ~ÏØÙÆè¬UA¸¸îˆר…J:ÆÀ"+'pûÆÈºfaÐ+ƒG%Dˆn™ˆ£•tÆÑÐgJÖÐÒ~ÜXÔd3ä\(xÛ}MÍ×MÔg[SãÀ9‚¡óòqÐM25Z,€A>àLÉÚlæ¢ÔŽX%³\@–Q?È •’úME³ X4MÖq»Æ5tîLæ6'FÙà;[ø§Œ‚£dÖR ¥ ++epJ]=ä:Öq"=dYIîšnÈÐ8¨½¡ù†,1Єi¾¡ÚŸ¡éÜ™mu¡ê™ wg[I+¦éeä¯\n œmÝ+Õò@¾¦œ,æÒu¹‹hé”!¦±‚¼%¬iÂ!‹v˜YAX!ëܬ ‡¬Ì”ô„5áE¤jaÁÖY2ƒî#uM8d ;&‘  ¡(öRÖ„C†£sƒ&0„]”5ÇljùÈ‚±jÂ!+CÏ*&M8d"ñÈ Ê¢@hšqH‹!"Á<À>2_D‚2è±&¬…¼PÊú“f²Ö¸8¦Í8Âr“÷9j-q1DÇk_ÌS‚LD—\bOQXÕ¼cò‰ù–†œít¥éí]š& ‚j7ÆÎ,ûÄ«ôºj·BGh€OH6Ôš,êÍåáÜúûEãAo!\Ylå‡ 4ƒŽÿ´A_Êm žÉi.BªFy20AÜ P׫X¼7‡š+å2 + +wt;î¸ú8gXqØ~Q‚z-ôûnìb¿c·¢,WÖ—ëX&ÍÕb°Ãà4vFu0’¿?Txëh'Ë´·h\ ²6[‹Æš û—)12It<ƒï¿ÄåÎáï´!GÓBáX§v2¸ñÛá¯U·sô;Š^˜ÊG +¥xŽs´­=¼¾¤‹;pœ{1±Ûb(C—\W‚ï—X*Á–a#ì{y8“5à|âç¿ÿqv†(Pr9 áBrox d2âÒT*z‰=ät$ÊË8CníéUO&35t\ÂÈx·Ùâ¾ÛÅ6¡@q·úqîÖÿ¶o7põqqÓ}·‹mB±x¸åǹ[ÿÛ¾ÝÀÕÇv‹TÛÊm·Î6 |0h“Öç±ãsˆ7sõtqžÆmÏÎ6AŽçúyìûbÄÍ\=‰óúÕ«Õß|C*¸nÞ‰ïÌçû/жåÄ-=üÝWá§@Õa«°å;ñ-«ðƒ¨˜×ƒpâ–þ.«8Ã~í|G­‹kŸå‘¿v½Fø·Ûxxºû÷ø_{ÞáëÄüðoO`íw°o·ñðtõ$9ß­ç('–Å|–ç9߯ðo·ñðtõd;ß­'«ƒäyõo Ï÷ë#üÛl<<]JšË§¹Då·¶¦söÍœ@Ë!Î_.Úy© L>j‘méáïuŠ8j¯h«À›Æ¯±™JËr_…’+N€ú¨E¶¥‡¿—JÝ\v[ðmÀ{‚Õ:>ÀÑI\¥p€òõݰ ÍœÀ›×±ò)û¨iý)¿÷Ô‡‰)œho®ƒ×geß%kCp&(ù7äPÊ.9ZÑŽ ï‰:ÿÇ|µäH’ÛÐ}"/Paý¥³ðŒ^Œ/‘ðfPµ30ןGJ")Ed£jå^4ºâ%’øyŒž™ÒÀ ñWi5Šz¾Ú,‰l9…ÔØæ’εðâVg )w·[pnLˆ)­{9 Mc›Ë¥h@©%/¦Lú®`ÆuvJî1J±VÞBSu»wCìë騴¯xo&¨(aAK0-ŠÁÄ™L¥[»G>¬‚)Jƒ' h \TÞÂèÀ“l¥0é ‰­Ýã~ç¸2^‚ðnIî|‚è¿©ß&.ØÅrMÕíΗ©”\ +mMØQHI  zéèMèùöî]"z¥‘SHl]=Òq8º*Ù ŽÎÒÖ@:Äx¦qFN!ck÷¸Üû;&JIüë‰Í‘:‹@°ÆÐÇÛ;6;Þ$^€S¹ßû¿þø ëæþû¿Ç/¿üãßþýûCëñë¯ÿü¸<Š;2kÿàOüë+ª£5¸6¢FOÕµÊÉ0AîüÃW 4ˆ$QÀ,G7—~.à̈¿àüOüëÞüê­5aKÁãQ4Pe6´DÔ Sp•“H$ƧڸøâháI˜È_N T™-!tÎD¥‘àOµqñÅ!xÚQi “ÌÞsxXÇ‹îÄ ‚ÑzúÍT'ôdkž÷ÜEn@blwy $¢Ms `­ô@3•mÞéP$z×Q¹c«Ëµ7y‡QÆKˉu õt“8·ðƒŸ?žåÕ‘·Ö%Í?Žy¶PSã§\NÙ¡~ÊàS «Ü€¬±Íçs¡Z6'zëÌ„¡´SeP;½Lõ–¦a¸Ê>'¸@hLE‘€'ÛŠ®´fe˜v.þ¶Ñ”ÐÞèé +8ö™G<¨ðT,øaÁÌ8PÔ¼o“Þµï´ÉBÍ÷Æüû“ä&ÃJ`7³%¤Q¥mEå‹v‚1†wå!Š'žsgîm÷F¹‹æ6í"½éÑ„2aÑHär7Ê]Tè¶«#‡`*s¼<^­Dнü° ÂÖȨ+H^+jÈ¥n 5¦â Ä’¨Ä‘‘ÈÎ4/¦u”\ª…6óíAîFƒ¿ŸoT;Ä|w ›çê ܹ Ó"¨ ˆæX[ü ïh4òkÿ[”¯Nž/2ÿ[OZà3nÓ«LuM?tq³°™ª0ÒW—¯bVÿ#Û²”Ø>§Âòxf,•ý&Œ¨j!p†4¾òñ ‹Ú"Ýåó¢ÙåRÚRL›æ7+É Æ·TÒ—J +Ì!—:šÐREŽÖ~H{ÉÜ@SñrÒYE–­"ýæ1£ŠƉ­"óÍvÏÕ¯VQ:ùv› ÄubôF¥,¿e«xup_A±ÜÍŽD^o)6èKŒ`fÄœ¯ƒ€àž 8Y6âOŠ1=îFPl©Zææ¤"rJËÁi­!%ñ,ˆš™öwݯdê?–9ÚmgŠT`ubº4Uz²ªkŽÂ°rZ¬m^;©œÐ5%¶“˜fA¨©(‡`5…îÉBþ;-“FQóÁtÀYÆ ¦a„C 2.9€²râ,Hw½èOi¬E5¦¸J_L¨teŠ +|d鋉¯<79AbGÌqž§#Ô·GH½ãä_ïÁ©;£ËÔ'Ït¤“ªµ[L]t‚œݹëÍïçõk4)ç­@jjõ·Ðññ8¸’>½>9¼Ê럀 +áYüàýI;¦o—‹ V ÆÈê‰é¯`s W‘ù«€ +Á8í꾺÷ Îl:`Œ¬žòmò…— +÷vš_·P „" ¥¤Ç’jz²½È[è"7 ±võzßuV³Q„#÷<­¹IsÑûz±çÝ+”u—\$Iwjz'Ñï¨Å°a•‡èñ—ÍDP@­lÎÖLÄåž½ší# íyfhA ¹\U50åàü*7 û¤›×55~¦¨îR#~§?c[:× íô<¹¢°ºV¿ÊÖ¥.¦Œ.wS…Ñ=ÍkÐÓ#ó$z…N c¶ÏsHd'$+7J‚NnDŠZ¬a%¡[3‡êÆ,Õn¦ž`ųæ¯ï, é„$(KÌWýpÓÿ +ð͵Ä1^\L­ò3)šlHÞÀWŒœ€N 3ÈÙt–ÈLÍÞn!;EgN˜*íÈÌ?ƒõ 9õæü”^4  V6gÏ5S—©íõ?Á¥%ÔÐÖúŸÐRÿ*'µ¶y}UÿßZD=®¸×¢ÝE º­£ݧ4ŒÓZŽèû´Œ›£%Cz +{?ÊÛßX˜ÒøoÉ”¸Q\õ»(¶±à`Á; p:Ê*äȉEÑ`Ó,h–·;®-Ò¯ºpã¦@Ÿ¾±0 bQS´õwcaÞu+zUß/¢±ûMñõmµ.ôަ‹ÓÅ/]Ô{wL]ô¤¤¾QßE½;| |M»~½_9L~aK¤Ìäpž¢CrñâµfgÇÀ÷=–ž“jÆJ*¦¯¾yûXp<÷ˆ©¡ˆ#³Æ‰Z á¨kD„ôxj-Ff~[;»Ç…i€>Óv‚Ÿã‘\¥91…%zzjº¤\Ò lꎼ)XÃÂb¨aÁVw©àFѶú$µ¬F©t«¡z + !TUCá÷e„ú·Ú¹øÛXc @+ªõÔ«k%9Èå“(ùTëŸOné!X©%óÙÄ€JÄ`$^x\ à¢  öÐI\°2RKæs£ªÿç«ÐGÑvE½w fTH l £ØDƒ#UµÈ v.þž{׬e†¹ÛØçÈŸKx²šóìUeP;›¿ådr"ÇSì«DãÇÎU1A@øpA4 dâNäùÖxA„¸JMD-]üQ8j +(4©Ï4tÎsSL0´¸GÑDAí&B\¥KE:Š«<—诈±ói0²–y½;ô¤Rý+pjQ_Ô1ÄÝTr'Oˆ4©0éS¤{P”»ÍÒòd]£*Û߆×J+}…ZÂ+íná¼ÒL [5X§´FuÒÞÞLE`|©‰«³­¹Bƒg+ÞîDÅ籡$0…ªàù³÷.£Ú¡'ÛK98¿Ê 4­]¼öFkàZN †fVUpàb¦C=˜’R÷¬rMk¯[Óý‰®èšªÑ—ï,¾RCv@`ÎBÔö³£#WþÍy™dGrÃ@tïSèÖ#A‚Ãy´í¾ÿÖ˜™U²úÙ»ë‹I‚ ¦X[ŽÞÃÜôüå¾þe—çC”_» 4(f—mƒ¶À?×a7‚ÌÙpÍÇíÃD_¶›˜·ëÍ^ô¡ðFêwR,š’ÝA_ qä†t“<×:›½ù2ÞþŒ!t×0©b”\¼¡‚To6Þlrä6µ¾Ü9׺@×no§šUW„@ß2ì±'uåÕ¡7VõsÉ r· J†pŸ¼6‹ûÊÃn;¾ŸýbFà.iÓ°Y{Þè Lô[öæd´Iб +uÄmåÅ®ßÏ6›àµ ßFÁ׿Iq£P9ˇôŠIa«þ@s‡kFë-¿ý;Ío›þ|’a*)ŠY®KöÁÏm¼áá¿¿ùþumƒ¹eëOk´!¿ÿ©^œ à±9»†‡á|ØEü]T?®ï’à­1¨íRæÅ.rvz;ïË‹_øy¦äjŒâÙ˜T%P4ëe1>:à‹“GÁ(P/vÈÙçí,7áïú9tbàèãS„Ž8D«Öôº±>” A¬‡±¥©Îc¢¡]4Hëq¾ô%Á•ʘ"6ƒUXll×øT·NûT…c©³¹Ö6¦}æ:´ +³WW_5XÛj–ŒÚF¡HBgh¤ÃYßMl¿1¦u%²1§™‡Æ³â Ýe—źb¿^¥Û·“󪡶|·©4Å,ah6‰ÍàÃnÎäe™²¦°Š¤7E{3¬Ú{'˜í}ôë`åðuh×+˜–d3ŒC…´ë/ Øa‰OoÆjçn ñö‚Ø­†:jk¨#8³9êVr€ð7qËfw„Z»ÁÄíH»ú‡eš­@kº7vŸb.âNÛs:R¬74dùwˆõx“ž64ÔÛ}B1tG¸¿ˆ(ñû "ÄxNñ½ÜoF \ÌQ¯eÙ^#"¨‰¨{ôX¤¾¹‹“±Åv‚Ƭ~羺»ê£G{E¸Ï›#-»gEƒ–t„™ÃW•x +•éÏÚæ"GÍ¢A?Í £™ ²w¼„¶ÙÛ=§Eâ;`Ž@¥­À³DMd„xq¢²gójÇëVc4Ü2$û\â죣¢Á{ᘩx^"Ž]x^¢Öâ¹8PWCý|¦7К¬8ö‚on¨ð(fr±½–”ˆ¬Öç44÷¨ñ¡)ÑLëÑŠ»¯ÒºÜT²ÍìÎîÃÕ>}/txd6:G‰Ó·KÃѵ1¯‰&ʃ£RÌø1bžNíÇŽÖÊ˜ŽŠ™…l…̬Ñçè·64ô‘çO†Â8ms!ѬþDCÛŠB"0ÄOE“Y54¶ãS伯5KËjXf8ã*} ~7ŸÁé¹l2µÉDõRÜÿpTVeAƒÂʪ¬³Ú s† <‹í¶ÐQ¢ð—¹Üxêóþ#x¹L"9¿Ïo§|}«ÆÆRc©šd¢N½¨&Ù'£ªéð›jj‚úÁ¼¨±Ãÿç¾Ç®§§+gçòH? ´™·L9ø¶r¢<·÷ôûné7Íô{YùmÖåç¸Þö!×:€CùÂ4q>Jp“k‡]$÷y;ëE®Uä½»\#‚‹ïr¨Uuaér¨ì—]®ñ}1Aßå‘î‡\#Bà†£\#ì +Á¡¾9æõ‡\#ê=Dž©5À]­1Øç޽]­õñPkD)4]­1ÁfŠ]ÝHºBµFTf +1*³“ÏdÒ_b 3öC¬u<ÍÇ%ÖˆŠ†bu±†¼g}ˆ5"œ£—X#‚ïÂÁ&Ö€„V kD½>ÄQ­5œnb B¨Å+›X#‚Yw±F„ÔŠð0±FTzõí]¬!=k„š‰5"Ýj&ÖªMÖaª‹5"‘‡X#*ó!Ö*K™K–kD«j¬¢X«¦ –/r±F„’ê÷q±F¤­fSû=w‰úS«=™i5C³e1­fGºF=ZÍØ)û®ÕÌÚ™eÏÅšÝ)Å…i5óEͺêZ¬Ž§V#;Ä´š¹¿>µ*xê2Ójd»g#p­Æ>ŸºV#ò|W÷ëN‚©£h焞¿„•ùh7å(Èr¬óË‹ JT2|לµ¡Á Š–³á›²b˜0V«%ÙXx`cÃ"ˆLEl„)Ò$×µQmŠ)_Î¥Îv [zqkQºPãá¯~Á¢k†-mNu[`^®lQd«® ¶ø·»k~ÛF`h%ln­ˆ3؞ߢÛÛ·HºsFå{“© 2”;*ñ-â~Û=êâh¬V;í¡Ä~²†}*u]Hü¨‘é>A»q¦Þk-w³ÌÒò[k/dÁ¯uæzÔ!Ë^;ïj a¾Ï¹Ûž²áaÚ1/˜î‘lÃ/Æ&ïl¹ûÚn[Ó-ꡆ†ÜÓõ:³MO›eû:œ»ò908Ó~ ·»õ‰GÊçÁVO¿à±ªŸ±½‰‘-ñs1Rås ¨u{"TͰ_}Ø:L+-öâv·¹OدÎêÇ¡\J¦ÖF­[Óáû)¢ã;RlDn¢†ò¾ BÝq†g­ ŠŸ¡Ÿt­°3{ê$Ã[Y-"ì^`zó \õJ¬Buõ`eŒƒ}|‹²ƒV†hÎ3tÓ½`è…E“qî¸)>²µá—V˜ZCr¿‚&˜[žK·õ˜ÞÍ>äEú +ãn56¡#Âæ†±BÉ}ç6̯8©0à ¥ ;ã\hAô»–ÀßÃ’ÁøÌ·ÍIŸl¢4E¬­ +Ç­¦Ã*}cÉ—!„ŽŽ(i(Û˜zb»^'d"ídjÁ‹a”è-l` õÄjý°Íèq6£ö%TŽML`ÿ0_%¹’7tß§¨ ¨óZX2ö +†¯• èú~œbÈÈ/K;/º»ò5É`08<"}P»ÀJlU1¼¨çCá¥äED(R`{5Ê(Fu+x=ëÜ߉X+<ÊÕL”°®©L`¬ –™ ‹=™ndî í$p†‡"Í j"K)E.7yAõ¬[À‰ÃÍ‚â“ê‚¥¶‡!!/ï5È !¹ +æËl6$,È$ð8– N¢‚„Å ¹ë))dÎ±Ž–Þ«‰œ'-vé?HiGS€rÇ…®rÈŽÊXV +Œö"ÉEïäÀ@6Y.dÙ`¡™dÆPSß‘äà9Ž(‚5ì!•k¥x%æ +ޏ“(Âf¬›¸¢€€TqA4â PÑ\¶3k ¹¬õNX%â =Y2a]±T²B öŽ[J€æ.wZt#ŸŠúj’.Ø“¤aH-în4Ü5r› cůQ÷1;Æ0拏ã>hÜA¤ûhŒaX[ÔÑij6"1É^V¨BšUª4™ü(¯Oƒ,uq/æ: R„3 ëíµG ¡Ù©Ø óíXd…ßx aà˜Œ'¼„ì {=0k5{Ó†³XsmhL&\(p;ã\HXMÝt³—Ëú¬ÕN± ò>¹X,ÆQX¸çÀZŽøo·¨`¹̹ìmi/d"Z½¥Jãü¬t¡¦y×klBбhnwÞO˜ìêD†Ñ(D9E§¹fP•<§`y·äÜP¬.x‚’ön5КÐsÔ‘ž`$«}¡ªXêf ÔO—‚`g¢ÃÈûàÎYK¥¢¦½¬>ÓÖ"?1º¸›È&³e|G/߉wªø¤õg~cöów{†íÛ6¡ua’Ê?ÜÃ?þþ !9‹?ò&>Pû† „Ê7òÓÈ‹:•ìÈç´qœô‚#Å À¿M7ºH?6êcy?ßw¬°ˆðç´qœDç[dÆŠùžÕeß7\Ï÷Ⱦ™zj£ãe°=6¶Fž× <±Éa` %^_¾qÓ-Á&bv޳è:þù‡Ç—oÿöÏÿ<¾ûîÛŸøËˆvx|ÿýŸ~NOîèÑÑ&¨þ +àüù+t~ú‡{üë߈}Á$»H<¿%ýÃ;ËB¹êlÜG%s.Ú"ŠÄgÅ_x" 1l²ý‘=Y…Š÷ú.‚¨õ!—¢º1ä1Óv“/~ Å +—¡‚CGh U5(8\ÝéÕ½\}\´»1˜HÑèŠQJ!ãLQ>‘ˆ‘fv¡·5‘™†.çq=L°¸é8³:!èŽÑš»(Òç‹-aKÔ#Md"fèrÞkë©jÐ;±@)Τ½@¡jÄd2ÅIÜ5—W'²ªE¶çD—àa¯Á³oéB.ê©ÛÒµ†Ì¦ã<Žö +cmn`ðˆ.Ñ׋¼ØVèê†É(0íçín$êØ×h p"m’­(BÝ£1d0íçnwÆ(ëÛÝ(qÆ"£À´sœ·gŸ÷$›itfqÇgoØÇ‚¡[RseÌt'&Eñ¼^ll± ×Àfw› &6¯²ï[ÙóìÛ³7›Ãÿ÷íÎ}ÜÆˆ§S'ž‰fîá¡Ä-R!š‰M©ºWzñjêfuvÙŒý¬enëY朡+F a©Yµ {±[9lb +˜­»S9y¾âîç{Cç|ëìÏçèå¦:aæ-I<··Õ³î«ærCxš£^¼HMlZÛÏüdÈ·?6äê ÛP}´¾¯¬o‚YËRS ¤:”'I'¬]Ç1vÖê'8'·<Ì0ó¾3aÒÇ¡ï;S»n#6ªÓè3§)?t&Mi ¶›ð¿ ßè›h = ß%ã*^=`T²3¥K*ðÒÝæÜibÆ®tú¾H_LØ»DÝÅ)‘:•UÉ# =DWM+G¢—¦uò>ÔŒö!rÜÏVÑ‹ò•!â?Š/Lí«lÅ©>l\RÕø[¨W¦w‰ÿ˜%Ÿ0>c)ô¬ë[63À•âT‡qfàPŸàW¤£8ª«¾iÅ´ÔJŸàyºö¦ÉˆŒR×Fù*5iêräk#\kÉCU-Gm%µ<Á›rn.ªÑ®…u <Ã"7 ií8õµW=ÚA2gžYph:Î$δ¤Î˜Ü€Vk—S/t#cÆPr6[Á5D +–gwE/r°Rßü4uËXÔCŒhSr\€X×Ðã@>H; r04'¸ñè%ñ‚o‘tψêª\ ì¡­fœFRÜ(«”féæÄׯ;Í/[PG\ TD|¿<sûEΠií<õµ;{׿ê1h›à„ +vpqÆ /2)­Bü=íœçYï=òž£Wíñ +‚"¥^šn‹ãzšúÌãÂûl³D&ž¤SûŽŒ{Ü=·ú˜S2mN”èA‡SÆ¥ M¢.Q;SÕ Ä/ãôXèå¦Ü€¦µãTŽâ +ûb΀H4Ž¢ „^…¢Ø\É\:PãE‚?W—³„: LDÖc*`ÊFŸ + "‚š§c¸@àz=•üŠÀ—Æ•“ «Ô€V[Û‰Ký?ñçfÄ#YmÄÿödwàk<0B£Ûd7ðv\·‚5êQÛÓ'úñ¾³v4óUú01§ŠäÚ«Î5+oAæÄî|3À ýnUÝçõ”º(Ϊv§Ëôr×ýëÜh_3XüIvG½J`—zˆÆ iŒ8:þaœÎÄ5¼kjí}g`—]†ú¡®>ÄúÄ$*œÈ ¤…¹E,O4–P'hÒ]}™¡8M¨tvÄê6ÑC_E‹çW*3jå?Èï6mç nÔà y¾ {6ž°Ê)´Z»œ*+'1n“þ½¡“P)åƒ+¬èg\Axâ…+ p¡íÏZ¹Â"gдvžºsD©.i,Ä`€ }hÿáŒ@ƒ+,Bü=íœçI¼Ç°¯ÔYµG   :å`ƒ@Ü‚¦~p…ú,˜u+S°âŸŒàDTíÊ4ãq…¬¢|üð€Á*O—fÐbU0ðW˜˜Fö“^[½õb§ûg)Q¸’€D$yj ¦ÃZg +b 0¬']ØÀh4ëü­(1ò:34'ëÒ£æ¦êñ¡ïr +MkÇ©ŸÌ`ïÆ 蓮3Œq̳Ò\¡®ÕOª Z7©€áÉ)Tˆwëz5pŒmŠ©Mí°e‡`ö…†´À#äÒcféÄI÷gÈÇnÒ‡‰)BIÿÑÐÖ"K&¦4¸ zäEúbâ÷tùŪ£9MÔ]¥–>À¢í(V7z±=4íw9…†µóT.¤€zËô:%=Såî"O.ùþßÄCƒ¾Þ¦_­$û@.bu²¢©uz½A!ªŸ$åBª‚öwi›Éøaý—ò2ɺìFðÜ«ð +|$íɵÿiEÐÜlÊ5ð(ßÿ¥®„Mðíøñ½ãgK/\(+îŸJ½¢Fwý`Þ—û}­-î „—é ê¸ÙA“øÇµ¿î{Y¢-FWþøÏß÷ó­~ƒX5ÅJŽÿPGSù}ÃÿÛ ?KjS|3+P±Q~)á,QûÒÊÆZÙöƒÿߥÿƒ±’šáY[úY‡'…Ç=ÕÝúbïÿñV7äïª?1$D¼ê«Þ.Ü,SþkãóWuwXœRòxt•~Qg®V üÌvÀ±d/^l"­˜®×Lé +²uÏ0üw®C»µfPz§X\fzëÛsñ«Ù6©uöµ3 _(²žL%¢FÁ´ùˆîÝLLN²uL‹vÙd‚¦wšÝÇŠ]éíBïÊ#  ï0ÑeÉ–†4[róÛ}]{ÝEM/¦þÚ”‹Îc¡BûÓ«/Ò£+T½ÙñcTœÝDóþkWm½`¬ÚW¸ëâ"}>ËM'ƒ!í:Ç zálçïb2&ó/Ì |Æ´…t`uy÷é –a"U™eœW’­§w®°;JÕ¶‡ôÇdº¿Û«2ž” Zç†Èîõ3ßfÏ&S“ñ&N³dûsä)rÌÃϼÿÁ>É ½Y–2ȸyظ+mv¨£þ~\y†…í¶ùaœÍuæ'ÚfŽ3µNurÞó,Ά'¶QWÓ¥V â·NЇwïìY·da&ÍŽZî†KÇd#‚­tï‡H-/C‰E[‚©¥^Hí¹þ’ñdÐ/¿T†bç¯,5‹UD1°Ðßf±,½`ññ 0§K`7DÂÏ œ^ÿó°Ïxz_)áß“váÝ^²þ;ìæÉd¸Ù.†¨SÁž½4øuRí}%-FÃéÝ 3o¡{Vo·!!°ÿÜù~Lt*‰`”%óøNxpd{aÄ)&‹î!;æ½£G$œ9$hãÞÎ| ÿ§!¬Þo˜Xî&YI~bÞ:»±ã(çÄ_îl)`×®ŒmaÉ0ÔØž;<¶0Õ8sWÖ{¡rþ®ôÍBÀkI/2‹Žž¹þV]¹;£7“6E—Žç–¢7ãóü!'ï…ÔØóÖ8uW¢^éí0âæ©HƒqÀÊ&;Õða÷æ HÖÕ¡þ½<Ùµ ”¢“' F'®‰•þ䣙Iá‚Ô,«'·—Ác*ÉP1;u®¡2'C1îøGñ¿¯Øó©˜æ¹¯ÉâÊöd»òdªÂolÉêu«ª‹ÌÙÞL¦ðëTžûR‘dÁ2m[Þ9Íܽ\`¥¢ÈPdž}g|ŸV)OÄÞTlë°eÃÖÔIÄÛi¼9VSV$›"x²Ù7›ýÎñ9b¬uë[¬Y/ÛxeÌ[þÚ+2L^´W …ûX´¡¨Û"ámEÙ-±EF)TÌÚÉâÖŸâEÛA$—)èQÛ}GQ «<ÀæÜìD¢['I6s ½¦§ˆø+tí ‚N&6n|ívd®°;¥®®ñ°¬W®ƒúÛ³º~mg×?¦R–ø4ÆÝÏÁk¯t^p}lUY¸OÞX¿ƒ +òûÛ»[£O*ü´‹*ü3p‡¬îEè ùóJ‹€¿9"´Fü#sêZKÇ&cç#ƒ`—fLi bhß)ˆˆP"™ÍfN9K"ú­Âóçªx;Ê 2w „n€Í4G½Äi3¡$ƒ^|Ô£™kJ[2§’ CκðH[  ½%r?›ñÉIC{;¼«CÊÎ24ÕútŸè«¡óâ0Þñ´æÍoY'z?H×r¦ŠÕ×}hµN¯´[pÉ^wX{‹áÛt :jŽ'¾8\ô¹ˆ‘Û ¥ù“7 ¯Wg Ž¥ƨÚ^¡yF!{íýÆl­]¦ìDdýhýí 第“ùÔ‘ }‹­Ö ª"ê¶rfÝíÇ0è‹(vY£Óy¥¥ˆÎé‹¥Æ/æL >bKš=É\jò +)cÖó61V÷‡²Þ û¾ÚíU½¹Â>SŒ²ª¢ÑŽôÒ¾¢,P›Á¹_@‡Î·ÎòN¦¥ÍÈ‚ 2qÖ¡ùTNí]댚lUîõEñ’ßb¾»³ïR©¼Kv${ 0­”'ƒ[öÏ)ÿ±ŸJ¶>û·âPoòçUÈÅw#0{þÎ8Ó«¦Fæ ÉÌg]@â$’+™ÞÙ)íõ©Ö›‘¸˜¨žHáïd5‚áµëÜoØf{½ÙîQ +“­•Y v!rÓèï[ Eš²ZÙ“Á” k?º›5‚¨ó´÷Às}‚ ’ *_3$¯ç˜Ýê ±°oî·(^ ‘ ™ÙxÄì¡`ñž™Íù¤¿…ÀCÖ\ÎÕÏÉK>ô˜4Cع´Áéo± ]€9 ]`˜ðu6*ß-„˜`¦d žF®(sôŽœrRßÉÔ>"–DbÀ{ùÙB2ïÙŠ‰E/ì=8x¶dWíµÐþðo‚ èo1!Óê=ÌNðq”ì±3%Céøœ™ƒÚø|-sR ¾Î<Äfw‡2Á#ö¶J®s:󭘯&(âšG еãð@áæº*ÞëTk7ŒZbScñª¨õ¨[ü‡w‚¶ßS²;‡¹*ØÂ SóKLnÃv<„´z¶v6}% q©*‰œJÏÊýý§ÊîIfW*®%›ažP¹‰ÐEù.6.Aˆãy¼˜ö2N»>µÛ̶F-»·‚ Év_}êë¥üÌ2ÕWàS©Ãr›M;(A¬ÙƈW.À35;±y]è²ÀcMúxë“B…¨§X§^‘J梚ðÅV¬`©«^ÒG Êß ž˜û>Éë"*´«˜qˆ‘dh¨U æ±È€aLºVL7çN#†Hoö*_¼º­aDAƶ®ÕŸ²3žö"„¤W¢ Öõ^÷X®B|G‡æ¸3Oî +c­\÷4UÑ™¯–]Kn¸¿_q~ c½€á…íÀHgÂAØY%€?U$%±»Ç^gqÛu$‘”ø¨„4åpB‚ÇËÂ8÷v­WN­õC³ëèälÒ6P`˦°är šs€bEÎ1™ã†tÁâ°<¬–¦’Ì©›o5㕤÷á= +B$™ÌcÐn¼ö!=ñÍõ2à="´06Í,R£Êx }?*JL'8”Ö+}]&gŽM(0ýZö»hXËl|Lúd£ y8£NÝ=a€aþU›D–_¥Ðm`nXYÓ¯öU¨¿"L½/ ’GM {E`˜×E§© {”‰ò8NÝ’¬&PIö¢…¹0²&â­ZMà}¢b-×µ·¡6¬Ãó*y0ÂWøJÀ­ÇÆŠ^éÀèZ6jÒII +7¦¬`Sb¹éys_3Ä™2ªh$ƒÐLr``¹/÷¨,…ÅuU¹M娅´°^5Œ ú´ÜïCY`*/W•@ƶÞ60 …SÆ´¬VÙh©­®GKQYky=Z.J3{*— ß-­ïTIje¿3ª(ám¹[ÆT¤Xæn ¥õ®ia‰úNh;<6,·:›ÓÌâB’1þ:Ì,%¡ ˆ°.é[M¬† +õ©7æ½J%¡ËcÈ”½lL£’ã CÈë8É;bHäè¥ ± +Ýéµ ±žm¯ib3$/e†îÖ¼–!–R^ËËÃ\6-C •½–!~‘¼–!iÔ½–!6…S-3˜nMíª–!M¤--C Ô/z-C,“`8-C¬ô<¼–!†Q_½–!ÖDA-#ØÐF³´Ì\ÍkÁŒ./-#ØÌÃkb#šF1-#  +xÁ‚öհϳ^ Vß7VUàfóº+4;kHmïýÖfÖ]°U=-[MKÍ´¾bCYÃDa­{®º5¶° d ©‡óD)Ú»‡{\i*ì祮D›Ð}ªp’ŒbРªŽj(;©²Ž/0¡b Ôáª\=Ê¿Ùy #JÂ…šjv^CçHÊs%3ËO0t«bIJ–¡S³3aW†+^oØV°˜u×e]ª©PA³•—LLœ ÇåÌZlèXÂð×vF¨&Z$úN ìEôƈe­ƒzú s™r´ªP³,ÌK=PRšmK¤ØUÆ5̹€RûÔç#r‡Þ"Mrá&ƒi\ÃtØv~mu1âÿŽÉ•.ËvŽ»Ye€‘s·ßŸÒ£' LöŸ?A¯a‚&QøÜ”ëYù>u=¶Bð»O°ô ëò ;'>m3^–q`!Ç –“…dC€^ß2âŠ~lÐAøʳ¾ÜÖ½å<°w8qYgÐ9íaU^Áà ùÛ™$õ¼A!_EèÅ…Ô'uæ¬3èœö°*Îàq‡ô"* áAg$¡òìtP·sÜÖÁ™3Tg•礇ś#àéí8"<û/:úÕ‘½å¼¢Šç¬2`ô°øöÝÿÿ*i¨Â¤FÉéX­öö'Myíåúùþ Ímý(ÿÛ¾ë¹WS‰dLF%É1ÙÈÁ6BÓœAù„A²ãõ£ü¶> ÐlG6ô6R*ó“F¡0Àù7òÙ!aY&öÙw06$²ý™Næ/"µN倊m„ +OÚÊÞ·‘÷EWà¿gÕBÎI{Ÿh^”OŒºl#8”»ŠÀ Ȳæ–Èç9ãa‰ö[ÌU!€‚ó^7†•%¨ kåö5hïÔ{EZ¦‘UëÎz` +¹Žƒm„¥¸ymÛÀ›rËȺ³h!ç »5UpÑ´6óí«’9$<Øçƒ ‚jY;7Âþúóàwÿø×_ß~ûÍÏ?üíÇWz}÷Ý÷?M5ƒÔCÓ½gS æwEÙ¶–Ç?/°05Z^ØÞ}À_ýdJe +=ÊÉʉ§G¡‡Ã¡K0)„fmÝØAQ]/Ë6vŽ»[½4¾Äˉ¼t2®R¢ÎKÈt1ïÝ×i3¢xÆ« ˆ¢R$Ö¢SÔ j5áÝÀ_þ\Ûñh2&ÑásÓÞ‘-5;èóŠh°ÊöýÞƒê©T§úKÝmëCÖ§Y¨Ç»ßš´ÒzOg}#žÆäEZ[Du‡†ò7ž©"»»ßµùCŲãïöeûo6î†]ô¬Ó{ôÓàÜÖ}£ø: ìëñ4veohûÚÚfGj±O™11Îùÿ4Ðá`bïÓo%”ª{lÅþv‡<ŒÉ¸ZÊЇ~4vj7DOêc݆Üi«Wв¯î/hÖ}=Óʈ :¨çq[´Å-ÒïsÎÃÞ5]?³eƒ*h’5Þh½ÈRÄ-ÒïðȘ ½/5ëoåÉÃEq èÙên¬×ë­èœö°úpæÙ?N,ÚázgöhÓp‹ô;áB÷(ü¾KR=–¤Ó¡{æACkzhKµV•ðM¢½\Øß7T)º€V +a¬%ãÜÆ}…u÷`ø² …0|X·Ð_©nÝ‚B)¼Ü• pÛˆÆÔÐG=v“å²³=Y$XŽ „®ÐµøÇ˜Î+o‚^¥æf @7…­ý ÍU çˆw•îÕŽ!vf¢áX4ô÷”/¤éÞpW +”ÈÁßB+„»ZìÒhgÖ•¶4&¤{a$í*:î +¾!(Ì{CwÇÌw—’M!vÉ6Héf®@KJ´H6¯5Ιo–=RVU +t›*¤šÃ~ J¡¿§Ðb®-ÈšiÍ®'èµ€Aúqš]??x¢ÀªJY¨5ߨƒk¬Ûxž»5rƒôÍÎÁ¥«mÜ vf=6£gâýE¯ê’ö!éçâfôXMX¼Ö8g¾± ja[¯òíèU釲œ†¿×^Åk ’Ï^¥˜@=z•Aúqš]?ßÇ£Wd¡òÑ«ªÛ Þû÷"ÇNöõ¥,ÏK àŽOWH¾¼†ýà ‘OÒ´òÙ¥î_mˆ†qÇ7÷qsW:šsb@•cÀÄ̼V£ñ¨drÞ +ÙÝê}–1åÀ*æ¥Æ82-Ãè­SIiâëŒIfQ +åjcÌ4W…žßB•!TAƒ4Ú‹¬}Wßõ*},Ž÷ŠØºw¦Š{ëç·Ûo~°çy‡ðÝœÒVPæZWß+OÐÓX—ôÉ4íÖ>U(¦ÈÑ-™çÃyÿv7\ÏÕw¥9™MÛtªÌ¥:/¡ùžiè™/=RŠ«ÍwbŠÐaµÜ½üÿüöý4ø~FÁ,œ•i9‘õwœý ùû¾°à=ÕŸ~ûåñ퇿ýã¿üá·_þòë#Äöøé§Ÿ%¼×1óñ?ªöÓß_ÉôÏwþ‡¶µŸ ?ºQ¼æ èΣL"¥v«'Ûѧ4ööcdÜÍ·×ê,¦åJµ[PQÉ~ú³uË4»ZVë#[ËçèpŽãÃñãpZ¡jÍ‹è™ã5j)ôPŸžhšyG…F6;Úûj‹1“-ÝN6Ð z´±f¨«BÔ¹èÅà\'Ø ÑŽ¬Ï}3¡Èfò8Öb @îŠnÝŒBs3“`§E;².:Ü'ÒØß4D²TÏ÷4‘ìÈ¥ÖçvtÐs¼[­} fEÛ²óýfW'Õ}ÍJu9ÈÿÇyGyuíï]!MŽ{Û皥 }2Æ{ªóvKˆÃžÚ©/Bˆq꙼sÜŒÞOÿOUâÐØã¹’©ÝÞ<¾ +jXççL2=uÝ ¡``1ÖeKöÄ/ñWb÷¦Ä_"¨aÔ3ádýž9ˆ‘@kK9ßv1$„ãø<êB€º +Úr›-Ž7EfÀ+ößr쉓Íäý)áå©)ω 3ç%ÞzzúgjˆØ`Δ¤~‰ ôpj|îõJž¿ÅÐ… TÓ4hú¯”W3u–jR’fŒÎ+)èeš•›çWHAN>ÁH¡(`ý­µ®æJ ¡¿ÎøoiT¶AJÁè (b$Ù‚RA °([²ù>Œò³¡òë7[Ó…ñL€^†Îk¶Û‡úî޾›µ ®Zßí‚úŸ p¦ú`Æ+_«kú&& qpÉ­R Ìßk¶tò_z{©Ø9p˜¸^¸¯Æ“Cï§óçj›ƒÈÕ†|%¼m¦„‰‡m‹3ý•WìŒÑŸ¸i¸zªº|oWؼZñ“{'Rßu ‹²%;€›‚.GS(OyÖŸ³¦ÎØèn‘O°SEµp/GÉÝ<kTŠY?³ Aߣ.ƽHù1ªÿ1kmWÃ*ªkéT‹…j¯eü"ħ*’€PÛ½šÐÆRl®ªÕvb£€z‘r»QÔm»QS\À¦,ƒ«H7ßžðJC¼HöÜŽVÈ}ßüÖ~0é NÊïÒ¥ò›Wì¿åØˉ¦ug9`“ÄàªD§ÞŒå¼²g²*ùþR%GºïyË4>×ñNéï±z +¼Yv ÒÂÛü¥àí¶êåÓa¬!{#ÈâS‘íƒêÑÛ‘ÅÝdJ1S³é‰’K—y³˜kŒ²%•! È\ +"ô¦NŠ™‚ñ@ãbe½7#…0Ö–rã§RÃ4K¦Æ6ì/"!6Û@dÚÓAL +¬ºc‚˜«„A xe9“½&Èíâ×’˜]ôÕÉç½ë¼k¿ðÿJ£È[›6ÆÎ~ªð\²ü+¯ÀKƒŒªnl’ ØmñI·Je,ʖ칤–.©ÀZº̲')Ýh£1ÛÀQ¶L{z,Ý2Fβ”®a³2ÁUJ7†ñh^Yˆ3ÙG¥ûµ)%YÓö|K®]Þ͘^lE{!Æa¾  +÷Õ÷—þ«±2bwþ8ˆTCJò +å{`Þ´xh)´ñ•:à;cô'n®?Ey|ÚÝ6oWüäý2À`Q¶dcpUÐÊr–¢·&¤˜5*uÆn–×>´<0Ü™xßt¶œ„Ö³¦e‚æ–]§5:S~Dü%jXàW^ì’N'ÄÏÍ$…°8¯fVä›Û§ŠƒìÛ•›lÆÂn®ªüv·Ò€@gÊí²± Øe›~6E\¥ðÅŠ¯,ę쉇*¤ÏAšó&={éSýN~å“£/ù€ôÙK3ºÆœf?%}‘6'é·d¯ ›"|©°é[ !û‘üEšÆGèHs“•cè¢]òƒ¦ˆ8ð÷Wĸ’jt£Åz`/ÞÖûÁƒt97ÏÆG„Úê:Ñ™ŒÀâS$ÂXÉ#G,OJæ©HˆfÉFäcÉ8¡çˆS »[ì²hGÖ~ŸzeË©FjC$ˆè‹QŸˆ…‰©·7¡çˆç2ÕÆb6‹uäUް«¶•ÛóV&œ«ëF:0·‘â܆˜ÌµE9²=ñKZç±÷o¥­¬‹ÁƒY^BMäg^Lß-zO ˜ñ¼Ð,éWš4H ~Ìór_öëü_Ï$ð;}í9BÙ\f +…Ù» ò«n×øþ;ƒVëÀ” †VÓÃÿs„ýI©©Ë/TȈ¥®H@¥šW*„Ѷ¬å]kñ¢GX[ È]5øð0GzÕSŠœB#E,Òžð¹sI² z»Ò'5È×e <‡Ÿ#ò‹‘"iM¸Ð¯ÞT2 ýj¾Bg¬¿ÀƒéW©«ß€ÀzFØrô f$¬i“|D¬ú¥Îæ 餫å+÷Îw餷Ÿ×]-µ l%ք壔˜:Z’æÅ\›Ù(€q¶|³ Ö2$0¶X—RHŠ ¶!e˜¯r…RUãlùVÍðµwù:†¸;Åð4›Pj…ÞŠ…>8Hêgßh‘­®½sWÆa YÙìÀeÝ"M¢ú/fAcä'¤‚RnWñké4K™¸Ž[º¢ƒ‡¬5–æu1‡ì¿TÌ”ˆ.,´A´Q>¬ô‹R‡)bã,÷þ”’ºßüÍtŠÀbzø³u)}޽ï›éæ/¦³Í¶ÅzóSÏ'¾˜þl Ï1_ñë#[§Êk´>Cˆµ¿î©Â4{Ë1Ÿ!ØšrÝÎ•Õøˆ “3}úîÜ{^¨i¾GbL7ëhÎZŒÏŸ™Ã-2O¯Ö(+Õç\¾É’&óÀg.öLôÿu’æ2*nT +Dà7ÖÏ‘"ÖN±Ðµ9“ "v•ÚU„6×BäÒN)ôPèo®!?ê¨Ð¿–©ÃJ¹^t)óKmջߙ/—Én ïç)ê *º_ËØYdá¼D!@Ý»yýüâE¤Î©vf²±7ƒ©¯)’G‘«ÅØÐ!hçšçn©"hí\W¡ñ'ªÝFæíõu­ËV4(NZƆ +ý’Œ"Nf¬C7« ÌÓ%â)ûVOÇäŒÖD;×Ñlhç×X÷ÒQÇëåLÞN‘óv‹ú:Õ%S´!ê²¾ tS:“Ùh%“EÅÝFæíõu­Vk¢±Ó ªo{7²æx/õMtƒRÇ4O;Aæíõ‹¦ Uþ#ïLÎOš0q9>õ¢×h‚“õE®:—}ë®fh¿zÆå¾V¬W•S¹£;héj½]|æí¬kŒr™ü ƒÕgŸ‘v™–éÏMB=­ él6òžÜO¾Å\Ö‹‘ÖKJ)ÒVŠ´„SÀ;¤ ùsï§Úó}Ä”%ïµ”'.L†*§b)tRüSß3gd…ìΕfÚKÊñÑ¢\”ûbÑ×瀾ÿ狌ǎքՉ|޼سŠ?›Ñ¹Lp…kÆcÚFkYžÓ½Rïà|N\³tÚÝk®Z®¨ý»7 #¢[hud(lÁœ¹þóù Öh{VÇ/öà¯ùR¬X1žy¬ÿ°‘yRþýž4öïŒ7²w/÷²Š¤¡wFöTëCéÏ×7ˆOœ! cF¶›3Ò‹r ïüºgyæ)ƒ ûøÖš>KqWÉf1‰f€¡½å!2îUÛ.Ð{–EZ˜ÅÑêb=·ºY‰ôí½ã5z!6B«ŒêkËJIØèödtH³°^ú{q…º.­³wBy6]ZÒ w³›]¢Lpª«Er-ÄÒl¢àyÉÄj§g±Ú߈‘q™e<Ó‹ÅЇÄ(¡ ûÅ2,™¡Y)lWSTÚ¤TâŽc‹!’°&rfã”Árc¡ÁÆ6AH¹‰øDF]¾î¸jbÕ³<¬±V*3ê +Y,b«¤=@ÉbèbÖ²ˆ¾$IH +A¾ª6!‰ú‘‚¶nÂ;–’Lo³k_pkÉÐåÊ{•Ö#‹óút¬` +iUî·¶[×·+“®°,˜ ÷Ðð”‡X´a©ëŠ|ÏÝPÁWî꺹×þ~Gžîêb/ù4´š 8IØX.»·Hr´´†„ÎYÕÏàrYyTÛÔ3ô! ØR/ŠÓM}jcÀÝC¾¨¹’þ;%½ØÝ Û•æÜÚnÐRëP>[(¥5lfÁ?[¬•‹Ã«Aµb (FŸ‚€ùZ=²³ŸêãëLa•õ¸î†õçR)·ÛµŸæãë–B…Œc6t¨¯WëLaV¿ ΂~š[,÷x5u”ŃYgƒá9ÊKyÿzÑ@- Ñ 60'g¤3zm/¡Ch.¦>'G_=‘DWÞ‰ÄÑñ àšØÚjÔ)Õ?<„ˆÉ¼ë–äY. OÆ^?0çd4W4fhlŒ8à ZãA¡¾~/Uô"è³äs¶ óv‹úº&{ØÉ ÷ád:”ÖûuM†'ÓJádÌNy»Eåd2æ¿­ÐãΫ­£³UèÐxò B‹øÇJ ­›½¢éß70Gœ#t :S]ƒ­Çß…YC(¡ùïx.ÎË¿8174gèµÖEE§)gÑ1ñDô:ÖûJmâ^ªèEþbŠ˜š;Aæíõv1þè[Šü×;žYÝ–I­º1#Ôõ*ÐQìçë[…öá1LÆŒl7g$¯fæçyÝlz673Rä½ÝÁù'‚¯V“^beF¶›3Ò +®½\Ä ›¹aâyHwm’hÏ‹:@|:†ÃUG\™5ß1>–Ï¿ýö º£üóߟ~úËo¿üý×u„Ÿþë¯àḥÀÍ¢qÓÖ5jE;&î÷šjN?hëJÑŸúƒz¿tV*šøã¦LJh²·úp«8é\˜¸ßÛÃ%ÌëíN¤šm'¤¹ +x(êûN:â6¦¡_böŒná¾§?ukô#—£N׳¹/ßȾn/ÝU‹›ÿ¢Bœ"çí•$Ä0žèÉÅÏÝ CèÑÒ™ÌFœÌÔêR»ÌÛ-*%ƒ‹Ó"7MÞr\êÕ môahµéòŽëBCÿòíòº…Þ‘Cµáíl÷:»‘©ñ^êU»`Žü•j·‘÷v‰zyKþDY½+øC¥1ÖÌ5½SÞ€8 IYZÖ醪ÿQ"c<û@£¿úýŒïXžÐÃ×bèáմSõÙÂ(ZG+¯%×Ç3Né ¤H6²RÚK}Éu´‹å,¹œ·[Ô×™Œ+¹aÉgÉÚ¥dK]Éõ,98»ÌÛ-ê1Qº“šx£ú>¾V7µ¡Cx€czGœiœ‹£Hó¾m6ð~.ñhs)ÍcR’mºI‰‘óv‹zŽm^*÷ŒfâfcÛ–@ŸÌ–J›ÑÌN‘óv‹úúbÌòš°§«b7ãh­»©Ä4ÁM/j·‘÷v‰úÕ˜õÇgõ¦,sý¡FÅJ1K‘Ìð t*Løº~QÎtË#à,K 7t(±ôÙ´‘IB¤úÓû¸Ä¢cñxK# Ëñ†%>Ÿ‚H#b¶Ù¶…þô>.±Î›aµŽ÷oHWeª ð +´mý&Ï®jäg¬×®jC×h[#³‘煮"çíõìªFr-Þ‰/“äÈnˆîuŠº€*8<¶­µ¯ïL€àŸ$GØ{cÕkpø †DH¨ OBkÂY·Ë:«ª“] ÓnSo¥±úFm%$¤ˆp,Ýð„ÐÙf³D³eñ“ɈJT¬Š6w:ý¼•‡ÿù&Ï’ÐŽ‚—|—ùKA(¨=Õ^ʳÜ|à ÎSMÀKdÛ僩jÁDcü­È”,3oË(@øW±‚ Õû¿OËÃ^1Ò˜us¸‘wö­ý'jáÊ$Z—<-ÔæÉn“¾bw™üŽ–SW*•2ÞZÇVÚm'}Àé«SáæÈ`¡ "j‡*ªRé®q„}ÝB><\Íö@¿Ù°ú馨2SqÓ‡á›áÄ>ë0Ã+èù©îød©ø§“Sƒ‡«™ÄœŸ(Ú¥%XØÞ9m1È¢i»ív3´IÊùæû6VM¿¿ÔÖþãÞ˜ ðaía}ÜJ`¢AýÃ'þ¢Z£,MækóÊ4Þž7;TYâ°{¬ Bɨr)ÉaµÉ±Óý¼¯5ìæ•wY¡ {+KºŽZqì†bnvF¬ B…SFÒÃj“c«ç‘_·b€Ê¡YP>&=³MPj+uâ-Â]:êÞ¤»N›=ÎüÚ5ו‚{t¿K‡¤¢t;JV¶Þë‚|YQniàÜÃ*ÈÞéqÞºôVS¯xÑ•ÚT7„ngyAXX…G_\Jut½fu e¡ ËÂ4îÆžx!p…œÚ*þü´­ŠØÏŽC>ÑXA büÇ ¾ŠôIßò¥ƒµ×T â% )`®IZ@(µüúÄTÇEÒ$”† +P1P"K»l˜Ü²6M%à¨(U€èÏ9Xm˜ >9IßwŸ|!@=ï»7”i0ؼ˜¢¹¬:G°TÅv„ë´-(ŠÈRÍë:ƒ Zí"«Ï8¹ç†«ÙöbŒ‹EéÒ€®ª#Ç}ríÃ,Kã§þ±1 ч'Tlº 6§6F«Z`hÒ†GйnƒŽÝ*1äzŽ­¹†Úu¦´§¸ÊŸáMgʋɤ`QNË]`‰×Ol±5XÃ<ÑÉl(tVB6†èb :ÚÖBÌucõ­ˆ&gHøÅ´Z%“6ób­63ëÅ…JKÕÌ +6^,µ1y•n‘ûdžÖ9FÍöÙeõ´ÒòkÉQ‹žš%zZµ,ÕDù~†­Pú‡ .bPy@AÐÉ݈´)n9ZÙT JòÇ#D@‡Œ 2—ütUw-!Èöt½m i–’Ùö$µ¬Y6´‰½«¨õ2,à„H3ˆ0 K¤F1K<¬ÉJƒ ßgÐÖÄàDm¹¼¹šàÞÙö²ŽÐ4§êW©°ç´¾¹5¯c„-_\0D”;"Í8{¤¾œ;ñâQº;·· ±Ü 5'–K’î–CKXbëþ6£è†ø¯ydÌË5×.…ÑÛŸl¦Ú/!wÇ9+„a —"Ä{ÍK–¢£_Bˆpd­—"œ-KVœ®—"ì}ÖKªÐŽ 0<М—*ÖѯD6šg”ÆR=Çj ~¶÷r© + Êߤíï4ˆ:npE–(”À†®Ë̾zxY#˳;ë¹è™»€è9û켎Fmœë~tiW”×Ä'gæ( úÝf]M@0Þö½ñ&5Pð½5¶l‹;;I°^P ¡TöjP;»×ÒöÙhÀn™N "EÈP]K¸ÁçÉ|»®:šm‰*µ¯Ž¬»QÕ¢5 [(±%{šSkɱZ+›:!Þ(®®B€°àaãê:k2K”âp–*æ¢ÂʰcÐ0X{ U?¦X1#„®ÃPkB|xƒ&DݰÑ'tœ,Pdt´3ìãNÏ:Ö%•YêO†l[ +ˆþj¨¸ö«©=P£÷ 6ÿ>BíîHÄ[+ ¢Â¸ÚDú°ÌÕ?¦nÙ<ªq³.XŠÕ þ +`uW4H—€:Õýˆ'ËZ’?wAáÛ°[q„Ï6¼£=mÉ-No˜ß<Z×°l5u»R•<ãô9ä–kФôÎåNÎb|Mƒèœ ÿzeŒyyy‰cžVFá‹å…D!ß•­ðD|mÈ);¹R\wÜ$nåsÍ_¯Ì~j¤ÊÈœð0Wú<»ˆ/™Ì„„Wå01©ô8Õ¢áA¸éݘR¨°'kYãÜ÷‰Aæj’޶²je•ùn|ãïAÉUðüÙO[a¯Šo¹Ïû®›ÿ·mãRnijÏýÖ Ô*0WŒk8‰«Po;Ô#f¸ +É­}/ä|‡³ísƒe««B£2#ì×Å/«¯ˆƒÙMæ„Êß>S<Ä—àPלqÝ˪‡ +aâ—Ýë®0Íl†·ú\¼}Å +ŒÃ”‚ÝŒ‘ñ\¿ÃHÑŒºYcš³Ðÿa‹å7ŒI‘¦ëçÛà š#BÙ–ýÒÏ-ܺ³5ÓE7ëûáÁK­®Xúañ²ƒê¹X^.›´b2Ì{}Ù]Þ-‘í‘u?,OO«ˆ)gFŸƒÕ•ñìŠfÄa$ ’ÉnѳÇSiH¶ƒ=u’¼³È/ÁÕ¬¸âè,ëÏÍܱõR„q÷'ñßñk3G !ðãç]mtEyC¼@mÝlgÊUÚÛùäé…XܸÅa·Žô«-*¯fì»Ùz +ø3¡©¤ÕT2›ÊQ˰1$seœNH(´ƒm‚šé±×mòõ1Ð]$AçVAŽç}ù“çX 7öñ}‚èp1>y DÑš Ê) ²l†:ŠšÝP]lá!2F¸m7Š™žZ Éb`˜¶™¦dKksÕdL hÀ2Åàb³öJ–Ø×‚©ð T »’0° m³‘¸_ê©ôÍ0‘Õ"ÍÌ«¤ÜÓ8Ø+½çW[F¨‚Àdʱ’b “E=.’mmk:÷…ñý@EÇ7P€‚a.ûû;Wêl}{XPõÈb†3F×1󡨶×ÓdÍÂ_‡c#˜7wCw ‚ ·YˆB°„É7XFÝ“ÙöRˆ^X´æp0jsâR‘²oœ¤Ø2J\.õ1y9é{!Ê®-´ò´ô?./q·”8©‘U¯êÄ£ *É0Ê–`Xd÷Å=Xç@BVòfUÕöÃËíýåt“¬²Šdô{Äï蜟içûÁúœ`®4?Çßl—[z¬+Dg´?Qð2ÿ‰*ntÎ[zÅ_¡€Þ¦Ùb¡í_ò„åÕúoC}‹.ßðªòo„ŽÎÙZ‰–a˜!ÂÜ’è ó½t‰æÐëhú=IÖ5ÿnmO8" r$.ò¼5P@‰¶ç8 ¦ËMr¨‰6Ó(‡ "ì +9µ@ +·n"'W¡~#4€ö>IbžãM¥=Er•qÑ£i‚av$9gä… “,wBšžZ„Ñë­gé<ƒšsóyfoþØV VŒrúFtrÑZoçV[¼«Æ ¢«È¡M:^ÌV4@Uë¶Ï6ûŸþú ­Wýù €)ÄÑ’hÛ;…@§7ÂÄGpמM†oýfoí šì›ÛfqrÏû:°-{˜ètÓµ¾Ù\ÐÛ=M¦yãÉY§ Ó +…föԨ習õÅØZ»a’?lå ÑüA‰Ù–ÌX È•=ØfkMv‡G;bڙʕ› ©æѳ +1lÉÞù)ñåŸ2›QhɼÿÉÿø0h©3…-uÆF‘Ýcu×ûìéܧL>yM¶qr]í¨ï½—ýË`:îýå*0ÈñùÉ6 åpJš jd!µ)„¿`5´€Õþ€4I×ÍêG8÷*¯ãE[Ä+tl MueéÈZ3ÎFHG–;!:íSð²Žu;„…µp]í‡Ü"g¨¸u6„Û|äXÖ)%3NYëÌ23Úv{PX­ŒDqݱ£Ø-]‰f¾àÕ—¨Cÿ^çšïíºÄÁÉù¡5äÿ!&¯ßÂòEBXa\[çÂâðKXÈ ,¿t… ºR ]!ü£+„Еv«ë + L=õR¡+„°¢>]!„®”E¡+„Еz‚ÐÂ)z¡+¬ÀЕ\×/ËߺB¨9(µ®BW:r]Wí®Ún¹€¬@V>‰DÛ×êtwY!´»:³]V¿ee³ð}Ë +áY!ü© . ¬Z_]Çi CQ€0M~ÎpIQæË·¤(ÿ«§ïbþ5B¾S0%EÙC|K + $¥]’I9íoq†î·ëEJ + $åó„.)€”Ÿý7þHŠrþú–À¿’8?™’I)ÓSRª¶ßBRÀ )µeJ +à·¤AR:ÅBRÇ’oIü#)`”Ú24…ìS£STjÚoQ!¹¶³…1¸ÞþÀ‹z0'_@ø{%ÔÄÛ€•]€ÐÞXyÏ®=7r%ºS«B¾J@DM1,¶_ŠÒÎßÇ«Ã1"½X‰°Ð‚˜Ëb%z×Úó@¢c‰CÜ(<„Ù bGB6v %JÍÏ¡8vï÷Øf⯺äŸé½r^,öD µãîœËÍi¸9Kú¨á—ÑHG E +x z_ྩ»ÂùnÅÛ<Ëâ2PqÙ¸Ëo;@o wyÐg Å—)1Xæn<œÌ=@tCoÍÚózg@¸OŸ~gÞhj…  „R¥m°h„ç0Q¾Zy¼5 D õJ“áq säH +èÍÓçž>=·ùÊa5É Îsׯ9æhãwÌ]TõdCGT_ot‘øRC!Œ_Ñð§˜8¼7dÍgϨàœrÏžÔ7[}K4U!eg[ßrˆxuAkq>0;…:¼ç—â~ŽÅ¬%?VÔΉˆŒ/È §âl"Ý¢Ë@}!”Ó_ó-‚±^s¯Ž¬Ù„x©Ør¬×p3îÉFä!Ä¿^/Ñä ˜Åp½e§õJ¨V°ñÚrDV@t~}¶,¹ µWQ‡¹åü‡o8Løžé"@~Jˆ!F·´=#œpsÆsh&¹c†2;ðð†Œ>•"]¤§!Ô•~8âæ*+Â9ó!åFÐÊñhÑl]4 nôk74ºðHFÁdgxcG¨m™~ Öþ9¾–rÐtƒlŽÏÊ9Âë¸ltT€è¨ÙùMV.©ÓQZžûÒØÍÏmßZ %ŒûØ«V"uwœ¾§‡Ñ»(¡ÿÖ;Þ“L£'"‹N”ÌlIØè•‰hJ.[Þ‰á•w>ù!ÆÒrõ‘… ÇÇ[Ꭰ5ÃÛèÈsrjºct«ßŒ •3¾ÕuòX¨d8Lr¹ÃðQz,×AÐÂÑRIÇ2¥#‚!ÿ#±£G°ñ¨`Ð’•&ƒŠìÌöÎo‡ñßd3Zf24$þ”˜*V­Cöù~P¯—æÉg!÷yÝ!ºý[°j¿ñ"ÍåÛa 4_zMØÂ™ô¼ŸÌ.†·QWC?¥DlÉË¡¸’÷V1Š"@Êè|;ÍêçWàålœQÇšàÁÖÑZ¶1*:RiOáíýØ…¢_9$Ž728Ê¿EôÞz5åxK6uÖ·›M³¶Ö= +0ÙYVÁ7¡$ÎlXÚ‡7ßHÅÝo!ãÕƒ/*‡1@äR +-•H ?uìYïÿ„“N­ +: Š©,þÎÖÒŒXw6ûD}žDêšÏ*gÉ{BF[BiχãúëZˆ d%çf=¤°äw{£¬•»ÑÖöJ|b.²ÍQlƒEvîeÓ¶l(Þ| +™Ñ`oÇF+š¸/a=÷\ª›™ë¡n£d¨¦ý¶Qc5Ù(ÑéÐÒGÉFko%‚]>JVGïo+ØÂËGÉLÀ^>J†ï¹|”¬Ëº|”¬¦L»Š2†ªšÉ–xÌ|” Ñ:ŒÅ|” ²Æb> +†: +ëw%Cʽ|”¬è¼|lΞϙ’aìå£d¿ËGÁP¬3ÍP}-Š‹s¸gê7t9íBÖúÔ´VóQö{Ü>ÚiéýöQ6 +[neü—8ñ㣖ß3]˜¬1~¯Ðøã£ ÐÚoe–°L·Ñf%Ý/Ã;âÐÜFÁ2Õeømy¶î¢–}# ÓÌ/ÇEÁìðÞ6Ê4ŒXÿ¶Q ’ql©w¹mlê¼m ÓÞ6 +†ýœ—2Zcðe£d±ín£ }Ý.J4S'=`…~ Õ ùS¨çv()uª«øÄRsø4Aå%[h+_\G>ˆ\ꯄæ¶ +ÛÛ®Ýcnxñí¯B·4X;GoÆ B„þ§SZݾqòO@¸¨Õ*5™¢³4ÖfEn$"{åÒm'áj}¤mX¹Bc²“•âÛ¿ÓŽ­ñbG=›4 Þ“¢;ÜÜ-ÂQâÁÊÌA„±#Ù:—6{ÉN9-6²ºVÂÙmx;?§b‡ö[^Pp#›ÆDj9†"RÙØÜŽêŠö ø~'!CíK\% u1ˆìoy1¨£î·¾œRä%0Æpå­0„°à¥o‰1;Ø/1æ’õˆŒAx‰¼UÆ ´¤¾d† w¦¶·Î„’í·ÐÄ^¶·ÒD°ªo©!„-Ÿ>Zcp¨Ëc¨ÁÉ{ü’BÅÑ­·Þ‡½16-¯>‚C8«…¶Gq Ž9æKrŒáÞÈKtȪ¨Þ³pWkܪH¸Ug1¹êºUs~‘ÀÙŽ ¦ìl\0‘qÉXŸçÁ”@‹„oÙÛ¡ú);…™²(â—ü‘ÀU]µRv6ò +êñ–@éuËΦ ¹Î?²¨þÝê€a߯­:›õ¯ãRÍë7ÿQÍ@~$&T '%·ì9×9ePŠî[vû·ìJé·D$|‹ÉFgÀ¿¿a-çï(ÿõ‚¼Ï‡ *Ë©ééŸH8†ï¹èòv‹;d'†t[òɺÜpܪ Kµ++ìW‚ð\²ÑÎÙ‚¡œ¶UF_'Ž\b÷¤ž w86Jõùš £›oº1¦Z0t íYP‡‚k°1ÍÖ+šè È 3#Gãmnüÿ­Ü ÂVz>9§1\¶– ÚÑ ¦$‡ÃVŽþªK@¨¤ÍC)Ž]‡‘Û膌ZkùÜåólTÉ2ˆî ´¡’ÆÐÄ®m¤½¡Ú¯I­(ð>mteö€¨¶fP$.Ÿ{×ò¸m=h[Ü&ÑŸù“D@T³“à~wŒwÇr ã~`fwW‰lî° àøŠê3X\­'»@ƒÛï »2Ÿ»ª$cù"›[+Ù\g'ºz‡YiŽuøçÍö§qŸ7{Òõ”‹7ÛérŸ7ÛŸŸÎ›q)ô4ýOÍ[ÂÓeí¹ë‡dALö=o¢–d¤°;¡Ñ^à ¤¸$h’m&ÂñÜ—Ùzñ±í9¨)c:„ñÅÔhcºAÝ3ë AGÊàb:!†ÛD:%W¾Ö>Ãuåémº“ö +¾Œ *£÷Ë”u<¥9dŒ7üëãûG¥¿ Nþû¬Ÿã¿?>?~ûý{ùüóßÄb¦u|VøùÏù÷dWy¿ ~Ç£Ðé~=‚H±ÅÞÿQ#E×ÎÎØúÏ +㛕¯tŽ÷ &­„«÷6ñ繊ÙT­3ç +(žÎ=~í­`Ws"$£½Ÿ‰LPyý&Oá‚O&c'XÍ`ùlÁ‹ ¶¶œ­­ÜںηnFœí/Àêûñô¿.=?‚5¨ ð—¬gƒBÖ°Õd°¿žŒá¬-û ²ÎìÖ·gw2gâY—Lš½›Ú©@øÀ‡rèbn'S6$Îp á¹î¨W¦öEÚõ¬ŽÙl›ÚÉ„™ŒK>Œª±ê† 6 +~*Ÿ}Pg`'SÏedÚím–w76ã:š‚Ãð©Ó¾¿@ Æaøƒ h,†C³:Éò¬¦ ûE¤[ÎÒ6¼!ñÄc»´ÃbGfcN'z6/þÜ$³*7扼SéúÏŒ9Ìgt¢Íˆnl›‚€¡WŸU !‡)­}„ŒzØf@'›z^·p†þõžÎ‰´«CíŒ\›ÙÜö·dÕ²¬ä-ä ó‹–s2„y¹<—w}™^rèfæA°i/7"^õô„dS½hV¾ ßleɞ̣ٻà…JÉÃ8Ùô0NfoCm1A…ÂÚû`1z¢‹34·ÆcpT{ݨnÍÆÄɆq²ÅN¶†Äs‹Úò¾çÉ$uCôüüfH~&t ½VÿÂf?Òøƒ2î–0‹‹$B”ºþètLelÀÁàr’ vI$b-/m•h[@RÙe±(b‚B›'ƒûœ‘¸1(^²]ÏPXæÄPô¨­ë +{Ci“‰7^d£à¦õ²«V7| ¬V¿ZÌÆË36þ§»Lrkëm <÷*¼‚õÍ +dú/Áƒ<Ê ÛOU‘Ô‘ïuîù¬†’H™•õÈPj=¤eL2ø†öE²|^ÐP•Ü–¯‡®µinaËjh”mì6'ª,9‰f-¾ +|äX²µâ†q%¶CM%®íJ•%МæÖÕ”ÌâÊ,n ‰z«Y~HVÓ°¹uºuq'µYþ%’R‰™¬µ†sõw¶`VÌ]Î&jSg);, µ+RŸ3¤; +õ˜‹;S+»?3xŶÕ^–gðaeýúñzTj¸|°1“Òe[,˜ñóWÖN´‘IUg;ª*ÖÍçBUɤª4ÄU• ×egrU%ëær¡ªDRU>¾«*™T•ÌU•lÛ …ªu©ª<ÓT•LªJæªJ&U•§›ª’Ñv„‰*Р¨2n\T‰$ªd.ªdÞ4D•H¢ªÐ\a’¹¨’AT=ªÝ´)Q%qQ[Ue’PU2sU%Û©Š ÙU"U"‰ªGþâîÛ™ hÏèê;£¨ +™¨ITÅLTÁ¶DU†˜¨’ æÁD•L¢Jf¢Ú Ŭٮ®ªdƒùƒçªJ&UÕgG™ÞBâªJ$UÕk™ª’AUíi\UÁŠT•oªJU5·1U%’ª¹ª’±*[g±ÝÍõCW;Ë=æ62×U2骟é*tÕRë*tÕbÚt•HºJäºJ]Õ¹BWŦYºJ&]%s]Ë#éC +\õ0$žAÆŒëÍFW›x°oR ™Œ¯q fþ©Ç€ K ™2–«5jÀÌ=n +Mˆ²I,—˜ñɰâÍÚ@²Î2ÉR+çª +Jcyóõ BK&÷UãZòn6‰ †û 3oÀQ}9ô +Ãöp“s– +Q¤aûìÜS7 +-ïn^BTè3æÇH¹c%µá¡²JÕIód0»¼ÙÊô€ZZ¾žo&TK†1E©S‰Úb°¨oë¹Ä3#áódHâaè¨>­F)ÄXŸqߙ桊' +mµ=SŒZih&êpÖ‚Øbí 9NkĸފCz‰qH¤‡$»sÄaÛ:íìµ…'å2lܲâÀâÐì[P'éÔ`pÑãÀÊß`ÈÐ%½²DÅÜðjÄœæîŽ|lTc«GŒ t±íFK‘ý<æÀN¤‹¬ ÑÞWÂ¥Èæ8{"§‚0·Ó¦&®6zÄÊÉ%¶Ò +†<:É6 +ј +XÅPÂĦyOÍݰ;æBÝÔwQÑFÄ J~zvŠpƒ>ªsÄ›!ÈdAð…íZ.—¹%æœbׂ”²™â!PÅ6›»KŠðÅ~2é#BvBÑ^ÜZS#ÏÝ+B0Û(mf„Û¤”“Í',[³¦µ,ÖØÆÓØeXÄ´ÑciµµÝš+6[»µù…!:kÃÅÃÙ¦±5Â`¼Ë’ê3‘ÜØSòì;Œ¥ì0êðšfŽåS{š^%ÌJ'&SŽ6–XkèŽ×ò +}I6ë’] +Yc‘¤73±#Ã=FF áö!ßL­‡2³D7V6–ætûP-fÙ’Ü•É"e3lj175{´ÄÿôbÒCcï5±ÕÑ©CeY™±<¥[ ívêP†•´.ÆáÆm\é#Æz7¢v§ƒ2Þ^¬÷ˆE÷ðO!¾ÿx“· ×÷\,öñl™¢ÓcjLÝ)<´­CãІeïyP5àrÁ¤S3†·oš;ð€Þ¦!æXÕ€Ók&\7¢vG 9è^d;'oÜðPKImµMZC›!¯=íb¦z’¡Y‹fÊ‚7H(ýúðõ0Š ¬§˜‹ûØ6n[ÝÄÖJ „eÃ⌠+ÒØ(ÑWR캦jÛA/¨ZŽ%\3†Ö Å/YæÁ`™áG†®ÎÇ¡bl&Vˆw†sˆáU}nÇÑ5+þÁR­ÃÇÙ1®¥3{r½ÀäÐ~®NAЖÊË/ª[V‘QÌ” ʽ1Œ€r²H„PìbÍRÙÖ[‚AßZ°1ÄJÖá„Vרt¸Ã6Ål¥ØÝP›å·®r#+$>ª›‚ke›oD6g“‘ÊÄPâé-É:+2Da_[{ä9ÎÑJÊb¨.”*ÈPî IÃ…Êb6"Ck B$ó +S¿¡Ú¶vŲq¿¦aå±_lëÆÆôKɽ¡ð%Z;ûaÙ?i9÷ôC`5ü›ÌªX¢QìN#ªŸ µî²a}ÈoKArEÊKeæÚÓ29²«LA‚Q©†ÞžF1íÎúì¶ïnv)`%Ǹ®"§ äú“ef^·X‘-d¥cçilé§XšÁm\ X¦ˆél99CQ6lª“î 2eãj-n *Ôf,›îƒ]í^êVEDÅš–‚ÈÐãƒ[ú¶èÃ’L®5-‡R´Ûr 5«3è¯Æáº[ŒÃ šŸõ&#Xìú +ÊR7¹'[.¯½}j[[^‹²·TGxc¥`£%­†¼\bjg×@Ö—¿EƒhjBcëÆíZÃ/šk¡Ük‹p'åùØV$½øÓö‡Ö?»[*;#w;éí_}d6žøúïgþü7þþñùñ·¿ÿ•>ÿùŸ‚ÿe9pâµã)¾/Vðd[N¨e°ÿ.<ûocƒÙØ_×­x±Šìû2¶2?1é¯o¥ |Ô†âà|Ç1æ¶c|°NîX …1³Þòûbåÿœþ#WÈ£·ãF™…,{®½à2Y•fÅPÜÁ¨²ém¶Üqé¬1 ·4§-¨7²1s²¢:›|¿LóMߌù~ŸjCΓðšÉ_3ë5+ÊÝQÎ ½7W(-é÷¼èÍXN|ÞS¾°ZC´'$œ3æg¡_¶ü¢\÷ÖÝ”Šh̶mЛ%¤°SÖ’)P÷…jîó€g¡÷-Í”öDÒµ“ l=x!¼ ´ášh€†T$áñŒðÏg·½ÞL@ùç&4–´f‚Á ±sz1ÀL`š=#üó^ãe/3¡³ô$îêñfÜ‚A¿Ãd‡bëð Š©åù7xñ7üîýÅß.f¾tM Kìån»À³Ðû–_/¦\þ†ß¼Šu»ÉÅÌ—~˜bþ–vãö· < ½o)SJcHÿ¸’2Ÿ“\ÌŽóâ>D¹g}<àYåe³\7Q†àÇM\ÌNùX`×€åÉð€g•—Íì9¦gëÉ~ÌÅd:x¡ÁÊùóšhVdt4è+Îÿ|ÖxÛëÍ„ZòBýÀ ¡ûé/&|i-V’×}>k¼íe&¨ÍAƒœþ­ƒÔU­Ï1ø oDu¾çƒ[#Óå‘ò="нÎó¡­á°-äþì”È6å€[¥áj(_X¤_SYp–ŽÊþwнÚË®/Æ4Ñ1=±‘9ðªëÍCfÌDy{ȳÖËžh{é=¨ú¡áœC áÀ !ä2k31ã³+C4\£zÖzÙñ‡(/ÚcFQÝrà”æ3|i­Ö =äuP¬õ²£9(ªUG£#Õ†!‰=.bòÀ !ÛIŸ©¾^uÒ3¯qÕÞw}3¦Å­°G(ŒÎ/„q¾³æcÌêãåà^éeG3¤3£ñ'×ìi™2iË€jºØ˜e__’Á‰ƒ—gÀÏ"?wúóeŽ%I«Caÿ­¢V†ˆõ¤ÓFöþÝw%¡(ÿo«*¾Ô!Eï Âî=Qœ”_÷._R60Çȶ«€5²zRï‰ 's?Š_ÜW“{`rÿ+TemžÙD/V F4œv nv uK$D÷臭»T‹‚¯ƒ‚G£‰=Wsøg)Sõ=U¼@ —žXl”ÄŠéRF¢©Íåg$Õ½` ¾ï‘0 åÒ…DC›C)SÈ .@÷sÕGæ n*xLŸŸ (àÃÛN·Ï$æ§Û8|!äâ!H=2²¤n!‚}ß=Jð§Û8|}xð}ç ¹ôtIæÌ»±À¸e‹ª³­ÃeD_­½%Ë8PC¿¹ÜC Í]ÊÜò/cU`Ü»­¡ð‘äQ\`~©‰ßœIvBžß8áÎÏæè¢0 ‚äîÜÒ›ª¢ÛKÒÏD¹‰ÜÚáõæ®LéTœ „¶Á’`x¤‹R ÜÒáQɳL¡ËuXñOjýA­¡}}+‡ò+Tu­JêEíÎè—Ý6í•¿ ª(îö"7‘[;¼®» å·y0²µt#A¾Û‹Ôjéð(ЫN‹N³.×ÀØM/íàjŸ0.ð;ó;œÚ²×~èÖÚH7µíæëÍðöw¨êz†Êko[´µQ%|–¸~eSWc/?ÍÆ+º¿ƒeN*NS¥ÎÁŠ>‘}©„ŸåÛ ,>>Ñ­ŽTääN¼—“9©<.™[¦¸ÞÝ”mþ³|»Å‡Þ.iÕ|ÁTm¥ä+s"+r-]3¥“´£*¡ßnc÷´û·aLQeNdiÑÿœ$)ñìéïòõW/«oô÷ϰ×GVªÌIÂ,škJâú]J‰[Úý­Q Î”a¬WY$¹­Q(ñ]pýv+«¯z¾ žßÊœèò¦’ï€gyâfOÁ¹¯Ý³\Y$².SÒ…{®G%jfñ${ßÖ»NEa½ëN4±[¼ëôﺻ¶ßuCžñ}»ëN4£[¼ëôﺻvÞõ¶ž³¯ÍS´oç<•b¦·íœ¸™¶ŸóD1ÇûvΑhþ¶õœ}Qd=çÍ“$Y¹ð"P»pÑÉ³Æ à0æ¤â°¸q4=%Hµç…åÄ'>¥Œ¸¥ÝßEE½hØD“Ö(”P§éÝ¥”¸¥ÝG1ªÖ€Ðuçñaëº#“Ž:¨j×MmL§µ›Œ7tºÜCñ®;L[×™4ÕK(Òuc켋,ãÀ .9”g\eÝìgâÒÇg²Ú©¦»ñTö軀Ù\E÷až—7ÿ‰Á&+4÷²O»Êw 7²ºb÷U¶ Öð„FÖ¯€PÚo˜qE-Vy¹éUnçð·…A½™†B.m¢Âq‡g¯hK]Â>ÝÆæKB¨<Þ?¨^•ÀÓK­³€¯¬‹ÍoTsÈÝ$üʬ×!ÑçW¥Ð ‡ÝH1~Á\Uч¡±ŽR¸¥Ããg$% íp™ è†Âˆ Ù_ýUŠA´´yä@&@ÊüŸöâ÷&‡Œ!¢#µ‡Ã€ n?A¿BÃX€Ñßç—8þÓpÿùžþô\muߨ;ªK¯þ+¸öáENáåk‡=)WI3Ã[š½Á€0eÊ_S@'ð\ß+“1`vN[Ø´êad¾UTƆ€Û’>7ȘvNrJÚÁ^ë¬82çMôyywBSK¿ùšµÊ…™×)SÝ_Îʺ¿bmm^_WwøgV¤QßÎç@"éÁ›Ûúpø°\õÕ²`êÙ._¤#d·£ð{kÐQ–æÕôäÛÐ{Q‰ŸúŒÎ>k ivCãB6:ʧcàoŠ!_4pΟù#¨nØûî°Ï³ã½9[mrç.(µ÷?‹ª ÄpÃíðËäÖ6¯Ì77õÅAñá×Ùà‚ò{³ƒ©&ŸŽ_:Á [ +ŸK£¿@åæÙà‚`: ŸJA*Q& ·>%<Ø ^ª½¡âêÍË/0 ·¥Óq«¢‚Çþ´ +AÊP´µx\Â@EKÅÂè%ÏRÈpAu¤5 V„e Ã¥ ¹­Åãšœ¸·ùI3ÍDƒ¡ªt¨„ 3“3ÈŠÖ6¯G0éîÌÝn F`@èO°Ìº#H‚㑳P9CÑÚæ•ƒ)H[it +ÚFÜiö ºqë¹ApUE¶—¤9Œr™µÓëL­Ì-͡€†ãæ õR‹³tzÜŽ(ÞŸšó†üf˜j¼A–.RÈ­m^·`â-²äðÌHïGPõ{dÉár¹µÍëVæcuµšî51 ¯œ¦êÖjºËäÖ6¯G0^iuB} È«¨©zµÕmr¹µÍ«$o£ç2^£‚±&ÍÌÕÄ7ä×Côâª4ÛÀg2ä¦Vk v{à0qKrÞß Á¯æž6ï± Mä¦VÿÔËóŸ·ÿæ›ó/´«†ü}+½O/=G“ˆŽ“xíj§êeÐÑBE£¢)N@7–oòj2 +ÜÎéï£è8IOåC7Ö #¸èc £Ë8 Trô¹ØØ|ÉD›æ„w¢fžÏž°CºJSôÀÏwÂ@°sø;°€Ï\×0¤ëŒaÌºÇ Ce;‡?IÒ>g®%/Æu§-/ÙJU1ìFãÈ$ä3Ø8|!ØNJWè+0¤«Œ!ÌJ­G ú\ll¾ôª"âe Šç¤†_<'e¬ÖŸç3f +#ÑÓêÝW_æc"WdkSïºôì·R²ßJ7=‰wTÐTg’áõ-õçË7>¿ý Jßÿý![i\wÆ36ÒÈd+§+CdXz®ÚÒ¸TÕV”à.ÑkÅŒ¹¹Ýëg %A“"ITÃéM6ý7–@P íÂFr .fÌ­­.9ŒŒ‚0h‡::+x¸‹•ûi…QGYí’©*ú°½”çÃìr™µÓëLy<˜Ò¹_R¶4Á’`*²`‘b`–Nvª¡ÑÂn¶&add’âqиžþcZüEîûu?<[ÌßíÛMlŽïxµ^õ>®~s?¡pA¥ü­R¦÷§?´íó÷ðí&Gâ½pkørÔÜ-“ôã\å „Î~æÕT@1dôº|ô*cÀíþŽ0èÅ×0RŸa ë{¶0|ØVyg*3Û9üų@£ßZ“ÁÂŽÝ`@H#.8¦¨ æC2ä¶6[ùÕ0ôü „kUb }M ýݾ£‰Å‘x¯Wz*ß‘¬ 9Q›÷çˇ]'ä¯P•µSW™;·àïƒvqa_gèQÏ2jºÎØf&YLe8ÊG3¦]oqòUÒéâ·ID- ±&‚(èèþº˜€ GeµÓú-ëÄå¢þÓ0¼èë2ݪ¦Âã“åM™Š>üfÁ;UõŽÿe +S¸ íÄTÏÛµ†~‘F!Cn*úÓ³šoÜ„ÂoçˆñÒ5š¢ïCÒÑ@e ¸ÃßFܬ“/! ]hPõ A¶å¾JMà–6ÚÏ÷ºl’gND¶Gs¡SËv‚.6¿¸€7²zŠÞÃÀUânÊ#h®ÎôlhHhkFD¤¦V1+é©=î„€òu‡;!_Ëø?Ýå’%M«BÑ~"'pc©ás<ÑÍþÝ{@4ò[Õ)w + TX˜“]iW¿ßgbA‡¨1ôê4Ú΃Màx¥# ýò5õ-rEkujh; É¿æ(0?/½W÷û4Ø­eº0ÖVHâÛ z‡–ÏD· –ô¾!Y¢XéXÚ¯ +ÌÉ®´«ßïs ‘’µ©º,ÝÞ&0'»©÷N‰SEÙ€W ê}H¶t(_­æÜ?ËnŸ¿Þ$çÝ$CêêÐó1”«‰¡KÎÜ$\ küÝÌüm’!uµéù(×C®û>,èP¼"–h¾ÖxÛdH]z{ 1H ¶èB2oû°ÆÛ>¸I 9W›ÇP¯¸¹LB}~ƒTVÀï_Ç Ÿ…ão¸Ìgõá\ IÄ}÷‹—áíâ'\æâw®mMå¯B‡¦»=Ó±ÿn6ɺ:ôž-†òÊ_…5¼@{ ãõÝü¤…œ«Mbè)ßսƜfcJW]sÐ]f(póGìtüü ”9 ™«Co!f¾owÐZ·T} kŒò•Bàw\')2W‡Þž¿ØÁ‰R·<‹ã +H©¾¥Ôo¸ÌgžA+ð {Ao­®^U~7fU啉Õce¸—rÇ2Ö ;‡Ò³écLJê߃ÕóäÆ'‹o7 ÇPkê,GÔÓ¡ÇQ ¾âAéW•Æ3wœÊŒ`ñ…ÌjŽùû®Ö «—Ò©Ÿ¤ãk]ô'3‚óÛvýÊ Hˆ¢/3dì|J¬7µÅcý8 wÁ¡²Ø•ÈêÔJ׊2ØþÈHí_*§¶®á—²­]‰¬ÌiËÚ‘£Ý~—‘³?TX;^¹UÊÈy‡ý§:hdÏáš?ÏPEgÊ ÑTº0Ÿê %nŒã‘?΂ÇÏ_-T¬ŸeÀ¶§÷gW,zl^¦È7B‡ð–Uï‹ÇÐ…ÏyýÈ /'?Ä( ‘*âìHËŠß(„ûj# HeF2*†Ù-ò/Ì©e›%D=½ôÎ(pâWw”(&3’¯žÎ(&á(J–(t–õôÒ£(Ê-B‚Ô68“*öó¦GI™‘pÁ¹ñðù+”³ôÉï:\Þ2»8Ò²ˆx” ÊŒÄ+xW<„x»z¦/¿ëp9xËðþßHUÞ¤g{”B­·±¯cÔ»Àœ˜Úãó„¦.r7s_ý–u¾·ª1%i ü¨Ñ>¼ÿ¼ù} ÍÁKæ9ÄcñveþpÊŒ.!¢ó¶B¸å0Ù,%êé¥'ß”öñù_Àù|ƒ nÔ”Ag†¯ËIìÁ—]•–ÍRâ<zgùÖ(fÍ©Ì2'œQLÂQÔ"QÈ,%ÎÓ¡·Eqã;6þ ºð… ÍvW ¸}Ð9 8/»Ò!«ÊÏ/¤÷ÅH^œ†nñòû:û]ƒ3WgÜ×]QO U›"kMjdëFæwÔÕ:cÕérH¯5C)†)=‘‚¹&'<× pßÕ~¥Úžþ7Q—óº>eFV6›å¼,ÒæÈX½¼´ÎV¾ë2•Y™ì#Xù.+ösx¬^^ZA.B:JU~®²beF(‘°ÂÙ-òüåÌk¶92V//­3‚Ò5‚¹bežàÜ"Xä!_´f?GÆâå¥EܸØQýDüxÏÊ&ßpÀˆÂ¯ƒ ;˜@Äp é)É_½Ù Õ1¯óœä¾7èŠV~æœéBI”äÈ«Ÿ·o*>~“Ï“éñœ‹š,†xÅ"‹ +Wátü Õz.®©åQ¯èÕ¥GQfkœ—½Ú-‚O5¤SQfD=½ôž- +<£A¢Ò©(óDn_g§Wt~ÅÏR¢ž=Þá&Ûå¢Èý +‰’T™\KÜšÝ"¥{²2K‰zzéQä,Q4Ô²òÉŒè^»(ô‹Ô«¡±92v^-><í +íØ0*ÃÜ>Y+4;Ûô)V7GÆÎË¡uF°ö,W‰`2#k}>‚µÔñ ·kì¼Züp=ŽÛ§Ñl%ίKÎŘ‘N•<ޱÙ-ÂWXK57K‰zzéQÜ·DQ¯Ñr®ÆŒtêjŽ(&™jîÛ,!ÎÓ¡'Q4j:>ÈŸ>£†ãÖèŽ¡Ž¢ü‹-[¹Tñ¹c޼—=”¹²Å:Žgçɺÿ$j÷üë8bwIK—YÃûÀkSÅ7Yvϸf¼¸¤+¯‘t#ÿÑW-¼2!_GÐסó=;c|ïF¸'Pê¼u'A'3_´/Ý>ƒ/ë_L,e?ñˆð††(¬»kÈùPf„üñ v‹<”çom›¥D=½ôž- +ê”ô|k+ódNÞn•R`tSø92V/‡Gåyk¦¼’ë–Söuì–Dþ:[cü­ò»¨,å,*h‹”ßEe¹÷¢rÕËKë9"Ð&ªœE¥mò»¨ÛŠÊ5V//­-×@•£‘P ÍQ~5²^qoÄKåÖ +¥„iŽòÑHÈ"õWßH¼ü³(EÈ÷Ös&ÉP¶Ñ%Åïãi03\ãEéªÇµeåChС,GΙf=™'‘»Y ,O?Ÿ=¢'ª‘Ï¡Á ÍüÛLWJæX÷Y LO?)„g€¼ãT÷;5Š'1OÉ¢’¯ÁbÙ­ñó— +)†ä'RW‡ž·[’ªÜÒ7³a9†Î5›ä‘ºÚô8¼ ƒ7î¾±=h( ƒðÒê(È£„#Rûo´L%Û:pæìxè+Jhk¿ÈøÄùpkí` +õ%äuHégС‚‡>}œáœ½tƒëŒ5t>N­ç ! a¾dBÆÝG8*þtÆ:§–˘H/Íê–µ +ÂíŽdÐ/¯cŸµ6ɺ:ôöR—4E:„l .kuì³Ö&r®6½=kcÆöœYK-í½§è/´L5kéÂ$\*¾úÌÚ‰Ò5‚&hˆEÖú.c©Ö衳ꪒ18~}öm‹ÁƒÓǬæø!?aHÿ*3d¬>^JÏ¡Ÿ²êß³c[Ì«»~m¢_¨_Óßy¤ö/•];âËk_L ªÈ1œ¶ŒÝÚm†¬]}¼”v}ü“ε/æ *o¸õv“ØúÝ‹——giÄjýþŒ¬»Ÿ(cÆŒ ¡Pû›Õ?”^¥Ü½è «—Ò®Œ—/¨º=ó„rË[Íì ÷ݳ›¡cõq(±>ZÝ1¯+•Ú\ÿd#^#öÐ×ñ¹ÿÁÔVNTÂsÎHå +¿ª2”kÒÐc?»˜_lÙÊÉG½Mí'6r‘¯utÉ£¯!ì~ ÂJÍX'~Öî q˵ts)äëvhe—?^>N%ÒÇ—omà` ½@"êÂû0f¤ñõ FMîŽÔ¼Ç½€—ƒ—Ê&ÝõîxÑâ0bãy'8“um è7Å´Ëɡý#íï†=nÆì!Cc„Â¥ÅÁã}£¶¢Ì…Ö$¥nôìëXÅwj“©­1öy¥Õä&r‡a(7 C‰\»EZ`-ŸŠË;õ…JÃCÔC­c¢4r"T;í*¡’ !®'*±³a.ÓáPÞ„p#Íc‰þ§F6L‰ööû‡Ó…ÒÝÇ„Úh"\/&ê7þ>•¾E …Q+ P‡/&µáC4\ ÓyÁ'¬„jiy¢Ür ¨t|6Fw£‰PÄÍÆ(µ»²^Î¥Oï±fœ% —*#leþ?óe¶2ém„áó\EßÀ´URI%ñŒ ÎAr MH3G øöýÖ¢åëîÆgfø¿§U‹–ÚlU)Âqũ锖¡´9C7“Ù\6Tp8¾ ·@Îp¨dêrª=XeI&‹{çÅ>«íÙ:,È`Ü¡Z‚ ’êl}ôü“ï!'¼gÔH •JRq¦Wíû‡—±®eLІ¦C˜ÈüÅYæì¬sò}ÕŒ³s6´˜(µêsü I 9Ï.PŠï ÉÞŽÞ3Ž3Öe*bÞáDì +•! íˆ¡7Ç:ܪ¿\TgˆÏbï»á嵇Š0­ÎjE²÷܇lKI}Á³fÆ +KšLtK`‚' ¯u˜Ý^Òÿ$cµ¬Å +¬d²@NÒŠL¶‚ûü®p²I\l¯Øä{†*›¼vâÕÑçЖ\Ùä r4çè;´‚.h:¬éú¤ÑŒ3¢&°{¹-ÿ|Øá»Ïßçç’5b nÑÔF@í–—uL“&¨Ø*£ÜO™ùý°7˜×·-ñ»8´ævÑg³;ÑÐÛÛÕ®}?,Xë‰XJ^ Ö1W"©]v½Ð&M K&¾ç®çw|Mñ» ¹³\v½ÐxœH¦tvpì{±M¦ž[êÀO¿ýpûÛ7ÿ×ÿoß~ûÍo?üò#~·ï¾ûþGðtÓÿøµ³nBº¸5kÞšU‚tÒ48á +"7p;D'z˜>T©<®ëmm/V?ã2’×r™Üe-YU¿üÿ…ÌÏÿL·ÿ½>t$¼vËÚ›¤nM»öÃÎgÂèPÑ 6jçäóÅ‹üeiÑt.½ +GKqS7ÕI¸—à^ +÷ÈÜKH È·h˜ º s.ºjªÜmxÐFÍÀ´ÝÚ:’é2Až“Çh¸àÈ{ݵ)ïtÕJ#Nׂ¶’«¥ÇåpfŸ¯¤·0Mú‰´‹ÜRe¸uÌ#¬Ï l%§¥Çyäh>â.05QäV4“w}-mä[EÜ-Ñ…ð”›zB7r¬›èÐöbÕ¼Ú8Gtª3-2Í‚‰¶ŠOÎLäÎD•Øë&:´½X5g0;²‚²GWT²áPÊ[ð.щ4È=i× +µ×-tj{²ú8í_Ê«×Ôƒ¿RÏ2ëè,n]î<ÇÌGÁ8‚W?ÓH.ÚIëÕ2:ÃÈ$"ªêN&9'mB‰ö_ZMHE«eé~Q©σlK–*z³h¨…#w(èh§Èg™§°EI©@û§g-_òéYø«R'K¤^–Ðzg+s…SU£gÓƒQÅàƒÁívH/†ŒÃpÄ¢ù\¹ØÖøÆ¶å½C+ºÛ>ñ°rÓz²†ye žÒ“©Oõ.ÞÇÊͶÆWÛ—è:Þ k)þ0µUt µ¯vÔ-n´åHÆ´Wm²U½˜ôc:¢#C™!2ª™ð‚2]= ò0Aêf÷XµÈVõdòR*2#£ Ñݤ®½™n‡Jl:yÑ]¨ëÐahÊ-â¯|ÅKIhìW‹pá n„ .yX…‹H˜àaº¸gÏó{•£CדÅëÕïQ1ºÊ° f†ù¢…f¡6kxÞщàZÏjmÀ±n¡­íÅêã9åõ4ÁµX3°àåòäÌDîŒÕî½j­éÉâõò³ÎW•²þN¹DRê5-øñ„hI´¸+Üâzº†#lc˜tŽ]v_§àãXX¦¶Úè?ï;a.ªÖ¦»ã„´-IÿÐGÎQ ×ÑÝ{‹Üë½Ì<ýªâyõ„>½“ŸKùž²éÐûšŠ?ëúN«VO«ŸT|UÁX.QB›];Z -‹n6fž=v8ÑѬ¥áX7Ñ¡îáÇõÔÆ®æÈ1ÚȆjˆû'w&Rwê½ÙßǺ…¶¶«•(ÌC_62Y/V·ÐÓc¾Ûè㉠˜ý /Á‰üæÜt*Õ+MÂñÜÄ1(T'ZøÌoÑ}šn´‹+è)ê¸MÈÖ&"´I³Å‚D£¹‚´IDVÆ«´u],z½ ´±Ühhrú†õW7x¯š¸¹Í½j¡­ëbñ:ïü5ŽåMçŒ^$RÕ gÛ¶£ðh²ÛÍØ–>Û¶tÇÊŶÆ7¶¯xiÛVØMÖÁV3vHmÛŠ¼såf[ã«íkíž•`™F´…«¶Á’ÐÝàºÎ†Àw¥ë{º¬ +´T]Í=Îvå e<\ ZÜcIV¸..8pªtwa¯ +´T]Í]kõþQÇÙ§ÖjÂK·ÕÑDäÓgkuYhëz²øþæÆ?QމäN”º`<¹³MDˆVôõ^>䘣²­Õ˜Fš¶o俦Q‰ûlYð@Ø}u´D'BšÀ°0êhk{±j—zâ>¦3bE]6<Z±bSÓéŒ#u&k÷q,òï­çÅž¹¦.禇Ûp½ýÓL2Їðã 1jDwvˆoø¾eãôòDüQ½}"È` +Tƒ.æ’}0­2û²¦ÝK®øy±xàMg‡¡ÎRÓž{1mK +Ë~Bïw$§¢Òdk­‹C¹Æÿ8vm¾·¶Ö>ÉÏZÿîõ¶»zKØ.¦¯â­€Ñí N‰‡x² {„ÖÙYllélwò©¶ ²Õ`YO, ÚSgEc™B]ɽ› BÜå^«Ø 9ÚDÜP3aV ÑL¨Ÿz»[G0¬b¬Ê¬r³WЩ‡:’aî-²ÑPÖÚ +–pÊu;ƒOÚVêÙéÁ¸6{ge]8e…ÛRׄå&-Že=õѧågThº×txKEæ&†íU') hñáûÐPÍe]Cûi }glM#ueR[ + …î¬y]Üa¤Ð\ÅÕ¶ªiù剥!*Š.ÄçDÚ_– kwÙ/ÌXÁ$ñdM5ë.¸±œÄ•Š£ë…¬ÕV†M°±6RÈâeU“ /a2íx”¡ižLju&š +ƒáÈz¿'’žueµDO“–ÃXßìÔEÚÒÏ~7(DS—= n•Õ^íjzO}2–&vÓÈÇSéÇ®k°ð4JCL;hS6ånï:Q’ð$u&‹ˆÄ)6šZ©ö6SþÔ5‡“?œ>š㠆ˆ=BÀ‡èúÄY)9ô•ÖÉlà•Iø‡Z@–*Ó|Ê`ÈKæ3|â)‹fÁ™^¸³Ü#4P'òÔ6P(â83|² ƒCÓ@æZ#r‰ÀYtKPèÛË\‡óö¬XÛ\–³¥;¬…H£Áeå‰Pž.Ñ>r‚¹š¢pÆw.‘ÉF]) ƒ‹¼°®µRo¯aCÉ¢p³qoðT&C–0†¤N“é@¯E¨£f•¬¢ÌC’#chß!¤lYÇŽZ0dën¬æ?¯–ÉnºŸ¯¨e²pGÔ[€á…0²p²˜ùƒ†‘ ¨Úùä")éÞñ¤Ñ›¾§(’¢ø8즵,žô>k1¤È ´YŸfÁòÂð߬ånö(*…¥3éÕy>&{Öàlœ¤ icÁ +•ßK@L“D „–¥fB@b ˆ?#È=>!MLyÆK†ü°)P1ÝU²&i3Ñ4L²Í¡Â ŽOëH= >’U{ªžnH[R°= ‡â´ƒ]*éñHÙf sÞ‚O«Â;Ò,“NÒ§Tò´¼ +­¦Ü¨ó•{Q‚Á~[”B~—EiA¾­£kQ½mçž´¥ëfSö“ö5 vCRWt½Yo@»+¶&q¹l[’~.-7kïÂÇuaÁÌÙyE2Œ>W0†±a áGë=ô}¾óƒdTQÜDq5§%ö¡œÕxÑM±…ð=ãóSŒw4^ÚDÙÔì–Þ÷„áÅ¡RŸ¼ uÐØ‘ Ã-à ‰˜†ÌsïŸVˆlôR1¦<—ö;bçÞ¿â—fº•ž÷Ý×È÷Ž=7¬¢{6ë.zvaÿ>ò!jï)‘ óL Gü½ýÜ–´F¥h=ŒjºÙ“ÄØPÏ´S5­Äԇ߼ðôˆ¼ÛéáˆkºÙ;3ÄI”MÖ×ÂÛ6úuG¶‰¬/ÊJ9¨1ÍPx:îØsÃ0¶ƒ6h=iëûå·ŸÐêþñûßÿ·ß~úûÏБ~øñgÀþ²ßè±ý Û$úr$]…^ŸJÓ hÓÚ&ûåST•KØ~•Ææ=),€3 –ÀjT»ZhúÃ&}UắjÝñð¸å`Ó©ûnP¥Ñº0~H¨ÜÞùúšŠ«t`R8_Ñð±!U°º ˆèå´QæÂ„˜“u^ ‘°3_òOP?®6CãÞGLõºio$Sn¡;ƹ5„¿èQÞÅ¡TÁ‰±…-u«\P#yžðm®2ÇÔ“g+Ÿ¼#rh^ +틦9T«´‡ÑuZ.pƒ +‘Y“³oŒÏÌ<ÿnB rU{r$•RŒ¦DDZ…8SðsŸ@‡¬›Èüt7KWûÆ#¸­Ÿ4b!Î6ûN"°‰í$b~ºŽ›¥ƒClå_ygí£Kk¸A̲âc;8wÖdBl2¸ž»=öçèBH9s#ÉŒXà%lô8ŽNH\)­žR¨¦»Å‹#„•ð7©×ŽxLàˆ‡ËàzîönnÔp‹‡R<õ1°ÅÂ%ìSuÜm´ lrØÛäY‹ÌMt`(»€Ï¬X!ç ÜŽ/ûÀöCàÍóª×ÀC/†ƒ ©í°A:扽c…«]ÍÁ "y£í é;VД´Kاë¸Ûz?ç\ô7¬ÜàÍ… ¿Ðqp¾! ”ê.aŸªãnëxCØhBÅyª#p¯Ī'à“/[%ìÚqŸÎEöO +éaâ;6Ý|n …·ÑóýøŠÞ(‰ÍaÏ•™ïÜj“Q× +ª¿ÙÁ©|ý…þúå?Ÿ~aJ–YŽRíKìŒ4©|Â#†G¨»Ê×-¯ç¦´hÕóyxþÿ|åR@޲§Q=åcÃòøhœn1&± +˃518­†HX#¸xrŒY@ìGµOɹ®=· 2Èˈ‚%X-ÀM'ÀÖÍàKg‰Ì„A‰Cß$G…Á˜–¡Ñ1‡,›Ÿê<’1SË +ê5±àfò8¦0ŠæpÈ ‰lx°(·,+ P‹¼i Ç +õÜ%´¿V-.UÇ ÎãDìçKÀÆ ƒ9c}³ˆsM$. ;g°tt`jMWÁ^(ÚiW9r YAÙ,rÀ³å05¢ãg&H fSd//’àé\G»JP:³Óõ¤ a¼ÕÑ]%KNÝŽã¾zó0\2’‚ · +TWà4dÑ,s0˜è¦3a°éñJíúØ£¨$B˜¢æ|kÙ÷л‡î.g€D)düŸîQL¡ý€c5}bË0÷3ï;lêKV0·Ó<&Y9ÑæŽôŽš6.)TÊì:Ü(fµŽžŽ=‹ŽtX1×/±o̯ŠeÝИ>ÇyXŸc7c¡;JoÔ¡‘‰.Ï-läÜ®`Œƒè|#ĨÇÜÏwçùÚÄ¥”/þ µšå›¶òeUªo¾mm +æV@†öXDÃ#OM6 ¬†á•Šzœ¡8TÚ­ÙxˆsËá«åhö¡ÊÖƒqPê(š™öâ€{àÂzÍܘÞC–º×zíêTh‘ê‘ocΣ\%1gR<òïT¨¶#ßøö¹“‡Mk]µ^Ug…›’YA’a=éözKv{W€{”Úè¨KÜžÐ/žž Þ ãa?« ÿôAé§Ì5Bt•,Á.ê:a±ÅQOë胥5“Ôå ˜‡dÖ¥ü/…y5Ïã³2CV™‡KžŽÜ¯;]ÒWËTè +¶VÉs´©ó#1V™OÔ5}°23š]ä7‘ÊÌ^™ô€«¢E+i'¸—Œ‘‚7Ø BÉ£Þ¬ô€ÕNTû‘3P@£\zùœï 0ôpéåÐ9rõŠñë5œiWÉR×pUèh±xZïÌQ.½`LåÒË9ŽhtäÌœ9s9>sæ0äƒpwÉr†ÇÄ:Ó`õÒÍ9ÈiëûMÇËíÈŽçèæU–ÊœÞè2yî¯eË™4@‡ +ætXÝ0'”Bf²W×;¤Ô*ƒ¹¬I©ÊAÃã"N50gذmšdî*9˜]ZÂ5щk³ã!er%+½6rœ Z±µ½j^¢¿¬÷Šf»­Vš‡y™W9»d Ö³7)/ç^%Bi¬'TÈ,Ö–+fs%{ou°€ðyo _5Bø'×õX"T}¤rF¡mõÖ)É+Cö2Wp£­¨«uܶï­aÈÍy7ñ¸õ¢‚(·RÏ rëvZ§CË +¢)¸âñ­vz_ýRBÌÙ0·@x±ÀøÑ(†™­¯¢‹×H¢·uÅ6Á½B2ˆ<(&^¬0-¸Dœï éЖà3ÿÞ2å%`M‚ 'Ùœ23æ3Óáé$P,HsA³Rt DwÙ"c\ô‚«¸‹æÕDÉ\Àf×Ì…§Z´©1SWäÝpžGŽy°V¿C*Út8Ù`M a¨{P[ã&‹¶5g?ëþ÷9Òvû¼»’ë¤<¡¡+ +¼уR©Y[Ÿ£¦ûýQ®`A¯//ÿ=ýöòBÛÍ­˜2âÊ/OöòÛ}Õ=Ð'‰û|ÁkéeJc+» OA¹wÍ»§+Ëî'aÜC4b,òýO'ýÇÜêLÎaø mO D#!iN‰«gƒž•ºiû`åP)¹Ãµí÷ˆgGã}]ÀRBö]ðL–מøŽjA¥CïGÝlo™Ð'Ä͸8ø Æ ÿ^#šYáA˜£ 32E´7%)››ØÐbËÙd“Ô=ÐHsT‹Þ15€>”ìÝ 6GGÌ&‹YkhCÛVTõŽÚ¼t‚Ýbà“ÕX˜>ì·@‚EdÞø¨q ¥ëàßÐåÙ‡ŠŠ˜± ²#ÚIh —¸ßÿŒW9š;Ë} +_`üiuçχ˜¤;™ûˆ¤–ª×¶³nŠâB:&©;Šÿ¬1<ÍÑ…,Ž»aÛ–U¯*º…€Fñû¯›2† ~›fH¯´lƒ­ ;+M¢CóŠ74S9@ãªâ¾;å.÷•¤UîÝaYªÑÚßÿ÷ß?ç;r´kéoÿù9ëUƒ5`·+C‰“8§©Õ\L†µ?´ŽÎÔ¡ÚcsÓcŽÛË列»n`±ú¨1H'Öî¶É:,!J›J²£º(‰–’{ÑÊ%T¹k—µMÏ=ëvºr•C0B>m#ÖÖ0”‹‡×Ù +¿ˆHuWIÆÂkV¤KËÞ!ue%6]Ï,f¥Æ•ÓgQžh®¾dÐ +ñj…ßœ‹Ì 8'/î>@’¢·o½&Û}¬öW$[²¨6{„Øæ Ÿf[Ý4l>IrCûš4ȶäNkZhÉ©šËBëˆn«'%÷¡ttLÉ>У:8õÁü#fË0jÄcE¦CñÙÅ“D<˜^UìbGï°ùªØ·ûøv¥XÜÁÜ4»ö-“·RM¹%œKþI±QË/®¥¸ $õФl²v nE€ ÷äÒRxÒ,]èÝ߃R›^²·Û”mi>1^Cü‰Ù¸f ³áÈ\»‚ÙÏFæ‚Ô2™¡ªÇ_úÊmܱ³*Ý49l ·<@Œ©iGxܰsïëÝ–ìÊ‘éß9r§!©'Ë<'iCðŽ‘Ûu­ 8»ÍlH[v™Ë•QûUæ½<w\us·à¬þWEÙ•Ñîš×õŽC¦=³g fÒ«‰Ç†bŸ^9wã¾ãNVøAÆ`.žë€Ñn±Ù +žYÛ8nØ5Cç´/;’uT¢ãœÅ[ '´Ô<]ûe¦+åb‘§¡´XÇÓ¥pmÜÝègoì·ð©ëÜ iæ¿ï¸ÀëÚ·Ïmĸú¯Ï›u¬ŒÖìõ)·ðoá£mÙ¤ðU[Ô-».ßI8i¥i¦®sûÄ•ÊgÁØ·¡¶ÁÃK’èá’-Á£óæ`/±—Ûn¤¸ÚÅüUŒÊµ¦ãí»¾ut`?=ì¤$µ ¸‹Ÿ ™Çÿ3gÁ=ªÊc" ÍÚíq®ÉåqN°6vrÚüK_¶!ØÝõC Šc<û¾všï~8ÛaË® J+ßk`½ô ÔB l[Ÿ?'(s^¨º7(OC"sÝ~œÎ¨Šÿ"&4jÈ_Ç´>Ÿ1-ðˆéaH +¢\1)kþ»v.`FH ™¿ÆºÊw\û36)ú¸;Ájɶ›¸tö­.V<< Qhà T¯㜗šn o­ ¤ > +k;·ˆ@µál·Öí\ø¦%f3”ÔñG­Ë²$6&þÀnÕÿîæÄZ}õ÷j>AcÝ}bzÔ²‡˜|áAWëA-•á9{œhòâ–à>ó +L;æÏýš߮ԌXT¥np‡ôûô¦Â‰š:¢ÆK7Í,,1bòòSéyzÎcþ#~…LŽ4½”àé±.–fy‚!¾~Þ¨Ë4¤}8-¸CâëŠeð¹G·ÔÜÔöy€`Ìè?/}žŽ,uY– VËçÐŽÿ›V‚ êmزþ™Ž}Ò#ã®ã»=Àþ¨ +@<×µÁþj‰¦ÌéŠà8V£Æ]!”!ÔîÄøÖv¥`Ω»Ï!ótªçlÛšOÆÚüynÃÙqXH j¹J~ßÁv§^ól8‚©Ñ/p‡tNA…pj¤‡Ï”ROi^ wl¥^v'ïm€uàUsŸOÙ˜c|Z¦Dž>Cß)±Ó +âj}¥ª}”®) XZm×<@‚ëç«tçA«ÈgH>1±Þ“±Âê ÃüoCm&¨êœk¼†€é„ŽùƒÔÇD'FBÆú[ìcbõùúü9ÁÆiÚ Š}Îì/[Á{f{xÅDGwðUˆÐ‹e Ûî÷”Bi®<:ë‚ès‚Ðm`Y€xY¨F±¾f,ÅA>X©Ωpǃ ä· ·Â×ÁÖöÏUâ,r€•;`ÌŒ0V?! */ÜMê05·‚‡Z©~úº¦ )öÏ©œ•8B:ËóUv±Šc£½²»45õHß hT\%5—?³|1Ùõ(/‚‰Ýo`œ=Ïì4»Éi‰g–‡Ï.v1ggi(ðÞW§æ².ëYÏù5a(5ìÜ­ø ”¶ ŽH0¥í  +Z‘`Œ;&È™+·S÷Ä\o;ʳÒÕ£W–WoQ=êÙÂÕ ¨%G +‚ ‡¡kˆC<W,¼4eÚ¶û—úØv1’òñwLk‚[æõã;ÈeÖúBK҇ͯÞ;µ&9ÐÇ„°±·Ï߯ˆÈZù*@ÿxD·¡#´ ®¸R³\¡ ŸÑUˆø3bc‹ŽF_°—Yä½Ýuvû*Ĉ­8Wˆ‹Ð#÷# }áòÊèì£IuDQËîÝ•zÅâ#ºø—m0AwŒ@kÅ›cš:l­âˆé6l ôŸô:é@…#Ð@9ЈWïDõ†Šf’ÂDA×ÊìÇ%Ÿ†+½0ò1d; ÉtÖdÇuê‹,C½¦¯!B¸„g#ÌýÝ‘ÊçÙ ¼“ìnÿ¦°òu#à3ô÷³€Jx5Pǹ{N¤Äû\ âò½Ö—3©/‰¡ÜãÈ€}ÞLp»~Æ„É15žoˆ¡ÄWø]²K¼©ИPk^¯‡ % eåÝJ¿öòñ D!>í‹,@³ÅÈå›È4¥·%èÈ'ªƒµÜ¶#jÌ%i1ë˜Äã~mj…yÑÛî„ñ|²š‘zrI>äý5h÷æ<¦Ü ‹êN4վ݃¬s›Ì|L+ÁÕöKV®]"<äc"¢M1=?˜ý˜;Ô ;ÖÝrÕü^‰E®´Üº5)£í:ªFQ¼/›¥N~¤}Q> {Æ(„ÔÖ±w¸í¥8åRob‰Ü( +1g9cŠ’ŒÎ¬„Ãh$3+uÝX3—¤Ø]@ˆ¢¯ŸÏÕUd5 è1Kã +ÿí¿ÿùë€c/\ý!ªåÛÿk›×«8ˆŒN^s¿ÄÁ"®€§#å®®Ì)®àAf¹Æ­;X»ðˆcÜÞ­ëºR“† µ²èÊ.šÉçV­raAD?ýÞ6 û­ vD3Îb^õ2ZÕXŽÌ}nß<н®sÿM*ãÙ i½šx¸µª'ÞlàB•,ñÙÑ1{5’T¹—ç^V”܆D¹Ù½wnn´’‰Nnmß3BUéÛúËNHÒ\­ä¼ÖlÜv³¨MvÖ ñHÝX‹|Ã|©E ¥XÕy-²,nVu^‹½³ûY«ÅB:}µ´å—ZZ4©Ñ‹Æ5n…gåx¢åµhÐÿWˆöÕwUÃhç½ +öi™ö’á0¼”G¬¼T!G7½9Z›sÍo=I µj‘¯]V¡ =«ži^yr<†U²Wቒ—àã —`Ù3ì.Áýt(>)—âZ—Çʯì¡~ß›”Üè7Å÷ÇÍK¢2ùßW­NÆüÑ]ÊfuæR—²åµC½éÀð(§Ô¸•$ekËcA‡×YFÞì^ò:Ë­–®h~–V¶³ÅkR!IãšpÒë·Vš¼ã™ Ç‹‰m7ˆÇŸÏ€5uÄGÔ,Ó”˜ÿ=wÊý÷JØŠÆ<î¡þ³Däë všZä¸ ^9øì8ÿò:X«Äû~dè\¸E>Ôßµ ?¯År|¿AÇñ[©¢M`Ús ², ÿ‹ýàœÙÂ`¼v(½ MQÈï.½­£>ô6 '=ÙïJÛåÏ+w¶Ï&éBÑ%„¥Å?ÌÆ +Þ}~<"²zðØsDæUdÞÂVE‘©ç;þ\s÷¹¦ „&FÖNÎbåÊ» +ËT®;È a ½o¸å³ÈóAäH˜BŽù‚Œ©– +D¾Ðüdéo§_$'L!€­i÷vÎvÐ=…Žqa18îYlˆù,ò ,΢­ñl@Ù,òý+Î"ÖgížE¬W·ày_˜ù:yly\|)ò“ATx©EÏ*‰ú•iý­ÿâ‡v!Jm* %¢Zº„ÉWqǹé¯íiˆ|BÀŸ3·ì|àç¼8vòXÞ*”ÁdÒìØM|‰i[›UÑó9¶5À‘I§dàدTÞÜÜ9õBM p$=IË6ü½aomöm!=¶z[v,m>ÌÆB¼ûü8á€,щ$È1ãÏ¡ÄßtÉ•Ûð#·@i2—Ò° ‡³Øm´Él?Q?Ïu?2,c©³þÓ,ñâÑ“¦îg•û«ôll2©Z¬m8 ¤êÄŸ;û´iD*rbÆV!5[üQ66BÊÄ{ð5íä¾GÀ¹GÖ×l¹£êïõ¦`­úô±š[Àqî3˜‡-øzƒfŒ†”O4‘gsD¯ë̈¹Ã,Aý'…™Wes[fµžÜx&35¡Í«ö­V›ÐC[”_ßtž+˜˜Ð\¯³0WNRîÚ¢8ÓzgÏE‚˜”ºMA:¤ÕÖ®gZ6œ‘9±³ýBÖtŒ#úÅ^Ç÷v²,³ÂwÝ'ÓjB”s'7'­Õ„¶k”Ðk„<¯ÿþxD¼$î³_ñ¬ŸOŸ¤Ÿ©àÛRŒª¥‰\¤fG»šŸjvïILÚíE‚0÷ÑxÒïDêhß_ç)xÛ}w^ò=cùÓùÂØæŒõßñ¼Û}Þš+‚:TçGM²#ìš«˜0 ¯zÖέ!k<>"˜PÃåŽæ;?õŒ[ÆûtG¸®yg ÚeM!ÝÉZÆäÚŸÇ“lÞ”;Ü9ï¬Áæ4ï¬ßG/ù>kâÌ{Î#k5dmŒ"ƒ­¶*Š`Ÿ…w+d¦K!ªYQ“VÈÎ^þÚÿÍÉT¶!ñND­*Xf÷ ¯®&å|È‘U ´¬óŠ«c›$æÇ,¢N“äÙ¯&aò4Ãüqï=áà鑸’ô$fÏ2ѦÇvˆ‘´ ¤Cƒ5õÎÓM‘}{½Áô¢à• D\é8ï™=•á•ÀÈ#ÍÇ“q¹í§žÜ¬e³áÉbeÓïêS¬ „¤j>ÎIžçûóx'ëƒåø:¤Y»ê7x~üy Ç÷uµ¤÷«*JXšjïbólÔŒXy*¹ÕX lmÏY°“2 Ι˹°à´Bˆ§Ñ%·PˆÉ\ÁErçá âPí¤Wó¾?GwãõCÙR‹2v,2Mk¦óE$Ù'Üq”F:Æüþñ;Üs¯#÷s•‰nîy(žÙ×PŠ‚3åûÈ.ljõ)kÛ< +“ËTlàØ!²iT“ØeòPÎÐ]æèÔ;Sm.ƻݙ2y˜V1j15VÀs§§”žÆ3ñ°XyR,ÓLìeR¿?½Ú×5ï¼#r¦£”´ˆñh™~ªï5ðFß#“©gz*qRž?é·¾g1E®ïñX›˜Û4/"œ§"èD8¢?‹¨ê‡ø;OaGLe½ó!3Ño"pׇÐq꼉PÐ@õä!k¨)Y;Dð0G"ð!|îDÀ;mÞD`7ÇOyàBêÁƒ7CåÑso •ÛÅ<þ©Flè®&É@oQ¾1Éõ^Ab·vÝ]Yl¦ùÔÝ‘¾‚ÄÒÕ$ê_A`Ðÿ8¯r,Çr#è×)úê‡}15Ž|Õ!ä°ÝßP$rAdsøäUÅÜ3b‰·IoºIuò`Ó­ç4<´áf ¼ Ú\ômÁðíÀ]ЦL|AS´ä¡]аeÔ» %¾œŒÚÎr.˜gõ.g„"´ó6h’QïbF(B»‹YâãKÙ ]Èî§VÈàë±Ý…liù¬ï">’AQ4»ò¾`JlêÄsdV4›O²òÌeràwÚñË:ï´¯ë|ÊØé6±ãÓ ±“çnä"Î;Ý£êÌvEƒÊ…;ß•ÚåÎ7”N9o«àÄóN7dN wº¯T_iv?±4ãîî4CWåOs¬T´ƒeš'”é¿^($„7Û.¢`^vº' #ǺmƉ•éÎ’ÊE”±Q°ìõçB©Á³ÊŒJD!%zqªH…°•="ˆ5“R¦f …ºÒMÓ=ØõCOŠ@"Æg»…l¼³K•%'}PK wvMÒøì.}f ØYlÇßG6!úì½€v™óÎ&TŽš¸³YaÍ},Ìy'ó):ü$™ÆDn8N)ýç y²>Ú-Oˆ"n’%ò$Ð’¼å ù6nyh‹‰x4yBÊ®Þò_c˜ÊÛEž$”¬²>!ƒÓ­O"I‘[ŸZÑÆŠEŸš·> 4ªn}‚aàÉðWíÀÑܯ;ó‘šKP*,à@ÊxLÙé ˆ™Îz9‘RÏí4µfhc|Ê×´¿àë°=ƒýž|]Á‹æ4n¾NYíkx ·ëž®; Íuϯ·ë^{|àºñ‡Ãõ6¬Étr xŽL^ü%WóÍ_}=O +òw:4âÉ_MÆ›¿†µŸø«ïW㯾_•¢ºñÒÅ_}¸“»_¿Â§\nþê[Ól$npXßÙÆ¯¨ïûM`%Fç¢9ƒPÃ]_žõåÊ`×—c›»¾¼âù ¾dÓÕõ‚έ9ëIçhÌ›ÎùéãØ¤ŒE]èœïKc0‘VðMç|ÔÎù’:燱ѹ@¹éœ7Ýèœ:y0žêIç¶1ß|c®w <“h±Þ)tÔk§pSì3áWüõßÿ¼!:G•èðïþý/[úkäÿ(ÁÑ|ëwÞ|Æxü*dƳ·3žÜOï9]¿Ü^²]~v7nwÿA¬+ÏñË» rR~5¼)~ä±:·Ãz(vjïC` R8ÍÆæbîtªƒÐß>úõ¾çļ±´cª¥é95s‰è ÎÕPC3ÐÊ(W€yè,‚mAN¦ªÕnwšBèWDÕZ_žUO¦´îlFEš +®•u'À¬jª¡ õdUá„¿ãz_3Þ°¨)ê$lÔ'©œÆW²„íd7_;@]ÉÛ–³ ä +)xÖ)aƒ`ma¯&±ðuIà\È ïØ9 +4‘Œý raLŒ­éïüñ`.½¯$þ æ¾´r±çÎ}X¹ç-Z'uìQº)Qê¸dSÎs]ÏL™C;²b‰ îOzÆ™F£¤ ˆ Y_¤G¦ÝÔiîß"q0`ŽDXÖÓÌú1¬Ÿo^?3›=‹3³Á'Š>m&ÌvE*ÍzgŒÏÇj5Žª| »ãW£MEbÆgÝ>5Ä`<°âPɦgFcͯ„¬» |,¤‡A¾ío-X“1Æ3ÃtOX=9àw*C^¬IÀRòD +eõÏÀ®rµmè!¨m¥®ö0¸qlQö¦^L¹íÞõäìzóëHÚò;› E¬t]À–äém9ØR#ÙÇÇ—Å$#ãÉj÷¸õÌn¢†‘aßÏ–Y*Ö`*¥V™y7X³Ê3›':¾â0¶iúj¬8L*⸙qÊjRˆ7àÄÃ$$-ø-½بfrdäÎIb GƒlY1\»dÛÂV¯¨S…â2®šR~X@c6(õùj'eŠEà +ëpvÿز,N"zº;=ÌïÒYhŠÑ`Øcaq2Öò±<ßÛGT‡ +äH:.Kµ©á3‹U~ILŽÀ«‰LIëdÄ$¬<Í>ôÈLv°L¢¨k`’N Äÿ:·ºº~yÒ\ÃŒ@zSÁÒx­D?®wJʬD€Õ¬A6èÁœäñm:ª&ѯÕÇÇ×—ˆéOpôfQ¥,ÊùjQ®†˜Ä*ŽG%ƽñ.1¢û¨€¶ƒìF¿ÿÀ•À ³p¬gbw|Þ”ÎÀ“Õ9؈]¢î¾‰öwû¿ˆ½ðžÛ%R BŒÛœOÜŽÌ J¤”Ûm›·£Ÿ5É·8’Ò8åvä]Q§Ü ŠTN*·[êævDn`g9¹&/Ïí²gnçbdôΰ?1< ö±°VÆR=4ꆗ‰o´}Œ÷~[”E1]ýy%þ:*`ù«–ˆÞ™Åš»B^[\~·g‹_Xš^?*¥åg3…òÏýŸÀ´°6ظ´ÁªQO‹Á4#Õ2A– ÀZ*rˆ‡fÙ?¯#S¹F©°eXÇ>YF/ëç%ï‡P +sd óðÆ'úƒ9ëvs±ù9¨^§p©q&ù|ý½( ƒ–7.«˜æot¡?tŽlkaÏÕºaÒX7ä±ÒûÞN9»²,§)ç?Çz[WPÊãÙ:À·Þ:F¼uvŸ±­EA VÑÖ ”÷ÁƒÆIÛ_yGê.Ãxƒ<®F:ŽˆÌ´L/L¿Óg†ˆ/ ³¯Î0ÃNÃŽ£&Iª]˜˜´í„ÒRõ{Ûqý xEÊï7ª}N½YüxY€M¶Ríl¤2éleàcl»Ýúné£ÐiVw¹q´w á7ò\*ˆë {â¨3C–Txø‹|ÄÞÛÃ-ôÚžÝpbö›·Ç$X²Ý]á-þSÓÄ^B§Ò F“ŸñP•Ô¤.XéÂÇ(_M@Ð?VJ–ÄÄÛÏN.0 V•ÆAs4‘ ("’0ƒ´ÛWslh +ç¤JQkQª†Ö©>ÄW&©}ñ×?wœp¯½í Ç³Ÿb] “*cÿxª!@§èuPR5’ë $–Y¿*‚mó]°Ô=«^|ç|©ñdí8[DÿNˆ…³x¬]cçÚ*@ÞB;×gFkÝg­móJ?Cc;ëégtMß:ç áKúC„<÷z“xÝ±Íæ218x%Õ§ºÛ?Oì1–UÜd¤ìÚ炱âùà`OôÏ/ù4w[ú”w)‘Ij)FsH»þÖY¤IÊYæ°jt iŸSN¡©dülðK@%vÛÞ_½Z˜ß-› 9ÅÈû… ?×Ì«[¯l².¶äœ‚Ƕ”‰ŠƒâÜ’ ›Ü9%˜ÇrBµWíó•Hù$À‘ívlàá'çò“`í^ÆJäNš¶j«Qfv©uãTÿç!t9_™&éçúÌÝЋӜ)_ˆ;óAµ œÐwšÑñT ¼@§(±ý³­uè»:À€Œ¦¾#XmE«Í¨ÇóBVf—‹gÑlqc:Ì¿LBÿ*âkÏ„¾¬|ÀÉ}wù×à4W#j¬ ‰ta“ë|M¢ø%#€"]6:`éÖ¹hAºWJEWàö/K~û~¥L}û äˈ‰.ÅìüÔS®%¨ôx]>áçE¾~6ˆ¶˜­åœ§béO7©Þ¶úʨ?¸Êc/-d'–A: +sP†:ÎA$g¢%8†oô‰càœMºþx<™A;+ÁI©€¹;)MYj™Ûn!u°&§$hò“sm¬oc°Œ­m²û¹°Ú6*œ-,úÌ( ¤´UÔô¹K¿`¬ƒ×ÒÖÌïšl{âP§\ɯ'¡:Y’ÌG€X¨Õ‹·ÉXËkœ*¿sp¸)û±.ÝlÀ2Gx’8ˆôdy÷“´XÄn©;8Õ38$—×`µ«ïSPÂucïPä8¢±ÝƒìÌ1iLÞ#¿ŽZ ¢‚ˆì_¿­ÁWŸè¤Å„È9ZúŽ`1¢ÿŒ#ÛÜó¿Ü+a¡³)eèÚVáPe‘µ€$ ŠXið¾»¼C ðôãƒÝ§vÒÜÄd:_ÏArM.#YL¬ˆ•§-—9$™fѲ| n׳µñW|db¸?/X©1Ç¡˜—{‚ýë|ï&Ô `*‰6Ô×ç+©s¿â=ÄSr“¡Û±»Øu€­ti˜’ÂÁ®3Þœ—U +`YÕÃ@Þœì…={ØÔ‘ì)#8ƒ·¸Þ>F!i˜ÍÕ¨vÛûoDï´j¾§nº*Íhò"ssÖ”ÉÁÂH§QéyÌÇagÓê!¨œC½O¦f¶:ÊÐŽV öáÁÁËÀéOÆ(~ò‘…8²Î‰×Qúæ÷…¼Ðü=RH²Zo¾?˜‡¾ò}ÀÔß×?7ßß–>²@ÔŒ°À^ߌ&þ9 _Û?kVX`øÆÓ?'“ŸÇY3ûôM•'œcÊ=!.ç"õ¯ÂŒØRáÜ*õ/¡¦–¬ä +/oÐ%öÂxƒÌÈKp-ÃYfŒ ï€Ì«ŸÀ`®þ-@¡ZõC…ýlë€SØÀ¾õ“c«gÌí +º´¶º°VT´#ÂûBèƒ3õžIïIõ´ŒÓ2Er/£iéÙ?˦ӌoP·Ñ°ä>Î86ÅVÇæÀ\¬–÷Ëųª……5çýÕ°v§ÞÕòξŒjÞ/‹¥žÁ½)Š¥à¡óÅ¢ °×’=zæjê‰Ù®_T-û4ÿ”½ú¶ó`]ÝoßÏ5éçs-€‰àRLÏÛeÏc•zí“÷KÃ_5iÿY›¸@`ÍzçšæËY1~ŠÍq³Èûý¬KËü[IŒç¿‘$ Ÿ âó–$Њ+µñ”$xî0¥£¡ß uT¾¬¾]è?ºŠÌ!Åù½$ë2H³]õƒ„¥Ž²×§8× œïÙA½ιú è²ûÛQÅ À†ØM*Ól¶ÜFññ“ü$TA·¢ÊàbÞ¨`';9“î<µ.ç3- ‡>3ªû²»ÁãÒ¯%Iµû~…Ú!¬÷Ò†"EHoÿ/@Mó÷V#Ž˜ÆhÇÐÇ Õy¨Kv^×hHŸ )#‡õÔQ”<ë ýÕYB gÎzêˆiñaÐ;‰[_íõÄ‚ˆ). žõÄ/`"ð¬'€2Gë‰yWÉòyßÎÔ¦nŸõ´Ý.a=í_Oi6­‘Ë™ò÷õÄô °`y¿ž„ ³p‡1êP0÷øš‚h­çYÏð?F±œNO¾]NÒÜi"”a9Iwf&±a9ÉlHœõ°œ¤;§íŒã˜ +÷dØMÒ±™Û/ì&%0­ÅÕ$“õ³šì%÷¸š”ƒpæÃj +®ŸÕyV“²5´~ÈÂq豘>Š$¹ñ%®xf/—â· +‘e`šà×·dá¡FyÞâ¥|NJ6ö´Èµ‰ú؆O½Á\Zmb™¹ImưS5\ƒÿ¤êJ óaÙ™•Ç–1Ú—×hwÑû}Gi5¯€l/~¯=žP¡=\–‰µ'@è­‡öˆ™ùО'ÅS{>Nªö|ØÔôðíã©=NzjO¼'ª-jO`y<µ'ìOí “+§ÜOLŒúÔžìã¼µ'¿¥^Ú“Ÿ\ŸÚ“ÁüÔž ÒS{²Á9Ë-3w ^÷V{~È;6Ûz¶S>y÷¾Â¹2Ÿ}0÷g_L`°ëN\E§g‹•÷@|òè+€DϾb0?úбzúŠåg_Ä¿¾º¼ö¾Úï;o¸¼–l'>hÐȧü¿6mrÞò‰·C‡Ñýó·€ò)|£\ƒN”Òã¬Ã Û*‚øW…7'˜À¿\Ü©Ÿù¢+`¬u“O'ˆÜP¦ €Cäû²Ø1Êo'w:“|þ<›€XGÓV­Ã¤ƒÐ*Ò«DÇ&S^¹ÃcŸl… PÆÍ%‘Ox[žç¤9!2ÏíöÌÉE¸?_"ŸB&‚K1=/€Ê5óCöå·+õõÏæ ;Åá”!XÿåÎ8ÿôËto‡ÞäfŒƒ†pñbyÉ5\ X˵ûu]xÔÊ ‰ÆkkÈ©F¼ ‡ìk¢ñ¾PQ–è¢ +1d¹bœcæv…åsµ=°²~zfÙ‚œÙiø1¿¨!äK¶òp¿ó;ÿ$d%Ûo*1òë§]cLÉf_ÑyŒêî©ßÏœLB÷çÚÙ!Á¥˜ž  óŽhõ͸>‡­2ã¸Ql2ú¸:˜™M„q)Jw%›¡Î+FµÉ˜7¯ý?åUŽ%goó9….0zÜ—8÷'3‰ï¸°Ù==mzR}h²ˆµP¡í°„úvI`ydß.Ù2ÌÖ|»d°Ã¡Ö.Y½Œ"):†J{·K÷ÀÝ.„p*Ö™ßÚåv§4²çî¬nwŒív'ÀÐowh¥´û’Üê…;¯Â=Ö‡µ¾E–à߆dÔzè«5-l–Á64nèt…¼r·³v˜e•xœ‹XÖ~½ƒÚ}9•,:Ñð¿°á( Ãiª ½ëÌGÍû”V5Þsž«^j,ÿ½êˆ(Žr¨^€â¯z'eCùdˆ\ä:Ñ ¬ñvãE/±õyˆ^±ÞäCôÒ‘¼äxÑ;i÷ìÄ݉ÞÍ݉ÞýJ'z¹ç8Ñ»)½!zi€ ÎÅGÑKߪøKå,!¨l/¶x„¢@O#E¬YÚA¿jÞIñz&xiv†Ñò!xZ³6ÁK£$Ti£ÑM·>TŠªo»Y›à¥\‹àz^ž¡HÌCð’%+/x l)Ö-xy––Á»i;Á»è/+†Yç¼›ÌïœÄI¢6PÛCd!ÈâÔo´ÛP`E6Qw>ŒI®ÚYY<û‹þ©vâ£ø!GáéÊKüÀ̤^½ø‰Ĭ¢,ž™¸Š:'ý:îçN'0Ʋ¼Á ¢Je ðÈ…ˆŠ!P…5 ŸÐ +7jÇQ‰#Jà ~bA’{áCÙº<ïÈX,~lŽ)`Cã_eMél.ÈpÊÆ”Õ{ß ÖÐÐÛn÷M¼ŠbR[΄§2Þ°Ôõg™úí̘ÖÃp;¤lCžÀQ© hr?Õ\øçÚðþau ‚§é°ƒa#‰d×Üü;#r—=6£òUÝ¢G¹ _Ðêf˜s‰UoU$Vᑦ3CŸ`¿‡á#ñC¦{òå7i˜8ðå $õN•³Ãì;câѲ‰1.5 cs}‡û°ó>§*`9ãÔhÊT±œ®9V%ªkyÔ8(I²ë€|äÒb|dÔÐûÅéãMå^L‹¹WÓbæ„íkGy±)N‰ýêSô £§ò!=@ehŸ¿½_(Ú§Q/¾ ø[¬Üyè¢#Ç_ç²l³iªHz¾ÍÚg¿Íxn³—­‚K-úm6-UùÖ6{P|Üfé0Øk!ĵà lÙf‰‹Ë+ÙfÁ½ÍØ}Gç®ÐQu÷6‹Û£KAÙf&7:d›X\þË6 °;žJʪÜÛ,¼ áUÖ…Áñ™¢÷Iô±í°6Ùå]W—l–oÚÒ¹ûZÒs©ÍøöÈÙŽõ,´ŽùFÀe#ü¡ ñªt7!^ªî&µ]Mˆ7« ÉFx5!‘mwâ ìêB²Þ]ˆ7» ñFxw!!u!yæÙ…d#<Úð)om„H +Ù ¼Oy‘“ ŠØ±4üfpV[¤5êK¶ÀBƒ“²+°hØ›!°2º6OÎ +ŸB¡ò¥ƒúR•ÆÝ‰Ñ¦©AhŸU@[œ6Hèì¸*ÅC ³V:Ðå±nÅš:õ1~H߇¦IZ=ÒúP·mîò4‹Å¨ö vÕñ\ìÑ–õ]±ˆ[j4OÝQ¹Ñ\WÁúÁõª'}UÖì‹‘ÆO:ñ0œ-·Î®Ü(v²<4óN2|ˆdâŽ}14“;Óòö%UÚ¨lÏÑŒ h«€[§º;Û¬m K0™ËvôZÓB¥KüYüšMöXפ¾T[1Go©†N쀌beɆb¯ëŠrW´ëé™V(ȆÐT.L×€Œ?|¦{è×Çé¨_í>Ýœ$-ží34 +í3#^’ŠšÄXz§Òn5¢µ¥2ì³þ7éÁ_îTWì -þ}P¯z|rl8 y#E²zÄqâ"|ƒM‹Ô:B>96œl¼‘"X%úŦÃkñmÕx¯žv|rœ89y#E²nvNökçK6{÷)!ûê8vÒºLÌá} ì\oËQ7“§Äì«#fØIì2U0ëši¢Ç½f†.’šüóI‹ëbV3Zø*Í |NoKHœûÄRfÅK‚Õ‰»;¼S<è¾o–H³ˆ+xü4Ú“¾ÄÖÅï¨MÙë‹òjjÎHó׿yØûÞ°@?Œz Ÿjå#{q`©!‹ˆÓ¨lKª}&I– ‰‹=h‰KzP©’uÞ²Å(–iì§×Œ§â¶ÜŽ ûÌZó`ÇEÉÎŒctî =Q ÇÜ¿%Ò¯غ q¥ŸKz:Ô=cÝù(´È†3 K’^bÔ@eSÔÒ<ôEÁx%‘è!” ߌêî˜(´u¡=.[ÉjA¥. íqlÛÌ>‘öÃÅŠêþ˜à`>¡“t1Ÿ›´PMÕl¹.ÍsÝ&e.h7¾ˆð\¶Sÿ +¸#…u‚¼XPuRê*T´9½pr[#ï?ÓÈ‹¡ù¨îža#‹ek~ny/ áß9ôd‘Ûr@C߫∲Y¡µm÷”yŠÞ†±Ò&Gh˜›~À`nëv…òh⨞aoƒÁš¶Ÿ÷=vߦwPÔ+Èßv ¯Â^ „é_,ð”á³ÚÇï²H |Ü÷ù)}9’¯èí@_1)²àbbÒQHMýTKÍ¡ ²Ê~1šjêWd€jAXKAR`v0’”7ÀÉTÿGy•cGpëÀܧФÇ} äÜ>„)ñýƒ_HìnIãl¦ˆA¬…3‚@—½fŒ­(.B[q²Èv‰W‰NïŒS4¤ºbK&¤¶Ò îÙM¶"ÝDoÜChœ5Λl^cZ‰cR¿² ¹ëôëL›È¥P¾h8ì<¶ý<8nã à\‹© ³0xoà h¾3 ¥%Ç0#mmœÃŒÐû0#½œ'Ç0Šs£2Ìüt–écuni—Iæ ú.DôcºZìCNÛÊ)nP_žùÛƒe¬,¿ +´•7$Ú^›°OQ×ñ꣮ÓÕ»L‡«‹ú­>ä6Z}Èm´úÛhõ!·ÑêCN£ÕÛF«¶ŽÖÃrž¬>ÒÞ%í>W_‹·É?‡Ü»¨¨ üKì—w5ðä®rúó>YÖNƒ—ŸVY\€ÓUX2þ‰åc°ëXÿ¦¥øÓiHº¼üÞpÒ2ç¡(pÖ­[@£\A@F ñ%¡ /Š­íÅ’x´ËoÓ óÖyI5Pâæ­“ÈÝLƒ%oÿþCS³‚W\f&̤™ÙÛz®7Q¾ýëÏ?H.E*G.Â݆ÈÖB6À²CrAŹR5bÚúÇmðÏG-¥UkwK@Î4!EÀ|ê% [~­zÜÔãV rä¬à´Æ„ÙÁwÖô¤+è²i‡Ö" ‘c$YyÍ9‡)oRé¤~0ñ‘€ÎÖ*äÍèþZ1˜BÁj!͵åÈ`ØôÖˆfã¢Yìs<Ì `o³— Ž0ؤ:œdè§w 0cÞ\JǽMØ3™Í¯Ï)o‘{æšÃ$_) ´v°åÚWS>`™’]å¤ÃÌú0PÊvÊ‹¬‚Õ¹AµVí›g =›¼‰ìatºU³ÛÄ'õÌ¿Ä Öæ¨)-7d\7¬ÊòÃb DCž1çH‹H%¿Gß8²é”i\ÛGˆ&™Z –ŠD· º!ÀÒLrÙŽÖÔ–W6„Ã>Ÿ™†Ÿ 3©ŸëÑËê(š‡6…“ÒctÖÛ>}¢KF9dè?-û‘¦Ì(½–¯•ÛîÑ?Ó-]! +8)mE[–òHÏØK—Rc³æ^!©9u4[¥ E_ǽ˜b¶×H‘Ù릲$",ôªj:K¦•`ÎNr!lÁ6ÉAîlÃÎÝWì‰Ôp·‘Òê,ÎÌ7í¶ÓžÕÚƒ_é,q)Ðçë‹ÁÜÙ€LÙ´’¥‘Ê#(íúè3ÔÏ%€p0¨½¶£Û4àFûéœëì[£i:±„–L`&9RG_lD!R¹bˆ;#—å Ý×®^o¯Nf$Ö*´dõ§søÓFþݱ¨:yÓŸšM­1Z¹P§©(mª¤|J-Ä»V•½8óK\yþ8öõÔM~ÅÎáˆ*˜—ïT!æ5Ã*bQž­’#g’§=&¤H^™¡zòæ0¿Z“ãÅTEzêlRì4ëU0ïýe+ÌOMñÙD´ ÚyæŒÏCœ +5ÐPP9!ìX.³7c—¡w‘0GÚ·V€õàt?šLI +½§õÑ·#\¶Q €Üç¥õ=×Ñ:‰Qëuc†!‚›n˜yŸ$°ï–€q^Øžà¸W]û-.G8U'ZGg‹Ò4ÉŒÆU4®šÒd°;3—íѱI}eB¿ÑñOUýsØ“.ž~r0r¿sÚ.Î:Ä1"5Aš²nDÖ4ƒÅͳ–PÁÀ²| ^`P ¬ +‡Õ—FÄ*.$Wš®>(ã@#; @‘oÝ!b¢®=³·âî6gO•ÁÜmèÆÔèxì0‹ÐÞK9\˃<‰¿½d DŽI§2ƒZ±«˜bf_Ì=ÅÛȉ¿—rD•ßÒ¾óŒÀ²ûBñà1¿Ç¸hŒÁ_$Õ÷ñ—½ÿ¡ˆéì{2bJ¤†©§W3ÚÖ(/”*uÒ˜lÓQÑ)/>Cç9Rûb´…®‹OF+_GhmD·-¢¾sM/Aê„N~” mŠRØ]hú :º(Š2Yì‰Ue¹®M¢“ØÈBª +ŸÌ-×þß̧ºçðèS]ÞI\Ø2{~ðnî«å~ãàÜЂnšî*ýìp0Р7¨I– üð1éêÍíc Ò5•­èð1ЕÄÞÏ™XèÍÏ@óÝÏ™håÍχŸÔÕ½xûÝ–­y !TþE[ûº©¯Š”Þ1£ÑÞ„å¡O`N«†pñœ´âš¶)¨pù8î¹´‡ž±ÆÍ类fZáøæ`Wž„JF^eA–{»èEî7“íè”Ež›Lïh¡Öí„O~dà¦u +âéhnM”–m,Ü”ha³ºÉšóÊ^X E¯•' —±¦7­ò]6Tª€mwar4ç,¡5š¿:ÏB…^‘(WX.;_ÕÀÛcg2´žR¾%Î%Ç^ sòñÌ5æ\¼ÚS €ãÆ4æ”íÁxFkw8xÐ|ç@e{8x¡LמAèÉ3H'/Ï*Ûƒç‡í›fè+•Ri’áŒùÂżhå±èîò²õËC}yåoÂ_êPù¿ Îéyö<Z9´Rï,e<.ÐÆw|¬ïøXßñ±6¾ãcm|ÇÇÚøŽ·ñoå;Ç6Ýññöîiw²óZÔMþ9ðîÜÅþ@]ø\2À<­I@®Ë§ÎWª‹Øw‰‰³¶× +²ð1—”3-Û4-ÑÄÜz^LËG‹üñ6Ê0o——TÓÔ_Þ:õØÅ@Zaö¾NfFÉØ÷b˜íc€îõŠþK¹*üµMÊìNÅØZÔÀ{!ö¯`åÈš}ž U‚$³#p³b*ÎéØb+|Or¬P Xª§Š)ò×uÚ=˜Zvg0J¸lGù»|½® ö9XV3Çxƒ cךgͱˆ×H£¿u¾Î[àISnîX :(¡‡Ãjã*»@LÆêíc­yÙñ½´!àÇ·ZW³kUNHüÚ>*Óì/Áþa À^%8r­‘@Œh1ûEÒê&!¡¡•Á½©ùÇWÛ^3¬­³N` =`ÆN úLÂ’Òém£®(›ñuõÝOÿÌ +:cŸ74Ód®9L2ðûº‚4RÞmÔY/mh»AΖ_ HÜB¤Áƒiª†/‡Ôa)i>!û¿Å·€ŽðÓ¿ÿüñ¾ûÏ¥þ± µ™ú[ñà Sÿ§¶:%ý) §PÒ¨8¥"Šn„ì@I[ø>†~“] ܹdVêX¦ ã»J0:p¨déŽm7WÐÚ#´Ÿ—aïÆ®ìzñÒÂò9±ÛþÊ«%˲Ün¥WGÿÏÔxÞ^„G5ñþD>weꜬx\„‚A;<<&Ýtè˜Ûbš`wG bJÝ9Z¶ÕúQܨe…¶¶.àØõH½`‹lQÁi:Fðžšv1Ë Ñ0d¿<ø(‚Ù)*î‚Aq÷ªâ<ÿª8#åg­²Àƒ$BkÚ:´Ìïï¾›¢Ë¯úµâ$yhךóöàswRɈw¿`¸»àÞ=D w¿–?¼;Þ¥Þ!e¾{wm“õ‰ßˢ߽>6ºÛÕ'Œ|•¡ú3‚˜ÕáäÈpºÆ+W¿¿ûÑ”n´»^ÅØGWBø%X†Y +K »š¥ô¢«ëm2¤0=øP‡›÷©»` Î_@©{ê®åO©#æKÝòÔ]–ø÷_/!XSŒnTPd5P Y++KÒzÉÏK,ªý –e ˆ¶ƒXyVz@DRò8Ìg„t F†*É–#.†–c–Ò¤Ol~zFM,¼N µn·”VñZ +IKé>þlyÆ|Œ€öžý½Íß"ƒ…çÒks(oµÏ³\Ž6aè͹t¾WAG¡ˆ˜‹à‚¡¼µ<õZþ°¿(t4Ý©þ‘µƒ4iˆ÷»&’ÚfjïZIð˜gâ~mô{©zÅ’ÕÌ"N†¼ +ò–­—”2S]:î™yQtgæ] †jr:?¶½lh³Ë:—}Ç”7Pt"°”ÿh×?>±fÔÔ**GÃ\Ó;aˆR—€•g!¬Ïeãþ5ÄËgù> h¹Ð_Þž( ü‰î‚ytP\+ÄÜ2ÏâÐz“Ô xÎ:Tf“°QÈ@y¥—G@ !¼†ÚR«2Âç¹ 28u˜OøßçôÞÌgÙgmÄŠYÖI¥FkË´ƒf§òÅ岋S‚«]vå–ÐjºÊ¡w°˜š'"篽é¤GÁS‹ÂÌœÊ@ôâïé,•0¸k-Jس¬:øú;©„=èªjÕ$ š\ì,aZkQÂ(Ÿj|jI&P .„~ÁŸHøn¬GÂÕµ2ÄJ줯… æmeXÉΪ7g2Õ ä(I…)rK¸`jѰ 3T—9'•àHd@;i1pÎÊKmêvønƒ÷\öøoÖà™e©üF’Ý•ÞÇÆº.öU‰qbÅ"Âk¼·1à ÙÑ¢%Ö^zµÄ{¶Ã¬#˲R¬ŠŒšq|$êi¸Ò.f’!|dDø•Oœ•OœJË'NŒÄå–¥¦XT>sZT>sªÌ §Y‹Êƒ®Îg²8¥XPü.x®*Ô¾‹] sJ±ª<Ëߘ ±Ë¿¯*PºÆ­ªæªJšøýÝØaÖ9ÂÜÇî,í¡M<ïÉÁ\Ч¼oôöRpœ]Ðß &‰r€e~°Ä®¨¯$§‘î9Œ¶“ò'üKÛGPoÿ¤ÜƒN…}Œ˜ò„7H.gܳtíú#dœ8Z#d\‰{B7ð‡5¶0üq2Þý(pz‘»ª¬²·Qj•¹½¨§R'Œ¤å6£3ª{ߌèsøÖftÞr€uVoo‹˜‡ùäEY,æ“6À±œÏ(ÎõÕ]œ½4¢w¡C˜%7M€uÙé<ÜK¬E3GŸ<âbîšrºÚá` ¡*v`©ÚnÃ)GL½ê$b__˜¢¢%í¸Õ¶ ;¶‰Vmûc±û@U1AŸ¹+ötõgjp".ݤvªI»¢Òªsy¯>º‹ý!.Ô©`?Ñ:ås_­oc/xc#æ_oj[ß*Q–²º5ß<ö,Ó,Eë¯%?’Á'tzuàO·ªM,dc ø\_%íïZ¯î Õ:Ó Õ›3sã-i:!©Í}“ÊÙ7¡´´5…Æ[ÚšÂt”Llä­¥{Nü¶õ\d…wF€£©a_™ +X6CyzNGÏk®Â1>uwI +é;ˆÏG®"w±«¡äÊJ;–^µûôÉѲó ëe[˜ZM9ïPvoÎÄpÒ±ìæWwÞB˸àO +Œ®¿§ð¦+$ß÷÷_þéÀ·»knAÕ:`]UÀã%@,yV, âÉ,å•è˜.¥ŽL4ðÑËø¢j zÁQµ“AZ]9—ì€è ;ØëQ/ý«ÏõâãTÎ?‚—ºG/t +Î`)èeàIïA/PðìQ/žxwóê¼­_ð'z¯ž¯^–Ó‹Jƒÿõª —l½€ß`PR T¬•MîÛ>X*ÇZøÔ©r,|Ÿ6-ž Eï +߃‘gDë™þÈÖ Náƒdº¶šcá#q=ë+ˆ Më‚Yø¯&ö¡†VJ;þ?³~% ¡ýë￈¸’9•úAûf+`âî¦^ îm…‚ÿnøyK—El[ÛªªâNÐãµ:JËœ´Bâsìqw·C5²Ï^Ö5ìiÕóõLK7Ⱦ>Cˆ¹©¥A`q.Ñ¥w!°7²O\¸ØçK! +€;™eÁIópW–,–¸PixÊÏçê;Á…¿ßÏ© #:§6ZOçB+óáGùüG¢š©ÿýÏïÄR@»b)W,ÎÅŸÿ:YÆ OIÊYÚZ¢ òt§L›¦DU1 S0ó"K{BvØ›ð¤ÒÃçXǶ€ùÌ¢ë0Ÿ¹aø"°7ó‰Š@Ÿ8‹Y<9çó5í Q%¤À¹YJð gµ«e¹%´¼ìë)-SOD>ªGô©µWôþš*zOˆŠþEôø¼µ(zœ³› œ +–f‹ª÷„¨êAHkªeQ=*6·¨zT×nQõ(/çST_0q¶¨zϪþEõþó«z`©EÕ[ŽDõ ¢ý½ÞÁC¡ÓÞ«ê>¥Sbaý£uOQzÍ™À9“©c_'ú2ý²*¦Ô¢af¨.sNª5 u˜ŠXiñ4Øíð•Oy²GîÚûŒ—T¥ƒ>çØ±$æS¥ÃÅŽ…mîS<ÛBê…ˆSޤJgbI{Ë‚·îÔÞhf‰ñ g;]@ÜäX–•bõä¯4ÏSœ¸Ó.f²!qžÇOñ]Ržêy+©¹ø<ËZ|/(Å瓤ÅçÓ©…âò®µ—HDZöp÷œbíy–\=ŸZ{žy­=䄬·ö|6µö^PjÏ~kÏ«Fk¦'«½ôÃÚC¡¬qk¯Ií%_{ò"\C?¡ô…AuhÈïwç\}Ó.ôºè#ܺ€×íÓÑÅsÒÕEYôõš/ÖÎÉe]¬.±GÀ×  €k(ºÀÚˆºHXGÔE¯f)º 5¢..É.^Ptá?¿ºÀ9uD]@üyü힌+÷^1]ôO=™û Ë"Cß×¶Ze2Ç«žG9Ô¢—ýó*G’-·W™Tp_|)äk!Gíèþ†€èú=ò*²ð@2‘Ød2¿s«žãë}ŽåHkÐ(Z³Ê¼~«Åu˜O.v¤€b>¹øËùÄÚrTÕÝ=±7Òb°>´¾¼õ Ff=ç©`‰¥u–è“'ñ>?Ó=SN7ðɉ‰‘‡<91ñ£ê¢'Iá½jR¼ $>oU—I +´«®J’ ‰Zu©’¬ÀC§ù”¬Xù䬠„μ‰–·}ÎYñÄófÅù›FnV³âù\²‚°dg…ªöÿ™ÏOØ÷Íñ»ù4±%žN˜`U:¢§ù©u«Jx>X¦YJ†¼–Ü¥ƒOpèôêÀ3É9lÕ¨X.pÅçú”´¿gHui†0+ò"¼³GË•E`ûš­µjfÉ›™ñ–ÌáÂttÈÈ[ó}±ÞSRRj…L³•G€£©akhGËf(] àtDœ± +à*|Å'YqÒ  =Éêh²ú£4Y_P’>ÓŽÉŠóûŽÉзדÕkC“Õ“©É +Ì“2è;&+dPwLV\MV/MÖ”dõŸßdÅ9cÇd…bþ—Z´²¨E4¿ja"ŒkøåøFà®Ú“ ì§ëù9`f)êÜØº÷ N~Üeb…pà#,D®ö(,©õ +ïTuõ‚¢+|={ÔÈ*Ý$ÄÀíSºÂ;“}.ºè =ê +n=êjàÁŠ®&]8ê +ñ(=êêéÑÕ Š®üçWW8§ö¨+dOßÈi ŠùÊi]9yÁðÿ_¯60“X)á¾?>ÔßsÔÆZÙÓ hž¿°l#÷wCX–RÝ@Þ6WÖNÜžA\Ië*Oq Ù]IJ5Î’gž†Èg-ýg…Åq¯!çÍ¥´“×RHz\J‡zÏ–¹ð½e­¥ÍøžŸÓ±8y<—–¦Žu~ßø¨¥¤0ôÆ\ºã«Ž £PÀGÊq*ôÌiAðkAxA)ø¼åXpÐα xæµ ôOš9¤¶ó)ÿælUâ\"Tži–R@ÞÎ:ær=0š\=xA©îë[¥ËÅí–æ¤ /ÖÏv +Âß²„BÊ‘úÿ×1ô$rt Õ‰Ö¢­€:\²7ªWühæ€PÚz(èÀ ,(ñ!ÏÓÖ¹dÇDQ`‡À¶—ì“Ðìà;¹d鷺Ò$ÐõØ9HÚeÅ©}Í©`¬ºß£ébÊ%‘aûºÔç¡¿`ã§¡,ÈvCY\(‘§sü12&kÜ\ƒiÕ ×^O/”ójòB"5c„'°7¹¸*Ÿç&O,ŸD}Xæ2%šyöf.êã$p³Ì ¥‡À5í’É Nv×”»ãj«]eÉ#ñ粯±É8bž øç«6† ú§kÌ<¨Ñ­E zB®`<ª¬,ìÑ nìÎQ±Ö]"|£E ‚˜Öêú#$ +XýžRÆÒ7:~ªA¯P;¬NƒevÒ–Ë‘po)'ý„À9“ fPi8J2e±`j}jѰ 3T—9'•õSÂR1 ‹)i`·³ÑÒöód—\ß03TN AøòØÒò‡»|ØsO ·Ý©:bA×ç<ófÔPŽF»–cÁìÅŽp¬tdYVŠºÎègŽŽFwÃv1Ë I4ŒÀÛƒOZÜë?iá UyPçáÒDàj +F€³a"v/M ÿ$—@¥D— ®¦˜ 9§Ð>šbVø¸}cã§Y¬q³¢¹¬*zÿ÷M ã: T²…MŽ•9¤l@eïâÁ?ßð˜× >^ï#ðÒpÏ¡3o}c oïVpü3€¨Ü!fÑŸcÌ ˜5¾É ìcmÌÛi ߣ/ÿ÷¯è Q¬òÿù×o£‡[÷^‘ÿ'z]¢ÇŸÿó®>‹ }} "j•Iõa•rˆè¥Ê$z'%=Ç—ú|×®é|Z$À:«Lˆ7ñæq}ÞºAA,æ“«(À±œÏRò ww÷„a:–4»:¤.;šç…`F«S‰yðö:Ýåh½~•G¿Þê׃ªßùY­ê#ú¨Õ¶§£ß…*i˜èïìÕ?Ö/ˆëæR-w׳oFX(\ê`3Ò=I.‰ðŽª³¾<Ç á"ßücùRpö•ï¸ÅÇË—G'p3Æ–å̬õ­¡•xOtÔ­Qäù ZŸZŠ|_KîFÁ'·q:½:&ɭÚ —ëSÒþ®ÞêÎ©Ž yÍÑG0ã€D1÷5¤©ìÈl'34Ö’¹œ•ßRòÖô‰ª¥ +—f·`€£©!U–³<Žl†Ò!NGϮ—|’é¾üI&ïUÕçAÕ).švL&;ʤï^©âéÐ\šŸîŽQË•÷›K>Üz²·kXµ|{ø724—´+Ìþ£ŒÂ{x2jjF™É+‰ç5ÿòÅÜí®±« }t2iË0K }ÿà¥Ö¸®wô\ç&ÍöÈÁßIAÿ½èA¥ºúìQ•¿9tú"Èa@ª]ƒ'rè+=ÊR\Ñ£'Εõ4»*L@ÖÊìZEqo lüåÚ:°æ«„õ«Úªáfï7²¹d‹,7C°S ÔÈ®•åÖÚÛÁ÷ü…e¹¿ã?À² ”’ÒA¼Çnq¥[Îd®i¸F6±q…l¨Šf)ƒ±•µð©õ9@òÀäÏEüµ’—ÒÞ³eRzo™÷j3¾ç/ÐÁ…üeSÓÌÑ.óà k¸Ü…„¡7æÒ–^u…töòRÐÓ©ú÷ f +>i9¦³ãøæ(n9NJ ¸ç˜Îà¨çU£çobŽÓÕ­å˜Î iä˜ÎÆÇ/ØøÍzVi2§õ Þ°ÿ´“ÅϺžeRf ýÿë€M’9™rš6—×V@ˆYlWD¿™š'Àã£âò Y÷uÞ^”aàµm“²è9Lmíbô7ÐÏ üO‘n—§âxÂä†QhdÌu Ë!¿³bï–Ùd½ËÂÒ(¢ßé[*îsÀÞdkSšñ/¦sÖLúìS +Öq}¢çN,‹‚kñ p籜Å,±ºÎóùšvPíg=¤Öj÷”˃‘ÕnÜ䕈۲¯©&£æ¹‘O„©V·4ÁB|¯ƒ`jG)è¹ÓÏ üÙÆ«A%áÃèú}ã…cÔ‹§ê0’eÔΙŒóšPr3y¢“PwR‹†e\Cç2礜£ŒÃ`*b É ödalç=ø|&MmÏÊzä@ôº¨µ +©9h(3‡»î¥JÆ‘\‰.úÚáEm—£ÁÑ®%žŽbVìl+õûJQE a:B4L/Ú%iE ÑB¨X:ìÑ … a 4xßùõÊÍï¾·xèçþ¬Æ@'k\é5Wc¤Üÿ}-Æ<¿ÈGÍ݃ƒ>´Ðjš=èéèPt „ø¸·½:ð׺Ÿ;ðG„à½WDòÒ}Ñ="ÆÿeUY쮈âkéªPZ[´lÂS©ÒUokR÷^Æô9Ö •ñ©šë¬Òj¯8æq}^m㉻\Ÿ7׎å|b +vwO w4&Ðvv-9Ùhµ[Uç_n"ÁŽË=r«Å|?»]HÎ6ð‘îYÈÁ×I_)(yA6ƨ‚þú¹¿ÁO¤p×Ö#…ñ­ÿÂß[®îÞÞúV–„ºùG:÷_Ú‚¦YŠ^K®>Ï[¸éôêÀÓ©®¶%j¹P¶ÆH|®OIû»ª»¼HIi§M³ákÇU`žûR÷9÷ÙÉ ·d.i=Á)˜ýËë{fR—’VƒeÚ<“?צvt ^f³ÙIå8?§aЊ[ø’2ÁúÚQ™ ʼ,u +úkéçeæŸNÄ–è¼ý/åÕ’%[n·òVPGÿÏÜso“z“Þÿ  AHe»³gy"¹A€Þv‚ޝÉro‘§Ú±•¡Úª¥m¿tSsKÍ%TC®> öØ0þyÃ#0¼ÜÀ¢Š’ÿ¾ó³Á'Á|*F²Ã äìsŽà“Ö?’fåuPë[ê\R–\AÚØc­IYrUjcœå+çÓ„®õ.ÔÞpPù^±§9¸×³„þÉÌÑ[m?a•’µ/h'Ë=òI¨ž…MmŒï[WPJw©#†--IäÒ¦Ÿmâ%6²Òßû|ž2w6²”w}û¹Bd9($ÍWݦ&ó㓞Þ@P)¾½qÀ§7˜ŒÔGÑ’o WÄ>wðÿöÔëúe‚Wzã_Ñz#H’1Aì„“¦¬½-íÓ“[Bõ¥’F/¦’’„"—‹§ŒŒrJ¤·D‰†-Ý=5WD^ÅDQRùQŸ…=¥<.SJ“—ÒÁÏJy¤Ö*e¦R†ÐYômvlÞIÀ~D¬\r6IQXStÞiXcBy SsCs‰2[21éò¼%_X{äÂj°ò`ÔlYUÄîvƒ°Ê›‡íˆK‰sOÀÖÝAše³cjHBC¬fóR¡BC(°|YJð±¦õy+nÙ£Œ4;\Á€„.ðÒ“½“ÏŽf”+Íl*<ÕÐ8û¢»È%Ojx£ØC®sÏÇÔSoärð3rÙºÈU¹¼§IëxÉÚÅ©}É>žnX#ƒ|ó*äkÏŒ4ð¹;Eà¶Á¹;ÝÝtÚº{幸‰ÿÓ8âîp`1y‰ÙK*ËÔáÙ ö£Á2ÐÈ)ŸO•¬6äæ®âÖ(06õiŒÅÑ‹æsw°hÓA>k‰K%Õ§œ>ÆVS%æz7‘H§‘mõÛSÿ±”*^>ídaë§³°¥º#Ò”UÀP-7x×ÝÒwÙÒa^w>쓺´êÞ~¼¢Û‘YtMV¼š¥þ…å<Ÿ5q¿¢ú´rhÝÉÒû´Ù+§g×+ +p”iÕTË^wP}Ž/´ãϺg +Þêîb0Èò—Ëk¹g7À5ÇÃ}VD3¸¡g.¸ËÒzÝB ³ Ý.;楹Ô.jR*#â:Rth1;È&ÈÒSä}òÐÑþŠQâ2‡Òßë|œ w*šÀýVSyØrpÚv†¨ä>öˆ?iôôÀѼ¯7øô3Ñ@Ö¼Öj^ˆ‡ÖdÉfÍûG¤Å-åQÛ­y‡<#½=š¶!¬}›m $ê^oÍ‹œöÆ’·cØ÷GVÇ~ß šÄvæåœÁ-s 8‹tÍQÄŠ_@À޽a¾–£ö‘_Ÿ³ƒŽ÷éXée°â…Ÿ}‡”ú°ÓÀÐÈrž@²Qîs¦>ö.ì%¬~f/©-0w³Bj+õ’ãZs}Á–Âçe¸*m}]Úøû5ؘt”ëbR"&¡/Ë¥\f³#Õ¾õTêÅôeL*æâ(*°©6•¯Gîñy,ª§°ÿyÇæv| 2+Öâ>[Zª·HnÙƒ´«ˆ¤^LÍ…!#—‹§ŒŒr˜­·DɆ]–ÒµÔ\9xõÚ{Ýóê~ß`åí„Ô”·À­YÞ  ¼nKcû4núéDâ“g;RWÈpƒƒ½¼-€rÔb,Ôs¨p•Ø{d(åí¢÷À j—¬pN.ÿ À$_=­†P +«)DèhÈÀ™¦uJqœ¯M¶‘«)8³7_å!å5LÍ Íe\ÌÓZÀ‚Qš¬Á‰Ý×5dwÜ>÷|/ËÏêà65…ðQ*°uwñ¤®òöéAÉ¸Šžœ BjæöZ¶¡¥hÅ-뀰óÓlòˆJÑFx; „ê”’%ƒp§™Üò©‡öz‘…ˆÀ«1ƒ«1É«ƒ©7&ÝÉ·ÇQ‡ÜÚ˜”'oÌÛÒÚ€}ZÃøéÔZ©†=bx¾Cxºš¸èÇnï¤-,¼}Idô¾$2z_Þ ö¥è“p2¼ÛR’tt~Ò–¸Àh§- µ¥>#ç^r ØÆu’ÞúîŒfÏÄ¡^PA&LÅš 7a ü¾Y”S{ ƒT·TÂH)ÚK˜þE˜ÛÒêÃ>­’~:Õ<Æöl3U´ Y°µç¨s‰‹›1u—‡1Ãô07cúÙ=ÌÍ®‡1æ7cäsØcäò#ÆÀþ1Ÿc*-3{Ê]†üÏ£Pn³i»8Â\©€ 3³—bsÏ£P>Gòll­m¤Êb‘U WeΟg>Ê­“ûÜ/F•‘J>“4'ÀjqÑg+»%ºážØ±P™ÛÛÙe‰4`‰È·Ë³å׎çÈ#ÒüšÖ¬ +Çšå€ßwÅ©^­Y8MÖ,œPkN½5ËciÔdŸFb?Ýè. ÓÛ{_àÆ%›<3ÐòÄŸƒ&nõ µéGHÛ°ƒÚ-ýkS»…rïÝrƒÚ-ø!®vmƒzâ‚»Ä2º Sœ6QÔcÇh1:zšÊÚwo7[™–߈-H 8mÆèó°S~Öbp¤ãÕ¼ý«.WóðûîèPçÛ¼HpžoóRÞ¼y)ÃÞ¼·¥vÊíÓzÊO·î#"xŸRÞD¼ÍKÕðƒ¼‘çŽz% +óí]ª‡÷î jïR‘¬w½êŸõ..0ä„Õ»zW sþÿÍ.3«±cVRÀÚªñh¯ØSsK%WÅ|qK}«*–†jt…:>!ðb\ÃËT_ÆðûgrP×!êË8\4Õ—qçöãnK›ÍìS‰À§eP!¨¤t“«ájõe%?£ZÑõ Š|ׇqõ«Íú2®~Õ^_ÆQêq7¨ŒÃç¥Þ„Ã1­ê‹ÂÅ_ñBˆ±×_þçïù×¾ŒÃ¿qøGNþýÇͼmþû&YLÑI¶7 ä);h$#ótu ú±,³·Š˜†ƒ{|V¬Ñß1\6¾à"¢3¹uk,x>¢Ó~?â–ºdôW´à¢`%º¡æ¨À_r¿Xlh)"öòѶ†rgnóOr±,Î$w{sPwm®YÊš&ˆ+n0s㋞±‚ ·{¬ðû1xß±‚±ÖÝRÇJ“O¦Sŧ©rZ ³Gëu?Û¦sÄw¨TA–´ºùç(pïPJ|çœsƇ +ÈUâ;Tˆ…>TnP‡ +qÓ¦J‘\ñT  2O"ü—g𤄵_=‚TkD›#òÙš ·ÂF¢F¿Ò@õŸ—ÑFšhÚE¢ãÈ0EéQyP-.¿š gù!‘%{a#D‡¤¢a¯@GU=~æ1º{ÕÛ,E0ìn†8¶a[ίЦÊ +§\ÀÒfo +Æ(oC“îø„å”ßMÞ2· Y +ßð–U?¨'™ù[=–;Þ²0X¿ù–à|ñÏKÃlðÌ\!9ø¿R›3H˜0ÁÊÚ25µVtü IÔèoiè‚1×J‚ýh^äQÞ&-§æ`¯.w¢ŽÂÃ<¨Êá"Ù4ù™c _tZJ bGq$™N®q™‡ë‘ “U°N{£‘LÓ$·ñ ÙS“ÜÄå9ÎÏkâîryp&ùä¾~ÓîsÒ¯Þ¹—2’0È7máÂ¥±kô)—ž—R$­¶všòGú¥=VߘdŸ/«|593nYјÕ÷‹h}„ìë~éBÂÄ•g¯ÌQº~Zµ{*Îã6¡Ø“—«v…þ~G÷Û–ÀIæmð퀀!ASG!ë$ðT8ú©ü1 +ÍvJ¯g)ÒÝ“C2Å*‘›¿4ùa§äC®ò@s½±`IçÕ‰å' ¬ŠUî€pf:ãÔb„»ŸPß2Çïî<85ÆÇWjÁVƒÈpî‚*³åÚ×+«á¬='7óôò žëÌõª=‡)©N]ŸThq½Uƒ[ãsEÿl¯•ðUÇ^h ärV.+fR|®uÓ?FV°fRöOo/6`eQ¨¤,)€`Ñè{ˆœ’…ÊK+æÛT8Œçn‚ÙvÝО£ÊÞ‡ýz$•¬íœ²Aêè²s;éϳҜ+D`¾å‰©AÚ_G‡u=µps}µ…>´óu5YŒxjc«ß»nàKtƒ }{n›NÉ{ga_âdmYÔ‚ÆEÕöÉ—Ð )ùÏ/kíËÂ>ôo ‚9Í2ÖsÀõ@0Žš É´Mý„e‡ÃÛ SÀ:3¢¸‡—¢`N¸•ž ŽŒ²@g°4¬îÐHW"æ3!²Ã”`Q^á>‚¢€òÞ>bÁ£,‚¡[e'W|¾ÝÓùidË9×§;¿F¬yMÌÁî°c†…x$H%¯L®ÝìõY*Úãô¯U¥›KüWJ³¦šúÝ1çcìÄïu ¨ˆlIú倳Ìu7„© qP†¶ÎÑyxÅé˜Ã,"ìÂtòú¸l𠳪Ø7¼ÉÊç–Ó€-q‰”ô¦9º’»i¾±)઼mÚcŸbb¿QQœ¤/AC`‰mAcàZGr Ö¨|`KÏÎ6@5Áà%˜u×ͳˆ³‰»ub‹ŽåG?:so© +õˆ¤¼ +šÌ ÜÃ’«ÛÌc7$KGˆ¿7j/Ag5´J®â +O4OmêS’@S‰ki•ÝJ¿ªS u´¥·~L›*@ÛXzy£µn²5˜ì˜-%Eóª2jèŒôBö7c°/{¹ Í†ã¶h1{—ÇŸÿ¸ µ‘“GŽIOúôS°#F ;¿Ñ§ ¤Uì ¥óÀYQÇú–8„,WÓò­ ÖÑÔ*øºÆ¬-߀b¤7‹oÙ¨“cyìõž¼4@nã‘cÌýÀ{L5d³ë: ÕŠxr^¤*t%¸ìUƒ™£Ö[ ݇ïϨ…íK‹T´T³5a÷šÒ¶LÂÌ öóM0¶™-,!ï°„^­”â@.)Z)=SóD[ãP&«‡/n“ ë[þ +lÖCy£§dµxÁ×…F%IŸ‚&95([Ç\A&“G¿»™èÙvµ½¨B†1¾/6ü´!óËœ`“ùd_D÷)¹'ï!š¢Ò[ÖI +o²@' À­(ÕeB= +bomyÙªNb/Zì@rZ‘óyDAë +^4ÚÍ¢ž•ÃxÇC=ëá ÙÖ¢Êb(ï(Àtçä£éEä2`\†Ùzt‚÷, +h7; É›D9r8#{½Ë„ž¶ž˜\¤Š¬7 ­ý\%»zgRµ~˜ñ3N^ð­‰2•¬iÉ¢`œvçœè£ñg¢HÍg‚3öB05Û©N²”#©:±²­zIMæújÒËyº4®$þ6/…ÿ +Œ¼ µ0“W®µ[É! +œíµ’"3‹šÔËŽŒš)Åýœ…kŽ:›5j"åÜO+˜î°Iši=–] æXöa¸s ÖI•8ð'Á•ãêâ$ÆÆ¢qbµ"Nb[§„W±zïײðÚý dv]Nœ€$ @r=/wk8ú" +I${qú¢h›áÙú¬Bôm¹:Ÿ`q/#í!ÙJ»5Ú@ôeh/èÛØ“~àÒøS«‡ˆ7t·òþÌØccÎÜoïx4xU/6ý­”(:ÿ Ý®Ôy´@Ú|1G|+²J+éC²ÞÌ•Ž]0:0‰Ê;Å‚×ÅÒH°½[7XN:ß`~Ä!&:’ì jœºø„ÊD0Õ#9ú‰`žöbÓs»³SŸH²U’¹ÙHÎÏ Ñ¡qñör9Ãê"Ž¢å/2b}Kûþ\¼ûº1ð·nYwp-]³^øþF>aHTݶlö÷KË&~¿·lbÒ•qY·QMñià óåå¦Áµ¥³WúN³0´×9éf gm@.Õ¸ªÌf`–e¸ùÊ }¿Æ@´ÁÜÛV¦@ èâúëQJ³y³W“‹ÔÆR©†9RS§>ƒSlدל¡A£æõvúˆAß>¦ã¢ úóåäç?W„šï‰©A7ƒÝ÷Ì=HÉ{ÉQ:@æÝU‡Ä¢£1ÎÒ‘ãRŘÁ«\ ˜:¼Î—Ñèeî{`)eó×ô^ßÔgPÅÛè÷3›‰Mȉ3É2^ŽÈ6ãlŠy…Œ³·!³©¦¬gcàßõ6¼0Ç$ã®V»PÙÉá;áü Ê;‹â(ØûšB¡0U&œ“-îwZ–Р]ãTÓ1ØÒy|9ÉÎKû׳•Ø|bŽAW¶~Ø]VH'—}Ûµ`‰þi°cØÁ3®›ŸºÕØèÅY)qfÔùŠ:À1:EÌm†YÙÔç6ÃLì`€Ãm†)|²#õ¼ #À§¦½Ø¾ª³o °{ÙÜëœ&g+ÔN´âám1ä.ÀÆoÕ±°èb©¾Ûge–TÕ½ÝH\V·¤@ÝíÙ­‘;ðóŠï$»¥3&ø–ÃhEWP–áVyûÕU˜ÜKE%#®*[M\V(EíKŒ<@ÝÄR# Ö£ÍBÞ¢m0lbg]Ü”Ü /”[“`c¾Xªšzi&¹hÃe8hªóÏR‚yÞ×™ó»éjƒªØŽn¾Ž,?§Jâ‘WyQ`ëœÂ ©ŽÚ‹Í©I¡àvhsOŸ5S@œÓM0—ƒm˜WѦB ÁpÀ†'E%Øo¹V*#ÙfÓiÏgq¬$Ùˆm¸NˆõJÖÏ»„½rC“jI¤ 5s—>1ŠIH¡23£¬k{[1\ "˜›\³%]Ê™c$œçT¨•“Œ·¨l»úü—÷=e{ÔÄün½ò‚nï ¢âÜ4ëÒ:úôà[uþ@ÿ ®™rwþ!YF oÄ3é•.èžæ¦ºÜ%¹ÉlwÁ=«å 2ŸG^ õyÄF~K|«ñúuíyÀaôΞõê ‚×/ú¿ârY¢È/nª‚»©>É«{ ´çY0çY0N·ÓV8;ëùqVñçÑhçŽ(+Ðoù+}˜WD±ð]˜5¢Ý]—;¨C™÷Ô®}žUÛxžU;4—IÔ5zúÉS0!üõ7é}ËèV‹n ‡…üœª4rÔ1«ˆd«6€M¬Œƒ-?·f‚ ÕÛ(he ½†H†$ðZùiL¦_ÿ£¼:®$Ëqà}¬ªµ8î[ÚJÿ¯A‘¢»÷–AÈ@HèªHáÊð_´zhCä•i¾ã¥9£ŸÌž 4oÂ!7ï9ÿ$YK#.$»ü +ÆèŽ‹7ô¯ƒé†rû¼-ŸƒñÆ2åY]æøCÀQÈ•X#^~ÁIõ±Ù͘ß1ŽXï'LR}×)™±*µ[%dR¬—+b/ãápÁ3DK#cµÁï×;æàêêý39ðœRs»%ñp‘\¥Le’€!nÉí·°uöš‡†9ºIK'ÈD<œ)9˜ËE¡D´$FµnwDŒàzGO%›öÃG¡EÉ“iàsRÄŠýdjÖCEÔ´è«Ñ5r’÷燀 ^z~zïO]‹,ȈV Y>$†½Žé- Õ¤*Ø_ «“Šhs÷Ó Ç`úå7ÿÕ·lMÒŠFåM Éľ咮¸­Ú‚‡Ñ"ÊJ ¤U¶<‹ëê‘FU°Ù ø%µ:R+bÑLjøh$Ñ|rÌÚFö˜å‰ðCYæÔXØê5pª?‰a¤ Uæ²{Un~¯"q˜%}7äܬ¦íšÅ@¸»o/<Å@ œ#¶ tîú.ÚlüOÑöì›\«ØóìÛãDÜñF2†å ]]7&™U¯ø#XÃÏFÔ]è Í\´Ý²”™¬ªÓæLqF ²æ0Vò@5‚w?tŽZ¯xIGm]3wÏ%˜»9½•-Ù›9ÁWêäôÕj¨Hö–Ð,âÑøËŸUuF#¬ß^ã|–”vkÌ3”‘ã^Cþ8¹NÀŸéZ\XRÂG„°g—TJŽI°¥P-ÛÕ=2¯GõÜžªA©–ĺ— S(!›X~KL|Mâ¤`ì2dXhe£M/ =Ú²–c³~¢Ü¡kùÀÖé7/«aÙ<÷óÏöFï:®ÙV<ñß83¼3GßÎðÙ­‚Þ¡¯1ÍÄ»±©ñkMô(eL,×:¬7Õ ˆVÚ­Ž7’è”ÂÞN•š_”<ï‚Îî‘é~Çl¾1L†X^‡iº2¤$[AÌ&™ItBucF-ãð&îQ[Ø)…Ñ-sšú¦›Œí)™>¹6À©è-Ôêb©…`b£»Bò’—'–cÏx‘uoIr0Ô“ãÎ¥àBàq[—ÒËÌÄc‡ YQy:¯3—eµ³šfjÊXàX†¹Æ™·öVõA“áCÐGó·±cr lë88]UÉ2®Üõr߇&3‚Ú;ÕýQfW`8mÊmÛÃÚoW†µ·JœS>]t™´Á?¥ˆ½ˆR|"Jø"šÎ‡ˆRsöé`Cþž„jAÒBs;µý_ä=¢—é yÏAxäF!ëbrŒ¼å‹UÇAžœ’Ë% ,¹&|`qNHêªÇ7Ù¬QSØl[Ôf °ö%9[2fËM ¤¶qå\ ±8ËÌz÷a8Fv®¼ž¸©;¡0S?¡mÌs­½n¡£~sÅéT!>WdJ™u˜ÌƒÀä)$ÀŸ%çf\Ù¸æôxeè›Æ¿4ôùÍs%èú6 IWË_±fs¢E #Ûµ?ü‡&º´œö°1c(Y›èýuÍ=¾¡V£ Ÿ… `kT7’±t]v‹[èØ±/ÌÏýré¾Lc÷'‹[_»Í-lO¢[Œ€[÷sèrë~Û`*&-hè¿›ì¿g3YSÆSðuK×Bš_Q ©ØæY«Ahž^$U˜‘ºÑ; h4T`çÊ›íl˳™¾ë]TrTÇ e*†Y®w€/‡¡X-b2l™½š\¯v¯›\‘­ön}™`Ë`“ZÁ Û¦üM1`2Õú4™Å²!àk+5dÍó,“X• $Ù^ŠÉaKZY=€^•8ŠBä«#`JJ:ÈK,B™|ÀF׉?ßÌK¡%źÌ=žíJ^•ê†Ô²bèÁzï2æxÕÏ?§Úλ¡mÇ^ù©œó’±yeá~H;±æ*©×Z QÍb•úâUÖ˜#JJZ¬`8Z©—&.Ã8‰\@KÃÔ¥a¤²p™1¹  ÌD:W»#·«b­š–ºV+êÚÃdîAvVŸös´'`Æ×NÌm¹çÊû-t&Û4 bÝÃÿ}¡q™‚B’?ˆ€#7µi, +Y/µL¬( kçúŸŒ\Q‘=%a “£›–¤Ë]a‰.«Z,;;ã¢×@kµ´±"Ș QemS°dKfa*/,t)byXØ’­­Ë5úBÙ3o¬ãÌ}ÞIäܼcIdÁ¨ºØ=<¢nˆnWï¨üÇûÈÄ4äÂÉwF6‘ùÝKö_æéd­‡"U2IªGc äeŽñ|̇ñ…á>IÖeКóX;@Oûu[ à +ãVáÏ’†˜äÖØá÷Ö46÷A.ÓVÏ-p[>¡Vdý`ï-È…1j†‘aÅ +ÂH#°í…Û0$àlèh<;4°À0Íp¤p¼¬³öGy@ÙX’‡öµ¢lÕî ¬ÆuG,äÒÀRÔµcÛ̽Îî]oCïvu„Þ‘N·o[žâüFøšüBéÖ×Ü9b6r•wýºÐÆY«Ü¡Þ˜âqi\¡~%ÂÈÃ.Dø+™»Î`3Keìá9A†£dWÈ=÷ s§hu‹}X¯ Ëq¨œ³^æ°NbÖ€é”6³"è”õ1.uØF:`Þ¨np1VÎDOSäú6ÏL¦ ôÚý4t/tŒ.Ovlè£'…¼x2oªÒ˜ƒ2’›y²c=âÀ§ùÝLEvƒ+LbÙK ž.æÇlé»äg¡Ë™¾ m @Ë(WÀ°Éæ+T, Ò3´:ú%D§v¤ë—™‡2.r™/æ–EbC¬Œe +†,æËéL¸ &uð!7B‹ªÏ”!¸ª,Öup¦˜%¤Ó¶dx'uágúø2ª8©%»îö¸Á¨wìc@…y¼´ø†Ql\_¶ýM-2Í!ç}f¢Éíö¡×I6ƒÄ€ú¶eÂ[¾MtØèßÿ4Ô\Áu„jEÄ;]RŽôU7‡²¾&û£ž&†Éa”· |k }YôD{'+!èi p NY1#h^7ðÒÀ­é´ ÚËèzÜÀϨÁɦÀdúвt‚VÞÞV~$kЃ“fäE°l;Ýxp ×ñÌJîïÇ[å|[î?ìYùSœ£m™BퟯhÇc3=Â{É:g¦;àÉ6•¿ øiÝ›˜“h+Ÿ=ܯN ÅŽy¶5ꊹÙvßÚKÀ“­[—ƒ»ßŠ­†Y`'…} 8Jq¾ìtÚíûðÏS´·û{Θ|â ’Å&â)“£Ð±Í;pE‡Qü\þGy•cIvã@_§Ðº÷Åœ'cüÑ!äT:º¿1’?»J%¯*ÄŽ@áª{'OfÉ⻵°¡ÄSW0µ%9jcç’œ£&û|éDìlãëi±’‘ 8²š°3 '昃K¬z.ÐuNÌù‘оÞXhî(p°Ç§dë}dÓéUD3šIsI–Ö†Ù‰µh:5tàñÄR•ϱ^æ›N¬“áñC +¶¼$»Ô¢‚nòÍ ©6‹8²¤Pæ`Ñ$䥯ϖV ÀÊ£Tñ2êb¥+»¨‹ô”L»Ò·N8£:wf¢QÞÀõú—coäú¿Ç\Ù«9ñKNŒpÌdá:õÆÉy,'ÝÀBÇAŒôJ>3ôÃh +œæj`¨U•¤F1Ìžõe«mv;µNÁ1t ¦ª ‚qØÑÃä*g Sæ¶ú0ɦ.±ÆÊ0±PÜ[LÀªŽôî’;V¥éXäçƒä r¢FnØÝuâß!X³UEçˆ*X£Ç‹„Å‘I2-®I‚©¼ƒ“óP©6(Kï÷¿ÿú¤¤i`©8 mI +¢[AèÇÿû¯ ¤†Í¼Ådj6¡úÛ¬cZ×Â^Ý0(j2kr½É,ƒ5Z0cƹF6Ü'z֯ѪaÔvbºÒa‚ÿ?÷SiæªÞ¥V+î sïÔA'1co‡ð‹ÆÇT0½=’¦¨Ú •*`²dØRÕ%Ü7³L-ˆžýó-YS-Åt–iõ”KÕéŽñ¾Ò¢Ç‘²ÀŽÿëVdÙžpz†R“a-kŒÇ6hZ£zÒ~½§Õˆm³$-DÀ¢ûXv…ö·]*îóñÃê7²X _Þü‹`xz,±¶BÌíŽz².¿òsJ™\1ºrŽ1˜ò³:eä%k­ÈåHžp®Æl”WëÏÉ›O¶½O¹¹”^7ØÆóç ×@®üÒš8q—ƒÈõüs#åìhýIšuŽ¢¡VRË×áÈë©4KЬK»M ŸY†ƒ¨f=ÂÃ¥ °¦¢4ˆLc}Û²Q–Ä"Z`³5rœ–¹Ê ©1uÕK\ ˘^ƒ9±¬§ÝlLúzx÷q†¸óðÕ…|‚˘OîŽl'aæaÒŒr¥¿bóp¿­__ÄZ»Û•-3z^ñ\ Y–Œ«ˆË3q$aI ÙM—q+Ýgi“H>Êÿ"²Â©°%öõÁ”eÚÓHIs&éÖ!-‘Ä‚_¥÷Àš†`Í®²UiGºQ]%ˆmW‹bwICÉßI­rlÄ€mê’ËöÀý+5xxÐÎþy¡œ)Øiùg&,í¾˜ðØLxÿÜ`TW&l¤`/=®ý88õt"Mp“Ô™T²âI§³= +õ¼%ãÃ*Ýï)¾F*O°ÆÖãÅ\¢,êâ¸n +pc!-É„3ç¾)(‰á°î”æ:ëŒ÷âQzHöuŽ:ç&èûõ¹Ámç\ÇÁéÑ`)ÿÛ€ìx²Ò3òà‡Kråˆûdú…è&¹ä™wÒY!e˜ÏZúfe²›Veö÷Êh±¢;Å'€i]^à}cI¦Â}Ǫ̃aó:Ô!PÁayß4‘L±¥rƒlçpÄëI—KáL’j"ç„u† ±*„ÅÅ^ÄædÇ;Æv™Š·¤aÜ¢*¹5‚EÔõõçg™3O³ó5lñzf„ŸeÝeXd‘ÄX^g8r%³¦Gv[÷ÿ³éæG]9\GÞìE±,ƒÕœ™8¬õ?ð3´ë£[·OæÞ&‚ûÀÕm! +'9°1 (Ì!ž¯C †c"ÑPïØ’¬IëÞßVÔ‘Ø2³Qà<öø¬SœøõmÔlÀùpgä?OJ±À‘DÝE2ƒ°µ0ìÙθ22ï×$R¹’¹®Ü ‹FÏèˆÃ½O3 .§ÐeXÜ4, +‘;#®M·n²&„ì)i.8“ÜóÑ¿¶ 3Äpܦ9CÄøæDE›úEl +¿†’jkØP`]Œ(ŽEðÂtV9û†Ê%Í4°"¬LYßáaÀÇ„ËÁ±,¬X¬þFè<¢àØPÞï6³üì]÷-ñ’Óo )<¾myKóûð²¶ï‘%r1ÃÄÀ ¢ô§×n6¤êV³2ä³LQò&ýb;ðVB­"¶øãQxò#"’G½N¨ôÚë*»¦B9ü~A„F9µ}Ç®ŽfWÕâ NEüZÅWy°…Œâ†1Ó§¾X£aP¬â2¬b†'+l\ÐãXª²#NJy¢a×±þÕnX޶ŒAAë’Ãz·Ë¬´ „ûÉN!èU‹GFWœ—îi1J(ªuêØÇoG$бëäQhÛñiÁÁh\ ܱ°æÎ.#Æ7ä9$CgÁÉÿ’WfÌÖ,ö%ϰo-m6˜€9òÚùli£—Ò˜mK½É çXVmnÝ‚†q&hcª2ô~z[_tç_‹½VƒýØtÁ›õÇI,¼+oIÃÂÞ¡®1Þä×k¬’ÙsùàŒÅ²çò¥¡Ó ­<&2)~5žÊ‘2” +ÁX«ÔQ%õfoEÊŠ}Fåàˆ%&ë=°‡ æ,ï kû Æ ½|ž¸ü¸BÈfµ¯ÓHS±Ò]°Ä^õë²M¯=ðÞ»%±eâSeo`º„@s×ǽWÅÈ5 ¶ hUrA$åÍÅZSR°Ö7#ÿ¤P 0U™Jô»€™ +˜·åïaÓºàNÏ2(º(r-¼ÕE V¥½cö"˜³;º b¦lIS °6paMXPö„šÕ¨‰.±,Ùrs ®X*¹ïß_õûqš¹Ëòph×/À`ñ=$i†rël˜ç«€ýu€˜²;B\f½=:%—ë[å£ýøÍeæ÷g†˜q$6H./‘6\Q=¦Ëó?‰¢†¯€¼Np+u•»þyˆ—ð3JÙñˆ{ç©>Å!&fàâ¡§ŒÈ ŠÉÁøCvÓ¹á¡u>Xë—Fwë•Ûèôë¬EézQo\–U›‡GœNfvÙ×b]qpÆëmòÏf≖„d\|–àF¸-Á–»ª\Œ–*ån#¸(-!‰íÃ9íaûpR{x9œÕ²ãzëwj“ƽ•¼FdÞ o+H^Ÿ0¸>C}ÕGo«™|GRޝX[½,àb=—lUÀ™ÄF.—erKíD\cƒúˆÅDn/`mT(`­Õ4öâ’Ù‚¶ÃiC…½ ]Ä¥kö¦œX |ù´:rª…ê`–Šé³ÓŽ»”ÛjŒaò`âEôK~²ÅdþáÊ{]XE¡Dí½Í%eÒ¼‚Ÿ6K¹~·®ïÔ€«ÅØÄÌîŸT'® ˆÁCëE,V*°‰¬H¨`Q9ŒÌQ„O›•—ahfÉKØ!Àrã)–ÇlbÂ.o@Ô«¡Êa ãÙäÆÔñ\Èl ¤.Ñ*$°&cÕ$Vnm>zX‹k°n—>~;£1*oÇÛV<'ƒzÍ1œ™NLÔ\þ”BŒ *n±±6˜tÇ$û$»éTø:0ð“Ü“6;7Þl‡jLøeãÊ<¼…A¢™mÀ"„™Í‰1ÑtÄ·æ™FÇrãxŸ˜j~;l¾á–Êl `˜ˆëÛÖpë‰ec…©æCú³=7‰§-r~KÑfƒÛÌkÍß5ߨýÿ§¼J’c»aØ>§ÈòKó°LUƒ¸ï¿ @R”ôÚþvv6šO¢8€ ‹ŸC?þ}9SñÅî–'õ#·FLëž)Ϥ!¼uÿª,šÐ¸ãñ°Ä€\–Ž Ë›ÃO†F¨éwΑ!3(ávÎsM 1xÔ0ü…ïÄzšÚ{‘´|ÑH;%U(´qº¬•8Å®¯ùW@Ä•VÜõ-DY»Rë“1–úÆ"§Çàtð;r.¥óEX8–ú ¬E¿Wß r}Â@ãw_®d|NÔª¹ßáÌ+œèD)ÑÝ:aê€â§¢âÔ]tB/AŸZ¬\Ñ1‘« C²Zâ°Ã^¸ìüqä+Ý«Ïϲ ¤žvÆ0Ü`ü½e¤1ˆõáv;VÃR±T cЭBý<,GÃÏC4yï˜þ­õù4iªïÀ”MWºñÞ: FˆÅá&ž×Ô¿ïçéU}ÏÓ¼J•yZ Eãv`mF çœN5t^»*Öç)žŸì >'ga®%LÙU±ë•ë cëSÇ8}G'O`ry‘,:Á2×»r‚ÒŽ`%6m(´7»Ù,Y8[Û¼8œÍõî¨ux7žýD=„úêgà€A‡æ‹&ˆ¡¥æZu;lãÊ=ïïÙQ9‚ލ@7Ì«–<,û<>7SÄ÷[½í4†oqò¼ +àç!HU[Ñãs¡kÇe`µkÙ­dœf+i;*;¹¼3l5ð^*ÏáŠ./oÅ7+ÿèl ‹ïß¿ÿy®™‘Ìm¾ “¡9ÓAªÓ× £ä!¿|@3ObØUåcd™¦ø±9ÆTNb½ùŒˆ©‘ 2ÚÖêõ°‹õy˜§:áØ½`¨î$®î‘ÈœÃí뵟D`©µÔ‹8§Å…6Õº1±ŒÔÛýŽ`úÓ*øøç} J»&¶Êñ©cÇ×Б½O¬·¦‘öèƒ51Œ M):}Pª8˜Q†öóëCâ‚ÐÇìÒ a¿{QÛØ-§X‚¹­J "@ Ï,TK@εmk)3Â6é|nz5ÎjàiÑÅ͉“5Íò‰‡5PMQ‰(˜suÛ2(¬RÑ#bø¼ˆõt™ˆ”¡¼ì“ Kœ +ŠU9ŸK‡H<µ«R6p·«€™Eû´ ŽJÁæ4¬G*2`Xú²³ý¢Èö¥W´Ì±#XKærN‘Ša›Ók—ËU¶>ýVŸ&X^.‡ä'¶|yŠiFö1È›¨’†±Lè‹ô.nöÒ ” ì˜Õ@¬á<ðu`˜¹ÆñvÜd#ú”~ó®B q7º¼[¹Ç¯­S‡ò”Î8¿ˆuÊ b¹Ú–Tν×ËGƒª$ß»K >bo Y¿6ªlØÃ>Ö‹a³u±ÃLZ‡¥0z‹Ð.&¥¬/f¬ø×X©ö­;Œ9¶d«? 3ËŒ €j—1!×úâOK²Ú·lfa»rfæ†ßü‰0/9þ4ÃÖ™ß5FW{õ4Õ˜~q¨cJŽõ:ðË… Â’‚"!½ñ["_ø¯¯-ãáÔl‘Ts[–~- lÇ¥ßÓÇ4éçrÊéƒ=³KyÊ¢€Än.iÓOA1~xýª¨BA¡vJ?>’~DØX)r"WœÌé–>9Ìé§P©3vqÓÎë¬vîI[˜•Fúa{WÿÖŽ›~üaÁè@ ý¡ÞŽ„›~þÚqôÌÕ]q¿fj¥?K7aù"–ÕMá&å;⌴ä P°ñ +fÏÌ …‘Plü4j8€aæê·¹Û¬&¹¡ÚË aÊq=»Ù9 lØCéII­ð=q˜{<Ðdv­¿ jbø·%píóX®lèûXÖfO¾:^0+þãkÇÃ1iDN^sZ:Vœ\ü@èEææÜ!$W%Äô‹ +ö1fŽ_Á‡Ñä¡c±…±T·ƒY^*‚uëÀ‡)x?ÊzW·«0`RŒéMBˆ`§“5/¥HN¥ÑdÇã|šf—g­Ñ°urMaÙôÀZo9‹w;*ÞTµóFlÝÎÓa@,°Ÿm¢Ø=›2m¨/û–Ehv:„NŸ™÷ý0G(b‹úˆ[Ž|•ߊí¬|ž\ÿieÖO«#+§µÚ<Ò +,ÜEò“NHézöÞKÑzô``!ܬ’¸‹=X˜·üê"Úå«ð¸¹)„­ h­}Î*‰¼ë˜² +°:¬’¢í2«à1ˆ0‹~Ò{¢¿ö1cÅÜy>Í7Žì:Ó`Çx$u …ÖH!.>T‰-ÁVtœš«@p«(zšÉ2HX6³¦S<ãQ© +ïðQ:ž ¶"IÅ£CuËRd.L„6$C©Zaˆ/À̪‡u³{9.éßïûøcG&×.̾íÈ·»]œö'ÓcÉéó*¸ìàÜzÝ 6ÛªËÐWL.±Ç¿ø×ÕÏ:ïk6:l¨Ùî¶çYÇÆAëd¹ª¢Ž×Îò²ÄŽ"BGÁå’·ÝWäHbϱ+ãš @У÷\2äCÙsÁŸ ~Òÿ™ ÄS~0`‡½ë1"×…ç\˜Â5¢ˆ–Ç\ˆÜ?æÀ6žs`OϹ@0œsŸ¦ç\ /å9N¯}.øû| +‰×\8ùÉ\°M*àuýwsaÛÍêsaÿ1^%ÉqÄ0ìîWäNi§ô'ûÿ×$µµÇŽ+‡xДDq(„.'+lO•ÌlDÙ%–ôÁ „/½µßº07äŒ5šÜ4вϭ».ð¥£y(>qÌqZö^t€žA‚KÌ,û£“7´ìLâÒ ó­ƒhòä–½.Ë>¥Á~&…¥eðd`úsIª–ûÓçæ;®öñv…£Õ% +ÜžüF|ÊíÐä[Q˜v˜PÓ… B×¶(lX²‹Âb¾óÅ{×߉ÂÜ?’$¿…Å«°‹£f~ˆ©>Á°xµñº. +Ûcþ—¥M%V# å]_ÞBw+}‚UœÀêac‰‚=Ÿty5QÀ%{5çáR+“ê‘n=};0—»æY 1h(aàvIÃí1fºWÛÅö·gA(«6>Æ|­ì´¿~‹=Éi94è=¸-k‹[îßd¾Úœ3U¸Ü£º§?‚ŽÉ±ç[± ½ÂÇÑúªyoHá©j1ñy<-ƒn¹wä6W¿&+:&½r +ýéÛúÚ!>09þÎâ{¢“ЭãÚiV‡\;¾ÒÕïœ(¾Øƒ¼ÖUî¯fFd6 +f®–ñœtFKVØÈŽÍ#ðDz£TÉizò#ºVÍ9Á·Ã›löSìÓnˆ¥d?¢çÕ¶˜ŒÌ®¦\Êìo;vzŒ`*²¥“¢Ï $LØtå¿ …§ZúÓÙÁœ^êé4ÁBuœ?È|èÉ$!Z´ýëã O?(Õ\ÿ ¢·í ÒÊ·/“Í=É©S£©„ŸÄº8ª©°ÑHMÊ]pEbú«û«……⬵"î±(«µêˆÍƒïÞóÍKšf:~+æ^\A‹ ;UâÓSÌu:/¯}¼Í@Dmý\Çß©}Í<÷À'ÂH¸\þ.Á ³[FJz)HÚ³cÉP¤‡¡c¨[H|3ryù’îoÜ,ÉXM—Ÿ_[¼@I T¿ê¥oƒZÇí*¯¾17«cA¾"逦©LèX×®"† ;7F]hOL­EtF¤Lç즟Äbéó®!ºs+¼XãÇé +(?ÖKVÆ•vMŸ·8ct¿VnµìC K±(Ö’5émÔ8z3ºÇwÄíú þ û¶§SvQ¸2;©_ƒŽØª38)AÕFOœìL|æûÒÐå˜38 ÷fêMWh>ĺc“ØÜ‹’1¤8†x©QõUµb–!îT¬È²‡+qÌ2ßCZç5Ë*¯/·0Š×ñ°Ã¬;Æc?4xé¬4?u#ß“çl¡ÒYôè2ÜRåúúy`²bÈ‚Õ!vљåý?ß—mº{ É_“vÉç¾7°°óf1ƒk¦%Û2@JÄÒÊŠ¦ü6+ó˽‚mGàµ5—B›³Þ*÷•‚eWÛª´µŸ”Gêyɰö³Ô¯‹Û5ôésÛõÑÍNŽrhAúõ#Tï¹ß(œ2p_©»;l?Sk­u °ì‡Š¶,S=v­ +Ä‘~^v`Æ”âºkQzá^ötüc’¼äÉã‹L‘ô /Ç‹¾5yÐ70còÕ4ƒ2ßô ,ÊIß‚<è›FñAßÀRúBß<*>è[¹øAß<®<è{…â ïÛÎè›Oö^gìMq-{ãÿS”½Ü~R÷ŠöAÝöÿV¾’ù…ºyppF™ì­ã̓½Ï;Oö>cã­Lhw·±÷ Í$ïÅHyKPò0åÕi”%VœØÕò&ä}Ûyßû‰u¶NÈ/úfFæ%y¯¯y¯iû oØEy÷ý"ã§_ÈýHòv°™Ç,²Aoò&Vnò¾ÍŒlï팔ylx7oä?R·þñL=|Jò^?Èû¶3²ÕÜ>ÈûŒúª.'sóy%æ–äÁÜÀB;™yñÁÜGî'sÓ,?˜›{#õ˜¦ýå·2þÀùQ“ü‰# ڮܯ¿ãké½)uØ(Œ”¾…}>ßP݃O×}“:1Ûñù ûÙ͈9^#úò†÷é¨5ªþI½¨GãKÏ)õ¢$³ã,[5/Ë[`(ã˜Ì⚃}6»æÚ"v«>1I¬(b£Ís%á¹ÊSS³µ©ç¡ì§/¸·Ùµ4Ï>³ûÌ¿y··3,#ŠåaÛ—û)¦­OØñ}/SücF^j“«ÖSì²KD„0Q͋著mÀ+Vh›\Þ6øAÐ +zﺪâ'W‘ +D)^µðž\Hø¹ •›Ú´o æ^5‘t¥N0A¸¢ƒk÷è)'(ì.´äß1ªÖ@v ™‚Ö® +VËú{öFTâÜ „¦ñ î™SéMªKZç +Úz9_þ†2ý´k~¼]¡ÁsTkdƒ‡Kw˽¤"Œ˜ ŽF±õ׳˜9nŒ†j£ý'±9Ž«%ª‘å+(s`¥. SùеEP¬H‹b=*»«YPúÀZŽÖ!ÀBˉXq8DO Q¦Y/K1í–uDgk+Åí–Ë‚šòc×Õ çkan;¢rº²± gœvÔq )âÏæ•êªûµã–YÑÞb5:­Ýv€¦«H„ R¦ºvÛcùwÕ€ Cõ°)ÈUˆ{ § nñç!=M(`bc`Q•ê,ˆa›P ,7Bº+¡9:nBWÔ†ðÄí*¸¡œæ^¡±³±•Í*êd¨Õ¹=æè V F·rWÚ³B~!ÌNm.ìEÒ¾ÿáÆ~ «9q²œ4òãa©í’Qt‘ +‘˜[`è 6°Æ‹³À4Ø VZVµ"÷é¼ B2±e‡ëªìýpXÍZçæ}ì#ôæÞú‰ý&·5‘Qs×ðÎ{!ìÇ×Ï+h“å6u`ªÕ¹* „{ÎH¯%úãNpáE(_ûÃ5f•úiŒ’ +t—TGÛáúçv”7Sq6Û†˜²LƒŽµQÝ.ë ¡7ã æ˜ eÉwÎk<–f±iÄu•jbƒÕòÁü£¼J²ëÈqàUtöãä ¼íg¢6ú›ÞÔõ+0qHÉ.õî+„1#ÉM)¸nɰª ð49 !0óÌ5ÅVTzÒÞ_жäž×¿†è†"ŸÁ]ÓZ†¼ËRBb± E.bËzJºæ10‡!gK]6‘ ‘;˜‰$ѨÙðÆhË„yÏ2âÃÄð@Þ› ™J@“Ê,‘äâé³¹,dÕð± •Ã'tw@kj|8F•qØ6läŒ^|—_ »BØËïj559› U“ìb«ÕêØ­¶¸Ô[ЬµäuT›?ÀÉÆ—`j!0gL(^Remšº(ø%B€ºÌ°?à¾@4ý Xê'W¿mzwí „Ð¤FØŠZæíòÿDÁ†œ'´-xŠ?D”°1®}b‡Ló¡´,›yÆd3~…sapn©ùÓ…Êp¢¤Ï4gÿ“tÒ½Nh ‹Çû váç§E ‹–¢ÿ«Kï€qÿR…s;éŸU ìg•—V!0jvÝ-+õœWµj¾ÌV!1éõ(Dp(…(Pã«EÙÈ©…(v(ÓÝ…x˜«…¸\ÚU(£cæ …ß™”¸S±¹%w[8è×Õ(r(Ÿ±Å^À0Ü´N( +<•Ü…Þ+eOñÛ óæ®OÝ`#‰G©wð@¡ˆj¾ÃŒfËæ[’áÜ\avè ÒV˜ýuF1¡g¯rˆÓ´?bÏÂá[TÝÔÐ_˜§ãþØÓq>¡» ª?Rvƒ&åüH(ó$â'XÊÌùÎb4 +;lóoö0~$pˆl=\½‡w[µîÁ³Üvv¸Õ~Å ¶I^¥)Oëi®N•QôIÐBq© ¯åñTZ»j`.“#©K(Ø@ëz‰¾<’4ÖËjì‡l«×ûp£—ܯzkr¥Ù}{Ib“×rÕ›øÔrç«ÞÄ{9>Ç›ö¾{½»Î3#$ÖA’3éS>`ÆϾ?°ÁòÕ—ð>S¢‡¥7è>a#ìw·áǘ¹>âDÒ#9?%[ +G—N¼ˆ;´ß¯c¶XbÑ—°ëKýoy4æôj¼?·Î¼ŠÎ¼LZå(ózäG9Â5Üyù 2÷¼j”ÝøY¦ï˜èL‰'ú:³3åÐ+’íLZ¹‚“1¢Î<× aeéEr‚Dñ¸5»<ðêÈr`ž5y¶Ç,€–_€i¤Ç,—ã“úê˜åã~J¶¾—«ëÖJs¿>„ÐrõÔ\£5[Ø@øÖlM_€!’K Œ;–Õ˜µÝQG¨&ïÙj’rÑjs× 3xGÝ_‡·­­Ùš¦z.‡ßŠÛh.ˆvkýÑ ¢¶>} ­fÐ~ Ánƒd}û;cìy©!–j˜w"^\‡ëS½šHØúnÚDIôâºÓ‰Ò!q J‡@›T’‰Ë.–ÿö¯B¬ ÖIfjì $–û•äiëCþ€ÌãÞÅ91ÌÖ’ç)„ôáCÀÞö·Ç(™Ë3žÀ‰9%ªÇz`HC=$±èMrëDà²?„‹ÇA‹ ¬UsÊÉ¢˜±ózÑn”‹ÊÓ¥âÞD]ιCe &ŒÅ/èìlþaè‚AGy±Ä§0‰»… qÛ`‘«?ªþ0°hEȺ[7,tv¾|=WÇjæÁ›4‚¯CçχˆágŽÁomeOr­d°Â².²yeq{!•r§û +ÒJ÷n³<Ô(í·ÿýõï1/zsݬ]¾ýõSÍÃS£±jG«ÿ0^%¹uÝ@pïSø68³¹6‚YÑ5¤ûoS=’|_²“êó5›=V)##'­ÜM3ÙŒF0¬üq¡U4Àe¤`hqŒÇËQ¤#?Lî¼aÔ·²ú#Ç…§Ôô³Å*S‚”&*©T +Äøl˜TFAgÓ̱ҜZå@M“°åYm%œ±ª)=ÏfÐôe(m~Öª–øí´Õ‚øðÄkThÒ¨^!=¢’‡ÊNF¥çˆé3)O´v'Õ(…ì¥à ”óë$´Tè6pŒ({%WÂ_¿þ¶ZÈ^ 'møGx:Ìh8Ï¿ìë8Ð÷ ­¨õhâý‡[‰\ áÈ~bt,Ë+ЦÕ*š¨Ý'QFeO«@G÷íÀ8a$hÏ%zܪ ¨îˆc³Oú÷ 3EUëM ,ñÕ§Ž„W“cð^Ø£VeÀø/Fthq‰n€äò5›×ˆ$k¶oèMª!UE‹Ì8­yÊ/ßsuKþý%®1›¢—Ó[ SþOkXL°c²GŠ™õ©× ŵømW˜±¶²ÉVÛä™<\]ûKšá"Ígñð[tïŸÅTEÀUZò´`ÝË·Õ5Ïî…[É$^©Í˜®T?‘Åœn;0?KWÏ'O—‹Dø‡|!-Ûâ#9#Æ 0ºRçtPjDG)Œ¾<Ä5‹“ +ÝŒb²_óÅÈ"Z´Î@Uà0ZË2”l 0ZV ÔÚèqVÛç¶»¬}n–òí¯>=vÌÌ‹TÿF3Œ.C·ؘµêÎbf·¨?Œ'ùkγ;`§ÝÜÓ‡ˆÓßפ)¶\£•û´L¯‹Þ[´"ã›A(j$PÛ6l^ ħۀ£7ãÄŒ¨3Pk1 µô¸,©²Úhé `täg©MÙrçY´c•h±Ý‘£œ!ž>ltû}¤Wž}t°9·-­4ƒžîˆÎ°Nâ¬E´ûåK6ÏöiGo¸ÙÛ¨QG äÉ…o…œ8§Ããa CõxŽ×g'I—$°Yq¶YjN6ºýÝr¢3 8ˆ-diÑb®ÌèO%¡³bºg§òsL,¶Aaé혗ÁÌãì*Wi*¢E•ûeÏI­$^”Š}Sjâ‰EͶþ-#±!2Úÿ;uÖµS¥ sΑ\Ù·{Âß,æh˜êÓ(¥– °trË¡[€?cQOÜúUXÇ”“*ž ,à ¶±O–μ`Í~\jå0ÁÏf 9Z…Æ3AMÓþB¡¹\Ú`dž£{åôMAà$•Eé÷ãç™A©%¸2ûYR©o÷Y®Ùlý=HtYØ{Õµ_9‰ 5Öx¶ÈZïVœk ‘3†¤`¯¶÷겓hÿäýϾb™ —n>S.ßÍ)ßbò!dÞЫ;8|€ÞVÛ2™W1HÄ yïB¬;3ÑHbièÕÛm|í×½»B,Ñ ngnÉøÃg/BÍ‹\¥>lÂt8Ðõ©ù¸jíêŠqâ†^Y)K!TMÆ Wø&I]š¦“ö¡Neš Œ“Ý¸ÀûiíµœläQV(¹Æ¶x¬~7"6Õd2tµø¦l”aY™&rq¶Md ÚT;ž­.VFët—ð°c¤`’–;òè©$÷#)÷xíûj1³‡DƒFœC KÔF?ìÍÜ´SÄâ΃98‘Æ”ìÿ)évm;ç=&ÔZùz´0¡0™ôiäþaBq^1ÀìfUw üWÀÚ<Ö >cäqF+a¹òZáhåm»fiŸÎ8G‹ª¶Êa´+y‰áâbV†‡ .b¿H¸JÝ."z¤‘ûzš$^w5úÝûBÑéž–Uá{÷ßìñçøqC +Ãa§ØÜòDê¦ÍBlV±•jKmf±:÷R+ŒpBâ˜(—Á;|õðrb¤UAÐD²jËm!äl¬þ´QWÀq ©©ÖÍ~aY!¾aæÍ )(¾”÷“ƒÒìÞÌÏ“ÅHóe³ðŽˆlϪÉ-¸ï~ó Ðâa¤µlaI±—S(çÖ"jÝ¥[’ï" +\œ¥mó\Ô£>Ì3¨êľÁÁó fM!L›ìžX€ÈµèÚàòàW³XX³ß'/\uÚ¸Êó´=üª¨»èãz®ë_uÌ¢[C~ˆ³+ÁbžÐpႆóLò&”§ÜÄ©b3Km´ÝwçIêû¤ÙìÁƒýUøóŽÙQì²–¼O"Óìçy²³{zrÛ¯kæ|ä0â°{aŸ' 5ƒR·÷¤ê«}9…ÑÜŽ·¶ƒfôA¨#ÀUœcdIéa­ðVUGJŒð›Dz®y‘( 2sßǺĠA³ÎÁf!}80-Z`‡›¥ËÎëIÁudËü.?™,7ªù9Ì +O;ö>ǬÚ$Lóò[éãõ8fÞÛ˜êA4üª{, eèl€Ã2R/‹•ä7ËÛ÷ÐÀ=?3œ!hÇóÜGÍÈ7üŒøØî-üî]…2¯;íÖ-1õjÛ{àý³¸?@Õ®oG0»²„àãH1‘K4eòD×ÿu±ÔÝG\¼W®Ðöt4°fà(Ï®ffà¬5+kñ(ÀÕ¨1»ŒylùÚH•´ûfŠ‘D&q`_}­çÇä4-êaKQ̸y´c"b4 +2ÉòX*¬kÝì +8M&½(²V½[pÁJ +ê”z°¢£LNõŽ¡fõ¿åߥՃ/ÿ®ÐÁÀŠ:c ìT¥MHªâv¶‚6ƒiè±Q·w«7ᛞÈ:IÁ˜}Øß=½žÌ囥ŠMãuû%辄®°ƒÚj¦çââåÐÿó{µERŽ_? +šl|¾ ÄÐô© ˆy:嶌Ϝ¾:Šx(Vb Mš'Ä‚¤ß~8r} 6)Ãä.¨H@Å«W’¸dk­òl uÛÏè¬Jù\²ÁqÝ›lŠ¿ŸnŸ’}$¤=[Yœ£¦ ?Z'‚UúX#¡êïq†„`^֪ѷ¸WA(ÉöÌñÿB cy³ æúiNÌ…’³îc1b>„·[ŽHOÑ£+íXOÉÏþ™vø2N‘VYBÂVܨ‡4X{ #Âf¶½qXUtƒyîƒ*Ò'kê©=M²`ã«ë%V@g˳ÝçVÙ³Äì1¡Ú ª4€å¸DUš=_¡™Xí=Ρsõ\Â[üæÅt÷Žÿ³äiYJrÎ[á©E^¦Û¢h]`±l9´ò§¾íƒ 2µÞõx,±?•Iá1¨g›p|×Ã6:þûÄ7‹ßÀÕð»¤OD#S~H+tbtŠÜÀάé‚ÔgøC((À$kEÁÕxNˆƒb'¡þjáÎ›Ü -À), ^ØÇ”W9rdË ôu +úŠ™¨}±e|W!^cÚÖõ•‰¥–×äü‘Gf×C¡€wÜ'1”ZØ,œ"´ÏÛ7¸ýüV5N#aóùýìúQ&a£d¦ó/ëÛ]Á.\·Ö$ZàZà¤+’÷ m¦Ä8eÚÛI—Q—M¬;Ã.*’X«_«÷Àu²Q¹[û]6xß“Ìy+Ø!ílEÁæÆØãå æº’’Ò†;¡î`¬°ÕìG[XãA¬Ÿeîu 8Ž‘¨ n“d…!ï…­!I +¥ƒñs˜ò¥0áœÿküc_"U«÷%2!^Z' +dÿÜg^*² jù䟧±×B’é®mŒ…öŽñÉùéØ6³~>}ZàáÓã ‘ä;Ý2–te4á¯Õ|WÀpËán}þó‹ÉÝQØIž w_ˆïŸ²zvá“kªÎÂÙ&|Z žB ®hBÇ—@Z†\æ†o ŒêØŽZ¿ûëûÇég—ëUËV¶?ïݼLÓê6§Õ7ÞÞí‘«Ú9N‹„ÈEg)*ùòæ‘YèDòœëqU=ÌÑÕô³s™Ÿò&¤V fÅàD´puHÛY]8xÁYD¿§V¸¹ÊèóÇ¢k±í «òü̯ƒg~¹ä•g~ÆpçwÝx½íëûÇžßuÍ™_€* Ïü¢¨CôH{~+…ö3¿WoÓü©óÎ/{ĸò[£'Ä“[ÙÇžÉØæÜ½’='¢ÉÒË3¹k8’Ëö£­híGÈré\hÃŽ1gÈ_4É}&CnÕ'Ø7!]f¸t®)/YÛ ·Bß írÉ@µú‡ŽÊzTu›Kk®ƒpmäÄŸ¡£J·{ËÀÔùÀ¡a䨽°Í“G\ÉAõÔºN–Ä=T'X»Ù„„ÔÎ/{©ÙÄÖÚÝ&–%=ÙCLãC×Ú0ì"dV³û‰áXü$V]6Óy¨)Ÿû3ýã +ÍŒX’np»ôûð¢=€B¼¶Ô(ÑÍ+º«nã±ZµrÆi`îAyË÷éP8­uÙh‰r?<¶m|q®fqâ´ˆ,!šcu°ÛÝ!ÕìŒB%ò£ÂK#$þö°6‡_©ë\±ró0&mt2ÎôËŠ n/¡Öû$þ˜yzÀC³“έ| «÷"€=°clžÄ†Æb6‘XK"ˆQìd³91Éx€a¤ù÷eŸÐ&"»i-`¾ËÊ÷ú™-”|³jºA{K ¨ÂH+å'9<ÿž{%BJÇÕzP=œAäA`öÞ6Š%0Í€ç²û´EË@¬öß8L/ÆÇŒÖ{p²B±Ib?‰Mƒ'¹ÜŽU[!íài–´Þ7Ä#̳EŽÙL}ÕpV7a²³»Zªº_^ ‹¹I/Ç}RTÅÈ·M,(!›M”S´µf;á÷í–†„ÑÆ!q¥a€ÕèR=‚Â’†¿–.]¿Sã`w’ˆâÕp{XÕgg/Vu 8À±A‹e7P­úÉê (* ËúǘÅÓ†r‚Xϲ½ûê0¸_À~%Xç_¯ÆŠ»X}œD‰7›1Å™ž·‡à}¬Ã~ÄWˆä„pt&aß´ðÎXW—žvò¡¸žŸ£“si_ĽÍÀíˆQQÂ=úI=•°Ðç¢cFÿ¼t¹Ji¬“h­Ï©Œÿ*aêmÚ°þ+ó¤Gú] :঺?²m=›ÊFN‚”9]~œÇhT¿+öè¤;@Q¾µ]¡˜sêns¹½²¦mZ#=Hy“Ïs›Þýᇹ„V=®”_Îwt;óSŸyŽ`jÖè¸]:« B85¶‡× ŽRVŸR^ 3`OÓÞäÜ¡›ë}?÷ÅãódŠaŒ§ÍÐwHìö„„Ä^ï@Z‚G骂¥ÕvUÁÔ*¸>_©;/ZI>]ò*ˆÂˆõ&NÆ«oêT2eŒµ\ãU 'tÌk>Ô¸7y$V´ì& ë¾7­nÊŠ…«ÇÏ/«iƒº6MÛg œ¶ªý:­¢¢£øÎEèÅ2Á¶ÛÅ]¥PÚ#Æ:·Î—€Ðmè²±;Y¨F1¾Ä—â ê0PœRáN–AÈon%Sòlm®`X9óæ°ÁÜÙF_ éÒ¤òÂÛF¦æ–óP+Õo_Ï Åþ¼aŽ3‡Kgz¾‹.F1vJìŠîÒÔÔ#ýN#ã*©9ü±Húb²çQ& l<Ùo`Î3:Í^ržÄ€³“‡Í>ì%¼<¢ÎÎÔP:`ß™WEsËzÖ{>†RüÁÛJ6Fò,ZG$˜Ò6P¨H0ÆíäÌ[Ñ=1×ûåYéjÑ3˧·¨õnaJjÉ‘ÂAäÃ`èêâ‰+ æ^2%ÏÒÛeÄqîiä Û0ºsB0©Á%ÉÿŽ.¥ñzTÉüøï‡´N‘å&_'r2:´U‚ÜR\ßÀã?•¦ù6‰%˦#zŠä|œ2ä.3·†ešº®æëÛ…œß&d­Ó¿Äʤ'QfdÑ´çôN„ååys”lw›%jt°;Y ¯Û;{¸ËÏ šfùá{h–-¹1 {j…³aIáqsrSÊöBKÒõó7”žæœ9 _A|m›¿uîµò—ëÇû ®mpù…k9]® ŸÞ‘'g‡eéB‰³Ò.÷®ßKo(¼×!Švû|à úXôOœ?çý%h·åå§—í¯YzzZ™¢`ééòW•»g.]]û]ìš…ª#‘’†Ñ¯{}¢-ÈP}"8œ˜|ȺÍò°NO´·<¬íªæàC¯Ñ±i…´ ”Ÿ'‘õ‡Åõ‚¤¿*†š“»!¶‹pN,6 Œú9<²X`ðÈ`X¤`6j(¤ +s˜XŸqÅÅÓ€{c{œ¤ZÌëdë§v|í·Cöé!DgØÑS½"gs3LU’DeÞy¢Á·T~ßFÒjŒ-¯×û›(-ò+Ç!¨×é~˜¢wfÜò™C·š<ÓPY°¶¼u.œH9 eÅyv¿ V½Kñ²ݾšbø.ý@×J|L°!>°öSœÉ-·±Ï¼ìy„ãC àZÃiïu€hKñn³D}}çgdýS¶\~.¹TpË£-äPe0;¶èC¢ˆC÷>ŽŠÇ¶@t‰V6üÙqû´Ö–õ¨+8€­URŸfÃ6ЦŸÏI:¸•ÅíT4ŽÙÝ û•” Ð¸*‡GŒÝíƒ>ñ˜c G:s²ýºõM”Qôé[6ßÓl:ýìPóI„ÞAv³B„¬|OüÜ『ðF 3¾“&”7"pæMΫ‹ @sxcÑüÆ¢é œŽõ ô¬¼1áxÅÁ„õâ“ Ûx2aùõgLÔ¡pœ}A Jl!ûwÍ.â•Й úyØÑús¬¡fV+Õ×oIµu^þ,€¬ÁžBKÕ7¥•©h;ª½—¢~„M15-îyQ¹#É׾⑭H‡¨º;«qÖj/9rEKMmv·‹9:ÔBL+Ñ57yÞˆÛ'w“Á·¯ã©Óß!Nä+§Ogzda*2%®… H5ùûÝ/DW?Sßi| d‚šÐæ'Hßô ÄjNËûXM® ’”®¡ üg!¸-}°k<ÂÜÍÑbåZ(¦éBSù + RؘÒÝü‚ +Õ­B /ÍÒY}˜™eìƒCMÊœåT,­íçÔ8JE/ÓüyÖcuuMz9@4”ÛO|_Íûõ¦ÿ'&TA©Ü1åëÃ[ü©ør}æê:›ÍçÁ:9€`Ù»n¾\ÄZ»†=lغ¨­d†þ "ÐVÿÇyµcWvãÀ¼Wá ´ÿŸL:ǽˆI¤Äû¦ð%xŸZ–Iuñ@«€þL8ÑÎX/Xjæµû2`0¡½.I[àըɆ¥°é¿oÞ˜¹¯Ë5ÂÈg>GíÀ¿ÅR•ËË*€¤ìjÅú”Jyé‹Àªãñ;ÜA›œ÷Çiãv©ùQº/6Ýœí¹óàÙ±ÈD.–’†¡>ÕŽÄè|†¼|ò¡¶$V¥LBAVmŠs©Ö=CY`xÁBkÙxÇÜJèéŒFKœRjð¥©R€-Ñ»¢SVBWÖ bcíV£šméC¼òï*ÐISÅãšô„¥É†Þýñ×ÿþ>ë lå¼zÎé·þ‡ÃµóAÿ«WBº`‘«@ÔfÒŽdŸ¥ðI5oÃAÈqûÄ´î‡K-’ÔÊîêjwrk‡yX½ëƒ/*U„φm†ã‡>»Õ(³UÍåÌD ìyVÝc¢jJ½¿ØBUòVtiáq­]½ðM³v+|vt®Q­Iªø¥á'+Ú=<¹f~Ÿµy¢µcˆó9ètDÓ;ý4¹NÄ®­ª¾Ãÿf“íl]õûüŠ„dõ2­Aræ%“VÅ^ ØMÑQº£U˜JÆ–b½w¦WH蜎ŽN=ô´'+Ša¸,E ºFÐ2Ž­¡ÉàÉ‘AäàAÐdr´'ó‹¿{¦“ÄøÝ ƒy¨ßÞÔo‚ ²$ +þrT²~rvÛâ>³úiæ7æìÄ€F¬ÇÖâ¥Q/¿Ü¶”ü¯²cùŹ+¿Ô"á{/ãQ7Ú1êK£í釳Ð;¸O=ž}füpmïóô_7²lEîü´Þ\çXG%›Môß=?}4ˆåþöaèUéÜAÓë”d +ZCM«2e§Õmg3ۑ볦—mVBd¿¡þ]u'ÆpÐï*]@íK‰.˜3ª‰±K4КMõ\߀¶d¶.Ñ„V¯ƒ©4yX/* ´Óã3øbi¦Ç®ÒCÌp[SéÒu‚»ThË/* ´(ÝÇ[4R“dê“)Wiƒþ™DÛ¯¾Òg†^T5t} +S p1¥4¼ˆ.e¬¼è3e7}bZ›«{=E * +TšÜnSÍ Ò¥ßúŒ›Ïe·r}¦|LÓx×ç“%çËÐÅèÊ/âÌGYF’ò|‘e u{>L–)ùõE–?)Éý'²Úô–åý•,SÀ¼÷±HÍ*DG}ÁO…åȈçœ@Ôš•º‚-è?e·•U†¥¶+ñC0[—# ²;^b]ªî~O´ûÀpM㯫¹ôÒÃËÚõPSÅð¤çÃà ˆ¡9JhP *Ïz‘AœT‹pD6*Dz‘A¤&­< ‹2»ê|ÆpÐÏd°SÌai‚Xñ¡’}²ªnÌE¦AsÌ^x"Á$P]ƒ&¤U3Ÿ«XM—: ~ ‘k64Ibæ[Y˜È®x˜»Šùí®x¹U·6HÁmûÎf[\u dN–‹… º’Öª›íÂã´Î-¨§ÌƒÜXГ¬¹—hü…ZdšpÉ÷Ïð´ôï‘)ÍwÖ|_Ÿ%#78úR¹½à6Ñ6l;Ï¿4®Í·Ú/ߊ ÂRhX‰½À¾XBñycØpgnî´ñ`âÝ`Þ:Pdô*Ò±áq `›£e*Øu¼Þa«7°ÉToе)­¥ ¼]úy¥ãÓ$ó@èµ4$@¶®°1 +†Û½ÿ¸2²G–68à‰ç·̇‰ =ØSsêõŽŸk>a*>Áì–•™‚m.Ôëd»´×$˜ª¶îõ;.Ük>€|ɳÁgä©g=5óL °g}4JR°ùlñ$Ê +æEŘKSÁTôç)Ûø‹›4‰ºyñR‡ÛF×I¼'¥¡o¾P?iðŸnÙIYO?Áбþ\®'A1^Íþ”èúþY×ËIï =þ¼StõAxRÛàµëðýågbßh‘s!r$¨c.AX(ª•Â… ó!RŸŸª9Á *°5åx§sŠ£?Uè´ˆÀùÔ"€ÝD̵à4r-âmËÊ´ˆ({™®E´)µ§ÑæÈÏŸ-ì´þ$jw+%š¬Z€Vo¼ÙîBX EÏ4À1šÛ©ÿÏ›¬¾ÿo+_^/w¸Ú¨ŽŒfLMƒ9!v¿Æmƒ×³ê‹7œ¶·£vrž†ˆ_ÑÐïh½Þ8žìD§'1€“óìU£ÖÁ—¦Šl«¹(Vë9>¥(=·à0὜œ1/ä—(!˜!»^°?.°²ayŸ‡?%u¤˜ÝQ LÒèÝ“éçäÇð‘³!9•‹Z1x.{ˆäû‰®¼± pÐl´×›l ¿~è£Øþ•3âˆçÈ=hŠý ?y–+?€j(øjç0NB©³ßF`­A9$gõ$æøžè¾zía¿›Íß|kN¢fÀ5•qsgí“­(åÊüÁòÛÎ݇M?Ô®^÷6›–ªý1¾ç8Âb†–Ù)±¯íµû[ºÎoJ-×ù-ðƒâS Ì,‰×Æåñi¼·='¹â=@7"‘4´"¯÷Ýn¨…´_S[³/k±Ì$Ä.Н3 îî¨æŸÞ¨©æ ÝïÛX„ðù·©Ü´ƒð«@¼øC…U&R¦nÿÆøá2ão¦ù%C9]æï-M¦ÔËÔv'~SM§õë;LŒ»ì°,).;ÖxØÀØS½ÎÂhpÊ%£€¥ÓuæÙç´r1»ì¡ÍÃﺴOÊ÷YC¯e ÃìÄ?´Dü‰<êçEIwE>‡ößNê|¶S‹«ñË´fæ.¬ºƒý"“(ir¾ó9üЄœ"B'M#ÿȸ[2ž<¤œ§b~Sn3Æ›¿8#‰ZýYÖ¹C•L©žœŽ,íˆþ0Néo6Gñ{Ÿ»š˜¸“[ÎsãY:å]iRWª_c½ ÷”KPäùa&B,õ±dLŸ?Ì<ú×Ù ÕxÕ8¸gî (¬ô§Ì𿤮PatñÇO\w„[u%¢ÀľY¯½0îFpÂØ4ÓrŒ7E?üÉ~p`ÌÎdXý Å¸>Õ†%uîB2¬SwaÔ=9c¦Eë uÿ)R}€ÆíÙ Éaã–g&µâ®F>‰AÁúokG}_üµ vÅž¡öîgiWnvžsns4•øÍÑ]´m2`íÿH{KyˆfWl§µn„³ÊV¡F°k¡?2jîUEÍnu¨y£Åˆd®u¡ôÙHé<õæ-ãý3\÷Ѝ¡ÃíuIg¨¡îó¹?Iî­ Ý‰ä®QƒÏiEÔ\ìÑGB~¥8ßþíP«µ9ËU@è†(껕Åýu$P®™‡{ÇD‘`ºµü13ç/N¦’¯†°;uaCù¯¡I'5}\ÊÙÈqÆ6ê¼å,Ó…öˆó¹o’XÖùÜ7IHìRbib©ñ½Ç´YY‚R@L…ü¸o‡Xb¶»Ñ`/¾Óºi!%Âù€ë²†4‚yí¼"k•¡ õ•ጞGŒÇ˸ÜÊ•Qž›µ6¼,f6¼|ç˜|e %•ñ°“H^Ë3TÒ\XœÙëXÐZ¨_¹Åó‘Žß×é¡*ŠVÜãú¼Ä!+/6+íqKÅfŒƒõ2&Õ–saAn­KêÛ>±_±Ý;/ÈC•“ZiÄûñŽnø±øòÎ €»_´Ìuº¨_´n×xòSšez“9óõ‡ËŸqO£öÜsFUî=rOSñ¢Ï©xy2FŸ#2j¹‡¸ÇùÜŸ¤‚ë‘{T¯l´×±Î?5r‹'$ã÷Ì‹¬Ëʺa:æçýiTùÕs?op¯¾£­ËK!þÆct¾ñø°ÁÇRÖþŒ¹å±!þ°Ñç‘Fl°¬Þ%Âcƒ=7¥ˆMÿ×Hû¶»³ƒå;bÓÑÝ?ü ¸|•BØ©Ðc/2wEFÕ8&c§Ç5ÆŽj$Ý«´êìS%úUã ~[QW?QWQWR¹QSÝì^¢r†ðŽj¼žáÔ8u5ýšjQŒ#ô#f‚lF?‰bÜÿºÂ9Ÿ 0›2*Åø,l\)Ç »Æ¼]Ê{æ¶i +€Ée±l Ü!³iV‘Øe÷¡œ¡»$ÐÅw¦ÚTŒ¹3å®iÚEŒ½QÓ9±ÑîT8ñGi¾ÀÃOØÊKü±E39ã(«øùU¾®ùàŽÌALˆŽbÒ"dzåþ]}ÿÔÀ/ô=L#÷W‰‹ñ‘òôɈúžÄTW}ÇÚ +D n÷ˆ`O9"x£ÁD¿#Qå;ø;¯ËZÏ|§!Ñ#¨óCFtœº" +(Ÿ4"†Z5#‚¦ÙÁîs%Þi+Üšßå +©‡¿Ø*ž¸1TjËâcØÐ…UMv1j‹Òá=É +Õß©Z–4D‰)íwa($d>ßÇuað}\÷\‰êr úV\׃¾ë€xRŽ ƒïغ0àä , ¾á;q Såd#S¢4%¾Òhmͳ½•¦9ö•æŒVi +‘¯4ÓWšÂþVÅèü¹UÚIø[gš$_gšN£&Þ×ôâ͇¯3ÅÒ×™3Z¹ÏµÎ”3¾Î€Ö௿Sh¬Ÿ2ûÅ +4sŽ+ÈeV?¡Uwã“\ã +⻵êîJb3­Ww{ê +âK—W¯WtC{q¾uñ®ë +"A>jzÌZ–7™3·˜¡#¡5DOhM†'´3¡u3ñ„¦lñCFhø²z$4'ÃÓÉèã¥sC?ë‘ÎHEïmØIVdF*Òˆdæüx*«Éˆì>U"C¯ç‰¬°|È‘ÄÏF#b7cÞ—®$ÖíÄkä»Ñ˜ž¼›gmû&Þ`Ç—}GØÏur6ܺìx¸±ìÔáyG¸ZÕ‹vGò…†w§r‰xcÓiïmšxG¸±æ´áP˜Ý' +3îî)ÂŒ½ª~c‘¢*{Q?!¤ÿý‹ é-I§ oHp¯º½§²"Ǹª‰EéîVZʘ(öò9Kj謶³Þ +½¸eIá ÆÑdíá‰4ÑÐUJ·ìBSä¦î=˜õKNò‚DŠ#ïüžDnË,ó½¡÷Û*ýÖ2sÑ­E·&yüê➎£‰èŠ'¯.nù¼Dadu´Œóv•¶†Ä™:ŸkêûkŠQNÚÖ„;g¹²ÂœÂ‹•é¢FP`¿K˧…nëE5ÓÀ9C„·ÁÒ%nïÎQ¯T¦l ÀöÞéOvyÈG’æâäwv —å¿ØHãPxÏ$ÆgÝ¡Œ`ò½FÈôRiªÅ *Ò¨¢¶"ÒÈã^iäq­€4ÕCZ7>;¼9¤Íy‡´ W—˜`y.4 #Ò ö>K–ÇOSá‘>Í)"ülvÛG’æßAZ”Þ‹ô/¶8 +_ö»å¤]¶+Þrçú»¾Ï¨0~O²„öwªØÆÿÇy•#×–ÛÐü¯Bð/Η ]8o-‰”8ñö}0äS˲Ué ’˜q—U·¸©ÇWPcõ KË’*ãÝŽiÝíØ÷Úp—nçÁ»Ï…•h·c'ܰiLg¤¾fyçulÖiÑE'öm_tp%¦£I^ñ8@¨™d%zp¬(]¬(]Ì- +™JÆ$ÎM»XQ»XQîú x!GEsgŽoTÜÓÔÞu:\TÃ]Q SY7í¡hËå´þ¤¢„pžõôÅ:ƒ„|fç:C5^«o.²ÎÄqÈú‰õ”*ºRìÆëë )9ß̺®H;Ï|‰5ª >’ _g Ðè›J.¥ÿ[õÀ›Åȃˆ÷J®:6SFJv ;Y[Á ǵP|ôçêînâ™(êŒSRwœ˜µîà˜µîõ ¿ŒÅFÑú±Däû±`ò}ÜÛPhãÎìeºE+.wEð'ùzçê±µCÓ­e'Ø»}šê[Kä­²µl’÷Î\;”·3ºØ„•Çè6ÒñŽ.e–JF§¶œîèúJ£Ë*ÆÈ°£8ŽÿhbqxÖsÑ ì.kÝÑÄ–c*îhvhs‹¥µî`¾x'‚? ¦3щ[Ä)¤ÿb=YŸã^Oˆ"n’¥ëI¢!y¯'dۼדDSL—G_Oh³ë÷z‚¯9-ãíºž$‹Œ¬Ê~B +—{?É´ŠÜûI¢í¬X÷“D½óÞOµª{?Á‹Pðdøœ;0ô÷ëïA}D§×–Œ ++82iÓᅫè< ˆ•dã:QÊSÇáh*Í4æü)_?Âþ_‡îì÷äë^|´–yóuŠêÃÍû]‰Ø¼Mwð4=hè¦G~½M»ÇLwþp˜þMÜ™NËÉ‹¿"åz½ùkÌC篧¤r xgà@s‚ žü5Qg¼ùkâùøÂ_c½:õê¬Ù—.þë Hîzuþ +›j»ùk,M'°™¸ÁM`ce;¿¢ºn«ñ¸0’Ën|NJ w~9xæWHƒ_mîüŠÏòK'ý‘]_Ð9î#¹ŸtŽȺé\ì>m`•q¯+‹ué &Ó¾é\ôºÓ¹˜²Jçb3v:—È!7‹ª;3#ÆÓR?éÜVæ]n¬ý¢ƒgÝ×;„zínŠ}0½å·ýó¢sDÑˆŽœûó>ô¹åÁ±¼Ûw™|Îxâ(Ƴ§†0žúœÖ rš~™­¼d›üjnÞæþXW]ó-š rÒÞÞÍä?²Ø ÎÛ`Ê•÷§#Ð!\n‚`‹™;I=`ô¿ƒ ¦‡A»ï50ßhú š¦å54úÑAÈõÔSS5PÊHW€uZ/‚nI%K·lw…êJèQµ1À—W7ÉRøÎfÔ´¨`Zã;VÛ¦ÒÐ$»-Nø?óCøZñ¾‚Íô,Ù:á :)íT¾“&¢§˜ùñk;KW ÀÖåL8¹ÃBrž@)˜ [˜«E5ü:% —êÀ;.GŽ&’‚¶¿AIŒ…¶µâŸLÊ¥÷•ÄLÝ/µdö<Á¹-w¿Eé”s”n*:IÙRëâë…)‹‹r!bGZðr!õIÏÕ¨•48‘&øºzTšM Ã}ƒúk ÜÂO ëWpæÄÇ7¯_UÔ^ÍÄ\mð‰fO»½ÝNý%¸>(ãÁ¥&^¯`v¼ šT´ÌĨû§pË£!O[ÙLfÖ4¹8€ïvðƒAå¶ÿªÑĘÌ9Ÿ¦{×ä„Ý¥M}±[BÈ m(\?³JÉÕÖ ­~¦dºµÎå7¡ð8²Þ¹Z†Y±ôN”ûc’ë1I<.¯#hl*w Eš)Ù±Ð= +Ž¢OoÍÁ–Š*)6~ürŸTD¼DÀô÷šÙ%CÔ0‹2bûY2¼ÅBtåÉÛª0ïm8íѳÅx¢ãìG€y,߯&û`±%NŠRžË(”F¼À¾B‚Ñ‚ßÒË)€ƒr xFï\´lo.ìCž%[Ñš½’|+TûqÛé°ÊÁwÈ¡Ì5?¿šI•|10ž‡pVMü8ªÎÂ{6;#,ï’,vŽÖàØcy 6ê1<¿×¨%Èt\VúSÃgYVåU&1 \8“Œ&R¥°dF'ìÒ]?ÔÈ*.ØQT€= I'Ë‚œ®£sÕ³%Ã@nfÒ›¶!c ê‘ßi¥Ê&¬WSkƒ Ö¢oÕ‘5…N›¿¿dt×|‚[¡oFe +Sί%Ä"VqÌ¡ %=]g“ ½Ç+㌿SÓ»je‡Ãôý„¡´†8àqêÄO¦^ŽEq<¢]eŤÊëÄ÷ì>ª`âçpÛÔù!Ð4—Ìi·Mâ\bJB òÄö)4Ÿ.#ó<º~§®G§B¢¢*§êü1½YbüͲ‚5Ê + ¬#Ó²¦ÅŸÓgŠ|D°„Œg*ñL™oŒÿ#@3#6sCx ôèÁǪ#jq´km90Fá û„ gb9M lQqº=cƒ…Y HöŠ¿Åë³ÁQ3µx¸*ÐIJ†Ü)ú+=í]$‡• ¥qס¸4³MŽ9%AÀ62·\z:o1‘¬á,6:z%ïÂ.HÖ${(Òs1¯"çbÞ•Ph(v‘”K¤Ì0çb„ŽP¿.ºÆFâÏvjGÔ<ßv`ÿ‘ÿONPrmß®†Éù%(y—ô_”ô@GçxJÀ9s¿’GœiÚ©ÇiA‘™(G'B:Õx!4â6€O zøpK"¬I¸‘£…ßÙU2ÉA4DÃuè"ôð¤µOµcj<[ ÇèS™ë®{à#ƒb׆âs{Œfú0ú¦Zzv9~t PJ„@O€:~rËÚ1Eƒ$ó= /®?À©½ÞÂ$¹Ó‡’ ÏhÊÀdtž´adL‘UI|-¿·ïí®#@Ù•×Yz»¬¢ò$ÄýQȘ¦wúÏ:hºq{´æxrÓÁµI%U¤5¶(ÈnÈ_i(4m!‚Èè@^÷qÈðïæ+I¸¨¹B4*Nìsú;žiävûp¿ù8€ï‘ybKââùtT/¤Ló'íwxrßt‚Âë—HGP:(c½‹ušY³hYGƳƒæËŒLúßW ®Î&u\@á¸~´}½JÁ Ì—nØðE¸¦Ò©i¬+ Žu=E›¯“{^6^ÜXQä:ÛG…RyWåI+PÙäèì¼ÉCº<ÔÙNÊBc+gÞ@˜ædtÒ¿Ûé¤WšÃµU¦×ƒï¨è¤—«Î/•ÙtRȾKÛp”Å:éÖ¸<=TÄs`!7Þ‡‹_8“N~€³°xä´±9 +!v¸L^“ªÓ6œˆ FÆÚµ4ÚÊ÷×Ð$¶?Ì*ìSÛa½¹' pŠ›¤„äÐhut¼}é…µYxñ_‡.®º¶=þî7·pðS&¤º^ îâcC–HH5¥»dðæ;ø)Wç´p{<ºÎR1ÊÒF½¿ïàþ¾ê…‹Uhÿ‘œQ_ !€®ÔœTƒ4™zLž{þo¢~ÊÊd"hœ²îp']A!Æ:N0ófÚN]›`ã̺ôÉþãO4’KzY¼l6ša¢¤X©3¢«þ•zC×þñaåݫסbºz߆_z{Ït=À‘¬ &rY‘›·^Ô9Ê­qýôöûÛ·C&¡ /¥Ñ +ÂiZA¹ ^œ½D#/F°Öw}ÍÄÖtéí&?ç~·®]¯gë+×7ëÙ­s}j™FaæñHâ¶ìI÷Õa1ÌÒøõ¡ëœÏ1ã©Òk‡¨ƒå£Û°…ØõͰ–uؼ4ÌÝ sì4ìu°hR]!êh ¥å¶¥×›¬ˆŠ©Ð1£o†m?ÂÌÏ9ˆ,¥ì7æ&›Ö•³éz‚2Åvתª}ºwJ3Ë‹â^ní(!\rÔíVARg³ŸuæHцE{Ä~l´Ðk{¢áÔë·Ýž]H‘»(t%ávöfÇ«0Îëë—¿Ùäøè<­h~{d>Ö0U‹ò[ñ=¦OßO§žÄèÂVx8ÏtHRÒÄëðäáýC«Í´cQ`7õµ„yâ hÈO]oˆ—÷ü/ï^— ä›^ à­Ý½pðôÂ_=dsô¡xéÿY#– §Ûo$7Ê1ú©o8èA¹tm0$N°6ëe V‡‚ mh/Pà]²a˜VUúˆ/Ú`…ΞæD&%ÖÉuY¦ò–UL²[{geö¤ŽU«ÙYkí&™§¾Æ#7Ó]üúv„¦_« s4¸vX¼[…PxÍy*î*¾+VyÑ!P[5>zµÅ4sÈï¿D&.P ‰ýËT°Ì²Bfd"TÇöáêÔd—ttSk€3á?AÄÌ%È yÙÙˆ@v•³#‹Iåšôöf4À‹ÙŸ:wî?J s>w¸)»$ŒµRýiTešWéO7kL—/•È~³ <»XJè¦DLË„ïO€e ¢‚õ5@P2¦b5«œp„7jü/¶¥*Ã<2ÉyÝsZ•ÈÙo¶R\¬Ý …{`üéF–:È&6#¯áVuîÿw<ˆ•/’#ÒÕ7Ì–€å©jvIOòœ(‡Ê\ûë©fìJSk`CÒ-‚Œš—£æ’²¨Ço$˜VÍ/ :®|ÏCæf’¨É>Ú^ç^+tôr]è³›æÙŸ ÿœZòÆdJfmà˜OôB€Ø4¢q¢­¬,+íÄGÇ Æ±Ëêi ’¤ã24ÿp¤¦IwÉçµÏÔR_ÌÔ„´PÐ2 .¥£cÑ]Iè°Ã (´¡ E¨Ë\V„ù$L˜£*j’6#NhAÕºPgZB(ÅÐúütÇ_v°•„ Jû(ݼdúD-‹épB^F@²ØØA4­ã=LExÊ)ISørI™ÝìoOO*&EäòbÌ*hî5_ ‰,ahæËÃ{OÅÅ"R¿1—‡x ^ÌaHˆgaÙ‚úÉOñ,¸ n¯4âBpv¶ƒcû|åÁO¡üRÔŽ V +tvGëU µ5[MËĤd³“B£Ák“C¿Û>4aáç™:"T톅AŸè!Þ§˜h›tÚGÚÖ;×6Ó$VmáKÛ<‹OÛ@‹ð%›T°©/ÒWåÐïR–ùí…?º©3"c(üï¿ß:Åü èà’Z¹ú ÷ïï¿þö÷ïÿyûüõÿôG*¾ÿ ô¼s§äŠvKJĉ^0« +Tn”®½¢ÊOQ½whèÄý:¾ ”tb@r»l:Úd]°'ŠÅXcÃâIu%¿R×U¡¶Tƒ’K Ž + WÓsA¥-õ)¶É6Š÷“^4[kÂz6°`úp½bmûHRã›W¿[Dd1/g=ÂDeÑæ³ÜÅ„%¢ô8З*wÑÐzä)w6™LG1¢¬ŒUnëÍ!`cOtzBC«.¾³/ÚU[ûpÁžÄÌ=˜°kŠå« ͘p×\ÃŽî¹î½è·pBcÓ©{õáN„KÜqÕ²ÊÃ?"”`¶•vëˆE,"eÉÇp4 VÄŸL‰îùŠ6йVrŒÊÀ­l^Š–„ +I/ÒN+QéºHeÖJú¢šh´å²¿cÀæê¦mGç<Ú÷óº¹onùØ$;m"I m˜aÕàÙáÉ×fe`²‹S¶Â–mEa*hª›“ŽOÆ{»ëUÛé&ê:Äœ3¦£«whÿ–²Îï¶”¤@ˆYÎçGÝžgn@»îMúÉ`i÷y°£/ž‚ãÉ’mzÛìD(,‡R¢Óó F@¡s×x¢ƒ;>*‰°yõ[%ÅÛQI»dT¡ÝëË*é•G_‡­{-å ©ÓFv·ÚÈàmã ‹ná’aJôq ÓŠÛ8»ÉŰ#¤gsÈe¼Ü•h6Êôƒ˜C&úa—ÊN@˜ô5B! +‡JJ<äc"¹ÚÞtч d +õ“Ñ/Æt£±R-Š]ÄÖ€tPF™tór¨êm2^éâ°]ž…¥î˜ ×% Z8w]s¸-eoÐk]÷>ÐÒ ]I™Ð*&ÖrÔdQ;s¨½¡WjW.^a§µ`‹E \€Òenõ’Œ£a¼¯´8€B0"«¡. Œ—k¨ÔÄÿ…c¢)6dryR½4§!I,%›Î±Ìy:ümÁ´-€:9&ÉÞ-¥+‚—=Ñ5Çë÷¤ÚË:0!ûr‡^f–b¹•£&Cs/?Ƕào:OT‰v$ïdµEWlqÙë[Qn’(x£‡¤³ö»§/|ÚnÕ ÓãÀÚòÝz·ê¤\ñŸyXS®I“Po•–2$0¦žhv­ŒŽ™Gƒ¨’„®‚P´u¹‰Ä>ŸdQérÔôb-Ó0©·µ:Z‡Ü@‡i˜4 Ýd¯&×®¡^öZÕQ +[ò“ «ÕŸZXrÜul=CÛðC®†»×òs1e ’jÁÆä§`èÅò‘Û‰NÉa°|ÚRR®ŽÖëÒà–Ñ]C»º!OGgµôŒKÐOCžÈ€phd¹k]*çÏ;*±«®ñøšp~nèá݈«¡]†"‘õž.ž„öÑ.ÃdGŽhÆet“E¿)ZGäV›á°!аW;î=SáÑ,ÐÍŽ#'‡"ÙGצ+Úréí÷7¦u¸þXéB‘€ðóÊ:¤ ÅÜÎÙ˜]2ä-C«g¡g—Í‹V6¡³¯5ME4 Š°a5Cûi*:†Ë&t±¢J]hEq6ªiŒj²)‹ á…e& ‹x,h +¤Í–iÈ•‚ü4ö0^åH–Ý8Ð×)úÝÁ \l…¢½1Z‡ç—3Ž®¯ÄJò¿R¼ªüx$ dáî•Ì×ȼo ¼T/#lRUmƒ&ަ‘ŒÚ‘¦Å† A_žº¢!¬ÎâHsz˜âEš»´OݯW°!”Eo/]Ž1€c—‹ÝhNòýrYàŒ†â7Aô^«žÑág€ŠjËsùQS"zØæ†Ygh/Ùª³ù“š˜¤kTÿœ…¡1{µtå‰É˜R‡´á´P޼¾?Ì;ZA™ôØH?~gÕÞóï±”ÂP$Œõ¦}¤«yË'OšFE@k·q²ŒrÖ= #âê#bqÕû©AϬ”›g¢BÐ _oÎþsÆ>Ñ“´oëàm;ø$m8UtE¾hû<à`n?à m‡¾$ûÉÉØ¸'[¿, «þÍ×;y—啾æä]ž÷oôÁ×¼4fŽÍä‘ÐR‘É'[ŸF|ÈVÒq¢ØqÈåì‰,6jÍÛÑ^²,NþwÎ2/®~=Ø¿cE´›‹K¬4Ôº BïI(n8J^QP1Ýeâæù‚ä¶u8ÏoF‡Û¤ç>ám-lûjîƒöª ižP޶¥jh¾aì(ÀqÓ3¢¿~»ó„{-¶nϾX—/ý9‘­w"i›oÏi ùM +I,ª‚Ñ¢»Ï£¢ˆQ³LJ® Ä9™#ŒVÑM·%˜ŸYC•ÈýYÔЕöMÓ¶ŸÊ ‡¡è‹*›âeëÊå>™é~µmk©ZVþÄ6¥f˜Ê^RÒ"ìÕjž ÷ðµÙþæÔ¼ ó>ÎZ3 ¼aßû™ªEYÕ¿uÕÊþäYõ¢Ã•¶­1LµM\O-Ù_evÛ‰èQнשŠ]q¦õ£/åÑct;²òÓ«V>»•Tß®‡¬azçjX©TC!ïîPù®¼ÓOëö@JuJ¡\–Q–@Û¢@ßãºÑíë?±^A÷QÿŠŸÃb“ómf>@§å’j¼å¦å’Ð!å_qrœù!ó9©;É:!óóAÈâÉ +Ú3B>ýÛ„,'l¡`„ÌèA½FÈ õí1ZkØ!3򾁮 pÖÙ˜Ñ5]%ìÂr*èÁþӟSo.ÛœK§a¯€ýó„îà‘y€?–ÉÑ65:ØýWÅz7NúêÝ¥DX¶–2çåÒþ­§ÚuSsd!™¾d9†gŸS¬ +¯.잃/u6Åyÿ׫…}»±"¼‹‘õ~®™¥–^ÙDÞlÉ5 ¯ÙR&iŸíÜE”ܹ:¸Žå¤Qíó•˜TÙnǤn9—[–e¬càDS‘ÕýD¹µi 5Þ .çyæÙçf4ôâgΔ/Ä‘œ~×”²TŒ´Š|Á@Ò•§¸ +•ÁàÐãg“a ô»A×lØWΣ>N°[¿ÎS›IÅ/\Ì uX±8ß.îÅ0¹¡q˜îV¦Q—€ª[u^ƒ{^ø²òez^þaØO®Æ)›ÅèÒà!ÀG®ý5óöHÆÒÊry£ ö¬PÇŽyT+jàJìûëô‘%¿=¢Ö·Ï.,AçC.¯óO=•,ê±3Þ'Ðõó"?‚âÊ¢º*àŒ<{þtƒúü­^§†‡!y¿p•i/-¼ÎYÉÕ®h$!uØõé:KJ2p _°¡¼²s¶äK=žØ`’‹XJÌÝ5Δ¡° —ˆMê` Ù‹& ·œ.–ÅÆ`ñ‰„vt?W¦Ô ¬‰‰èpžÁž,æë·+G¸ÑH#Àí’¤;‘n–ºx¶ö&Äv¢É¦'Œ:aë¶ÆëÉÀÑšƒ$üpò¢m`“ 06–×8É><8ÝÐŽvé6€Øìå!É‘Zö‰ÜRôŠ‚EÎÃ-Õrç¤êVC2|y=PV»Ÿ‚šŒ‹C‘íˆæ6ˆlóX3‘Áó$?©DT‘øõÃdƒÊ´`ÙMßl Ĉʛ ôPH:¸à3÷¼ð/÷Ê1 +’пÉ2ͽ mU‘.™¥- °Í Òàywy‡`öcÃîì‡Ù€gnrdÚ_ÏArM.F2 y±Ú F6B[—9$/ ÓÓ5\ÏÖÆ¯3ÈÄ;`|^0RÏ7Øï" Æ çGþ^¬ë¸—²eŸi^ä§ößþÇÙ Éa ÿ6æz©’æ9¹Äìÿ×iÒQ&RÌh#ºª{ò¦¦6Y“\¶$©ˆ7h+¨ª‘u]+ò<ã˜æ¯Lô´L™ÞÏÄûô·»Q”m„íF·¹CpœùP­9 šÚ`¹>Ñ$qç¸`axºÐìÖ<‹²ïãJõQÉ@øòžÉ?#ù9UEªO2ù«Y°°ø“øçü6íºH(Î@J—¯“¹l»ß{åY…?ê. j¾ÈÎËYjò3_n.k‚ùš‘÷CÈõlÕîÛgųÊåóz~¾º\U‚kòx@ÍZ0¾Ãлl°BóX„‡Ë¯EØ2³Þ±ðr˜I*êÝ@,’DA¢q7È_Bü8Ámëi"þáÑüºqÍ/ÂQŠã¶ÿ•G¬WòFÎl&¤P\Ì<&õ`“TÀe%*â .7¤ÒjáÐ(é`(›es“­E`î°ê’ NF ›AËlâ,]ûô}–~Z¹5¸Ùðk«ç@³ÞW0©×uKǯü4›ä'f«}ц$M^Y4Ý©Ú73ˆ •“zÚõÞôÓ´(ìÞâ¸Àí£E3xÖzUðX.˨u†¤ù½Ç°R0K²aqeN¸Üj™l„¡ +yz¢êœQµá1Rµ¡ˆ +ÓÛnË…Æ™÷‰¼Ë%¹Œ˜¨™²¦j¬sRìP†©™¾‰ó0B„SífÛKè͘?ND³Ð¶œ]>÷#Áå~Möê*x Vã8Ç£°Ú/á l¸{±æ‰v«µ[7â=Û­Z²"o·_¥:7IX³rŽ™ÎÕ‰?…‚‡k1úA‹RD¢°R@¥:fI[5}[†Zá–5¦ Ë®í™6(™Xe·Qƒ„wt?‘Yøà ó«Ê(Å¡E–´HñØ‘ŒË“ jÙ.÷ÅóÂ}ÄãûÈ +C2²wN¤+EŽYz^¤ß¤ ŽÔx‰HgóNÌæŽH8£+ËNN8½Ssw¦¦Û&u$"œ¹s†å˜±Ëf¥ ]z}f±š&øãÏüØ™'䲎óí‹ èÂüž²¸½ë°„° +`4yJ{rߢyn0öí§Çž3xïÊ>Ïv£á±x,Åæ@™ +ÀU|¦w¦©™lCÜcP;Ö YgÞ ŽydÙWB—Ô@æyÔ¥òµ »“2 N<·¬EbÉjÄÁÆË’±½Fê¤ï"¸—-1zl! „jøÒRc +—q!ŒzÆH©þ‚|½Ú›À”šAºàQy6´1D‘#`+;!KbX#Ί „­úN†2øuªKj€ï=u(«û$)I¶ µúül¬½¯ž¸p¦õÆõ +óØW¥ZÓ·üíÿÅß}7ã†ße‹ðˆx•Z·ÕÊV¿üõüõ 7t.vä“x2–¬OéÜL[áÙ;€l +;Hœ2xh`• ^þjª¶ù‰e/ìÞÛ™#ˆ<ج€å´ÛÇ(ä ;s5ªÝê­³fA i! æ{êКª¿$dnΚ2ýÍx•£é±ÛÀܧÐô>îKìÀ¹u'šÄ÷\…ìž=GÒÔÏA–‚ƒ…Èè³ö÷±nùÆ!mÖžF5·âɽ™­a…L°‚iÇôààŠmàò'·´ŠŸ|±ðgF÷wòó!ß¹ÿyÈçj¨ yp"Vë[Ùe¸óÎÍ„’CÚ^àd±üð4`h_œüþù[þD0Ã’yúS7Dæ\x(9ƒº*?F5öoÿøsšè0çgeu¦¼¯oœþµP—ï³fofa²¸?:‡Vfîù»ç×¹!–Lò½[ÀÔRñF•GkS¼èÉx.Ò'ÊåZæhzlîPKÐ øsM¡´ XË$Xóvy+Zå>à*9Éç#œ©UÝÞí8cncŠ6¿:H-ì +iÞ¡¿œ¹ùø&¨*rÈxßÖ')ŠôÄÏ*È”ñUvL#÷uÖÀù’ebu²·ü‹Õx¸XÂÅja¡1¡XÕŽ`¾Uã¾Ì*ï‹QOpo“tŨغ^,ÚG½Àn^ù€J=ÀJ¯ûºr$[£Âù…Ñç·Ç3±ãŽó¹&ÀÅÄåÒM›S÷ÔÖÃ}ñcPr~.x,GMJÀÖ".™ûG€^ð©¦õ鬂h?Åú¸YÜøÏ™™Æü=(“i=ŒõÔ:>yº?cM éññëÆº`®]p‡@ŸÖÆ|h·úåTÿÖU0Šó#Cc¬‹ui$“I·öpYªº¬Äøçš í=;¨×î:Õ{ÀÙ?i§g?©‰°!v.íÊ2›-·Ð»9ùÉšºoš¡wiËÀÑíäJ:óty¡};OÕiáÐgþþÇ#FPÖb<.}ž£Œö=EÑS0*`Gì×#Ôa¼—6½)Òõö_ÔDÖéJÕ.D7܆þ8¡›º°óy&Ëþ0'd)­8Ej›¶mÍÂÚò©ö.¶åádOÛÿx6µ#/{[Åv3>]5l)äcuÚ¹^Ù–Gê…yÎe¨¬ u Ù·J;û‘®Š“Ç{€ºP²}®³‰= +ù®$­ŽPÝø{`tî{½ˆShj%ˆËÙx~È×ɇ³Ÿ­£©¯Øzôˆô£;?=_Ø‹³I +ÈŸ…–ŒÉ=ÊuÁPÌjy‚H“}ѳØèyІæÛ ³RX‡Ì]Äj¨ýU¯Ìm+”︢óõ-§v™q +ùÄNž-'Ø}°(ŒIWP‘ó€€ì^Ó ›t‹w’Õ×k—)Þí¦–U!—ŠTßà¹ô׃­#™üqƒ+øj½Ï®K ºÝÕ­"Þ„UmÍ‹31Ý*V ,I€žD—ÕŽÆ9ß wMC˜ƒKå‰#¦5"2¸ðÕ¡½x‡´|ƒ­JÞ@W•o¶ : 0gO¦Tìœ5KÞZOÖh*Ñ¿¸ý2ë ÚÚÏÑ.cZ«î¬ýö˜üC4Øé¼_g#ÃåŸKÕª›=¬ªÐV§¶·fZ$’uÚP\£ÙßvÚ·ç8„žÆl­è¥)ØW3¨bB thä(«*«nMCAÿ-L;ø}Ic±ñ!pgͧ  ]ûû$ÅÙŒkÌf±&¥`­r®¬s¤—ÜãT\sñ@J¸öeÁëDÇ:øí#ÛîÐàzòÖ—¢EÑ}²_r6kCÃøC×PA´e1aËLëù–±4ßñ¶.J$·ªH»"»uÄsl¬{]´$Ž/€#¶%|,ÛÀ*ZS5\b¢n#Bó°%ú °Œ)Öµ®)òœÜE®tÕcp0_ßVù„OéÅ ^ `ípb†àX!æïž FÎúý9ì7ßæ8]1"0I´<ÖÓPÍû•Àƒn¾³zp?ØÒ®ÊQÞ–(§w kg +n™qì(sÇcôaW›9¡üä„Z˜»-z yw$«w z¹ŸÌ îº/dïþþp†ò¹’cšâ´þ#³‡C¨Å^úµÊŸVÁ}Û»7¤rt°&Ë9òaª—P'%Ÿ0os78#Çè´ ðG/}Y|xyÖtèÄŽLc²yè*Ú2& Aº!b/ìêÊ<`^˜Oÿ +ˆÄø!&Ij«df¦l±Ì@à` 6êÁ¶Ðpå %Ë×»ŸkÊäJÒªÛ—¦p2døåñH¨q>ïsóbá8t3#“ñg¶É{öOÝ’~t¹ñS\ñÌLÙ‚Ÿq0¹òÇAÓB3U;í¸ i¨²àJùœ6Šp{›Ð€³mWʵ˜ÍV‡›ÔX÷%aòO(ôîj}l;ƒæ—|õÓÅðá5úÒý}¾6 +Âx!á…E²âÇÿóǰ6<¡BKXk¿ü÷¿t_’e·ÁeYUµZ¶p°§a¢ï.Ì€-çìQ«‰oj\akòø¶õÅÉQèÙ˦ÒÓd1ŒõD‰lÜå<¢ gŠM4¹Òk‹b‡J–'Þo¾Ã:$Ý0v¸ÝÍÍS'¦@&<ïïcªqÄÜ6[MÃIã­xrEÊ:·ÝŽÕܛӃÓk÷¦³üÉm­â·¼Xxxd¤ðžÿ/Þ!†÷»œòáÝë +çÊz×À<Þu0q˜<‰ÃV¸²ÅÊë + >yÕÀÞßuE0¿êŠX=uEcù]Wñï«®^{]Åûã +»\@8ñmûÏ¢°cýÑ–uÎ{Hñç1ŒÆÏÖ”÷õj4ºµoS7ˆ0„> «3Ö³ï]\ë¯\ךOƒú5¹®v¹¡ P׬Ú&ÊÒ)ApbhOñeÃýéàb¥×!'KÖ)A°Î¦¥Z§Î[ÕZíýØDUd¹Í#N¶­F0D]ªµKÌò:'ÍùõW]çv{æbÆç{¯6o&.—nzþ>*sæöå·õ‚¼x¿N‚ñ_žŒó§ÿ“îpè ®a¦0Ú®9X>q ú ¬qí~¢ [­4ê‹h¼¶^œjT¡ òž÷]eDc—mO–±;^šÛ–ÏÕö@t‡ö‰e úåLÐð-¿È!ð‹![ÙÜŸü®¿XÉö›nDüúi_œ–°yŸ2$+›—¥¬oþƒClƒk­Ë¡à¿Uy>ÌÌeü,TVYcј…_ʧ eY¹ü¯¨ 2À9›é$g B*'—W7Á.…´éçä*¢i‘oî‹ÐÛ©#ƒæ5l$¿9ÞO“wC€B¯Çüò%XøV¾g+ߺM`ß óg­»øùC@-âUsd«Ú×Y'7ÔÁfuš$|ZA?\<œKykÎù°â؇‡tXMÓ—y@­éËA‚ZÖmÅ…SÊàð– [(‚ pÕcS˺"­ó9©e ðL²a•]— Ÿß·óhÕég.ŠÐø\+ûbâré¦çÛœ­~Ñ.EÏaª¬»]Š‚(Ö½]ŠÌTW»¤ŠX;Yu]1«uƺ¶CÛa ½Û%Á¾ëªw»”“iq·K'íRÔËj*‘ò塹}ÚåõÀÓ.„pjÑ/gþ®]žpj#û:œ=Á…w8æñ'À4ßá$¥ä%¸ßXú;¢[}GàÈý\¤AÅÃÒx`A¦¶GPÙ3Ç;¨Þà/î–/±dXoá.kE…pÏýSƒòß²Hð@*j=MoMŽí¶ä Ç ­t+÷°uhÖUâó\IJöì]l÷í©dщÖýE G]žG ¼E¯ÛüåUŽ\Û­s¯Bð+Nà;øUŽ\O‹ø‰nâÄÛwc é©ÊÙU‹14Ÿ5ï—þaU“=çkÕË$!ò?ª^€Èâl—ê¨ñˆªwq5äYoQ‹ò zuÙn¢èe0÷±.ÑË Ö›z‰^6)KN½‹wÏÁ¾Ñ{|¢÷¼2ˆ^!âš×%zKÑÛÐ Z‡¨Dó¡$ ­Í4ÈÏBÛôƒ¸kÞþyû­äÌ ¢bSVg"@´¿~ÝFÑVH«ÌÎ ÈÛÁ… ì ò’…tÕ`¤ý°á[9Fì®}ˆÆÓ~Ï,&D<ñúNV¹…›Mêz£ÌüÁíIžC? `$Èâ$ÉE¹4 )Nâ×Ó&+±Ù½”Âí|—¾Íê)S³6sÝ÷cDêU{’ Á@ÎNS¸*aJ’©[œ’~Ò-Õhà°Û©Ò5!„ÌìÛ“ƒžD¶CûíTŽ—æ:HgY@Î#wÍ(çb%o\ä Ik~v&•[kŸ¦t°WDblÜ^;ûjFV°¢Úæ0¿™‚ø 'õ3HvµÍL>Ưùˆ~ðÛF-,ïkr¯þù×îU2–ÊzU,홌˜ˆB•ÉêÓº‰—‚™¡¹?îùôgæ%–¼‹WVrέysA³+H§ÛIGÆ®a@Iè¥-„¬¸#³T¡ýìVx7²*d¸u°ÄsxïúÂbf‘!Ze®Ô»øF§âÀhU̳ýMñR´Êîn(¸ƒy—iýä_§ÜiØZÉ"8{óv" £lÙâßÒ(¢Ù$"/g²±ìq ægŽ–‘cLãôç±¡é‹æÖ.½Ö`¯Û8b•¡+ö¿¨û¼@°êuÙ2ô:]4±ú&ÿïK¦µÇ ¯M€Cú²7Õâ ÌøjÏUhÉÔaæóÔ‰±]1Wº²î~FÕ)è·Òõ8&#>3ÏL3x˜2K÷4$©M?׫˜#èí zF&`µlä‘!+›’È}Ò‚m–݇ñvœ³\>–Ýšñ5ÿ%íw1EÉružÙµgbÂÉ“BPL5îÖ]-–D¬•°à’š£‹/© ÑC5ÚB»I +‡ïºËkˆ˜ŸCdkwÈì‘É+¹óC®X%Ïmoigµ™`|X5­«ÅKÏêî&1 –Ð=‘à»sîþ»yÇ…C]¿Ä&Z†{­Œç×*hÔ…¡/vì$Ï—†Ðœx ›5å__AVzÙ;î ¨âg‚:u-’9Í;¦}ó]ñÍêw:`X6‘+q´'pL0D¡ÔïV«Œ$}W®Ç\Þ…zBâæbðøEwŒáiµ”­ºÃÂKË!E[*=6ÇóÃn\UÑ‘çz÷‘r~Ë â¿ÿ]vsóy›uÒÂX§;÷¾W3ùüçÿÐlÂôpźj@ªQYE¦v•µtÐà ¸ çB×rn/*´ÄªT?¦Ù ‚ÔÄÃYxC–W8”97 +c™Uc{Lïð—æ}A›Õ?.¹+Øjv÷Æ´“¾Ã°ÏªW4VÖ|ÃÂWËi©Ú,€Ûâî¾9—Ýñ}êR=CÒøÆ5ÙBÁ¾-‘Å]ùJ•…g2[M_¹#§'9ìÁiË&ïƒùyœÜë3Ÿ…Þ3ŸÅŠûÊ(fQ9'-©ñ¤§5ÚôtïºXÌÖAÏ“ø1çÖÌDq'Zù™Ô¶+­°rH°Y$Õž§w:KxR!$œw<­ÅHîJlñÖ©åÝ´øÁtÆIÓ¥¯ð1kì`qlá>ÝÍ2tî‹Mõ…çBˆYJ uñpcɪdnªlCÈ`(ˆQM„®|ò”\ý–“æÊL»?54{é™rR›¶O=Àµžå€H”v +§ö¤`ëçóÜEà÷Ö¹&ð#ÈõKÙ;¹ëøó: bnýIŹ•¿·bÅ ‘`¡Š¤œ^V™'“‘Ù¯È,à4ñv’«½`·õƒAbÚ§uk¿Ì³Î†IÕM2!IÃÏñÖ¨;9Õ}‰[ÎQ—+ ©b3|?®.IŸB©Ÿ°D?ˆŠžÈUç[„e.^RHÃn˜\€bo•éVóu øh'd¹<Á¦'å‹Ùx3Aw´8¢l˜s¸=,ˆ:Ó‚—l 5þdÇ ©J<ºõ^ö$ÈC'Ä\ªõî3y·c™÷¹Cº µ)DO[ã‘-ˆÙ³±¾i؈ÙÃA -Soš¼ŠCé2¢`9ƃ}Ï6]n>N\†ñ¡zYz}žóàD‹dåu7mòŠ^2såç{þK8>DåA7”Q}¦ÆÎÅz|bª—ð]±jt=Í´ê¨èp¼NhEž3ŽÄ(›¡.³Ä…²‹yåËe¸`ÊÐ<æ÷ßÁø±A´>•8ñÒŬïë\ÿQëw°—Ÿ™úü†ãᤇ:ÂTã.ÆÏ±tØdÖT,yêHgkâôöÏ›®{f^¶Ö±2@ù.ï½+2Ä©Í nÔoœÊkð>ùö·8n³W±QX0½„öH––¬” *@Þz?%ë*Äxf^Ì)F:k#AL­0ˆæ«Ä`­Ç`›H.ƒ”Aݰ¯s‚<Ëçs›£±ÛÒvs·±'¶}µ?°þèm×.Àºhyă3žƒoÌóó°ôN¯¤haAóÒf$‰põêg¨šE¤ø&lUì·ÉÍ› Ì¥“_d­s `&õ_ŽÚ…/„"ñ ^šØ‰u²fâ^*aË8ÄÝ™O†ÁÈ0À5ŽÉÚð2yC(™*ëÀ«2Ú†A)eq§JÓU”Ø9fŽ#Kó\mOäq{œ„l§å‘Îx.4  iŸÏceà©ôVD·rH«‡ú©p5–jÑ{ H‰(À>°NæTY©`ÅË*ƒöÂÉ2è6sÙ[¶ôÝà¤B +Ž-é!¶ +Õ&ŸÏåª+q_¶ÊOkº•$[b€œž[ ¨]‰@: 8Oóq¶ç¡†ÌÉއµ¶Lv«!™Ô²Â1ð„Ä=Í`pÎ"YáÉ,˜ *:‚ߤ™;§É(9iŽÌX&ižj;̘ûšæxGx8D_JuæÙî<¡Ÿþ¥¼Êq,Kn ?§¨ t!÷ÅFÀ2„Áô!äT9rt}×d¾ZÔ2]/>“Éä$ñ;cW£K”GÄAIR7Ö!~ùެ¡% +í‰ã’‚™j;>öl +ê+©*=ÖRKˆ²Y£À¯ùœQÐt/Žd+:•¡ÿüýb L"ƒ¸ø!H • +úÀ¢ËŽ~ÃÝhô9¿äm¶M0ø˜ƒ^n?kãMwh<ÞÖŽªÞ#8}øZ1F̰¬~Íæ´¼]&Þ„>{feÞ°‰+yf"@‘Ð[›lKÈ+šn.…ÑëÉYa¢êy7 ¦t{)ˆ’Íü¾ZG+4l!ÿg­bü vªñ½Z$u~& }žÓ«Í†`OŒÍ—ÑOØ™ÚÅê9°ºd³ü¦”ÎìëIÏüÒ‡+xÈMǪ«ú.ùmÀëRBþŒ„òJë 샄²ÒÕEB;‰dº‚ЄF" ÉØö$¡]…í" ´ÇøÀB3 ±],„lœXHŒ°<óf¡Ò¶Ø¡!±'òû’ÜjMˆôx•¤½%ú´$Krü3!)Íß +y°X;Í!³)ñ/}V5t³ˆ‡6z€<àxJûP™v×çñòZÚÉ—¶’€mœãZdãdnTN3‡±yÞØ5üÏ<þ?›÷G<­˜z?ŸÛgW^ȾÌ#Ï4ãÎÜÊjQUö5Mööš\«y9¸91vŸY}×4ÞZ|ܘMÁÞZiñVü—Ân5"BÆWõ.ìŸS؇@òn^è-n ôÎÝÕ8Fb~º|Ê$øµÞºáœC~§€[ÂEËÎæ~À}o_E\Þ‚>[Å_+‡¨×t È:Ãk_ºŸ„ù¡?%<#oÐ ;´J~²ûG‹§ Y²×õ±4 hTSÇ™-šË†"Tb/ +¢[ç°Êeê–.V±èêCÜ+%’éÝÁÖ?KÓ§ä^<Òà*¤õÅv”¼u]g2—ýóö0chœÈê¯Ô\r´èÁ“Ó—˜»&*\§üÏÕVÁDŒªu<Ÿñë^ÈåèD<ºÜž6—ĘˆØ œ»%˜zæÔÜòT¸óEr½¨„`Røï·*–Ü»ÎÁèlÕ!jp¦Ò‡BÒh/ïûÝE«ï’wï¡/DÙJë;^}¼å-Úw@-n)㻸“Nz5;jqÿÞ}‹ÄRÆiPÑ­jQl;2·%8‹û)ÀÑ–ƒüïª#I‘ܶWtZ"ZNfæÜ‹+ÔYÀ‘‚$¦’J/ëN}œDÞ«ÇÂÉ­`ótƒ…\›Nj vþ%‰WOt&fÚ +Ž\÷ÕŠP&€•Fëyö.¬Ë˜• +>´~ü¿sQ]2yQM€Òj¹W߀¬êóK-濤 <¸¶i¤5€A ðæ‚Šä0\‘ËÔhž†ª|¥™€² >@”®ã Ëd™F„æ½b‰ù][èäÒLÑ·¯V=Å%h½™Ô]…Ò‚AÜë…*ë­L#yJŽÍ+èò¬w¹ «‡Ë©ÆýZÝ43bœs’´Ðœ”½È%7–%ÿ %ç[Ó{ðT¼þ BxÿZn‘ò;%–×CŒVˆ2´›$Ã|X×\I­éÉôMé¯èí8¬±_SàºËÿq@ àO¸ü~¾£‘’‹—ÐÞ=Mæ…@ÑÂ|8TªY‚¾6nî1nÒvŸ}‡ûަ"N½\¡¤³Æ¦¨‰ivã¢ë)‡á$kò>éÅÁGßðv,<WUC~ù÷¿~Cqq2 ·’‡d¡ÞËÕa£œûëüñŸñ7e;ˉÿF ù¶I%–%™ê ™ÃÌËf^cº”1ƒj…ŒûÛÿü»˜ÝÀ×ή†™%Ó °í&Ìœµ%2À“( šj‚}òèéÇ×kÓyž6¤Îqý”IuQƒò¿…K—®}‚a¨¢÷£ãE„6å‡.A˜Ä»œLMÖÆPzóµKdRíø,:Suà-ƒéóÏXŒZ²eÉ£6 ÿ§É•œO,iÑXý)”= 2„xÕëJŒjUÒ¥ÏÖ°Eî~NÙŒœ‹±2í1¦ùä¾ÇÖ²æ˜!ènÌvöUùû¢‘ÂÜô¦¢+ãÒeW +osËÆÍÅò¶ÃD ’æ +LI"Gïó£çÈ?œ4f#B¥¿j£R¾iƒØbÒ‹œRÜ5+ß+ÂÓJb{Ž®b\óµicòÀ +Fø)µž*+šKg±AÍm¯ÂèHÚ©€NZ8ìYâLàh ð` Öv_"hÓ Ðšå±Ð¹ÎB½S2Rò3pýÈÖ)ÁÜhõ™D®;Íz ëÉî?/Åš´½Jó÷ A4©NF¨f¹©x‚2^2ºá̶(xÄý’˜¬pG”‚º5]*ñ§™æƒ(CûL…AçÖfå­Í³À qvJ‰æB ?OPBÆ­µy ¸ÐVP­jhÄGGõ²ôP";(™Ûu =š¿5jùÂTû-XèH°Î1·l=lZÜÑ óØLÃnÖѤю2~¯X¡2;£cv7çsfg Ê?EQÄZÑö”Õq{QU:1xNEW¡ŽG(zšT 9¹‰^´•……PÑ6\6õnz¥#1ºò2 ö6¶,£³rÍÊT[÷+h—5È‹ß~»ý„ ¢Íz,»±ÿéö£9½>‡1²á—£u¬^»z¿,CÓLy˜?š¼bH0×q3@ÛQÈÍéÑýTyB‡fÜÊî0êžÓ®_[tZ$ú©&)nÂgÃX¢µW—¤Yf«æÎi:ÚÔµ÷òUMI+/ÊfZ›mEžµ«Æþ@{ï¬vËCs »}o÷J&¦”wå&néÙ=õŒÊ­Ý +6N½éŶÖƵ” 'eQ²èR‚æúÍìK½s.sÁD‚þ1½ñ&E{¯EÒ´Ò®H¦…[¥ÅK)@Wê*ËãÙÙÂSÇ­1RFÄœT¶K6¬”$‹ñ:hS,À#V.Ó³c’ÆË®ú +”ë’W$*FÕŒ´ŸboB%Íb4 Þƒø÷A6c2Ü.‹ù±áç” Õ¡§P.TGs6?®–ÝÚ7É;k;úŒÏM¹úpi ë«ûÁPZQò§Ò{m•öx8*7&žCæ§¼jVÈŽC¯Hgòà¼sXý/åU’cÙ÷>E]Àš‡eÃ0ŒÞ4 ç52ï¿í 8ˆÒûβkU?’“8Ó~癸‡ê«º åÅ{ mqWeCÂÛCv.^½ô¶xgþð`£ÛÛŸnß·‹Ž‰­ÎùØv@Gl; SöÛvãÚs$%SÙí9 }èF³=GÖƒn4ÛsƒžÞduÏ%êä—¢›æ¦-9 ½?–P,Ï{ÉY~lÁ òï–›|ôÝbƒû(J™ÿ¶Ø(¨¢¨m!J@°&Û +`6¬u±Q^ÛÑtl­×VsÏé¶=}}³Õƺo•(ÿ¶Ò(™=r+Í2dëì³uF:»î.ÛhjÜ­3zålKN7UD}l4Äl#ÛR{ó"7úwK-®9𫯀a5ÑFçÙwxÁÙr[“Ì¡˜yHåx¬aðÌœ…øŠ˜Éé´ºýÖU¤5PÛžдq)•.6Û¦¯M))<™*;z­IQžÿÔ¿fü9Vå£Ã·j«|ßQ,ÕÐÙ:ËÎWÌ†Ž ü™*‚â¶6­QP ¡ )Ÿn™ÿÈE˜.ÐÏ_Îô4ôE¼Ð퓤øÅ‰ÊˆäõÈrTþ•뛳ràuVá…!Æ—"0XYuD-¹‘”Á ¾#­3E«öoqF¼Œ†Î³šZ%j#ä$J_º8EU õU%ÓºO9 Å-´WC± Å©97š×”ZæK64®®ÎøF–©ï©Ä*Š^}q°‰”oH­sëðž‰j/I›.b`#í¨_|a¾´^'m4Å4ý@ñ@äÑ!Ynâ ŠØÕ °èÔU>Òº§n×¹i ­TZZÌ3€v‹V Ðú£íµöl#Û#K9øŸ [ŸRŒ¥•Ú…Ž8€’¤([%ÕúhE°ó)n,‰Æ_bÎ;Z´_GL8ÚÄÿ_Î6«EzGÓ¯{Õé®b“ÄýÀ±‰õiÍ»«\—Á!eóMËÆ͉nyÇ·X¼AFö&ì#K…Ü:`mD!ЕjnÄ‹ôÚŸågíŸNƒ’^q¦Ð]´ÆYø¡£-vôVú(ôô2Õþóßÿ…÷c­,Œ­Œ‚â"¦2¡Ý]ŠL·åíøyP‚ê’KÆKÝ5†F{ìRŽr”ç"Wi€î¹Eú*Uöm·Ò<PüCBªÚµ 4bÛš]—ä ýÖ¸ƒÛ¶Víá#@z‹Éù˜M£ÏŽÙöY4/}¾ÏGá"7;À/CD„wo½’°A§©Ð¦94¡À·Ü‡\•¼i¬26r +²>'µ”9ƒi¿ÄÔYÙi¥]ùýXpŠG|ÿIIJ¨z=Žü´5[$Êó÷ÝÉw ÊÀÙ£^H,´ÃµébºÿÀ% +÷b¡ª‚ÿä¼aàôÆ ’Ý*TUIæýwCcàð]¥ßÉ¡ßûãÏ7cfX,?øºÐu³ŸYèP 5'XX7Íñj`[M0¯û–A<‚B|Èá?9q‹Æµ æ"§ê¶]^)‘7„N ‘•‚Vdž~-p”üô`–,0ØhÙö"¹sAX…'ä@øö™˜|õ!¤ÝmAvøaTX™QR1¦ð +јwÒìó"Då0„ö®—*-?[:Ÿ0ÈH;;ÊD¼À‚iEë„¥$6µ1“5Ü +¹øµÀ¬.ÚçtjMmîM#âvˆæmÊWõÑdîR}Å6AÇ«¬S\S볬4ö4ˆRŽ;ÝM˜F •èrÏ(ƒúg&ßÚQ BLR/÷Áþ‘ã]<k^f˜3ÔÙÃŒ:ŽÆÃÐöü.(ïAáQj³ðqY¶jÃæSбŸ>Ëu÷¸‚2mš\\~Ú U×;W$`*Iù+Nƒ“ø—Ìuw|¹nئìUê»SƒTS—w2iZÓIN”:^E75+>€(§-É î„ÞdâØçó…s× +[FZKϧ=2ˆ˜î‘AG΋1N¡ À¡.¬z„Ù²A<[V×Ý"Ç–ã¦=¢Ó°Õv¹G`ØcŽÛ`WC!¯‡8•Æ¼ËØ‡ëQ{¯/W³îy÷§`;_[ÙÎ×oFß7Ûv}XEಀºoùöFÁm‡úß²”ðR¹ ÄÞIgæ¶:_½îVaI_J¤$§.ÆÖ›3jQ|zw7¸º,üЭþ«6ˆhe’BÇgv $í3pìˆb½èâ gc- €“}¡«kPw<@Òã ÞáwÕU ‘}ƒÐA_"´´Ù~j´¶éè Ö$Rmq}U<À7±O=‰'sƒ¨P¸º=&ŽV²¸âtl6‚ dW>sª”Ê‹€Þ%ŠYñp}>\œ„á.•ø6Öz &!Ôø»ÚcP±zÓÊË®òPúDöšÌ‰¯–ÌQ+ƒW ¢óŠªFkÓƒ †.¹rh£G^‡TçŃ OZ¬Xz"ö¡’ÖÞ¥¦ÇzÖÖ:G_ÆxÒQ@ņ»dÙ>íòŸOo¤c’DYM{Ž@û•Ä\îÇÚÿn"èAfm!a´¦Nãþ0–nnÉ +vâ™õ‘ø˜#œrÌJɽÏûß~÷ë©m”Y9ØÔþ¾‰y’çfMüÛÑÄ™kb¦}3í ÜwÒj€¾‰Û:ÒJ>Z““TÒÑÄuQ¶KrL±¾u¢FfÐ71l§tøiÑZD‡d±&6e7±.®‰ÅÁbMl”£‰%äâš]RS\K +ËnbÉtqMìŸC)äÕ¯Á5±‚y^M\õ¢ñM,%0–…¥'bêuŠÔ’™!W‡¯€ñÒ×1¼ú…4k}¬ßÉøBƒ 5uV\‘aÇÊkÑq¹†»«ê @ÍU_½$'ìàÿŒW9’]É ôu +]€ŒÚSƈ¦Ãº€¶£ûJ °ÕûÈöºóãU¡°$ºA†ÓŠPÝ:÷£Fz“[à&/lhÕqºŒGpÅ"qIa³é[øg@m…Ùûë·féé¸â&Þ"u-5“°çvï¹S©8Cz`ýšÃ¢KеæŽ)â¸42$ÏþýŸ?þü×›M×2wLÏô!éÿ!-5 öÕÂûŽ,A$ÊAG´žú!µÈ„ ~B¡µ'Ø)8»ì–ú1¦N ÅGWñ–Û"ÿT´ôØ]po×…ÊÞ4/J¸l²TÑuø„yâº)Ùbé¾e?ñ ´×úçífÖ& ²ø¹K1Îæü˜´SB(wÎ*.ïÜžTB(ežÄÑpðzcùÖÿ9V~Êùüq^4\¹<«'À3>Æ›†’§™uªÐRôÀS™˜@ +âÅõŸî–Cä»v}ž(ô€*uoàÝSþR3”hdJÉ'SÎHZª“ ¡4ÝÜ~µóÌÀãfìØÎ cÉÞgŸ ¨‡óó¯èf YI¾(½QS÷‹n`S:xŸl +§H< ŸÀ’ iÛrД‰í•ƒ’Žd’¡¶È ƒð‘!qVÏy¹èy>© ˜ÑÔV3ÞŒ¾Ð §ñض”<][¡Ý¬LÒâàÞ¬Íì4ØŸ–Lò8±µÝñ’äãÉïvð|_eN\ ¦Ò°d\A×αg“zmó;úï€MuÙÄ4ÀNï×;P뉣 Q5mõÇ‘+ÍÉw·¶ž8^»IVÜ2¤ÊÏDF“ƒéä 䞺åä  =¨õSuÑrä|,Ëò§wbSvK\ò3{¯ë$;«Kv&v…™f¡®í_¯–ék$¶»áf‘K€žž1<›!Fid6Üõx)ê] ã‹V ¬T˜Í¹déOªŠ¢UAØ¢#è÷š©>]‰Ü"´U¬Jt/ЙÕöTõAO_:¹FĶ’¿„nºXеϹ0'ŸÐrÎ-Ò¨-Ýl¹/z¤%ŸËm~Ðiþ"Ã[mw¢þº^p”¤'œT‚Tæ8SÈ}úEG•!øqˆØR-Î@[Òˆš‡ƒ,ÔÖâ ´¬;Èdød:ô5ȃd›¡d ë5ÈÛWxµÝKxö¤·»óxùŽí o@þé틈-p@®¼ûPt«F·£*¸Ã3tg-ÑF »Eh‘F!G4áÀ¡_€ €ÐBmzâঅ:ÒLõT`HŸmB„n¦ò#Ãì×OpÙ1Âp?ß<ŽÈ¯]ÄÿÉ) 'ç*4t€÷ú Ds¯@mžUž¢Oà âjŒ¦íî' æ¡· TiÝ!hÖ`8Çb°SaÞãðO7}&E¢‚úú«´÷"º.$¾Yâ©Â± +êd™(" ù)SÉWÌq¡¿ò¤uY ƒ'݈*ù“¸&Y€V¤ð Y3Pìó‘ Ò–ÂAN³ƒ‘"~œLýÎ ÐÁ­E¯YKÏÊ‚‹ÐÑ‚-ªýä«åp.Kvn—.¹%Ê2È:»ÉW”Û97ëPš±¾ìÛ*ã§’Œ%¾ò$…ë’ݱ±¼¿¶Ç6P®æ*'â{{³:‚ÂGßf÷q!CÂ-S…5?‡4‹èGä­ŠÛ[ÎñÔ€ÄS'Ø®¿A;‡³cxwÃæb¨+÷ZòDTK~6èOYéè¼­eÓ[;mîn2c~^~:ú[é°7ï¯qž9oâ“%RÔ׋t¸‡$Ü„CJ9/Âh}@[#w.á@(FȺ…¡¯ÂÎåž¼„Pü±=Â!>Átƒ=Ö4ñP Á¡ßK³ Î5ÉÛäG¦ˆ¾¥zš™lK q=ª*tN3¿š¯U§»s.•èå×·ïå}‡•v¤Üàþý8ì…uM"õk]¶ÒÛݽ÷f7uЂmï¢Ý†ž€ÛdL.ÛP 4‘'»fCÇ,‚.SyûÔ?ɨ^¤Ë±Œ‰]ªŠÍ2YÚÿ•Âû[:ÎC[‰ÿ»+? ÌókíÛb$ï6ôŠF^_Kñr¬‚õìï“È2òñ梖ӆ;Þ•ø5Á±Þ]°®Qï¼ÈQÔýö€¹Ÿ?Î Àºðªþ·5‰€zè Ðä×ô0¡­ÇøHö©¡î«‡]l>æÏ¥¨ñQíE’I ÙÞª|™ÂÓ5HM"üÂçVm×=V™±é4mÇßnÿžÂÃïÅ/4ù….—èZMQ¸ÚgY|P1½z÷í{zCäL£áÌð£­w!µ¤+€Š~,L²‚íÕ„òû!<ˆ•Ÿq#ÑÒ…ò(%=ðšš•W‹@#ë½z‰á*˜Þ +ÅÙšxâþÙÃí-·mQyŸš%†÷ý(Åòêh4áQ@Ç4ô¼=ZzŒâ©ÍèG>zûš¥S:žê0bÜ:Ž˜€ÉsÓ´{ÀPÏ< ^Åc=Ž`Ð24Ün½ŽÄ/b7;vªŽ˜ ÙV&£>!H{Ìxæ}Ì„ˆÙ¤ vaÒØ‰Ö„~k˜@±C\£θfJˆ×âÂkPy¹\÷X¹¸Cš=›3!ÇaÎ4̯´8gèš÷sF‰62åB~=‡4)PFL£åsÐ'Ìþâ¿“ê&œ%?Û¿%™žPHünè‰,/âÓY½Ë9ÏDõ®Ç© ©·riÕFY­§}BT_N}û^ßij´vj²Añz¼ÜCwÔ\ ˆ>ª‚ Î×,ã·ìn–¹UEŸÂ2žij„Ç¥?õh÷M{”jüx¶¤4£Ô%¶Á«±çŤ„ʹÏ|.ÊØŒâ\žFËt¬I>RáSV}¤ †jÛÉÁä)nZÓt,YšŒdÝJÏפ¾Fÿv«’ãt—pEMoàÏ!ê<†à~‘ô{‚\‚ž¯ª~=Jõ²R=Oçµu=8Þë {¨b-з¼ä8é +ó:ù˜_$=N[ýÚ‘€Ä­ÉÌò‹¦M¦!Ý(êöìy;²`³H¤Ò†¹>UI]¢ŠþÑñ’6hµÝŸ ®.j"8^$=ÀmÝzf±}VË¿c6¡Ú`£ çX$¹hi>}Ꟈ>u0ô‹ŒÖØ¥¦‹bÿ‰0Òµÿ°Y5õsÝiàÕ£¦bŸ:ÓÊ${ÕôNìUXh×h™Âè*»9t’)£Øs¦¼7=h:ªèúTuÑu‰Ê¢ËÉ^hVÏrhÖŽ]äÍj¢èjÖ&Zž‘^žûÑÒI‹¢´¥þñÏ?|9\_+M³ |nfžÜ/Œßú´5p¢"Ù?;rš`<=pÒ»A:2kó 5ðØâ?.Øë&³u¯h×Û·‚üàÍýr7Ø­¼¹Ûàx·vMY¯I,âW— ŒFذŽì¶–ý`xäq]ÑA"¹_W@8ä—40ñçþþ¿ÿþ ¼ÜaKÿEC`¡eè³9„o‚¦oÿü&L れIA0¹Ì²Ó°MàåËR ¦“¨=¬’]½þµvG¨û¸Õ²ºlüØ€[È»‘!5, zTýÜJ1y&]néç§àÍnoÜÈêzÏŽ*¦vÅ'ͯ§&)çL¶Õzº¨S”»YÚ¤ãW'‘qºÇHœ¨Ãê'Qivpç¤]ÏÁ’ WìžÒÚGÍ ¦ÄÂe6HFL"QÿϘ…À9öl +B·³K}ËŒID .Sfè¬E`f…ø3:O£5ÉÖ`Ïýœêµç¡¹\rð3]´¹Cû”"~ÛCdUI-ºÝYÓ°%ÍåàiÄ—­=„ÁNí¶|Þ-ôÞå.u9]^º¨NÒBáÓñ,">\Ð ö¡9n¨5497닪üò¸tñ·&ޝÀÑ5q }€ï\ÕÏü?åU’+Ùq¯¢ |!çai[¶!À ð)ºî¿upLæ«R«½û?ŠÉŒä¬œW}üœò±¬­„À“Š$ù´ À6Ž¥ÆŽÖ4,Áü–:ã|ŽvÜw|šÒ¼;ÖG–a4Q4Ú~iít ‰º~ìOtÈj— ýß÷ÇVÌòcùÚ¹í^ý³¼¥+ŒRkà„&ÕЗÇn³{&ö°,}‘Î¥48¬­4wjNS O¬…Ò…^_g従jÉôòXUæqÙ +ºߪŸ­’bXk°ÜxQucB8Ô™!F à¶¾r®H ׂ”VwÞ!ã/ë룚B]O¡¸j—&–ÿö¯ÿãYbqÇ¢‚HÓ¦UšÊ‚Êïæ É…í„Ëv¨äþÆ^'ˉ’¸8:p0:ª¡`+„@s:"Z`öçh S¢ŸõͲ£Ï}"sϧoîG£‹=¦yÀßùò,'ÈתJzß‘/èw^jûZôiõTO*MÉ_jz2Y¤ýw½q°§u‘¨ y•<´“mÊ4¹ð.Kû‰À, î€©Ð’ÍÛR…8×÷å­©ÚÔS·Ò' *ÇÖª<;êF •î•®rÙÔæ;X,íüs¢Ï²n6‰ƒ|åçå#ëჂ—_k.  +ÔÈ8¿¿´ÂΈ’g †¼)]£Ó¥*@ÒZE™F >;MØq0ƒŽy¤õâv‡±ÅT‡o¥ðZÎñ”Wo[qzªÓûtp‰}¢ó~Âvh÷ìG!±Êº&\aš½Ï[ÛŒ¸âù£÷óä›H{»3ìð+ß•ýes‰l#J’ÔÁF }'ySã³sØþ©ñÓ‰VÎ À±R"ooh«ÞÁ‚œ^·¯÷s[©¯ûL¤-=)ÿ4]îu_’¯ƒÚH<:ýy×üs2›§"ø´&€ hñ== + ^¢pú‹Á:yŒVÒDÚQ Kh1äEª˜ÊC}±ÎŠÛÀ ¿ô‹ílX#æv|îÔ |’Ì?>×Â6Fà\Çr• up4E:ë> 5©‘cNÔs´Þ1ÃÉ ²tê ® +N0UÁ'šÑ˜åNßY[I2÷žó}¤CÑÐK†$¶1’n+E"µîì7×–U­}\^ý×°¿:v¯°—©ƒU¹s‡õ$è÷CFƒÎQÉO!$îxŽ‘#U3Ãý ˜uºœ ‚{J‘Ä•·¶I +ç—¿'+•[ÈÑìÃÞ˸‚I¸–À:dz™bU‡æÖ™ î$Å;i½…|¢ P“‚ÂvK¨—2OÓdŸ|·çé´¼öá Ä sBO—»ø­ÚÜÆ¢Ý n½‘Loõq.ÉtärŒ•û|ÜÄìÂÝ_ä†O}0(±=¸ö÷Ž YÚ”½Q]m´ÎA“ +rs§ Ú^¼¸ƒâ3F~ 'Óf”ŸÞ ô+¦î˜æ)é^±%¢)^r+;}Ðwº¦Oi¦¡M%^éã–`uîËã• y-ƒîHjãD„ŽÝÚE-±Ñ‹ð-GPûäÓÂ÷hçhK®ÌÅ^öáB‹¥‡GÜöio«óÃbgÞ/ Ñ5PÁï¼±­½×7cL,IuûùÁÈ?mzÆ/â<ùÚƒþ n&²ÒÜ› ”vÔ¯6“»l‰ƒà,úÇM_%úN…ÉbQÃCF2ð‚7Ûx,É+ªu®ùbh²¬ºîî`V?vtº¦î3‹þGss »Ë¯¢’¹ÁMb…RňR®¢8rQ™÷ç>–üq|`="&‚†Ó±r6‡´¢ÑPn¾Á!­@7T¹Öð!Ú·žI]rjFvÓHDÕ à]d´7HsÇcCcÌÍHGÊ×¢ ß`C?½9ØÓºžýØ…”?CÒŸ³CÒŸCÒÛ]BNBÖºç£ÛøÀÆØ ’±¾%Î#Ç~@süñ*G²+ÇþœB'Ppç£91†ÜŽÖ!ÆQ9sc;ø©U!§”±$ç€Ç= +]kZUéô,5>oJãЪ*ü :£”æ›ÎÚßuÐ1ÈKgŠznAè­3èLÌ¿që  øã*¬~ùn2Ã_é’ÈzÉ™?ë8RÈ®0ª‡UZ­Ú•ŸD?< òk¸tŽ{4¾¯­[® kòˆ7Y±²S?þ²a Näå‚E&T‰êA<—›Gœ5²Ûúê•ço^™³}ñJó&Ö®óÇÑ@x>Gã“qÆÎiâp7JŽb ¥Ô¶çеUÑŸùäÌqr¦À„:qfßX7#®‚`7ÚµšY:¯<l×̓@ŸWLØÅƒÀç1Î’)#ºÙ€´g»9ØB/Ή)jΉÉ.q¢Ÿèu·&¶ +úT²ZƒÇ"1.þKñºQ„þþÜ÷ÕëùYŠúÛ_Y1e:cB7mïÜH±Vû3ªØlêInV!F7X$ü]/Úú˜º~&é1׋ޏb´s¾¦/·~üµ?“‹n+Ìþ‘TAÖ…4·Y{»ù¼±AGäØbΩØ.ņ×o'¦ ƒ˜ÞÏá ËGâSRn1̤äž75s6Õ§ƒC v»ŸmLÊÐi.D³\·:ΉŽAj¥aEÊœñZÊ/DÅ™ôXßÔ Î +éêIš&Ëú&g®Ò»QAozàL>’¢4Æs‡)C¢e®MÍ\W˜˜¹\ñŒu +ö•ØŽ‰Ü_õ¦f³"e(~ã«2æ÷ýšm¬eË]›-½q}¾æ÷ú„ýRû:E¿´ïü¤}Á¾2>ÑK MöàP@¸)ÜO¥TaŽ¾Ì€Üà>¨—}Æé U6c.Œ:M•¥iQºXöå³p<ª½¼óc +°Ò[Š5^8éêeã±â"Ÿ)ncÝ;tûÍÿ€j»âr½È‡L7ñubœSûûìɤãâ!Š«£ðú¶å´ãáº×Á‹v\$dò 0ñOñòœ)(ê!QP-QP¶¬/êáê¿9ñƒË‡Ì$. ‚q"hép}jâáºÄ´ÃåŽg0‘Pä:ñP×›x*Råp‘5xÁ?»<®Þyjïÿ´e àf›-M0dr .æáçÉü‹!é€Í4ÀÅd7쥠4ôe9•§®3'ËSܼ9' +ñ5ûiˆáe2tHÎÓ4ê°›ÑÏ€p;C-×g4 E6*»êa¶µ ŠóOÚ™j¬¶Ùqâñ²QŠ{"'Ü=BHŒøTýM RA€:„¹YmŒ!‚Œè±Ð6€Úz ?Ž|¥vßÁ2›k ÷âgœHÙ„ SlëÚúæªZ÷º»~ŸS-ãöªŒsÝßpT¿ï'PÄîõj€›±(ôÀ\¸|z‚9}‚=‰r$°”bóŸÒöœ0 +AÓ*GC)éô0₲_B@lÐ^ibú¶F>CKáì%>I[}¬çqP($Gú™9 —YNMÁr"@Šä¯¤ ðæ½Ò®ÓëK­¢ñxÑ(¸âŤÏÅu}x”¬é +ð í9ÌBA0‘ë¡÷^JRDDíVC$+¸‡©¾#O˜U…ÁRŠF®‘šÿ¶±wÕÇ‚—ñâÅ´ÿ±e?†z&Õ­¥ñy]ƒïi;aìȦ6À6 œ'ÀcD¾Cæ–¸\_ ¡Vâó§B«yt²Cq|#¼]TÀƒ•éÛnZ¥YkÊI}¥Ÿu`whím¸÷YžçÕVÁ¡ÓéW>µ«¿w°UÊM­ß¦QwN?ý¼zCýM, ›õÁànœ¢!„>4Eà3<«ˆeèþFú 2‘À¦ØqÀµìs€sm>s< ôd€½X7V =äÒÂ$¤·=S³ÎOlv»?s¢¡ãó…¡Ø"4—Kþ¾¹`ÒFtW±ï¹÷0Èo×QYË&‰¶ã'|$d>Q’Ó£Úì— ,i¨ó)z‚¼ú»íOö +1[UIîƒÑ ‡,–¯ÁÄpšDXXª\² ´NOÀÿeU·E¾.øï냠f]“èÛÆ¢znåŶ<“4@W§ŸB„Žø¸Žõ3bn™Ý$´e%j¤IµPËP¨³’$ÈØàÚMÁ~¶ÅyÏY’äÊŽhÉ8½œž:püy¿,ü@¦¬Cúÿpä'Ÿ†º¥+@„%²D† <äÍ +ÉRN´÷‘#"Ð$;KÀÃS¿˜Ø@¡³v€ÒAv+!"Ü.³¡z‘0‚òòŒ 4/¦áæä"ÝòMÄt;6s;­;"À ï- Aéáèè îœ*Àêä B­Á>ßÅt +Ú‡€az•€­7ã´iÈ5:V‡OẴ¼9UA.Ãeb[•_ñ8RBÕ?.Kƒq¹¡UvL`.ò8X¼pVzˆ…Ô…`#uXóµ +ZF°rZh6g·útÛ²*Å@ÿ$úJú(M>î8|Hw\µG4ž;ªôóR¸DiT}9!èçg܉³¾¿l qÕi¥ßBr$ADÅÏËÑ£³ï ù­Aö”žÑ¢¹•Y˜­XQćCG×UC§Tê—/ËZÊ Ì-­»†+è4ž~$ì§H$"¼PÛÇ›~ð~p6“¬Â€df]vGIöWœw8uÒß"ÛÉz@tÁ“ƒÌÕa@mDÿZÉrëX6lÜ€x'6ÿ|¶‡ "Æ…4‡¸WÇeF¯àtÐqÏv³Å‰ö‹Dã’gg¶ø”Uçå Áò¡û|qq~ƒÂwEbUÉ‚`¦„çÙÞ‚4k® ‚2xòE¬áÿTDäö}ÑÄÕÑ:‰ (ÁÓÜ3ê¤BXÛíwÀÞ¬–Š1ŠÃÙgb£¦9Ñ—ÊzS¥pVI’¹P¦/£–ëiB-ñ~㕌Pe¦JÉEìË=Ô^~¸P +=[•”J.“8/•“PJ®:§ªÏcI0J¹"d¬rF,×çF,W·±x"dëúV¿l‘TMÿûï¿ Ã;{}¯ +ØÏÂXû¶ œy %žù·¯ é¿@Ö“>ïÈû åÍ¿!ê™XDJO ¬`µì7[AÞj›N%’ð(t>`L‰ ]Ç@®Tv€f ½×ç}†ê©O½ì î/ÞÒ>õ§0‘ö&Wz8!*”9^™èEó< ¶]…o&11<Ö‡,Ü»MÞZ*Žï +jDñ9:û(8†nG+Ž\×´8r4ÚcmžaÉ,·ãQƒ´ ¹“îy£n´é‘ŸÇ¾&©Dˤ…år'À+‘8³×Dø’H;âJd’'2_Æå…óK…`´‚Ó8£>_ùs”<=gm=í…Ï*Vûª‹°½K¤aM"Œ–V"_’L¦QÆ«a[ah'ÖZ<7¼¶ ,-ÀSÖÿ)¯v,Mw¸•»‚>z¡GjÎ}áÄ“xÿ ©ßisNOý|n‹)yÂÆ¾ >âòOIO-"—Ö“rŽD"ӛǂ_½¥MÇX^ ~‰GbËXùµl³ÑVܘeåvè§+ØWÝR/3½’Á5#­äMÓ*nùdC5 ÙÏ^Šƒ`VzwÀGq窗â"ÿ¦8'åg­²˜ý­Yë°2?¿ÇnJx³6¨Å¶x´ßIîVçØòŠàuwVIï~Àçî1‚s÷'½û±üáÝ ñ½ïN¡mŠ>‰G!þ=ê“xÂÝŽ>'Ææí©ðpùïðŽ˜û¨OþB3-¥}LEEÑ¥9€¹»G‘,n½Š{”ØgðX*Z#@ +Qvð°e·”*X§Ÿ.ÏÀe‰*^üæ_>Ï»H#‹‡¤§;³náǬ‡;ŬyWÖãa'ëæŸeï¶NÖû·Ç‡ô¾î¯ûš–Q§,!®ºìîòX,Ã-5ë·¥tǧt_>½â‰wY2Õ“qP]bÇJë{Úk8ÇÒ.,è…?]—åiÞóX‡óL„ßÑJnèÄ¥eÙÁ?ô<¦#/Õ±¹„"Ò²³¥„x±X¦CiÄ[”ŽÜm,»¡v¤ÎûªS´Û>ÀY$ÊK†PÑd— øÈðÐtÉ0F`2tB&C3 N¶ Gh¼zõó{MùF‹ìš(†¼Aêd„ÈK°t·T–@vuKíLÙm2¤0"xQ‡›½Ôð¡.^À¨»SêŽåO©cæC݌Ԗä÷_7!¹d'D/‹!sfcI[/ûù`Ùz¦{0X¦ƒ*Z±ʬtˆ¤ä¾™ÏéŒ>: U’=GR„ -Ç-µI7™ØâôD¼×æ÷uÂÖF~Km·¥’t¹ÔîÏÖg,ÆH¼3ºoó‘!"rµÙÔ·:æ'XÎ@›2tç\;ß­ŽGGO01ù-‚>E¥hE©·"ˆ‡ýE  É؆È%ð·l%€¤ÁC|Ü5‘Ô6R»×J†ûØ÷m«`ÜKÍ+–¬æq"ò*È›¾^rÊLuÚ8¸F–EЙ™W-ªÙéø`ØÖô5¢ Ú–uLú2Ž)w èD`)ÿЯ¿}bͨ7h!UTŽ…9 Ó;cˆÒ–€™GaŒÆôqÿâåsrP4Cè7oW”þDgÁÜ:(¡bn{qhÔ45H#Þ„½•Ñ4l2PÙ_ùåQCˆ¬¡¾ÔšŒðynʤÌÎ`íîþ×>šû,k¯¸CqË:¸Ôxm~Ð ._\.‡85xð1ÛaWo Íf«z‡h@¨¹"rðRpþZ‹Oº 0µW˜™ƒ3¨^â=ƒ¥3bw­½Ž,›>‚ñN&ᆪšµ=M!v‘0 +­µWÂ(Ÿê|ZI¦ÐCÜú"á³±n ×ÐÊ+³“¾&‚§•a%Û«ÞÉET‹,½$¦Ê-á‚©½†¥»¡¹Ì9™{bÞI‹ƒcTYjùá«uÙsÅ㟢Á=Ërùõ¤»+¿MtÕCì³2ãÌŠG„×x-gF@<²½½–xHDkxéÍw¤ì‡+X{Ú–e¦·*2j&𑸧áJ«¸å“ å#ó À«¨b⬨bâLZ1q¦`$.°,5½E3gE3gÊüFš­¨"ê|$S‹Å‚—ªBí‡ØÍ0§ôVUdùsOìÎòï« +”Î~ªª…ªÒ&~~v˜¹A‰0S_$ÒîÖÄóÌcÊi¡·÷'åûÞã½b’xR°Œ–Øí•””#Ò5ºÓ¶S~…hûÚí¯”G0¨zSžðYÕŒG–ŽB_½?gŽf2nÄ]¡;øƒŒÃ[þا8 +ì^ÄäΪ«ìéEœ†ZuîE/¢Têö„‘´œf´Bs›ßÖŒö[°Žªãíi1swŸÒ¡8‹Å}JÃØgð¹Ç9¿(ÄI¥1½Â-¥i¬ÓO—áæ±ÄZ4òëSF\ì¢#\SOwðR;,%ÔÄ,Ußm$刉ªmA*öù…)êµä·ú$bÇ6Ѫo"ö¨)æ#3wÄ~¡þ\ AÄ…Èjçš ±«!*­—çêBìqO*ö­s>×Ñzÿ6ö‚‡Þbþu§¶Ñ2¨2°”Õeù–±`n©Z¿-å‘||ÊxÁ§×îy'q™ÚÔrB6ªÏùUÒú®õ2­ Z½9 7Ñ’§–ÚX'1©ì}JKËRè¼¥e)L[ÉÌF^VºÛáÀoËΕ®Ñ9I^x{4Ø›ÒÌ\àÀ²êÓpzöXp‰ñª»CúUxHO_øbä&ò»úA¡ìp¡´Þ²‹Á›v?‚19Vv  ,Óª)çõ”Ý35|à[vã‹BDoOË8àO +ŒN‚ß]x#Œšïóû¯øtàÛE–[P57HL2^Ä’çõ Ò`žÜR_ Âüp@(µg¾ ƒ—^úWÛ£Ué› Ò$ã\³¢ÇkH`^½Ð zõã4Î?‚‡ºK/ +Î`éÑKÇ“N^ àA¯^"ñáæ5þðöhý€?Ñ |Q>z™A/& ùý×­‚\²÷yƒAIuÐT0gviÈT䌖­gºW€¬ëóÒž0ø.eå{À9çÖ%wvë‹2PñÙu)½–ÝK?p`ÏÖCy Ôr~¯Ý ½Pä9¸-•¢Ë£¾0÷Ñ:¡Å á Óè|¯ós2öƒ™ŒåØ(chÌN°ŒyT‚îŒëëvkãQÑS÷'Ϋî&Jå3)¿…û¶–Ʊ>wªü~L›ÏGУ…A‹(2bõÌdï»ðArÝ [Íoá#q”í•zˆ{šÖÿ²ð ¯&ö¡†VÊ;þß³~e ¡ýÛï¿6ˆ¸R%•ûAûf«`âÎf^ î퇂ÿnøyi—Eb[Û¬¦bâèòJ›Žò‚e ^!ñ9ö¸³Û¡Å'•y )ͺ¿iÚI³á£^1„¸ËžZê –à]z©P|âÂÅ?ÇX +Q\É- N›»2u±Ä…JÃSxÞW_©×œèñëþœë:âsªc½QÚšYßêÈä?×,HýÏ¿~'–úÛK9b .þùe òœ¤Œ‘¥Í©zÀ ÏwʼijT20O¶²³AjÊ“IŸc[ +æ=‹¬Ý}æ†á‹Ajî> p·,xröçsøA½$NHs·ÔàAÏlGËzKhyú× SZv¦®ˆ¼TèSk·èã5Mô‘ý ªèñyk¯èqÎj.pQ(XíU}$ÄTBZ3-«êQ±¹½ªGu­öªå|ªê &Îöª>rgª¿AU}üü¨Xj¯ê=GªúÑþ^ïà¡ðé[ïÕôΫÒ9±0„þѺ‡*½€æÌàÉU‰±„¾\¿¢Ê„‡)µ×°t74—9'Ó‚:LÅA¬´x$?|ædâQºöÚã%WiçÏ%v,‰yWi±cakÏò¨0qÆ‘VéH"éhYðÖíÚëÍ-1PöÓÄM¶e™é­žü•Fð¹‹wZÅ-Ÿlhœ{à àU|‡”«ú@ÞL&@)¾È²ß jñÅ$YñÅtZ¡„¼[í%Öñ[{¸{NoíE–B=;ŸV{‘y«=ä„Ì»öb6­önPk/~~j/ªÆj†’×^úaí¡Pf?µ×´öR¬=}ŽaœPhbPí2ÆûE’ën/bZ%‚Q´0ÂõGðºBcÚº¸N:ºx@Ñ=ºåKtsré.ÖØ­ `Èë£ €s8¨ºÀZu‘°öW ¿º¥ê‚;TuqH¾tqƒÿå¼Ú‘lmmàVî +¦x +ÈírîN<‰÷¸Bš)ß¹ÎNõÑ' Õz‰.üçW8§RÔÄŸék2žÜ{Å ¼uÑ¿«É§®Á°L6ôu `«U&stõLeS‹Z&“ù[õ_×øs,GZƒöøÀÑUæõ[­8®d>O±cóyŠ?@šÎ'Ö–­ªî‘ƒùÁëË[bdÖÓÏ<,±´Ž}žI¼áž)§øäÄÀÈÞœøQuÑ“¤ð^5)^P’Ÿ·ªËŽ$ZUW%IЉD­ºTIVà¡Ã|JVLÈÎ|ž¬à„μ‰–—}~²â‰çÍŠ'ò7+ܬàÉŠçsÉ +Æ’a'+TµÿÏ|¾Ã¾nnÐïæsÐL´$žN˜`U:¢§ñQëR•œù`f)òZž.|ž‡O¯Ü“ü–ÃRŠåD7P|Î’Ö× ©î ÍʼïìÑrfغfsΚäÍÌxKæpb:Údä¥ù>ÞSRRjˆC¦ÙzF€ÔÔ°5´£e3”®p8"öXp–sÅ'Yqñ…ždõ4YýQš¬/(É +ŸiÅdÅù}ÅdÅÛëŠÉ굡ÉêÉÔd… ÆŠÉ +ô“2¨+&«®&«—&ë J²úÏo²âZ1Y¡˜vÿ£­LnQ;MÇw-L„q ?}cßÜA›x2ƒ}w=?,d–¢¡þ[·:=¨³WX!ø ‘«= + Aj=èÊ;U]½ è +_u²J7  àö©G]áÉ>]:Cº‚€[º"<Ø@ÑÕà G]!¥G]Ý =ºzAÑ•ÿüê +çÔu…ìÉÝtõ9¢˜¯œæ•“ÌùÿóÕf+%§ïÓ÷÷µ1g6ÁœI4o,åþnhË4PªÈ[ž•5€·? ®¤uõLq Ù]IJ5ÎòÌ< ‘ÏZú÷ +‹ã^CΛKi'¯¥ô¸”õž-sá{ËZKñ=?§cžäñ\Zš:Öeø}㣖>’ÂÐs鎯:‚ŽB=)Ç©Ð3§Ás¬á¥ àó–cAÀA+Ç‚à™×‚Ð?Òȱ µO)ø7g«·Èà±  ò ³”‚òVÖ1÷Ô£ÉÕƒ”z྾åPʱXÜþg9`a^Á°ðbýl» ü-kA(¬,©ÿnCOrà‰ná:ÑZ´°@‡SöFõŠÍ°J›¯½” %> ä¹;À:¦ì˜( +vlkÊ> ÍÒ¹){'7Йƒ€®ÇN숴Ó<Š!7Rûúxä‚1ëzæ‹(—D†­ëRŸc„~ÃÆOCY;톲¸P"Oý¢ŒÉ7—ð`ZG5xjï O/œólòB&5c„g°7¹¸*Ÿç&O,‰û:°Jæ2%žyöf.êã`p³Ì ¥‡Á9ì–ÉNv×”»ãj³]eÉ#ñç´¯±É8bž ø×«¶?ôOטyP£ >Z‹ô„\Áx>TYY:Ù£AÜØ£b­=ºDø¨E ‚˜Öêü¬~M)cé ?Õ ‚W¸ˆm V§Á2:kË%%Ü[Ê ¡Ÿ08F2Á—F€T’)ë&¡Ö§ ™¡ºÌ9© ¸Ÿ2–ŠaXLY»–¶6˜Çqyêf†zˆØÁ¹<¶´¼Ar—ï„=wrÙª#æ èú'ϼ7”-j×2c,½ØÑÒL[–e¦¨ëŒ~æèh|7*M®¦ a8&b÷RдðOr TJt êjŠi’s +íѨ)f…Û6~šxÀ¤›Íe…TÑû¿o²X祒MlrG™$e:(kþõ†Ç¼^ðñzù€—€k|xë c½½XÁñoÌ¢r‡˜DŽ1ƒ`&}‘AYcm Ší4aЋïÑ—ÿû;:$h«üë?ÿúmôpëÞ+òG¯KôÎçÿü‡«LÄdC_˜ˆZeE}˜¥l"z©2‰ÞIIÏñ%‚?_µk:ï °Ž*âM|€™®Ï[78ˆÅ|ž* +¦óYJÞáîîž0LÛ’Ç`WÇ€ÔiGŸy!˜ñêT¢Ã3øa[îr´^¿ÊÇ£_ï@õëAÕïø˜­ê#ú¨Õ¶§­ß‰*i˜èïìÕ¿£_×Í¥Z®®gߌ°P¸ÔÁf¤{’\ᥪ³¾<Ç á "ßücùrpÖ•/Ýâãå{F'pC´d9sk}ih%ÞuiÏ|­O-E¾¯åéFÁçiã|zu O’;„K%$†4(.çGIë«z«;§:.ä5[ÁìŒ,б®!Oe[f+™¡±–Ìå¨ç-%/Moñ8¨êQêq¸4›N HM ¹²ì呲J‡8={|8˹ä“L÷åO2y¯ª>ªNqÑ´b2ÙQ&}÷JÍO‡æÒøèy½¹äí'ûp»†UË—×øˆ!Cs éÀ»Âè?Ê(¼gò‰;£†f”9‘¼’x^óO_ìÁÝê»Ú±p1Ø©k”Ϙ°YJèû^jàÔõŽžkàX¬YÃ9ø;)è¿W=¨T÷>z”CGåïA¿r HµkðD„¾Ò£ Å=zâ\YO£«Â´d­Ì®U÷ÆÀÆ×V˜¯æwµUÃ} ?ßÈæ’-²§‚j FvÎ,·ÖÞ¾Ç7–rÇ€e(%¥ƒÏ:À3v3ˆ+Ýr&sMÃ5²‰íTȆªh–20[Y ß^:SŸãÔ8Lþ§ˆ¿–BÒãRúÂ{¶LJï-óšmÄ÷ü§¿ljš9Úe|t §»0ôÆ\ÚÒ«Ž £Î^^ +z:UÿÔLÁ'-ÇtvßÜÅ-ÇI ÷Óõ\Câ£jôü¥@ Ê1QÝZŽé ’(Çt6>¾aã7ëYåÉœ×3xÃþÓvÿ=ëz–Y˜ôÿÏ b4I<‘ȜӼ¹¼¶BÌbë¼"úÍð<QÅå'²îs¿½4(ÃÀkÛgÑs˜ÚÚÅèo Ÿø3ž +"Ý.OÅñ„É £eÌu Ëáy;fÅÞ,£Éz—1„%* ¢ßé[*î³ÁÞdkSšñ/¦ó£™ô±v)XéúDÏX×âàÊ4Å,±ºŽýùvPí{=äÖj÷”˃‘ÙnÜ䕈۴¯¹&£æ¹‘O„¹V·4ÁB|¯ƒ`jG)è¹ÓÏ üÙÆ«A%áÃèúuã…cÔ‹§wÉŒBuƒc$ã¼&Tg€§™<ÑI¨;©EÃB×йÌ9)ç(ã0˜ŠØBò{²0¶ý|>’¦‚¶F=z%v zÜZˆCjÊÌ&„Ç®{©ÒÉ8’+ñE_;¼¨­²5HíZâé(fÅΰ¢Qo±ÏU†#$AÃü¢U’V” !„‹¥Ã rR–`Aƒ÷Ÿ¯Üìñî{‹‡~nàÏj t2éJ¯¹#õàþïk1æù¹ÁópÔÜE'è¤õ€WÓìAOG_øˆBÑU0âoàÞNzuà¯u?wàÁ-z¯ˆä&¤û¢»EŒÿˬ²Ø]Ä×ÒU¡´6yÙ„§R¥«Þ֤ùs¬*ã]5ÖQ¥Õ^qÌt}^m㉫\Ÿ7×Òt>1ƒÝÝà ¼]Ë“l¼Úͪóïi"ÁŽË=žV‹ù~t»œmà#ܳ°ƒÏ7’|¥ äÙ£ +úèçþ?‘Â][·èKÿ…?¢%Wwoo})KBÝø€Gú鿼 ³)¼–§ú<>oáæÓ«w§8Û’p¨åDMX#ñ9?JZ_¥PÝåE +‡‘vZ<¾v§êÌc]Cî>û>+™¡ñ–Ì% ;8³y]bÏLêRÒŠ8P¦Í=ùcqý/åÕ’d[nç^Å[A…þŸ ¸çŽð<©7ñÄÛw"!H©îÛ³ª¼„ Ad1;‰b‹Ùèv:¹vÊÏz0Dâ¦äÅLd}Ì—™|˜y²ô°ØSg ‡eŸ;¸˜?Ý$k26Eû¡(o;AÇŽ×d¹·H‰SíØÇÊPmÕÒ¶_:€©¹¥æª!WP{ì@˜ ÿ¼á˜ ^ n`QEÉßùÙà“`¾#Ùarö9GðIëI³ò:¨õ-u.)K® mì±Ö¤,¹*µ1Îò•óiB×zjo8¨|¯ØÓÜëÙBÿä æè­¶Ÿ0ÈJ ÉÚ´“åù$TÏÂ&Š6Æ÷­+(¥»ÔÖ–$riS‹Ï¶GñŽYéï}>O‡™;›NYÊ»¾ý\!²’戫nS“ùñƒIOo ¨ßÞ8àÓLFê£hÉ7+bŸ;ø{êuýe‚WzãïÑz#H’1Aìw„“¦¬½-íÓ“[Bõ¥’F/¦’’„"—‹§ŒŒrJ¤·D‰†-Ý=5WD^ÅDQRùQŸ…=¥<.SJ“—ÒÁÏJy¤Ö*e¦R†ÐYômvlÞIÀ~D¬\r6IQXStÞiXcBy SsCs‰2[21éò¼%_X{äÂj°ò`ÔlYUÄîvƒ°Ê›‡íˆK‰sOÀÖÝAše³cjHBC¬fóR¡BC(°|YJð±¦õy+nÙ£Œ4;\Á€„.ðÒ“½“ÏŽf”+Íl*<ÕÐ8û¢»È%Ojx£ØC®sÏÇÔSoärð3rÙºÈU¹¼§IëxÉÚÅ©}É>žnX#ƒ|ó*äkÏŒ4ð¹;Eà¶Á¹;ÝÝtÚº{幸‰ßÓ8âîp`1y‰ÙK*ËÔáÙ ö£Á2ÐÈ)ŸO•¬6äæ®âÖ(06õiŒÅÑ‹æsw°hÓA>k‰K%Õ§œ>ÆVS%æz7‘H§‘mõÛSÿ±”*^>ídaë§³°¥º#Ò”UÀP-7x×ÝÒwÙÒa^w>쓺´êÞ~¼¢Û‘YtMV¼š¥þ…å<Ÿ5q¿¢ú´rhÝÉÒû´Ù+§g×+ +p”iÕTË^wP}Ž/´ãϺg +Þêîb0Èò—Ëk¹g7À5ÇÃ}VD3¸¡g.¸ËÒzÝB ³ Ý.;楹Ô.jR*#â:Rth1;È&ÈÒSä}òÐÑþŠQâ2‡Òßë|œ w*šÀýVSyØrpÚv†¨ä>öˆ?iôôÀѼ¯7øô3Ñ@Ö¼Öj^ˆ‡ÖdÉfÍûG¤Å-åQÛ­y‡<#½=š¶!¬}›m $ê^oÍ‹œöÆ’·cØ÷GVÇ~ß šÄvæåœÁ-s 8‹tÍQÄŠ_@À޽a¾–£ö‘_Ÿ³ƒŽ÷éXée°â…Ÿ}‡”ú°ÓÀÐÈrž@²Qîs¦>ö.ì%¬~f/©-0w³Bj+õ’ãZs}Á–Âçe¸*m}]Úøó5ؘt”ëbR"&¡/Ë¥\f³#Õ¾õTêÅôeL*æâ(*°©6•¯Gîñy,ª§°ÿyÇæv| 2+Öâ>[Zª·HnÙƒ´«ˆ¤^LÍ…!#—‹§ŒŒr˜­·DɆ]–ÒµÔ\9xõÚ{Ýóê~ß`åí„Ô”·À­YÞ  ¼nKcû4núéDâ“g;RWÈpƒƒ½¼-€rÔb,Ôs¨p•Ø{d(åí¢÷À j—¬pN.¡À$_=­†P +«)DèhÈÀ™¦uJqœ¯M¶‘«)8³7_å!å5LÍ Íe\ÌÓZÀ‚Qš¬Á‰Ý×5dwÜ>÷|/ËÏêà65…ðQ*°uwñ¤®òöéAÉ¸Šžœ BjæöZ¶¡¥hÅ-뀰óÓlòˆJÑFx; „ê”’%ƒp§™Üò©‡öz‘…ˆÀ«1ƒ«1É«ƒ©7&ÝÉ·ÇQ‡ÜÚ˜”'oÌÛÒÚ€}ZÃøéÔZ©†=bx¾Cxºš¸èÇnï¤-,¼}Idô¾$2z_Þ ö¥è“p2¼ÛR’tt~Ò–¸Àh§- µ¥>#çw^r ØÆu’ÞúîŒfÏÄ¡^PA&LÅš 7a ü¾Y”S{ ƒT·TÂH)ÚK˜þE˜ÛÒêÃ>­’~:Õ<Æöl3U´ Y°µç¨s‰‹›1u—‡1Ãô07cúÙ=ÌÍ®‡1æ7cäsØcäò#ÆÀþ1Ÿc*-3{Ê]†üΣPn³i»8Â\©€ 3³—bsÏ£P>Gòll­m¤Êb‘U WeΟg>Ê­“ûÜ/F•‘J>“4'ÀjqÑg+»%ºážØ±P™ÛÛÙe‰4`‰È·Ë³å׎çÈ#ÒüšÖ¬ +Çšå€ßwÅ©^­Y8MÖ,œPkN½5ËciÔdŸFb?Ýè. ÓÛ{_àÆ%›<3ÐòÄŸƒ&nõ µéGHÛ°ƒÚ-ýkS»…rïÝrƒÚ-ø!®vmƒzâ‚»Ä2º Sœ6QÔcÇh1:zšÊÚwo7[™–߈-H 8mÆèó°S~Öbp¤ãÕ¼ý«.WóðûîèPçÛ¼HpžoóRÞ¼y)ÃÞ¼·¥vÊíÓzÊO·î#"xŸRÞD¼ÍKÕðƒ¼‘çŽz% +óí]ª‡÷î jïR‘¬w½êŸõ..0ä„Õ»zW s~ÿÍ.3«±cVRÀÚªñh¯ØSsK%WÅ|qK}«*–†jt…:>!ðb\ÃËT_ÆðûgrP×!êË8\4Õ—qçöãnK›ÍìS‰À§eP!¨¤t“«ájõe%?£ZÑõ Š|ׇqõ«Íú2®~Õ^_ÆQêq7¨ŒÃç¥Þ„Ã1­ê‹ÂÅ_ñBˆ±×_ÿþןó¯}!‡ãðœüã›yÛü÷M²˜¢“loÈSvÐH6F4æéê„ôÿaY fo 0 ÷ø¬X ¢¿c¸l|Á="DDgrëÖXð|D§ý~ +:Å-uÉ*è¯h3ÁEÁJtCÍQ¿ä~±ØÐRDí ä£m å ÎþÜæ¯äb?XœIîöæ îÚ\²”5MWÜ`æÆ=cAn÷X9à÷ bð¾cc­»¥Ž•&ŸL§ŠOSå2´fÖë~¶M4æˆïP©‚,huóÏQàß¡*”øÎ9猫Äw¨ }¨Ü â¦M•"¹â©00O`ÛÎ8Ièÿ=Mph_®Pá,L“f›&ò1战UüúŸ_‹[åâÿ¾ë2Gù \õ}C$ï8 ÙB* +<º°‹_©Œ”Ù."èfvê3o*`Á»™šIÿ¯ÇVÈ^” ´À6ö±ÂÒü%Ó|ÝQ +ð{YÆ­V±ÛÇØ€5ㄇBŽâÉÙáËØ kœ1 ̲æéç*Ô5”¹†»‚ r•J0©&0¾ï”ÿ—ò*G²ë8‚>N1àDï‹É ÁP„,@w3ßÑý e­½¼´€É_¯»º–¬,q«u ¹?´Ô¦¼azmîÕ¾FíÊFVRîVãïb‡ËÜ3t¯ ÓgˆË„ÏõšufBmç9λ ´Lr"¹éYš–¶6¶ÒüþÇïÿ¶â,b“¾ëAß눃; 2V.Ñ*¨±%ÅF9£‚¾ÙA± šV?âÅ$´«\N÷$fÜ“Añ(E˜IM¾ê¡‹ã#Íù V÷×B¤·þæ…U,Vg`]ÀÏ=lÔ‰Änu´—tÌüì­ûÇD¡ Ú~ÛUvà«DíD€VÊPúöÚUò]³pUý?^Iˆmò ¶\ŸŸªŸ¯n¥’L4ãÐH;sÐ$Rz"}wålë•OWÀíÀ¡^=€1;4+udç?º•pØÀ³ÛMˆskíǾvw(; +xüt*Ä„n¤»Qžƒ{&jæï„ÎÃ8›jðb¤a¼+ÀÔWèf$ùÀ¤äÑ£ŠÏ÷h9?)ÿ0¬ZäUò)~Ë ¥Ç –ëpÎd]!q Gg)„µ²°‡¶®…´\£*Õ„¸„H`i:¨ÆHZ¿ÑÂbgÂrÒÿí&Ë2dä »I]õD`«fé¾c7©Jéë•Ð0e}^ˆ°Vd—¸åòÒƒ/ ®±Ìñý#ö}'¸§xéÖ€™É¬+û´L:^"°6„»êR2íJ]!{åm‡Ô$’…¦ ‡eHmo+Xáòþ`ÞžB&âL!¡&ÊïEç«ÿ®îGûUL>EÚ¨ÿÑ<]…¸Q¢@0Ûõ”±qu¦ )<>L^!PO|Z™MOCœeà ™ÃÐXb„Èyx·CÞ4×i%kF+çiYÓ§·j@P¶Ý]–Ù 0Ì*µLïhÙbÉ/*±?e\ŸL- Œí šnzqÐ^•*0ßt>fxmðïƒ*)ZçLJº]™i¼µÍXH9ÅrrÐ<ä0¶ +N%œ¯ýÔámû3¢â¡Dzúp׉ +?ך +ŸýÝm–7ô0ƒqÚx€¯´ÙtV¡A6B¸Ü£A†FbK—Ê´ƒQ2èLã‘«ÈIkÆÆOÆeY†I”°Î5[;*Š-QØ>[ÕyÌÁ\ˆè3Ñëc}^1˜âž‡Í¥=9?tx6S Y÷è~ÿÏ¿~·ù´ÑS Ú~Ä2(,É’öz•*–Ô“ûóq^;íäs1öããþÚÓLÄŽùÚÁ·Gî–rärGx©3K†Fl—-ÚˆJd·Tè¼:°:ÃuØ +e;C/Ç3èÒ?ˆP¬WظÎÎ<¡i®ËÐPòsÐóˆÞÝ^e»~ð%m®€R5 +º^òµ{·@-¶wÓ0j¾kÉ@LÞÉä¥l1…HA$½†óYAۥ˭åôJ›ªê1êÀ¦–Å× [ýȲØ%i§ŸÇ â .Vè“h/–%PMÝíDÝ\$OÔ‚Õ´º»£Žƒš»Ídbúœ3úDZhHGùÁÛR?V`ð fü#0•ùó MÊx‡¥éŠq„ˆ'Ì–ÞigPšòÊ–™X\aÁ|çZ;ãŽïÑîa± qEF}Ùâ‚#xJS‚) š¾çË0GZ@§çy‡%a£²ã|úÛŒÑâÚD¦1žÛÛp‚_Žá/ë,`kÊÑ5*æ —iÇò‹=v”¾Ü« 5oI#¬$„PbîâÁêðøPîÔmîjv–eáWGT Åí¼Ç6-à7;pÌ ¯‰a§m£È´ 3:¸}ÿR¸ý6ÓÉPt{ZÈÛóÜL+¾‡­)á&>"6+n£ŸwAâg…B:ãµ F€Ñµ°IK‰Ræ¡ÑЖUDHÓ Çdú'¥“³)áZ»™81 +S÷iÂ{Û4ºoA³'ö8/~.±3¹Ç‰ñ½l*´uU-:ÓÖ[\xÐŒþ'7êñ¹O3\”§ƒ9súÇ®‰Ã‡ ¥ß¬Š!3ÓTšÑÞ÷2”\ ûÏô8Núk“*uNæ“d‰ÚéôÅP3—çZ‰­uÄ`¬ôìãÄI2±+-Œ‰’F‚2eåêʘ̮S³SκA%6ùt +ñ$Ú‰2Æ8gR;ÛÓБA«ƒ=ªeðÏñ ¤rºRB™êã¾¶`’±s€Ë‰ ®¦·4Ô@Õ$ø›‹¨-fš™Œ}Y&zw]ÄLña™°…Ú^£€ÊÖ+U[Hãv ¤¬ÇHL渂“‡ZÚq’ ºÔþÆN@A…o3qÁ J¹¡<Ûù!ˆÍ†F" ¿€sÑuÀ:Í—ö ù„FŸÊ Ivƒî½!7ó//þSBNd“”¸ÊþÀiÅ`8rrË!ã¢*™j]/‚§ò¸\ U ¶*qV–?ä˜1dÅ*©¼r·دð³NDrÕü’Ó£úÜ‹J&»r†Û¢H}pVq°gËÏG|í..Sö[d½GÃû´” c$k%4£³Àk ¶d65ž9 —8í T¤Öyí‰uLO²øþ}!£Õ÷ÌøfËD!„Ü–ák¯ ÅE¯¸ÓV@È…`ÊÎΜêÛU0ÄJº›Yö΋<ûEÙ™H…#£ø(‡IJB“¬ƒ?Ê»M~” HÇæàó)GÙ,ðWÊf(³üUå˜ÍQ<ÃÇÅQ?§­‚+¾Û©]7 õs¹é^ælÚËøÈG5~𤕽³3«²8·î{Ú-øONÀúÞ›à'>ÿÏÝßai˜Eˆ/>cêªFC/‘”hI7ÀFTNŒÐL6a`æ1«9Q¿ØÇò¥=¡ÚÌGlwY ç:@“ø¡ò­™¡‘×=Q ‘jý+B@›m%¤ù´• ‡Â¿ëæ¡Zóô’¸çzÎ?‹FKW0«rêõ¢¢þÌвõTJ€Ž„7Dò*‹«~„[§çÛ‹*À×ëSôè}A$óÍDüM9©Õþª@³Uߺ"ÀãPÁ;®äB3ôø»â<4´3£4_’U˜g>›?JdÅæ('„çM9I„Žr‡Íg1GXg=?ïzúá(W1ùh<´Ÿ¹Ùì,‰+:{ªI±–ËÜ•#å„äV>VY!@»n5¡â;YpìkZ/B|f’êe1Q–i´j«¬âMRmuÚ³*+oÂð{bð-О…‘¸ª÷ªÀ+û› +B Äç¡ÿg¼Ê‘+;r ¯SðdÔ†Zì11–BmÍ äŽœ¹þ$¶*ÔûìÖxd~<v$’O^ Îsõx.¦ê”oY¸ÐêyMZ4:šÁ.<ë9ûçÅúÏœ)¢À¾Ý½8Û Ð#f?t5?2[p>¾f¶ÐNgÐ|ÍlA-ÒV@ó5­ õg:n‡’{4ÄäÚS1 °i½fhyd^RH5¯ÔKcõ ÓÊ`Þ9=‚1§Pj¥vyÙvù‡´š™šÖÒï¤ÂYzMê·áB^³¢³ã‘Äòš›´'ÆAYmzYÅ_‚~³¶^ˆqvr¸v,³;¶|¾Ly ^4sŸ&QvÜahj6Úìé]ÕŸÑÆX¬ÇŸ]ÕpÖ«`Qª5æñY £ãðÿéòíB +{2ÆïØýMRŒ&á¼r*ù™„ƒ‰«jʽD…ʸoÌó#x+ö×× "Ï9´¸Ú*R`pG<¨fLÍ£Ó¬{gÜû¾ã8µ¿Ù¼ºŒã,jöÛ—D§Å–Ö"ÍÖ½—˜CÅó¼uñÝø6qÞo›Êa§óýÇŠÆäœ| šŸ<Œî劊šÕà e/V”YÉ&ª¶¢ƒUpwójâláKr묄cOüGg½°wX¿tDRNoº3Ì :’ÊÑ6óõüùãhãß­!vôÄÉ@°hç‘ÅtEÂZ¬\O9óÓ‰Óøèöß7ÉViãå´bƒvLó_¬ nÙÖdôÿóÒ»> ÿ_½“±ˆÌ^/…$–r½ õÆûÒ¹EŽ"·ÓG$(& £[`9jÝoyúLK2ßÅW´§dW½Ø|Ù®Ö$lZôb¼øm(%—«—bhÕÖ` ƒËCÑ´í­4’Ú‹ÍCnÃñ‹­¹½êñço!R}Ö‘c’q}ûû¯ˆ8öì#KÄëŽ8úçïb¯nJž†mô4,êXcä¼§9Ì·6¹Q-rö˜uõ hé«{|ÛFƒ¬n¡[ïÉJób>rœÐL½¹ «º h‡rÆjoâmªõ€yÕ¹%ß}dp=œze•­ ÿX>½&âø`{K•$ B¼t­Ë+&IÍ_BMµêF3e‰Ìùž>†Øw¿Dì¢}(ñaãg/‚ÃXä­5Rê~>‘Jæ­²™4C‡Dø–=® ¤Uaòh^ • ÞÖ"EäaÅ1,e² Tß? à+…Ìé³¥ÛãÐg„æ8Aí T¹×®®ýJvéûµ¹l³&@Tʰ)[CTÜ~úðiˆ:Ûãëu3µ-àj“ýyX ¶¸ˆä”,ÿÜ +íÞGõƒçfúºÐl½õ)h™Ò”¥yxGbÑŸÙÄ=þM}S8V!\*1±5ºÄ33PÍI›îb²Md@ÐÔy +¦E‚–MÐ3¯ÇY kæþÐ m5Ž‚Z1ýÖM‰)£¹† cs©ól¤od{Ï&[ó‰Ü)wNî0ºÎž‰¹ÇežãÀuâdŸ*èp;ÛJ*‡¿¶Ü")æX&ì)“9KˆTv +´÷_WÉ®Üå“=®uþyL0·Uíø±’EÁ¸Š×få¾óm¡HÝgWÆÍ +°t§ÄAòܨ['··Àh¥ ÒC_@MQ°§[grÆßVUøC`ä©…™¥žvk€Ál'Âªà ¬|,êR/;2f¦÷Cr5&|¬³{£–Ê +ýiëÄDØœô§4è5bM5pLijNª$€ÿ8 ®Sˆ“››“ôÄ&e±-¥SÂZ¬Ñû}ôÆ8í!À’546¨j;qR,%ô4¬îR:ú2 +I$G ú²h[éÙú\…èÛvu>ƒ-4¾Œ´‡doýÖè1–¡¿| ‰½ÿo«µ>xlQý¿ÿ¨ß\V¼™ÀWg^4œqYk‹¹ÿÚ†I  sÎ.pÎy@–cJЭõ¶>ü–}Óut1#ư°ÊUœ­Ü`ÔÈ +V4?tOÑGÌÄdH²·Ë§&Sƒ£¸m°3—»µá¾Ôë%‡çüãÕ-!ùÛ^5¾œÌ +¬pðšóJCœ}õ_!7Ö,ä²§…ÏÆÊà+‚;x<ê…4fawÀb8T‹h¸\U÷‘×Õo9d_˜œék"ghsÿøº­;àßP»5$,¾BŒuêîŽá¡I\ën€c½Hf&YOhlá‹!m™É¨BÝÇÄ-†?k|äœ|Dàä‹te.n>· 7TÁš)|(9fòœSÔ÷ÁÆÛÖŠfÉa¼3ßL´'TôÄ$—,{ø¢.äj#¾d¹±ôÍ +."àÜÃF§†£àÈ>¤‚pIì¯ÖMž×F ¸ãx°Îå:Qì³¢h³4* ƒ…Žäì(>µNõõôö÷_¿6´·Ð>e·úçïºì¤2!W(W™²h9ã«°Í}(ØØ÷‹D¬Mg¥ßZ@•ÌÛ׳µî ]™A—ÛÌ÷~#ÇÂÕ@ËžÁLþµ.r6hRÕ·ËGNöö1½ @ísuòó·+BÍ÷ÄÌ O'Ô>ßp°Á[È>—[:þU7ÓöpGF€·ŠŒø뺗f1~ °Ïº @Y À¹#GÄ”i0£S(½>å’ìŽKŸ' `÷sc0ÕCÁä]–U#W.˜¤¨Ül¦Í1G‰>\ùývo3Þ(V[®`Ÿ¯-×@H¦8>¶g™´NK×D†pZˆÈbµD‡‚5Û»#¯-ùˆÿĵ[UÁŽñ8ò#SiÎ+O€ÆÖ虸ëVÓôÓDu»·ðHSŸÜd±ÊÃX¹?ÒP™FLÀM¥vΚ¹Âë™è)¹pÝU‹®g‹ý ŸÛëX{’i¾jóÊgЖÒlì¥>³sð“Íò1¼iV@ +Ò:Eo! ÛË €û’±äȆxtÀZÕ²MÆsÔ̪ +(Ó)¾ÖMc>JxÙÜÚAŒÚv¸iÓ{—HÀÂñ’Ânö?À2èù9‚S<«V)XÛ¡R´”:³ˆ‘޽›1¿Ç§YxœY¯NIú(GFÏ ¾¨4¹ËŒú¾êÓ–Ú¾•2Rîù3ƒQ8uô~üº47!‡Ž9ØBfŒjÏÌăÙZ®ºPöѧ°5*,iT»³ +&§Š3@ Q!2uŒaÌï¤ó5Ê(Ë;sp åe©°¯@æzy¿Ó«„s&A3\Îãê$s‘²¿^½ås º²·f³bçúÚ”3‚ë÷Ðlöò¯vfâõOñ›/¹S;­úùÊV?$‹òáÍrÆiW–_„SsY½³Ì76W\ÖàøÔ7²ìrË—Öo +óÛC·vi™ßפD8FÚì2‡l'=8Q°G"ßHf1…{£>xºO¿@:梈…ccÓ-ÖŽ „ºt’Ÿcc5¡(!:/ÈL –}S0#@Á>5àHþ²»7þÇxµäH¶Ûʭ䪡¿¨áðãöÈ{¸¹ÿ©ƒ?‰:Y]pª#y(þÉàõÎ)´èD[ùcò-‰™I 3øî?[,«Ôzß„QÉ%ß3If n[ã´ ÷Ù(ÃnÊÐ( 'K¶@O6ºÙοjú©S +_XèüÊ÷Ì)˜xrké­i~ +;­¼]ôÒÄìIä@½4îû«ã‚ôí@;`9ùÜ3GOþ¨Iõ÷˜ Œm‚Ù…Ô»aÆ»¿ +é½òSK#?Ù•×ËÕøÔecµ«a{±¥¢¯[_ŒÈ~9ÆnÛc¡Å²| +à§Å +ߎb¶´ê´½„K—­!o©eep ²f1¹ÊOmÈôá\X¾æ—nMθ"åC pë1l/9÷øÃ”Š#rÄÔ8"I?!°ÆÌŕۃs”Žm|ÍÄ\r¼ £œ.œË}ŠáRÔ‚©Õ#²ÈÊê܆|bv×8W‰~†]ÁD¡ß2?J³OsÏ– Á–Ä]Ö®Ö|GpGy+ H¯åNÎ0’KÊ_E²Ë-Ätiì1«Z.Ï>œø;švÀ{ÉÞáÄúdz[l,!¾íçýÓp†ð°æŒ%ÒÑ73üˆ¹¯'ÀÖL{¹/IJ +çÈ“+”K¥ØRj8¼×Ô\d^D +&}8pˆ‡¿ž«+É˼D|³øÌààEdGu7sÒÄl3°ÈÖº G*‚ŠìðÔj—ûÆŽ9÷¨O/ö_>é9Ôn\Ë6u8Úÿ_ÛO³þ|´l辋٠ßx$6 +Ç¿ƒ°5Í}ÖlrÕŸ¦ëf½ûîRç½§­`çA m¶åŒé’SfréÛ¦6áioÊ ú”çìÁpgM€ =‰/Ëêm¾É, ¹žœ o£‡n9ôÙ 8Ö“ô¤y“^@+¤Ai/ËU/= 8äuõHÀL‰^7ám0u> /À>î¸ò„¡'”ò‰«%Ulõ¼S‡õ$ÌéJrá_·LvåòŠL·qé´žAý¹¨jǸø=ê<Ȭ)+v(] š¸>i.ÀFsƒV•IÖ•è$rZðÕuæØ§¹HÛÖ›é&Œ²É#S©Í椬¯ H}6'%YË3µ© <6÷€.XÛÁ¶FÔDvŠÖˆ§ƒé€OŠJ¿ß§,ÕŽ Éþo%~\©pmZœï„†1ÔYs&9eR¤yLêÙƒcfÑ| +"W¼ð¡²3³Dþ¶a…Ë XAPx(À܃ÊUsf0Ï©0+×âe{ÀrömîqÍC<_¹oÏ™{HM챘0‡9IbÇÍ:Ì€Œ’à½PþDûä0·Æ—G\Ý{•©I|˜£Øs;¬±"îÒÉ稂i©µÉàay 5x. ¸y_ás‘‘uh#e>ŠyÔôCá)v´é¡¬OìiùHÒ`rzÆÙDKÔž¥GGàµj6ò=o4¼éÈY\.Kš_êÚî?×ó&d%G{ Hä®p"„tŒµp•u@ çäzÞÇ¡EŸäµC‹(W`žú+c˜5¢sóHZDçæ²!¨„‰|2lƃ¿¾Ýc ó¹ÅÕCs™t@­ÝÐOq”*IÁ]Ô³G·{tñsë°.r™é“9êÕpr“}ñê8ùÅÕ}Ù%¬¥ÛXÐËz ‘5:R ‡‘\\~MØV\äÊtM=hCæ5gJüheJóÅÕ’Äæ-DÀææ1_Åaô”ìÈÆ¥6Lë/ÀÇ5yø@?Dä,ºb>vÌ @1¤äô~ HL;„0xû\£©³ÕÍÌ”ûíÂBöŠú%k£>n•àmE±ÙÖÄ^vÆÓá‚1E[#çê€ÑïwÎÁ5ú±8àNëuÜ’p|C$w+sˆ˜Z1˜ò‘ª™…¡’ÎË»’‚`¨& õ³šž¾ü} ¼ª‰§ÉÃ¢ÕøÙ«+¢k×qpè£É%¯6Єâ9¼´½Pò¾™Â«2º01ï@¿e=÷ÏÂI͈ë#{©z©^ÒNÍe³«}H¾[t‡×+VL÷iJ˜Êú),FŽxš&úzÉ¿¯”}žŽéµ¬r<—²þ_g(Iš„þO÷éèÉÌw\|üº(´÷°B<-€¼y™àúäCûwGs>hes×9¿s‚Ât5ÁyëUKÍ*ä¼›:@-3SíµonxLò(ß‘Òú©¨xw]‚ÆM· ÿ)ýÃt >]1çÝ8¶î +ï# ¾µVrã´±Þ{%mh·Â§(ü§v£RÉã*–Æ’¼ÀFR‹RqÐûÕ +‰ÿ¶±–n™¹§Úbʤb“é‹‚ÌÇ<ª~ÅÄ1t!Ù‡‰ùE 0™Â~t"íRLiKúr;ÁèâdÀb°¸I/‘’¨Œøê}>;yâ]Ö1“ýðãŽAÉñÛƒ'F×ÄŒ#å9Û‰yí»NBÄ*ᲡõDÏ9äsLÐüfJÐ| Ÿ3ÂÅæ¥'4ëy1ôµúߌwoVº~]é›á°Ò7³aå3ð÷çdpûôÍ\8/ÆbJw0×çP ƒô¤ìY‡3ŽôBÚp3g¬Tf)¼Tö&‘ïp™‘2™ß¼7‚õš˜‘Ú”0)m¶·•õA¤¬ç£É,LÇB7ðëXH¯¼VêhSŒ¬fdr# Ó´bÎr«Íœ¹à +3aÄ(U’ WÓœjG‚³°LDUÀ54 |g|# ^ Ë:“ÙÈ,TÝ ‰uj`îúLþÕáiÖVÁÕÕôóJ TõÍЀéU%SOR¼`TS Ê\ÛÂvB|ÀÐDã%·¨ËiÈ‹ž+ª ¾ WkÏöq.Wz%“KÝã¾9,+íPPV?ñçl5ŸÜÿ”r éòf)ß?vœZ…¦æ9]z±4~\µ”vƒa«ÌòÑ$»E¸²¶IÛ™èW®rhÇ<}‚¡x!FÕOoi‚šSV°T› +]¯ˆêPÁ^ƒcTå2ðeè’çp:±ÇÇYØ7ãeGÑû4±¼Ÿ¦B]A°>ßñèU*£‰EèZ1œ2%.çº7Õ„D×8´mNo‰» a Ö>ÅJåjbP— :]gþ®"™Ì’yjŽëå„fe1á>[ø™5pQ(iÿC¶*æ‘m¯>ü†…Ø÷oïˆxà1¢e&‹ sOg=©"øƒÜÃO#úĭa¡L¶]ÑÊHXÓ„{X+ºþÊ@]6;aÜÉ„n $Ÿ~˜½_ù’‰:¦V.Fêˆ$ªk£É9,-Lµì6áÙ’†e<û2“?»êÔ{Sûwö¼ž’2Ânu¥v2Þ-~ŸÈðùóF…\ˆg‘ÀÏ>ZJ62ÿ ånæ¦X GIݪ]ÃÃ`éYö¡Ç’Ò­ˆé¿”W9’]7ôyоØsB²Æb ¯Ñmëú“Yð>›”äõÏÆ+ +…Ì,±wq¢jËfò]Rbãk;œØ‘áCk®±ýaè§£êsÆ'’K›nÇö#ëAût÷þåTcN•+GN¯"þ›¢BÃ'{ôS GâJ†9s`c›é¸14ù„ù!;Ê3&V{_ÆM=é‚J§qàúd¥:ógH¹š„Z´ºŸ7˜pŽé73}=Üe©÷åé 6iªC*Ⱥ mMbº'³z[W5±ïÊJa÷*H÷0w­fWÎ1{™a¹‰” n±Kí¾¬ÀšÛ²5= êŸœD}°Ô}b=öz/ z ÿì,áPVú + +E÷eyp)™×½ßÑÃ[.”„ ²o²— Î3V‘`«]£æt @ †ˆA—öï c#>‡§ëºs£ƒsç©›×tÀBcF0Œ:ÊŸE»¯ÓTîäŽ+í±»Ÿ2ñÁž{.õ.Ñ#¥þ½QÊ`è0JùÅ(áŸ0¢i¨F8´`”†»Oú÷6T …ÖqGûWæ=ãF‚åó^“ø2¬[®CrÈÅA8òQ®:/úðâ–\6YP€ë†øU€Í=!­«FÄÀ7§ûtälGV²Øg¬Ü£˜³E·¹ÑNÅ×Á!6w™U÷¾‡dWñÊqÄcÝ ¥]æ d^§¸fóÝ×b=zÕÁ*AGé[ûžûëkãž´½ ­ê47Š_}b«Vµ-gô¡-gçÌIMº{8/˜ï*`3²,*º@†òç ³’1‚O&¯w_·x${cY¸•mhŽMiˆXÄ#”ÙkUÇš3×ü²2ïC“gVô +i躯½x! ]†¦@PÛ÷¬i8ѧî_îõ•¼¡QÏW>´é 6<Õ:tl.£Y­äªëF©¯Õ¸VŽ|¢ˆ8¬}{ðd©ý{yܰ¸HK:ÞØnj@âÿ­í¾ìÿ6¿0@È«[ ®5 +ìàÌg~ê'^%"Ìý¶èÁ©ñ¿…HLåãÁb›>Þh“Ä8 Ù¯wþ‚îG”;jéåœü•OzÏg6÷ÿ /Y%0¼µ‘¦–é^™Û|¶T`Ò<5?"ÆýýRâ#ö#5ñߣÌóô\FÀ³{¿byv¿ÕÄsˆ.|ë(ئe¸5‡üZ*Ž‚ÿnr—ªâhœL;4¥èõ€®»A çõ®Ò(Ó&xJ<2`=õdëfµoAÃâíìØœbCÇ*Çe+û©{`ÄKK1¶uA“ò/ˆœ, ÷:ˆ”¦üËÞKõ±ªš¬Ý±ª)þ¤æùtF@ꉥ†œÜO•Ðó’ÏDô>XUÕ`[”âõÛbU&Ú{/ZFJ ²dúþ™o¸8êÖ«¼šnQ_¶•§ØKÚÒ’#/•~b­=a䉯ØÝOhØ ý÷Z\h+Ê´§¶ŽÙëïwÄç×…Îûñ­"÷MU\ÿxÜ'®Çü +ã'©?®ßŽªîhâ?=hŠá‹E$J=#íý,ãÙ/ÏéêAëâÅÛ/7±²@vÎ/€ëõÜ}0½‹„ßÖ›Ñq´Œõ¨|Ò¯vï/]}°×±å7’[?™]cjBIšVŠÖ¨*¬½ë*üA9k†Íô´™€úÊ¢ÄddÖ0x™&·!ÜVØìµ+V–…+«U[—“¯“«V­ã‰ ¸8ÅF·uc´+Ö”¯”aáš}«G{¿|°ª}cžË?›Y¶ôÆ^>²üQóïG|ÀÇVb\!0Íê›qVˆžúƒv–s;¢ƒ\TD1yåáQéœÝ„m&ÞÈ s¼¥pM†4(d6"r +Ä2ÌWeyW,Ë¬Ùø¥ØZדål0íå~JÇ@ëXZˆ±¤kª´²Ì^Ð{ýr™µ¡BŒÇœÚ +þvz¶ÙÓ;v0Ÿi «µ2Û‡5±q<²OP?•ù‰áìz¾8µ[¹Hp¿š +mب„|½ÖbÇmXíSü¹¡DGç˜Ýd +±ã *ê̦×á¤ãTåµH!i§^W¤¨kR™cñ‹1ÜÊåÜ2íþéòv¾È1(ž{yù½7©=®ùëë=€…[Þdž‚—ÝpYÕ™î{ÛÊŽ !„óAdÐ5"ïÄ–x^bM4G9¿ }ô–¦1IÙmÈkZÔ6ªP@ $%X5‘%¶ºØ(k‚¬ˆ1rÏI÷ÙhùË nžX]ÆšÚ9F;eÑÊ‹xbß<¿EuJarœZx9‚õ¢áòü›3ÁTП7ò÷ÛðŽH¼È93¶¥¥e¿E‡)­´÷@VµZÔncÁ“õšó}˜_Œy´ˆ8Ï|&ätf9@;X‘ƒâÅŽÀZ_˜2€õ|¬YÖ!Ô÷+gPM¶}ãl ޴öBºË]ö“ËË=ÓRT‘áôòíæ½e³d,çÿÆ'ó Þòhðâ3>ˆÐ6º‚®ÇÃ?…<l„{ÞB]P„~Åž•úº¨š:ÜÁ k]£8ðÐyxgMž¼#ñ­\ù‚aRë[ìƱ5yQžçº&BÍh«ú!•G°+Ì•¯óâlÿ-þg¬Åî/b‰°{,!ÚzF2Ü &?¾Ä”‡œæÎBâ|¤ìåsfY—ö…}bû@ž€ VLÀ3ö—|«jÞµ“ªÖçÕëÎÎú=ò9ˆ™yçÒ¯ÇÅó½R“ß:;b£7q‰¶ÝKêÄE+E¶,•t$zpÌž˜\Æ‘;b¤ø‰^]ÿÖó·2ÜÏå“÷¢+|h”ÒÕ k•ÖA=#fJ(b5-(ƒ)ÖU9°}¾EÿrMê JÍ0oJPT—}·Yj!ÆÂßYçShÑ´Ìø™ÞJšº_ä:̶Ǚ€i=&Þ×ùu¶þᑾ7~ºÅ½V„ÆÄùû¡ÅÆ!G±”Öýa6‹wèØ]Ìb>K‹)˜;Ìsaå¼fNÞ|¯æñ¨KÊòXï†íçåÜ"U÷žÜŒ×‡õÖáuœL×àÙ "»ìÏþ¶+þSœv&V@ 9ʵÇYa?mµÏçU]들{ÆZí1·ÎÙIÖvÚþŠ(.×Wfô<¶ Fü«¹;¬O~¡t¾m£¹QS1r¦KkSÍ^|Q·ó°,÷à,ÈEîm1\ú‡Úm´·6º‰q–ãôÇií¢KöÔ,“ ì²Hß*¯«¨:ƪ+m`ƒ{–ÓQ­`ÂYëagþ’n5УØåÎ'˜ ].°ó©X5禚̖–FÇüÿðT'ÇĹŒÕi¯oÃX£¥­…õóL&RЋ&ø°£4²ú3gx\u–{|¸J®ò¤Ë&ÔB–$MÄkÎF]’4¬×°ZÖŒ;ö탂£óûƒ¶=––²ÿ÷u`;ßìeñeaçkfE–ÓìÛõÆCæüG3q"zç ¹³@MWTI"'¥5/äEZ«‰æ„–Yy唌œ9U¦çìB.œø©Œ- ÉKc<‹Cd$ð³ÚH`°E>Eßp(2r>˜ ‹c!cä$]Züb,uIóJÊȆ0T2|¾lßIO Å.ÏÁ)ЉRŸ–ͱ`­ Eè¨<­ +k5~h1þ½lRìó0m­Ïw\³êäãÏÚ„º ¾ò#”G{—è0Xoå¯ÿ ð1fr ìX”ËÊ‘‰8œMY'>#,0 ŽÏȼVç "~”É^ Ή²Ð) a¸†‘”óFeÕ Ÿgl1zhêç¤o° =p)æ[_é-Zø,„Þ8‚û,SR5¢‘ÒÊ=5ÛŽÓƒ‡V·V>® ½™âóÑSš;ýG<ñ ßpÔùM œ$£¿ú{ûl¢ØLEÁ‹AÝÄV¡é™Ælâ°‘ƒM¬ž"ÀôC—VíÀ"h!©er_àõE¶ ñÕJÚ–mØmÅ!ºI1H5â›Yo‚–(ª·8¾Q´ÅeÈäzZã‰Ë'ÆóRŸ»†ÓÏÂÍhnGŠLbç‰Lª°Â³0•*ðÚ?¶§ Ô^á Wí.Ò‚3½|8Œ· +Ëø—½Y^°SqƒÏ߆þ™^ò1t¾c˜ÔzL>Xø`•ËÖÁªRõp‰¾êÊ3gˆ_P /„KŸpw+oŽÆ›jÀ/ àTc±<Ã{èÏît§ïë‚,(Åxäc<ƒé±Þxu½ñLư¶Ó÷‘ŸÉìôñœoò=Õ,4Ò‘×!{~µ/‡ð·Ôq˜¾ð¼ÚÔZâ5Šþþæ²×å•a¬2:$PÚÒòû(kÔZó3‚Ï¶× ìÙc-ÝšN.‰âþwŸHJ¯)8Šƒ¹S2ŸT5$€“k\<è–ÐvËÁð ØXœÊéCÅו +–ÿùi9æ¤j>ãF)ÍÒrË6 ÌÄòd>5ušùÄê•mT¬7ŸTù¬k‚£ºåzP0‚_)Fî¬åî­}NYãD–*ú§‚ùâú€SQýß ‘·@FzAl"©'K^ÌÀR™Z¯œ£Âáƒîœ£¨³,E'·Ëã½1‡s–q¼’fæz}„êþ¦w +47¡:¥Š“Qþ\5bD]”§eÙ•¾}â2ês¿ @4Êè§Ë#|œ«b¼Ã¸üV(º:ÿ©…3œkýÙ‹"€y1Å«EUãdUÃz ß`vÞzI?ÌM) +›ïa5/G—+€Žaø—}µ5œIÇÊiH¤CéðØÀ‚aHiðüá–p¹Èί­wXm´Ûlpe˜Yjq[ ¥®™3,w®ÚP®åÏiä. ÞDƒÜ>yp…Oü$Á†©ŽqQVÞ#?˜í\¥¤9¯E’«º“S+©Õ°™kˆVüñ¿¿¿)iD*†7•ì3(›?þõ_!¤±´Í„µ‰›Œ¡Üh ë˜1µ0(ªe}Ìžiuç2D£C+/§l\[.1«~VMÔlj©ÊB` g°6üþv`%­úÆT®Gv½Ó_¼È3n¿},35>‹rT·I*UÀbOYÒº^)#€¶´ fÏ·e/½5óÙ–ÕSm]Ùô¾Ò¢/=À‰ßý ’Yµ#\Q£©õbبšcÚ-+pTOÙÇ ÷´1mÜÒR,ÇÛ®Ðù–¢ËeQ}r^sòž‰ ›µðu›‘ŒhÃÈ%ÆVÊuÜY/Öå×ûœ–ÇKzŽ®7 –ú¬ŽGEÉZ+~¥e'¯WšfK.Ó¿jÔ©µá!h)ÛžÅÇè*õbP „_áâ 9ž#J*ÄÕ"#`³ Ø l‡¿ÛÀ"Ü?bK$ÈCó°ê¾p¤jSsN\s_Φ]t0À^•6ÐÅB›Ä¹l"yôÆk]§ +¨—Òñá™±™^ôdÉ* +ÈMž™0ÙP±L¬k¿éëvò&A`öw° Ÿ™Ÿd³‚ÁnëÀi9è\oOKVZEGý4ºFñëpÙGïûAn0DëÛSÒUOvF +k«ZºùÒü§ ÞBêuƒS!Ë)ÜQ3EIÄ¿iQžáïxZ–Š`qÍYlöc€ +xC}¬YF*«»%ô˜.)ÙüY ãñ%Ç`GMN 7WÿvT“Ù…‰ÏÁaÒºlË©kh0l=),g<˜ÙuaíåGGØè~ÜîóL1ÀœTDž c9m¶K~8W!«ÍŒ¼È]ÎYý•“?üf*Ï/WÚíœßÜ%PfjíÐ!k­\‰·#{e­T†l­+Î4€ZÑÈ­TYlõ:ZÃaÖøx;Ó| d'â^ÉOŒÈâ²q‡Ë²_‹%í: ,o#þë*GäÅo|XîÌ>wÓw®8O"·ŸäѦ¾ÔÄ[~·]FYÑ¥X1÷Ë¥õ¸Îœœ ‚%¤ë¤ÌÖ÷“Ànnk'9 +zon@¦)";€ÆÎ£ù‘}Åãû4}I7»3Žý⸣Óé/Ì$ŠÚ10fá.圡Û;u«O<7y1†Ç¥²1™5(½UNg¯C5φ2½‡Ké¿‹”Ùý#BçN +ÌzžzÜd5¾Œ8l«Ëšª°°Ó‘REîs ™-¬Ì2¢ÇeVü5Ö¸ªØÐ/µ‡sD(Œd¥ÎòN˜ÏUsš¦ç^ v"é©<¦®˜XÅš 5«øš W™ÖzÕÌezˆA-h±W¨¥/ ±æÁ±.gØNµ ÀÖ¦ƒÚ# –4]|¬œ½•Ët™¢QŸØâ\øíº}!`‰†×}×c±ß¿yÛe7Ÿ‹Õ/¯9⎦<‡|ÉKHµàifMy•Ö8(*Dýÿ>œoOX-a´ÕZ5n½žÀÏœ*;£iL&`Yþ(ÊóŸ_]ás¸¡LK”æ)šP(i†ªuKÒ¥êNdؼ¬sÊ´q·™…yÄšƒ m3ÌÕ?_¶o âY'–窲8³PêmÙ+É„À%S6,šÝr&’ú¾ÀŽŽ1Ÿ•¦kܬ/!#“}žŠ[–1H”º1ûébÐÀ1Âg_<ÀG––st)½Ëgdé<}uJó'‹ˆ·³í¿MÈÎ'Suyf¾à óýF¼ó.ªÏ× ËóÝ#Kg…€Eüóg-ýay2á{yN×ôûß ÈÙt‡€,Éz.7^Ñ` KÈ-ËLž^Ï$þB Û­S' »hÞO‹ä¡.Û â=ÕЦÀÿ¯’Ir#xïWÔºÀ}9ö¨ƒÐõAÐ¥ò2ÿ?È|¥Gd¤[†¥“t}1ñuét(€K®tå•”«Å1}HgÛPÇÎÜæ³­‚m¬j5:»¢»Z¡ª"µÒmdV½Ô4Nt˜¶Ê5TÛ¢StµD!éùæ+ ”üÂr^÷C@K=‹';î£!ƒ yûó?_,r¢¢éTž6t6Ææ¢¥?~“ +ÛNÕõØ>Û4ïŒN:ùJWKÅhH˳cÕndÒË|Æ­ö¸IG›_gùûû?¿WŸ³û|¢eMÒ¾äaÀxçR³¯#~-Ž cák³vÆwO•ÙR˜m`èZS­*'Ïî¨À‰Ë20R@ê–ë+®U·Ýõ8[Ég¢|h‰?~¡Î¨:WÏ{·›‹:ïîï˜]ºk>`¢ ºN`‘…¡9YÀOöÈôHQfœ· <ø~?70¡¾Üý@ÅÓ½™ ’ÌÛ/ +*0” –B•œðø ÉUïKÄ=òX ©Î¤Ïˆ›E™¤-~Óp7ŸT]ù ¨F³s¬C!¶ËZ°bJ—÷ÃÙU¤z§Kòæ+ÊÛv=\/àÊõj´Öm«•ÞÓVþìH`¿æÊ…481»äYyÈ8'ÒÜ“@­{žàé¡Tý.99<ßÐ1äj‰¨´ˆæè8Àë ™îæ1+ï×Xz½q“‚M;Þ‚iZ-ûÛËÚ‹ÖHú Ü´¢cO2@æVë6Q;![*ae °Ó,ç»êI´hª`Î4K.šðöTe]y®6ŒìJe ‚yeks$ýMe%?éõ ² ¹ŽåÝ3ckŸÁ"g1E#ŽC]näv\2®Ø`x]Û¡IØ—]“²¼Ñv86?u™¿xŸví×÷ùvï30K$oiïÆ/ÚFZúÍñ’ÞWE“?;±Uí•v×·"[ój¼žJ%‰­ØÇÐâ†*'Ýž|ûþQ_H%ÒéÂT6'Ué Î'*¯Z}‰ä¡2<”ÊFó®`"’¯v³ŠÌ;û +LHTÎt$žzðÊ«úL6‚Ù‡EÖ*DlaOÜKRŒ•–TèE +ÙãqRÄànk™ "¨œÆj» îDÀºdÎI딸±þB·&ÇÐ';¯ÍÝÏH³'f|u,÷™˜žëwƒM×R]JÚߎÏêËS£|ièNRdíÒDçýÜ'FÕßB™BïAØ’z‰"¦“&\ÊÚĦSïÕjtÛMk]¦rhKFúD“¢L³rltM]‰º²–!º?¥y©–ÀÃÒ Þò¼EIlRU{D;¼µu0߯ª–¡Ä¶ÄÃû[…_ª‰!ŒMë~3Ðcé¾ë¸ù‡+ò¹ÇdžöræÆÖþSŠßì‰'d$™u*üÉRNÏ‹Á.éxáè#`+ßï‚IU¤ÇŸÓhjÚjìÈ¡¥+Z…gÅFE›OÓòùŸÁ±ƒiù8ºÍe›Het4ø§Ú†Q ÅäÿÇQ©¨‘¼ +6 +Ô¨6ß«IiŒ&ùëôg·ï)ç%`kB, çÔWVMù‘NëâºEͱëÔÍ/»ujÑÒËýLMª(دÆÅ>zn7ü|qk~ TBÚ=0¡H¸såztE¤E&ßåBCµ†ˆ0©‰¶.,¸Q`Á7 <ȉwˉP× · sªî÷|}|–Ši—ËJL+÷ÁZPmg…;–D ¼ŽÈ<áe$âgãvx6Ò¼ò¨ê$°HW·@¤YÏ^‡ÆsæaòøfLšÿ‡ç›k~R¥ôI/½A ê0à-?^‰"¶ æ3_”ŽAMÛÞGKëµK]mˆ+†Œ°Ûÿãr¤VèÄ«"J$NW¥;$>¢ÄCƒ›[NìY1lÜš`M7†´s³Fc)’47R-Œ:œNÒfr©XÍð@Jwêf‡ø°þ‘è@¥¤¥U?©ÇDÖ2<†¼Éâ\ìóK`j²Õ?”I“C_­ +'Š-ä2j‘ÿì/µ9ÁŸ6%´o>grN•fYš3uR<'ب)}Q4Oš»ŠªNV\¤¤£,:E=óQiª]+rÛÁ +ˆŒÚ4qÝÚ”…Y§Ð AVMûŽ`œ[䘉”`×r¾íÖHléÒWÞÿì¤/‘Rjùµ/³·É“¿+å#aÛüÀß‹D0Ê_># }“\,¿.6³2ejw¦¯pšcæÏ_êDta2BõEþSNQòß|Ë4I7ð·J*¤—ý-š*ºå­ý™@$ç¦R‹œøöZ$P1¤sÛGÀô縉‹¾(´ënþ ,Mph½–r·./}·“—Œ¸pl: ¢Û^Ó¢[Ï™(ò{”à)Úz•~¿Ïwf‰`™pÌ..m5|ŠØT +"&÷"•ø… }"Ô"Ðàûü¼@ƒû˜P×O7æè[:·È%$ê.ê@—a…°¸ž‘¿<Ù©æŸE´w-` MTkÕAΨzòÕ(s›Q*—p Ú’¹Pw)*S$iÍÓœC™Ìn§kÏóÙþç…'È[~‘1¤cÛ‘cˆd:{×è+&ºAú;í>³QŸyä  YR&›•µcdtäqštg¿=t¶hóù‹¦ŒêGÉ '¹ûÔ–©Œ²8t“•Ûš©5;ÆÂŠðÕR±¤oÿvÌú§ú.¡3b=À'ÄHr,ôé¢BÒìøÌ.Ù¡ÐŹ‹@«3Ên&m9h%Îor¯øÖ›j¤¼“îBþúóÛß¿~ûÞwK¿üþÇ¿ß~üúóë/‘Í’ Í¥+mˆÖLÊéÁè–·Mƒ%AšU†Àk4‚ZÃÓýÜpx¹¡×dhý.U + ´2TßÉ_…V‘l¸@Ǫq2}:‡ 8h“WÞà<Ÿ;™aÑ;‡ To1¯ˆ +>èã íÔ“íÙ¦pÊ´µ+ÊÖ«ÉY|mØ­A)ï˜×B!8Ì`ÑÜÔéÜ•èrX7§¬3H6·>ûÓp„AF~XNÅÅ„è@¹ÍK·Ä4Ñªë© +Ù¶›“¬:!BßóDñ°.uÄŒP¯‹\šÜŸêîúçñç@𻣫ŒpoøúVcœ“@ Y]XèéJ4vk[¥¡E_ŠÐ\ ¹­÷.!ŒTqˆ£¥hú”š]8CCQ†£Ë»( ?®$½'ºr$ot{¿ò v?§†f¿«òþy·;¯Çö"1nžá{§'ÿîú_Æ«]DzÜæóÚÁô ^© À#c=ÿ`À˜Nœø÷]¢Îé],&™[ÍCQ$U,Ú·!)vBH]%äXCµxmW’ŠšB’Ž·§e mþy~åÎmޝóÚj×™©9×áí}¨™Q*†;3Ú_ìmÃÛšº¡òëþóÅÑ2*ý&ž¾]Š Ñ¦ft½˜:×ù=;YYGÛCÖñ>‡¯¿ÊÞìEÙe:³XMe¯I"mSˆš^î̱Œj¯,N€UÄ–#FçzÅl‹N™Û/–ÒÌX‰ÃoyC'Ò!¤W W +E(ËÇX°­ é¾j÷É@Ψô(ÎöÎþ± ·WŸ±õà˜ÎaÌû£@Rµ¸Ôf@­Góò íTÐ/n³ÊË|f ‰ñJÖÞ²^)ÎMW¦Û¶!“VMè;Eû÷´^ÕÉägPtá[ø6ö +çôï{;a(§WF3ÝÜ+Žw¿-ùá®xűӑB}¼è'’KZöXóãr5H£ah†fÃMÊFf=iÕÚè¤æ‘-”55¯VvÑÍ褛’ºÑ¼…4ž<žfì£Ì€†XÜ 3uܯ ½îpA &»‚RÓîìî³0É »=XÇýàR÷ìDÃæ}Ýõ3’î3ýÁ­éwÞ[Õp-'9÷–Œ6e´¤ì”ž>Ð/æ/#Î%Þ\è©ß¤ ÂŽNcúsàL'= 3éà»îr +ÿEvzˆûà*)Ò“}ˆž:Ã6yzC*Ë“ä¶zŸ„á½a`qøjÁÝߦ޶€§3½eÊ(ÞÌçB}Ƀ‰·–êu•‘/±QÞêÃ{?zLëôÚV~~ëý{}6b¾=ž ºü¼³µùºíe{N + ž¾õ³ÿòãÛ/h4u~$üÃy羯UYNCeËõñãóÛŸÖŸüçÛß~|ßU´´ˆZã nÎY7ˆÍ‚8f€ÔÊwm°2'? sÛ%FÙp0qÕ68ÒkÝç€&k£ò3"j÷çL³ÚA\ö¦_ÔO0nHy4ùšNèm$©·eŸ=?]Ž^ˆÆðgʵí SöÕ㩸aïÈðóŠ­•" ²ö àôÏK§`€¥é½i%ù¼žÈßi“¾ÀÒÁsîî ¬NuŒW_ä¤Ah­GÎ>¬ÈÙ]€„œI"{‘Òl¼#K8±JD3KÖhg—±Mû2Z›ËÐr\â%•×áÖ¿?c˜§-Ã…Nÿïôh`Â<@~éö óöÓb•zÄÉŸV»o-íêÇeÈÑ9üʦ…yåýY!®81ë•pK”m¢Õs¹nþ/FÑÃWB>#xœºËóvg¥ôlçÖúÅf ÛÏ@N|Oîª_«vô Ë€ÿ}|Ãv‰kò0õ¦2 ñڄ“”—)>ÏT'`–š™ŽV – V¦@f„hÉ„ÃA^>+ëF>zìl¤§Éhê—k ±ËÌí’8ˆ³ÎÑ`ɨ̗¸²2¶KMýaB, 0#@Atèòôïõm¶¬/òv²o¡#ßEYŠü–Tn¤53*[ƒî¤L=A~æš-qϼ?À¶õ¾g"ÎÈbù˜¥@^]VŠEìBÅ'ÚìS³«?-Ùî%”Ä~ÍÕKaŸù„Éæ‡Ó(ö6‘˜áxY6_!GÌâÑæMùã¿ÿþǦ³#6@陳n8|¦²cŸ¼Ì %}‹ú¨ééç–Ð?§ÑÇ]šR¬—²œ”'²\ÙzPpgø¯%½I®®ïK=ö Úܳˠ¤úyÌi¹![6‡`¬l`›¤à$·\ÏÇY¤‚cDü3˜ª³æ§ea²ß§ŸP;iç>žº'9=Ä©·ë<ÌÆ¤ÛݼD9eÌЦ½ñs®Åë²nw’âÞNò¦ü< –ˆ¾(„>Gõ‘@IÙë“[ÙdˆyR½ ãA(¥Öà“ƒäq:é%¯AG“î{4Öf7‡œÍK–¤%óì†3mt0ô*Ii +­2v¾CĘ IRgw;åð# +¿O;)ð S$½›öŒpL´2Þ`Õ›*›ò|Ì~ÓJÒ#‰u³xû”xÿ¤SF2@âàiö¥’ä©0Ÿ¨Uó¾ÔÉš”/¯þ Ó[ó’•M#"óñúlZŸwÕH\©Ï2  d"Äb´ÂômÌOCM7³üãŸóˆò*C_þ*Œ½ó¾‘>K5r³ÎÉpj-¬vM¼ >7Ôç|Ú ¾„‘ëÔ …r¶À©`H6à åõ€@(s#²ó¨@6gc¹\EFh.ÓìX_1D{0ˆžb5öìÿs2OM‡ +¬‡¥¥%xœZ©ëä±¥ØßP¥xÝäf`ú§ž¹èŽíê³¼-ÑágÀê÷r¤¶z,.™$ØwŒŠ ~Åh•ß+,'ŽVÕ] )¬ü8q`vöŲÅuæ ’cµO.I¬¡—¹ÔüíT¶m^ü4€a¹²o{oeì ÐÁˆK Ì÷9ø›\m`¶ªr,ƒ«½Xý+7xÌ(Iösõnüúý[ü9˜öK,Åoɨ¾÷²¹ør&Íù½5Ü´›Õ'ÿ”a%»$|lÀ lU7+«ÊDƒ,ÝZü³¤$¸N:|‚Áµ;ŠÎù­ñŒY{ƒÕÄçQ1Ç¿j ó®?£o÷sa¢rvša,†DÅ­™byÜ*µnâcl€8gvuôˆÝEO@ô É ã+ÁjAyÌú1š†ße|É{BV1èãc"²°TwŒÏà=eUœ,›‰~ÏC÷ $×ÊïEÈÓ¯‚îïý#; »É®¡Ù88 GŽÁØ(Kx5óHÇ[ä02ÛÉÀ$»kÊkÛéd`È6Æ ”ìÛ™±Ÿî+4ÇÆâ÷ ]ïXfe0yòûµ ¾Ñ,n'1ëÙÏ•»C«Û·)MbH¼Çrã·Ò îS;ÕÒ 6D– +‡›Ò’>ÇcD‡ì«‚M$\°ÜÀ¶¯JJE`Ã-9%FwÁ®'·sà ¹ÎMP³W)°Ö2î’ñº¹¤<}-íí½6é;JüµLÂ$ ϯØ69xzðÝDzvB:ß E„)—qÙá&‰X)nWà.ŸsëKbióØU-.ªàYXCâ[t²ðÆ«$DzÜî} +_ O³´4ºï Ãß"óþ[Gp’ôººwù#ù(Î ÞÑ×(€§»YÏ·Y.ðãæÎrý†öT©ì³µ;SQÈ2—8Ú¼Úqsd´Ã‰½ò†ß6Á—pFê.ioÌ¡p4²@JêS‡±Á2Y UëF¡žQЍ+Æg@åj?_PV¥]1¡a‚5çE¬6>aLk©ºÞŸad«wì@bëÙrYÊnÝúJ廣&¾Åhn"WSÈe|‚Õ°ìpµKŽTs¾éÓ£j²0Ã{wcÞýWøûî~T8î¾ÉuÄ'µÖdÃŒb5™J¬4s}Ô{¯/.hr^÷§¾˜x·Å· ™lƒhtÉé }\„†¡fšåJ·÷ùY˜(©W9›0¨¼þÖ™ç$6fÈíXMK…3VÆ`X…†¾ âúP]ü+¾µ>_vv¨زùJ7ümD“XÚq‘ÙD}]íûó}z•ÀØû´xCéeŸVœé +;°¾’„s- ':¯_ûîgs!öäáöZÆ–ýKU¤åraš ›q.pûÎ:Ï9ÍEâã„q :v«©kË€}¿É­nÉ‚>дuÍÌì¹úYë°n¾öùêkœ†£\c‚ +Qj®·(ˆ+÷|C¬?jdGå:¢Þ°®Zаl}t·ð@9Þ%æ½c ßBóº +ே 7UçÑ£»¸Yæe`mhÙy2N1OÚŽÊN.ŸÅ[G ¼—ÊërE—×·â[Âí':[Äâû÷?~¾-×ÂH–¾¿ ›¡Ç¤ÃF[/Œ”‡ìŠ}μˆ¥j'öA‘mŠöÀ˜ÊElôØ)w[^¯‡\+¡“§ÅÀ±w1¡F q5ƒ,f¸yáÞ~~gkyT1&-‹ )lnmc"™È·ÇAœVù +lxøçýJ»ÉÁz|Øñ5x$Vï+6z×HGô15±Œ{ºKxú$U‰`BÜ/zlL‰ BÿfûÝ‹jÜÆn:U¹p&–ÙðI¸x]NÌmI"‹ñ¿ù•Oá8<qÎÉr”ö~뱋D‰gu Kfm‚`t;]r—2&eWË2,ÕêìK[µcéËÕ±îG+¤è€8+cßx›ÙõL«²–‹vÖNüGöì›7ìϤvKWP¶ ù¥cw;ôå*l¨ìuý +õ:,íÙu×fÞ0º¯ï¡<Ê«nдÌVׇOz=ßtdÇYÊ ~pŠž¹od% âÂð’¼ÿüç¿~&K}oM“ÿ~ý­w„¼øo*…Ù½ÿ_aòä‘w· + ݧêGå_ã#ýu}„)1_ |Iõ,H±¬Æ¯ˆEçp2ÌcÖY4™H²&#RE +˨"“cìE¸cÖÂÜbK”îªÌ0l©½°ß¢tºK÷Û´´Zâ÷å/êì*ô×)=Ý’¨N@¬ZëðjØtCƒ,r¨©,…EKƒíc¤kü®é]F§þ©«Ù:ßl¶÷ߤMG ‡(º¶”"³l™eÅã©Ûúw‚·»€yþ(`]ÆßH€‹_ß œ|Š}=k¶hV©"ŸHA6=•þûÒUÌÅPJä0®^æcŽu×1°’ËK8ª‹ÈyíZÞÊv-·zV±›³k8¬öü_®Å]Çw?œØ<Çèᣠ³FÌàLIAk¸;L :øi`@ed}k–%غxõ}Çth–­ê•w}c]ã”?§²—ß8úñat'ÒµR‘å6Q›B`ÆD`ø:"^ ˬIÅ´ã&ÿ 9IÄ” ššÉ>í“W—`k6î=bHôp¹µt¶¯’ì‰^xÁÖ³™\r+&7³=ë&7ž0ö­º&Xq“Ÿþˆ'æ¶ÜDB#ûrv9p;.¼±^R,‚K­Ü­!&P +É|`V©=§Â¯C[ع`êØaæ»uØCOJé¶Îsÿö‘«jÆgÜ#X±F6GC +ù|µ|ôçáé&qõ’ÈFý:;v1°Ü—$`«‘ÃyãÊò|pÅu¡= +LJ Øpj€)ˆ¥2‰Õf߆Á8‰š½Žáü1¡^SKg¨·!gø…/èÏ“1@Xçolvò?©xm–ت­Pè}0Ã:'$tÊú–¬¢MÌ. Õ®6 :a'8&Rgf÷Ùgºèp?§!-`Á "-é{v²Ê€¥`ûxP ŽóÈÜû"›Q\ùpeq¾£ØÍˆÌ‚ðhÒ„uÝRÓ¿D~uIÑøsŠÈ𠚥À¹‘#8Cž¶Z¼ùjúµžÈ/6vŸîAÒžjè¡Û‡¿ˆ¦ü"Fàlè6ë¥k§mNZ—’$ÓS=;_¨X6O¹mÙØ~gk¼0½Y"õœ²Cì{º ñêQê&EÓ³]ì×;rï>|–mÌÖ·Éïì™f›~T£ì’?Rµ.‰ÿƒ´—>•:dÿ¥UÕíØ`õž^)–ÍxNð/ê “fQ9$gõçôDZÛC‘„ŽŽ.kV?ê¤xµ‹"TqÇïÆ#H~(Ÿ Q §,Õ6‹²`s°9=9ˆ^á¼Y‘ ’…½S§ ˆSãÔU´ñÍ-£Ì޶¡ØajV;7¶V{ù£³ǦŒ/`µÇ»zgëµþf==ÖB#ÛûŽ7 Ë Ù†J™³½©é–4¬UþÜ +‹ñÊŸ¾Ý¢ªñ2óA¡¡KBÉ@õ”Õ)ëS;hpïÅú«r`³M• KQ^ C–Ð 5e'<±ö&WY¡G{É&-âoöÆRG…î ut'`úÁçarÆ:R¾½]Ëøg|ÛÜÎÂ6åÌÌI ¾Ý­>cÆãìôÒ^Ô¹a­’µ +÷+Å‘¥Ë‰êzlQýZŸÐ²UFœdÝs ÔÚz(›'îºR kµú-ÆqD×¢ Yz„~§Ú’ Ìé\å@Žs§c»ñV¬»Ô©§¼jâŽ;JØ_;‹«kë=¦d-í¦æ4$£¤†JM'"2ÍPNBB¥“tƒ¸&°q µQT*ìb.܈<^𛆸VET«Èi]¤}ÓáOíè#¹HMº’›À6Ê‹PãÈWj³mŠxR'÷#©¾"r±ÄÆí Çç5´>¿ µ`ºUì—Þ6M¢î QPFà =Zd\ãϸƒÉ¥_¥QGÐMº%Ž\Óu|ä˜Ò¶´ s`Õ]Ë)ô5PÉÖµÃÆ7Ǻ;¶%ïï0`Jñ¡op‘‹³‘gÏF2‡ßšÁiŸáØcg#€‡gãêmÈóÎÆ*]S¦ý–£1÷oŽF² #h}¦Ž…˜§Àp¼úüƒ>>½§˜Žf`ã)>ÒË0~uÈ¡‹OM™ò* þá(V•cå\O9†S e,]_Îxá)âëÊ8qÃ÷c.ŸR~†Q›019õŽG€t€ª^•šŸÆBy^‰ou: sä]yLqÖ‰¯lŸöGíð 5äÞö®Õ”‹ÏuOþÍÞ~®CÉÜçÙñ.†ÙSòU±ëƒ3çx©ôñfew·ÛSJyæg.Ç;æ¨Yýr§>l=R>+ÉÆsö zVÃŽû%l³ZyaÍ*î2in¹&T&°/GÎh„® +žÓžº"-y–=Fúbå9ß™âѺ³j¥oG{¼Ûÿ–mDÿÇ ±w +¶¦,ÕX÷É€–‡ø¸<·n'·ø"–g©®ÿ£¼Ú‘+ËmhÞ«è ôÁ?C×Ô”ó–½'Râý>ø’¼’Fr$Ýó@Ä÷€ÿÑŒFƒˆ¿+ TÁ3‡”ޱ€Ì“£¤ÍؘEÏ–¡ô…±–å†f}!¡IÀF 1BígÌvµ¤fPXžíÓäÂbžívm¼ ã}ÆYÔt;r˜²¡¯Úº=ùš“°‚{rüø¶ý˜ŒÉakí)X B +y<][¢· FÌÊVV§e篹 +gøQOS ዼ‚2$xý¡s;T…Q<à8YùàI?CTËšmú«¾<&¬ Yj%0\‹æ+­Ÿx_lpsórÆ+ +×ë +o–ƒ!½øÅ˜°‹ü±j°ËlK>ÂüàçÌ/ŠçSÆrø¾y×ΑX<ú¥ÿTIn`y2EÊ/ËäÊ€1ÌÕ·œ\®7`}ô’kÃôi”~l¦oR¦o“Ã4›Ãº'Å(sYO+ÓÎr5ïsvoØÌ°&,=üAôæ†DNi>ž9å…Šè*%WBóQ^¹hæÙ<µûë[ Ñ¡J +-Ìå~"™lôØ,ÑU‰ð-‡Ü³GVlêlê¶ÛpâözyoÄšÀRB=€ +L7%`KêH0]Å;V±‰°–Ü8ÕqYæÎ̽z ʪ‡JóY›0ˆëa'†<÷[Žu±\˜ßÿ"«útåä/½ž›#•Šûë“ö…ÃûþQ}: UoO߀÷–À´ÆŽ[9‘&ÝS=ËT¹ÍèÇ NdÛõY§mØrëÇmV÷8ÿÝmÑeñÛP±åj»¯Œ¥»gÿ]QĈ¸ŠâOúˆåÞgˆ‰­¶=`4­–°Y!˜K~F©øì6W‡3Õú”âúM\`N¹áU)T²Ô†õ¡bLø1Ö½Õ p!ñì—2¼>sMë=äôõl–ÕÓ)G‡¾Òõ™s²´Æ@!ó4sóá]?Ó +–ñ;Ñøz}èò=w&Ë]Þ7æT‡ËS] ´f«Á*òtoJ¬ht5~MŸk;ȉµF.°ÝJ^.4O]ã8‹åKm—ì Er(sÆñ+QQ•Ã0 ±‹¨¦Š=lžŸ™âwÝi‰ÈÛh„ +S‘õAW7Y;Žz‹DVh'ŽVežÕ’FÚËX¿ÃS™Ÿš@DŠiêϬ¶ +ÝYëi–wX-íqÿX0øÏ»ûËò3J{¿&’9›‰Ÿ3sÔƒò܃™s¤›™s¦Ðƒ™eL”åʃ™³ºµi8Óa™}f¬n¶®ÌX[fl¥3ÇC)=˜9°šÌ<r˜²¡o8tÙ“?bæñãÁÌ»˜ù)Ø´63TË7™ùäÚ;ÃÌ\s0_ßHþú‰¤ƒ—pµT”m×ÊR  9oÐÄ÷˜”ª}gŽËàD&’;7yø…0>JSÕ «•>/ +¤,b»å‘˜©)T›œE¦P–L8ìD^í§¼þ8ÞM`«ë„¶_Òf8:¡ªîufÿXgé—74Ûômfƒ}0—}Û|Ù!¥Átj «`×Ïÿþçsð.¢zä÷?yxSÑ8zhÒh»Ëxì›û=´Ávtù༣ (gˆG—éBU]î[ô£ÙMÊ¢ímG—;ÝÑåFF\¿‡©<%-š`÷GW¿¡¥íD2fqD9wö e igÉ}¹…VVW:ÂŽN¹kcy©ª{«#¯ŒpCÓû@ncáQ‘áÆ*‡®Ccd5 '1ïˆÔ†&¾e°WÝÄÌT ¸Uø9‹Ù¥+&Öu,xTÖéÄÒÍŽÁ^%¨xtj!Y«¬T³©O‰€2fR#ùÍa5HzRzéï{ý±=Ž Ý‘mÈ0U˜û͹«± ~!»öß¿_þõÌ€ƒ¼–Ä,Q »CsÏÊ$­ýH¼rÈ9¤–enìÊšñÌ7‹­-â9~Õç,;ˆÏ…cÓ?Ñž¦l’[­@ÒAŠ7…H¯‡w[—XŠƒ¥ÖlúRšµb3Ì' ö’õ0lÏÅÀ)”KÀLî1çñ *UáÁ»º¯ÝÁaä'X,¶wàԵˠŽ(~¸U5è…SvÅË‘u€ß8ïª1d’É4­%ÿ½ Cß· ìhå«ßó™uiÃCf\‘ûð¯4P)SqÉ’ÁM”O,¾½šŒð"{ªSelv’TN7,×6x&ÙFHfd­ÜXgMޝ?RcšNd€Ê.³’ôxÝëéâÁ$_r‚nÏ—¤gŸ*<ê›9—žÃð’+½ +ñ:@^ôà­G@–Pu,;ŵʭõ=Çø;›QspI¾"8´¯%M$´¢©uè(Īͫ­uyE$ãšBhVÌ ]F3 ´ÛE Nô·%×™ÈÆ5–²`AÔ&1‡_”0͆‚m¸Îš˜¥X†ßÆãP÷ãúÌ3ÄÏôÝ$K‘j4þ—Ïp8QKCÙ{øOšž{z“’GÈ h$/l6z^œi8ZW¨uo\ËÚ:@4‘ë2ñN×s¾å0Ó4*ä³`íÕÀ²úJÅ ìF…æ>JÖ0™À1½‹œ1ù3xÀtçy£9ˆ·K ˜ƒ†$åÃ/—3´z« ¯ìkÑÎÕ’m›üèû+Ú]Øå·Ÿïžãµ!´¹AZ×»XÎrÄì’óØNÙY§È°}½3E˜{2!uH ‘ ¨Îß3{ò-<*Ÿâ¨¾úq\äedçÅÃPµ†ãjAG|€”:H²@dåà;Î:ˆ#W¤=OÞ+´1ÏKÅ=š•†t2p$×I¹¸§Hç>ƒËJ£Ê9ô  Ã\áää’cP8™‘Ëù™¸Ø8#OSÝ“A£Æ}i€K‚ãù³m*1U~n|B¶@×¶ýÞö’T4ÔĶHl{¡éÿÙö _¿±íAnµç¶‡(c¯xl{œ$éÚö4Û§M{n{œÀó¹íq.åç¶Ç`:·=>šŸÛÛRŸÛÞiul{ñ¾Øí¡kÛ; yŽcß÷ŽA‡Y‰7]~û÷_¬|˜˜äÖ”ÒuásY±¼\°ÒvÈVóYk\AÅK3%>‘U*ñJuoÉrÚ>A«­Æ´!þÜJ3rPÃPBÍ‚ì "&<}j6é:¬Êj`×~ÌWZãᎧ­fM¿#cÐûkšÌ@I¹ ÚLޏ¥Øa­g@U;ñÃåÜ‹x»õ£<<€ãä†Ws/wYYfì±Pð#u˜¤….GGlôC…À¢[¾"mÐiJh:_PwÎÓ¾"_Ž9.-¼‰c1s>k³¾úÁ .Ðí“ü"ÑM©ËšùvB™æýZÔÔ¸óRÓú°ÉðNêÃð3–=`Äã\y´dÙb@‡‹ ¸2O‹É}éÈ&7šLNÐâbP%‰.ÓçY´ÚÈ"^”\ÛZÙäŠÍC(ÎE‡$±f¹…^6|_£^fg­ ý¼×Ãa§ÍÆÃ‹Û !ì}JÉbË›Ï@ðisôŠè˜õ +ƒA§ÃBŸ-ˆzÅBS™—Ëxémcúq/¿tj«Ørì“\™ù±Æ.{¾äÝÂ`¼žýºö3³WÛÏ.JpÉ,Ù£N/ TJƒôÌÛ0¡„³îA:²æÎ`ê¾õ}Ë@𜴰¯] $@¥‰ßSï«I†4@¤Ž€…\rþñ*É–ãÆ{ŸBh=ÎúàkèßëLdf}ÉÞUE‚ ‚@ÄjÉ•D¶¨`†ñæªT`6™K‡JØe¥lg˜B³\=,—ò¥¬[0;YHså«cñt²ï󔹎vWAð‰ùO$Њ–übÌSšTßÈÅÁVÎù¿C©=Njv¾åòk+ßM‡€6Ö±ÞvÃd;ó7 rIÛ@å‡JÇË´±íæRÙ$ —€/‡(‘Ö,”¾ÚU~Íûàm”³.6¿Ö-çð´ ®Ht«vÃU^½'ïºÚÛcg‡³ÅÑ*Ú5í´+wžM( ­”ºðÀÅÒŒWb'Ù)ô–Q “p†@eÖü²³¤ÅÙ€†_ÇåEÖà[ÓH«Ìãºí:®‹™‡ûrfÏ«Ot Õb€œŸ]ǬÆãrW rveeatjÎêPèy€tB{Ë—ÿi³ú®W!d¨ ëUù­_^]5WR\4š¯'ØÑÖ««ž(pڢ˯¨­??½~Ê‚?Ž19“MòVô>¥¦a‡:Z©ݷñZ”†Š'×Lÿ]ÅΉ˜¿rXUTÿ]xÇðåC2©p9اÉ,ЖàNÝ|æîú®]"N‚GHƒêÒT2òîÁ¬ÍÓ¡Ç|ÌxÐPÈòOHÿÚy™äå÷ÿ9}Óyã`(Ãûº;'Èx>ö›PD“É2׬Ƀ%MX§Ó*™°>îàamöøŠ&{ïýóÄf‡õ¼Œ>{69fÿØvó³Çë’GåûÚë —ÍIÈåí¤îÚ÷NqDøyWC£²-ŽÊA·ó‡Už§Èé©áGV¡åm­ÕÊô¼ýj"êÔ욟`4PN¶¹_s9º‹MrPƒf‹<ÙØ¦l½†tsáÚ½|T 5nŽ'¦úr><~Žêß¹1*òJOU“Zô%xÍ”ÍK ³r0´q§å +Š5Ž]Ã| ü»‰7 hÎZ|,ÛbIõÈüÂÙÔÝÎÕ§_^n·§^ "¨¶Åª1dG5»^jk>u[ ÈÍ–ºN¹“R°ùÂ<”7ŸøfÒïQ; {•IWö›P\#¯àQ'ö£My¦ ØnlÜx:Ùox^?›´­ÛjZï6„ºÛÖ=€aî _ó‚`x@Šu`E8ã1½™ Œ•IÎí9ãÈb& ‚‡0ÖÝ?ìJ +;ñ6cpTÉ™ ÷†+Ë[34gDÛú§ +#[4½ªíÙ"äywd°ª–³¹,?cw9÷o2#-d4ªÙݬ+K ©½(¶kœ½€QõèÉ'?˜<&|N~:“ùÙžý²üOé@røÓ”s+ +Tü€£-jé$¦ËP•$dÑ•w (¹—8Ð]t¨u-€@N’ €ô‡Ï;’aòçq›•w±@r4§¶Ut*±ËÔÆ»š§ò¬:³é[?8ŠÃˆBñL,E( 6-:j§"ºi{ç¼_¢2öw’Q‚_ÝX÷dÇÊ%­»ð‡ÔŒK}¥Ì'=”ׇn©Y?y}76ý˜Ñþ¹ó_ñ·$ø¯ŽÔ¥<,þýú«v² _ÿôŸºŸöí@¡O)EúEâýE ;*–(útï=Xµ …ÉNLþ­’¥ÓBÞ°1Ú´ˆ§($`½«ºåŽÉ%Õ¯'o`NyŸ¯B¹ö…ízZá :y<¡Ñå|jò~aJ~D÷ñØÑ“÷Hx)p®"EhÂPŸÄò,ò¢d b¢2®ШUÍ‚únrç)±fÁ‚Õ1«¬-CÛ±ŠþÀ#µp§ƒ•›µÜPV“T+¶˜epm7ó늘¼-Ë{?'Ã\±vK)^¡Üwr¿x'dÌ™s2ŒZ!BÆêüŠéæBqUeNrmYBL«bÓn™VÔ„6ÙÅív1lÚ,¯Ãè¬ÁG„œ¾0ÔÚšr²1’|[¬âÂÑ*©«Ð¾o[ƈ+U$7K #üèC1s­â“¶P¡½BÃN9°ºõ¶*š7ß'UN_SíÃ4U•´J€\â“ü±oiyMø0õ¤²©Ér +€3 +“ˆ +hb@Zä¡ÛÝÍa¹”Ó»+úï•cÁªßšcòÇÖÇ7=9­yy2ŸIdÙ¶¼<ûdf£>ï›Åu“ätU»!^OPÁæå¸.îÇà©pO'YÜoïgRW·Dƒ­úÛ¬©^÷CF×ߕֽ‚©ú¸÷dØÞ×ÓýM?¬QÇté®HëMÐØY&„ÜÞïës 2a(x§‚ƒò£72K?PG6±9ff}dÞ鬒ʪt¦·P9lRoW°­[J¥¬, {Ú§~ÐZepzJѹ€¢ñœ)[}buj<ØàG-÷“m­GzÙ +`bW®Ç€ðª/»µ—ÚÍ«0H×#ëWª@¶ÝßnÔ8ïìçu¨¿‰ bí?”W»’]¹ Ìç+ô£âû‘zW9ÚZ•¿ÁÉLâÿÜ €$xîh%ï&š¾8$è†v °l—viY>õ<µ(YÜó3Ø 2°b-2^xVg—ýRu¡«dàWPЧÿןKp{¹µD‡Ú}’´‹( L уmažV8‡`§êjUcYŸÀ}¸¨êÆr*P¡&—#>Œ/ˆH‘+ói…³˜ÀxŒ¯P6;èHú*ÀíÙÁæX%Š¿ÓÊu»¼v¹dÑ/˜ŠÒ•ÀÔ¯Ÿ»ÅåéŽQÕ¬„H85g÷Èÿ3€¶@ú9C†Ìôào`#ßü ¨õSãÌMXË qÜü ,vÏß‹¿iü-‹Ã óªøào!ãóºòàïÇß·ò7ôô½ïtô­¢òÐ7‹Èé¡o&wxîÞÙvÜí°_ÏòëE_¸›£”Eß²>èÛǼèÛçÆf9¡3Þ•¾Wj{oJrì ,-@Ø[ôöÅÞ,±úáTÄåÁÞă½o;eïûØÛgÝ¥jtOÝJP7°ÔÔ ,4OÝxçÔíÞ~Q7ÍòƒºyÖtOÿ·Ô$cîô%s'ÙäÈ Sk€DŒeÈ]¿Äö× 9*{b^hm~Ø´o1Ru–fì”S±^²ž†ÏvkY 'ìX

-3jìø"Ž'Ãk~½¯á¾e[º$|)aføÏ¬zˆ'Çg–­o8¸GVu·±5®D:˩ˣUèB$èZ¯Ó´°Ð•‰i„¬ ²‘€œ8‹‰ R ƒ1»ƒ…Œ£I DGÌsãgÇ(Ñ„§Ø|Ø>EJÁüÀ ¥§M¶«¯°£È2Wók¹‘½ˆ%ëcІb®eËY’h½U25»x¦Æ#Ç1—ü¸(Ê¥c>T CÛqV’02ëJRmšþÎÚ4L;–U6=ɉõè­øÐì59ÍêWE®¿ñ`Ç3›¦¸ÎXx/\\Äeäuàˆ×vÙ¤€¡ƒðH~C¡Ê-—mˆx=ÚîÄoðãmwÎ9õ·ÜÄô@cÇk|½'ìü¹@25½µÍ3ŠbT™=t¥.u ܧG›R;9ÒçûœUÆ@]¸I—€*‹¬:¨Þ³ »n·É‹SÏÌ© UŽŠK2šìEn÷Î „姆ùñv¥¦†)eq@ç’%· Wù]×uÖº¤÷¯«þz¯¹ÒFÂG»`ÐÌ8V `hYZu)*q ÍÈV›ôŽR5&8s0[0Wœà·Ýê}wb«ÍÀ}ónïã ++šË²€ÀÒ}"f÷ÍÈ©ÖÇòl’î ”s®`—ÑÉÈ>çdnßv2¼}z} éÁSÁ÷ç‘kï;ðº­Üžà½¯*¯ˆÎ`Ýa;«3Ë#û¶“ååÒyŒåùe¡+^³âTǺ£#>|‹V÷W O]j¤Îî¤ÃwÒæn>Ùu>¾¾ƒ<Ïi¶ÎíSŸç€¥¿²¸lØSÎ_Õísª€P¨`⺮‚&›õõ*S­»jæ ú¸ìLRmNúø<ñš“ÑÖŸwLSÞò¶„H4Çs°~»c¹ ãß­†Kø÷–à¬"fÿ`çˆþúZ sÜÁ6f¸òmbãHüè“XÈ\ý&—ž(])/;dèä¶²1­)ß¹G°VZW»Eý«¹£Jqù‹†!‰Ø€@1ˆîšó˜‚üL +‡}Å t&VŠÙm—;¢]»CCUûÚͥƻr°§ ~ß +ævàÒ‚¬G}‘Ê‹>fE„ËÎAâ´¨u1="lC²I\§™«Û¿« ­Ä¸Oðz +ýªä=pçêˆ:ã܇ç™ydB•ÊÄ¢ "prØTkŽœJ(AV¨ÕŒ£@á•gÅÂã"­ÊiD,¢nQ«˜ùº€Z]Ç׃XAЛ•¹:ù # dÍ省GééÄï|8$puneR•ÏáXCT(yÜ!ª!WÑyÚe(mÓObS$6°‚ô8†Ú@+E·ÇȇL¸$ï’ögf…4á¿iGÉ,6J–…¥‘q™$Ò¿˜#7  áé+Á”\¡äñ€…)yk-,+ù{κN"K°dnÊʰœã +% `o¥puÀ®×ïË€ y—0r}qý×'ýÊgɺÂ%³¢}Æ•òmåFrà#®?^ø¥X`;JÉz¡±>²Áåoª~©+–†º››}ZÁëÓØÂJ¯Ø¹-Fe¬öЛAM{$Îe”Ö”ˆ}ޤ—j⤡«¯lÝfÑï˜\†Ð:£ßÑ'®Œ`¥±Ÿå“S8µþ4CºR¿ûjA>z˜G0:WÖâèZAñ{İõùÙw¢öâþÒ¬Rh@9]Euûþq¼ÜÈOg +68 •ÊòGê‹3‚ qýñóDfÂTMË?ÀzT}¶ã˜x™–]AIQ¤K/`ïù^LCq)›OðÇ[·¶Áçø2çó­KÃÓ,•.µÔQTÙ>Í"˜=j¦.,CÁÁÚþ£]ÎÖíÒ!’X Â¿kêfR¦™¤¡’³SÅj>ð^æ]€á/ÉØá,÷éÔÓ\»Ëíïo5Ñ4à@Žú|ÛÊÐò/ýp1Ù}c5Ûi& Ñw¨K"A´>‘(Iᣵ!ÐÒò.`@¸™áš"Ì,hÍ€ú´Ï63 e)„7J_‰¾ɤé^*{%¡Úœ9ëŒqŸ@Ó®‚Æ/]­:<¹þ‰B½¨Gb’aOä­UI®h‹Ø‘¼‰#ü$é+±­3ЖÐq“Xm.X“LÃ@]ض[¥wÎÃe5¯Ö˜½LÁF[¤°ÄˆÌÝÐU¼ Qoø!Ý× k—Z<«šãî4‹`¨ÉNÄǹJøÙ|ÁA9ÕzR¢þup7㪘YÀÊØf-M=.‡ƒEÄK,¦ƒ‘ºèôŒç¼u i>×>R¯îÍ ©_Øï<ð£fH;yàrFÞHäÃýë§ÃÐ!ÀªitjFŠí*?Šs(`$Üa6w‹øïçnn ºý»|!ä +4íÜfŸÀ“çj33cxIHƒÍ¬EU¿—'öCßã|úi€ÿ.X²qáXE‹ WóV«(J<þë4ïO#lAí:)¡¼òÃÓ…¹ˆîòëu‡  Hõ`÷çK%v™’Bé´­­†¬KO*" ?–)\ ,V³ƒà“-î)Ä–²'&¯Ø@GMeË;”ßCÙΪX†õ)‹ 6y-Íb“j‰PˆMvÚ‹7s\#›0L^w.£œ«¹§¡ ¶SVK:žo˜]Òv`^+¥÷rca‘¼·r²g1–êá¹.qã1óNã∮ÿNt^É{” "[‹L÷o„Å1åëÑëÍAq…æ_ßâ!š‰ÁÍFˆfñuÖŽ‡©Ô5Éç6HˆÏ pYK“—Ìeì¨ÜÌ54@B$gâbë(â6ØH/´ÒPIÉËü+Ùñ“SIÚØÛÌ””"hŠ#·Ä“@0bC“´%RXyuIB˜64`÷,·f¢3&õé¬<ås5jÿ-6={§AVÿFÉ)sgUÔxA–ÏTj·ÄPo€j :”ƒí‹/ù$ V$$%ÏBɹQ÷Ø_)o$Ì_^¼O´ïÐ5bUlÃ^W¤uêuB¾sÖ t=\ÈDœ5û?–£æ1(×ÁúçÁFI»b°|XÈw7*,nÐ1Æ£Á˜Ñ_ôõ*LåC#®B% Œf]„!TF(oõ0Š˜£ÇÁ(u@7„9æÞ €AwÞ$ã30n@ŒuIbšb,%F_¤Ñ{Î!<®[ÿqã;ó>†o?ïÀD8<TÔ3¡3ÿä˜ €¡‚y ˆð.Œ€È>„ë{Æ Ž9‰Q÷Ã`äê•®1W©ÁeÇy6j„dFQ™œ¢k¢fƯ#Üf$3Øë®è´÷ü0^&ãõð}Œ÷óÕåË„TµlŽhö9ülIqíj-¾¸Ú¹ =†õù|ÜéÉûÇtnçä6)æ¾&7/;h¦>ÐËûs›Ë”«Îå,s[,ù<{B ”!ÀrvÒõø}UÇ—'lT/02̃\Ê:Òî +øEB€ +í$c>ñôþ¥>£¾×èø`)¢=·–Yª•ÃW¢ìuúÖhľ[hypkï„5¡›Þ(ü9ª™,ËÍB°\ +,¬&î€NÅ42Š}ö‹2ÒsÑAðb Ëcú Nœ’¹PǯdV!°#QаdäšsÍôç‰Pàû(]յĚղŽ2)ê-¶ÿ+d ˆ.{2ÑôÛ¶“ +™ÌA9å %mFÍÑÎÆy3øfœÊIAô †6ö-™“6§HQ·™c±5!ã‘<Þ;9E¤ª;–·Ó€‘Hcç}³PkœÑ¯,ƒ¨LN)F9¥Šþ—p0nõ%Py$ ¸–‹å‘@ÝmÄà`)·8÷ºá%°â½òÍ `Íé0ÎT¬G,¼†Jªe£‚rݨ„”5ò£—JŒ»ƒJôJ‹7yp^ß¡éÁóÞ—«_Ô,†‹N+ ×l{gñ›'|*ŽKËwŠV ©u:Nª5‚ÁQ’±A@kŽó•× ]ó•I¡P¡¹Ë)%Iæ£.ŠRB +Ñú3!.™@l¤²ÛxR&ÈÏê䮨„YŸÜµ¶²ž0Bˆ@j»ª5è)Ö)ÈIJ;ŽùZký¿ÝXBÃYA ïÒs§T)Ï¢"úr+ú¼0æ í)`ÓmL;—*´B祲aDHÿfHålb>¤o}9’a>’ãÎ~Æ”BË!!žLÿÙ+ãN.¡~ë-6¼eÚøû×/ŸnŸ~ÿëË?R#wDÓ3ä +Z=…Œã;Ž4ÂêK™ífiœèµ¤Ñˆªô³–I´vzö‚p<Λՙ1U8•U˜&u‘]z'¸›Zô±±V'Ñ»S$Ê(€¾µ&X.‡y}mÕ[A8®¤ÃÄOüD7ÚÀåå«õ©9‚²Ý(¬ælPªÇtj‚{ 0x`£m›Ö‰=¬\ÇåÊ;òCµîj¸åŒ%F\]`ÒÝìg‰‹õÕÈc—`Ö°ZÐûƒK‡æ&“X [Û™VFv»çñ=YSA·<ß`_ ‡ÀŸÛLl³4UÚL˜4*3SÉŽ_ §ê2¾2Õ +jªäç{\ÝgÕËí> ÜYæŠE(ÎD…d“Ax;Þt¢Ýd§Ö…]jUâ²Z#RµŸù °rùó ëÔÎG=g©³3'æ(òê¼1×”•£L‡1¾äçˆNôZÒ¨„7AOÏWŠÔÔÚþ‘zX{ª…€3¡$£àfJ”Ú\6y{å",¹^Ž\4æW2ZIMF蔩èùB3NÚ\TvÔVÀþØž 6 =æ°‡ibG”"&ø§(MÐ&S@ž´t„΀–³hÐyâ¬5¢lȨ¸¹ª’ÆÒ¦c¦5îѲ|8ŒcS é9I [Ú‘OFt™ºåôž£CÊ|`¹?w ÜÉሾ‚›)QjsØâð™£dIž¦¨±¾RÔj†’Fw2£1½°å£½OÓÉqa]‡7›¡˜ûj9$'vJªNÅ®u +WmÝ÷Å»ƒXèÍÜ‘Ûå%ä“P öŽYYŸ>¼ýôá·Ÿ?æÛÏ¿à QÒb…•Êݾáï·m±`ü(@žÈt|ϯ;ºùã+œØÿußN…_Gœ_ˆŸ‰ Iÿüû¦ÿÂÌ~›¿OÏ {> ÄvΕ +endstream endobj 8 0 obj <> endobj 18 0 obj <> endobj 1355 0 obj <> endobj 1356 0 obj <> endobj 1357 0 obj <>/Border[0 0 0]/OC 1359 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1358 0 obj <> endobj 1359 0 obj <> endobj 23 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 0/Type/Page>> endobj 1360 0 obj [1362 0 R] endobj 1361 0 obj <>stream +H‰„WÉŽ%·¼¿¯¨£}h÷X3²!à rß ¡akëéàßwpK²È|% tÅ‹ &Éd2øÕëãÃ??>”ÇWŸ>yä¿ýðøðú*u¼þ÷áD4*¥òCÿ;)t<´‹Âkàõ|üé/ß½ý柗ã÷ŸÞù÷¯¿~ý’/Îk­‹Çë§§´¯?cø¯)UóQÈAßýía„Køïø€Ÿñÿ߇öRx+%8N +s†´Èðýñãã_ü¢¢* ÍdŸ£;5ˆheMÉjú÷…ó¢”p]«ÒT™%}• +.OB +\™„Ä$d™„Öyð¨…qH,Ké©ä&p@Á +/óÊ×°þùöÐ*£¤UƒBȤs쭤ؗSaÊ'ÌÕÔy©¤ÛÂØÖ€ØJz¡sÞ{|£êØ4vjEVÞ”ÀܨƉðœº&@ì¨Æîï= Ç&pe{l½/ilñªL^ýW‘+ÉiÍa­¬’¹Çó—Ù j4T­L|g÷ífÙ®l¶b6v—±8ofÕ¶îºX(‘;vW¶Æ2UrBé¦FquJ>seÐÑÑ Y4WNù\IVµ1Î-r[ŽJàÆvTŸŒDOC6Ê­æJ6(†‰êSà©Yy¡VòØhÚä5Ù8aªãJ1ºuƒóÔGK<‡ /ú¶jçÙx¡3v*!•JMZ)[.õ +º¤ …”¹!wl ¹Ð~[Lûz{(™°¹w¤qæÒSÌ÷6·§Ü;<Ƽj;E]&UYÆ–ú_B*#8‘J]Håc%Щ¿ÆôÝ•7¼kßTWïÝ=¸1±jµk2ÌéʼºDçYyó2ž[Ôt‹_MÈc ² +ÅE\ŒÂ°äP&hv(žÊ@'‡2³)„Õ~OÕ •®†ê÷߿ýòýÿ9¾øà7Ÿ¯/¿l^+;¾lSfƒ’¯]§¬7‡wÂÔE +XpãCC¦ö8¦ å€ŽœK3 &uì­îÚTGK e\qIy§¢ƒàû•ŒA¤·¡„M`IáÈ„­d6…]—~]l¥ ­6Ž‚Q­sU•Z†e(À0ÀÁŒ¸úuõ 4ûØÆ ï!²öö4É4rô¶Ýs޶Ù\s$¨gÐã(ÇÒ`§é{ˆìƒ=ϧåK›w ñh=ÉhlEöV"d­ ìv­³5~ˆE{rÄn2,›ÀÊ6°÷Ö(uÍ %ŸÖM{°'mF¢eB2,{ÉäIñ…±hp3˜ÚzÀ Î'S )<‰up‚p0e2î˜B;”_OïÜÌ#h¨m£¾Ýå;ê0 «¬ŒlVDßtźáà\Ú„ Äïò«tÄu•ˆfœ´‹®´WóÄ”¼»ÊFAà¹rý`T•&¬/téPMqqÙ\ã.¼³Å6Vÿ·Æ·jp\ÂÚ]¢Ñ¸&jÚ=åM©n¡­»–p†·dù¬m©A“Ò2âÒ@‰¥Mž‡­W¹à¡…™”Óí¶ÕD!£ŠfæDjû¨whdO×83 Gg“ÏZ:^°ä«=á<ޏ޼= îj™ï¸Á"„”¶ñjž6™´Ñù©Öò3ÀEåö~åÂÀ©ÖŽöøÆí—°Ö¹‚P¹&æ°Ô¶,õ¢KÜIwoÜ®Áq—øýr¡ïWDó)&\£ÑD›SÄ{*ùÒÌ œ ´RY Ø·žI2Τ³ŽV7«ópå¡—û7AÆyòt¸?•öÎr+Äp«ÈÉ ¼_r@jØÌºkú«.Ï­Ãí ÌÜ{¡°{!ç…ríMFƇÀ¡6чF\ýž½PcÐ÷Ù{î3`JèÎ4&? œ+)ä ñ.)OË8ÀYœi{´ ú{»£”ºÿLß“Âu˜»Üô’N±qknýïËT?æÜÚÏ#סpæÆC†ÝCbÊ}å†a$p²•¹åÍv0ÔÅ›Š$ =§Œ01íDB®DŠ?÷Øæë–Î=öþ õ9¼8•¬ƒð©Ø9‘míñØi¸ÿTq m™µpŽHØ•º ½ðž•ñ¼¹@s¯C´m †…³Æ£%¶á •°+•Î=zìÆu°s¾‹“³ÅÖuµb~ãÖrQ.¿Ôƽpe™ÌÞ¹C‚aJËð˜ÑåL„Ç z¹/Þ Ñ6ÕkùE ›SM`«/bK‡ÇI5ŒDc“ Ë&°²Ñ1ŽÆ%'| :lÊÄ„÷øÊ% Ž»äÀ¯V F¹£wºüÂÕˆDñç,³uˆ&¼67?øv WU¾Í9•ÆJ<ŸÐÏç³ðŸø`šN¶·ùM'²ÙOõýS!¼Fs +]éo¨hó[o§vha’¹G·élƒLøýDvc…´oÕlš4ìe>#VÁÔk`ï Ä–xôøü×Éi4úÐáé„n|6™…þ¬ý$šœÅREÔõ?œo¦À¢ƒk¼~ˆÄ¤"Ø!xƒü +³p‚†Ø6f5ÂÚEÔžÄó$ccÞ· F#19ßWv1§{‘è윇Ä-³;¸±çL6‰¾)x h…^ɳ—LÆ\ºšÉ.ÑÙO+ÃvW6¼Ä_¡°7‰5–MàÆ†±‹NéK&+›¦Ï³;¸±­°º>*‰uçyv7ö”É.1صÜxö5þ|YrµÞµê=< Y Zµ Öî¢Î èT>ér¿lñí.ê—°…Ëå°pŸÜ[q¼ÀPx.™ˆE+½}ãMgé.ÁÅí´ò½ÓJô¹G6æes¼½“Æ‹‡äȨ|LÑhEJ¯¿OIôß[zŸPØÿÃü”ï‹ÜÑenÞ¥Œ~nÛU`Tþ›ÀV¨Ä†OSÁËrv‰q-U–MàÊf3YØOžî˜ì#Ëv½ Û»“°ì¬éÖÆ)Sψ„­ä¢prÑí\]†:×Èû‹ÒŒÍQBÆêµÆÅ )•80Øóµ¾kt:éðôÕì㞬ÈýäM0~‹ÅÿÕ†›Ü`ÏÙîã…Ñtxú:¹}Ü“¹œ=+¡1ÆurR‹ÄíÜÄž²e4úZO_'·{²"·“Ó´s*§{-K•¤åÔ®“ì9Û]£¯éðô%[fÜ“¹½lèÈ¥ìëšãM’jJIøP‡è`Ul¼UЦBîŒDc“ Ë&pe³™,ìgÇ-ŒÊ£Ø{m…Ã!¨íµƒ}©”zw$V脵dÉ.d9Þå·OFà¾ðRøõ˜©D`Ù`Ï¥µkt:éðôµ÷qOVänržNY„' 9Ð&!]¹;£j +ªJÄô +¦j̶èFí +•°…Ë$°PŸÌ…¶ o/œ^()¡Cp©Üˆ ó¸á­ó]êæâY.a —4N&¾ßÝëx'[w£Kh§¸ë%¿bøëeð§̈L/ªíjÜ566ŸÌ•ÎO.JÚ,£qBg;ÔÙ5Uw¼sVÃÔ\t3AKTãLêç%âÖéÑ^ä;A‘ÝVN¤Ü(ÝŒàr‹ÝHôy!Qè¹…UžaIˈO +ÈûQ@N ­anƒV{3½|:;8!}¡nñ£WZ‘Þ‡ƒÚ, ài‘­ù®JlRÝã;µkìÔ9'-#M±*²hOÎ׋²JÚËŽ¨lÓvZfÊ#ÜÈ\Spº@fÞ3™ÌJ&×LN Ó¶[ýà­--´êÈí<½RìÚê„ÖĺV…ýq&fo"'ФîÁð{³Vl\߈†D·¢®zq*¦2ÌœRÎ)òý…f×ÁÀ1M›½^†ÉËÔ¯TÑoªÏ^–† ô$và§íȨ'ï§F¯AÖP@Α۱—^æOyaÙ‚1ÇXže»ËŠŽëáü݇'ÙÕ»‡\öš0»o—Íœü9Rçážâðf ÔÚhòÐ'O?tᕆžãüÐeØyÁ¶³¼í).ç¯ ³ó]6§+%Ï{ÃÒ‘šÅè¬h¨1ægYÁî²¢ãz8÷áIvõÁ;ÏÜeXdÆ Ä›’W.™µ•þöhO-x3¾· Áé BÏô¯ï¯ŒšÃ?¦æú¥§wïc3bX¤öBìÓüìL pž(h2cGBGΈçÙÛ™Ê)4iÛ¬~pÖ(y‘i“ 'ÎV'´A@ƒ)¸¿žßäf“ <$ôÛ”ìÆ>L oNâÕFÏE"ÜÆŸ¾ÿ®„næbçÆ÷wOCî­—%ôÛ”ìÆ> bKûË¿•pͯßÃF“Ïy¼Zyq»èdü0¨¾ºÈ³ìúä&é¡äzR`²‹Ák?þ™`-z9Ü7#r¨Ô^5{óú£bÎ ­GÊôY7é¡äzR`²‹Ák?þùfÅX)&c?G“ ²“`…*Þ@6¼H»nxW ²³’Y—%}pŸ/”ô¹Gƒ>¸Þúúà,Kœ†)âA•Ð&û‰ñm£ç¤F8ý´Ó«÷Ï#XŒÆY9É`ÆPEë Cš*½9%¹"íÐÀS-uHßU¨4«y”VpHG¸¢÷«'&ÿƒ'&=é~PÁž¨šGé›'ï–V¿7gÌ1ÝD´+8õë*†µÚj›ˆµd•SÈ´íV?4Àà÷.={«-Ùô+d^èÑÙ[íÍÓ­šî¾Yý4SÚîíÄìÍ5§ kŸL¹Ÿ\S9…LÛnõÔn{!ÌÎjÖ'õZæ„fsrÖ²®r +™¶Ýê§Bˆ{hOù1‡VÁ)ÚEŽÅG 9´&§iÛ­~òÖbÛ‚Ü×j§l¤:½ÑcùÏYxë×ÏIÃf齇I—;æ° 1Xo˜NbÀ…AtS$`§,/=4>¿;_î€~ª‚Ý̇𹺗æœl­Ã)=Z­–D­¯)ÙV‡*§iÛ­ª·Ãåþò‚¯ñÕüû¦/þû+¾~ü‰ßé(ýüß+r¯e9ôhßF\_ù—wýñŸ¯_|¡“÷Ñü_¨úþÿƒ-ÞÎàâáx"4eSËÁ†t¢åVZÁ;!,·ÀX;SHKiÈÀ—³#11P¹n¹Aïö•½ ‰¡âŪhKGs‘1±š0;öD¼ÓËë=I Â,'Dºk‹u 5mn=©ÄÖ+Ú§÷tóER#´hÕX.hÔo÷ ý¤a=¥tˆÊ¡gÎP¬Ñ?HWÎ0kõUüìüÔ´ÝÏÅÃ3¹ŸO ºxŠUÏ¥ªhv©c±óuBÐ[zþÒ‘§˜†0äJˆŠWkÙ$Ï6ê:«×L¡¶5놚§Г‚êðnðrø …ìTX‹|ez=žßNȞâæwÒc¬àZ¸I½°µøQ»ª†ØÔÿãŽr'LîDáá蜸à5”Ç@löh—Tûn7ÂïzÐÌSíEK¡'Ãez2¤Çk.ù˜«$´FQ‘Ùªr£Ý,NÒNžôÁ|ìn<**Ÿóõ +~H䯯¤™œ1¨ó¹AÆpšôx‘ÒE" +¢ 9ª5¢¼=@WGG8=¥.ñ;Ao=zª/Ec-TÃ@c¨²¹š¬èõ–ò!ÖФUâw8)VUk¤-wWÙ³D–5½áðN¬IÙqv®Ž÷aS|&Iiö|þ¬~N=LûVnRÇiÅÔ¼g'«ž5Ë'•«š{GΩƃ"ÔgEk–‹—bꞎ;êNKBÛÑÌ-áÒåÞî†Ü@0"Df +º k*Dßš¶ÜÛÓRJdgòÒE9_9êŽæ]Rî“Ô,"÷û¬¨ùªÍm¸¶4·¦^ Núƒîì¯jSê Âôâ9½™ñ:à7sšÞYF‹–ÜèAGY,²ÄR¤…Äå}h>φGœ”\L>#¿Y¡J+úó†Z5~ÓJÔ¯é «ÌRÿ’pžÔ±J/+SJGÑ÷ÌåI9âÁ0)œs Ë53*9Ï<·–âʵéàÃ+8–™åxál}¾ °Žjóú˜BÂf*_18ºøÕQWÒ„ ÙØw µn‚‹CrvÎÂ89cïhy" +ÿja¢åY_°'ÜúB@u39Áº™Ý¦Àì¶…)• ÛÉÔ¤õ>Obú°XŒ³ØgF¿ñè[œ +0Úb¢û)ÉõŒ7,µÕÆÐW³7GÌBÃöÒ pŒ}@´ÛÞ¤\{Ðo=JJͲŸØ{¤øäÆüµ·à&ö>t`a8½ 7GÛî 0‡“‰ŠkÄfm±P2 ˆ#J²oi€œ¤¾¡¸`乌…IE"=8DaÒi< IJ”Òp@|ê7SÇ!¬I:ÕTYe²­L +ßêÄÃû ¦]Ì.9Ki0f}´Ù²wöqKƒÕÐ;{»à‰×´ê +L"…ò”ñ}œÅß-'m“`GÓ6Ä·ÈDÆÓ‹fhÚ¥Æ0¨­‹-°;ÕÀÚ÷ÖÉíÈÅÍ—³ŒÊû5DÜøãËêyìL×tY—¸ÿQ^å8–GÐç)Æ'¦QûbD€Á9óÝßPäZY¯‡-Éû¯*+—ÈHMWÜ´^Ýí]âLÍíï©°†µ/±è¹,IÂuÓ. +á +s¼ÙÀàãß%äƒ()jÚá\I4ߥþZ³yšH‘ 8y½ýÁ >[‘yPsQáb +i|²´Ç_gb^.½?üónånäå–¨éaëg¢çp0µ¬ÕÕÊÕãQ´ñÃŽV(@£T‡DÂÔO0Ìæ|Õ·Ê0 ªÒ1_ÐKô˜<>ºâ`ü܄ͤFÀÍk–ZJgKk ÐŒ[Že| ~'£¾Ô›‡JÑÑǾ|FSkwM4’FÛD#2e¯.ýh$Yïañ0ñ°Š 'cûÍ.™uh]ÿ”¡˜®"?7£ ªLøÝX‘êèõ=È/¤¸gÒzsèSºƒB¾KÃÞi!¥â}3(wöø—ª{Æ+Èâ*Ÿß`%F£6Ùs¿F@YX:‹!™ý^yHÚ5Z/˜®šv€´(uãjqOº­Û´°1ì«êà[Ú Ä!øÕi’ ÿR¤Àæƒ|Á¬Øyd]ïH•+Mºèó›~(ÒåJ.~ÌíÉýÕ“ +ËÑM«z!3„lÖáŸUýPê¸áb8x×ýXÏ:€#›Ù&Ö{ãð©®­üšXô|>¦R {N¬(ýí.º«>K?PúðR ƒm®x)Ô­4tªfÉ~VŽ:®Z ™<Ÿax€R<ëŽÛR4ŸZ¤ù%èQó­€F×7ì´½ý#D]ˆñ7ð¸èr-‰^w&°8³¢³iòFó0;8G˹n3<¨Ú†£ÇaBeû·LÁÂ{wpÌIÞl¤®QÝpÛQ»U±;'R»©×{K}=4õ-[<3ur6òÁísª¥l(´†í:æ ˜«Õ¢è‚ÙÀ ü¹´  +Ô6_=œæB³åY?IÞk4²)«Ôº׿ôë—+ë '¿ã]wÐúh +gu~v²vޗצK ¿|ˆaPLµ¬õh•"-³Æ^ãÌy@­¼s·CæáC%ißsYçÄÈ7xG\jTC5À1/ùðPy‚¢k°]ÝgŠVqHìL¦>,Œ·ë‰E)!Êëc…â§(Øõé5&" +O¤KDà’ýP €Lÿ«#Û1šÀ%Ñî·¢õ‹É&õî@NH’ºHH¹è¼‡ÎWz—ä-KÞ±¨ÐGY¡™Ô5¡Í }LEµŽ€ m¶­¡2JsçÙ€¢ ÓRlðŒxZÖ±6V€–í„V¦¦‹kæ †=j* MÚńʼÔ{ÆD'¨ûƒPzY\¢è©K Sfv=t—騄õê¶í¤w§ž0û;WÃífׂ¸ŸÔ¹"þ¿pX0%ÐO´À·£’BŠÚ‡ + ÌhyÒ¢JQõ ý¥×…g•ï -ŸŸXÚèÞWø‹.yˆŸL”sæãë²HÇÉ]çG¯¬°üXz®LÂ|f•-…P¢!ÁdÐæ#ïd0XB;gZlùÌkY±âí;~~Õâ([^P?69jñ¿ªóó±¸b?´ÝbôJ^º¼æšŽ(1ÖÉ*Mjªòµq½ÑÉ š"‘ÂŒµþ +çõ]K)ûîΆٴšY}GËÁ]sŸè/ˆ%Tz€(Ï>ÞR8ÜßžèIÃÎoOó$Èßok^`kZòNà¡’µ)%bšƒÎDÉ6Ã×v7$T/fæEÆBJ`§AÚù¤${‘o¿Ï y¢i-O^I‹Q´jÓ6 ¯ê”t”¡„𳄽ÓbçÆvVÆ’æ$´D7¹¯ó£Õû~Âï·åyUdõùU7z<ý¢©Š‰'«™šÛZŠühUljÇè^ìQ¤Ïs‘²¼(X‚¼­&€Žmƒ£šà¥w ³ÕƒW,¬LbÙ’émÒ8Z©fï¬ùè97Aolf9̓Ê|íý“]¦áLøÑ³£svE‹ŸÙ¨z5~¹ÿ%jO[{+ε®@TÐ?zÂH'VÍÛ_ ¨iqÅJªØ¬öÖjêù§|]9Ì:"ß +ZÜù§Ö2ŠÞGCîØØ©ï]µù÷ŽxfI’8õqä»б×¾ð¼3 EŒ¥(úÍÆÖ±Ó(Ñ€²Åƒ2ò¤ò€u¥hLO×J‘`„D­o}iûQ‡ý#ûÌB˜˜êüÿ":ÿvÐæ}nó³­€óÔÄ‘9’ÎIþšmP(N"dÌl&ÇVN— „èôü zVs‰¸°Zd1Di”=n\z8ë`³ò'›©“Ô´khiÐàü<€Åé–=Îisk‘ëéÏ+N\ùµÜV°ãôÇÇ2Ôè[yHc¦Á™œ¿Þ-³‰–>t Q!üñgwªMZ?0蛵 9 PíE‚pK†r=™£ág ÔíãÒu¥­Ë>nM +KoVHÄ‚Óiz ŸRZÈähr÷œ»¸+’­N²¤ú½ekð’ŒE@‰àe—¬â‰IY„Y>¹î>à+ŒUÅ;‚á€lZêRìáåR¡#@ĪBÖyžqÌvÁílŽB–4°çÖ©ú+jÒ[l„Sfªm¬˜D¥^ÌD^ÏLÜ;Ç@ˆ»n3“á8Ó~­‚éTVûÅø£úó·ü ã•éßÿúå{WÑMÝðÎcƒã±ˆ}aÑZ1µ~ÓFˆßÿõ»Ö1]4)¶ðUgD]ÐZ” °¨J'žh2µŒ‡ù]Zz“ÐÍÜ÷„ÛáõO¹œ?5{"ª^ÿó»»MŸ²ÃSÞ3 \xCN,TŠÃ¶¾z”Ç-i¾ìœùа9pÙVJ­Ê(i!Eþ~8ÑÇ ­†ó²?èW'¤©Ú¼¡óm»< ¸‰U­ø6¹o`Yx8Ê‹e§tP,M¹FÇè‹M9hÑQØ<¼lIȃEÁ(ðÕY?è½[ƒÁûcqÆ(•Ríý¨€›—Ü«*=BÀ³}ðáWÓÀ¬Pã£m’ÐI1þ&=¡…YÛ¶³ +bÉ* õ²ä¨æëj&%JnL„ø€…Å5]jŠ—@)“V3·ÄÄÉûyæðe/}ã—³~:xî~1< 1XGܺqF[åI^¹ïõóµjÊ—~b Ë2Ϭ·³?ì¬sº¨¸XÁ¸M åÎ÷¶#}V¢ø¦m"КêßY° +ÕÝ|œö±Ç´#±&017^1{V^j„ —h^ž2îÞ!&^’Ó4L¢.²Nó+LÙU;ÛØÉ®æ˜4Á—e¦PœVAö|G„‚‡_w ȸ¥Ø­5œUO›ªÔ$2SÓwG[žÚŃ™ª\';î®¶LÈP*…P+Öܧ„Äçg¾v]71î-U#»"‚yù[UPùˤ`ŒYsôÏãÃË1#Íw|dÊäâN3‚!ƒD*$æ Ρé–ò(FÉT,F½9]Ũ`Å8Y·´r£F½\%&¼®æ'*ƇånMœ¶b|¼ã‚Ò]ŒX ÑÂÏÍlf¥¬ˆT‰¾•Ñ–b‘ÿÈšT„¶‘}Ê7 ·r$ð©Õïeñg-Uukß>Éæÿ|ûöáíyrùò[ ¥põ¸–}·úªk‹j¼¼y#ã¶]%¸6µ-F1 +¹P6–20…–Þ(û + Gd¤é¾¹mU§w9`ãQEâ*,i²°,ÝÆJb&'Èé=q·ŠD8¥Ðfuj,ó¨?>,6ôeZc @±Õ4W^¬G°Q!ï<#Ü G7cKô3ýî¦9#žš´{²ŸuÌŒé´0¯e Ø-‚,E[RgR²Ž&ò„’ö¾Gð¡dȗ”x% v}?ÓYYÒ\i·¸<ìdÈ^'†¸œ››rjð°:;„Wü‡ó*ɱìÆWÉ4kÃ0à…at¢7ù7}ÿ…ƒ£¨÷³l¸WU?’’8ƒs÷ÿ#Ãâ« ºh‹\))š­+s·¥æ8D'VCö·¼ÕI+½ž¶Œ“Ý6»Ú‹¥‡†Å׎”¨+t%Â< +(" KÅ“ˆÄ”£i˜“Yš âîcw›‚2~{Ký†?§¤¼±9És`=‚˜¶mä¸ÓÞ‘‰p:Ña2é ë\Ü„¥Z™šþ¼‹æ:k°”8vÔâfwüMeoAE:*/!LÒOØ( ¡a+i“h†E­T5;›Nr>¼˜¥€ˆ7_Ë>ªþ}…lŒ¶šýš2S9@Ús„Š6³°I8àJCiŠ›PÉìíµp'òùY¾F‘—¥§¯Ñ“TÒ‹rf7»¾½Ž¥ÞJ¶DtíÏëõ:»!z5ô~gq‰hs"ÿdg3Žf}OËç-’6Á}‹ä­q£[sXôïä·äA{³ì*ëý¼—é’j9–§$1Ït3{ÕKÿ¬ÝSR‘ËRŽ –û3OnQ;·E<±9«„ù}6g˜°S¥ ;Ô¤~ºÊtTv·\‡·â$ÉE@ÙæP¡rõm4ܧè¬x=Ðó·Öо¯ã•ËeDV‡Oa£óµCçš Wì)1Œ¬ÜýÉH 5LMÌ9‚Q@ Éé=`ÇnSÒ¹$à±çî¼µ“v.øwéŸO®-ÕßQ”FPyY ;È")6S"‰ö–}Ñ^Ih$ÌAeGÛ¶€öddx,‹ÒSôÉÚ‡ÉÚÕa#Rvš}(†Zâ£cQúðKù)7™–øf$Ū‹0mÏÊƒÃæ5&pp´:£‚=r­E&;'£ Š}yL26NÐð…m˜öÚÇ5*¾ËÄr8FJŒB~pÔ_¤\­®N8!ÐÊ#îÕûˆ”eª&´u™@Hjø|:wSiT µ:Wµ| g·›Qi_Z2gãímÁ8/µÄaªkeÍëŸì¤{ˆU‚ú÷˜N Po¬âCü1HFç„­vÉÁ(7ëÇÖÀûgÖÏk…¦dïújM+I*bÑWÀôTîÆS@5{ÔE¡,Š$á*œ£!™È +N™=ÒÌ'áO–eØ2%´ +^–`1¾¹;\X•šÞ§É|\r<ËÃ-d3‹\ɬ:LÍËÂÐÖy„Ä&˜’!•¨i…5¬/.¯ƒVý^¶Q´-qÓ¤o\mªM@Ú”@¥Ôa·$Ì#®øáUw˜—þFm*Á}:";Æëi8§–<ŽÎ‡‰5lø,™¨5+ÅZvqi`užç(qíÛ"±—Yú¼]¤$¥(Ž%Åš©®PÎçôƒÙ½S'ëZIYãÿ s9†:æ×_~ûÃW³€p¤­R:·Òß_ÑõÐÏÝÈè IK$Î[µLˆD•¶Üü:?šô_3•…c¹ºiËqMåw)¾ºËrr|Bý»âÕ“!ë½Á·*€Ós´YÚ²ÁFPjwÀE±FÞ®¡‹Z{™Ö©+ãuˆ†\»… L³y…ÙRªßd*„%ËFB¾ù +ßòU€Zž¥^]m8Ÿ“j»N¡Hôþ@NgÊ]•v®ÍˆˆBH:ë&Š2£П™åV0õxsF:OkÂŽ/O+9UÕhé§»­«Jè˜Zžrî)’ªVê}PÓ¹Ý>¤µÿuÆEù‘h€iŒã D@¶‘Nž®h®Æœùú;2] p¯ÛLL¤m…£†àÄŒBQ`5ܲ·ùfµ*“…£aß¶/$>6Ú(Ò©\¶³£¦ê÷“÷…Ê$`_$~ Ä#pp?#N²k¬'([lBy“"* oﳪ›Ç9Ù‘x²z»¡²õ†É—(ƒ¹Toèç6—´—eâ¶VŸÐ†¸ôÊÝ?¾Þñox@epʽà°Jë]wJêYp +¥G÷¡#ãÅ`kI@#ñgœp%‘ô™ä1Z— ßO2Éè§0Êå‘#°ú¾p-tn»íÛÆädô#a«0uÖ‹¡µøÖ=,U‰£hEÅ_èÔ¼ÇmDšÆ.gÜ©§é‡Ò&T¢t°N vÖ@m—ôEÛBà‚÷-øPÆõÏÛ]¾9tuiURr©Ë;¶ªhv)ïÆY¨DùK +@! €•%¨€4¾ë2‰`ýt—ó)[m’4^Ÿr]€˜ís((òàØ]ADkÎEÈÜ* €t¦ºF4[ B¿6¦V½/¢Ìì߈•í.…f³€›ÕçWLËGÚQ`87K Ì峪NºN¯$Þã Q/\;×KþM¨•¯¢3íãì¢íu%Å-Oò,:WŠ /PRx Zs¼£Œ ÎZ î B¤$3‰2NÎ+`n7œþÌÀ£)t1Q$2Ì4Ãl¦¦&j%9W¦lYZ²"ö^®([/M#Éü +ôM15ë¹h7ìc‰ åø¹Š˜«ÛwT¶¬Ü?uœp…Qê÷9÷~SZúuBô8x*6­øöŠëÔéz²ðœ„Ðz¼ç ML°¬=uk +’äaÍUâPacâîbôèàBLëdµ”u–¾/Ťáa¥öw°YeœÏm™½jÃ|J3ý 'ûÍ1ÉEAåÈÇRM&žrm¹HÒ~ 7(—,äRP-úñë¶ë*ªÕç ˆê‹î;Å×A¥¦ÌUep ëPIY`K‡•ÖéJ¥©å^Í9‡3U¤D޽ì<8Ñ#&úªÏ³RñÅ;bzI½Ä×ü›H±_a,$ÓÄîÜDô•·Œ)ôøÄT#>Ô"±$BÙsß[9×D šÁFcõ3˜=º„ÝÞùò½í¸'R(5¸?@p|Ýà’Äloì©«_̪ y:Ví |æpº‹¹zÅW¼ã®šçG›úó–Ì*8´a²¸dFþ!ÝÍ%.Kn¼àH6š38›@ÍØX[<,•R£OV¯@²kf \em‘j!£s—Ó,iftÝp‘=_ÑI êÊ—´-ßoqLšôC*õ²Ø\©MEÛ*y¾Îy›e‘YäÙVÞ“ á¤ér¹ó´ÚªÇ¾¾‹ú.1œÐü‘?Йnù¿ÿ"¿FÕW†M“·ÁÓ–µóÆÕÁÅ~‹‹É£ÂñË F–êõ‡ð­»´ö{ñˆ²=‡j„Ä…­I]5/w>²’öéMû“ 9&ÝP5»‚ý‘ưƒ&lUìŽ?_-öqí%$âËm…Gx‘¬ºúŽÚ³ßo µ,^µ¾ìIœä½hP ]iÕƒ€˜•r{L¼ótâ;ѬÐB•M!‘’Û0«Ýåµe(ç:äµmLïÏcÒQre2éP iJºõ]éLº»ÌÒæJfÖ¾’‰ÿ„`i:³jª+ÑÒ}zªpv;–šRÒÜýi‰×¤u§4±f¸šxx^é´p] …]›Ï„šN=¦€=¡¦ +OJJ߯<©çÎϤâ^J4ŸroÎx¯à` ^uÁ,y;àT`‹Ä…H¯†Ì ÊxÒvÙžA©@sŸ^–8jBDÀU‡fE˜ýòWHð¹o½ °9:£Í#‰ƒ;?ëA§@­%Î4(*ÖöÑ¿&Ð#˜õ; \¸N4ô`RýýÏCªôÑiFÜd”Cšë’B *'ŒoåªÜœ¼.”MBNÒˆj—ôÛF®vùʦ)'y`¡Á éÙE…K ÊîÇ'DIn)SФæ>É”’¬ÒJ»-Wò´ê4«^X¡*Üê„Éš™ìH!Ÿ%é%ÔÛÙdZ]·#YZèVÙ–З?_µîÒêK“îFs5é´…©·ªú ̯#o}ÅŸÁ_ÂÅ(7Ô³ÞÏV<)aùbh«¿”v¨sòìÏŠ¢6›Çz®ÙW¼ß?ƒÚ"1ìs¡)-<ƒEïû¥à ‡2)Q^%9vÝ0ð*¹€ ÍÃ2HYFúýï¿Mqõ¾c$»þÕ|”Ä¡X¼ÿ©’uq)AûÈ.àgª J¶÷ôíŸûZjäNáz·_²¿ªn~·~-Zš¥Ñ¡S’VTb­Nã")‚B‹L*·b(Ý”`ÙiSqKõÙU¡G~¸mÂ@¶â'V}lV8–œ+“›¨ +¯yèÔ¢Tæö)"ôöe·Ë*^= Êl×—]Qñ +ð¨€ÂòUOU€XŒæäôZÛ’ûfØ|æÞ±×)°æ êZòCÙ:)Cø;o®m‘­ËÓkÿ.ßÛê}ÂÑ-´`ÙËhG",S…ARœ€J~êý2CéŠÞù°¬e1¨?3sNóØ8XÇiM¹_ò‘‰’hó*•N”Afö/Ád™usØh»‡%,T”q‹ËÃlªxsw'*~ìtÝìw£Í6¿¿ÂÄôÿ Æ®ë’{E9¶çÃHáÊ\´ô ÇЄZ8jü­jleÄ™†Õ÷+^¿€NäÖèŠìêQ‚ÄäîJR1,giw@bKá&“¸mqÄ-"›8ÄÍÕöT–½ì¦ŽÕËãÔQNͼæóåÕUêe™£Oúx7že©HlWÂ’k@ØfeÅ-åÚ{ew ÞPzE™åhm-ÔEJRÉX“|šz%×°™x-#4ù¨å÷|ŸL¡óQ§R˜ÑrÄÅãd¬IÍŽ +Na8c2°*C­kM°{«I%jÎË?‚B%,®^§ubð\Õ×ÝžFÜÎwLO8‘ÞêÚªçÇKW&ÂóˆWÞ:šOýýËhΛhã—L_0ogÓůf'ò?Ú^H¦dGÈ'YVŽ ÿÄõl+n,0|“©ô¼† +`Í&þ^çNÕFµ¼”žwPnViî?-"%ô½á6¥ú‡IS}Š‚Š8d:ÒsaÚÀR¨/÷î#¨T%›ëÁ-®ë»ciG4”³ƒƒÙ +õÆ…FH±o#˜š +,zr›…usp«Ù¶JÐÜ6î‹Þ†ì¸@®qn“9ÛWNÍ_¬±±&V½zCt•éåב™:ñËáKÚ9ãþãóñ‚]UOyèè­ùd€£ÍG:Ž¥§íÄ$¦1Yó½ +õÂe´hÒÕx%”ÑÂÂ0ÚÓrhùÅ‚; Fúø;ÀÊ…~¦>Ø–[½¨zï2J{h¡LÐWLßð¯uÀŸ4t×É›—˜úÏïͺ¨ÐtƒWA_}dfAb‘Úµ¬ª®‰üàãÁÑ¡ ѲÛÓ¤aZ_Û +D ³Êû"éVãK¢Û¿{9M%£3Q¼#é\\x—¤vr݃Ð:m³ò²¢ãÀ)c(%I%†U•8£º'HúÉ ²ÿ0{DgC·E?RÁ¥÷ºÎ0DOK@v‹'§Ëœ¯è[_ý~ëVˆHÅEð_M/iP”u¥®ºyŒ< cïNt·v;«z•$ø;­C´€Ö¸h«‚­U]1ÂBà¨Ùé‡К‡HÔ‚<ò¤ÊÙèd³ÜŒVÎEÑÕ! +½b8E†µßÂ,‹P©Q¨h^ ŽÁfPZYÐÌ±î ˆÈ¹ƒzU_[û +›‰ЬÆØ¦‚­mb^K,LtŸòØ«ù“©(« þ¥ƒ}­(º]»²¹HZ—+ë€j«R òâ*~|¼´´¼˜µÿ›<¦–þn5h“i‹ª´QH6ñâ†Ëhi4åIJ Δ$Pó +vX˜ÜŽým—¶t®ÜàQ]Ff+]ÔF-ä/P Èv6}”HZaàÝu÷’mK>—Ö(¶ +Ø9A–}{Ìš.-äÐj ¬~´‚£½–C#¼lRWã 3w–{Ï€€ÂJ‘·Â½_ q$¾¶sd¥“QT[D®io»l˜öÃåòŸvìAâ±îíyއܟaj/‰¿|ƒ¹ì œtè‡p½¿ãúÔ6¡=ñÙ$“ü¥êt >ùõÛ_¿oû›Ð²‡þã<9(‹aRõü°U0…ì»×ìLa‡à €ÑÁä¸= Ùx¾ð PH +Çx(Φ`m:ë.P €6Wü—zUí +†Azú#Vîþq·È4~ÃT‹¾¤ùô[’JÎÏè8CAšrÝ>:Va³ñ'¾”ò¸Þí`õÕ•@/ƒšmj~G_2(úù~ÏYÒ.K“çÁ£Lçë\Su”†5ÏRu¨¦`G¼c5µðN¦õˆX~‘X9¸2§-T˜©“+ü+Zíµ¥E|è.|@2Æ ÐE°Åì¢B¡0Ï)d¼´Ûºª€èFj0œ oZ˜õÖ~•§çÅsÅeð•Ìâ瀹µÎÿé̤ü r=ÒÕûÖŠ’âØ·€dXÿLœÂ<ãÚ¹v¾ÝÙKÆ_çÇÔÏ(¬‚È PgÓùѾS¯Åœù¯è-±~bC¤7Pß3€ÊVJ(þ«''—„žáplÁßÕÖË&¡^›~ƒq4‰ßô`Éô‹©£/È„PfMƶõ€"úíûɸ@Ò°’´QãYÆ/œ¤lÇâ-FÜplj¤àðù©u\ø8©hP>í H&¡Ò„íAºƒ°%ÛN:eÌrtÌÔh9eD±QTúEšæ¸Oè¹æûÅUöRÉ ?퓉Ò×è{nm˜Nm C^>Q6?C|åYn+Ñ—/;ñ(“ÛµFX쵃m²=Õƒòá/µdfìè~ÐÂ:äZšqËÏ6ñâyÜ"{âïšR@ÇáûkQ*›Ž \öã_6ºr2ÉÌ@=«læM-§ÍÜÿbDÆaGÕä„ÊÀRTü皘ÖEÊ ¡Uz5«P%HktѶÅUlNsI³Ø,µ©ÿ©r¶ ¼Ò _”|J¬‰êPK¯Q …Û”¯Ù³£j›L†]^éù2-u*èNÙø¹B÷È:wÜä²õOX]óܦnî®y š=+:ìè +¾ÊmØž.í‚ÓÊ €ì19AÛZ‰y3"´e×›”‰%¨T»–o\„zu‡2 ~~+ »÷7[4Œ{ðJ GU¯„%OšùÔ(bFÛ‰,¥¥y*AçÐ3î|ÜØP¡`¹ÓúJ²«¾®7µ¯½9S¼¢ým$h +91q¶jŠóГÏC¾çu*Wê’B¸¬ü5>]Þ^rcçz?›Šƒ¦´Î""–¹úP$ ÝØŸeæÅèÔzÁÂ0,t_Ɉ»5Å ùø5˜F³~Ý©>,« +ëÛg¥*Vt˜aǵ+‚Ë©Å2t—”aÛuôrsx +Qüà +^Š"á=Y’5Û‰WðeiÄÌ.1™øEþõ9|)+ Ú«D¤š¼–·Å®ô¢±ÛZ}K?sñD¥>®{W¢x¶¡øªž E¼šÀ±7TÎKÚ«æùé#q‡ß’ÓéÁ2kÔ;÷ùp>”$Ià'IÕ‰!çËÕã0]c–ìßUÁøÄ q>§Ìn©Š|h›E­-èMyˆ‡l;CvóžÔ»Ž¶WXÀðÍÎÅ«Ê GܲqÛrïºo-BâUäÛ®‹ÔYBNވ澕‰´å볺u*ës9Yñ‚™|e1@à¶EUTÃÃ.ç7D.}úRæ§Î°§ÑN'½ëïE0|Ž…ppsô®ÊB¶¿ö?xñ 3ùDzî4ŠeUåtï`<_}ÞЮzÏæƒ±3-¶§·ô³GX§Ô³zÝ„qÉKég…»^òow@'|aŸK%¢øaƒfz×úýã·oß½€Í]–ÉDI³BŸÂÄõ‰-³PsáfÒàèGCˆ^8u„Ú®pû‡úO'> +1Øòðœì ÝPÆ·¼›¦-t\>t-ˆþãòµê˜^Ó´‘>cÀZÐÅnYµ¥ƒÇúµ¥·“ñ‚u^ÓñÀî(„7)* Û V&´ësê×ADCny®¤YÄÅËjÛçK›j¤¨òI +¹êÎAAGWe¢V²Ëºî¼âÇ9èg?tjJÁäÊÎoM’>ÈÏBM°ÌSSÒ&´ +êrR˜Ïhmmë +5A.R«v5ë-}Ç›&™v’u—Bú‡ðjɱ$·{Ÿ¢/àBê¯\pÃÀÀhL›zßáàŸÊ×3½«¥¤HŠ uKŒŠ¹l ¨˜®ïJè²¾/MQ·Íùd’Z«¿Q *e—9H*)–g…­­ûúÇAv6rÿsp{çÿí•ìŽ[%Ðr§:·XØÚ„ƒu6 °ßCG—Ε;ô  !ƒð<·¦YÜ1§dÈÍ‹¤©Céa€³/Ÿ· +¢ +×ÔáêŸSÇ—‹š +e—¸L'jo÷‰œ?€:œ/æùЦeµ<ÌQzÄ\QE+àXêb«—’ªŸ¼RÉB ÔõŒðR¦ØGD¨.^ÄG ú и"‘‹Ópu‹ï'9ûä¹½X4ú›É„—ý2=¤¨ú¿w—÷:82B—ÍSer}·¹C'9Ç„–¹üdç +ƒÒ[Åá#B»- )€EÙ–œy¨Sż`×-^Qr²GòÄÐ)â8ó:7ЛðÌÆ¥¯ÇÙ°Á2la‰Ä+ºªåýàB‹Y(´VnÆF×§ë©U.GÍÕ@)¨iÕ|2/ò”KÐ×M*e t©Ø'Ô hÑš´–IH4®WÉ ÒËÏΕq¿ÙJ«çýCù÷x^B5'>Êæ¹K_£¼L§›R)&¯RÑÒD÷õ':çÛó½ËxCA\úV©EH²H/¬ÛdÀ_õôX*½sW_ÖÕ´pŸ·âgç¡{Ü Œ¤Íßì,ŽLL"v†.“=yÁÍžO­˜ôn W•½üÒI»¥;"Î¥¢Hahñ‰ÒËç¢LÃâPÑyÞ=0+Œ1ÂËADwÆsÐa4g'Èy gsÆß߆;r–ºƒcìgªšYy‘}bF‹©'qõ½L"KóÒ&M]Bv§¡Î1îAbsô —q0‰·à÷î)¹ö;u5 YßXh[olô*«ŒÅåýÜÖ1zÚܺÙ÷ïÄ”14–îv¯h°rXHÌ’nËC.<ËãQ”ùû§c o¼´;‹ÅèEfƒÅ~I-N…´0Ü&¿ÿh®šÖÆ=6Ò7/™›&@LgåhTUF€$4€hxù´Û=]/¨=L›f q€dµráô;iQ«Ê±O†)ê‹üe‚A⚇ž¡]€·M•3Ø=YË<Îmûx{©Aé‚ÕüZ…˜AöÙÜâͺà¾"UÒ¯H•Ö×Ï’/ õe‚D·H‰¹ë¯ z/Ñ£œ©¿HË­øz¸ùRªÙÇ¡jºŒmŽë6Ù7¦`ñ?eR¶#¢TîñLL€)Ù…®ó£Ðœå. ç»5…._òC»z9NNÝ"›S‡áq»É€£hB^’}Ï ¤¤Å‡©sâ +tÎxsþÛæEnKù"¼«¯L™]ã é¶õ©(›mÿš6:÷ð‰4~¯¾]l¶h#Z/].-ˆ6/å‚$¤%/sšVÀÚ¼U;gèq’<ÈÖÀ¨Qº5-›3F =Jœ«&Ôê¶MGˆCy-èNáAK›‰ë8Wtç {Ûb(:“h7,qÒòt0ªf)XÔí­¨ºSwm-Þo(Š}dãÙOàVdpßñ—§Œt­°¨q„ç."x18¸Mp«ŸáV…š/G—qQK‹y/_ pÕž/fèx ´@~’è(—y‚\æ"SDlD+U¡ºûñ¾áJ€Ÿ©ç(]+Ü»óEféÖ,PQ?çPSÖ¾˜—&ÓG$@òœRbƒˆ#þ¡'Š +P)œAfm&þ­L¯k$¦£².úvÍpd +¦(ï'DÛÀñ©íMt‰MbZOÍey +%)©“xôš‹ˆƒXçÏßûÃig˜¡¦kß+ƒü:~gýý™Æô** +D2lb'ƒLZhûðׯ4£ýR™ûmîãŠòQ¦ú6¦‘"þO—W÷:)ÀlìB=¼Ýpat‚¤|¤X·ð\*ÓûK´2ÀR·ƒJeÙ6p4guÎY^ˆ2{%$2ÝLá–X²à_áä]ÅTð¥ê>âÒ- #› òøËCÀ/g¿ºÔ‹6lZñ°—f"Þ#R!=¯A½:f<¢ýN ['¸¬Â"︠òS ¿´¤ý΂ÝÎUzá¹ò´5Ö…÷(¾ÂÀ¸IÊ·ò 9cèÿý‹a]h ᯉcUÙ2®Ë²¾I6þü.¼}ž-Yq?ÚÚ0LÅaÞZš +k‚õ°›Ø©Ét2I_‘5é%'‰³ªŸ‚¥Û}2Õ,,œ‡#HÍ!{OÑP“ +ækÔ"¤m™þy£A#'¡ÿ›ÔD#M¤ÝSv %Ä ßo·TÝ5éó¾”áÛ™¦Êv½¬´~ù§ÂHö}…½ÊS`_ÓAµÖß[ÓM¬E¹¹¯0HòêO;»±|H‰å€™  Pàãcú ÐÅ¡Û|¾z×'åš½Pq¨Öë›qü?­XñŸ1u„P¿ðí\®üø—×+}O•:h²ÒØ:Û^\yf»Y‡_iëJg¸Áz7Еñfzq$3 YuDTÇ4 tñÂ6²ùÈí4ÚÉ +&N¡™*Æ¢›î[À¸ÒÁpî3»W”‘_9:¿2(åbŸƒÚ`•ÄÑŽR}–ÜC~ƒ:h²šyŽÇ%è2$|¼J—¡°*£‘·.@3»Ðqp¨zÜD¤=¿©:]·w¯LÆâ^«¥ÍH@LW×VšÆhÙ5¤Ì ÐÎE?fzGKödáQ +¨ùà0ö „¿œÉòåWŸ·g ¥¹ÿ[ßÏtƒ7ór +…ñoVh­±âk,“g…É™\s´;D~bwLŸ±‰æ?–};քºô°÷j¾v™b·«ÆJ?ý$;Ô}œW%¯e¨5e+ØÚ< OÞÅŠ·¬©o˜µÎZ°ædyR,Ô +ùóÚ]û"¸hûA5ØÏ#q滩ññ~žò½`ß]Ëâȉ¢[H•Ý/êºZD׺0ðZfœ×bôÑ·…YòãêÚZµZa)%鱊‡mA9Ǩø£5Ï—°€hÏ¬Ì €-ÛÊ·<4Š+ܦ¦pf¸Tr:jÚ +Qëç»Ûj\¶^¯à‹{«DˆBË)y‰•ßÅ—k´MˆÒåAÊ÷Wì+bbÏÙ< +~_«\À ëUÜVè¡Qê5ªózÝí$µ«â4À-ËJ‚¢ôñº4†4¶€G94@4ÒšàòÙ› ZócÊT5~Ô?°¦<|¶(+ÁÄJÍ© +³œ¢ãƒ1uÜ}šwáBý+ïÆÔ”4¸N:GW=µaob©ôÆTO­™ýõ\š‡4ÝrJ[¢F'8áåC…‚‡4OŽdôÙuÆÈøë1†ngŒuÈǃ0aÒ¥Âdàƒ0Y8.Ù#‡. ÿô¼l•£7nÄÆÚ¾v[\õôsUUW¡E×`\ã+A@òpæU›…®,§*\z©Y¹à°²¢ý5™ÚÊ«º\µ2XÛ_åZé(cV+¥òázE«*©x€ý³+Q‚9MsUJúì-u7+<ã‚[cjÔ?ÿúõÿùÊBT0iùŸoþ)…`i°€É¨Z¤S/^ÂßÀ p\®(ÀÔ )øy˜9}•i´Å>8ºRFÕ hïò0!ã¤[ÉA-b¬‰™õ ñP÷3¤[,¢Š­~hD[HCÆ·1€?mÈS»}(úk_žØ1pfI ¯™|§Á3Å­äVU}óf-\UAΣ'Ù€+J®íµÌ2ж©¿rk¡-Ô^{¦Ì³ÑE.¡’/r 0Ïà ~D–Àoq¼AA±ÁµtK9(~Ó/wÚ…40á«è0ßÉŽÉNÞ2§"æÚMääÁ.ŨÈ!ÿ ³&=4ÿ3#Y#·¿ªÒ_~ûï/ÖÝÅÝ‹ÿûíH¦á¦†Ú3ïuƒø[– Ý ÝÁ†¢…mÛ i +€ÃÎJ€R±¹j[{…¹D#ð¡qŸ³JÞ˜õ‰}Þ[î†yûúðŸÓ0¥8„D€èüØZ|A•cA´aûŒ+ÿÍà\ø + üªÝ±>eB [EÀdìs2,KõöÔ•<ßr6_޾®ó%¾Û¬€Ã#КØ]}$žÏC~ýX nP¬²œ†g¨,@K|L‚ú ÖÍéÊF® kš­ËzCFWÌ´a—BÔÛúÐ{≶>œÁöëv‹:?w í£&\24€j åï‡p ½Ü‘X$Ï(|×X¦Ãé²ðÛïÆI™_Uœ&˜“r7 È °j˜õõT>CèúJk16@W‡bµ}ˆÉä»U.úÈdž5tÄ$,AÛw4GM'jj*5¤Ç“ù‹ÞpÊ5$ +êÏøœž®õôG¶» ËFg BË–+À&GLÿ*Æ:I³ÐÀõ6LÏûE×í±psbiÝ¡d!/€¨…*öCNÆÎCcf´æ—~ë+›ÜÃûÜ?õ.‹õ7ÌØZ1Ò² èèXú% õ¾Øm¹;6¶rÇc×½©)ÄÓ°v066%-ß}}R«M @{:жõ%ÅMY«]ÏqKª܋wdsïëxB'Jò% +a$oïi%ƒI0G°‚n¬êÖK'‡TIŸ\Z Gd[¾1:ôAë^hZqe¥ÿXûþd½›@£‡®ÀN:ªvïe:‘6ÜQEYôÐeLÐ~’"€Â•ý0ýØ­Û@$ SIM%"‚£*9Ÿ¤ú&¢Wy@ޤ›Pè^âA +p:ÑÄ× îU/•¸qæ²pø·M7Àåß6%çt 8 lÊt,ŠlA@f •Br&é.@+qP¢Ñh>.'wïcŸÐJÄ/ðXóMèg!¯;úyYž4·K'°H†”WöñmñqÄ#¦Ú4^ü¿¾”/Æxœ½œô†'90¼²‚PWŠLʪ…årà‚Ž]ß¹+˜ Í¢3„JùçZ|aÁðµ2)wDmÞ 6f·³›ÒÇIˆµ¢ ‰r*yf V‡}Ž¥=˜•7â!, mñ¬{à0ZG ÖÛ¤âžú 6»¤T^¦¸M8˜¦£fW”´q w°øâ&0·“Ë’~ ·$T.îï7ƒEœ¦VÛ~´Ñ6iO§ÇÑ:)ýË6•[}¸\± &ŸvÆÈÒY®‘qCß&ß,€SZäŒP ·HvÚ)¬Ÿª[Zj ±q‡R«¢#GìãásŒr9ï¾Â•JYñtôäÍpbUyB”Uùú»è‹}4$$Þî0¼,ë*Bš½åRÔ}Ý +¦é–û3#èk^-Wîl\9æ1qj•~›s£‡Î1ÄŕŸ¡¢îøÎó`r"]m®#†»@xÉ\ïú¼óZ½JüÃ4þ˜ïú˜SÿÍc¦T3`plÿØt+¡vß2'ÀÁ;©Út°rË”‹Eg"—9°Ë1P¬<´½Ä;@z“Дlõ‘$3æ@×|±9ó%z§óÅCàÃ% íÿ”WI’É ü +? Zdìy¤L#3^d2QÒ+ºÎú¾kYMÎ̉,od¶p8¬ý¼K³„nv2ˆ}¯’-†oÜBáëL0f‰ÝrŽóžbf‰}§ÌBݹ´QœYRŠŒYhÌ’>f‰ÏÅ™Åë ¼Ò9‰Wh¡‡«üçÊR»D*[;Ñ +b¶Æ9´‚n²‡qˆÅ,±Ø™‰Z(ÌÔð@x´GbY693µLž±X–NºD,h➹–ËÄ*²Ð&;Û_«àéÕH)›&À£M()Ö&‡TP)yMN*o©PŸq ZöÂxWÄõoÛ½e† på~Ô•6Å/‹o²²…/Fʹ=ï5Ъø†Ü(ʱ¼¶´ô¾¡èÑÂ+  ¢ìϨUõ¿JTnD€Óf²HT ¾œù<××݃ÍuØà…ÁWWÒjeí®• õßÂÓá±ÛÓÎfL:Ñ&rºÙFTòѦۉÃÍb¸~`ÌŠ_óçNæ<Ÿbd-{eÎD-eæÈÞì™GäM”Àb‡«jµ¡7­æí©åÍòô³ù)B`éÎ*ä‘é3iœø 2žŠÔ³ŒÅtŸìLÆÓ‰;Ëx½5Šxä®ÎvÇI È9Õe¼×ö=ëGÃèO¡ÀœZ !Œa–9üŠ 'Ùtd0¡¤Ú€¬÷¼£ìÖjS;=ô”Ù[qöðç<Ón…ôTHWã˜>-]Åú‹Am:º}I µc!J¬Ënj§AÍ. èQsÓ§÷î L + ËBÈ­×úÚ@ Aúe¹e»8ÅwÕn"On†º)¹ãq# ÍsbÃkJ}|½·¤"ù!š¡W#)#M +óѤ¦1˜DÒû1XÛ–†z2ÒuL¤¤$Љ)éºj¥”tˆìIJSE™ÒÒ¼?=)^LJµ.³¼¨+'+ ÊÆ¾íNoóÅÐUsTàÈùèŒÁu?SRX3Чöl•Ò š >aÜ[w +JˆQ$@iñ;½sä÷phYŽÊìù¼J“ýÜÛ”‡»Ñùç]q[)Ê™Uu`RÙÜ=ŸÁÑư»ø)ÂÏU+ž{ãêC»…ÂeoX÷ÿ«°:NwĨ°{CMâŦ›:4:Wñ¬Ö8tJ ö¸ˆÙõ¼ÈÁx‘Ÿ™A¼înY× ¦ext—溟¯^JK;hb!Æ ÄU÷¡ÕG0ÑÅjU¤qRUPÃÁ†(×åUù÷÷oVª8‡O牄a7ð¥œ-ŠâŸ#vê4MN úCÐíäabBŽñø¼“d¾#h¶k¯xê+‚?97Úú¹Ç­Ìo,YÚ´xXbY»¯ç©fì™R5±M%â–³nô$+jÊ‚ƒ!‰çÔ +ItÛ`ª]+PMòŸÛm_I–4L´ëèDTPu.‹ç#úxÀŸ÷\#GÖ bä¡Ûz×¥‰Ä{¹ +xRYP5K生;„Á.nºqE®q>A¿òS 8ÞOxèí„l£çœ«e•hòhéÛçÃr©ÒL¶Ú¾šàMVÓF—®xZßô=¡§4´®"írJñ¥.Ú?-:¯?Àq+X1¼º‚}Tª‡¼~¸Ÿš©uùA"{ö|²³ŽÝÆTmp‘wÅ$îôWZ¶ù¾;Wü¹/)fø„$ÍäƒÛíPÕS0ÅÂÀ*_Lsþź´|a=Îo‹–GˆÈÎ8²Ä ÛúÊà=W˜[éAò[õ5çÇ“/Z}ú´ÅRÐ ¦0aOM–!BÍ6!.e¨ÑÛ? ” }i»€£“$"ð6w«j7l\MU†Ë5£ª/÷Ew&¯¡Œç¶Ø>B¢ÍmÎ8hÎHbpg;Ç+ȱŸ$ Âs§ßÍž}C ‡¾;›M!=KÝYBBxM8=K=õ»…N¼ÓT $‘^€§Hª”³BѵÝâ.\ø¦áx*AËO×7öøx÷uî˜D m˜¤´ ¿ZÃêMJŸþ7)‹ô þö[±AÍñ]·úób.$¢ ¨¨Ä&à@/ÞêôuNv’ìPå>»6­ˆJ“wmWkÁn=­ç-íãtïÒŽÿ8þ-mœÇÔ&Ò¸f"Òq¦7ÓÅ(źž.^;S nöcjüî˜B÷2&û­(2R„eq‘¬%/æâz³"#Nƒ[xRø×9Õ¬ó=´›Ôp„þŽŸaèÒà456®1v6ž¹¹t]C,²è 8±¤l» ¡ç‰±~zs¬³{¸|7Ó8riìi²S*µÍÐ K·ùµXŽ%S;~]¼,E ËC< mÌ2/ÞìÉ/Ô’GGôþGÞÚL9kädL,x–gbÌ>Yb ‰twªtj†#eЪ¹¥ Y™™7qõÓÿúýÛ cHØÞH]ÿ:Ú¸TÛWC\Î(ó[ À|ûB®·s»9ýwZdoNÿM,wfJìÞg9}p•°¿A lB*ꔦ^ ›_%äÈ{ŽÔM;ór/%¸ ÒŽë¸,pr „˵&Ž¡‹´ U¦q,ˆÙD-ÆÍ˜¸fožå—ÈÀövñÀî8­2ofYñ3›ÁÆwR;éÀOÎzØé|9nˆ‚«-UèV$€ø£¾h=¦p€c*G$Ö´ïñ´;éã{*­v;yC‚ð©YÇÒ1¥…Öû7ÔIu*rÕRÍB$Ìýµã"Ù¬ûr_<´´è#3ÁÅýà'}÷²Í‹ÊŠŽUê)ýxúø-φ^ÿ"õR0À؉Zˆùøí—~ßÛJùò¿/­SߪšÑüÅ +Í¢5êC÷Ô¤šúí h‹n/ –òn¸ˆ²$ @¯Î¤‘Bx^U ÷éøØ?A¡–ò>ÔEaÔÎÕð]‚ +SŽíh ívî¹ÔmÞÍÐ3t…ƒ’t¿ÛJ’Ò¡›–Ýt3ñæ%‘æ#œ?— 0]NæÐ6ÌY§)ñ^¡c륔¥‚ÓRòh‹GÿuÜ^oo*â€Ç§Ä9 .2>\:f³³j£rm™2€öž*xÇ!4è6CÏÛ:_S¡D¦ŠÒBÅʽßÛéä&µSÑu)·“d(µÓ¥ò ·ÔE"÷èûÙO"ýÑL>ÓSÚiZçÚ;+âÉN,5®%:z°Ì³sl݃„‡£Ú¾åv fÕ’c_Ó -×»!äV7/AŠ’ ¶n½.[ÿªtR«a+„WsÜ¿Má÷\%­—WyoŒÊ]»Q®O:-p½ZŒyIµÿ3^åH–å6ÐïSôTÁ}q%c"duLY:œúŽîo(±|¿zb¼úYx$˜Ø5>7-7=ß¶xB«ç6.ÑøÐŒdQ‡lÑϋ֟>¦<’šÓkqµCЃ3™yóY×îWÀ0øÒ#²€Ö{d r±ßa´ÞÊ|º£?8 !¸ç„\½*>í÷È-ÈÊÊu[ÙšqŸh‹ÆVZ²ÖÓccJÛQzeóôaU7%¬eÜAÅcû{P¿¥ qÍÖˆÎ8Pä!#ˆå=6É;ÆAéØô6Š_Œ~3¶Á ÄØ;‰.ç2[³#Ï×[—jI³Žš ¶ó>ަ¦­M¯ö¬þŠ>Æd=ïñ¬&a·ß ‹H¥xb!]¯2Gp¿O•û‚Ux®œiÑ+#Ç·Hô7AQQ*;íµfó„JA¦®IÑÕIÅ’2õ„9¦’Fº Rù¥¥>@†3Ò{qdùE.Ñ},ÀËz³œgs*[-¡³gGiä‹J^¼‡> éßîma/úØ6Åô54§—rñÖ +h§êGê†Z@KkîºQ´Os Šh‘xXÎljxvZ‹·n·“[¶³ë1—ˆÑû‰ÖŸn¡Æz„æXÆ *=1Úô°ùMV<3è/23+ƒwffÍLúÿZó-QM½<. TþÓÖЭsîÒ”S'ÓÏFôø‡y™à'w +.XNrò×v/Ñï1Šýò#s,_ŒÖE™@håÛ¾~øIdt‡ŽáVgM{ ErÆDÈf ‡ØbOÙC±R‹Z¶a¤$NÝh™ý-~ïd\7¡¯ ¥ØòêCäålóÍŠó½@K«~wæ7*ÂB› ë]F˲&ºÇÃî¼r|¨r1ÞÛ>5i=­P8FgªF¢¥dïðï´}þ°¹D_#†Þ<×!¶¤»$Ô.»OT $Ò +€ŽlQ!ÆQ×dJëvº¢¥}´œÔGç!JËn©eê˜F"ù:…^yl"Ú´×Ú© m¨%n/f‰uŸ¤@‚Öõ­T=Ÿë½Lí¬èéΑ¿ê-@R?§r”n8=¬ž»j6”B'XS±³ò2Tª3ê¥Iâ1+ºF;lQG¥3‹øïÝPÔEì†~ÞIknˆ¹[–À¢Ó{0"¨d_ŒÌ! ”²ûËóÅfM8ûª5$÷Wç @DË]ªx¬ZõP²u±Óô"øŒ_A%­lü +–ë°kSuË´–8ØÏ-f -b5ÎÄÃ%4žR¦OnÌîþ¼¨ÀrÅ©÷ºPuVηõæÍ.ËܤÁÏ|~NÍ/½0ôën›.@¥C£Ýt{iÒã¬- º‘‹ÑÞêSÑÖŸº׳{Cóû#j¾þE"» +]H„²ø_Ó{ý{£E¬êZ¸tòg£’ä‘nd;€ìÓ‰ßè-«w´Éõ¨¹˜ôsz˜tW­ýã@Uíò›¤ ~¶íp€ªD›ÆØ¢eÐH~-ÕCÞÚÜãh‡ôärØÊ“ë^oŸALî¬ óºA¯¯®H… H«$s O€jÐÊJòÊòæX"Ýu6êiÉec¸51o*k‘ ١ê'Uô'ÔÑ~žYñ¨†~Ìñ²%L#š8>ú}%Û¨Kp^µ¾ýϪš/ÏÄuKä@Ua•ªv€µ©®:wÇ»—üü±7'|ph`½Z:ì _b†ßÂ…A.Hç¹TÎú•—ûf–²® t–¤C:bóù‚¯èÕ)¬kj½B¤þ“]Ò›šõÿ“¤GííA& ¶k¬ÛR ž?\ Ëq=irË—ÈöB éìûLÛº!}F0^ñfIPêç8ÿÐqqÞ¿9Ù~â3NÐ’üÝ’¡KMé*¬+ÜŸÎ¥9šh±ÉâIº¢@¾/µ,½;Xù¨ +‘>µL d"6kÑ2‰‚='â¾¢úÜêp‡ÔËñ‘¶Ýíïú“ŽxX0á I¯¼/„çÈ·àÖÔž{¹ïVç™zV¤C.Œ¬©W‘Ý·8H&T¸ò”}1اFÍjÞ›!`5¢;i8“3¯ûvÌ¿òðÐîÏÈ6mKx2d‹_BÍ Ð”ÉB®lJ;Þ©Ë££è­þ8ÄÜ–€…ƒq;q*#Í¢º³ò‘UHºUú(uþ¯þˆø)7ز²:kwúÎEŒß Ù÷m¦eº8€½vÿøáÿ×ñð@¿íc¨ã!Pjœàòb®ÖûíÿÒšd S?-Ë^Ë|Ì€4˜h {ëÖÖ[;Ÿª•wv@Å„h% ¤([’¹{Œô XešÔ%뉽ŸÔÈóZÇŒ[@£)XýâN@³ézhÁ,¯D~\fÎI<ÌçB¼¶ýŸñ*G²+¹>OÑ`Gí‹©C®búrø9º¾k¡Þï 8ãðgãU¡°$¬„.ßšj—Ç+þ<Tõø%ù8Fº¨D¿2,-s˜˜ßʃ㪃·Š±6kò¤¦@:i›•1ŸA£ÉݯØòñ×ï–ô¬–­¯ 8tÁUìj{33…PÓÜ*,nÀD_»ØÐé†ß6kÏY™õ¦^iOݶhsÞ&6ŽV8A!pÃtÝ`æ%êúØh„®aèÁóó» LéßëA²%ïïv–<3¨UCB¹Yºf9H +))Ã×Ô¶ƒ`éyV&?5QýÞg +?.X×}ýCÏŸ%ZÕ +Èž)ì.(Swœx+,Óh×­ +ýº!9O@Ê9NÓõ(mˆ!âÞ2Ã4Ùš_¿• ÅÝí2ÉPšÉt^>¡z¼ãŠ¿K¦ébÈÜêÉü«O梯șÁRBÔvmêJnM¥®t  j# ¿w´é [®},õD|28j‘T*?’¡N_³uü»­Óð:o[iLNLÜ +ÈC_ܪúÎ…$m}I2!P32|Û%ûj, CºÆï¤hª»ÎCb¹ýOÅJÌ¡§8ò¤Sƒþ¾õé*‰l$lbk“F‚…kJYí—w[·»:`w™ôš_„?žVT ñ,úqWLÓ¥E]ù¾ªT)Û Ôb±]÷Åàhì,,ÓIŒHIœ™÷IŒfBÀ[%X®ð9±^‘¶e_oÆKc¢ù€U£ì];“bµ•‚UŸ¥m€F†_1X[™ù^1Ç™Rca£ŸÓy”¶Óé3²¦+éæz%5©\¼º[aÞwM'¹WH`§µè¡‹çi€ÓQ±§Á0kê[Ê2¹úŽÚß?_k:¨µÀ…äB€DÂå7«§­Dþfžg¹;¢^‡¾lw¡@ämÑïiJ*[zé”±”‡:1àÌ® %…)«è8ìã¥Ö?‰‚ÔTÉÄ4 +°³š\(TYw*€SOÑèÅ]‘í`µM!Ká¤õæh·‰õÐu˜µu!a|^¦×P'hY'=¹/„E줼/KãEzbÑ}R!*RÞg‘x1ØcbÅrIƒ„k +—œón°Jžª‹6\‘JÃD°Þ[‚s;Ôã¶ £Ë2•ºé³·—ü:è7C= R¶Yœàb®Û7°¡«æQi*}Š^ØŒ5ä s5ý­FahuÇeBU¶v-@²tdJ+‰ì °ö¬`²µ@ôðuIUIK*ĈV—©Blõþ´¤K=sÐ}~w‘7?®[>Îõø¨Ð±óâ¼uÀž4Ø#èÈRvùØ?[—¦$ÛWÔTß…ì‹m±ÉlMYÇ;l×Òñ^„/ÎkÎà gVDjù2«Úoá8w˜ÉnÞÞv/ÿª»†wŽx-så/ÉZ”…–ÙFÕbÎòyãµé(®‹%›õ%É«V9 êUë7Í…€csdúZ–Ò®Ár‘HñpÆÉç#öhÆ^œÇÆ&ñËßq&ß×Ó²ҽB¬¼&ûIT˜°”ÒÌ–mW¢¼ïçÐ=vìü-AS¼¿$‚ÁGç©Æ{穲uåÍ㨰n¥sc l†V|~Ÿ#zNSµñDŽ$È%œw1@•z ’†¹>5B Wñ+íÊy¼ÖÓÈeñ9¬z! 7Q4ê!éf€k˜k ++Sýô„ +-Á²p‘RpÌ(‰¼Ÿ'@BJôÊ]¾ÐWè÷šY~½âCQFãIØe”û;Øi¤¦+m·§V•¦6 ³‹Ë ç©ý%c:±nVU'50À>ö0E<Ï9÷:×{Ý%Rñq†i;?Ùêû‡;0™° Å/‡aËîÁö;PÔ à¢ª·ax¼âÍ=æå ÿáð”á„d#oçÍù†¨òüñåȰÖXŸƒ Ë%v]eñ´u€(ŽS7—l$ùb0>NÈTèRÈéÜ¿ræ"’‡žÕ‚ÆÛ­l²Aõ‡{îZK¯è<-µ°ieÅ:W˜ÿõ •ô¼æ»$îm¤=ÎT)ÈäÔ'ôr©ïäF}€›óúyœü± gª¹›óÿ›)ˆüú¨:»d¢,Ï0ÿ1£É8Ž’“Â$°ø‹¨5ìžáV@³>µ<À•LìI:.;K—æq0ï[–‹”]2 ‰¤Â  +û®˜U—Y³²'°ÓØZš¾m‰Àö \vਠdô¼¿5_rDýËQ´4g ëÇŸ½_C—=xS OÀÒî¤E;Oââï¸kÅv#qpq‘¾äi<;À|ë´—,e`´1 " +¹$i4²Þ‹‡Y‚@zþ%WN$ä)³§SÄW躩¢LI¨!¡©Zx*¿â”Ÿ?µC£ÑRjÓfÕˆGÔr5úÂü:é§€µC(ŽÑÂ3a}¶Ãf!Ø™.t¾B‰ ÄɈ¾w'²/ƒšÊ…Wˆks q09)fJ|©.€BÇ8±EÄÔ/ê”ýå6÷{`ÓèzDŽ[¿ÛN±C‰RõÎíh’L­J£T+i©Öìäd’EG—\ŸB´A}ÛQ«ÅÓlÂÏ 0s‘rmá,уSG›‰‘_Cu¶¨”Y}D1&—úÑć€c·=u…µÜú,¦ÃåBÔ\?G¥-ÅÚö üá§[m‘ŸÚ¼b}}Ÿ–´—ƒ#FSÁŒH3’Û|D:}4E¿¹î´ a¨åÊ#6—~¤há&ÇŒô“\ž­+a¨a ´pÅÓ$¢´åž=f±¼iôÒG~ZÄ[¥>¾%¶<[* ¶`Á¶¶BoqäüÁÁCà?ÿþñÔÌG"ð'n®4Ð3•O{j˜X¿„ïÿþ'”4HLI•&’•©…KqNqfiÄeCåÒ.v‰ +œÖ*¯Y™×²-“à¨E"Ï/v0­ŸüßÏd½>þûñ# –ã¥uõbt4Cq½¨¨‰ +Ú‚îOLƒžE Ÿ¬@—!ËEÏ¡$ +,±cÑ3 rU(U†z׫–íÛ´äDnà­p§+;Á,ÉòÁÓR•)ÐÙ- Ü46C˜ÄÃ²Þ é5É-Š´nÈ6¨kĆÎg@uâ7XËb… fµ¸&ï{Ä¿²Ÿ(=9K¼óY2F"¡OPkö:8-«ê™)è†æ|Ð*IÍÆa€Îåî¨Îû,šÄ,®{IÃä-›ª:Hs/[Rä'öåñw4h}?í½ß/­ @ó ?J±š„7ž³b0ν1päÝÞG83|”̹5µ—:ÍêÙ ê黎ZþFÉzÓBg¡zýØÓËåT)ÀU ÜC³—ĸ˸——-NL· i3¹pO/Ro +B§•g5¤Fu™Yê[÷®<áßx«—¢1Ç&ô >@mßIHÀ&î»L<$ñ°¨)àír{‡¦oïøã(WÅøÙ¦yEº}ö;ÇÊræ‰yí^'¡b•PÙ¬ý$еž<ä&Öü†%>HÈ;G˜Ù¼Î Ízn }­Ž…þWçí5;]ÝérøÎ ;jÀ¿ß™Á BîÓ7¼pnŒÅ”î`îwR`QMrÂô7 j“àx9©Ü\=NåÄ¿\ó§P¸Õ Fö®T?ø741ÞÓ™:þï*I’ãF‚_ÑF†}9kN:©M¿`ýÿ:î±™MòD–72ðØ<š¬YñWuZ¬:8¼*\´ÜÕíyo@·³“nsÛÿÌ¢=ömŒá5i)Ô³F¨ pÕÎÕá0EvIäŽ +tžÌjqœrdSRÆrgR©vjšxX¼sN½â)-{ñº®dån‡ú2T¥Ú%¸Ò¥ˆ\Ez|ç_üݹ¿@)AŠûãóç@}èDT–O¨–úæÞsà•˜C8XèÚßÎ!zÑ·Àbw0 ÝBâæóæðï@’Å?M^O‘Ï9±5Jîþ›-wÚ¶R¢ÄÓ]˜" ÛYîSŽ@-—±-+‹|[¬žÏÉÏ rŽi$6ÙêÖTµÅ`ñÐèLÙN"Ïz¾}bùù<6ŸÆR­¾¯=àyÊÏ ]šnjcf®fKÎoö ´þªI[v…'D—›“êóÉF?üéƒV­e0­;ljwK±mýÇ}M,Ù&¶;¸AGÿþ_þÖÃ&2´q5#ÇY‹˜Î¯Um§üA ™ +VƒyÁÒäk‰-Ýõ&ˆ^Õ0?7ýÝ—=Ž$yõÙt¬5v `Ú€ ¿y«'_>7IœHudX²é‚“y©=PÅ?dš&„P‚Ÿ‘ÂqÏ_lL0¾%T[VÏ…hd¢€4a‹ˆd$ÝmˆX+œ²FñÕíïlߘ§¾”‘uU5(æº/q3c‚ Ô¡…•ë#ˆ•®;íù̱+:sX‰_Qœìá%[ßôEP^S†*;òd´ ’Ÿç¶äôíð¢ð¾5°ãÝ•È|NØ€l{,žš™˜ö­=¿Zëyrú±z’3®l¨ÍêX-L:b{<ˆsD +•õ©òãªOèÊ*l`»açg‰þU½SŸ¿ncôs0l±˜Þ@®“ì8ʧV/DF¡æ[X³Á?åícD:SU2KÛ]L¾+-°œ)+€Uý™]èu.K-ßÖ»aã]±EÙ¬†ìZÒöä A0ºˆ¡$Iòœ…X™âÚ)òã¢h˜¦zžÚ.ôS-â¼u®sãZný¤Y(¿²ÑS]xœÃêØ‹î'Ö‹îçíí2Ð(õìRÉF$FZy“[Moœ YU@¡ZF}T\R„½m0#nµGÀŸt›ýEZ2b«Ñ^äÁp§?ƒ—S{!S7®øª¹€ŒÀ7ÓÒùxu›JVr—JÚRsmÛM,¾ÿ~Eñ «’øû‡SXk.0‰•Nùûœ"ëÇRGPËUxªAštßTÄkãEïugÐ{cJðýe³ +Œ”V±ÖSô\žCŒ€@2yh£Å~²,¨èa"_Ìâçük¥â©¹Õà“žmgÄ¡Á_+ÿJ•;K}Üß)ôŸß[ïAÆ&s°YÍÒò¨GéÏœŸa Ì­%Ìó·nÇŸdå²Í5Ë;P“ʈï±ÀНuÙê,ÍÅhç0‰æ¾­ÁËÝš/z'°Ñ‡cêÙf÷þJ†ï¯þÝZ *’Lü«²ìæb¥€AÝ:BýGŸG2`ñƒØŠ®N1XÐÀù¥"?Ä4å9†|ÌÄöù´B¡ÃܾõAgævtÄZ6„\…a‹Ã;W/Sa# õÂeÙ¥ùvOn¥Ð¯}øÐ@ûŽ_Ú¥}Èš?;§ýøsÑá˜>³§cïù­·ŒûÛÓFý°‚Êœ—bs†À´“5Je•s¬Ç¦D•"D]§6¤lRl¿Pùqg`w‹ûußåL¨º‘üSçé¸[Vˆ:´×²ö*ZiiÅv ,ÙYgh¹ÍMoµh‰Lóª‚/¸iL[>9! pÑ…|{:jE]èç^¬Í’Ø.ÉÛ>KZÞGíøßÃÏ™½Å}Ô;°öÛÛ?é·jö~«ƒ .“g&‡2’4õi2}Ùhd[U‡u‘’d»º:hõÙ*!9o0˜ÍŠEØìåÜ¥ˆ’ 93ìɪÛAMIAMóÀµkè<©¾¦÷…‰J;®;kPTÎTU×耹5KûÿEd|ÿÀªôÌ;°™ ë-z¼Üs¥RœbNg¿ßòÍëáÛA~Y#(ì,A,#Iê¤x;Æâ8%4׉&ÿÓ![¸MÝt›Õ‚¾WõB`”˜DŒ + Ë¿ÜK+mu8JCWMu‹0$¡šÂ!IƒÂºœ~Ž"¤PNO7Oý ¤Éþ÷ãru°c ƒçI…lí˜>ÿ¾_K‡~{€®‰ŽS…ñ›€lÓò¦ ÿ9w~QP,~7 EfôÍA1#7ÙæöÍB6Ý}ó`Þ^,Ä›.’ mgÂ|pØÙáç¢nÕl¯z³…tê-Ïõû°p,=°Y™³d{.83çF®?ûuÁµÆ9cgÙZ(Ê£ë+›M™°lÎ~WV-¦ºð»"²ø]{TÚšˆíðuɉ™n–B·S×é¸ahä˜QØ ®o-Ÿ®˜Oéu+ç_M3NU»Ñv`£[tgÑÈŒE¶’׺lxÄu!Ò[‡FWTuZ¹ƒF <™¬,õ¶æ+à +m±†¿8RÜֳߕPÌúŒÏ·—пÝuj_R¢`]©*ÿ7œ‡ À{›îñ`Èj¦~Ð<„·0 ~úUkۨĎ¢oYk)"IN‘™nˆÎ²dômn@2F‰Û$Ò6­RroD¹¦zß’¤'2‹þîZ%½ípCŠÍëû¾ƒ‰Š\Òý\XŠ˜mê}y%F½#ÚËnvº¥ÒÍ"tZ~ŸƒNÛvCØÞ\¯[»}þåjÈrjÔæ{á?Ù»þE¤ùÖŠl•ÉldiLr+Ç©o²-èÖƒ („Š-Ä»ê°ÒVEã„ DUŸ¹¶%g>ç§'{Z7Ÿcänž2›ÜŠ|FõÀúÇðÑɶ§´¼Ëvÿsú‰°íØåtX,FÛ’ítq²Á|²åQ‰ûû#ú<2epÐP\¿±ãدÃÍR‹u;sÕ‰<ì2A”é]ù*åŒYsZ®«M¤ë m±,Ë•SØjAIÐ>ð,Gæ>±vi6‚ ºz*»l,½Á—V`(móbƦ˜’ä]ø›¢¿H°-¹8ÎêHÀ=ø’½q‰WÙºæGjOf%‡Çy%,L{6sÖÜO5^Ù¤í<Ï©úÚK.I´…ßls[‘õšO_|Cõ Eõÿ!2V*ª‹Zõ—®™ÕŠøx;&»%Ø}dHjÒPµ±¹‡v‹rßeLg7²> ;œþÉ&Óv•êÀ‹ê'æSY‚ÒehŽ-IËej¶;#BÓ›Óås(5ä"9ì\Á(ù™®…³8°Ùí[¿’É)òñ>ç/(Ò-{ùcîÝoê¶r Ò—Déöì¥ëeê/c'°S„_´Iþ|¸µÎüÀî×-Ú×y¬+Ë*µ˜fcdnèœÖÀ¶)£s+RÍ3±dq¶T«²IÆØ­Û†M¤fS6’/QÜ'u¦…¹z`SVÞ–f`e=Òÿ:•=JaRš@Е¸†ê¡ÀΕ_ǹ;i#¼½Âk©ëOêr¥\푸ÜS†&Z$$EÎ;q¥ +_‰K}ÞÔßHÜoo¸±GâþLybŽŠŒD({¬nó¤m‘¸ÆŸ…Ÿªš”,]˜fâNnvç ò¡Xú >¹ÿ©'Þ"v:Ò_径+ÉZ@#é +BFýØ´Å XW?ÝV2Yèž© -Iò™ªàÐþ»® k‹¥‹C U ¡æ-—ˆ©l¶Îå]£qº%ÐPÿÏx•ãJ’QNñ/ dr5Í@hhE7 @'SåÈÑõõbe0³f §Ñõ~dlŒå…Y³¬ÙÐ\‰~ÙÑJ.·ðïDè=¿’“\~™õØv­pwtUáîÀÚ”´\Ú÷<·jÒ@qrÈ=ýïd½ L’µ©ÇcNE;`Ó{•@}mFä}«Nî-Vq’ GT‡›U" +Ý¡bIÆœT«Áåƒ y§C®ê|:4VÝ<‡åj7BôÑþ„â’1h×sãÖcÝÏ3Ûþ"ô²9%â;‚"ç×uèeF1XkDx?·b/ÂD‰/ML˜A^÷½\§Ñ©M×å¿'Z¿w qËŽÅl¶Úï ºHZÒ¤ÀÆÐa3­ n¿‚;óý-ƒ0žY88¿òÔnâ)h¼{Â=>¸×ä»7a-ÓX 7°‹Ç0cb„ÉN@mf—“ªÖö·RtÀæþVjØÚ׋ð}’“Û œ}¢÷]WŽ$%=_0i—o‘Fž¿ߊ…~ËÔ_ÛöŽºÑÁ5;«gB£I:¿cÔ ,­=0¹ôèK>ŽæßH°éBÜyXyTÂ.ËE ,Û\îê*aÍ4º_ÈÂo-Š  E&›6u6#vé8òM¯!ɼ7ÝúûJ×ù °&{š;‘| #œ’÷DÏô›¤r^ú_ß,\˜×²Ê¼è–•÷¨J+'mYõbè…æz +ªm(—ËÌê©« ÒzDùFvú8QBW);p€a.Q  <Ž/•ømÖµ¼-À¡ÕDê²Ügös¹•@Í¥yhIÌ5‘ýOy¨*³¬R½‹Ræ-屄Ú-Æ»¬Æãç‹~¥¢äùt¹vi4ͪæCn~zUæ “×þ›½ã)¤vË„F¬{v4¯À†Mv6N9ºCmô+WË{¥Y•i(»Ôi(÷ôÒZ˜˜sõšäëZ´R0¶Èƒ¡´*T¬&aA.5±-½éÉs«Bµ‡ø–kJœ:`s¿âÒ÷1Øÿ‰ áºTÂÀq'©C!bP-Y­j_Kk:H,} ÑÃÂKƒá•‹:Ó O€¦#·\ìÖɼ8rò-³hNPç´S!2KäDÂe¨¯z&º¾LÏâÆ‹rT†—–{+˜„OðªÒäáð‚óÿOÄE?óDÐÌ[:qm†¤›TxÉCx:»Ã5Àä2iç›oºid]»jj®b…£¿b.MIÄV)÷¬ÅXá?Çüš5ÊïµrIï¿OCö̷ üúÂÇ?—nKî“\­QØgê7æÙ¹ØO¦ÌYúOÏh#Y‰³º¾0­§Lpy-ýÛ*®œ…Æ8´Ïô@艮ñbMXÈÖdegÊì÷K7o~|6½’ªh~SzÇЬÁ(üLAöÊ>»,¢“ؾüë"^·x¨3ÝÊÍè–Q7Ÿ‚o"}) Y³* l<ìqçl_Õ˜‘sˆæl\9h׋‡1¹±«ò(‚È默YïLºÉ³ñ½z5ćÕCçÒæëD±“£•ò^nRåЄðîLز䨶øC#/:sÞú®¼×~Û¹µì[“®/Ô k9îïãp‡ä´»ëK›Ù¬´}‘u”—)‡ÚvÇ(wÈ2zaGÆ¢i²dm‚#'€¥7ÔŽk±§_›ÏY…,½G­ˆ’1ú«ò,Þ…Ð…¡Øád¡qÓêÅ@,¡ Àf¾0û2íþý2-7mpÔÙW_ÀyIÜ‹;„šâÇ·¿üùÇ¿ÿòËß¾þñýÛ_ÿðý_Ú#QÙ÷?¡ÁþûõjÖîÒu¿&ýÁÉ™¥"èö>пɓ+䯉“Û âr˜…Úä[§HçO¶6tGÍ1«‚6=B#B*_уRe™©Mü¦dBÈ9eü¶ŸBzNn!Aé)t“,gTòƒE³D%Fòˆ~4÷4Ä9h!|È`Ç@¯§…â×}‡.8¨ÒL¼8óHzvœf½™AÝ߬m¹»d>«âíÐ'‡˜k•¶rZz;ƒ4…¢ÅuÖ qÖжê5¤B¡†ZS²sÔÐ=†×v쨞Ú>5ÄF£ÏuxY¨Õp¦N®õJ:% Vf—p *:¹±î‚·UK'æ±ÒäëíäFÒ…!™!m4:!Mõþ®= öÊ®õD®A-b©3@"7>%UE£!û:x´¿=mã³zYfÜ<íì‡ù¼źE£yû:˜ßßÞÌçOc‹ãã˜MëS6zXÌŸÆ,­¤ç˜z³Ûo +-B¤øÙ"BzN’ðö^æu’æ7£<|‰ j±&¢óOêO´|ê æ©× Rশl]U©V6¨'ë”t™™­09÷"ã•&/¸ÊÚ¾ë[E…Hæ>ßž¢¿òZ×óó&ݰÀh6d+gi^ø¾@7 +6ùÕqd41²t,Ø™ÍÊq ×ýü +Óf™Á©%ðœ“>\,OK²ÍƒÚ†÷£M*]ž{+´EÅa M:€Åß -’ÈTÛ•¼èõïu°{ÉÐ]õnšˆÐÕdßZÁR’ÖW?èÐ-·uËl~óºûÈW·Õþ&òY–e­_ÖHŽz·lœ:3ÝW»"áUA–>mfPñ0¦³>PˆQ?pÕ þŠÞ(ëz÷;hžåõþ d©%­ûÐŒÆÀ¡Òõíñùòœî:غµ·•r§›ä¨c(\:˜u 'ӣދPÄ̉Üû‡ypÌ£ˆ¡ÿ¹¡wN°£ˆ)Š˜O„ûGNÕƒnœ¢ùl<b{íÒ©ó½ùiCÓQƒ¦£+§ ±F>@雯gÜ›Àv†Ê(â2‡þ#(—)Ð…«mæ¬îȸ<Þ¥7(WŸÍ.úN¿ª¿; €h›T +áT•'¶jàÈÅœ¡ó” Åg¯øW«@RHÔ*§ "í]´…%'{r«qœƒ‡ã:<<|8nA² +û„ß ƶÖÄŽ!dò‹1"[œÀ^4¤m<ôÔ–D÷µ.qB!ê|2Øs³Ïï½¢“ä‚L_V‰¿³2L_t±|åŒåIÝ EXµõox‚IÑOаýkVø—óÐŒ 6l–Ι&ƒ`3—–®¨G×™æîËP‰`ÒÀWMƒÌñtNYHÊ(à‡4õ6 ¨òsÜäz¯êïä~x} +â·‹žn™~1ÝU§8‘“F¼ZRžÓÎ9Õ=(¢Twxâ'°É\ÃÀÔØ@%³6L«Ôœå®RK:PÒv”»“‘rY· )«:‚..…ÔbÕqüòèÜÿC´0]š¾â0Ø-úœ‡{qd-:@´òv¼Arç%èÜù ÖwžƒŸ·çà2Ýo8±g†¼ÒÁ5[þ$+ûæmJaÛuµC% -ņ:Ù¥ÃÖ[½ž–*ÍÌÃ’!듸i¼'*ÿrdPÙyT!3 çPB/‡nÎé&uM‹îÄn߸m¬iâ¶Ä’]²”äì‘–)Ú2£ëkcÅ»t ÚòCÁ™Ì1¬ý®– ¼¤lÒ”ŸÝ?\ºï.ÿ°÷‹‡êÀêËf÷ÒýI’œ˜šnuÊ”ODŒåq¢Î$¡]å¶ËÈÝ% .þ­uE åâðCa‹hIE˜T6}w“@³I C8¦숓€o0 ë¥‚0¯Èt#¨NZ$[õFXõÖ£?™ÃÐK5é2Rê¹õ„›¥!ô.!±«—" µRÇÐWy:þŠNmPkÚŽ +Dnˆæ,«NªÀoÿçÏ?k ήìØ%ÞãûïEÇöaø5˜ÏÐq¤Ã˜:°ò?º«$G’äÞçýjø¾{0A€ *`zCåYß—quFDÖ©*,ét’ÎŨ$«Oæ¾E;^í†U„ÈHÂC i*ÅÏ`"ÝW £[ljrÌ/ìH¢Áï| CtH¨éÍùüÓaÞ›*=Ö- Ž™ã ë Ìâܼæ-°PÌ +q e6 æ‘ÖfŒ„ …X¸² ¿4ÄBM ‘pëC0nëÙÂû#Y§V©ý¦Ôü›K¸Ó6'Šs.¾c üKcjw¾a^u =uÞÏ4Ÿ'>÷ŸTð,¤Œ#¯Ì«ð)3”Î,Ý*d‘æm YДVðT\ÅŽéNQ븼0RM2Ë®,–j19P[4ýËundâ%¬ªÙFFQBQ|uAÍfyâ°ã‰ã^ä ê¾Í¸¶îKÞ·³LGçâU„ä+s<ð"ÔK‘1LŽ}CQRCÏ“+Øe©%À–¥Aôøƒú¾ø¤!¤{C_Kzß²Rœ= ÝïÛøH•q>”/Ð㫌ÛIdZwU÷§Ÿ'BnÞGødbPMâåŸÁ3Iù+2–:R¾À§½c0AÎ¥»µöiÅ!/üA#Á –o¥Í@)²Zvo;|_h””²˜¶ÒÜÏ:‰)¡ß^ç3§CЗò…+¶Ùý¿¾ÈÙÎQ9m' Äë¾³u†­áRÂοchk_W 6ÚÔý’Iü¡´h +ˆ€¶t·˜œúºú¨-x±ZvY>¢sÈ’~Gëî¤jôuhBo‡æCp˜ żµßƒÃ¦%¸Ì͖௬Þç´õë‹zV«¼-Á_[-*(>…4ZÜq "9€ÝCÙ·²Èº¤OX,EsQD9JxG=°tÞv޲ôÏ¿~ýãã×}·ôûßÿõßÿùó¯ß5mÓÿýø­¤¬ã7ïªeðbtwAÁ¦âÈ2„¢`6IPK"Ø©äø\pÐ(Uãc2´‹~Ë+áŒL”5&Ì›ï:…žx…ŽIwAç4;?&tw@hàùød‚E}Ð@:Wßl¬¡…¦žLg›S[»¢,½šÜÅnCn *àèc^ lêD‡æ¦ü§{W’9“iÿXåYµ}A4\a? ·RÒóh âfîº] ¢‰N]oUÈ®0mþyÐOŠÐ÷¼$Q¼¬“¹GœFGDfðx¨»é_ÇžÁîÎ3‚ß°%Ycž‘@“ºD¡§k ¡­m%„})Bs1thrdì:]R¥âgKñÙIPjæp‚†¢7 »GwÖ~¹$í5š‚}rÔÌžÞjÝ? Ší&ºjëåg×kÍh¾wzØÐà« A±Bè‚)!Æjrx‹û£ñK¶¢bç!›.±wÉÒüu¾ß©s™£ëT[ºÄÖœëôô>­™ÐV µîLèxtç(j«o4T +°]…ÎWlé[(”Îî[‹ ÖœNMè~tê\1ϽYZ³Ž²§YGN¿~½«±—–]–w{“²<ÐMÓ4-p¢\#¨ôG” À^ÄÖ B×~Ød‹N™«^Ú‚42f@"ó{fèX +¦`®—Â#”íc,ÈÖ„p_•ê×›œQéV]ýý#¼W1õâÎcaŒûíäÕJè¥^˜µÍÛS$¤ÖÏý@¡6+M°h@g¦¥ë¶Œ +ÜçÞ÷”Å +Õì5±º( +fº†ÕÉä-Π0èÂYè¶îî¨2…rzD4·kó™ï@K¾©+þâÄ£óÑ~‚`#—5<ØÃò͹¨Ñ´ 4C²Á“ÂȪ'¬³ZúµvBs‹ž5u­¬óbtµkKJÈFð>Ò¼÷ñœ0coÏ húãO³;a¦Îk5²ê5Ú˜ +”ïî> “x8¬p``ׂƒ'(Ø=qFÒõN/¸½<ãN½P÷ö&çÚ’µM-){Ë +¥ôͼ¢eÄ{‰'(:vºKÓ ‚‡aG¥1ü9ôLozffÒÁwñå<ü›8pxåÁåIžìCô¼3d“‡7„²Ü›Ó¡çMØž‡w Æ^›:Úr”®ô¤)³x2‡Æ–‚‰ÞKõâÊ̲RÞëÿ)¯rËŽ#è÷)Ú” j_LIÐÎè „þ]_‘ke½ž! Ðàüèz¹/‘éãð15l´O×ÊÇÛ_ê³ûôëñ\@àå§wÎ Ô×'o¯·GSUSøÖuÿíÛši¿'üg)Ík¨LÚåBå¾½Þþ”ÓŸ¿ýçíßÞ0]¨)ßÿûþÖhO’‰M'^¼¬pA6H¦¿¾ÓêÛ©r6›°* #wCåˆÁBå§`Es€+Ø +ï j¬ Œþ×xÚ(‘=Ì6 }ÚUçñÀœepSGÝ/ÁLj~ +„¡Ó^ºêõ¥®zÛ·°´o'ΣàìÂr‡è¯8?ÓAY#×w_îQŽóÛ^Ëó¥@Gf;YŒ—ÓÚã*&\/þõ¾ÙyÌAª¦Ÿ~þçOY jô/[Ó_¼¸S8<Žq›aÚ£0ã;AxÚé˜pqfÄK¿¥!Û®o¹¾Å”X¨¢“²ŠëµXØ)k«„À=]×Q²k¾ƒîØå?¼^ë'H|yCóí^½h´É\ ž 0»ašl,£5 ËfßÚKè˜3ßE¬åÏïd!Fy„!õvmGŠ{Î68'¦#,Nû¼¤ÕóÆü²¬ºü˜|7$– À*M + + ôQŒ*@mòbz'{Ù™³öÉÓ…tìlù@°–˜_Ã.y(´ýÐúÀ-l· [s?Š`å¡Ót’Ä"ðw§à] <4†RW“B¡»å±>¹­ƒ)½7ݱÉ(Û@Œ-¢áô÷b»®ú©F—•½Ü\ALqÍ÷Š¿fZ Lš·” Àžš‚Òò . ±ÕyšŒm˜š@“[x•)p)ÊlÌÑ p ÑlWÍ“Ç;©¥ oŸeu4o-óca¦ü燮uùÞ…Èy!†Gók±ð;9¡ãóÊüŸn‚ž5Utƒ”Ҝھ$³,÷ªšT3?µ£?«ovbæÙçÇ#4mïÎ-ÚõX@€íR:ff·˜õlŸ¥€V›¬öXTYîîߕՎ“QsÀc (ói‡È[úªäs{„H ÁÊü æ&ÎIÇPï¬ì—!ÕN=ô†×NÑ1âP§HÊDLþŽ,ehºËyÙ;—‡ªEΖè=UkÕ {~F¬;ø Öþ©9œäíÖKRp•úL ˆ·¯’¡¡ƒæâÖSÇ÷ÖkŠFÎ/¿.97œvZSFÝq€ÐBÐZ2³Ö£æÇ–O—V0 9¬ýJòù Þ„Oj‹‘U³LRº*»~¹mc¢ç÷wÀ.µ‘³¶ƒuXsQH”éz]ö®Õ® šÑ$H|vkTm·d*·ç;M”R­Qw¦Ò¼mÄ?f~úòÿ„Bë0F‘ïp'+â˜}Óçщi†fž¡žEÃ\~:û8µtÀGœÚË7H1!([ïaQ!"6KW9AžçÖ?½³’´f…ˆEnç“éEÆ[òk±ï(W ±uZ#:Ý•f½4ù¦ÔÜg£.…ÞÅø´~¿é˜êý–Õ•ñ Ò‚&‚ìSNìœrÈH ”Ãûbã¬â,SûÿVµû‘ÅCGÄJçiCÜ){l³4`uAò¦R#Š:tNM=Ï«© 3ÊšvyA­,( ƒj +H?²’µ4Þœ­óY—„PYó&Þ6­ç{–o›^™'‹)]|µõž‘‘ÃɮӣqNDÿdÏ»Õ(ÖÜÖø(•–sÚ‹ åø ´jöã_âÆÜ:ÙüSË‡Ž ¦Ú!¥[_žÈ£mcVp*hV'v lïDÙ’A-°Á<í~§Ž€I›ûäDÄŽi?^W8Íx]í¤yàrÍÙ¶X{kç¯/:„ˆq:ÂjšžøÎ±êÀ¤ +‹ƒ#~‹Á.Gߥ…wØýŒ€ ßeE 4­0Y6‘€Ì‡+ÕÐíµÎSÍÕQq°£Åä]ˆð`i{‚%Ò¨AkÑB‰¯r63…mÁÞ¥'êÓƒXWûƒ¡”©øþ²m"ý«œ‰$3hM%Ë<—Z¥¹¾P™Z ¼‰uy‰% dž(Tž¶ N’Å]AҩϽ´¥ŒÉ%H‘鬯ִÈTŒ, 6“h>Lµª+5£šˆJ«¥Î,ÜYï…œ#`Ú¿o°I–¦ûÈNF‚ÛHCbF²h³\‚»Nþû‘õâ…Î6¢ãú0F»lÈÏ\´¤ÜS³i7ó•››5±ý}î]øWè^ÑŸÜ—{Q0Vò y°‚…4¤]ÑÒF{]˜ø~ÙŽFùá¸<¸O\T‰@×JI^„a5#Á³ë”ÿ0YP¡¬ÝVD81 ü´^‚¸à†Ë«Ö750›ðYÖ0ëPšcX3@ÚòW›I½âƒÞR]FIt餥‡Å$QDaY¶bð8u?v"6jÿôíÒ!¼)\É¿­cRÖß)6@&Xë‚©ýžúøÓÞÙ¦¹ŒD`³+O…\”;}S¯È°P Œ}6ºrh (tsWkštý)ÏïÌÓ€Q¡WÌD€mzÀ¨:'è.ö'ƒ¯G!è0‹Y;°f'ÎÈ–]ïˆKEYšüê´ÒôÕ@ÄQ~‰êþ×yÁ©‰õåÑ@çlXIFH¡(˜CãçPÂ}Æ¢°m¬š³Ž¶h® 4J}g»‰jeSK2–í’]»­Ñb¥€?Ùu(§SÌ.Ò¼²‹@Ù‡þ¨ð†ˆ¹Å.®9ªlpn›GbkfçðèTîU!š³9shD ûj„Ñæe/´BÓ|á¤1ïÒ"\@ž{Ë©Þò+'d’hÞÔò*¶Ñ¦8¹ì’¢­¤Ž7;¤TÚ —/ƒV²n[†ºó„ÙjÈQãSÖhÎÇW[CÈ?°'ÀM3xtE„BÖ³}:«óKÃ(º4X%°Þ·uò†ñ‹°¥Û‡fJÖ²þÖwàsH­¸<Ðæ¬“GòdvïÝŒ?’µE0Ø¿A”›Dº~ ÍÿëL `˜]f/mOx½Ë2+*WºGBfVy<Ú¼¶HÔXêäZG#YB:4¡òŠ;áI+ùˆäMÌNÓÏáö‘¯§}ÜØ×iÕà·òxU®°º$\…+Ü´‚ ³ÌÌI÷ûî’N¬qÕÛŽƒ-&ïB„gyÒ`9ÑïVœs«Nй)ù6 u° Ÿ§õÁ¦ƒý¸'Æ—ŽÏëÖ¾åŽ(Ã:<C­¥/­ÉŒ">„—•”U4 Û–_E Ñ?Fø¨V¾Yô…w¶©£0)hR¸¦}Ù«¾êí¯`´Ðó «n¥ñ~òϖ-ŒfwVŒç)y¿’ØÐìtšÒS¬HÝ×àPJä ·üÎCëÞd´ï:.) ËV|Å@‡×…Hy H.òSf3=)îr湪nðóÄ«(æŒÌ0œ[@fD¬cƒÒ¤¹Z8²óC-á¡ÔÒÎýá%Ÿ¼äêñ% q7Äd»¥!Ùæ¥cêé”R»ÒhìëYc†i!­mÍq¿:©}Ì¢qİ”S\½õr‰¡q}Àê95õUÊÃW)o¿Ð +Ÿ­ÿ6ìÇ×$ä~Qhêî_~ÍÚÝþwí§W@„kýÕV"Ö¨ðA€uÈǦ•5zökë$@£…†¶¥@„c9ÝÖ¹«…‘òÏŽ’'‹/1e¤Œl^ÞQ]ÀØ .†Î¸ãtŠƒ«­ð»¦…¡q^Z¡ñ‰Ý‚GÔÖ›ñÃbøì"¿… :Ó±8€žßó;Ú•ÙÁïÿ~«¬8öÚu,g:Õ¼Çoûù­N%428„¯·:8ÊŽÖJaÕIM¬/ÂY9Ãôú¡^k…ä(-k[CI›*kì…\Þ{ÐBô£yª„Ð7€Z ;G+í«wêKÉÑó¼Bð{¬ #'‡n°7³úK·,°o»§ ñW&ñ;‚Œ„_¿®9×Öß-åTsÿ®yI˜¤Ш¸+ðâ%= }J“ëÛˆ°i«Ã¥åy[íéVrÖô½ˆnäö7}£½„ÈêVÒ’Õ ¶Nj!ÎÂx•Qíô‹ÅD×¶ËŠ¶-YrxÏÚ HÕ²@¶/BÔÃ,-Êè’©#ÚJ²Œ|Šm¨¸§êGhIm³)ÕÖxÓMX5ŽÐÖØ.X\’\²¡éaºjÕ °‘qY ÕÂr¡ýf¿Ë\z SiúÂÔv2ùD|BÙì“c¾Ó"Po`ið‹Ÿà{ôŠCJ©:Ks6« ]u”— °ÏOÙ'dêÚ5XY|'¥èUC‹W>iÐ:$Vu¾J„ü²B_©1ë)ù[›À´˜ò@²L@S=ñ0v’:!åÕ!!k$£èhUäÓFè'ù_m$N¡‹à€þø ‘$ÞT<ÊÞÒ¼nY]ÍC9>¼†~°yçe»é¨rÀløêëÇQuÁ±á²,¬ÐÆX +©¹cºõýø¯†#Ù®¼ ª-¼OD@£È+gË.W‰°5-RCåÍíó›H2´ZlÈÕx pöö†D›^?œÊ¸!ÒµYÑ’ÕcžìI FÎcW6Ù4™évîr Ö>Ð}ÔbH0iÈ›è%–“ÖLmAqiEkÇï.Ð¥‰ž¡$ì+מ "^ñW[=~ø'd{€¤ƒuK\§²À€H+µ~} ¦8àÏ ¦›ãÔ |¤£Eà[7ÈœJ·§´„寅šœH¤ÉÙÿÏGö1ÀßPæÒ rq&T¸œ +pê£DáÜ]X²Þ^¸=^eX¸ó½¬öè¯Óžý¼îMà¹w¹Ÿj„úÐ:W!–·¯Mµjk“þ¸Dprh¶IJ)GÔSöj"tÈ' +ÝÏâo1ôE§’ð¯þù™;Ûäý h‹V%ðO—,¥žØMš]U¸¤œÅç-(éîîp(}ÐbÍÊòà‘Ê"¶è¬©KWFrgOŸFB&¹ýüÙxìDxž¯©=)å¤.Ý?+гì‘ßuÔæÔ7ÕIWꛋ§Êi )Y@ýù’(h¢é )ˆt/™ì—ÙRAÄ2S¿qAáÞo‹³¥"_÷]œ¨}·œ#vŠE`“Ûã /C7^bJ-¥¼ëR¥û²Ó(ºí9tw_AQ3€JyÔÇ>$ŸÏòN1½îP¿j&?ž‡ìXRE½wŠr_퉹ì6 é×sçÄĽèA–'† úcÁos` ||ÓL©~|LO9=^²Œgöìär0åø®šÄ#R:|®³ ꩸¼+ÖÉ)ÑŒD‹ósø+0íN}ãæ× Úýh$›÷šÚǃ¶›u­ÊS RÆý†Åw£hdm.P#Ó±p(EMaßSzQ&úy¨ÞYÕÛÉ(ã¼K±§^GwÃòœùþÊæ–¢`[þ­=>´±VÄ/e)MCŽ¡²¿&Lÿ”š‹SØ6]›è]H˜:ĺ¹ò +yÙ)䇳æytôüŒ.úèÑ‘BàägÂ$,’üôyÛºc½@ìY×—,#ü|†„µn_ÛÈND ÀQUá°càSFÓû’]r<ºãxxÜ1(´’à9,“‘À$ˆ—è=&ˆ¡Û£É6eжo>‘îÈà N}×Ó[e]n˜FÅtõÈÞ:y1 µëõZCç_ÀŸ Ì·û™7HR-‡ƒfÙßùÕ)AÙíMÂÁq­«ßþ_ƒùÈ~˜w•'E0•vHûÍFU½½b®xåùD:땲¿×´a”úg/®%ë²qM2ayx-úä¹ÂïX oHÒ¦DRÔÓ0œ<.ëÙr·´Ó€nîMAY®¨ñ-žM·ÃŽj ÙfØuIps{Kë×Ðá^mo“n-“ôüjA—¬ªK,A¸æ±¡™æJ†Ë´ô#¼Ù5I/Ù¶©óeÈÀ$=Pâ”mVgZ°Å¦ åB|÷¡¦áNíÕŸ ‘)s[-cÏndDÆ_7½çóN°·øŠZ^#Þ¡$úëð«Iœ_}ÇH œÆ "‚öô¤Y ªE'k»n¥’cB_FVp8¬ºˆºC¸ š ßP©VUk¢|‹QɃ©[l]úz4^¯G“âÔWÍÔ'“iÈT¥!ÓL:Ü´d–÷¡dä¤ÉÇ9mòÅΉpPô(^Fs߬Öì¯kwÃp GqBF[¨—‘%%éKç4Ï}S)âJ§¬‹$´höI€µ«†Šø)ª)QA K¾^¿…¼‹Ó •¬·d°Þ„@½y ãBžïz ã€Òn m`‹ÊÑþE`ñö7T‹ÕØ7 7‹Yú™xñcgÎóîºäåôšâìµà¨#}~))¤¦¸¶,ƒµ%¥05hÕ,]µô¯)Úž?öÈôlGéÙ1oqŠª¥OÂk-`Gœpªšø?"ÖJç°höhË&Á³:%%1i¾æëi†FÏ—±A\$,};” ùì/•j‰|QFC3$wÏüb$dŽ£ŠsØ:’;hª 6wV*ã¶Ó ŠjFƤкKÆ—eߦZ +€) +DÚ…yÎ/SÄzpaéèlô¸:]Ö&ØÓ=²º¶`g÷”¤½µ ¥$[ñ¡ˆ`;>”)ìLBT a-Ë@OdN²¬ðG”MÊ&ûºÀ`J¡ÇÄŇ_¶@ѯ¸ZT1«=µÁD(Óû‹Æ;½·8À}…>á’OvÔ ŒP`ÒU¼*XˆPGVÚÒ)+Á&a–´Ên: =¦êiÖMœoä›6JÂôF"¿¬‰„ýôBç®"˜µHõúm¡U—ƒ»ûHí±šbð +×§ê,`}•»'Cx/^céꕨ’ø¨Ï±±žù©Ç’ذìC—-ý©Ö¥_¾5èþã[Ç'|ÌaçÉctk&ÙéîÓiרψæá¹Òµl³Õj ÚÙ}}‚¸®éxR¹€Ôæ B)(Óõ±)¹G/´Žð5á7&­úG8KÓÙØNÓ=£4ß=µü›“øH?i¾{jƒ}´¥LAœ}~V"`„ƒö¾™ƒVÁA«–Ī4"s0È3^ ôt'ú£äÓäééu¥ç#]ÁÃŒãÛ`£×Yb#0ù÷?`c³÷*ÐymÛ¦ºýWàŸŒUî]Í·#`«å"l<Ú’e±²¢ŸÌ£_>m Ò&Mûl…á&C¦)¼!˜2Ñ‘ª›õÊÆC ºP§!Ë.ëÓ±:«Øµí=|WžO°;K{öí¿Æx´Ây*²Q3Iãy"üºsYj!{Üùæ­à­É¢¶å“O“Zi|½RÚãz dåÏèiðÇ®*ë>~R:=†g#`×ë¡I ¬‡<˜m ¶l€pbœZïÄ>'ë +I-°ie(!„…ê§)¦9ú?ãU²ZYrD÷úŠ÷ªÎyØVÙ4õðôÂ`¤7þ}Ÿ3î•„½èž—sœæ 䬚­ ÛE êj>r›‚õÀ’ÄÓ‘£ÄóDfâŸÒ´päÜÐ^Áçí:ßͼ`[–‰ë ©ä»{Ù¯„"¾…ネIÆ’O@ò¼•ßy- ¦·k(‰:‰ö˜C#p&¼Í“½N›ìM¹ ÿöÎßüæLªÅaB'Õ«öGzu²˜2R¸ÃÍâU ¬±ïg%®-Xc~žÕ[’!ÓB¼yŒe.qzcÒ â\‹¾‘KbGÆXKKt çH†©¼âBZBôC£âïšåM›+¸·ZbYOäÜ.à'qó‹l¾DäFS3G•¼ÛT7˜˜»y\¦ŠÆ¦¹ö…i ÉÑ^X©se%±ž8i¨'¤%÷N¶ØÉ¡®Ã)`2û¯†Ö@N\M2q) +N,ÔFn€ìDÁûÀdw +QB¦.èb DÈ”ÛÅ'Û0«Úö@Ý×½a’Ž¿è=V'ø˜tvòÿÓÑLÐøàkÕá_›Ù]Ñö!Åçpi +À%¤”3ã»®pÀÈã~ÙÕêMžÍn2ìpáä”Ãô\Ž\@ååÈd¾RΔ—9ì.ðù}=UÁÃHÖᙃ,p÷Sà» +ÀXV\@80çƵ€.8Ë;\@¸°ÀRŸ¤E.ðÙröZ(£(²TJŸß³&AÓ%åüþþ‚0³»F/tn÷×sŒp%Ê)—F5µ|áýÖ@½%ßFÖ>‹þZ’ï¨]º•Ô‹øf³Y’ö.;3ŒT€®ÉûË*WérÔ)+ ÿ -ñ+¦Z+³¨fÛ=Ú‡i»Ýc˸»ŸÛhÙäñ·¼ôöÁ3Q³ƒ=_^³v¹èþË^Ñ•öÝ\€¨›‹§Q™ºÝ” ˜MbÚ÷“.7Û0m»”ËÛdò×ÕÈùš–.¯–®éü»‡.å믜’&ìk×ÚÈib«­âŠ®Å‘Ó€Õªx×ú pÖm ”%ÝL¤>Y²Ý P•tHRm€*¸Ó4ÈÎUmIyU{Òåå¢í梣·j·ær“²–«DŒÀöám,:û¦ãºZ¼©#Úº®Þp Çká¥ã_×èc8SÜ0­æ=<Яï{xÐÚZ»ªÓ¢² È¢Ý1Pww›Ñ~î¸F%úkÇÍA«Óÿr²M~2:¯Näð.TßôÃÄOõž`-GÌÞpîø$H<¾ o/-?ƃÃt̤~J1:ø‰÷î œø¥÷(Ô@Q”¯©H¾ÝhzAù½È +¹ìN©S4¼³‘MvÒžq,ØãÅðÌotïÐ Ç©Þ^}%ßQ㹦ôX=½àfEÄŽn_Ná®ÛyFø+³â2‰%€çÀ;Ò¬9 ÚbnØHÐæ¦”+¸»ä†IU„ÔlúÌCjV)-Û´ Mº|Ÿ/›[a™· w EË}GÅ–‰B÷jf–³­ùÇh0°/¥/˜2¥©\›ò-šBòhêJ›’nndÈ’+ª2vY¢Ê4$µ9c¢pö‰eFeÆ ÛêÕéA=_h¥0/µ&üQ¿…–N“<ØŽ£ï›?SC¾ÇÍ„o‰ËÛµðÙiq8Oµ™É@8 ŠO鮽 ”53ÊʺõЋYü’Ö…„àÀ`#.CY~t‚ ãˆMeÛñîTVÎ/Ô­X/†™ï´q#´>ÖmÍZ'ÿhZ&üÓÎÒ¯¬Îä›4œB±®¨¨µO¿…ŠÖ™rˆ-›Ô`Îb¨ =5ÕÑs•'ŽXJ\Èr +àO%j‡u…ä¾Fáaµ`'m‚M¨QÙUzqBVrbÔx{™Èÿ>¤ªŒ­±z»œÕÛù\T›ÀL³×Aüçèáh‚ŒF• Ä[£[~Á²¹†›óÛæ~壿r=‘c ‚„Çg3ÞŽHúEQK—QÆ&û˜,ZŒÕ’ÄAcQ¯û)3‰¤µ%HëìØ­‹­`¼ÚFÝÀ“ºl&?'1&ÌäïVb#*œÅëM{Xq5i%Jr­oÝ|&ØÅoÈpç¡;6 .Óêé(S,>/Border[0 0 0]/OC 1364 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1363 0 obj <> endobj 1364 0 obj <> endobj 298 0 obj <>]>><>]>>]/K[72 297 0 R 724 0 R 809 0 R 894 0 R 1029 0 R 1141 0 R 1239 0 R]/P 36 0 R/Pg 24 0 R/S/3V3_SHIELD>> endobj 267 0 obj <>]>><>]>>]/K[41 266 0 R 723 0 R 808 0 R 893 0 R 1025 0 R 1160 0 R 1223 0 R]/P 36 0 R/Pg 24 0 R/S/5V_SHIELD>> endobj 389 0 obj <>]>><>]>>]/K[163 388 0 R 767 0 R 844 0 R 944 0 R 1051 0 R 1178 0 R 1246 0 R]/P 36 0 R/Pg 24 0 R/S/A1>> endobj 653 0 obj <>]>><>]>>]/K[427 652 0 R 787 0 R 872 0 R 990 0 R 1121 0 R 1212 0 R 1310 0 R]/P 36 0 R/Pg 24 0 R/S/ACDC>> endobj 470 0 obj <>]>><>]>>]/K[244 469 0 R 763 0 R 838 0 R 938 0 R 1078 0 R 1211 0 R 1272 0 R]/P 36 0 R/Pg 24 0 R/S/AD8233_OUT>> endobj 637 0 obj <>]>><>]>>]/K[411 636 0 R 786 0 R 871 0 R 989 0 R 1116 0 R 1213 0 R 1306 0 R]/P 36 0 R/Pg 24 0 R/S/AD8233_VDD>> endobj 435 0 obj <>]>><>]>>]/K[209 434 0 R 747 0 R 853 0 R 956 0 R 1062 0 R 1169 0 R 1280 0 R]/P 36 0 R/Pg 24 0 R/S/AFE1>> endobj 496 0 obj <>]>><>]>>]/K[270 495 0 R 1092 0 R 1288 0 R]/P 36 0 R/Pg 24 0 R/S/AFE4>> endobj 231 0 obj <>]>><>]>>]/K[5 230 0 R 712 0 R 797 0 R 883 0 R 1013 0 R 1133 0 R 1216 0 R 1326 0 R]/P 36 0 R/Pg 24 0 R/S/AGND>> endobj 462 0 obj <>]>><>]>>]/K[236 461 0 R 749 0 R 860 0 R 963 0 R 1074 0 R 1192 0 R 1268 0 R]/P 36 0 R/Pg 24 0 R/S/AIN0>> endobj 482 0 obj <>]>><>]>>]/K[256 481 0 R 750 0 R 849 0 R 950 0 R 1084 0 R 1181 0 R 1279 0 R 1332 0 R]/P 36 0 R/Pg 24 0 R/S/AIN1>> endobj 439 0 obj <>]>><>]>>]/K[213 438 0 R 748 0 R 831 0 R 928 0 R 1090 0 R 1191 0 R 1286 0 R]/P 36 0 R/Pg 24 0 R/S/AIN2>> endobj 478 0 obj <>]>><>]>>]/K[252 477 0 R 751 0 R 832 0 R 927 0 R 1082 0 R 1170 0 R 1277 0 R 1330 0 R]/P 36 0 R/Pg 24 0 R/S/AIN3>> endobj 480 0 obj <>]>><>]>>]/K[254 479 0 R 752 0 R 850 0 R 953 0 R 1083 0 R 1182 0 R 1278 0 R]/P 36 0 R/Pg 24 0 R/S/AIN4>> endobj 357 0 obj <>]>><>]>>]/K[131 356 0 R 732 0 R 817 0 R 902 0 R 1043 0 R 1148 0 R]/P 36 0 R/Pg 24 0 R/S/AREF>> endobj 419 0 obj <>]>><>]>>]/K[193 418 0 R 1057 0 R 1249 0 R]/P 36 0 R/Pg 24 0 R/S/AVDD_REG>> endobj 300 0 obj <>]>><>]>>]/K[74 299 0 R 729 0 R 814 0 R 899 0 R 1030 0 R 1145 0 R 1227 0 R 1331 0 R]/P 36 0 R/Pg 24 0 R/S/AVDD>> endobj 488 0 obj <>]>><>]>>]/K[262 487 0 R 774 0 R 858 0 R 961 0 R 1087 0 R 1189 0 R 1283 0 R]/P 36 0 R/Pg 24 0 R/S/CE0>> endobj 385 0 obj <>]>><>]>>]/K[159 384 0 R 741 0 R 826 0 R 911 0 R 1050 0 R 1159 0 R 1245 0 R]/P 36 0 R/Pg 24 0 R/S/D10>> endobj 383 0 obj <>]>><>]>>]/K[157 382 0 R 740 0 R 825 0 R 910 0 R 1049 0 R 1158 0 R 1264 0 R]/P 36 0 R/Pg 24 0 R/S/D11>> endobj 381 0 obj <>]>><>]>>]/K[155 380 0 R 739 0 R 824 0 R 909 0 R 1048 0 R 1157 0 R 1263 0 R]/P 36 0 R/Pg 24 0 R/S/D12>> endobj 359 0 obj <>]>><>]>>]/K[133 358 0 R 733 0 R 818 0 R 903 0 R 1044 0 R 1149 0 R 1258 0 R]/P 36 0 R/Pg 24 0 R/S/D13>> endobj 533 0 obj <>]>><>]>>]/K[307 532 0 R 773 0 R 857 0 R 960 0 R 1098 0 R 1188 0 R]/P 36 0 R/Pg 24 0 R/S/D2>> endobj 528 0 obj <>]>><>]>>]/K[302 527 0 R 770 0 R 854 0 R 957 0 R 1096 0 R 1185 0 R]/P 36 0 R/Pg 24 0 R/S/D3>> endobj 531 0 obj <>]>><>]>>]/K[305 530 0 R 772 0 R 856 0 R 959 0 R 1097 0 R 1187 0 R]/P 36 0 R/Pg 24 0 R/S/D4>> endobj 510 0 obj <>]>><>]>>]/K[284 509 0 R 766 0 R 843 0 R 943 0 R 1095 0 R 1177 0 R]/P 36 0 R/Pg 24 0 R/S/D5>> endobj 508 0 obj <>]>><>]>>]/K[282 507 0 R 765 0 R 842 0 R 942 0 R 1094 0 R 1176 0 R]/P 36 0 R/Pg 24 0 R/S/D6>> endobj 505 0 obj <>]>><>]>>]/K[279 504 0 R 764 0 R 840 0 R 940 0 R 1093 0 R 1174 0 R]/P 36 0 R/Pg 24 0 R/S/D7>> endobj 415 0 obj <>]>><>]>>]/K[189 414 0 R 744 0 R 829 0 R 914 0 R 1056 0 R 1164 0 R]/P 36 0 R/Pg 24 0 R/S/D8>> endobj 413 0 obj <>]>><>]>>]/K[187 412 0 R 743 0 R 828 0 R 913 0 R 1055 0 R 1163 0 R]/P 36 0 R/Pg 24 0 R/S/D9>> endobj 476 0 obj <>]>><>]>>]/K[250 475 0 R 753 0 R 846 0 R 945 0 R 1081 0 R 1179 0 R 1276 0 R 1333 0 R]/P 36 0 R/Pg 24 0 R/S/DE0>> endobj 229 0 obj <>]>>/K[3 228 0 R 719 0 R 804 0 R 882 0 R 1012 0 R 1132 0 R 1214 0 R 1324 0 R]/P 36 0 R/Pg 24 0 R/S/DUMMY>> endobj 437 0 obj <>]>><>]>>]/K[211 436 0 R 1063 0 R 1253 0 R]/P 36 0 R/Pg 24 0 R/S/DVDD_REG1V8>> endobj 304 0 obj <>]>><>]>>]/K[78 303 0 R 731 0 R 816 0 R 901 0 R 1031 0 R 1147 0 R 1229 0 R 1329 0 R]/P 36 0 R/Pg 24 0 R/S/DVDD>> endobj 494 0 obj <>]>><>]>>]/K[268 493 0 R 769 0 R 851 0 R 954 0 R 1091 0 R 1196 0 R 1287 0 R]/P 36 0 R/Pg 24 0 R/S/ECG_N>> endobj 433 0 obj <>]>><>]>>]/K[207 432 0 R 746 0 R 848 0 R 947 0 R 1061 0 R 1168 0 R 1273 0 R]/P 36 0 R/Pg 24 0 R/S/ECG_P>> endobj 609 0 obj <>]>><>]>>]/K[383 608 0 R 779 0 R 864 0 R 967 0 R 1112 0 R 1300 0 R]/P 36 0 R/Pg 24 0 R/S/ECG_RLD>> endobj 549 0 obj <>]>><>]>>]/K[323 548 0 R 778 0 R 863 0 R 966 0 R 1101 0 R 1195 0 R 1305 0 R]/P 36 0 R/Pg 24 0 R/S/ELECT_BIAS>> endobj 233 0 obj <>]>><>]>>]/K[7 232 0 R 713 0 R 798 0 R 884 0 R 1014 0 R 1134 0 R]/P 36 0 R/Pg 24 0 R/S/EXT_AVDD>> endobj 235 0 obj <>]>><>]>>]/K[9 234 0 R 714 0 R 799 0 R 885 0 R 1015 0 R 1135 0 R]/P 36 0 R/Pg 24 0 R/S/EXT_DVDD>> endobj 543 0 obj <>]>><>]>>]/K[317 542 0 R 777 0 R 862 0 R 965 0 R 1099 0 R 1194 0 R 1289 0 R]/P 36 0 R/Pg 24 0 R/S/FR>> endobj 452 0 obj <>]>><>]>>]/K[226 451 0 R 754 0 R 833 0 R 935 0 R 1069 0 R 1184 0 R 1260 0 R]/P 36 0 R/Pg 24 0 R/S/GP0>> endobj 250 0 obj <>]>><>]>>]/K[24 249 0 R 736 0 R 821 0 R 906 0 R 1019 0 R 1152 0 R 1219 0 R]/P 36 0 R/Pg 24 0 R/S/GP1>> endobj 458 0 obj <>]>><>]>>]/K[232 457 0 R 771 0 R 855 0 R 958 0 R 1072 0 R 1186 0 R 1266 0 R]/P 36 0 R/Pg 24 0 R/S/GP2>> endobj 456 0 obj <>]>><>]>>]/K[230 455 0 R 755 0 R 852 0 R 955 0 R 1071 0 R 1183 0 R 1265 0 R]/P 36 0 R/Pg 24 0 R/S/GP3>> endobj 442 0 obj <>]>><>]>>]/K[216 441 0 R 756 0 R 834 0 R 936 0 R 1064 0 R 1173 0 R 1254 0 R]/P 36 0 R/Pg 24 0 R/S/GP4>> endobj 450 0 obj <>]>><>]>>]/K[224 449 0 R 757 0 R 839 0 R 939 0 R 1068 0 R 1171 0 R 1259 0 R]/P 36 0 R/Pg 24 0 R/S/GP5>> endobj 454 0 obj <>]>><>]>>]/K[228 453 0 R 758 0 R 841 0 R 941 0 R 1070 0 R 1175 0 R 1261 0 R]/P 36 0 R/Pg 24 0 R/S/GP6>> endobj 448 0 obj <>]>><>]>>]/K[222 447 0 R 759 0 R 835 0 R 937 0 R 1067 0 R 1172 0 R 1257 0 R]/P 36 0 R/Pg 24 0 R/S/GP7>> endobj 595 0 obj <>]>><>]>>]/K[369 594 0 R 1110 0 R 1298 0 R]/P 36 0 R/Pg 24 0 R/S/HPDRIVE_SP>> endobj 333 0 obj <>]>><>]>>]/K[107 332 0 R 727 0 R 812 0 R 897 0 R 1038 0 R 1143 0 R 1242 0 R]/P 36 0 R/Pg 24 0 R/S/I2C_SCL>> endobj 335 0 obj <>]>><>]>>]/K[109 334 0 R 728 0 R 813 0 R 898 0 R 1039 0 R 1144 0 R 1241 0 R]/P 36 0 R/Pg 24 0 R/S/I2C_SDA>> endobj 603 0 obj <>]>><>]>>]/K[377 602 0 R 780 0 R 865 0 R 968 0 R 1111 0 R 1299 0 R]/P 36 0 R/Pg 24 0 R/S/IAOUTS>> endobj 252 0 obj <>]>><>]>>]/K[26 251 0 R 718 0 R 803 0 R 889 0 R 1020 0 R 1154 0 R 1220 0 R]/P 36 0 R/Pg 24 0 R/S/IOVDD>> endobj 242 0 obj <>]>><>]>>]/K[16 241 0 R 717 0 R 802 0 R 888 0 R 1018 0 R 1156 0 R 1218 0 R]/P 36 0 R/Pg 24 0 R/S/LDO_AUX_EN>> endobj 317 0 obj <>]>><>]>>]/K[91 316 0 R 725 0 R 810 0 R 895 0 R 1035 0 R 1162 0 R 1234 0 R]/P 36 0 R/Pg 24 0 R/S/LDO_EN>> endobj 265 0 obj <>]>><>]>>]/K[39 264 0 R 722 0 R 807 0 R 892 0 R 1024 0 R 1140 0 R 1222 0 R]/P 36 0 R/Pg 24 0 R/S/LDO_OUT_AUX>> endobj 310 0 obj <>]>><>]>>]/K[84 309 0 R 1033 0 R 1232 0 R]/P 36 0 R/Pg 24 0 R/S/LDO_OUT_MAIN>> endobj 237 0 obj <>]>><>]>>]/K[11 236 0 R 715 0 R 800 0 R 886 0 R 1016 0 R 1136 0 R 1215 0 R]/P 36 0 R/Pg 24 0 R/S/LDO_OUT>> endobj 423 0 obj <>]>><>]>>]/K[197 422 0 R 1059 0 R 1251 0 R]/P 36 0 R/Pg 24 0 R/S/RC0_0>> endobj 421 0 obj <>]>><>]>>]/K[195 420 0 R 1058 0 R 1250 0 R]/P 36 0 R/Pg 24 0 R/S/RC0_1>> endobj 468 0 obj <>]>><>]>>]/K[242 467 0 R 1077 0 R 1271 0 R]/P 36 0 R/Pg 24 0 R/S/RC0_2>> endobj 472 0 obj <>]>><>]>>]/K[246 471 0 R 1079 0 R 1274 0 R]/P 36 0 R/Pg 24 0 R/S/RCAL0>> endobj 484 0 obj <>]>><>]>>]/K[258 483 0 R 1085 0 R 1281 0 R]/P 36 0 R/Pg 24 0 R/S/RCAL1>> endobj 486 0 obj <>]>><>]>>]/K[260 485 0 R 768 0 R 847 0 R 946 0 R 1086 0 R 1180 0 R 1282 0 R]/P 36 0 R/Pg 24 0 R/S/RE0>> endobj 657 0 obj <>]>><>]>>]/K[431 656 0 R 788 0 R 873 0 R 991 0 R 1123 0 R 1313 0 R]/P 36 0 R/Pg 24 0 R/S/REFOUTS>> endobj 276 0 obj <>]>><>]>>]/K[50 275 0 R 737 0 R 822 0 R 907 0 R 1026 0 R 1153 0 R 1224 0 R]/P 36 0 R/Pg 24 0 R/S/RESET_BUTTON>> endobj 410 0 obj <>]>><>]>>]/K[184 409 0 R 742 0 R 827 0 R 912 0 R 1054 0 R 1161 0 R]/P 36 0 R/Pg 24 0 R/S/RESET_GPIO>> endobj 283 0 obj <>]>><>]>>]/K[57 282 0 R 734 0 R 819 0 R 904 0 R 1027 0 R 1150 0 R 1225 0 R]/P 36 0 R/Pg 24 0 R/S/RESET_SHIELD>> endobj 378 0 obj <>]>><>]>>]/K[152 377 0 R 738 0 R 823 0 R 908 0 R 1047 0 R 1155 0 R 1262 0 R]/P 36 0 R/Pg 24 0 R/S/RESET>> endobj 655 0 obj <>]>><>]>>]/K[429 654 0 R 789 0 R 874 0 R 992 0 R 1122 0 R 1206 0 R 1312 0 R]/P 36 0 R/Pg 24 0 R/S/RLDSDN>> endobj 651 0 obj <>]>><>]>>]/K[425 650 0 R 790 0 R 875 0 R 993 0 R 1120 0 R 1205 0 R 1309 0 R]/P 36 0 R/Pg 24 0 R/S/SDN>> endobj 490 0 obj <>]>><>]>>]/K[264 489 0 R 775 0 R 859 0 R 962 0 R 1088 0 R 1190 0 R 1284 0 R]/P 36 0 R/Pg 24 0 R/S/SE0>> endobj 425 0 obj <>]>><>]>>]/K[199 424 0 R 745 0 R 830 0 R 924 0 R 1060 0 R 1252 0 R]/P 36 0 R/Pg 24 0 R/S/SPI_BOARD_CS>> endobj 665 0 obj <>]>><>]>>]/K[439 664 0 R 1127 0 R 1317 0 R]/P 36 0 R/Pg 24 0 R/S/SW>> endobj 642 0 obj <>]>><>]>>]/K[416 641 0 R 1118 0 R 1308 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_HPSENSE>> endobj 644 0 obj <>]>><>]>>]/K[418 643 0 R 785 0 R 870 0 R 988 0 R 1119 0 R 1204 0 R 1311 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_LOD>> endobj 663 0 obj <>]>><>]>>]/K[437 662 0 R 791 0 R 876 0 R 994 0 R 1126 0 R 1316 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_OPAMP_1>> endobj 661 0 obj <>]>><>]>>]/K[435 660 0 R 1125 0 R 1315 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_OPAMP>> endobj 659 0 obj <>]>><>]>>]/K[433 658 0 R 792 0 R 877 0 R 995 0 R 1124 0 R 1314 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_OUT>> endobj 640 0 obj <>]>><>]>>]/K[414 639 0 R 1117 0 R 1307 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_REFIN>> endobj 614 0 obj <>]>><>]>>]/K[388 613 0 R 781 0 R 866 0 R 969 0 R 1113 0 R 1301 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AD8233_I74_RLDFB>> endobj 353 0 obj <>]>><>]>>]/K[127 352 0 R 1042 0 R 1240 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AT24C32_I19_A0>> endobj 330 0 obj <>]>><>]>>]/K[104 329 0 R 726 0 R 811 0 R 896 0 R 1037 0 R 1142 0 R 1238 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_AT24C32_I19_WP>> endobj 564 0 obj <>]>><>]>>]/K[338 563 0 R 1105 0 R 1293 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I105_N2>> endobj 554 0 obj <>]>><>]>>]/K[328 553 0 R 1102 0 R 1290 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I107_N2>> endobj 616 0 obj <>]>><>]>>]/K[390 615 0 R 1114 0 R 1302 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I75_N1>> endobj 690 0 obj <>]>><>]>>]/K[464 689 0 R 1129 0 R 1319 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I82_N1>> endobj 567 0 obj <>]>><>]>>]/K[341 566 0 R 1106 0 R 1294 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I96_N2>> endobj 587 0 obj <>]>><>]>>]/K[361 586 0 R 1108 0 R 1296 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CAP_I99_N2>> endobj 367 0 obj <>]>><>]>>]/K[141 366 0 R 735 0 R 820 0 R 905 0 R 1045 0 R 1151 0 R 1244 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN2P_I148_N1>> endobj 341 0 obj <>]>><>]>>]/K[115 340 0 R 730 0 R 815 0 R 900 0 R 1040 0 R 1146 0 R 1237 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN2P_I150_N2>> endobj 699 0 obj <>]>><>]>>]/K[473 698 0 R 794 0 R 879 0 R 1000 0 R 1131 0 R 1208 0 R 1320 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN3P_I118_N2>> endobj 697 0 obj <>]>><>]>>]/K[471 696 0 R 793 0 R 878 0 R 999 0 R 1130 0 R 1207 0 R 1340 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN3P_I118_N3>> endobj 627 0 obj <>]>><>]>>]/K[401 626 0 R 782 0 R 867 0 R 970 0 R 1115 0 R 1197 0 R 1303 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN3P_I139_N2>> endobj 546 0 obj <>]>><>]>>]/K[320 545 0 R 776 0 R 861 0 R 964 0 R 1100 0 R 1193 0 R 1304 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_CN3P_I140_N2>> endobj 346 0 obj <>]>><>]>>]/K[120 345 0 R 1041 0 R 1236 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_DIOLED_I147_P>> endobj 371 0 obj <>]>><>]>>]/K[145 370 0 R 1046 0 R 1243 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_DIOLED_I151_P>> endobj 980 0 obj <>]>><>]>>]/K[98 979 0 R 1201 0 R 1337 0 R]/P 36 0 R/Pg 27 0 R/S/UNNAMED_2_DIOTVS6PV2_I172_I_1>> endobj 985 0 obj <>]>><>]>>]/K[103 984 0 R 1202 0 R 1338 0 R]/P 36 0 R/Pg 27 0 R/S/UNNAMED_2_DIOTVS6PV2_I172_I_2>> endobj 974 0 obj <>]>><>]>>]/K[92 973 0 R 1198 0 R 1334 0 R]/P 36 0 R/Pg 27 0 R/S/UNNAMED_2_DIOTVS6PV2_I172_I_3>> endobj 987 0 obj <>]>><>]>>]/K[105 986 0 R 1203 0 R 1339 0 R]/P 36 0 R/Pg 27 0 R/S/UNNAMED_2_DIOTVS6PV2_I172_I>> endobj 673 0 obj <>]>><>]>>]/K[447 672 0 R 1128 0 R 1318 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_2_RES_I84_N2>> endobj 306 0 obj <>]>><>]>>]/K[80 305 0 R 1032 0 R 1231 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_ADM7155_I65_BYP>> endobj 319 0 obj <>]>><>]>>]/K[93 318 0 R 1036 0 R 1235 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_ADM7155_I65_REFSENSE>> endobj 314 0 obj <>]>><>]>>]/K[88 313 0 R 1034 0 R 1233 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_ADM7155_I65_REF>> endobj 263 0 obj <>]>><>]>>]/K[37 262 0 R 1023 0 R 1221 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_ADM7155_I65_VREG>> endobj 240 0 obj <>]>><>]>>]/K[14 239 0 R 716 0 R 801 0 R 887 0 R 1017 0 R 1137 0 R 1217 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_ADP160V2_I15_NC>> endobj 393 0 obj <>]>><>]>>]/K[167 392 0 R 1052 0 R 1247 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_CAP_I39_N1>> endobj 398 0 obj <>]>><>]>>]/K[172 397 0 R 1053 0 R 1248 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_CAP_I42_N1>> endobj 259 0 obj <>]>><>]>>]/K[33 258 0 R 721 0 R 806 0 R 891 0 R 1022 0 R 1139 0 R 1230 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_CN6PJMPRSHRT_I44_S2>> endobj 256 0 obj <>]>><>]>>]/K[30 255 0 R 720 0 R 805 0 R 890 0 R 1021 0 R 1138 0 R 1228 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_CN6PJMPRSHRT_I82_S2>> endobj 293 0 obj <>]>><>]>>]/K[67 292 0 R 1028 0 R 1226 0 R]/P 36 0 R/Pg 24 0 R/S/UNNAMED_4_FERRITE_I81_N2>> endobj 558 0 obj <>]>><>]>>]/K[332 557 0 R 783 0 R 868 0 R 975 0 R 1103 0 R 1199 0 R 1291 0 R 1335 0 R]/P 36 0 R/Pg 24 0 R/S/USB_F+>> endobj 589 0 obj <>]>><>]>>]/K[363 588 0 R 784 0 R 869 0 R 978 0 R 1109 0 R 1200 0 R 1297 0 R 1336 0 R]/P 36 0 R/Pg 24 0 R/S/USB_F->> endobj 562 0 obj <>]>><>]>>]/K[336 561 0 R 795 0 R 880 0 R 1003 0 R 1104 0 R 1209 0 R 1292 0 R 1341 0 R]/P 36 0 R/Pg 24 0 R/S/USB_S+>> endobj 464 0 obj <>]>><>]>>]/K[238 463 0 R 1075 0 R 1269 0 R]/P 36 0 R/Pg 24 0 R/S/VBIAS_CAP>> endobj 466 0 obj <>]>><>]>>]/K[240 465 0 R 760 0 R 836 0 R 923 0 R 1076 0 R 1167 0 R 1270 0 R 1328 0 R]/P 36 0 R/Pg 24 0 R/S/VBIAS>> endobj 492 0 obj <>]>><>]>>]/K[266 491 0 R 1089 0 R 1285 0 R]/P 36 0 R/Pg 24 0 R/S/VREF_1V8>> endobj 460 0 obj <>]>><>]>>]/K[234 459 0 R 761 0 R 837 0 R 915 0 R 1073 0 R 1165 0 R 1267 0 R 1325 0 R]/P 36 0 R/Pg 24 0 R/S/VREF_2V5>> endobj 474 0 obj <>]>><>]>>]/K[248 473 0 R 762 0 R 845 0 R 916 0 R 1080 0 R 1166 0 R 1275 0 R 1327 0 R]/P 36 0 R/Pg 24 0 R/S/VZERO>> endobj 446 0 obj <>]>><>]>>]/K[220 445 0 R 1066 0 R 1256 0 R]/P 36 0 R/Pg 24 0 R/S/XTALI>> endobj 444 0 obj <>]>><>]>>]/K[218 443 0 R 1065 0 R 1255 0 R]/P 36 0 R/Pg 24 0 R/S/XTALO>> endobj 443 0 obj <>]>>/K 217/P 444 0 R/Pg 24 0 R/S/l1_primary>> endobj 1065 0 obj <>]>>/K 53/P 444 0 R/Pg 29 0 R/S/mask_prm>> endobj 1255 0 obj <>]>>/K 41/P 444 0 R/Pg 31 0 R/S/paste_prm>> endobj 31 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 8/Type/Page>> endobj 1533 0 obj [1535 0 R] endobj 1534 0 obj <>stream +H‰„—]«$Ç †ïçWôerqzK¥úcˆwàM‚sîÃrØØ8½`ƒÿ~^IõÕ3= ËÂégJ*•¤’Tß¼ÞÞýíýöîã{·}óáývs›üûå‡Û»×W·Ñöú¯[Ü S­úCÿ»ºÍDz'ÏøxýrûݾÝþøÝ_>n/ÛÏŸþóëçþüË—ß¿þ}/‘÷B,Ûë‡çë¾ýˆÍ¿ÖP³fÏ¡:ÚÜ“Ëö|ÿ'¨üm»½Ô=úQ =”íË$ãã&6–pAšÔñ ç¸ýxûǰ““½xU~ý à'üÿóvóÉí)8XEÑÙÖ òq÷]ËÄ/TÚ6ëâ47ô)›Y,âX<õïÓš¢=v]¶l"[9· +u¯“º)4α õ¯ç˜t9Ç\°š© îÔˆ·p{ ÷»¿zû÷§>o_}øÝ‡\Þ¾þZ“€Œð;ÃI0(Ëù3ï©’nEaA’r°cang'¦6±»Ï)¡9à÷BqÕôåÖ“eY:ÐP6äÉyóÀã™K?ó‹ßÉúB;ÇæöÎrÙ}bUæö +#Ê’Ç…¶³¡1í‘Ói\]®ç=.Éšþ÷1ë-ÜïÄìâvï¹p‹#1ÈÑ T®FºÜ[$[4sY7¨{*wë:ZթظSnÅkÉgnùü×Ï¿Žçõ ÁDJcÊÑ×óîB\ر0¹AÜØžÐNˆT¬%ãÜA—9ŠVv;Ÿê„'EˆÓIÔЛê ²?¯¨i{ÜõmÄüt|?ßN•h/z€/Ë©<µîîÁ'“Ý¿¢LÒýñ;¡èE+bžÕSlU¤bâ‰~ƒ+lrAYÛ¹H˜:VTðG?SœèÇë¢PŠÂâx8)Uô¢S4pÿS„î“ó/aïžÃ0—Â*׊w˜!³tÀ†Žá +Z}™‚#jºÄ€k$ðžèÁ\Äý]„±]–»“°ïzÝîtÈðX¡Gòu½C|®WBÆqX+YVd¾žðX!£M­*<Ñu@ ?Þ*¤’¼ÆS‘סzÀ5d×°‹÷s”v5RÜÉO¿Û%ðX¡ßyøgˆO8ôªãð‚ ÚbLoÐE D‰I¼èUñ>Iú|Qy>;>çz³8¾Oë ØÅûYªøLÂêõ¬_&òxVH~CÓ¶sáuÁ®/´åhÞ… ßÈîInEí +-^ÉÛSÙ|œ**F9±ca¼°.˧úõèe1ú¦µKx@ïý2âC¼'}÷üe‹M;êXL² F(ÀL^lnD$2šÞè"O­ V· ¼JÔnú0ï‚t¹§{¦Ì0¿†R¶±Ž„àÅöÁŽÉÚÇ”äz/ç"B/P%냄PpjXá±ÀõA2Äï_$x±ê¼\†»:‚N]'õX_Á!Ütâç\XßIµ„¬Z%ÕéŠ +§ÃÀ”žì‰wxzgœyy¬Î3/¯Õ —çê¿{®Î#¢Ï ÿ 0Ëv½Í¨‹vï  JºVz¨ÄeEÇ‚X4’¹kˆNøÄ7Ý5/x€i-ATë ”9ä%ê; óT}4V¨âÝ"¬ÔÒÖÁ?I#†’S ˆrc¡R¨Ê’·càöäX¼°è’yÙsÒuðOÍÆðx‰j +Ü¢5ÿEKUÑc x2Ttz=Fr%FcÐÔ!O`«Ê¡Ö&ÓÎ)¢*fyÉ *òIfSA5ëÌŽj›¢©Âý †ta†ÅÖN‘:h^^á.yC òÌ6SaŸu³3¹Œ:„ö!)Ò$Áµ¡hE9 JÁޤEÁ ܶU‘sRUŒ 9t.Ah²Z‚¸W‰†.é͆ uCÛ™íÕ£u¶4ÛQP’P<§F*¶–œEuç&‡Û’} È»+Ë$ì©€Ö&™™E z€ @êH¦S;J%—0®«©NðY¸xó:ª"P ©šÝXW¥HÅ G¬àF }4ÁJ9¨ m‘-Èpž®ª\³e•CLQ)P_!W-;ŠVZÔWײѣ¯'%ņ($j/ ò¡å^¨,=ußÕÜÒVUq +šC¨ŠPÂäcùÏ‘ !àvICª +ƒ”^’$õ¿ªªˆvf· íYZ;<˜±wÒaBpA‘Ý]EÙÊ#*‘ã‰OÑ„´®¢8à*Ôk†ìÆ]àUôõzq<–+j#p˜qd~+ò˜\Ѹvâ¼muð¦9Áf—¡º–‡Þt&EO#)wؤR_†k\å;Æ:ÐE;d“ìz~Ì˃*&Œèÿ%¼Ì‘$¹a(êÏ)úÜ—È×Ú‘‘uW €™Ì˜1ª× . –J—Ñã¾Ê(HPÂFÈŸ#»ß?ÊäHZÎ1a•(¾ÓŸdÙýÎ5®3E;]g ŸVÚú}Éoª7‘ëûõûìéTæ+õ‹ÉÊvÌp¯4gŽ#[¶c¿Ä ÙÐI•±b°ä2$Ȉ¢va[^×s26”d1­hÊ+îʧiodØýþQFYR]÷hCµ÷ØÈRV’e÷{8×›¿Ñ×–¿IZ“«Ô7pž%—!Æ7bwó éÚÚúưé ÌW¨ƒ/D|#ÌøF˜xBVã›Ç¹ä-#Oˆ™>%”2h0ï‹ÂÈ©}dËöÕß’ïr“ïz6Én¹åƒØ|fò]ØÊnÝñI4ߟçwÉT·¹j¢9ûáeB+Ðé‡(>±eûêô¥é ©Èº„Y´C—øÌ;bnDÃÁø¡ð2ã'7„A—½¥´m@É|îž L£'ßHCSfBkPèŸÐ2]k¢ GóåW‘~<”QÚvÞ n3Ö„»ÂãœÍ¡¨á°7Îp?ë¡ìJè4sF4¬„k²;Ðu!ðüÆ.ÃP×ëxµUFûaXÒÃöàä¬Hb„¦ÑI.CêtÆe씽œ?¬óWL•ÎЧsSÇ<‚ðˆ» Ã7ãHm•±I³%€ózYC.C¢ÄšÚÅ-þžçïnßã­’À{¤O&ã¯aÈ#fPÝCÄÒßè²Û³uÍ4”2~W»«¥ºCp”Â÷}-ýÛ¾¤ëׯ)Š"©”ÞW JQ¨ŽÕBÈÕÚAh¡˜ÏÄ‘%è‹Ô¹¸ˆ|ó,¯u…#[Æ÷U)K»ÅŸÁ,q‚b®ëbÀ G5ÛS‘ÿZˆŒ†o9£±\gt†Ë|­‹0vÎÁ»hu=Íó.h‰4 !¹v†b~_wó®@¨0ú†.q†»iW¤?•‡¦ . L + +1)(vKÁ()!SC)É–@äUh» 3%Pl÷xH¿ )ß‘ÞT³‹›ƒå<´.jvPxˆè(q,¯æò;¹ˆŽÎjÖÅa"é^š%Ôü¶îá.¦|E ªã™çZ¾‰‡Š¢2>ÑeÜ™y\PCA´—£ÂÕQ’ÜÏ¿ÿ°I!Œ& Ú?£ÑOp)€H˜DŒ½Õ§,·Á~žv nC¦[-‚NœZ¶ð2pÓ"bÿÔ"h5YAóeEÝ]åÜW^ö‡•ÁÂ|º±há:¡ôÚhÖ€`[ýýòìMŸ’5­ý´úA½ã7‰Ÿšé`]¡3Ö¾bªöãˆà l]ï€+…Êé +ÅB}ŸnˇfÐ%SM'íLHL |ÉlS©råÞª'ñœ,ÜD{ U™ˆ‘^}ÿ1† ýŽ:èS ûwÙÅn{þr2å9ù ÷S§ùˆ`®aÍhaM>'(æØaýAÍÕM¡Q¸šeþ×BÓ£ºÏéñÒÑå¾F;*®@Eµã&½£Àˆ© _^¡ ¹¸}7Yí±+;çИ1Åêg³˜¨!?fG˜·<¡e¨=Í'êT5M|ù„Ý' / ½itb®× iN$!RáúZˆ›—ùÖïÞó+\æë¼«n¨îò Ú}pÒ¢’Bp,T¶ö _÷Ö<‰iËb··fHë)0%Quª…‰.‹ò§$îdj¸ÐX²™OžÜX?-Œœ$´ÇgNá2WI‚磌³Œ”©ÅnÈSŽNþÿ_ŽËâ‹óæï†È"úã÷å1‚}ŒÖïÚ.мp×v7&ö†¿ÄÌ•¡PWüZgÜÌe9ÒÎm—%­¥l¨ šn2–âL©æ+!k©Ç–o.õêÒÌ3Ú@Ò~|§€ñ؆–;ÂeüˆIGj){LfDy-m¿#\æË¥ˆÑr‹KL¨©ï5hºJìÄ$ýÃæNCôe¶íÎÎ즗½õJ‚h»¤MµìmWrD¿dÖÙîáXé  l[*@;Î$¦--í}-°}7u]ì¶çаárÖûšvpÓB2Vàe!ʶ›ù«æ +Gd„ýì[sTç³…—…¶‰ùÞÆN©c„AR‘yXú=“[™‚ˈÈyB1×ËLßÙ@_ï¥á©d†°±“@—§1_ Ñ•nžc*êI—š\) c¦#ï5…ÑÛVêˆjºÐ/¯ì_1Е;Ò!ñ®—2梂ç¬CeÞó°´àe!zõìÛj­ì?»jFô–´­9Ѷ"N”˶Þ"/# Ó°âÆT­bþô¢ÃZ„]ŠðŒYÆ5û“Ï –GPäF/9ŸNmÀ á +ìpc:Ð/›,ß¿¤«Ýv}©IYÛNŸÁOãàH‰ïF‹ä”ÊL©7Ú$©DºP³é³Ò™š; AxBxxj—õc+Ãú…©Ì²Žþx¹r3ÝáSÛ……™‹A§æ’^Øýª³EÙ®#íO»… í)ÓÐvé€ö«‰t­ÛŽ/ +C´y§´õPÿHFÔϯ…ˆ¦š+\H*€#Z¦óÚn +ú6ûZØ— +IDŽ´áßZ¦3u¶J\°|u‘Ö…•Ù§8&S4 Ð#ã÷öñô‹ã©èæW ‡v'œÐ2¿Œ>ç]Ű ~Y÷©âÇÓÉ-Sñ‹OyèVQü2£‰d¹ÀÍÄ=Âeüæ—tè,%}HüÅ­³4ÎpŽßNLÒβ}Å@Wzìø’Ë]/“øFYøéPC5£/$ض…®…%K ƒ,;A2Â÷=!OIó¨§Å¸ÇX½}†ËXªàXÀoÕfj}-,M5ü¹r›’P"xªµƒ–KÀèIÄð1%Ù&#‘-;iqS[Äd*²ßM¤«=v=¿xi¶O7œ"þàaZ[} ” / ±K_½ZÌÞ:v¡FrïØ ”©!í{¡­cÛï&²«Ýv}q€ 7>!è2)ÈŠtÉCºã–xàŒHxYˆ».ý¢æ +‡2’¤Þó‡ÏpšÍRAšÉbjó‰ÓÒþ»ÒmÇ—Ë«J‹ú0!«íåc§ôFvØË+4—Wóûåq‚˜ö«'h ít饦¡½xÄ)âÜ|%È®µíx¾z–ww?ôß¿ÿÈY7e¹f´ AK1Š¡êÊu0ó•AºÖ¶ãËTRä™pR?κžx˪A&i¶ˆ©ÍªCÛW ìJ·y<Áˉ£Ý ›1ÙNtYÔ>=¤2Óp¡ÿæzc|M~ÖÊB7ÇW—…,$§¹ÂsGŽšùë¬+å•Õ‚ÔIÓÐ:R^Y¿d×Úv®Ä¼ë©CWf(‘¢è²H])†»+ºÜæGØ’¾²^\ÈúpØýÍ^z^¢cAÔÃŽÄÌ™¦a˜/bó9ЮhºG"v¿”µO€k¨Ý+«ô4~ÊŽO²ì~çwáÈ!Vâì”֔]†uN†ËX.BëQtgŠDSov‰™‡R_rZJ>`ÃáB ²Îñ¶²³]ûvŒŽy²†uø­C¢ +âB@5†:·Í+èÖs[¯±\#LÀJÎ5K~z’ÖýOx™£ËµÛ@8÷*´w?Îà +œ{ Jûî?õœºOÛR¢.  +%GÁûÑÂc•£•Á|«ÅB©­t Å•®% FZÈåÙSöF¨‚5ÂK†I ‚U—Ú„:’(7ýÄ ÁRæ©&æÆËÌ^‹(5i +jaºóÚ&¤Ø‡¯d›fêU>f` ='˜¨2Ë]é¥ë¹ +ËÚ·–”ªb%ä4óÙrÍ‚e_J7,ØÉûù<©ÉwÁÙlPo¤¤ôXð¶ R¤S{]=+”^åÙåbs–MOYr !I=æHb ùš­@ùn)0o¯-„˜xP°šc³s¥ €•Þz²àAõ\¡‚õJ4¡`In-E•eÁx0[Ï«eN³+xªäèF Ch‡vW,+ëx†q«á"ÁN„¸ŒHö>å–'Œ(A«d™~B‹b^´c+Ί6ë¾íŽç¾°ð²Õc½í&Âø¤‹JÚÈü½¼|ÜõW×6Ù=8ÞdDK'ÿÕÕÂà'kå7lÚÚô¤Ø¨a¾×ýPY‡Í½ QZ [¶›™ªšûÄ¥cNH„FS+&¥?ˆ;K£3(¨2˧J…Õ:+ +ñ šJIVŒ¨¬¨âI0AÇMÚïIz\ÆââäVË@ÂÄ#务»ë¼6I&Á$â“E±D!V+ä&XäI'ËÇ ìM%¹<³y*DŽg(%ø:v¾–Úš¹yž/Ô|Vk“ÑA0¸s>8 ÕcȇÉÔaÌ`!%ɳ$T=—ÂÓ +-IðUä™·‚dô¨-mS¬˜óXÏ…À·Y{•~"/ª7–/¨À¬˜ïSÕ°¶6ý4Gʬ"…–KÉú±âÔƒ%ì +ÔRU-HS{ ŹÈÛ +ÖÈ‹ñ¦v½b¦±³°¡Æ$ËE“,d]ËÉ–‹·Õ6yæõÀ=ïœD§©ìÍ?ÛÆ6Âk'Ùe¶ÝD”½Ãþ=~-÷‹Aô#ÇpêZÑttaT¤èWºª8ËŒè2žÉåÑHYÚ²Œê€Æ©ýhF]åŸBéhYÑ`*ŸdùªêJ:bØÉ¤ÖCPHÞCïNK”‚÷‘Y¡Í’´ðX +)_õWõ9ßGçA×JÓ2û«õ¬ Údäª(qKQ¨Rê +uçTƒÁTÊE q@¬F"®uËÐoò5)ëÀ—Y‘\caÖ¤XÕSfO„ÔÆ¼@|ŒS…Xô2Œ8ùÏ “†tŽ´TÔ†öçGœÍEkdæ›=51znð$¯•cÒCTªr oJòôP¢pF-ÀB^…죆ðôé·b€¼ÎÝ‚ ¶JcòkXÕ7Þ ¸‚¼Æ©’\â!†6ê±f¡Eš³ P^G3 Y7RN^Oõœu¶*Å ZéÍ÷Ñ_¾äVrcPј¹ˆ„¢ +ú†Ú»qya|ÉÈ#v¡,…±Á6«.ÓOè è›AV9¨a˜/–[À¤Åa±I“wß?õÇ4½}?Óep‹/éÖ*qêBáÉ~/¬¸€»äE@C†1-Lö‹¤²ec¼,\…åòþ‰L»¿qÌ}~KšŸBòá¾¹“0èÚ;áë{˜‰4žÍ,'ò|UYWY$(Þ?…D£<¢Üah¸­oð€è~þ°›lÓ ýUÉ'6§ëœAËÛç­ò¼(wšYùņäÀv)¾À×RŒÍÆ Ùˆ|y‡d…fš”ÒïúI»Z×MÝ]?5yÛðäHŸÍä÷eW J ¾ýˆ8{„¦éòéõ½K’‚és‚ Þ4NãIõ MÓáóXNîeù©E¾xA°¿B¯ýM;|§ñ·Úa°Yñ +)*]Þ!­Ôª.tì2ÏŠR&„þ#Dü-SË Ae-&z^ø¯‚©·±eÅþ†ú«†Akï:gÐéìíοúDI–HBCnõnû*aûTNðu‚]&›Ë|ƒÏ)å;,¥Ew-•zaÜÚE×|`Y­q˜oPî”1îÒpš6ÂDK^â“D7>BÓðë7´‡opKºấ]0h^_0¡+~Ø”0ê¿È‘·` iøµ¬Ó.k‘fiTRtÙJPøŸé¸Á Uè þlÓýUSÇžîsº¼½Ý:аêg2é½)¬v ¯… 2ý®H5ÛЗ¡FŒ,Äé= +&xA±·{Lèç¹™·Ï[Ÿ'}Z="t{W ãKÛèY§é +0§·SìO~»ñK›å»4óÂüÉɆö{¡ì ¬HÂÝ +YXÿ:=ŒWÜád† ÛK¾°À ⇌ŒÓt@;×)¦§¿$À}–S®"Ã-ÈY; < !Ô*×oÓ åt3hyû¼õ9PÙ*'(§¨œ8%lB]jgK -i³M DÖ™ôΟçtz{»õK aÊtª%ÚävqÌÛE°” +G{ôKÏù ÓÃ,©Núa3{O¯¼4çî$LèJÂ>· ÓÛÛ­_’°¹¹,9µšjaGóøÎÞš¾`ïíÄ Ü­ÄâÈð¼à€f“˜Ùn£€Š,|àq怶§p·Qb©hÑsű§Éê²°Â&6´ü?LN_¨í/à´~Sƒ2j†¾œëhÜ!O·ð{—ñ×ùQ>i9£w’g¥ ^P(™U÷2ÐÁJç)¦§ŸË§õªš\ò’Qª’pA[8.ÓS`ÆÚÈùûœAÛÛÇ­ºï­Ëƒf*wCw²? +õlÝgtzøöR}1^H}ÔE¢ÓMÄ`HéG½¨dË€¦á‚Æ.ÓJfeÀ¢—)R*ñœØëÀÂÚÒ¶m¸6·…gðöæsa‡ÏìˆöÍç}}å3'ˆ4h\¸R°À3/Õý”8Áe¾Á±Ï,Y¥å}»Åä/ÈË;^–ŠœRò<µíêíÊ¡$³é‰QTÛÖ6ÈTucLL¥<ƒÓ|¾•¯tÚ*¡$)áÞdø.äµ Öa½ý²ÜàpÉ×éžXò!{évú¿mðu‚á¿Ë<üù›ûƒê?™a½Êîåc˜H÷Í ‡Äßç :½½ÝªÌÐÓ“åŠa÷Æ +Ÿ?8ÙwÏŽ9ûÿ ö6ê:uœdŒÕ"3°¨‚Ø •zÏÍgªgpšO¿ÍÖÍÙߺ>Øf\Œó=[Ÿ?ƒÓ|øuäïþÍ0àCbº%ùz*¨ÚÒË O©w ´¾®¿Œ–½?©—X7 Zôo-?Á«¸P´¾ßå0 «’ÎsÞÞn]_D\µð{¡»ndÌÕt¢w5åP鳃º^ ³©:«ÈUbà4ÿ¨&XÕ—«–è&<»f>3û¨!ùh¨ºªŠk9”óå´ëc™žuT^5ôûœA§··[Ÿ+)öJÚÛ 7x×,â¹0-ð€üOŽAEî2йC]ç ZÞ>oUN +î'eë©ê« ¤¡tûýZ¿+¢¬¿M&ôLÃ>ªÈë“§d<>yAëS¶éñÉ&¯S +œÉ{»Q>—‰tÊ¥ÿÒ]渒$7öçïû ÆÐŒ Ⱥƒ՞îýd—ÈÊB]ù½ cc?+:%Ú-^_ ÍÈˈËÌÎmº éàŠç®uùõj…ꟲ—±’víTK%χ´”UR (9‡–*è°Æ¡e,‡”1ëSÊÚ–ó› 7Æ*’Þ«ÑÉÔÒL°•~u Ñ5¥Z1UðÍ2j&úí‡)3w÷Y9@5ÓAQûå·#F–¯§”3襜Xß”挈hHÕqåZÊÒÍ +Is†ÒÙC½R*¡˜Kû©ÊâÝÕ1‰REÉÛÐG»Ö1åªù:fäÓã¾ôX„´¼ÎP‘wŸÎ%HËëÆ(òžÒãð{ié\€Àá?[€| °1™'7ÛJpš÷p>½Ý³­@‡2ôk8³­ #Ûúq©·÷Y¿ª¥¯"š\¿*…UÒ›`g*ȯê·‘z{ŸõûS +Çë'éy¾}%ú¤Ãñè¼øñî%Ü^;¾Y0O?ç&òýC@°Ÿn>e?îÌùs­FļÕêÙ¯ÎMGAÞ(« BsU‹¡—C勈*Zi¡"5Óƒ¯ƒº¸}︳ + ƒB™ ûô¦ }³)UcÔæé6ãó·j}§”fœŠ4èÌÔç.ÎÇ(>Ìo3~X¤É)ÄMhõ¾Èt•2ÏE*²éÕÔ/2B‹Bçúqм·Û¬Ï ­áa¡$ü}¡µ£!8*èX¨Sä½Ýfý P£.4Ô2 +Yè‡Ü8ÖcÅÅÐË!TðZ9ÖÕPѳ–iv{ö\¥øa½‘÷”ÎP¥X ¡|ìf.Áª]\,"îlH ?Êþ,›},,h ‘—Á©N·”× £*w +_âiì9¹Áÿz¡èz3/;´ý3±àH +gjÒCÛ??N‘y»ÍºŽ[ûßžj›c ¥k†¤ít-Œµ§ÚèØ(æémFZn²ÒpLÓ3‘ŸJ2Ö]qKÜ¥ôÚžˆX­£®éJ™NžFöU­!˜âº„fàf鑉íÇla ¥«á­cӳ퀟Y“¡—!H¦ºƒE Uøˆ)¹îN’›w¦!«è£60O·?h}oº§÷M#ò²$Û£Àcãéª;¸œ¹Á³>½&ë`YŸ£¦¾ÒàÇmä½ÝfýpëVfà§ PJÉK}OHYìu|9ˆâÓò>5wðòþ4¾mÉŠlcjê`G¸ÅÀ{ºÍøA*•÷Í×A³oßö)ðØ|¼FÛ¼ÁÿZê°vœ–6YjÝí¬%_×òÊEÞS:“ïû¦5⃔-dÏ]XòX˜­c¡â-· +øÌW@zBbº6žûRE¨“2>>¯Ì'¨ÐPGo˜æL„ìãF•r(vèFò~ìã›§F<à€)£È7©¨Q#·CÓ'~§ÏPŒe;Hçœí¯ +½ dœw¿ +o~S¹z¡A="PªM‰¶˜¼  àìwåÌ ²¿÷D8’XöUÄPÛzÄóšü Ÿ¡˜ï8Ö?ô¼•ÑOãVF/7Ù3óí·”+³Ìëƒ1 2´P{¼ å½™™Aö‡òDí.¦,g}O¼ÑË#$œÌuk[É÷òT®À*á¨ýñ*ë}õWè뿚ßTlÇÉŽS„Ž«zP‡UèE¨šßDhÆ‘ärê +DIüÈ>ÍØ yE 0÷’ O¬àøáÖAao…ª' +iñ3ó7¿×6Ê8ýBž¼»x„b~÷;Žg”vø…< p1ÏPÌ—_ˆaº_Tõ¹;!¸4²„0¦û½ÊøåŸ­¦Iý +S€º2ör,êû0Ûx¼™’¯Ì‘7±êäOcz$îG[ÂVdP­·WT_.û“½7Z©1(0ºd‰Æ1ûÈÄVW: q*©\±×J#e µ’¾Øz<µûþÅØ€zÏ5ɼÌ:Õ~Œ³߉Ø}?¬k­7‹êÅJ¿§RqZÕÈË´bi‰`³3Fþ¨e +»€Ü?%¸Sº¾‘qÍY?°m¹Ï³ì+ëx[uß|ßW«ìåXÞør¶Æxˆ<–Ù²˜„¥‚vñ v œuîßË`«sœÀäP˵q¤Î R)h³rWu¡|FbºóÛ¸DÅVñ? Q&\i¦ór?@1¾¯95…û:Ñ$•|.ê ‰©®“‚ðjJÚ:bIñX´ï\ÝÓ5ЄáíC€Ô¸Ù6©ý\ïØAþÀÔvGwºúгvÅ]A¸îØÃÍ´£OLlEó_…)²ßÅŸ¯â1I&“Kp\ÀÕ%=1O)ƒ]‹?”y1ñÙA(¢sÐ.TnŽqƒo'ˆ®ë Úq|ƒÆè¸íi}´.J縅¤ ¼m‚yjóCúß§‚ž5%¡O z…èö¬4*³— ½P!éV[ëà„ÔoäEš14Éú0Ä ä¤:3'ã§Ð<:³–åµÀ¢ ñ4·… 4.ð‚R-h©ÇA˜Ù=˜ê: ­ë²ø“Ü^•½rÍKYÊ•¼´c«JgRpfã%åÐÖõ°ø¹‹y•_Œ$%ìR}%CáÑ@ÊàÛ f_îÞÎãü<»Æ4™É$É*z£¯Â>wbUi¾!•Ÿ!vîÇËÆ*ù‰êÁa¬0ýukÿˆÌs?>ñË­éðNaGã‘La_ØAØ×Ù›°¯•iÌw®Q°¯‹Ê^˜> ëÜò1Às‡*Ìü{;°µE­“çõñù@ïüýX"’P‡1 Ù›«¤›7øv‚˜Š¾ñÇ7H›ÇRòz'xé%É“[넨C4 +‡"V'¤‘6žĸR:•¶ýœÇMoÃV;È}c нàKù¾`äú#®ã¨z“>Í5éZ ‚[Ͳ²VL…ô94ïhùŸ¾â%åUßðßvüñÛK~ýþÇ«òŒDöD?˜\©$v¸×‚Â6úýýåoñïßùUüÿF£ƒ\äµÄÐéJôà-ð£ðõTù~‚Lp“ÝJQµuž‡çå+CŽXÐÓäžòcj(ôצó1eµ +¥â?Àš šÕ€–<IIÇü±2I <÷o^ ËÊÁ¢Ã`KS'À£Jްu–DŠ:ú!9ú(‘nËÐèYT²~ºóHg‰Môk¢I\q̺z`.‡&¤‘ ¯ei¬°*ÂMû`n¸<Û'Cûµ®ØâR•Ã4Gúù®`c«"(ÒCS³ˆ³¨&öÚlD`éd¯Ü—H˜‚ ¦iž^*vPqŸp:`JÓ~%äk%—ä v^xù,’—J¿u;=s"èA@ÇÜI’ErŸÇq_¿yK2EsN}^h`C¬;pŽ8£Y¬åÌñƒÎŒ-Î̇î=ŠK"„Æ Nç[“•@¸‡ß<{º™¥ ÚH¿)L¢S˜÷aè ¼À2¦ûsUS7XÄAi=å;xýKÉñ3×›äi³$.7V˜]gƒe…Ù­cðÆÐâ•kÎõûÆyUfÖ ý…ùs܇ý9N33t—C ­Ñãã90ׇ±– Žñ~#Ĩ“]ïŽh#¿R¾øj)ÑÊ7åkeUªÏÞ¶6¥ãû+ÑðâJMš,\|ǪTn--—ÊykÉc>s`L£Í‡•¡(¥Žâ™9_p,¬wË ó²±¯Z¯Ý +-ÅzåÀ$2ÊSs&§+ßx§k»ò·—çqØt°Ö]ëÕuV¸9CbČٓ>¼ÇŒ½åyû¥÷ W]âö½ñáé ú0.ö»Úð§˜qÖHŒOÉæE—NXliÔÛ:ú`imÅIëÒ¶Bbu©_Ó£0 gã}Ü*ó24+óri¥#ûutÄÕ$–ø[«qåhsçÖØtU&ã‰ºŽ¿X™‚f—ø&Z™²*sܤ²;i7xŽÁÈ +a5X!‰äqovzÀj±ö+g  ŽòèåÐÞ`èáÑË¡sH]³®×p¦=%mݺt¢£%îP—õNŽòèå±o>z9ãˆv¯œy€–3ã–3—¡5O—fÎÐyL¬;=ÖQÝœAÎGßoî<¦˜´+gÏ1~¡›W]^$A ‹ñܯåÈ™<@‡ +ætØÝP2JAHöê~‡œ[%(eOJWž6qª\·6l5SRºK²Ë™pMu¢Ã¦ÚæñE!©q–^’ D+žm¯N/Ñ_ö{¥i»íV*cz)»œ—d ³g:s.«œ{Õ屟Сiù›·\5ƒœ+²zëKî»·†O@þ¤ÉuW,ª>r¹£ŽP¶{«IreUæ®n´u·ŽÛ–²zkzsî&+n½¸ Ê­Ô;D7ˆÜúpZÍ¡mÑÜq|»Þw¿Ô3Æý/˜u4©a²õ]´`ñIÔâ±® 2 +èàQ9¢•¾bÃCËa(Ï}õø(Mêý„PØÃŸ~ƒx¤¨ŸéÙ½)„pmmíU ÌdÚ×n +=•J¿ƒÎ•äqÅD´¶lhï-Õ{ˆ;ˆqšÎõÊîL4õlÛ•†i +QOSiI •œª£Y +>;eÍRÂlQ"Ž»,¹\A™EGë˜ö·ûEwÜóíåMÝ3X‹jÀoF6eÌ@!¿ì¨§LèŽ,_$kîh™>¾+ØC +Žèìàˆl-i‚‰‡¥ jw矛Ç1ÿf r(x€=ñ}Ìì‚}jë̉S Ô-™Jz<Çi(p”â"5›8è΃œEŸ¾ûš¶ÎÎã„4íÐ\.mГ֢{ŽšŒ,üßÑ2´»˜ŽÏ ]Ó²v(ô>f/=e™³¤P? Yy¼ô-ßàÝë¿ý…“ ð•ãóÌ;ú߯G=@N‘sª>!À’mÛU·†K¢ÀBÛµC¨fG¬jŠ¡ òlãÔ˳d°Î8X‹M‚¬üÂApq_©°Ïê@îÓ™†¥ÈÁÖÝôv›ßîíå + 0Û.6¸±êšQFtÚH×J[¡N˜ÕK"(^js‹Œ+Ћ¡äb®t¸Ž@s²’€¹tK[€–ôé‚su‚¥Ú…CjV[dKºN”×ÐËÑvWH}4M©˜§íJ–PD;ƒï ß®5U*x7Yix!€(S«xj¨%‚¹M—p‘°ž¬´äNA¶žÜÕN²„à#»eÚ@tŪÑèuÉ¡„5jµúZKä°bq¿ƒ;ظ¦ ¾þÏ=’n×ûÍ×t¨Q-‡cžÑB‡Bg²«õé:óôŠz7î;î`…/ì¸ +f™±(mrÇ#Zã‹ôœÑŠ[cDÿ³:mK®ž­T}ÝÊ9÷™b0œ¼ÐRá‚‹E,\)okïý)H¢3ž*»³+§íýé̪kœ Fö×~¨ô×õoïÂ='®ükz³†‘Òª½VØBðWáp£ži™¤Ð…•Φìº|cÃI+LºÆéW@¥¢§cÛ‚–I YއJ¦Mç +Œ1@Ë&·ÜHq¥‹ë+$ ´<˜#–~}ÏèÀ|zÈuI&‡½fehFwüϘ…©ÑxòSo:&—F­¦Æw§ê!>½lAtKdÿ•¸6†ùP°ík'íqáøÎÎ\Kˆsê + +“³¿J¢Ó¨ö‹ìÏh‚UB3â[à‹[Ë=`i|›`¬½ ôœMšÖ_ôQÓ ¤›ry¬Üñy`uln«Èþ i׿v¡›’xj¤Fš yˆ?¥,Iì'Ý–Pôðè v(Ó‰~Qêª?׉êlS'’Â$[ˆiöqÐE3T“Œ9hòôo'S%Ýåv dèñyÍ·—+4#Š‘¯ n—þ<¼I˜(:K¼è€šNkÓmѺSæÆ>å÷¦&@©µýŸñ*I®,{Ÿ¢NàЄ†}GÔ| ÿûo; !=Ûå_ObH ±˜õšBî»ÅzöyNÊþ¸‘xM0ŽmB–¦o¬”Æ(‚àä¬\ wu ºB‰¯ÄtnȹZÓ¬*€PžZ±+.¼¾¢ó$þyXÀCÕ“XäÒÊWW5²tE›ÅÏ`µ$b„½‰Õ$‚EOflFŒ+ˆF6èßéÆÀã:¯\ª³‹«xýyðÜ«šNP}©U€‹jn¥œà`s‚ ô²HÚ~È·ŸÂÆÏ¥ö¢ LºŠ1 Í@î\=Ä”ÍrwyºäòIH úCØ ++7Íjž'y'ì«¶Bšwb©e©ÅÖ§EXÀ}¸pôÎÔV g1W¶¶j³Ç ë`‹šÉVöó$âsÞ‰r0P£Æ¨ÖP/p¿®iH˜•<Î4t°âOî( +Px¦áïöûX­ååAx ³»V;‹]W«Ž—Ä-É@eSPnµ9’ÅPTêšõv^!4C(÷ìXØl­$17@`€µíüËëÁZYíN¢ÄúãΘâH÷ë!Xk¸?â+Dr¤±ÚK Þiué¡'=âãóÊrCLÚ¡§%·I¼4pDÙøÜ¢”Øú\ :f´ÏK›¯#J­¯“h­Ï!Œÿ •(¡ Ö“›'-²ÝÄsÓÝYˆh¹î/'AÊœ»7Ån‚þƒÆ>åKõ%ÀœS³;GŸ¯³(Ì:­yJ¡ÎÏsÖýa‡š„VÝ”Æ7t;µSÜô„cËi<Ám’¯‚pªÜ^'ØKY}Jxx€ÆXb8Ô'ã6@¼Rïã!ôøxŸL1ô~ßÚ‰¾ž¡+$P•àQ:ª€ÁR©UpRÇç+uþ¡•do’U@F¤“8#Œê2A”çLñ('tŒk ?a2¹ˆ}²pü‰ 5@\†‡¨>~/­æ¹ñ(¶˜Éâ Oè“ q@žèçDiœ7«b$¯‚k å4Ù@aG†+ñs®PÆûç×[æN¹Ài#`¢à¯z9Î`i‘ÃûZFűïMŒH5˜OW/‰œt®B¾ ÎC·½&1Ísûœhj„l2ZúF±ž†ËF X²­A&?ÀZ OÌkþ ¢ä“¸“Ú¹jbÀ¼+rÍ¡–6Ñ2†ˆOçD`½³l‡Ñ÷anE.'Û®#QßD¹ò¦ø-"ª1ÜDˆ,ÓŸDˆ\Î7xÙ®ý Rd­ú-ð3†ÊM =<ˆÓö&ê%”¸WÑÁ„ÄsïÁFóƒ Œ¦¸féÁ¶¬<˜à¼pLX{&Äfu1aÙõ;&ôŠ^Ê;ö'X÷»d—X~lИ3/5÷aC±åÝŠ-£ÿL‚,Ýí°Ï³ÍSo¢ßŽˆ@} + 6¸íù¶¶R|ÇaßQèΑwƒ—!„Ê’„þ,&MœU˜ºr}\þPçí¸õ7vøÕÅŸš– ~Fœ(ê«q¶*€µhØ” ` E"¸ì˜š>Þ9y±Êî”8OúyˆE<™-µÃŒ®KÀZ *‚SÓΟW­ùÔTÌ-“E'D}}5ôsqóóíMÍ]¨³ÁmÒ÷­µYÎèËÀý¼WúÀÁ~!H'(IÓOç:ð³…áËÞo]?ûÖ/éç†ä:¿¤ oüÉn÷}_Ò’~€»ëwM?ƒ«éwM?ƒ«çwM?ßéZ¾¤ŸMr_Òß4ýËÍÏ·#4»Ý;ðèö_IR‰Ý‹†á.~ÑÂëg)~‘Ø ´â5}U°ºÙ¿nE{jÇè¶|^8Ò7³hý¶ÑBÜZØA‚ÍR±@1æ7ƒHïür +ñE2pÜXŠöøÕÎÙº§Ð6ÎÍ"Û=‹’ ±5‹" p;6‹" HP6‹°Ä«Ì5‹ærÏ"€4Ïa|bæëä±q´â²f‘"¿D‰e6zV +T¯Lëoõš9\QPu¾±–Q"ó¸è&_Æû¦ÛÛ~ÎÜ2óŸã”æòXœ*”A(fÑɰ`Æ®ãHÌh`g¤O±¬ÈÔ[$’Æ2F2ÒFËÞõBjE °=I›‚4UJžM¤ÇÆTï†ÉÂÃìôî½û|Ûá€,щ$È6ãûPâoÚ‚äÊ­û‘[àÐíHAæRh–aw6b9“³ÓÏ…¨Ÿûº_ßC{nn/=`~ÖçŠ lµ![¬m84¤jÇŸ;{·iD*OâåRÀl#$G‹?ÊÆFHêxOŽlèɰw¾>GE®)ZîdËœó£T[ìrÖ§·ÕܶsŸ>Ày +8ÔØ¨BÐ4ÛB0ÆSæs-¼S†/"p£¿[J¤®:x¡2­¯2‹qâcŽX0…•MV1êˆRÅpŸd†jïT.K"yÅ@Lû ‰ˆÌ³`°s\ƒãªp%~Tq üV\׃vŒ«`@_Üù°}¦XÚ>3ÆÓgæsí3­Ûg@«ñ×ï4³Æ«Í^H £— (0['Aì†VÞOböÄNkåÝ™Èf7ﶨĶ.KËWT‚À¡98ß*A¬ë*A$È‹M·žÓ°¦ãÌnf°@_Т-hM†-hc<­ÊÄ4e‹: _FõÍɰåŒdÔv—sÁ<«¾œ‘ŠÐîÛ IFõÅŒT„æ‹™ócKYM§Í§ZÈàë±ùBVXÞ+d_Ä—¢2ÈŠæTÞC ›«:±y+šÃ'·òÌeîÄØñeöu…œ n;nˆ<=ÜÀ"NwÁ¨ºÑ®hP¾ðà]©]<ÞP:å¾­‚O7dN nµƒÙ|¢0ãî<ÌÐUù]Œ…Šv°ìAó„þí…BBzSÐí + îe£{23r¬Û¦œX˜î,©8¢Œ‚e/Ÿ3¥Ï*3 +`…”èÅ)"…Œ­ˆìaDœ¨©”R5-Ô…nªîÁ®r’1Ž8ã}¹M=õûN„^÷¨´ª¥Ç¤ªEU“<¾yq ËÑ@åŠ'7/.q½DaDu4µõ´JMâ •O¶ÑõýÑÅ('jÂ=mZqœÂ‹™ËE(y‹–g ÝV“r6.ã Œ¸*âö¬õ©‹¶ûN{²ÊC6j—4k'ßÑ@w•¿Ð@Äq(¼K‰ñ’;”l¾Ûšž#M½1TE]T†GyœÃ#<Žá¦~c'Âf‡e‘Aú8oVãÁÕ$ÆY.¤-h4 +{.‘eñÓTX¤×pòH#?“ݶQ»¤Yã;H Ó»‘~¡rà(|™·ÊIDH«¨+V9ˆs<Ñ];g”ß'™BÛ;•lã×8TV9HSi]%¨°zÐ¥)EeÈñdž´žq¬ú…îT­<øÌ9#‰Î8V˜ÚPFª2K'¯rxØF’:vn«ÐÁ•ØŽrÒáqáfØ’èaͶ£;ÛQŠ­-‚ŒOÚ"Ž…ï´';ÛQŠí(1žþ1è,WGsÇ…¯uÜSÜ>}:œØÃÓQ S‘ï´½7ä!‹Kš5¾ÓQ›pÞýôBΠ ûˆí–3Ôã9«rÙrÆ®SCÖ'H¬–TbIq¯Êr²uUf•%Ò©3•3¶G™Á[r¡rµz¨ädú\7¼yyñš)U—ÂgvËÎÍÎmÕfpÂæ«Ž·ÚÝt×ïBádÜ'YãØªÕÛªã©QùúÿªX(ŠR}Å‘¯¾bÁäkó[ÐhÍWößl.]ÖøN½úZ½T‹04V-§Àòû¦©ªZ,oݪå¼ÇâÚ¤¼ÜèB?lVnÑ-ä£G—*‹OÚ¤–<º*i,ºËE‹,ŠíúûB¡Ïîè´ËœM¨qñ Yá?æô`>eÇßS™èÀ­Ç Òÿ¿' ë£yyBñ,–'–¤—'Ûðò$Ðcñ¨ò„”]õò¿Æ0…·³<‘"²ºõ 9œ¼>‰$E¼> ´¢•³> 4;½> 4ª¼>Á‹pðfø«vèm<¯?Œû@§æ„ +³q²=¦?.t:b¦³VN¤Ôs»M­Úïòõ ö|¾g°ß›¯‹ÑñÑœ†çë„j_ÃûÁDløÐÕx‡n<ÔÐ-¿>¡[íñFèÊ®Ð_ذ&ÓÍ9tü%W³ç¯¶•¿Þ'™Ù; ñæ¯&£ç¯aíÇ'þjûUù«íWe¥¨n¼äø«ísòô«òWÄ”‹ç¯¶5•ÀFâžÀÚÎV~E}ß=e<œÎE >¦†§¾Ôx×—)ƒS_†mžú²ŠçúâMU× :·æH¬7£2=³Óǰ HÍ:Ó9Û—Ê`"­`OçlÖ•ÎÙ’e:g‡±Ò¹@ ñtκ®tN‚¼O õ¦sǙǾ1W¢o5×BC½„‡b߆øñ÷_ß E!:û»?ÿÐ¥¿Fþ—Áà!¿ïͧŒÇ®ÂÍxÎÖØŒ'÷;úm¹Cwa3/9!?‡O¸ÿ#Ö•çø°á‚œ”†w#å"–€ã XÅNíý¥ø§†°ms1w:ÕÁèo5~.cèË(÷=ó§ÓPKL»©Ó2<ß8¸cŽÆˆ´¬§7ëgãˆa}~xýÌÛíY䘺 >Qäi 0a¶‹¥Ò|1©7ÎXm*3uý©!kämVC"ÙäÌÈa¬ù•€u·?—¤g÷mÿêÑÀšŒ1ÞÓ=aõä@Ü© ~±&6–Ò6!O¤PVÿ ì*&WÇ7Œú‚øVêj¿‡Ûî![ä;g©½I“ïD»w99»œÄãûu€¶b@çÎÆ–"NVºÎÆ–øéã9ØRb'wŒŸ?4'ˆ'k?vkÏœ–!j·3;ö»e–Š…7˜Êc©Õͼ¼Ye™½ƒ':¾òclSõÕXy„1‰ˆÛÍŒSZËh”B¼ *!ÁhÁoéå`Œjƾs’Ø€qgƒ|Y9\»äø²½^Y ª +9> .šRqhB.gŽñ›1D§íx5,WR&m–kîѳaø‰@h+ú£lÔ9¤7Úù‹} ^yÏ>/÷ëç³ÖÕxovcÖåža¿Ü1ÃÛZîúÂ÷û= å©ûÆù´ßɽ ËTöûñÙìwú|¬n6û=‘’U.û¢+²Êe¿ÃXšœ”ý¾Ö¨ßï´ààg¹÷;ª~»ßÙó~79Ò¯¶_myIö5 0ZÆb¾”ë7[>ÓÎiçØžým­-±ÉøÏ xw”åg¬R"rgfo|…¼ö¸ülÏ¿(lj¹~T‚åkgP$ð#d Û£c;—Ž1aÝÔÛc°HµLÆÀÆZ*0ÄC³œÏ+‰Ù\#¨ÙØ2ÀXÇ9YF/ëó’ÏC(…¹NnûiOôÇæ-'̵9øs¬ûN5` 1.Y¼ž„ 7Û˜Rëï ­R;¯ßÊÀœƒòÌQFÜ6"5¨ø¤3NφAÔÎ&ž³jü\ÆÝ¦zëwS8" KþÉ¢M§\\Lû·¯e© ‰Û†åLh\½àËZÖþþ´¥½{Þð§F°Æ_ø³3þlÃí=Ä–À™±.Á˜ïNúÐ}¸¤ê½þ‘ñµõñ3ª Mêl+˜ºMnlÌ­° ÓGzr-~Ã?ŒWɱk»®›ß(~§Ô7qü4¶óŸ>€¤$jÙ»™¹°dŠbp¨Ô# ;‘›‹qs²QäE©ë&XWaD£ÚÄ›–ªÈËÏœs]'c·Ûóê}?ñë¿+*uŽÒnð¸óFEqÓ;üŽÛ2–¯Nqß1oà«þF±†V­ÄÇ”Îz:Ú,:è— 5Þ–ÿægçjwÐ4† ¿÷ÆÐêÍi0ŠDG--ÛÍq.t¶"òÙ{9ð!;XˆL#QlZcÍ]o£¶-çEUí5­³=ï³ 1tôu[½ª–×zÅœ5dCóPü+09ÇŠˆ¾øë¿;N¸×ÞvÐãÙ·{KàÀÿ¦ öÇS :¥àÀU)d[ž|¤@úúSl›Ÿ*€vB[Y]À;Ç[ˆ'sÇÙ*Àûw*@,ˆ:ó@Tµ¹¯yKݹ¶8ÍyŸµ + ŠAìÓO¨ogWú‰ê²q?!|K¿‹ÐÊý†þ’xIŨØÎ’MØèÂ«ß c°€¼2át·¬/ á²Ô†dJrƒ_êÜö~õjr‹Fä'é” ø¤`å~¤W™ÜKhʱNèò¹›TÆ!,çtì³YfÓ¿šíï3T¿ËŽÝ>3×.Ç\'SØå¢¼pÔ¡r`^~"­º¬…Í~9,öw}æn iÄ/d9óÉ#œÐEšÑþ¦ 'T½—ýù%`…r ýÉAäM½<˜mÐ}y«Ådÿ.Ɖ:Ó÷ÛÅ3ñ!6Æth¾ –ƒIÝ8 {á…/3pP_þA¤V#š~%X…éiržW¡V¾¤;P˜`©lÂôë<M0}"8ƒjbç;eôº}¿R¦«ý ؾûD8—|v¾ë©`¯î‡ß‡¼û<ëóÄ(ÊÖòŽˆS²ô‡Ôô몰­>W§]K%²óqs¢õ,ÃçÚX‚.ØûbÎù/FÇ(ÒõÇãQ9‹ý§í1c[ä›BS_ÜO™&6! ¢~4A]'Çbþio#˜Öä¶™Á¥ +)fÑ•Îy‚-X8ô™_ÿ]1Â646x\znN„V‡«L[y(¬èj,…C­Æ\­ñZ0°—"Ž`•ùÄ•Wñ¹´1WWÙj;à Qh`“nÖµÌU=G©®Z *¡ ŽÅ·†{iõY›8A¾Ž®†9Œ·³ +vˆ~ÛíÌ"§ç‘S–ù‚6J5õAðÜ!tÆ-ø Äg(kÇspí½­«Ý _¯¶ÕwÁ÷“«ÈR? ¾³§uµ„úQEt€šÛZ7‹#£–®´s‹Sš?ûd§•¨²OJát.–µ­-1 ³YbékŸTåNš«ÙÑ +%8“­yÚÂNŽPæ‡Ú +—ó‘CKáÏôÚŽ`›6b7x\ú³àÃÆî÷À:šOaÙÁò¹F‘"UoÿÑ#¯­õb +®C?2TãP—ì¼ÓSCJDaŽž +¢=¡¿zæÐSCL#¸àê$¶¾ÛôD¹Iƒ‡žøÊ€‡žÊ`ìÑÑl¦åïm;“‹º}èi»=í¦EO"¦Î‘Ë™ô7A’(?Óo˜”eŽqˆÕ}x?‘)ˆÖ|ž5ð ÿcôätzò#9IsËjæÈIºS6&GN2³îÈIºsgÿ TØ“Ž›¤c#ÛÏq“ +˜R<5ÉÁ@?5 ØRlžšTƒ0󎚜뇚Ü#5©ZCë»,‡Äô™ö1Q Lâÿ•aNÝÊ„o9Ï/3”‰û¶¹È{oêåÁ¾7gµoñÿ½‹c ÉØírq+“h +eØn /È]nHôÀ.Ê„¾Ì6Dév`e¿GÓ3”I!˜»©‚CžRM²‰ÜÞó9YgKé6ŽÍ%Q&xØ~Ÿ4çÁñãÜnÏÄ®9Îß§(— ç’OÏï9ò¾É¾|»RŸÿíñ¾SìNÂýìÎ8?ý1ÝÛ¡¹†ï.\è¥ò–knº'°–ëå×I4ï.Ñxmv9Õ¨rauÙ×Dã}®¢,ÑIÅ—Ë2sÌ܆¼,çj{`¦4yfÙ‚îœÙiø}õÈdáoöùv-y-Šn¹p§ ‰šMg):ÁùË¢±ú°eàø°ü¡º o[F<é8[Æök¯‘ƒRƒ|VŒx²vô<^°ºû¬`ƒú¶b¤é^/8¢ƒæ5l„uó~< oë…ÅÜù²³ð-3Fkß<»nêŽÖwûóK@mâ *wGëÚÇYQÕŽaÌj7?~Lx·†¾\<9oVò4VVΛ5Àº7Ëf=M_úµ§ƒµ­ îͲY[lk$”N8ò±©mQÖñœÔ¶x˜¬YgçaäóåǨn+õû™˜Êíü];Ûe¹äÓóƒG”üa\žÒKѸÉ&crZ3DjM7.EDÊz·Æ%‘žm2F§†›ˆv7.eåyd?.åd˜­ùq)`G@÷¸4ͺ—Îí3.ÝϸZ»ìáèœùm\žpê ûÎàÂ3œc{†`èÏpÜ­´"Jp># +0ÕgD–üŒ(ÀŸØë¹HƒŠ‡…ö *À„J-WP93Û3¨kÀ;üÈ—X2¬g“”ÿ¢š¹íÕ»…~‹è¢µ-ÉèõÐÏZ¡Ø,CÎnhÝ ºÓmÑÙ¶Nšuƒ}çEçodïà¸/·’Å$þ›åÚÇQ½è]6ß5ïGÿ°`Ñà7ª—CbHÃ:Õ;¹Ó"Ë—ê¨ñðªw²âÈ·‡¨Ey¡½ÀZ-³^¢—`l}^¢—`n)_¢—&cªõ½ð„Hßè=¾;Ñ{^éD¯ âç%zK½²"I-¾‹^~«/“³DÐÙ^l …ÊJ벇å6ô«æÌ×'ÁKîÄÒ—/Á pë-xI%²ÙzÁKz&EMˆ·3¬·àe­a¯­—àEa^‚—'EáxÁK‹m=‚W[­¼Çm'xÏàÅ0ë<‚÷8óû§8Iµ½e‚,Nû¦I ± Vf§óuÈäÆé¶•5²¿èŸº-¾‹ +ft*/ñC™©^½ø‰Mœ˜' MY¼g*NNþ;ž ç/N'@cYßàQe¼j!¢cš°¦ð ­È v>šãÈÒðÂGžXPä^ø°ZWä3;¿jÞ4m”~Ö¼û³×¼¼5ï㬋S¼æM‹{þ¤y/ß5/¥§æÅµ£<5/}©OÍë<š—`÷y§¼8óSóâöŸš`šOÍ Ð‹kÕ¼{ñ©ç1ËSó" +i#"x]œ?ó?dšH&X*K¡ޞƥúí%4L3@){"’mxy$oeælq?ûCÂU7¯üWAEKå q•^)oÝxF$énÝxy×L7œ'Þ:Ü&W,ªÓWªÿGyµ#é™ÛÀ|O±°Š/ðzçÞC8Ñ$¾à gV;V•ª¤þð“`£ñ؃öÜ0–“=7âa)ø©Î7›Ã3›ÍÊÜxüißš!Š=9ܳø9>i ¢kl°g¶~îY±ñ<ÁêJRZ|~V'W,%Y­Bã+g×#3zdW°O=2ÍÖ£t Ó™¯'Õ¾'£Ež_§ãeC—ÿá„"8êNÎhß³Ìy§Ïõ}u.&Ê-½eçÑ…ÃåÉ£y“Ë·C?Bað3¿ç!ó™Q„¯TÂQSDÈßÑæÛÐ;»Ì‘ŒŽÞÅCñdÛ9ˆÊAÙ?Ž]%£™zÍŠŽ±ŽŠØi§¿… EuÛ¶o590E\Ês‘B4O ýs*:æv ø?y# ýùÛMOÇ:•Ô}RŠÁéïÿýÏ×5 ³T“cpâ¿}tÿößÿúí0Ýå`ÎeÖã1Ã@l}Y*Ô|ðéG©¡¶æã°ûëîbÈEŒ¢ï½¤áîÂ3!lTä§évå.‰(¢;˜ì™è`.¢Ç  ’;\E jv ÐEç‹¬ç ©<€Þ`µ42(ªH3XŠ.FõæÊ³È fཹóÅ»¸?¹\ÎÏ9*, ãèrÉÁïȃ+Qÿ††è/Ä +*[ŽÙ1ÛȨx:¸Å4‘é²5 v*©;¯@¾v™´®_N!‘†äãzÊÇŸŽ pJóH§ÓÜ4عáÉVuyÜ0*qÓ`pÀµU+€ýLØç`ÞeÎêgVÑuŒnYe±èRlH-î[wKõ‰×Àì•<‡ùÏ—4ŽšàÒ¸óñK–‰GÑò{Ïï†Å_Úà­hûsÆ8ˆÈ€/Á¡Ñ†ÿO˧?(…õê×z%)*kÇÊ'¹Â(5ÞFp°-\„´"žà‚-\$©ÔÅ­3ylC÷µ°\8òË.€xáh ƒ¼JÊ«ÈÏl•.€¶p1¸xá¸{»Ã•‘|ÜŽ´…ËŸ˜}á¢]ê<Á™®¯ê.†=™?óÊߊ¤B¯:Ô|ˆ¥ƒ¨¬&#"*s$ÀZN~ ‹‰B4sl´ZË-¼¡ÌÍÏ\‰ +ÎäégN™ÄŽé–³ð&°7EH2H NªçEúÏøÆŒCÜILØ(ÉÆ§;sñù«††¬ÛoúœI±TQΞ.œÁeYîÊŠ2ÕJ½­‰ÔÚaõ—^yÊYïd`QÇç1'xDûÎ2x}Ø®Ó @š,;ôÍ•lUG€5qýR v,æÅC7Ÿ¹üç¹7¹§Œ€‰#9XÝiù=Db€+iºïµn—ë+Qh“ÿ9ÞãÔãÅIèë\ª,Î2Ç=Ãä@l–Ù>obI¦î«} a2a?¶ +†áÅO­O3ýì`É(„N+½"ϽT$´:[…‡V€ƒ4•Î +­18›ƒ˜ ¶¥E¾ ×à_°hD–Â3wlh ·Üúf?`MbTGœbçd—zÇÄÄ—4Êî|hÑþLúQ›ÿ¼'”M§ærÉÁ¿Î+XCÚœRÖ¯Ø û›òÚòÊÖþÜ –e'|„¦KÒ9]<îÆù ¥Îà‰)âïoþ®§\Ë0-K°«ÿôêä‡pª˜Y‹ÆÌYŠÄ«N à–-qŸljNåší`¢˜»†!Õ¹y|Ø +ƒÇvîÂ×e(ò+Ïú^¶ry½å8þCÜ‚ÛaÈK$t7¤½ ¡ˆ»ÙÇ~­¹;óh{KÄÛW¡%åñ™ç×®±ˆ-—;^Ä™¥½<àÈsÄÈH’2^vmQnó §IDë§ŽŒçô!#-r óV§jçm‰§³‘< ‹À.£Ö$pKí5D-2ÃsbÎÉb3*Wrž^‹ƒKVF)yÀ†¼?ûÈ?wxjÙrÁò œ#ˆ´ð؃ó«Ë¼Æ ¹OìNçhƒ½Ž•_KŒ{$jÃ1fY¡­å·+ØW¥=®¦W2Ÿ M«¸å Õ0d?#x)‚YéUÜŧ^Š‹ü›âœ”ï•È I…Ö¬tXšŸï±š¢ÊO5Ùd5‘ wËóZÏê¤àõvVIß~ÀçíуóöÇ}û±üæÛÑ—ˆ åýv +esëßËäïQŸ¿íèF–“àA9q—>bÇG}òÏ!4ÓR’k*2Š.ÍDï´·dñêUüÄÃÜrg8±T”Fâyͽì4x ÄÌ›ÝrgÀ:ýöÝ.Kdñu÷™§/¥ðH½ÝÁus?F=¼)FÝÈ»¢/;Q4/êü¶u¢Þ?5K\‚aî~ÜÏl´Œ:eiðÖfoßÍ`n©Q¿-wyÎÜÕ—o¯äæ Ó«S '²ßA=ÛFZŸÃ^Ã=öÍ‚>¨qëº,Oñ˜Ç:œgâMŠxÏtC'.-‹þ¢æ1Ë}$‘–ݽS¨s¤L‡»tòàÝÌpä¶ö0žÝP+’¬=N‘”}™å·—— ¡¢É\2<à#ÃCÓ%ÃèÉÐ ýž AÌ$"2¡ðêÓÏ÷8šò‹Ù3‘ Y@êd„ìN°t·T–@vuK­LÙk2¤0"xQ‡—½Ôð¡.>À¨»/SêŽåw©cæC݌Ԗö÷›¬)NÈ.TPduЙ3KZzùœ/,±¨Ò=,ÓA-X÷¬tð¤ä.Ìg¸tF›NC–dÑN†’ã–Z¤ÛžØâôŒ‹ØÓrÝ_©¥â¶T’®#µúÄ»µE­5è~ÍÿEÆ.‘˨Íî öêŸ`9mÊÐs­|·:=IÀÄä7 ø$A”¢%A¤Þ’ ^ö‹$@@‘± ‘Sàl)€¤ÁC|Ü5Ô6R»×J†û‰û¶U0î¥v*–¬æÀãD<äU7}½ä1˜ê´qp¼U@gf^µ`¨æCdžmM_#Ú ±¬cÚЗqM¹E%Kù/@¾œ‰5£Þ ¹T‘9ææ$LïŒÁK[f…1ÓÇýcˆÎç'î÷€¢\¿y»¼tð;:8 ¦è „Rˆ¹eÈâШihFôY‡Êhê6èÞ_¹ó(ˆ!d¯¡¾ÔšŒðóÜ” H™œÁÚýLœ¿ävj~fY²6â Å-ëàTãµeøEƒ8}ñ¸üTçÁÇl‡]}%$4›­r¨[›šË#/çkñM—‚¦ö +3³s&ÕK|g°tFLÂவW‘eÓÁ—`|“I8‚!«fm„ASð}K‰ÖÚ+a¤Ou>-%Spè!îqý€ß‘ðÙXEÂ5”2øÊì¤NSʰ’ɪ7FrÕ²È^’ Så–ðÀÔ^ÃÒÝÐŽÌ9™{bÞI‹ƒcÔ½Ô&òËWë{ÏÝ'þ¹5(³,§_Oº»rl[W=ø>+3ά¸GèÆk93D“ííµD#ÙZC§7K¼‘²_®`íI,ËLoVdäLà#qMÓVqË'ÊGæA$€WRÅÀYRÅÀ™´bàLÁ\þ²Ôô&UŒœ%UŒœ)óK0ÒlIÁç#¹Ÿš,HþàüÎ*ä~ðÝ sJoVE–?1÷øî,ÿ}VÒÙOVµUZÄÏ÷8 `‡™n3õE[ÚÝŠx^c;sÀrZ¨íý 9À.»`|7@LOÈ–ñ…%vEë’;äðtî´IÈ/÷m_‚öú+ä *¤Þß'ô +¸;â‘¥c×WïOÄ™£ÙŸˆq—ë~#â°Æ†HÄ)ŽR‹˜ÜYu•=µˆÃP«Î½¨E”J•“0’–SŒþÇyµ$Ù–›À­ô +nèÿÛž»áÑ›xÿ'¢*úU{V•—ƒd"8¡º÷͈>‡omFç-Xg•ñö¶€y˜OîPTÅb>¹aËù܉â\Ÿîâì¥Qz:„YrÓX—ÎÃM°ÄZ4sôÉ#.vÑé®)§ø°¶$TÉ,UÛm¸äˆ©WÝ‚„ìëƒ)*ZÒŽ[m b²c›hÕ¶?&»Tó-è+wÉþ€NÆGâÒHl'MºØÅJ«Îå½úè.ö'qA§‚ý„ëTÏ}¹>¾Œ½ÈÃ1ÿzKÛúV3°”Õ­õæ±`™f)\-ù‘ >y¼ Ó«Ï€|Џ•mb¹@Åçú”´¿r½ºƒ”ëœQoΜoIÓ Qmî[˜Tξ ¦¥­%´¼¥­%L‡É”¼UºÇáÄo[Ïå®1¨H&¼3M ûÊ$p`Ù åé8]zÎXpŽñÑÝMú#<”gì@>¹’ÜÅ®†v“.”v”^¹û-è‹£²ó ëe[˜ª¦œwÝ[31œt`”ÝütQÈ[hü‰ðÑÕá÷oº±Bê}ÿåŸ|»»Ö©Zì£+ x¼ˆ%ÏôÀÔ <™¥¼óÃÁÔ‘é‚>|R[à Žªý Òêšs©=£aGözäKÿôÙ#_|œšóoÁ›º‡/t ÎÈRàËÀ“Þ_ÀàÙ#_|âÝÍ«;<ä-pý‚?á |õ|ù²_”üû¯—¹dëü#%Õ@eÁZÙ¨ÁSŠ3¿±l#÷wÅH\Ð>Ïí ƒï6W¾®µ/©³k_äŠþÈÆKîµäÆYòøGÖJ[  –s¼N74¡ðsðZJŠò¼G˄惄'L£+^ççÉ8‚Ϥ—ãp ¡¾:ÎÒ×QôV\^·—EA÷7ÎG÷“%ôÇ™=Gáã¾íKͱ +Ÿ:UŽÂ÷eSñ| ZôNøÔˆ|FTÏôG¶np„$»ÐÕ°Õ…Âõ¬¯TH\hZüKáw¼šØ‡Z)íH$üd~%¡ýë￈¸’¹Ž•úAûb+`ãî¦^ îm…‚ÿ7ü¼¥Ë El[ÛªÊâNÐ㵟t”–9i…ÄçØãîn5²Ï^Ö5ìiÕóõLK7Ⱦ>Cˆ¹©¥A`q.Ñ¥w!°7²O\¸ØçKA +€;™eÁIóä®,Y,q¡Òð”¹<Ÿ«ï4jzü~?'=€GtN5l´žÎ…VæÃ;òùDšERÿûŸß‘¥ ýí’¥\²8ÿþש2y*RÆÈÒÖ>`§;eÚ4%ªŠ™‚˜Y2تsÀÞ$OJ=|Žul ˜Ï, +°ó™†/{3ŸPú$ÀY̲àÉ9Ÿ¯i’¨ ÎÍR‚GzV»\–[‚Ë˾ޘҲeê‰ÈÀ‡õˆ>µö’Þ_SIA!=>o-’çìfg†"K³EÖû„(ë‘Ö”ËÂz(6·Èz¨k·ÈzÈËùÖLœ-²ÞçNYÿ‚Âzÿùe=°Ô"ë­FÂúÒþžïÈC¡Óß«ò>¦Saaþ£uOazAš3s&c%ƾN øeüeV&çØ±$æ£ÒábÇÂ6÷϶z¡ÄiŽD¥31¥½eÁ[w´7šYb<èÙN79–e¥¨žüIÓù<âÄv1ËP ‰ó <|Äw“ò¨É[I ÈâóYVñ½ ˆÏIÅçË©BquWí%âqÔîžSԞϒӳåSµç3¯ÚCõjÏWSµ÷‚¢=ÿùÕžgj¦'Ó^ú¡ö ”5®öšh/yíÉ‹p ý„ÒÕ¡!c¼ßk=ôE@L»xÐó¢oŒp#ð^·kL‡ÏI—d^Ð×sh½˜8'—x°ºÂ^C]/®i ð7j#ò"a‘ ¿š¥ð‚:Ôˆ¼¸I~xñ‚ ÿùåΩ#òäÏão÷d\¹÷ŠAøð¢ד¹¯Á°,2ô} `«U&s¼êy”“Zô2™ÌïÜªçø¾FŸc9Òtƪ֬2¯ßnEuæ“›1 ˜OnþÇr>±¶Vu'öFZ Ö‡Ö—·ÿÄȬ§ó<,±´Î}ò$ÞçgºkÊé>š˜yÈÁ£‰‰?ª.z" +ïUEñ‚" +|Þª.;" +´«®J"Š¡V]ªD¸è4Ÿ¢ŠÚ™OV :;ð +-oûœUñÔóªâ©üUÅÑ«Š²*žÏE„%ÃXÊÚÿg>?eßWãwó9Ò<Æ–z:B`‚UêŸæ§Ö­,áù`™f) +y-ù•>yÀ¡Ó«Ï$è°•£b¹ÐÀ ŸëSÒþªêR…pVäF¸g–+ Áö5[kÕÌ”73Ë[2‡ ÓÑIFÞª÷Å|OIýI«T2U+&GSÃÖð,›¡¼j§KÄ«®Â!>bÅIƒzÄê¨XýQ*Ö±ÂgÚQ¬8¿ï(Vܽî(VÏ «O¦Š4˜;Š4è;Š4¨;ŠÕWÅêi b}A«ÿüŠçŒÅ +Æ4>üo=aàÊ¢'êÈt~÷„ 1®á/ÿ0!ß(Ü%A[¸2ý¼z~X†Y +‡úÛkÅoP'? +î2±B8ð!*W{$ŠÔzà•wª¼zAᾞ=ò +É*Ý(Ä@ô©G^ážÉ>^ ¼ =ò +n=òjà +¯&y…z”yu‹ôðê…WþóË+œS{äÔ“»ñê7t¨b¾tZ—Nž0üû¯—˜I¬•ð»?>ô¾çȵ²†'¤y~cÙFî,¥»!yÛ@^Y8=ƒIû*OqH³ IZ52:%Ï< •ÏÚúÏ ‹ã^ƒæÍ¥<'¯¥$éq)/Ô{¶Ì…o”µ–6ã}~žŽÅâñ¹4™º¬ËðûÖG-}%%CoÍåu|Ùxúò‘rœ +}æ´!økCxAiø¼åØpÐα!øÌkCèŸ4sl¶ó) ¿æl]â6:Ï4KiHÞÎ:ær?°4¹~ð‚ÒÜ×·J9¶«Û_¶"æ¤ /ÖÏvÂ?³6„BÌB"õ÷_ÄГÈÕ-Ô'Z‹¶ðpÉÞ¨^ñG3D€ÒÖë@Aïe‰zž`KvL4…ìØö’}œÓ˜KöNz@Wšºû G¢]æQ é!µ¯Ù#5ŒU÷{4f  …íëR¯c ý&?-evÚ-eq¥„NçøcdLÖˆ\ʃiÝ ÷^.O/¤ €y5¹!%5c„'°7 \™€Ïs“+–O¢wXæ2%šyöf.úã$p³Ì ­‡À5í¢É)NvaJìmµË,¹$~\ö56—˜' ÿ|ÙÆðCAu­™µºÈGk‘‚>!—0>ʬ,/ÙÃADìÎQ²Ö]¢|£E"1­ÕõG +²úUR–¥/éø)Q¼BMìp°:–Ù‰X.GBÜÒNÞçLF˜A­à(ɘńIèõ©EÃ2ÌP]朔ôž–ŠaXL‰»'m0OvÉý 3Ce rÀÁcKË.ø>°çžBn‹©ºÄ0‚WŸuæÍèA9$íZfŒ³;ZÀ±Ò¡eY)ò:ã=séh.´‹Y†ZˆÐ0o>²¸á?²ð UyP çË¡ÔDáj +F³aBvO•…¿’P)Ñ%RWS”’œSx>Pš¢*|ݾd㧪ÀÖ¸ªhNÒEïïþ‘Ÿ(la“cfiàAÙ»xðÏ·<æõ‚×{ɼé¸çÐsÞúÆ2Þ·XÁñoÍþGyµ$Ë–›À­ô +nèÿY€í¹7áI¿‰÷?p"!H©^¸«gY„ A$@Lî§fñ>¿5aFû Aší­¸ÑÛûœ,zï}ìæþ.Z4©Uüã¿ÿùËê!êZ3úU¯jõöçÿþÍIÄCž’ˆœuÅ|)­DÔ”u=›’Ã#B>Ÿ¹Z;¯'`îY7ÄÓøc;>ÏÜ"&÷¹§(À6ÈgJq•»Rœ0 ËRÖ`šc@òð£÷¾ð˜‰tJ¯Ã½øA­vº£í ó×òqñ—4þöŸQ²)åoÇìÌ®ž¦¤cÊ_ܳf~›¿H\u—f9«}:ÂKA­ed:IƒDy[¶]_¯ÃDøÈ†Ò7~M_)Î<ômgø0}÷ê„Ü´6UœQÁJVZ­wÇ‹:­Š{?ˆ§Ï,•¾·å~Ÿû—Ó3²I®N£¤ÉAu9~R˜ŸìÍtN¦\èm?³½)ú<†²•-šÍà†žµà.{ÞwIqZ{«ÇŽF5:š”˺i?Á[1C™,K<¶è†úB씞µ>iy5Ó¹ùÕLìÕØÇ ñ†ù6“åÔ§[Z‡p:¬—úO¥cÌrÄy÷—ÛNærÓƒ•ÓÇm¸âɰ^B;ˆVèõ«ŽÂ}†œ¸:ª[G¹í+­ç1ÿÅù›Õj—+—€µU«ò^Ó¦æ–Zúúƒ›ú °çzÅ›ë`ŸÂYÇ.:pLò÷–@-Õõ§öúÒ¡bòׇU¾xèÐ@ÕjÅS:4¼+õ¥¨8^œ8ë¡Wc˜=Ñ&3=‰îødãoÏÖ Æïf«•{þº+SôÊîÇÙÉZeLjµ½íÈwÿei±Þë?À4Ô‘R‘·zÀ½v ˆÎ8Ó½¦ ŒèdÛ²`*º¥.’­hƒo ¤*©ïT¤œþ{ˆß–š¤Ë¥¾ ÷Ùº)ÝQÆ9Jïó7Ò±ùMk3J»îƒwŽá €4CwÍõYºÙñðèig¦—œNã?ƒÖ)ø¤Ä·)ǧ÷âßM )®ñmg䍯ü4>¦F¢·ø¶3¦[‰o;#I-¾íìùøM6þBžeÙÌEžÁôOY]ühò, + °Ùÿ¿ˆÕ$¸+¥§E¹Ü¶ +‚ÌjK^QýâdŸ@ÿhÁtݯu÷TÀ méÒE×afëÈØç~—§„J—“§DyÂæ†U¨Eìuâpß»b­¦^TÞE,a¡%ñÞ™ŒMñ,°Um–fü‹í|s&üÌ5 +æv|âÍí‹"×êàŒmØ“[Bºöõùè~P®KÊÓêqjðÈÈ(§nzKÔmø×2’§æŠÈÁ«Â2«ËS4Åžú©e çÎ>wð;Åk…F‚RÀ‡«ÐùSñÂ1æŽÅU›¼0Ú©åö<ç9`:ÜÉU€¹Êk˜Ú1$—1Ë9Æ8 †ä THÜ` ^ƲîƒÏ{°öAÑfÏ›¯M(_‡<-MJê +ÆÌJˆ¬]'¨T›çHC’@o;ܨ̴8ØÊ±ÄÕ1Ì’Ÿ­`ÆC½È>ÂË"$¡SB8,7š)ØDyª¡ ‘aIØÅA)Axˆ¥ØÃÁsÏ_7Ýüòô½×Ã>w𻞌v¨WhÆè<8ÿó,Æ>?¸/Ž™;Û.z³y Ò42È騵gèø$„# »7‹ÀpXçs¿J¢¨5£’+!•‡î"1þO#«°;$ˆ¯õUÓʱ O)ë«zž&sÏ4–Ï!/ŒÆkjÌ=ëS{È 0¶ãópWœéø<½° ò‰-¨ X)N,w²&ˆ:;–»ÙDÚlûï~D;Y,ãëq?µØï{õ€ôl/* Î$~Ý•ÜàMKÞCϨ}Î|C…#[ÚÇû ­M î^ê´,iêú Õ³°‰¢ñ}ë +Jé.uİ¥%‰\ÚÔâ³íQ¼£ÄFVú{ŸïÓ¡CæÎ¦S–ò®o?Wˆ,…¤9âªÛÔd~|0éé •âÛ|zƒÉH}-ùrEìsÿoo@½®_&x¥7þ­7‚$ÄþG8iÊÃÜ¡i™rÛ:ˆ“Ô–¼Bw m²f\sè& Q7Ö¶~À“'…ù0ù0§òÆø]JŽF\)I”,}‰œR Öà}M,u©Ómxlá@4ä(¶E#uØXmzFeb—­SvisSŸf xÁ´íSÀÚÛÒ>=¹%Q_*iôb*)I(r¹HqjðÈÈ(§DzK”hø×Ò]ÑSsEäàUL%•ú,ì)åqp™Rš¼”~WÊ#µV)3•2„΢o³{`óNö#bå’³IŠÂš¢óN{ÀÊk˜ššK”Ù’‰I—ç-ùÂÚ#Vƒ•£f˺¨"v·„UÞ¦žz#—ƒß‘ëÈÖE®rÈå=MZ×ÀKÖ.NíKFðéôtÃúä›W!_{f¤ÏÝ)·åÎÝ üêî¦ÓÖÝ+ÏÈÅMüŸÆw‡›‹ÉKÌžXRYž Ïf° –FNù|ªdµ!0w·F9€±©Oc,®ˆ^4Ÿ»ƒE›òYK\*©ž8åô1¶š*1×»‰D:l«ßžú¥ìTñòiÏ [?…-Õ‘¦¬†j¹Á»î–¾Ë–óºóaßÔý¨ U÷öñ6ŠlGfÑ5Yñj–ú–ó|ÖÄý6ŠèÓÊ¡u'K ìÓf¯œž \¯(ÀQ¦US-zÝAõ9~ÐŽŸuϼÕÝÅ`å/—×rÏn€kŽ)†û¬ˆfpCÏ\p—¥õº…fAº]vÌKs©]Ô¤TFÄu¤èÐbvy²H“`õ™°S2ÖÔ=™v ‘÷1_ð¡áÉÒeK8 üކG+.v¢á¾9ëK›)¸Ð¬Öaä±ÀÚ\öîw`jÕy°“T!eªš=>Xž¢’©ÆGžRæ.[UP66ødŽ/` f™ãþÉÜQ+sƒ3w²äòƒbZÇç©"Nˆé'Ÿ¼¤´®ÔMæÈêÍ8Ë:O÷¤ËxBæ-íÑa‘ixËQÑ—n]›Ó£o5E¤»|L¥§È=úä¡£ý£ Åe¥¿×ù::%îT:5û­¦ò°åà´í QÉ}ì9>iôôÀѼ¯7øô3Ñ@Ö¼Ö_j^ˆ‡ÖdÉfÍû¯H‹[Ê£¶[óyFz{4/lCXû6ÛH2Ô½Þš9í%Œ%oǰ-﬎üóÑ$¶3'(·(à n™KРÀY¤kŽ"Vüvì óµµüúœt¼OÇJ/«˜€/ü<àè;¤Ô‡-˜†F–ûó’rŸƒ4õ±wa(aõó0{Im¹{˜Rk\©—×šë æ°>/ÃUÑhëëÒÆ_¯ÁƤ£\“1 }Y–ø(µà2›©ö­§R/¦/cR1GQ €Mµ©|=r—ˆˆÏcQ=…ý¯È;0·ã`Y°÷ÙÒR¸Erˤ]E$õò?Ê«$=ÛÜ^å?Mh8Aö¹D6ö&÷_¤@Üî¸wv}¼¡*ÛæÒä€Ëå§ŒÌv˜­·Ä“MÿºÉ¦k©¹"rðÒä-÷¼4pÀϤÕ^ ¤¦½·V{5‚r ܖƸèӸ駟Œ8Û‘º 7˜QØÛ+<5c¡žÎ# +OìZ{5hã¸AÕ@à’içÔö4î~qÑ@5 L¦FS,¡³#§šÒâwÄFr¾vžþy]-É™½ùÊ<µ×°t74—Y˜§ +’F0•dÔ…Ö)9±‡\ƒgÇís×÷V1üˆ‚{ÚÔdÂg~€}¸ƒŒ–*Ï;–Åå*{r6ˆU³öײO}ŠÞÜ’&;?]ÁÎM”m¦WY Ô)‘5wZÅ-Ÿ÷P­7ˆx ó8¸„¼:"ua†;¹0q{uÈ­Â yraÞ–&ƒèÓã§iJß4˜rz… ß)=ª\ôc··Rð–^]2º.]—7¨ºäý$ oYrR“–ÎßȘýȲYj9¿Ç!ÛP+ù}letk#Xõ‚ +FÂÆ\8¸ càçÍ¢ZúK¤*¹¥†Ÿ¢¿„9á_„¹-í}¢O{I?=¼yÎý™fˆw“`yÀÞŸ>@K–‹›1$ååa À´<Ìͤ~ s3&¾‡1æ7cøsolÂ>F£üc`ÿ¨O +ÃÌ.…|—É¿ÇRÈ·®Õv»<Ó’T`!³gÅæ>–Bþɳ²%Óñ`Qu:ޏΟ§>ò­‹û܃¸¤Ÿ…Å ,ÎÉû™d·e7Ü *[ÅötvY" "êíòLù4ÐŽ<"=ÜÁK,”ªn8&–~Þ +ÊK½šXbšL,1¡&–˜zËciÔŒ>Ä~ºÑ¦·w]àÆ­Úzf å)~Ør«MŒMßB˜†TµŒÙ #Aö>†ËæÜ%‚ADt*·N í#;íw3hPŠ[êÕ ¯l5ÁeÆZvCÍQƒ¿äîXÑÐR~å2ˆ†/>Ï“2ˆ"œå"åøä–"WæÅÕ-Ób–¤u‚ÁìM,Ë:–<†ì¥ï×Äæ9ýs*Ü»Â;„âãðøúƒÜ+ê"¬N½ß^h$ißT›ÆFŽÐ—lzÑJ‘²e<ÕòËx3~éü|EÙ¸m„0)êE¼>)ûk½ Âä*¯VÖlCÚÜÇ>•—_›¡E ñºÓj,´Ÿ6Ø%”³âvÈvB™Á©‚$VêŒ>¿¡·µû¶9eñSùΟ‚ÆÓ×ÑûôwŠ$'ù×Y&7¾Ü à» +¥î`!~p®lÙÎéUR¹f7ÔÐQØŠ¾/ÉÊ+öõê-÷ø0ÐõZÓ†´‘yÊz»µÉK,â˜LùÝQ°ÇªÛÀÆÎ·ðæP +×l€Z_ÁƒÎ³ ›…΀Ë»*ü…΀ñ Šå a– ?Adb°X`ù ßàHçäs½ÁÕÄ» ìšËAþf`áwÒŠs^»ûùYsYå©Èºûž +7«ÛR ú¬y¶þ¢aåïCoœüVÓÜ›Y–…e + Ò»‰É}©©eND§5q³AZ3“É öÆJçØÈ§¢ôË^°ÏS±«6n¶´Äp/,ƒß{ƒ4œ4Z?–{l¸ÇÔî )ƒuÝ7„ó»êz +aûIc/Zõ{qÅXQÇ‹+6”c­S(4$à¤ÑN*™G(^!û²ê³kJE½rðÖæ˜yD½Ê§*´É)b09Øq¤¸Äìì=âg²¯®Õž¸Ê1•”SbÿGyµcוãÀÜ«ðF‡ÿaŸ&ŸMtb%½ÿ`ªðwŸ$Ë™T¨ªiÖ +ïcŸ7M{á†Ú!•,¤ž ³“—> 1ŠIHáRv˜Q×õ<Û1 I S= m£¥Ëár¤ †ãæRx”càáà÷ÕÜ®gýóëžš{tš»õª ^;ôæ÷è*ÊÚÛ8Á—îü‚þç ©ò‰\Š3æ=éJSsÖcª«¸'óÔ׬V@d(² áõa7œF O‹ ~c•Ë´Ùi§eÌM¹þÈÎBö‹˜Qüåñµ%¾ˆ5é>w}+ýo|Óœ C)Žu'ÑŒ+;Ö‚.à*ŠèC€˜pk4ÎÕÜ<|S %`ÉÉ?0éîNœl‹aÚ9õÉ71gþƒÒíj˺¬Å€ªÃ#d²ÿÖ®öëH9°4Tܘüñ¼6›.W +9Ïðß/ý`•­hzãw"u¨’j8=⹓~ ð&ûq6@G~äô™ Ú½ðq£LíåJr,ùò%îÞ‰UÙXV¤…˜³ê dg66 0ÙÎbŽxSÀ’3›ÁAQkÞ©±‚áŽÖ×ëù-²#ÂàpÆ0Âй‹íàfU%àè&»ªò×Ü!³®ÉàžÊÆ[Ë¡ûÿ:¥ÇÛÀ„9âT«œz5:™ eÅqë™Åg@ þ„sñ +hŽ}‚ÕÒ®Ó‡bè·s (GZ:†‰ì–Ûã¦uŸ„ÖÑJ9’ž¡Í_A4²2É¡ + 6è1Z‡‹±e”°0É!Ü¡GMrRK`à8øXõm¡¨Ó ä‰^“·.,.eºqs5F=yòŽÌ:ú¹ënà¦Á¿Å;Âì3í;–ßÖ¹ N#\ÏØÈUeü6 +Y–ÿöþ£¢rBÂèÝßÞO¤­ógm½ÌO‚ª˜Qa Ž f}ñ[ÅØNê'z‚¦U“W`ïY‰I¿¥µ&’𝨯š{³ÏýE¥~Å« 0…"fòò‰µy:ÅɲN›!HrL0ï8gð˜^êãš{`}^ ûs¥ÿˆ§ðË:GßËŸ”zþ|U{‚‚_¶D2å.8uÍw ~F÷A͹(miCV‡—bׅæÛQpüV_ +ÎÕ»j;L~·këGàGxÁ¹‚^ +N!öRpl—á§ï;"?jïôñœ5ùLšÔA¹«šçÔ£u&4r ¼ì̺’/-2OÞ0ÉtTY”:-»sëËrª¹ÃçÖ^<]&8+Àž–´uŽk„¸Ài‰­8&¸|Ž·´õ\e£)¸³0Uçe 1 Â‘>צâeHcZæZ»Ç ®â>³3v&$¬|‚¼éçXDãÅg±ZùĆéÖ4-§î$¸‚ªƒ DÌÕîžI<ìÑâD–’qÇoõÆ)\Ëì ¤"ÍŸ £} óí‚ØYÁ(+3Ù&ˆ½YÛsl<ÝZWα¢z· +'@Í…ÓQo2œR=㨒A‰ƒÅЦ¿15°[n†­Š“ѳ\iň¾§¥ìNß>qó¹+圧¯"°Ï$_ 1f(WÎçs*_?C„Dr¿ ¬}#€LQ!´EÙå@t¨¨Hþ¾›nµÚž3Y$¨¶å&ääÒ™2Á˜² Q¦%RgóÄ#þ­ÝV‹d{eläùmMþ"¨ÈX½‹ ÆóÈs¨Z0¥û$Á@Î+˜V‚oјçÑ+lгãv¿Î+'³zŸà æ3R"‹þ0ÆM·ð+F;4ÏúõÔj—Ñ9Ð<äôó~`1R¨ Ü.‚ؤ¯?ª¬[ú +n–»áÆ)¦ªžPÃHÚoa«º%Qj ‘– +&e½WtdÀEìënÛXµ,i¹¬¥s™ÊrY•þŒmYbŸu»puŽÔ’xxÀ_–3v—´[R±ùy!Ÿ%Øeùý ÕW>m߃vÿ\T³Aë35Rî4£-kús²­9MpÏÀ!f ±§e‹:ÙnK¡Q•DH׺æé¡K~‚%R_œƒ ڢ̺BBÎmdZ +¶è½²h‰á0×`]>ˈ÷\YzX¶¹íOŸcÏÿ}úØ\cÇ9æî9oÔÙÊšO¾yfËnZÎe¬±È +iYžu_Y:;$oþòì¥ov&_ÓìÌöÚ™O,ÛNY» ÌÅ*×§¥´î¥ 0¡‡ýÖ¡t…2x˽2#IU•|ƒ¨§úEp•Ÿÿþóã?óBDÖ¥Zâ®Ãkîâ2“7úÛodÿï¿?ŒÂ[Ó@*˜á –’1õFå’Y`Êc•A“ýòCøQ3@"çWçT-–t–«®ˆõ†ÉÜ£ý—_DK¯FêiQ)i#æ'.E ,‚(ÖÇÂjß5bò‚ãÑi±Û±ëXÕ×q[”b⌑LŸË™îpìbñ7¥ ˆa`_¥ùËKWi6.^=}g­ ÒVC÷ÿuPÀTŽÈÕ*•Dï^4jo Mw\ï3ýIY€‡~7ӉʕŽÃÈ6°ÎäöMb‚”=-Ko½-Uè›äËÈðŒ+ÕÁÚ"a˜PJNè¨q¾Ja€µâŠKK»iya:U®À +ÇK7;±JWRãl@(óÛ¬Tò°0¥]uaI‰°XÖ¡Q8àF »|Ǭš×Î]wC³ LyבöË£ÌkP|@n3Éfý90CË3©kFd ‡Æ- ³¢´à˜ Ǫò‡_ŠN-`M©bÙĺ2³K…“3 ÅmUƒPãfŨ'ÀRéPA% +¶¼,“%`Õ*ï64#lJ{Ë'ŸQ#Á#´Û)æi)!ä œqÜ/ý£ÜŸNƒÅÎ9_ÓzæÛ,Ó·j›+2¥Í‰¦lÊ&'ê‡ ÒÌW¿|}§–ÛŠL<õÍî‚ìBfÆÞ‰™Î†¯Ü‘©Ìà‹ÝTŽG þºU6¹È>¦qàÌ4°¬KV1“8ÀJ(:Ïrv…C»n' ¦o˜¾†cE,.oÎh géºÒ¯g6z±¾±Å]þוŅì@Ï¥ç,ÝÕ Ëì˜éÙ…iõÅÅëméÖ­[n²æÙ'CI2A{Å8+Ÿ‹+>8Ɇ*S¨ +ÆøÊ«$9²Ýîû¾€œ‡¥#þ|éþ[g H¾Rµä”…G‚˜2¡Ã ˜n³t"8¦ûìéXµu–ßnÀt›’«û#P6&CؾkÑïÕ·ËÑ¿ a qŽÀ»/W2Þ…õU“^¾Ã™W8Ñ1ˆ’èã:™ÔÅ!OEÅ©»™ëDЧ+W*ç”òÖä·] nççaõ ”嵦+P·9õ;eè˜:5=K‰Ë„;jÝ•À¯uÂ$6 +0ô˜z°sÂðíݼa¯"YW@áaˆ©_v@lF`)¹]Âqqß«X›êKÛ.[r‘Âìêß,; +wô5 +3Xô »™ñÛ,Cêu(”;Ëåj,RÙgk/ìLE¦™òкª½ ¹Ð'öä–¿86:×L7«/ìBùšY ®J7Å1‰eYâĉÐegfœº/í¼A™W»fY—"`µÊ +ò­¼ÂØxêqØXºrkà#b3l»$e8ÀÌû¼\xïÀ¨ño1{«Ø•èv©Q‰+îĬ—åÈx9±CÕ¦ûb÷nìçî¿Âßv÷£Â¹ÓîŽ=ZMÙ'á†íŽ¬É˜“`¹ÚÐGMöÓë ÚG§Ýªûó<Ÿ¸·ú·™lCŒõxÙéñó(ª C8ò•îÕçgY` ¤žv6aPyÑß[FƒXn·c5,KÕ0Ý*ÔÏG~* É{Çôo­Ï§IS}X6]éÆ{ëà†7Éú™M<¯©?óéU}ói^ ¥¿ +Ÿ®»Wص%œsZ8!ÔÐyíªXçSºvœQV»–ÝJÆi¶’¶£²“ËkÁaó¨×Ry’+º¼¼߬üc ³%@,¾ÿþçŸrÍŒdnÛðëÀÀ Í'¤:}½0JBðËùšyÃ6¨*|…MñcsŒ©œÄzsŽˆ©q@d´­ÕëaëóÄÕ=2ŸáöŠõÚÏo"°ÔZêEœ‰ÓâB ›jݘXFêí~G0}Ät… +>þy_‚Ò®‰­r|êØñ5t$¨÷‰õÖ4Ò}LM±`¡)0E§Jf”¡ý¼Çú¸ ôÁ1»4CØï^Tç6vË)– Eî¿W%†!@ Ï,TK@εmk)3Â6éóÜôjœ+Ô†%@Ó¢…77&NÖ¼z6Ë7Ö@4E%¢`ÎÕm7Ê °JEŒòù"ÖSÐe"R†òvLŸlX"+(Vå|."ñÔ®JÙÀÝ®Ã,Ú§m*›Ó°©È€aYèËÎö‹"Û—^Ñ2iG°–Ìåœ #Ã6§×.—«l}ú­>M°¼\-È3NlùòÓŒìƒÈ›¨’Z&ô&ýKĆ›}éÊ ì˜Õ@¬á<ðëÀÀ¹6ãí¸ÉFt–~ñ®B q7º¼[¹Ç¯­S‡ò”Î8ë”Ärµ-©~ŒÎ½×ËGƒªä¼w—|ÄÞ$@²~mTÙ°†}¬ÃfëbNZ‡¥@½Eh—“RÖ×d¬øäK¬TûÖ-Ùêg™Pg¨·#gø¿c°Öî‰Ay$™Ùa#ú*Ö¤«³Ôjß–†•MëÀl÷¿.›ß$ZO¼<|mrÔC&àè!Ù•Œ·ÄFéäT¡z•ÃU;÷´qJÏyLìm\1w± ÐO|Ñ®ƒ(´Ò9¦wQõާ+ÙsŽ­= L?ø<\C®õÅŸ–d-´o+¦ý™…íÊ™™&üžŸóx;ãO3,aùÝXctµWOÃQmÒ¯ê˜Çzø¶D!ˆ°¤ …8^æ[â¼ð_¿¶tŒ‡S³EŽšÛÒ°ô±$°—þ>~HÓ?—S>~@ì™]ÊSÖøHìæ’öø)(Ž^¿*ªPP¨ŽŸ9~DØX)’‘+Îæã–>9ÌÇO¡Rgìâ?8¯³Ú¹'maVÇÛ»ú·æpÜãÇlü?G¨·#á?•ÇH +c™ÄôAió˜?ǯh”hºÁ±ØÂXrÌÁŒjšªäð >MÚùQîÔ«ìé6`RŒé…[DÉÑÉ`Ȥ)ƒÝ +,¦ `åj vyÖ ['×–]¥¬õ–“µw·ó ï|rU;oÄÖí<Äm£ÆîèÙ$KCwÛ·%µbv:NŸ:g? ÀŠØ¢>âÀ–#ïò[!ÛË÷ÉõŸVfð´:²rZ«MÏ#­ÀÂ]$¿(70긳º:ûaÍVmÔA*¶ hŸ‚}ƒI:)3¬‹€Åþ—.íœäÝL´I±@Fs«G;¾6©¹Z´s´k»­ÔR¬ +iƒv(š«??¥=×S>ÿïÓÔyBÛƒû[là$¾ztÿX'ç× WW‹n°uVê×î†i‘Çó´×àM½dÔ¥ +Déu§PÖíÊCÆÒ²ð¯ÔzµíìòÃqgPJš‘•]–dѳVl+†b3+Ën-þÖ•]@: vv¥(«Àv5³R4›–àƒ•]ýÿ‘ÚKpÁg–¥*šü3¸<~+¶ÑLÊ…008SîÚRĪè0^È'fÑOúnÙ{çc.¶}›oÙuØÁŽñHê@ ¬‘Ô->T‰-ÁVtΚ«@p«hš‰|$8mÍâ:Þ3•ªÌ">Jç6A +s‚¨†ê–¥ÈÀ˜mH†RµÂ_€™Uëf÷š Š <ß矙\»ðüB¶#?ªÁ8íO¦%Æ’Ó÷UpÙÁ¸õuƒÐÂUåÓW,b;Ž?ñ¯Óâ:ïý4:lÔáín{ž¥qL˜8h,÷áOåḬ¨0äe U# (ž¡oÊhÅlª’$:«‹ÚXKìÓzÃ\§õR“Y.˜´?jßË™­ ©âU!¹3U Ž–ËmHÔóuŸgˆûG˜*+.pùóã,Ý_eNjÁÏ»ìr+2ÏÛË e<*¶ÅIÛm)Øà'Á”ïS_«öo>c›EHn½¶gRNeÚ5QFâGéÚaá£ßt®- +]{q{Œ%'r!S°hî_Ñ,qº]Äõ¶°Î Ѧ@DÖÌà‚xE_bk_g–P¦Yæ¾nwçñQ[Ÿ7€WŒ~ŽOp¹äm÷nø±'Aìßʸxzôæ… $œq^ð“þ^ˆ<å¼;ò/DêÈ'/Láâ…(¢åÁ ‘û/lãÉ {zòÁpò?MO^ /åÉ §×Î þ>g"ñâ…Ñßð‚Iì€×õ¿ñ¶›Õya]š5®©°áX°VÒ¶ïK² á +àçý•ÖÔX³õ{ Ôìãç6Œ0éƒä`7Å0Çe9F»<£˜iöFVWaç˜MýèÊúƒÏÕQüãÕv]ɪÿ'ŠIÀ³@<ÜNvþ¿·JtÓÞ~¬ù˜íjBH¥¦«Máò˜¿ò¶tµPss²0Þå=µu·:Ø4(¬ž68wSðñÉ–7o +¸ähî<\êuQ=žÛN¿œXê +‡_óž !4Œ0nàå’…;bÌçÞe—û¿Q¡˜ÌÚü øÚØéúúA,ÑféÐÑïéÀiXÿWÃòÚ±s&‹Õîœw…Ã=vwù«¨˜’G9;Z¯r8Ú_íÝ;žð†Y×â×ù´ ~„åµ#UØZýš¬èXV˜ŒFœÆÓ·ýu „` + ü]4*÷Ž¢™¤á×OÌ^uê±ã«¾ú•“É—GÒ×}•{ãë ™™KÁÂÀ +ÆÉ`$°¤c•…Ø:?¶[ Õ"+Ñ%Ž–=®sRl‡™lÕSËnª? <(qÄ(»l¡ŒÜ®I©uÕ·»þ´Z[2l¢7K<.ïÍÝ’ëýûÃÄj‰K!=¦cðprL)™Køƒ±÷Ã8­ŒkºìZñ¾‘ûµ_¶=‰¥bqf}ÏmVóÈV£o÷Zó2½™©Îí˜É°’²ýð3/臶o¬ªòì«™AT‰fÏ-Uv—7ݳ>Æ_`ùè¶ý¢'ˆJ5×ÕBý({|5çy}5NOYô†m^?­ð7LÃâÚ ä•ó•“÷rÿìº#©ýôîS± úyO¨l^šX±íXV±Š¦ ¼L¿Æ†z)n¶|†¶ªæ+ž×gP4©®ÅÖJwº"VÀ¼RÝÛ¹À`µÌjæÜªäò}„JçZän»ð˜![½_7£êÚk§¥âí¶+÷79ÛùÊ»»\‚°æDåãkA¶¼äü»Y£[xoج.4þ;PÜ4±×BœÌf“èÂÞÿpZY˜ïøJÜ}í/HO+ ÿe: LfÃ8J3ü˜b^´Œ#1à^´uâvC¢|{ ŒÒKÜ®‘܈µ #›ˆbmgñ[…©ðʼn;ÎÕä³ +³I÷µ2Š‘ +rdû‚{»]—uîòQ÷oÝíýÏ=,3«çëÆ._~xo5„×:8ñ½LˆÃN^¾ÙšªkÊÃ6¡˜8¼É¿öß ®Étíº³â;W9]¢›¹À½ö@ A Ö´S»é7‚eøœIWÚE]mßüã›·¥ÚìšXÍr ;à°8³íI°ù«¿á¦sƒšŒ•J±ƒ¸gñ kDsÉòÜ@­vúÝyV]~ú5ßÿ¡iiZŽ\àÍ¥Ÿ O‰FŒ˜ì)÷µÚ6ìÖlÈÚK¥Ã#`­fó"3}i¬¶$ÓÖV;°^»ºÝÈÆ.À¦ÈA¬—ì ì(ĺJ@ô”hr›ÊáIÁsûˆÁÒ$VkØm—9Çî«) +.ÖŠI‹[Tî®\Ø‹‚sN»åq")†–×/çªË¬Zm1›o9mÕv›‡y1Õ±Û·Ú„ªÐþGÏ¢ô>RqOätÅ­ þá<<Ϥ”0ª2°Q“Í1ì ª‰éFÈv%$¨4·šÙt1IJºq¯\¹½A•úP‘µW2E +ˆ¥ìVÐoÍö¶¶o6È5†U¸:ù £B×îká¨ÐXûþ7.è›2›åèŒ`YoœHÚņtáÛCMdzŽq q*á ‚^ÑcHÔnbSɶ®kÝàÚ‡µðSÉ-×”“9Jh;f¡Ìq«™wPØê}hÕŠECRŒw™ ³†Ú‘Ø‹9èe–û‚Š´v ,&^å0KTÙ>éԱͺLßÎu,'Ÿ’²\Xj!˜ùÚo`€°0_Ç>BïîÍä¡_ØoÞöšêõ¶ëîÏÇ » ä6ñ™ªIŒ o¥ +¼aOôŠPH±V ¸ð&”OŒýFñÃmóU†1ŠTô]bè:VoìaW@y30k®ÀVÙ3–éT¬³…]1 ¡÷6F!˜NcÉ7ê5K³Ü-âÀ†µjb“ÙòÎÈ5\U£-`¥ÆÔ³]ÎR¯«¶£Ò“Õþ†.ON¾þ’ Q J…ÂÅ÷àn¶&að\e +Ñc’¢ +ÝS¶§dm|"RC-uv"7ª)‰ TF“PsòµÙd©ä†µ0)g8:¹‘ÉPšº Ì¹ãb<Ÿó²ÚxÙð~9*¬µ80®YSÖÂ1 + }ÅáòáB¾›w«åúw ý²?coc×Ånû+&ކûZBoÐFÀÓøîa $vØ^›bdéký/\ÄPU öîOÍ¢l‡ûŽ#'hYVÀc1LV¾JY£üFÜsÌpû‚5@€PO` €cOŠˆ?4åÞʧ—c¼%8­ƒÛ샦q!Àvó3œçp•µ×ÄRóŽcI³íÀ-(¨jõ}Šk8@H±EqùQ]Tþ¯ïØRYÁT›é燊ÊkÖs BÑs§‰R/2lI Lsïåi8 Ü×ê½å¬N(v8XæoMx6jFbÌCM°–&¡—KWÜÇ–.ÎAÕŒ`a‚þÔôçaÙjk9î7Os[RÌXpñu!Ìо;p޼¢zŒ`ÉŸö, ±¼åF<öla‰Yàr^µîÂ=âîil—23À¢”j¯Q´…ó‚nSi<ñÛ\îSÝÚQ'Øj€{¤œÁƒ2¬µä3ÌP!o–Ôôs‡9öT¸Ñv˜ãtE2%ÍG:„\éØ+y½­¬›ú‹ç8ÇsÜY¡;™áYs~<$7$˜>A‘™óùFˆÑðqóöîˆ&FÌ-g(_üHÐØÙË·ÜÊ×˪õž¿m׫¶ÒXáåš<XOsW*ô³¡‡âØrÝš‡'‰˜¯˜eêzˆÔІvÐúl‘™ëÅC3ÏLä†{Û½ÇÌC˺ýÞ÷h»Þë·wö~ÆéÆÐ.ö³ÚðcÌ\qª¬‘œŸ–-­‹î=q"´I?O6Õ'«K؉ץ}•Ga>ÀÈÆs¹WæqЪÌÃ¥Žäë‘鈫Uèç'¨ÚóÎQ ç§Ìè1«2OÔuþeeÖA‰‡7±Ê¬»2wÐM…¢ežà½½T´¬sK$Oxs¥N9÷qä 6ȳ=¸üúûL#=¸{NL»rä @Å}Z¶~5רŒ&œ,Ó5ʃËJi.gAùÈ™è9óXî9s´áÝ¥•3tëÿŒWKv]» +ìg—þB#Hÿf¯cwÞü·J€>û\Ç^é8u´‚Š›ÛhnÎ ç£ïwsS¬ô‹3Œç?èæÐHø»äwºªÎý]Îä9T)ëw7,¥P(öÚÎCνĶÐwAOãái §¨bñZsºˆT—N¸>m¢Ã¦ÖýóË„J‹^z}”¤ Z±·½æ^¢¿ì|%¿»ïVZ†{Yv9¯“5xÏ>læ\W9K›Êc§Ð ¿ùµÜy 8WËê­ ¬|«·†ÿ-Bø#¹Ö]±D¨däzG¡}÷V=É•¡¬27›p£ï¨Ûíx-öCØ/çn²â&Õ¢Üj»CtƒàÖË×°ªíkPÝÀíÇ·Ý#²ûå 1Ù0îD ¼X`Ö§i^Lµ¾‹*Þ"‰Z<ÖTF…<ê#G´Ò7lxh9 嵦îKg“ú¨4xœÄ…èx˜$%xu> À„°ìå>7R\t1{•âoÊ€é¸Dy`Ï7FòéqNJÒsØkÛ 3â¸ãÆ,¸EÕQ ÄO»-Î1¹,Îjê\qwpÚüˆ©/û º%ØñÏÆ0ìûÙiö8€p|ó3W qNÝ‚‚Çä”·’è4ªý’ûg ´‚Ub2â{`ƵåpéL‡Î (VŒÞg“jõ‡>NÔtkC.{"~X»Ý‹U b i·n÷Â6O"Õ FrP=ĵ®“ØOD—Pôðh v(µ‰~QÛª?³‰êìn¤Ð“=Ää}rQ/j© 4ÙýDDIK¹GósæÇ¯+4#_Ü.ý=¼©(s<ÖxÉ9h„·ñØÜµ;Åa`îìSö¾Bj,­u™´D¹-ôìë9-ûËb嚨`}B–nw¬”Ψ +ÁÉUx¹4€ˆ= ºÂˆ¯Ôu6äÜ<ŒiV@(O«Ø®/¡Öû$þyxÀC³“XäÒÊ—ˆYº¢Ïâ'Ø<‰áÃl"±–D£ØÉŒÂ‰ñHÆD#õûtcà‚q•Ëtv9*Þ~œÛaUÓ Ú[Z@ÀP˽”äðøž{´ @E/‹ÕÚO=ÛO!ñsiR,i@WCáÕaÈÂê©Ü |–ÆeØ’Ë“õ­b'lTn–ÕÖa?â+Dr¤±ÚK ÞëêÒÃNž`ˆ/Ÿ7Ê ui_„ž– Ü.qi`Dé|îÑOjì*} :fôÏKŸ·#J]ÖI´V‹çPÆÿ„J5¡ Ö¿Ó1Oz¤ß•sÓÝYˆh=Ý_O‚”9]~ÇhT¿+ô4ö €(ßÚ®PÌ9u·9dÞNQ˜mZsJ¡ÍÏsÞýᇹ„V-WÊ/ç;ºù©Ï< GËi¼ÁíÒY©±=|Þ ”²ú”òð±•2pØ›œÛëàJyÝ‹ÐããódŠAäi3ô»=!!.BWH *Á£tUÁÒj»ªàj\Ÿ¯Ô­$Ÿ.yDaÄz'c„Õ õ¿*™ Ês®ñ*†:æk Åd:J Êdáx‹ 5PY†—¨¾~/½å¹ñ](¶˜Éâ?<¡SL&Äx£­ã¶l~ª“\×&„ršl °#¡ËKüœ”ñþùs‚=³S.pú¸Öpšú<@<K‹Þf‰êþv1"Õ`B¼]\½$2é¬BÚÂã¡Û>'1Ísû˜hêÙ$Zd£XOÃÃG X²mA'?ÀÖ*®˜fÃ6ÐPòIŸ“TX51`Þ•rÕ*šC+}¢e ŸÇ#õÎòAŒx ÙÂÜŠŽœl¿®D}åÆMñK"DTcx!R¦¿!²œŸDXàd7û"¤H­ú%ð3†Ê“@%¼(¦í“¨—P^ˆÀJ¬¢‹ ‰sï… Dó ˆ¦&°fë èYyaÂñŠƒ ëÅ'b³z0aùõ3&HC/ åƒý•Ô†ãø]³[)?6èLÈ™KÍó°£X ‹ñÀ­bË¿“ kw»ü;Y€f‹©FK5ÝU”V†¢=î¨v®,Ó°©!CÓâÞ‘ ‹z×9€œ­Ì¡}ä:ŽZí%G®¡À»ÞŸÔ¯£±‹ZPõ5]s›Ï“¸}r÷ 5½9°ŸZÞUGÌAT®Dœ>éùvr!+#‹ôGÃ….¬Œ ‡øªÉf‘Ìhm=«å„JŽ. ´çV¤–2­F4ÙD“dÝvöâ·EHy·[›Û¥,l†fYgëˆ~6e¿ Ò¯ÙÏVñ‘£Í}د÷’Ü‚¾øã×§Ž…Q^P÷Ìb­¡>…2Géü{4Âd¡>ÇïúY#òyƒ­êÆòç†Kg§åÙ¾ÿ˹˽÷²÷#ßÀÄMÀ,ÐV ñóìBó>ð˜ñº¢¿{*OÖÉè ÿ‹¶¸ÏT& k‚H—Z«Rµxï0k-Ú"°v;Ù¿ŒWIve1ªœçbò¨o¦õÿ¼ çþ§HtÂÎ,Ïlž®DKUo¯£Ï+•ô•…÷óRÆ%$Œ¥ðëæ6¤‹‹îóד¨ÏK3š?­­2ßq˜Ä÷Qè®™vƒ?Þ!ÔTú³˜4ùTaYÌu5RùCÏçÖŸx¸×üRüerÙàgä©g~5ŸVcÏ\4äJbcKífPýƒ±L.|ú|x0b+¼»S!œøó”Ù766öslôÒäÛÒùØ>êýÓaáãvùí£ûüeé€,á‰t-æÆßS‰¿» ’€­û‘ZàæíˆÄ¥4aw6c9»gOœjá8íº9–§ùus“|Ñèó+?×dà`«MUr-Ãa*Ë?uö%Ó–+PÑx +-—×Xe„Ô,ùGÙÈ) ïqŸL¶ó­3*ê(Y°»[æ™mÈbW+?m^S °à>}‚iØ‚¯Ñ(ÎpJq+5‘·9¢× bÄ¢%sø$õÿ»ky·Y×-›Ü“Íd¢&´yå¾Õj»´ÃÄà¥×7žçlLDhª×Uºáî=ÙóàEHó#—›ÄŒ¤Ô㌤“}·}ê¹oÎ@îúÙ~5ãÈ~‘×ñ½œ,[ü„ðÝñdÚíÅî¤æÄµš°ÓÎzÍ¥…íõ_OÆK¢>ûÇŸãçkD£Ð§fçÏgƒŒdãšÇSŒŽ²§©³qw&0:ØýT³F߯K§½0 Hó8õ'' ëçNÿ:MÁè§]#úš3–>]_Û”±ú{£1žO»ÏGsy#Õµn„³¦»#˜ìZ»ˆ0q¯*jv«CÍ-F$j¸Äl`¾ÓSoÞ2Þï1Ãu¯ˆ´Ë^—t†ZÆä:Ÿû“äÞºÙHîZ5øœVDÍÅn}IÈ¿Q£gÚsÔªCmÎr[mõ*Ç*´[µ¾T +õšïÀë½ÝVHÁt1jùhÿoN¦rñw"k•e MúìRÎFŽÌ¡ežW\çsß$1?V¹*Áš$Í~v “§‰M×ÞãZÄ•Obölmü¸o‡I[ŒÝh°ßiÝèËë ®64‚yí¼"k•¡ õ•ጞGŒÇ˸ÜÎS/7k9lxYÌlxùÎ1ùÊ@J*ãa'ižŸÏý¤ÊþuH³ê×Enñ|IÇ¿ëkÉ¡*Š[šê×çÕzbåÅFÈ­!ÄJ`k{gŒ£3³œ„œK¿,°Vñ4ÇÅ +1I(¸èÞi|AªœÔJ#Þwt7Z?˜-µ0àÇî¢iÅuº¨_´n×xòSšez“9óñËåϸ§Q{î9£Ç*÷¹§©xÑçT¼<£ÏµGÜCÜã|îORÁõÈ=ªW6Úë •÷ÅOÜâ Éø7ó"ëTäça:æÏýרò!†+çþÜà^}×x—)ÄßxŒÎ76øXÊÚ_cn9Elˆ?lôyD¤›ŽÚØ›5š"6Ø}Ò¾-Àîì`ùŽØtt÷/~\~Œ‰J!(zôØ‹Ìÿ}£Æ1;=ö¨qx0vTã •­Â[uÞ$æ>jÄo+ªñJã'ªñJ£"ªñJ*7ªqª›ÝKTÎÞQ×3ü‚§®¦_óÁB­#Šq„~ÄLÍè'QŒÛãW8çsfSF屟…+åxd6µ=sÛ4…NÀ䲨6PîÙ4«HlȲûPÎÐ]èâ;Sm*Ƈܙr×4í"Æ^‹¨i,°×hw*œø£Œ4_àá'lå¥þØ¢™œq”ÕGü|Ž*_×|pGæ &DG1i‘ãÙrÿ©¾jà}$ÓÈýUâb|¤<}2¢¾'1ÕUßã±¶ˆÛ}"ØSŽÞ¨D0Ñïˆ@ETùN#þÎë²ÃƒÖ3ßiDÈDôHêãü§®H„‚Ê'¤¡ÖE͈ iöDpF#‚û\‰€wÚŠD ·æOy BêáÁ7C¥Ñ7†JíbY|¬º°ªÉ.FmQº1¼'Y¡ú;UË’†(qc ¥ý. …„Ì×…Á÷q]|×=WâG]Tߊëzзq]OÊqað[|‚„…Á7|'®1aªœ `cªSÔƒ¦ÄW­­y¶·Ò4ǾҜÑ*M!ò•¦`úJSØßª?·J; ëL“äëLÓéoÔÄû:ƒ^¼ùðu¦Xú:sF«3÷¹Ö™rÆ×ÐüõO +UãSf߬ @3縂€ P¶añZu7>É5® ¾[«î®$6Ózu·g ® ¾tyñzEW8´ç[Wﺮ 䣦Ǭey“9s‹*0ZCô„ÖdxB;£Z7OhÊ?d„†/«GBs2<‘Œ>^:7ô³éŒT¤ñÞ†dõHf¤"HfΧ²šŒÈîS%2ôz‘È +ËψIül4"y£1æ}ˆáJbÝN¼F¾éÉ»yÖ¶oâ v|Ùw„ý\ç!gƒÁ­ËއËNÝn`‘w„»¡U½hw(_hxw*—ˆ76öÞÖ¡‰w„kNKîu€Ù}¢0ãîž"ÌØ«êO1):¡²õBú?ßlHHoI:]xC‚{Õí=•9ÆíPM,Jw·Ò‚PÆDÁ°—ÏYRCgµEð†TèÅ-K +oH0Ž&k/H¤‰†®RºÍ`š"7uïÁ¬_r’$Ryç÷$r[f™ï½ßVé·–™‹n-º5ÉãW÷tMDWëe“ï5B¦—ÂHSm,U‘Fµ‘F÷ŠH#k¤©Òº‰ðÙáµÈ!mÎ;¤Õh¸ºÄ˃t¡‘±÷Y²<~š +ôiNiäg³Û>ê4oü Ò¢ô^¤¿Ùrà(|Ùï–SHvÙ®xËAœë‹Üõ}F…ñ{’%´¿SÅ6~Í[Aå-ijcê +*ªri ©œ8¶vìD«µcÝ_hÃÝ*¸U[Ÿs+‘µc܈i,U¤ºfiçU ÛªK2‹ŽïÛºèàJLG9ðxŒp3Ý•èÛ}E)v¾¢;Ï-‚ŒOzçÆwú“Œ¯(ÅÎW”­~ƒå©(hî|ðõÎ@{ŠÛV'Ã…=´Š‚˜Ê|§¯½%ùXBÒ¼ñ'uç[O߬3 ä\y¼ë Õx­º¹ÜuÆS'Ö7D¬RªðJaW×rrLÝÌ:¯HÆ3]g|²‚÷âB×84ºIÉÍòß\wºùùñ^)Uφ#ÎÜ’ÝW{ÖVhÂY ÇGŸ¡»kˆ/Q8ïIÞqŠ.oü _#WŸ­Eo-F°ùýÊTÝZ¼n½[‹‰¼£µDy{ÑÅþpU¹G·‘]bŸôIm9Etu¥ñè=²d0Çó÷ƒ&‡¹gØ]öŽhbË ÍoþËy•c·’#A_§ÐZûb¶Õ~ëãÎÜß˜È HTQüzãñE@îy=æ¼&óþ&™K‰Ü:qœRú÷‹õb}´ëzBq‹,]O‘äu=!߯u= Äbº<®õ„6»z]Oð5†iº]׀䑉UÙOÈàtÝO"­"×ý$E/U¬ûI ÙyÝOªë~‚aà©ð¹vàè î׿ùÈNÍ%˜Vp e2¦¿?ŽìtÄLgý:‘RÏí4µfhcüV¯i¡×a{†ú=õº=šÓ¸êuÊjçáý­Bl\]_à麳p¹îõõvÝï¿p}é‡Ãõ6ðd:5.‹ËùTîúZàY_® v}9µ¹ëËo<¿¨/eú£º^È9ž#±žrŽd^土>Nm`•YQW9çûr)˜H|•s>êKÎù’U9ç‡ñ’sr•sÞô%çÌÉCñ”PO9·ù–s½&qgW¬w +ôÚ)ÜûL`øŒŸÿýÏ¡sdÑ„ŽüïßéóÈšÀ±|Ûwa¾¥x<ŠâÙ¬!Š'÷Ó{AN×/n«.Ù.ßÝÛÝ¿Huå9>½»'å³áÝHñ#ÍḶC±S{?[¹\l²r§Sê€~/ðÁ`è Ú}÷ļ±´cš¥éžšŽ¹Drçj¨¡¨he”+À½-‡ZJj¤øøøX1ÉÈxò€Ù!=¾zf· IÃ(ƈïgËð k0•o«¢¼¬á²ÇÌçIŽsÆ6×~58Ž“-qÒÌ8µjRH7àÄc­P´Ð·ôrp`£š(‘Ñ;'-%d ǹdÛ"VsTÂÚ +Õ?dÜv:¬rðcä0fƒoÆfÙñjXrP&1Ë1÷èÙ0®#Ž+^*¸æÐºÑÈøº +ÏÞÉýø¼i}'³;x‘{¢ _É3¼ý_ä¾^xÏï‰T¨Räâw€óÆïd^025~ß6;~§¿îfÇï‰V!£rãwò®•¿,ÍN¿3^ùv–“ßQõ2`<¿#ew~w1Z¿°ŸXÞ‚} Œ–ÁÊ·Óæú†å3qNÛÇdö7¦-ÃlügNü娂å+V+»3«5× +ymqùjw‹_˜Ú®•Òòdpæ€v„¬c"m1:ĸ´Áº©§ÅP‘j™À `-9ÄC³ì¿WZfÙ¹F©V°eXÇ>YF/ü÷’÷C(…É'EÆ>¼ñ‰~ˆnÙn2sèßA÷jÀ¥Æ™äóu[ h¸ù~Ä”âß»JíJ¿/6w›gŽ6âDhPñi͸u6 ’~t6éœ]àƒAiÓuë»)h¢D–ü¥KÛšrah1É·'#µ!p°a€Ð¸ë‚§G˜¿þ¢$Üó {j„jüÁùæìà´ÇR$hd¼IóÙIoš°òªzÒ?"άÏx¨jjRW¬`êZjrS0·¢ ­%1É8Z'™ø†!RÀ8¨°qsQnN:ª{”º2± `«FTz¡;á“©Šlv末Œ]_߯c¨÷åâããˆJ£´Üæü¤QQÜd~GÛ<–Nqß1o`Uý‰b ­R‰'Ž)åtÔY´Ñ£5ž7ÿÎÎNS¨@·A3a¸Ð÷Þ(´òrEBG--ëËq:[aùì­Høà†oˆ”FB±i ;›»¼FÚ¶lªÜ tÔdg{^g2¢èèöZ½Ê T^æÅœ5dE󼘜Ã""?>Î8á]õm£Û²÷–@ÿ‡‚Xw58h—‚­RȺ<ù:HèëWE°î|UtOh–U«zsÜ*€-™+ÎZÞ¾]|«3_„Š6÷À¾Ô•k3¡9¯³Z„bûôÔ—±–~BeÙ8]@oéw²Ü/è7‰çTŒŠí,é„.¼ò 2 ÈÓ!Fwͺaïà¥6$U’ |0(spÝ÷G«&íaQ‰|'ä|’`¥ýHž,<¹–Ð4 $Ä:!Ëç2n’2ÁŒ“y °Ï¦™M_5ëßg¨2~-;úúÌ´v 8¦La•‹ðÀQ‡Èq€ÙìDZe%X 5ûaÏjc~%PùQ[ÞÁqJšþp‚’~YÖ­×Õé­©#ÐR‰ì¼ÜœèöÌÃçÚ0Aìݘs~Ũà…»~[<"*ÇØê06#ÜÉä0uã~’i|'¤A0êGT;9Œù§úF`²Ét3ƒIR̬+ñ¶ á7GŒð¢n“®›Ó ¡Õa*¥­\ÖtU–¡Vc®Úx-(ØKáG`åùÄ•­x ?Ú˜Vã•·ÚNá†(T°q·ëjæ*\â v4ƒí+T;Ye?%0ñ}x%+PÍÀ1j¶S#|XÝIÎKíŠJX@7ê‡ Û‰íd{ŽqcÊðîñ>j1ˆ"²¾>µÁgt‘I‹ £¿ééÁ¤‚úá.M*jߘg…˜—$¡ÑU¢„¥­2ÂÅ`žr´'yÒŠ¹ÁÚ‰ïëh‡Ãô£ƒÍ¦¸i.|eØÿXÙä°Ê±Þl” צù¥q¦i9˜6P—éQÛøá ¤µÖß(Õç`äóò#ÇvHâØ–_$ž>fÃõ™†,U$ôúeÈ6-QË嬂ˆ„è™ue¢â|k š9vç…UfÞ¡›õ«Ä 0‰ #²BY@Ò;É™†…‡¹•>U@Elø .ŒÙþ ‰¬‘:s s+À278˜[¶e ˆ•ͲQ³3Èh.í¦f”­!̪.ôΘü猃”5ãuªÞ;[}hzÖç'ÏÉø¥×»&÷rVÁ¾”»µ/…ñÆÄ¬y?LÜíž5,tY1U•5€s3a“5ïdKß äý00iê \}˜4õ·XJm€-;°ªÓ#nPR_»®¶jg¿bS[ƒeNköúrƒ¿í¿K¸L8“|z^ŽRYµTB4o ö*ÜöYš8A¾Ž ZÇÆí¬€¢_w;½‘¦ç–Sšù—‚w”ª*ê…à¹CèŒSðA‰ÏPlÇspí½ÙÎÕNЯWëÖ»à{g*2‡ÇׂoïiŠŽ´„ØQYt57[7‹‚#£–Ž´ÿñªGå†aý;Å»@üþ¥2Uúäi¼Mî_ (‘š]ÛëέÃ?€Üâ¦ÌÛ>ÙxÏ´¨²OJá4.–¥®-1v½3‡ÜÖ>9;Ax®ª#dV(ÁuÍ ðz²_y¬q8[á 8´f8ægzoG°±4Jo>l<Ðî~,ó|ó–,ŸkM¤Ì·ÿã ,~ä±½ÞBÔÁe»è[…ªê’gyªHI‡)lÁÉSEA”K@“'ôW¥ACϘ& +œIø»’: _S´Çœ‰ûÍls±÷þª‡ÛÞ8Ü­m›ÿ¯)öŽ&ëP·ƒâv&ÑÉÆeskxØ!îò†ØÕlâLÈeX¥“ À,΄?ê &8“L05uaº|J±;©&òö–ìdŽœ-¹é8VJâLðmPû}RÉC㻽]?»f·Ÿq&.Ž’OÏÏ8ò¾È¾<;RŸ>öxß)v§á~vfœÞL÷&ô"׸FÇ» z)?åš›®Vs½xY¢èxw‰Æ×&—ÓU.¬.û3Ñø>WQšè8Í—Ë2 ;¦´a/³½Z?0њܳ¬Awdv~^=Uø‹½CžKGZ‹¢[.Ü)EÂ̦»)8Ãùâ± ½Ø2p¼k~ͨC.¯§-#X:lËØ¼öŠ8(gmÅ–5óóø‚Õݶb@ ÊÓŠ?â¹^pDAe;®õæý}`z=­sÇegáKe Ú¾i¨vÒ´ïö㇀³‰78µ;h×ÞÎ*ˆªv +£·6åñm›6ôAÑr^µäyY^9¯ÚËÞ,«ö4¹4gO;‚g[Ü›eÕ¶X×H (°'»s¶uBY;9Û )YÕÎN]ÅçӓǨ®+õû31•«ý|v¶Ë„£äÓó†Fäôb\Ú鯥xܨ“1:¯yzM7.ÅDÊz·Æ%‘–t2熫˜v7.eå©'?.åä5jõãRÀ†€îq©žûj~\:Ú6.ÝÚ¸^;ïáèÈü4.-œs½g¹@áN€¡Þà ðj÷pÜ­´"JpÜ# +0–{Dæt(ÀîØŠ½hvÕ{PFTj>‚Ê™YïA]Þññ#_bɰÚ&)¿E5sÛ+/v‹ù, ‹Ö¶@$¡×¯fkÅÄFîr†rÃÛ"¦‹Î¾ËÒ<7Øg]„qþÂövŽû|:YL¢î±ÅQ^{;ª 7½ëÎgÏû’,^ø…ëåèÒ°Îõî´ÈòázÎxx×;X ¡§“!jQ¾Ð™^`µäQÓK0Ô6ÓK0Õ˜ÓË+C,å0½`A$wgz»3½ö•ÎôÊ Na¦×(½azeE’Z|6½|Vf¼ÔÎAg{³%*+­?¤È–û¢=ï`¾^^j'–¾t^€{XoÃK)‘ÍÖ^ÊSW+ªF¼Ú°Þ†—µ†½¶†W4…y^ž‡ã /A,¶Å ¯( ·Zox¶3¼öÎðŠce˜á52?Opš“È1PêSfaÈÂÐg3iW¨]•ÙÈé|R$ºqºïJ3²?øŸ²o|6? ®™Sy™ÌD÷êÍO¨BbX6*š2{f3Tœœüu° §‡³N±4¿Á¢Â6xÔB@ÇTcMãsÕ,ƒÚqTâÈR÷ÆG>1£È½ñaµ®È;2;?zÞ8t”¾ö¼û±÷¼<=ïí¬‚KS¼çK{Þò¼ÅgÏËËâÝóâµ=ß=/¹”»çuÍól>ï´Gº{^¼=„»çÇÝóôæzz^€-ûÔ yÌß|÷¼ˆB܈^—Çgìr<•|Þ¾Ñ}fÞ¾Q@ñ+ŽO~Ë7¢(¦s8½ø*r*‡Éã@) ЖÙGÊÖ<´ÎñmЧ@ vç{ Ï€!|´®êR„|™ÏMßYÅGmµ +Ca2ÖÙÞJ‰ %?$‹_¡$JMAÑÖæÏ1k™-Æo)Åt›g‘Þ´Qô@Sy(ôQ*}qÐÏ®hë“€ãß¹ºýüu†§b +7Ô8iˆÓßÿýûzfÁKeY1ÿ®£ó·ÿõ‹çàî‚;‡˜‹×£ÍØ Î^øèã¤BÙ6»±|ÄäfkX„¯Ñ…É‘ŠhQ¿÷( £ f°–ÐSlÓIãî¢3™d&u0D¡1HÁb„“Aín‰ê¢òE[ó$¨4 ¬ŽF‚RKw'¥.Z2q¥a–²<× #MÅí3ÑËqýœYaYì” |§<8‰êïÒ4E_&¨l9û£.Awgq MdG:În°¸0ì[‹Ò¹ÈkÊEçúAúE‰d4ç)¯_Š °‹ø,Ké6ŠÉ5ÊlUã «DÑ 8VâòG’Å +`];Ós—ؓݙ¤®J…°“I+€VŠ­EÕ˜«Tîh¼º +l%}˜ý|ˆp¸Ô8JíìÇ—Q.´¢ñw ÷ ‹OrãV4Ÿ=Ïh ‘2àKp©?ÃÿË0×a]n½ú¾^‹ •1±øT®8ten#¸x/\mUè@a/\EZ© +­å‡µÐæAãY.Ìü°… `.\¸î…‹ WIùªbwæÄ… à^¸.\§F'‘æ8Nâ÷ÂeŸlá*sÔY™à®WsfO¼âs\ù,J+Ô¤¦æ! –H¬&-FdT|$ÀW@ŤB î§fX‚{ÖRÂ30ÀíÎq•ˆ;9 íÎ.N`ëv²Gn"kV¤HÇIޤ2*èŸþ.1’pØÉ;žFæˆçw‚†®›ßôÜI~T•RB°vaDZpNVŒ©ÓyJÚ}Yú¶Ã]θ;ƒugZâñ° ×ÙÞ¨ÂÇË0äGèéþ²â-óøS„(ÁyEÈF$ꮉ¼ ¡ +Õì1¿¨Œ>•¹å¹%âÛG,CÆyè<9ÁÖ"¿ Œ«OQü<ЮM0óõÀRµ+ÑQÞS²]™c"ãØöÉ¢ÊÖì-½745p“ÜÌŽžWÈô‘Ÿ¾~]AE¼ÂrÐ1ðÊ«%˲Ün¥WGÿÏÔxÞ½jâýˆ|îJꜬx\„‚Á“Hø,-&ò‚!‘×Å“HO’&Òöl¿Ë(=ó ÞNFë·×󌴨A[¨¶%šÎf²4 jǵž4 €[jѽH ¯Çœ“æfVêä4½÷Y ìÉ6Ïmðùd—qzja¹`yΑHdúð8\ð{œy²˜&Ø]ƃ£Î£%ƽ~Ô7jY¡­m§ 8ví<®¦(™Œ{8Fðžšv1Ë Ñ0d¿<ø(‚Ù)*î‚Aq÷ªâ<ÿª8#åg­²Àƒ$BkÚ:´Ìïï¾›¢Ë¯J±Õä$yh×zW'Ÿ»“JF¼ûÃÝ}÷î!¹ûµüáÝñ.õ)óÝ»k›¬Oü^ýîõ °ÑÝ®>1`äã ”›÷óލ{¯OúBS-¥sLEEõGsñvªG–,n½‹yä¦'w9¥¢5vš×,ÊÑ'­˜y³Yr¬ËNçgà±DoP÷ú¼ïbÇ¢ä.)§è³®áû¬»;ù¬+yOÖýa7ëŽæŸeî¶oÖǷLJ`ØC¸¿Þk¶¾•:aiÒÖ¦wçÇ`™f)Y-¹ƒŸÜ}éôê@z<€azÕdŠáBõ(.±m¤ý=íÕ£igäBž®Çò6o€yîËyî´IuÚ3ÍЈK[³ƒèyDÆÇòº„"ÒÖ³¹„eJuÈ­“閭3·ÍÃx6CéHgí1ŠNÛ?³?Îr9Ú„¡7çÒù^u…" br,‚ †"ðRÔ"ðÔkøÃþ¦ÐÐdtC¤øGÖ@Ò¤!ÞïšHj›©½k%Ácž‰ûµÐï¥êKV3ˆ8uò*È[¶^RÊLué8¸gæEЙw-ªÉéü`Øö²5¢Í~,ë\:ôeSÞ@щÀRþ ]ÿøÄšQ_PCª¨ suLï„!J]Vž…°>—û×/Ÿyäû€¢åBy{¢4ð':¸ æÑAq­sË<‹CëMRƒ4âM8ëP™MÂF!åý•^1„ðjK­ÊŸç&L@ÊTàÖa>áŸÓ{3ŸeŸµw(fY'•­-ӚʗË.N |¬vÙ•[BB«é*‡ÞÁ`jžˆ |œ¿ö¦“L- +3Sp*Ñ‹¿§³4FTÂவ(aϲêà#èï¤ö «ªU[0hr±³„Qh­E £|ªñ©%™\@¸ú"á»± W×Ê+±“¾‚š·•a%;«ÞœÉDT /£$¦È-á‚©EÃ2ÌP]æœT‚#‘í¤ÅÀ9+/µ©Ûá» ÞsÙã_¬Á3ËRù$»+½u5\ì«ãÄŠE„×xoc†A<²£EK<$¬5¼ôj‰;öl‡ XG:–e¥X5ãøHÔÓp¥]Ì2$CøÈ4ˆ8ð)*Ÿ8-*Ÿ8•–Oœ*‰Ë,KM±¨|æ´¨|æT™AO³•]ÏdqJ± ø]ð\U¨}»æ”bUy–¿1b7–_U t[UÍU•4ñû»°Ã¬r„¹ÝYÚC›xÞ“ƒ¹ Oyßèí#¤à8» ¿7@L!åËü`‰]Q_IN9"Ýsm'åOø—¶ ÞþI¹ +û1å o6\θgéÚ!ô=FÈ8q´Fȸ÷„nà2klaøãd¼ûQàô""wUYeo/¢4Ô*s/zQO¥OIËmFg T÷¾Ñçð­Íè¼åë¬2ÞÞ0óÉвXÌ'7l€c9Ÿ;Qœë«»8{iDïB‡0Knšë²Óy¸ –X‹fŽ>yÄÅ.:Ý5åtµÃÁBUìÀRµÝ†SŽ˜zÕ-Hľ¾0EEKÚq«mA,vl­ÚöÇb÷ªb>‚>sWìèêÏÔàD\ºIíT“.v1D¥Uçò^}tûC\¨SÁ~¢uÊç¾Z߯^ð0ÆFÌ¿ÞÔ¶¾U¢ ,euk¾yìX¦YŠÖ_K~$ƒO/èôêÀ3 Ÿ$nU›X.ÈÆ@ñ¹¾JÚßµ^ÝAªu¦Aª7gæÆ[ÒtBR›û&&•³oBiik +·´5…é(™ØÈ[K÷8œømë¹Ü5%É +ïŒGSþ28°l†òôœŽž3Ö\…c|êî’þÒ3vŸ\EîbWC;È•.”v,;¼j÷#è“£eçA× Ê¶0µšrÞ¡ìÞœ‰á¤cÙͯî" +¼…–qÁŸ]~OáM7VH¾ïï¿üÓow×Ü‚ªuÀ>ºª€ÇK€Xò¬XÄ“YÊ+Ñ1?\J™.hࣗñEÕô‚£jÿ&ƒ´ºr.ÙÑ3v°×£^úWŸ=êÅÇ©œ/u^<èœÁRÐËÀ“Þƒ^ àÙ£^<ñîæÕx Z¿àOô_=_½,§•ÿþëUA.Ùz¿Á ¤¨*X+›4xª@ræË6rW€¤íóÜž0ønyå àZëè’:»öE¨èlºä^Knœ%8pdí¡´j9ÇÁëtC+~^K¡èñ(/Ì{´Lh>HxÂ4ºâu~NÆy<“¾‡y õÙq–>BЛqyÝ^m…º¿q>u0YP"œÙs,|Ü·}°T޵ð©SåXø>mZ<A‹Þ¾5"ψÖ3ý‘­œÂÉ.t5l5ÇÂGâzÖW*šÖÿ¶ð;^MìC ­”v$*üf-üJBû×ßq%r+õƒöÍVÀÅÝ%L½ÜÛ4 +ÿÜðó–.ŠØ¶¶UUÅ Çk?t”–9i…ÄçØãîn‡jdŸ½¬kØÓªçë™–n}5|4*†s9RKƒÀâ\¢KïB`odŸ¸p±Ï1–Bw2Ë‚“æá®,Y,q¡Òð”9žÏÕw5‚ =~¿ŸS=@GtN5l´žÎ…VæÃ:òùD5 Rÿóï߉¥€þvÅR®Xœ‹?ÿu²ŒAž’”1²´µDäéN™6M‰ªb@¦`æE– ö„ì°7áI¥‡Ï±Žmó™EÖa>sÃðE`oæ> p³,xrÎçkÚA£$JHs³”àAÏjWËrKhyÙ×SZ6¦žˆ |TèSk¯èý5Uôžý ŠèñykQô8g78+,ÍUï QÕƒÖTË¢zTlnQõ¨®Ý¢êQ^Χ¨¾`âlQõž;Uý ŠêýçWõÀR‹ª·‰êDû{½ƒ‡B§½WÕ;},J§ÄÂúG랢ôš3s&S%ƾN ôeúeU&µö<óZ{ÈYoíùljí½ ÔžÿüÖžWÖ:LOV{釵‡BYãÖ^“ÚK¾öäE¸†~Bé ƒêÐ1Þïιú" ¦]<èuÑ7F¸t¯Û5¦£‹ç¤«‹².èë94_¬ œ“ÿËyµ#ÙÚÚÀ­ÜLñÛåÜÿ"œxï?p „$4S¾sê£O@«õ*t°ºÀn]C\ƒ.Îa è/ju‘°RÔE¿f)ºà +EQ—äG/(ºðŸ_]àœJQ¦?®ÉxrïƒðÖEÿ®&ŸºÃ2ÙÐ×5€­V™ÌÑÕ3•M-j™LæwnÕs|]ãϱi ÚãGkT™×oµâ¸’ù<ÅŽPÌç)þi:ŸX[¶ªº»'öF^ æ¯/oýˆ‘YO?óT°ÄÒ:Jôy&ñ>>†{¦œnà“#;xrbàGÕEO’Â{Õ¤xAI +|Þª.;’8hU]•$)&µêR%Y‡ó)Y1!;óy²‚:;ð&Z^öùÉŠ'ž7+žÈ߬x4r³"€'+žÏ%+K†¬PÕþ?óùûº¹A¿›ÏA3Ñ’x:A`‚U鈞ÆG­KUræs€e˜¥dÈkyºtðy>½:pOò[K5*–Ü@ñ9?JZ_3¤ºƒ4C+ò"¼³GË™E`ëšÍ9k>’73ã-™Ã‰éh“‘—æû¸š¬^š¬/(Éê?¿ÉŠshÅd…bÚ9üZ´2¹Eí4ßµ0Æ5üô |#pWmâÉ öÝõü °YІúnlÝêô Î~\e`…pà#,D®ö(,©õ +ïTuõ‚¢+|=zÔÈ*Ý$t4€Û§u…w&û\tEè =ê +n=êŠð`EWƒ/u…x”uuƒôèêEWþó«+œS{Ô²'wÓÕoäDˆb¾ršWN^0çÿÏW˜I¬”œ¾OÜßsÔÆœÙs&Ð<¾±l”û»¡,Ó@©n oxVÖÜþ€¸’ÖÕ3Åfw%)Õ`t8Ë3ó4D>kéßk,0(,Ž{ 9o.¥¼–BÒãR:Ô{¶Ì…ï-k-mÄ÷üœŽy’ÇsiiêX—á÷ZúH +CoÌ¥;¾ê: +õ|¤§BÏœϱ„”‚€Ï[Ž­ ‚g^ BÿH#Ç‚€Ôv>¥ àßœ­JÜ"ƒKÄ‚€Ê3ÌR +È[YÇÜSŒ&W^Pêûú–@)Çr`qûŸå€…9xËõ³í‚𷬡°²@¤þÿ¹A =É'º…ëDkÑVÀNÙÕ+~4sÀ(m¾ô`P&”ø€çî똲c¢(Øa°­)û$4KçN4¦ìÜ@g º;±#BÒNó(†ÜHíë㑠Ƭë=š/f \¶®K}Žú ? eAî´ÊâB‰<ô‹2&kÜ\ƒiÕ੽'<½pNÌ³É ™ÔŒžÁÞäâª|ž›<±|$îëÀ*™Ë”xæØ›¹L¨ƒÁQÌ2'”ç°sX&;8Ù]SÍv•%ÄŸÓ¾Æ&ãˆy.dà_¯ÚüHÐ?]cæA.øh-JÐrãùPeeédqcwŽŠµöèá£5bZ«óWH°ú5¥Œ¥/tüTƒ^á"¶5XËè¬ ,—”po)'„~ÂàÉC\RI¦¬#˜„ZŸZ4,d†ê2ç¤2à~ÊX*†a1emìv6ZÚÚ`Çå©o˜êI bçòØÒòÉ]¾öÜÈewªŽ˜ƒ ëŸ<ófÜP¶¨]ËŒ±`ôbG H3mY–™¢®3ú™££ñÝð UÌ2ÄB #ðòà“÷úOZxBUFTÁùp¨4¸š‚†àl˜ˆÝKAÓÂ?É%P)Ñ%¨«)¦HÎ)´D£¦˜>n_ØøiVà“nV4—REïÿ¾Ébaœ”J6±Ée’” è ¬U<ø×ózÁÇë}ä^:®AJðá­/Œ!ôö>`Ç¿1ˆÊbý9Æ ‚™ôEeQŒ´1(¶Ó„A/¾G_þïïè q¬ò¯ÿüë·Ñí{¯Èÿ½.Ñ;Ÿÿó®>0“ }}`"j•Iõa–²‰è¥Ê$z'%=Ç—þ|Õ®é¼[$À:ªLˆ7ñfº>oÝà óyª(@šÎg)y‡»»{Â0mKƒ]R§}æ…`Æ«S‰Ïà‡mu¸7ÊÑzý*~½Õ¯U¿ãc¶ªŒèw vVÛž¶~'ª¤a¢_¼³W[üŽ~A\7—j¹ºž}3ÂBáR›‘îIrI„—ªÎúò/„/lˆ|óåËÁYW¾t‹—ïÀ Ñ’å̬õ¥¡•xtÔ¥Q<ó!@´>µù¾–§Ÿ§óéÕcÀBf)¡ïx©u€S×;z®c±f {äà鸞ÿ^ ô RÝ?úèQ•¿9tþ"È Õ®Á9úJr€gôè‰se=® +Óµ2»VQÜ\[ ;`¾J˜ßÕV ÷1ü|#›K¶ÈžfvªÙ9³ÜZ{;øßX6Êýÿ–i ””z <ëPÏØÍ ®tË™Ì5 ×È&¶S!ª¢YÊ Àle-|{AêL}ŽPã<0ùŸ"þZ +IKé ïÙ2)½·Ìk¶ßótœBþ²©iæh—yð Ð5œîBÂÐsiK¯:‚ŽB:{y)èéTý{P3Ÿ´ÓÙq|s·'%PÜsLgpÔs ‰ªÑó—1(ÇtFuk9¦3H¢ÓÙøø†ß¬g•'s^Ïà ûOÛYü÷¬ëYf`Òÿ?7ˆÑ$9ðD"sNóæòÚ +1‹­óŠè7sÀóxüE—ŸÈºÏýöÒ  ¯mœEÏajks ¿~nàÏx*ˆt»<Ç&7ŒB”1×5,‡çí˜{g°Œ&ë]Æ–¨0ˆ~§kl©¸Ï{“­MiÆ¿˜ÎfÒÇÚ¥`¥ë=w`Yd\‹O€+Ódp³Äê:öçsØAµïõ[«ÝS.Ff»q“W"nÓ¾æšPŒšçF>æZÝBÐ ñ½‚©¥ çN?7ðg¯•„w ë׎Qp,žJÜa$3 +Õ Ž‘ŒóšPžfòD'¡î¤ ]Cç2礜£ŒÃ`*b ÉìÉÂØö{ðùHš>Úõè•Øèurk!©9h(3›»î¥J'ãH®Ä}íð¢¶ÊÖ µk‰§£˜;[ÀŠF½Å>STHŽ ó‹VIZQB4„.–{4È!HAX‚ Þw~¾r³Ç»ï-ú¹?«1Ðɤ+½æjŒÔƒû¿¯Å˜ççÏÃQs “Ö^M³=}á# +EWÁ@ˆ¿{;é Ô¿ÖýÜ?"·è½"’›î‹î1þ/³ÊbwE _KW…ÒÚäežJ•®z[“º÷2æÏ±^¨ŒwÕXG•V{Å 0Óõyµ'®r}Þ\HÓùÄD vwO w<&ðvv-O²ñj7«Î¿§‰;,sôxZ-æûÑíBr¶pÏÂ>ßHð•‚’dcŒ*èo ŸûüD +wmÝR /ýþˆ–\ݽ½õ¥, uã5ê§ÿò4ÌR¤ðZžêóø¼…›O¯ÜàlK¡–5aiŒÄçü(i}•Bu—)DÚÿ¥¼Z’e»QàVÞ +nèÿÙ€=÷&zrߤ÷?èDBÒu´Ë³Š,B 2LÙ o»=õÆ>¡¼>+žÜÐóÜ¥¬ «8 »º]Bgs©mÕ¤PÎ͵ùC¸³“(¶˜n§“ `§ü¬C$nÚA^ÌDÖÇ|™yÀ‡™'K‹=urXö¹ƒ‹™ñÓÍA²&C`S´Šòæ°tìxM–{‹”8ÕŽ}¬ ÕV-mû¥˜š[j.¡rõµÇ„ÙðÏÉà•àU”ü÷Ÿ > æ P1’f G`ŸsŸ´þ‘4+¯ƒZßRç²ä +ÒÆkMÊ’«Rã,_9Ÿ&t­w¡ö†ƒÊ÷Š=ÍÁ½ž= ôOÞ`ŽÞjû ƒ¬´¬}!@;Yî‘OBõ,l¢hc|ߺ‚RºK1liI"—6µøl{ï(±‘•þÞçót蹳锥¼ëÛÏ"ËA!iޏê65™?˜ôô‚Jñí>½Ád¤>Š–|¹"ö¹ƒÿ·7 ^×/¼ÒDë IƱÿNšò0wèAZ¦Ü¶â$µ%¯ÅC›l‡×ºIBÔµ­ðäIa>Ì@>LÄ©¼1~–’£WJ¥KA_"§Ô‚5x_KA]`êÅt[8 9ŠmÑH6V›žQ™Øeë€]šEÀÜÔ§€^@0mû°ö¶´OOn AÔ—J½˜JJŠ\.Rœ<22Ê)‘Þ%þµtWôÔ\9xEIåG}ö”ò8¸L)M^J?+å‘Z«”™JBgÑ·Ù=°y'û±rÉÙ$EaMÑy§=` å5LÍ Í%ÊlÉĤËó–|aí‘ «ÁʃQ³e]T»Û Â*o¶#.%Ì=[wi–ÍŽ©! ±šÍK… + ¡Àòe)ÁÇšÖç­¸e2ÒìpºX<ÂKLöN>;šQ®4S°©ðTCãì[ˆì"—<©áaŒb¹Î=SO½‘ËÁÏÈudë"W9äòž&­kà%k§ö%#øtzºa}Œ òÍ«¯=3ÒÀçîÛrçî~twÓiëî•gäâ&þO㈻ÃM€Åä%fO,©,OP‡g3ØË@#§|>U²Ú˜»Š[£ÀØÔ§1WD/šÏÝÁ¢Mù¬%.•TOœrú[M•˜ëÝD"F¶ÕoOýÇRvªxù´g…­ŸÎ–êŽHSVCµÜà]wKßeK‡yÝù°Oê~TЪ{ûñ6ŠlGfÑ5Yñj–ú–ó|ÖÄý6ŠèÓÊ¡u'K ìÓf¯œž \¯(ÀQ¦US-zÝAõ9¾ÐŽ?ëž)x«»‹Á Ë_.¯åžÝ×S ÷YÍà†ž¹à.Këu %Ì‚t»ì˜—æR»¨I©ŒˆëHÑ¡Åì ód‘&Áê3 `§d¬©/z2í /"ïc¾4<àCӥ˖"p:ø V\4ìDÃ}sÖ—6Sp¡Y­ÃÈcµ¹ìÝïÀÔªó`'©BÊT4{|°Ì2LJ}’¹£$VægîdÉå%Ä´ŽÏ)REœÓO>yIi]©;šÌ;Õ›q–užîI–ñ„Ì[:Ú£Ã"Ó:ð–£:¢/ݺ6§GßjŠHwù˜ KO‘{ôÉCGû+FAŠËJ¯óq2tJÜ©tj6÷[MåaËÁiÛ¢’ûØ#rü¤ÑÓGó>¼ÞàÓÌDYóZ|¨y!Z“%›5·”Gm·æòŒôöh^؆°öm¶5d¨{½5/rÚKKÞŽa[<ÞYø}ƒhÛ™”[p·Ì%hPà,Ò5G+~;ö†ùZŽÚG~}Î:Þ§c¥—ULÀŠ~pôRêÃLC#ËýyÉF¹ÏAšúØ»°G”°úy˜½¤¶ÀÜ=Ì +©5®ÔKŽkÍõsXŸ—áªh´õuiãŸ×`cÒQ®‹I‰˜„¾,K|”Zp™ÍŽTûÖS©Ó—1©˜‹£¨À¦ÚT¾¹KDÄ籨žÂþWä˜Ûñ 0ȬX‹ûli©NÜ"¹eÒ®"’z15†Œ\.Rœ<22Êa¶Þ%þuYJ×RsEäàÕhïuÏ«ø}ƒu–·RSÞ·fy{€‚ò¸-qìӸ駉OFœíH]!à F öò¶ÊQ‹±PÏ¡ÂyDTbï¡”·ˆ6Þ7¨=@\²À9¹ü‹w’T|õ@¶B)¬¦¡£!gšÖ)uÄzp¾6ÙþE®¦àÌÞ|•‡<”×0574—q1O;h=TC +FMPhn°'v_×ÝqûÜó½d,?«ƒ[ØÔÂG©ÀÖÝAÄ“ºÊÛ§%ã*zr6©™ÛkÙ†–¢·¬ÂÎOW°É#*Eáí,ªSJ– Âfr˧ÚëE"¯Æ<®Æ$¯R¤Þ˜t'oLÜGrkcRž¼1oKköi ã§Sk¥~ô`ˆámLøáéjâ¢d¸½“B¶°ðö%‘Ñû’Èè}yƒÚ—¢OÂÉðnKIjÐÑùI[⣶,Ô–úŒœÿyÉb ÔI>zë»3š=#‡zA™0k.Ü„1ðûfQNí% RÜR #¥h/aNøanK«û´JúéTóÛ³ÍTÑ&dyÀÖžw Î%.nÆÔ5^Æ ÓÃÜŒAêg÷07c¸ƘÜŒ‘Ïýa[Œ‘c4Ê{øÇ|ZŒ©´ÌìQ(wò?B¹uΦíâs¥‚Ì4Î^ŠÍ=Bùɳ±µ¶‘*‹EV5t\•9{|žù(·Nîs¿UF*ùLÒœ«Å9DŸ­ì–è†{bÄBeRlog—%Ò€%"ß.Ï–_;ž#HwðjZ³*k–~ß§zµfá4Y³pB­Y8õÖ,¥Q“}‰ýt£»$Loï}—lòÌ@˘¸ÕƒÖ¦!ulÃj·ô¯Q/£4Ñ´‹DÇaŠÒ£ò "Z\~5ÎòC"KöÂFˆIEÃ^ŽªzüÌbt÷ª'¶YŠ`ØÝ qlöœ_¡L!•&O¹€¥ÍÞŒQÞ†ö?Ê«;Óæ>E_ ý¸/'˜Ü—˜DJæþÁT‘ ’’^Û‰Õõã±8Õ Éο gÙ–t‘‰/˜ey?T9`É*¹lÇ,ËÄúa½Dͧýy*à†™Ã¤ ~ÚQ„ –Æ–)¡]IÇÏ8‰Šù™ @à ù^àlþÿ\{dì’ëµ­H|k –ÒÑŽ‡+÷ø9g.øÐ¨i<ÊÛ¤¸ú.9X3ÉàJÀÖœ»Ìƒª +’E’IƒøC§¦” HØG‚êäH.ópÝ’®³Êæ®A •4$CWÉe<–ì.Éßnâòlûó8»LŒI69\_¿i÷^„t«gîG0Œß¤…‡ÆD´Ñû¸ô¬” a¶µÑÿhVÆ7&éχU¶šŒ§¬€hÌlûeh½Böu¿Ô±„ Wî^é-UùiÖ>î)ß·Û„| Vbü3KWÈ÷+ºß¶N2kƒm ut¡B։㩠+°Õ]ùŃ +õ²K¯ÆQ¤«9:I2I+‘“?•ñam»ä]Ìãbzc6$Àö«Ão€cTÌr'™nŒ‹îº{@|‹¤ßÕ±‘%ÆÛSjNGƒÈp®‚€Uf6$ʵ0®GVÝ{F®;æéÓ‚x®2׳ö ìúHu¨ò¤@s×›5¸4Þ#úg{µ„ +ØöB»cè £ìb°¢±ï÷9nêß- +˜#Wök/&`fQˆäR±ýy]ß'K&*O%©o]tâtÒÍ8VŒ:ëšôUÖÚôëD2—}ʺQG‡íàí ŸGYsŽaóM7&ÍX#´èÒyUa„ÿò¦©\â¦Âð¢{['U*2WE¥¡N¡â¤dÉëq@]ç "ßbÑ,µ ¨ëRC'Ãlb‚v݃b#˜P.j#N…8ûæÄÄ]} ›ºÛ²9¨ÅýŽAì"Ê;B@×VÅ õWvéP +û®—›ÌçÓJÖÌåο‹F W0óßƒ8û›¡-»R9t$¼ ’WY\õ3GC_ù^E…½Þ_Ÿâθð76xn’±"e½rlCñuGwÃ*X7*ÙB(Ц‚+þk8‰êÊ™Q2wÐ +[™:¬Ù±9Ê áù¢œf„Žrò\¯žböpôª'íW=ý‹p¤«˜b]y6aZÏÜ9M⎎M5‡[zX殜YNHn +aažÛ†É’«^çtÐàè×ÜDœ#&±2)sÁ_­‘ÇÀŸh˜Õ–×þ-P“ t|{ÆzÇ»}(õî-Œ0ªÚV¼¬_TJÀ¿J2/ÐY¶ÕxvNul؇,\Hq¿6ZÔ:Šƒ2iÖ½×σôŸ8®¢À¢³z±¥ +f\. ze6$¾wÂB^©ÑÌjofÏÌ3­€Ú›VÌÿÍŽËaƒšän 6¹ò”Mlêof†+³ð2—K*i¥£2 M+Б“Ó-hs +¥Rj‡—i•¿I«˜9ÓÊ™T8›ß¤~.äÕ+í°!$†77n1ÆF©Ö=£øs _ŒmĆÑr'õbé•ìhy{XÞµU4M|¬Ö" ºø{[ø{›ˆF© *ŠÓ•y]$ø-¹Šdã>ßĶÞØ”h´K©¬^34ÛÅ,¯uŸN~üuD( ùnL šÔ¤¡Fˆ;\o `ÈÅš°±:†ìY+Ús ³°åm-¼jÀQ ŽÚ¬ÎO¢ÑS£¯–R6o}|g4Rk)§Ño‰8¤“ck0N81>Ø<ی܄ qN2®¥ nÊ’Äßù4;b‚9ä, ¦ ’ÃwÜþàÇ;­°ÖÉB®l0d&œÌæ×;%ŽÐ ]ýÓAla?>dç…õu/É›˜mБ­¦C#¤znK÷tÈ©T:ìh,ù9RÎn€Å²nB5z±‡Cäl€Â¯¨ƒFbf2ôÌÞ >3z`lf2ô1¤+"÷Ë0Âg‚a ¶/€lì›F¬N_V÷*ÙdObYãamQä‡]€_²0ÎI¼ËwýYbGªòšîsV§ä€ª™³K#=6[ÀÏË¿KfKeLð[t­$Aq[æu–gar.%‘ô.gMV(Eí»3@™ÄBáâ ¬zåBPúÐM;Êà¦äJ`”Ë‘`a¾'˜²˜ãj**9׆Ãð€"ÛþY"%ûI¸Æœ?cW%ªœ`;º™ñ/¹b­•öÂÅ:žÑä¶\“òTð\¡à¶+}±Ï䔾ڠ +Æ´±¥|å•Rcˆº <9TÂõ6h, ÉK/ÂöLp.b+ J±Û4±šéÏü¼Ž°gN¨mRNëŸHÌlÜK/AP1R¨ ÛL?Ƶ¾-XpqÆb'£¤³QÙ£÷ñüJ…XÙ;Ç€6¨tºÚü§wNéU1;[¼ Û+VÑá\Wë +ÒÚj·àS?¬ÿ)áT9;/Yº 'X‘6ÓÏU:¡{ŠaõqÜ̬wÁÅÕã Òï#¯¸|1‘¯#`ò÷0ë^?/ ­ÜFï,®¼z¬ÿ3.‡%‚üÁM•p7å{y5¯árŸUC»Ï*€¾›™6ÃYÍE»"ŠO¼®+¢¬@¼é¬´ažÅÀ7a–ˆVs]® 6Ù¼ 6tí}V,í>«Vh“6(µË"DírW†&†þýj…crˆŽ,×~ÿÿýv}U0?g®Μ…óâ*Õ訲Ò@F3!,iþÄ>’&š9¦'ÊÝC>‡‰žm¢p. o³»Bp8Hö·8@œŽ¶ýÏPï&ЉT¶ÑdBk €—s2ž‚£H¥…‹ ód›h‘8a1ÅòãOY¸â~ 4w8 +¨IœP9^?Ÿ–º*΄ñsЭeÔZÚºb†ÁSÆÚµ}ff àtØiyñé3X Ër¶-4NoWwq%ïê­«‚õÔ…Ì»$±ß]¥÷± <Êiº±‹.\¿îÄ¢AŸÏ£`麂Ë1ý˜®"ÆÇ­Ëc¿kGëŽð^I™É›šׯ +‰ää { 4·¼òŠÂ-+ÝˬªÏ¿zÕV¢'ÀÔéÔÛŒqžóÿL+cÉ2»{5µØ³€¤[jô Äbs  †¦bYF@µ¡4ü=™ÞÓæ‡¤wð¾-11 èäÉCd…Ä*k_p${8­ã züøãרø¥E*&ÒØßÎdl)ÍÙŠˆÍk^ub*ÀV ˦õ›(Z»yÈK­~Á/’òr„ŠÕCiÖý¢ék1Ìô¿¯ÞtwüÚÝäðå†î75àï—TÀäÞ}Á ûE[Lî fIÁnËøŸ¬Ë¿÷)Ú°ª¹öËq¿·ÒÚ•IÜŽC»8Ö÷O‚5O0`µ q„G›«ˆÁÿS^%9vÝ0ð*¾€5QËFEâlr‡îûoSIMïÛq–¿>Å™ÅXX3AFïØ«šKo”_HâØNwê f#³.4’Ô°ô ŒEŸK„§Q ¤5ëçàJ,dP…éI%A~GiàºkjP”ʉ¤ Ç‡‘éxËu.Ä +VrÃcâšÔ—IΨhSu9*‰M.áT²Pô0CÁQm|&âÛ¸|fî”rŒÀ™r?æŸ4ˆ@©?WøR/ºÆc!åÄ€è4.Ãó$ú¡=´'ÞGÑ&…ćªYtˆaXõl;XaÝîÀ„FÈ„¼/mÿ«Y@ªë´”^4K +#QÈ”œ†Ã†H¢j:ª8Ê^hÔ¶jD%L¹:ê`öH©¨FŒ/ük¥›McE%±‚8\[%5ÒgÀ›½°¹\L%{V“¾½Ž“/5;½ÔÅÕ*…Nm‡–1wAØA·‚ÜÉŽŸ†(Çúºv¡„Ö’õ²°*«ªék»dÌm,¢¹ç&6v_ЇÆgIüÀÖdýeEˆîA§šô´Ì†aC)†q,!Ùþ͆µ  xšŠ$ÚŒd¿4™«°_10 %`)–dûØÔ£˜{39_ÝÉnÁ*æb*W[®Y±<ØÝdÛlߪk[È%¨¾0·å,…¯Þp¶Ùt]Ü–¢ËÕΉð/zÐÌdìhV6  +iVí8ê2Äeä +fë¹3æÔüM¶†E‘¹B=×ñ…3â.=†DdðÊ2¡Œ( ,ùÆ•Y°J ËÑ¿)«‹àÍ&Œ–²˜#z +XbK› ŠZó +z–Ò/¬%Y¯û·ˆ‘‡7úä*…T]lžžïdEÈkG‘Yy÷2Ãiø9˜ÎËØ~9ì˜0›C*§$J- e½$¬¸Í­™‘ìÑ^fPƒ>’¹xäcƒqÈbµ´ãµ C1ð©(ÒÁ·¤a,ÔYyæÔج®¿k£”r™8LóA4¤&šôJ{­HbÃxpò_qÜrq&F î§a(À^A›ä[6Î[„ãà`æ·% mòÂh8ŠÉ['– H—`%Î7b–õŒœ0O›¶½;}«gö-ú³ƒö°/[î<‘Çlˆ(uñpV­*+Où0[$ª¾ûû×?Þ¿ýþåÏ¿~ûãý¯æœE˜‘õÞ$o7œ½¬—‹ð6e,ŽLÕO¡ÈóT¢Õ¹ø…ˆÁ!r©h6#GX +U´=^1hS9nŠ/ãpËjqAv4õûn{™d\‚é-‘&JP[b¸_9_>– G’• ÅîîK.^Эý錅ˆÒ´s÷[“^Ä­Ò¼…6 ÝuÔlDY6üp.HÝ>d'z¾Wê[é÷ +ãúy%Ý…ñ¹£ßÓ}HOÝgq•€)çišõUHï¾C1Zý~ðsGwÇ7µ;…ŒXIÍB+r = +ÍL˜U¶ImUà4G‰½ðèã0ó(´cÐnxNZx;”g}o¾ÈNï޾ݣ¬õæ¶wºI¨¥ºt´¡Ü±VXþ´lá^ô[3pAp$¡ Ë#;rOþr=¤ÓU®"]§QÈTšAZø¡{I%»0¦!ÖLÊ"š¥G}µÈu™ 2®Óô +õöØ5ȉx¾¦h©Þ¤µ-Ù¤Îa¸h,iðIËà ú˜Éá…ïB~ä dñÍɃ1ØU¾€lò \"­oŸ„GrxtΊȅ‚/Èç<-O²Ë¯f’¤)¼cšÆ4u›ºŽT㦽["Ö1ÉϲGsÿz¡»‚дÁ·!:(ä%¥ÐõL°¥.‰¨ãä;·5ìˆJFÖ›A&¹éì× +ÿØ¿<ª4|sïœ?½ÜRôøx;&OopÐ>Û\àÙ-BÄÍñì€ÏVáö¢S>àÕ'Pøl€Ï.Ööh¸sõ«E8¿èaºgƒ{|ôÇ + ^Ý!xуé½Nòª5Z½;£ñÝà=¾E¹–Œ!Ûw-Þ+¦Ñ‹ ð¹`À–®ý²‰­,¼¶‹?º6‰¶ï–A›q} Úü8F +:´eœ8ÐDÛ~%ég Éê85¢ !c –‰Œ8Éܤ¥êsGÚ$ò›²¶5ÝËSI8\訃Í:?”ð_åÒÐíRØZ® +&;•2˹9ÌZÂQ »mÁ¹éç6ØB¤“KS(¤’h×Iܳ¼ŽíZ§$Q¡ª³`R×ÉÌËN7¥j7Óæ&–@˜Ÿ×"‡Þ ÿfÏLÈËn ÷í½ç|ËŽÿ}dÛÁ+ᇬƒIO£M¥s€ŸIønÝ‹œ#§Q§í6Dµ[*VΑhž©ðœ›m[Âñ_}$œ$äž[0Þ[Uà ‡á[XÂiŽŸ-რ+ß GÇv{}ùˆø\Ù^áßìÙs‚¨J4aSç/_=¬á‹Li¶!N©æ6[=° Ø¥Á¨Á`2¼—Àbo(χΆ9ã™zekrÉ6jQÁi|¬Õ6Wõ=ÛçÕND)qM?[ØJ³6Š×B‘üïŽd]Äê ö}(Á‚†Œˆ ]Ûs,èà3æ¥UÈ$‰x@2'¯|ƒÄR-âÈ’BI‹&!¹¾Ö+y²Æ`ù*U¼Œºðt¥i#ê‚nIZ•¾tÂÕ¹2òýõ™©Ç=ÉVƒõd>ïSùø;Eñùó+÷Ñ ßN¸ÅÂ,2†ŠÄzêû)ÛÆV«ížÉ`Ÿ¦(›P&טÉ!Ë0¦¬F—Dètž˜eØ·•u•ÔHÀBY»L +Ù¿­É:ó5N°Z'õ æž}¨ª1…m’` çiL+Á¶(x­==ÍNB¼–w{ˆÆ ùÞA7æ;k®!É4?.$˜qò.ü‹Ñžóú÷S0ð{¦… J fÞi×ó¹aÏe0a¡ŠS%@›ôƒ žÌcKÆyº¹Ž©MÈa¬Ê¸Ñ ½ °Rˆƒ×"®HTWC¢H06ÉiÒ é׬ÛXÕ,iª¬¥U™ÊTYý0¶)‰}Æêp ùÕ’äqðüe¦Û`F5¸y„Šùç!„¼§`´§å¿íèr´¼íú»Â¨¦ƒÖf*À–[4žoÓ`÷É6ç´€kvRIœvkZ¶8&Û)i# ³Uú\×òz`Ê7XbmñŒQÅGè4 èÛ>K¶è¹²DÃÁ×`:KçœQº$›oû]g_ó½Þ×Xvvß=»G,¥ü²â)}@wä±ì\Òs”±>ú$ Ó¤)¹ç}Fi¯¼øË]K?Y™ÒM^™íY™Œ˺SænH¾ØAåØ%©…p.M€ 5l^‡ÂÊà-çÊŒBª*åD>Uб«ö«;$Ètª%Ùuèf&;3Å£_Ì£à·m“‹Bá-“Þ@*˜a,%eêM.—„È<¶ÉeÐhýNöˆ|Ô (ó‹eªô–Kc–«vÆ “™£þÊA:‚ÁÒ«’z‘¨)i!ª'΋X÷‰äžGHÏ 1M·…E½“ª¿°:ºãü¶ Љ7zÒûX΢ÏNÿ#56tÌá#5ï–š8S°qÑõ¢;Ì l5°ý 0€¦²Y>¤RI¢ÝrƒBåö/ãÕ®cWnóùŠÚ|?B +,0`cWØÀ?`ÀÐMüÿ«Èf³yέ²¹5}ÈîêW1¢èLx½?ù,@£Žù­tüÐJæ2ª ¬³pžMaÊ®–‚Å÷VõU('FÉ=C¾×T„aB qƒ*—á“XXÍòâÄÀҮɤž:%ŽeŽ—6íÂÌt¡4N3¸²¾MCêŠ ÙÕøDU,áÌg½ÃU>Gå.ß>7ï¼WcƒI¾6t—¡}ûrM3~÷<æœ{@<2Æì0ðÝ2¿þùùŸ>ÿ’±Ç¿üöÏ?~ÿúç§/B0ÄÂ{îó›È1FÑ>µRÇ”®3XðõÎ|ŽEH(¹i8^7#Z5,`vA¨À: äwˆóÃ:ËÙ÷ÆV»ÿv6¿â 逶˜Hev4ÑZ&Š‹ÚF)ˆ:ËsÇ´ ƒÄlˆT§zõ•(ãã†þxãIÙ­3SœÚÒ‰ë–æ]#lØ5°vÆèÖkÜÌà£Ú‡ðǽÍ18|Í6¾[Ð<ÜË)ûkw[,²#íh†xÖòÞ£™h + ]Ó™h¹Mgkkz ¨+ Ç¿ñÀsB¦ðm¿ŒãÍžÔDûmRû=®Ãr kk»‡µgÏëWìÎ#;4,+'€¼æÄ%)Ó€ ÂÉ o,°2R—¯@[¿ùjlƒl™ó\i/Ì,ÝÏ~@ÛShĪ É$!t]cÆ6:Ð} +(Ÿ7Ù«R½Úòýmk¢—3m-ÊÅ–Îí¡åý’ ™µ`f©6¦AWú®%bÊ)Dêõ Šc½È„ÅÎôC^iã¶ß(ö€þn›Áäʦ‹ -ï®ß*›IG܂̢3ßâì5½Ì=]&w7Fáü1»}4´m+¾÷.ÇÍx†¤¨ÔÛø1†‰! =|å]‚‹FÕUËASlˆ$ ¤ÅMk«üRÚÔ\ØBZ]Ölyi˜ç@[:G’C5ê‚×µàêuŽ{‡{I3 ªÉ¯Ëo‡ZÏn´ºÛtÉ.£TphÑé®»ÐÍËj8ëÙpˆd±c ³Ö½=®ì•tÞ© ×›VÜî7Šaï:äô4·Ææ\-ÎëÈ2­ôžâcDg‰$º+çÐ1†[aÛC-ýÞÌLzËM'‹ïˆe'þƒžÄ:8R +z¼.ÑgØ:¥×P®CnÈ¡ûMx3Ü_x8¼z`Ô¢½)«Í ûÐæî2¥-æPé³al4À\…‰W RHA$*XHÌ3pŠÅÒ˜ãXF-3Õü¶MŬD¶0ôÛRr¨#€´±ÄT+E±Ü˜mw¯w m`AVòö)ñz¯ÄÆî×oñoW-íÛ›ŠA&¼Á›ÑÒ¡Û}mñQ±`hS9†ëþ»1ËÞ#re,Ãæ)cfê‰ÀÐûÐ9NȈ‘p:§¹†ÊGC4•SGÀÏ1@‹Gu«¡ÏÞóûÈÝð´›C5õÒ¬k‰âf|Û$_pƒ8ƒº[ß6Ÿê°KY1ʦqo¨óÜÛAïˆ1¥Êˆ°š—ÝôXñzïŒ ÏúÖ¹†Æ1Ä«/G2>¢õ…j®'qщŽKî:ׇ\ÀÈs(Ž**nº‹N¨ÉÍP“”+ß0!̬®–0v‡ËNÏÆ!à^—s8RYC=S(×gzJ_Ú (¶ã¬»äøõœ0 =6‹€ï'N˜:ôÿô†½Šd„ÂCçC=ìIf3 AíŽóûÞ‰•>}ÉmÛEI.² ,ô:ýëi³p²?YèNØìÜŒ/³L½…rf9½XiT¶mí…ÙTD*‘>Í«Úñ +h‹]wËkةա¸éX¾m(H­@³œ\ª¢bc=`õvWeͺã8.ÊÎúOÅÞ07ïìB˜Å)Yeˆ«N,e^!Û¸ÏãJqUr)ØGĺÛva”aÃfÞçÅÄ{F~‹Ù›‡]òj +•±¤þAAô|ØQŽ´ÛyàUßX˜ê‹Ü»±¿îþƒþ²»ž¯tWÎ>ê 7¢,!>XbXÌú¨”’.!Ì>²v«îíy:%poÖoñÀÈ#ÛcÕv&=zE•`è£æ[<Ò½úÜ–æJêj'•ç5ÞÔBkÄjS»ÍU“T,UCªT¨ž‡GNÓóPeÄÛº~+}ÞEšÎ8°eÑnÄ›Ä1¿y³‰ç•õ"û«}z”@Ýû4®†šÿû4AŠúƒv`¥ûAgïB'„:¯«ûá A÷¤ {-`ËþT«^9Bh[¯ˆâ0!pû¶ÔìœÀæÒ"Yã¹ZçL˜cg`É—Ù2Ph7»^$Y8¯¶~ÌÌl>ïL­Ã»ví'ê!ÔWµÄƒǘ †B5W²ÚáØŽÜóŽá½©‘ÍŠ!¬@7ô£–”–}ñæ^b«·uŒá[œÜøy +BžÇ-ö.tm³,Ëu–ÝJ†5[IÛ¬ìäòZì°njà^*×åŠ.O·âë™4tö ˆÅ÷¯Ï¿Ü–k$“±lçÁ°ŠN:Huúz`”<„à—îhæN ¯Á©ò±âئøgQŒ©ìÄjÑáCဈh[©WcçóõTÁÇ?ÏKPÚ9°UÌ§Š™¯¡#±z¯X-e2­ìcjbÌ• ô¡Ó¥ŠŽ1ŠÐ~Úcµ ^@½SL.ö»§s;åK"÷ÓªD÷A¤§'ª% öÙ¶µ”á5©ó\ôªï‹jÁ .laÄõ 'sÜG]›å…‡ÙQõ¡Q0öé¶¥QX…4ËçI¬7ž2”·cúDÁ·ÂÄò8ŸŽ!ñ¦]ewë°f^>-«r`½ V=0<겓÷E¯¯yE‰\;+A\Ž2rbÿ§¼J®Èuؽ£˜ÆOûÇOÃÿõ\$UÙîî¹Ù(Š¢D 1Íé¶r•©O×êÑËrhAŽqb˽™æÍÞ„¼IWÒ Ë„>¤?p¨@³±Ì¾u%/ÌÞ@¬átø}`Ð\ãxs7YˆK¥_¢«è…8]¢óÜãkëìCé¥óž¿‰u¶Ärµ)©>Fç\Èí‹å£¡«$߯bÄÜ$@²zmì²a óX/†ÍÖÅšäÎÒÞÆGh›“§¬;3V|†ø+ÕÖ®€¡cÞ¶®ƒA³Ì PçUï@ÎëÁJ»'^Ê-ÉÌ q}ÔfMªza–Z­á«¥ae €;̶ÿë°ù&Ñêñák‘ã=dj\É®d¼%J§îìK¹aTia Pµ[‘6ŽBI °rk[ÌýXPN¨'žh¿ƒ(²ÒIÓûQõŽ£+yåS/j˜.x!C!}|YGK2ÚÚ +¶?³°C93ó ÃoþÄ5šaëÌïÆoWkõ4Õ˜Þ9taJŽõâðãEC„!%DBzá!6l‰|±¾~ïpatΞ-’j®–†¥‡·Àæ.ýL?”iÒÏ%¨E?öÌ*¥§4‰Õ\Ò¦Ÿ‚Ç@úáöþ¢ + +µSú)ˆ‘ô#=E*r…`‹~€aèg‹~ +;uÞ]Üô¯sÒnÌJ#ý°¼ëZkÇM?ë`Áè@ ýW½ Wú |y¼É£Ãp“˜lmnüs|E¡Dë[ÞŽ-0ã5Míäp <­µ[®VP¯mO7€mH1¦m‘NŽL^†0M¬V`i4+GµË³Öh˜{®)¸]‘NXë-'+ïnþÐÞ-æªæoÄÖÍŸ²±ÀDÕØ=[ËÒPݶ¶¤VÌNÙ錹¡röÁW[ÔC˜ò)¿m{yŸÜõÉ3»€•Ö…xNk5ö<Ò +,\Éžu\³ê•Šù0Œf£€ê ´N¡¾ÁZ:yfÑû/UÚÉäÝL´H1@Fkæ¼F;V[«é%ÚIíZn^¡€ZŠU!-ÐŽÎÅM¯Ï#N)O?Êóë87”¦ÎÚüZ˜b™øR£ûcdÎï‚®z‰n°u¾Ôï] é#§·×àÃ{Éèj ð@T^wje®Ö•ñiÙõ{j×kÛÙåÂqÍ. ”4#ž]>É¢¾ün+H±™•e·–uVÏ. å‚]@)Ê(°CÍ|)šMK°ßgWÿßR{i8àŒ3ˉ­*Šú38<¾m¶ÑLz•ŽðbàSöÚRĪ(;ò$Â,.OO1æbÐÛ|ÃeW²ƒï#i-8X#¥[b¨r·[QžµP`Wéh&í#Áic*½g*Uá"Jy› s‚x uY–"„ 0 Ú ¥jCbfV=øÎ+j(Bxë|ϯ}3¹vÑyGv ¿vƒqÚO¦%Æ’ÓûWp±Cëû +¢®Ú>]àŠaClÇñ÷‰¿KÝßg6:6öáíZöô¥÷˜À8(,ûá§ê$8,je Ù-ÑÕˆJd¨›2Z1›ª"‰ŠÇè¢6V’;®ÉÏ0Ý[/5™¥ë8À¤õPë^|¶.¢ŠS…´‚©Zè•Z.a£E=O÷<¯¸?ÂÔ¶âz<¿ré^•É Õ.7Þkìb—[>?@L/3”q{°xœ´Mц‚ > ¦|õúújŠÓ,®äÚ¯mîâ@JV¦]“ÎHâ(]+,püŠf ï¶QÀ%úÙ‚û ÑX "ë ÌЂ8E÷‚5bkwŸ%”i–¹ûî+x,j¾¼Yx¹£†ÏñzH«ì>‘o ‰Ýb+㢠@P£W]"òð°ta!K–§ÿ¢ ÄSþ  °CC~Ó…È>ò® S¸èB”¦å¦ ‘û›.lã® {ºëÁpê—¦».0–r×…3ê¥ ë|KˆÄ‹.üE¬Å8]ÿI¶Ý¬KÄÕ¥Y£³Â†cÁXIÛ¾ŸX’IG€åïG]p‡ì±fëW¨ÙÇç6LÀôAò°[Ç0G·£Hë‘A‚IÌ4û£‘jö¦nÒ ý­(òd–£.ËáÒ “‰ÂÒ2D2Ñý™$UÍýóóG{~]®£Õ% +îHþ" +¶ +ÏåÐúGQp;t¨i‰Â¡k[6ܳ‰Âb¾*óū׿‰‚û$É¢°xvqŽÙ4Ž®ªO0,^EALWÓDaGÌ_qYj·°Çªd!¼kË[¨~¶2¬Ý(¬8—(èø$Ë«Š9ªZqªGºe÷<À\ü:ô˜çkˆFCãwHrÝvÇL÷*»Ø#w\Åä«·v_k;í¯ßÄâHýÀä94è=¸ZÖÅ,·ÇÆ™ÌVkpª +—ð¨î韎ŠÉqä«bAz;‡£õUòÞÂÕbâó¼[†8Ìr{dæ«ß“‹&£² ãÛú: Ö0þÎÝ*÷D!&ahŵ+&Yýâñ®~ +râñÅú{]¥o|4S"ÓV0s°ŒqÒ ,©Xa!æ[àDz£Tê='èɶòz´Ï æ3™×Sn7»¦dÛbäU¶èŒÔ®¦\Š×·nëãÐéR§èóR.¬ß0åW†Â¨–þ¬`öoõÔMЀPýo™OÙ‘L¢EÛÿž_ý T¾þD¯î Ò·o“MŸ“ä4¨ÑTÂob£ªª°ÙHMÊ]pDbòoØÔB‹BqÖZéq>Vk•›;óÞ3ç%¹™´ß‚A é+€+`ãnFÓf'`]”øŒ}ôËëDÏ/¿ˆØg[×ö×Ô¾gÈ{àˆ0—?%tÖÀaËHH/…ž6dìX2éfhÞ­6$æŒ\^^Òý!Ì‚–Œ¯éçk‰(Éälu’”8ÔxòZùèG‘- Q)©?Ú ÖCS; @$Qr%¸¬*–%[SXÔWæ‚\òDuC Ý ±’†›È²”ïYÃHqˆ8·²pØÙ6]ÇJ<‹!…ÕsÜÿ +ãLÉß_Y8óo¶¾y£Ù‹ìMm/56¡ÍÉ’ËsÓ[Ð~½€µƒ`Ij‰KÑzLÅ0àáä~›R"—0ƒ±üaœRÆ%l»šU7bÛþÊwŒÄ–&¹gÖ÷\f%Ž(õ7Ú +¯V-Óì'òÃÕ_2¬R^qèžúEö…U{ºëjä%ödbO—=-•—¾Ç?Ú?°¼)¬„^´Ÿ¢\$ô.W}+{|5ǹ¿ +§‡˜ú-^¿Zá?LÍb{yŸßäYAIí×è^Š=AÏ[@¥Ày®IŠØh”g`±'©(`½‚—×XPËYÍ™º×õ*~ +•Ó%Ôäòèk ´hˆÁš²k“þ`:g2”ê`êÚmñqŠË²ËìXUÞÀže#€C®LÀÅ'ÁªYÿ' ü?ãUŽG Äò}Å~`K<šä0õʉ«Tüe®ÕÿSà9²$»hæÑl²Ñ@qbe€!j#®›ÅØ4¢BÒ;XL»ïÁƒ´lÄÙŽù¸œR“\ÕYàÒ¿ W‰FŒœL—û±Ú +lØ)ÉäŽ#æbFDÀ’yEáù| ž90K;\¨škÚBX¶\ڸË]€%¸ÈƒX޾U0°c v «tˆ‘MÎa‡Ñ<ðÜÜâ`i3ëãfÈoªo;VPp}n´Ø²²‡²° +®qÚöŽI±kùò©¯ZÃLµÅ×¼A +ZÕ¶I[à"@'HLuZíKmBU¨¿èY”Þ§'€¼;rzÁ©#þa?\O¥ä`U™XŠ¨Êææ™ãs#¤U TZU½t1Ä^uâZÞ¸¼ £þÃXËI‘b)·QÐoIsË'9@ Æ>ª‡Zy¡GÔ„®ÇÄà±æù·ôEùšÃI¢3ƒqܱ#iG™tˆÀ»†šð2Ùw;àèJèAÐ+r·ŽÚ-Èå ‘ lŽÃqÕ ÖzØ,u“€Ÿ…ܲ\ާ•(éä…<íVRtPØ¥õ V “hC\·wž Ó„¡vB_“iteV‹ ÅÒɰH¼†Ó0G•ÝœŽsXµ-×¶m˜wÍ%ù°0;ŠRPýZï€Pš×¶ïRß«®¥~`ÿs·'ÓdënaëvÃó¶a›Y ·…æ©Rè6ä]¨7ì½FúˆPH±*xÊ_Œ}£øa–? Ê£Cß%†®£r¸±ÿõq”W;¦æ +l” 1±L¦b­©‹ÒÀúÖÆ(Ä:VªXòF½Æm9ÌgeØ¡VM¬òµ!FLR,á¶'§6>±®–2;QdÎ…F€Á˜MB©‘7¨MβÆDWèáäD*S ¨–yúVØÅ~}—‹ìe h`­õ ûq kâ˜x‘„>ò°bXȯË÷—ûõòôó~}z¹§ë·g|Aâ"MTé×ßøñãÊ7)b§ò2/í{|ÝÚ§?^õöÿº'Ž_ÙWepýñûqÙ®ôMn£ôÞxŽ:·¨ý``ÿ†– +endstream endobj 1535 0 obj <>/Border[0 0 0]/OC 1537 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1536 0 obj <> endobj 1537 0 obj <> endobj 29 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 6/Type/Page>> endobj 1538 0 obj [1540 0 R] endobj 1539 0 obj <>stream +H‰¬—[‹%IÇßϧ¨G}˜œ¼_`YpgVYqÖ~iÔa­Y…ýúþ#"32óT5¾HÓPçW·Ì¸d}÷òøø§OÇÇ/ŸìñÝçOÇÃô÷ó?_^ì᎗¿?’©ÁµÆ/Æss¦øzøTMöàåíñ«ßüørüö‡?|9>oý÷?ÿò¯Ÿß~ýòT~HÁÄS=^>¿»ìû/0ÿ½úãº?¦ÄfÝaMʶTxôãï ñ—ãñ¡™WÚá¢3±o“èÃù k¼!]ê¼è9_~8X²d+˜Ôèí/?áÿ÷ÇÃgkr´ðÊ%+¦ä“ñCËÄ\ífÖÅyô¹ˆ[ı(z,¿·5œ3iè’eÉÊiN²­MÝÒ8´Æ1ñǤKsÁê&/xv’O¼·—ãþøÇ¿ýçøæ€>)ß~˘ÎBOÞâ,ƒóØÇœ?(¿ZbKÎ#BŸœ›ð\a69‡U|B>{”hµ`5b±%$Ò¬qÕç6á†\p!›¨ WÖ],~_§¨k»Z}ÕMÚ¶%ê¶hXÙ‹4x[‚êh‹™ßò¾=Þhî9ð7äs +åØDm¯ëumW«÷ç:÷>š‚J@Œ)ÄZ¨JÆù\)½w&»|‹†`¼$83C4¶ç¬+ÕİÁ‰às@uªœüFÈůoéy¾yÝmãðPÙv1ÔWË„ ²ÆK¯™¢‘È{KÏË:ESÛÅ*;’‰¹§bR =ÐöQ¸eÂeŸ(¥§è@¯,jq*Û*«¦'‹ïœ¾§/3 +ÝÀÁw¿{Šv]‚Yô+š>°Øê¥7ÕeëÖ5ŠVMþyYÊ¥g¹˜‘Ô^¨Øøž¢[, +Ï&“Sï]S|BNÚ€¶e/{µ"‚š|^«uA½ +WQ­V@œmû:ESÛ“ÕwÎkvïhµñ@ñøÜÃgŸ&9• =FÓbIØt 9šPд·CW¸ `ª¥>ØÅÆÏõЗ5ŠVM‹µwB+kyn$ÛtªuéŠz«P9m$W¬´´ý½(¹ãžxi(9bkC™HÅ] +šeË{C™hj»X•†‚­ q/Rtj·Uü‚fvÁµLƒiÉîeªhÕµY¼?³–t˜@N0ÚÃ,A.Ê^+œ(b Ã‹üx….¨^ßñEv7@ ækrBª»N8QDx +sØ¿É4ÝÅ­õë¢U»=öË >›åÖ© Š 02#Æ'Š¢Ü"ì×SMÆe‚åˈËC‚¶ã ý²ÂÞ®‰.,È)¹Ö´Œ{x  ‹ sEŽ­œ«à@âWA#AsÝ=Cóšè\Ñê]ˆôaúÐW¶B¦P£K}Eú”è×ІimË +Ï¢ñÙÞø¦ø„_ïsÖ_†Ëȇ€õœ¼ +' +¸ZŽ\àgMÝþFÒx +îÚ—ÌÅwG,Ï™«p¢Ð0.–ÌÕßkæ.‹4™§ªÝÞSæF8œ’Ûs#Ã=§ê â{Óû¸f0}eµ5a¯@D†Ë(ݯ1ÃÆÈ‡k(>º‡+<ŠN÷)¾À=“7%mÕƒ­^vA¿Užä +ÎËJ¥a¬‡<À9G[ÍÝ».4ÆÌ‰ŽlßH477ѹ"Œ2ôuÁÞI½[Í£FaÚä[ÚΟª?dÀõ¨ïáï1àãU†Ø: ðÍ ³zvtE½ã«œ—öy¡¿§’«±×݇e8àNfõìèŠfߟn,óÁå>«—uMmW«ìŒ­½£â#*ؑȩw^…ç +¡ ŒDVñ ¿v½ž·#s/U½ž)<ˆÓÔ+â |'iÜ5i¨*ß›FÄ]´>õ‡8ÄŸ“fíÂ3C´™*’^«b£kŠô÷éÒǯ–öŒY›òLí¤Šf¿N,}YÓcY§I¤Ú®V%cî¢\ÍH>û·¢Ö9K°¡9Qûpˆï­™>Sßã`_®ðõà Á¡ÏR[+ØÕÜ/4‰sYй¢ — Ë¥àÿ­ïšÉxÕ3Ç"_DTÐR;ŠðÁÖ$J‹|\Ý !(¶Ð¢J”•¡ÄJ飨âÜs-$Œ§„¼CCðÝ*¼¸îB"‹ïŽwbõó† 91…i¥6’6KŒWr½L6 ¦m>¦ÿ|}àŠQüx)ÏCôjàu3ûær^Œ 6‰Ãù/ªø'ÌFÓüx)Ï*z1ÀÅÕÆW⌖>P÷h'ဦPÙ˜F´ýyˆ^ ìf—h½¡Î_—•p@S¨Gë o¬¼”ç!z5ÀfÑgŸ£¥J#ê² H…z´N§ƒùS\ÌìÆgÌx¬{Ì“HX*4bæût)Ï*z1pÿ¡ê¬Ön.VnßR0Èu¨¶yeçdZ4ç”]ØV?¸ѡբL .ѸƩüõÓ_ò³Š^ lõƒ X*Oõ£L ¾<Ãj–Žúé/ùyŠ^ l‰¼D«Õ2]DR¡­ÔLÉÏ*z5°›]¢Õ2]Dšf{´R3ý%?«èÕÀ–ÂK´Z-ÓåAz@ChD«#@N3»ñ³VËt|–1Ë÷¨¼äç)z1p_?Q/€7–ˆÂ¨tí#—¬ÊuÑѹ „ *MAET;ÎÅ^KÀ‰µ |•*sÎÑ|!¹ét¸Ù¶Tƒ\£3ö“ôÒE'lð\ ©À-Gà_àýHŽvî‹FàŒ4–%æ·È&狊O(û£Aj€o+‰È:Ù[ÝÄÄrcgpKÄ=”m—‚oH(läËe²saø¬ +Éɾ¨ð„÷û’t[Íù(è«9°1äYC©LtN„p²G¨Œm¼ES¨ñÛ;V£IýÆÆÌÚD¬d—¢0$!J¬¶¤¬à“à¨ÉX_£ë,†X‰Ao®Ù„9æk­AXIµ±l„‰.[°.K¡¶Îr 5Ë©ò  7@ϲWÀî Rº°Zó@®¤@¨áªï…_!‰Ôp5äCôž˜k6vQð%@ÌWÛFŒŽQ  †+±@mʖΪõ‘Pr¶Á§ëO%Ä&(eJ<°ìëP† …YɲÃߺ)³¿E˜„¹B k¨‚,"pÌŠ÷©5ÍVö£ÔR› RBÑ–B†¬wYXLNX²±$‘M±« EÂ,W××y¨“uÕ# ý@¢(¶YIX‹oö.#2ÏÈÅÄ[’\¶-}ôÞÊ„œsŒp…]‹­ø*¹oCÙpŸDy¶Í”Žh*.ÊÞzl®˜«‡ÆG\°{Œš-Ž]°%Ôbä´‚9Gö°±…’“²*ÇX9´¦ÂÉ—<yf±Œ*1ôœÈnˆ!ñ$ÊWòAÊ"wöŠ‹'„$ªþUj ¯’ Ô ”J1×¾¨¸š¹`¡±/*y­ê§Ö"­ˆR‚îŸ`ÿ4Â6d¶Š‰S$ȼ¤šâiÒßëÏ!5òÊÚ´Jââµ/¨·ÉàfEFólDµãìoH1Èù(ósÈÝ1¤ö’²“Ê4Àµ !E @í¢2ÂdA­JIˆuôD¤ ¼¨ÍDÌ< h%…)!pÜŒ"220±±y6ˆ”°É²®„U•ý¿„—;º+; +…ó= +ÀŸÞÜüN¡’ÊóO{$@.¹ûDÇÿH…,ð +)HF¡tá) C²Ç†xxn’«B¨¡v÷Ô#oØCèµŒï Ø8zΨ–X8\ÞWhì 9"ËDx¨…P\ÞQ5Fè‘(%m"¹´2‰ÏÃ>kVBɬXÔ~i PÇ©z*~ Ð‘ûÔÅ\­n4 _ ¡àú<{@íäö‡C¥‰R+¼*¡#O_8`#T|àº@†-ó*$<—fr¦B¨5Wú8—ó1s¢øÐ'BGã'ˆÂ’†¯H$¨0Ï|zˆÕ^ÝŒÞV%„îïGLqé•W¸QöÍñ“¯™’˜Q/¨…ôægÿÅ¡èò†½p ŵ¢ÔgJ‡n1ìzéy4×ñQå¨ö¢¾¦ÓxG¨þ® Œ— c8!c8¦™žucRZvè¹™]!ýâ|Þ9"¸„fü+«K &Mr"1)“§P¿š¨¾I•9ûÊÕÀû8VEש%Pˆì}%°ÔŒûPGFi“\G\û€òÒÞ>lH@¥kDu£®‘+½+°¼ÂL|Äö+>¤Þi_Ãä ФHˆÄG˜‰0‰†xŸÇ¹ä>Ñoðp +>ëZµ›Ÿ‰ÜɰÅÏ;‰ñÚ×佞E²\¾êAlÞ 3y/le¹îø$š÷ÏsoÉTªãÈ]´¢£‹¢õIØèw5,+,Á¡Tç„Y±£ÀÏúùIrYàm d7ºMœtÙ[JÛO3IÕ`Ì” !é äüòÁÇ>Ã(#éðKÊx[ý±PW]âO¨› ¿Èx÷8¯@s4t´ò#ÚÏú }”B‹¼ŽøW^ EœC‚¦ÛH4ZvFÓ¥‹Z.B{¡¢bë”f(à¯€Æ …݆µˆÛØ*û‘P}¿bpËt +û0Î_ÐÄÀ²²Û0 ˆ¬ýÕrÖ  +=Ro¿`â@C¨Ênâ¼7µÛ|žÏwžß÷ôöc¤†X2ÿl²“ÎAŠa1ÿº<Œ}}Ãã}ù@ª±‡Ê~ñ씆ç[hèyMKù}Á>®mKP?_»]zœ6Qñ÷ '÷4l*µŒF¬Žë]–ë7š·ÑTkW)Soûž×¹ø@îË`i܃BÕ3kæC 5Lã Ö6\ÈÊGP•™à?÷æÀ¯¼@Å ûWC-“°kÀ޶eHè»Òi‚à QhŸ¨2}ŠÞ”Qg¶?ÎS?¬“A¤Ñ/BÈòÓÀŽ9"ý€ +t{>¹š +ºþÐif³P‘ñöØ•¿^=òTØùydLc–@ƒ +®Üž„Ó1¨3¶\× +ý­N›ýxÀ¾k´ð)Hœ¥8À+pAôö”Ë¥€öÝéÉ#óÙ‹Ä­(¤¬ßÜÐe*Ëuq†ËüÛ/ÝAk_çÅêX¿]<¡˜«ßœð’K.z99`˜.èñžÐ2]>‘^¨0õ+ºSJãò´aDtØèóo¿[lBªº<&.Îð+¶ô‡BeÄfÞЬ…ŠLF,Ó-s ø¸|™u o]¯í06shŽk\ºäÑ+šy!v’9hå\´Ö +ù­N›3'H™)xT&ÛìÑ»ÛÆnÃL³Û½Ù—€‡ŠzGâ:§Bò­`6u¨ÑÊ”`¨©Ä—˜-pýeÑb‘qó½×e9Hï +Â$`»¦LIz'8Oêk믠#a¿` Gß»c¥Ûb@ì#¢œP0~g·a"8Årœ•N„…3” …÷1,á¥fw-ÐàRŽhYNT§µ#Ñ8<âÉ!^”ࠅªÝ"IZ\4¢«„ˆ§Ç~çöb Ú”2.¤LÕKò"Cõ{…·(ƒi>g57‹‡Ã’õú‘õ8€1\F_¾çOz~˜ðÌ’iÀ]çGˆxjxˆ§ë:ÿ27öt/>'*¤{ýû|!ÅõJý]}žÛPîU o %†Änš+ü%]ª|öö´{ðáí* +„i1È•B‘·#­Àm¤]æÏ‰Cf§YwsÜ9h†»ãwÇËþèyTæeׯCé½Ñ¬ÃxPú#f.è{(ÈŽ‚#QV•õ¸îYx[ˆdéY.jš+äˆV¿hºˆëò‘|*·¨0Ñ™,øñ¦~>) ^Í|jŒÜ»BäדÒ-Õ‹a>òH•P³q¤ƒÀÛÀ±î^Ì ~*Ò ûëZïÓÿ§.ûDÓìg<â3ÇQ®¡†¶ ŸhËïÀcÂ–Ý »lT&)Õ¦?>Ÿñ'Hý‰¡õwÐYtõˆ8çQHx DZù1É ý%~p?à2{V ÜÞP/ðb‹I;V–ˆ/šKϸ̇_”ÁV׉Yô‘bŽ< +T„<Í,¿§Ýø}ý¥4&ÂñçñCÌÛ\Ûî8kY»»7=Ïf A²™/IM 4ƒ]4/?‡ý~ˆINTdz*’z†]rñ¥+‚âË1œÑ2œ‰{M•Ë\C)‘>*lô…·ž@¢GªÖÊ~ÕH/CúAî­Bp"³}õ,ìq._q,aJ0ÐÑÝ$×è-! ªvÕ$êé±!kzöêf ž¤ÅÇ@äsw”¼£‘â9 1ÕÜvKCCorÅ–éI¶=Ìþo•F3Ò0¢ºpájSêÝ϶qKM¡¢Ši¢å^j*è7 îi[7ñöØ•c‰Mç~1Í,ó0R᪳±Ö¼'´LWÔ kšaù̯N­)¼-ôF3ˆ¹BöÊ2´! }*ØE$õ¸ààßÅ—#Z†ëœmjýíÛÚ…3®§g¸ÿIœ‰Ð(\‘̦pÐzcÝuϽQ£pŒ‡]áP4†®B¾q]§x[¹$ŽÅ\áðë©¶éà#ð¬¤tœv¦å.cy$4ˆP—e +ˆu´@ƒhJªô¬‹üÿb¥—BrÞü]ˆq¢?Î5Úûd/§úhÅñ¼®VØ +Ü„­Ø?„-þâùcHÒsSùXßÅzfY{†Ë|…QÒÚSЉÆAK,MH¥n˜U“¨«Ç–¿5°xZüöPN‹£äþXˆNè© Ð—¢¢}|„Ëüëe¢!CúTû2©…Úá.ãR«|½N<¬ä÷×)HB5íL8¤ ÛÂ)ÄÞ̶Ý`ºª ¤ìØäÉjœ‚¤»–­ûJ¢ÈßM2‰“¯¾H`B£ÏÔ¸žðb™Z#Â1DtÌJ'²ìf ¡äkæ?`’‹Cµ¡B¼K%å"Рüî…¢gLºø,-–äÍ:Eêí±ë¯ˆ—ƒò±-{éÛc™˜F¼ ·†½”ζnŠuöØsˆj6Tb Å›Ÿ% +k=7;·…hTmMjb®p¼úðFG#iaš6Vc6ÝZöB¶a‹éÞ°O%ÁÈ ¤*Q%A $[-ed?4êTqßHLõ#fÌlò®{²liÖ™–FhJò=*«&QO Ï R~M¥4¿rùÌIc¦92¢]àÞšBƒ +tFÅ×Ó….ö—Ó×*êé±#Ò£†ÀS.¦Àã,R‰ô:&º-BggÕp¡ÿlþ2`¼ 5¸ù„"«yBñªðüŠª$&éoÏ +)b2Mü ý¿|—¹uË EýМڗä+…qdù»z@aëî:Ó— ¬«;úO9‡4î"¨ˆÏ€ÌQÙ•{“ÿC#MPõ5ÄÓ‹ñ'e"$ôô3H>,¼¯†q óäÂ<狪Þt²B¢DѪüë ¹¶‡UÞ n%¿ÀÆÈ4ÅEá`«—áð‚à¯ì|Aô 7‹Üþ®3äÚnV¿%æå}Åæ<€À“Üðذä@%ää•otYnÑNEµ–]¦ôÑ“;/§¡~޶ R‚ˆxsKÒËeÍAÑÍÞ;lsF¼ öÎOg42ü‚í›P@›ÀaKJå²Ì™«»Y}k·Ž=£`äkË¡0 ê÷–žC?.M‡¯}ˆéño}eò"‚Én^EªÈ¾=•3—ޝ•Ö«¸L@Ðõ´znÉõ…7Cµ!¹¼Y`öA:<êíä^&¬ Ì5>mËËÉ»\b$Мí%Þ¢Ä;^oFC[¬}¤!k6E.4¤Ö‡5Ö;«¢›¹/îa-FNUî nIª s·}Âsâ¥]Ž¿‘Á½3íFWØ·+yã\긽ší¡Këi0 š_ø!]Tí„SGXt¾]ÏÃm3Z‚Û8À±“~ì翺œÿ,³Ï÷? EŠÏéK”¤UêþûTMšÔŽreN "šÓO˜ër­¾Äˆ©¹Zb'G'O凚ˆ5j¢F Àñj½§Ê)ÿ…éñ;Tqup;iu­s7ˆ&`ŸÁ‘!ñôª¸´ Y5yØ%U‡(`µ6Þ:·Ü¿1þÖ(µb¡Ð·:@Å<ÀÛûÊÊà­åÍ ¥SÍî.Òîyä»#¤Ï¬rî +ÍêÍ2U7{¼‡Œ¯GØS>áÆÉ#ÖÑ j—³°Ÿ\óçÃÅfnÖCÀ#ß§[À;²XvÑðHº—€?ß®çaïK^lê »¾v×söóLñë÷?Ùzgäp{Ð݇c¢©×S:Ñý‹k%•Ú#¦æjéó ¸`>½Ä<¥ô|ïÏPÅ%æ“̺9 8Eò_„#ωäDY¨§WA²þˆ¾¸7…"˜Îµ'=Q.-=ó4çÍw­™ÒKA*=mÎg¨âÚ(uWáC†Bt~qš8*>B×ý"ñq …g^ñ T$©G ½¶ú š¸î·¾f½Œ)gl¬iRÓGA6—˜d˜^àq}\¦#®êaò³L«Ó•[ûA÷H ñ‰tYÅ jºY<á¾¢WÄBëèp5jP…•@ƒ¿¢º¥*Þdâÿ+z©­GTQr=:Kæô’5;›¬&úXLÁçQ Ç—'ˆ×h/ì‡7ä$‚ñí…}•¡¨ëbñ\# +_m(îñqåµP¨Åkt¯ÑÄï×X^£‡[;Z5Œá"ùEšàÿ¿Êbm^c§‰{¢!ôãÏÙ¢h÷LFwîøñ$&÷þÇÙz4KÔL9›*iŸDåÞöu΂D¶8g¡ ¦}®¼•Wãäfì7°ÎòÜ­Ë:sÅ +áÅïR¨3O–"xÍžºàbŽÛ©ûÊP2àN}qj56éô²I×ð‘á =.1“ýÀðV³LØ@߈Iåô’e´B½·Ã2·¨`(½2KsÃÊ,½a¬Î­XK•ˆX§‘~,Ö=ýj&lÇofR»sÞJϧYÆS£ã'Òz§Ñ}%l‰•Õ5s=,×tPæ)ufÞZ)»ÎÃj]õ#×Ì~X«­ñ±RIÖõÒ*;ðnfÿÄ.§Ng‡­†lº‰)„ÐÈoh¡ûg§NÊf9êêÄ;¶ ®Xi£a#5fƒ€ÈîÃQLì5ƒk&08rRVóÚÄfIÅØF¶ë«Ï¢luB“@Ù•ÕŒWR…ã7ã‰äød¾K=é5ÁG{'£GÀ›pPOgkðæk ÒqX²tК˜˜º>°VF’—p!^‡Ç–e}£_å˜HE]{Zl6íÙD´åN†Þt/Ù îHPjS¢ ;çPÄËU¹ôŒú9‰Í:š¸õæœ6pùhš±+°Ž &!1»ÈöÚ‹º?ƵB¬áB…õ4ª«JT¤V×RÖ+ ¡Ã™~',ç²2³^Ζ‘'§ýd B´[–ùýydp´µpo©ð<ŠÐ¸0'¸{Lz˜ÇLN J)ÜWÞ‡‰~›–‡-ª¢ätˆugÃÅ-ç_`p“Q8`3ÅdýÆTV*(¼¦NJpnd~òlGséè׆Á-È$±FܲŦÚqêÀŸ³I™q÷-Yú¸Ë'Vᇖ÷8²ŸXã~è¼$OgNµáÞõtrübR&'61A‰OÁ•33R\×?3¸ø^k±¾„¦SlŒ}Ô!g¨×.d™3'a™˜ÝuÉøPê’¢‘¢[]¢Q5£9·&ä2ë™ÅÄrpyfi‰d›©±(¢L“e©j™2ÚIK|—ieaH‡“Yv M"-KÛ½6¥\5•%¾üªœf¼AW¹iØ{4fȲC(þ"ÖúÉn@½VWK)šŒÑ•â"w6É«OC’½1›\–k+3À›•!WUb]mP*ßg,Ø!Ú¤¼|Ï‘D»ö¹'um*kùì%bèOÔ7rõ…J¢Wœº4NÈ›ò:CGÄLê½ÊÛhF×Ò€ÃR’F€j!²µ·Ã—ý^2›-(ƒêb¨&<óTR9ZªlºMå8K&<¶8öÜT‡ˆ¥ÚÔÿ'É"Ö·^(î± ¢pB‚àvr-ýò3ŽM¨å$25ù„Pù%8Snã,ƒÃ–ê–`~?$OÚ'-TÜÅædDWÚ©e1æÑhœq9%œ´‹Ÿ/Óð°óeÖÕþ¶4”z–È¥Sõí”yK‡ú}¥‘eªÎ}üDieoèDn—eL׫\Y.<7Ú ¦-:Ë +42ê Ð4]´*£ÝôR,]UXéÌ5>mÓžþGwµd»‚Àù]ÅÝÀËiÿºžLs÷?}(`Ûɨ­¨ü +œ½¢ò…m~AäÄÝæÅlV1Ù}~‰cº©t¶Ù¡#ld: ˜!¨¯8  +ñ7o‰ëOù^¢§÷f¶q²³YJ:úTÌjÑU*·Çöè¶Èré8-möa"ÛµS:QÓTH–ëÚóOþVÑÓÀnù?n×VL‘ØW2©å®É$÷´-¼T§%²h4šM”àÏÇ$¨Iæ'ı’%vB®ÜqÝ×HÂ<+×`ZZÑÄò„ðÔ!ºY3‘ìÏO¡Q!1Ò*WÁB$0°Ü@…L (68ªìA³»¤:ëžu1@­rq&n[0P­ÏLk +Þ†J3õ "wõÚJWäBŸ_œ—„ ²BHïC ŒÔ–Mð¼SébFéh#ð©ši`ú¢^¨ÚA +"¡ñgW +7ÑT› hzAzm5 +„F”¹%£Þ†"CK@¦Ø¤#¢ç‰5d…§ZE¬¦4ä‚…²¬6&ÕYYÁI™B= +9e²ötÉ8œêÂ_zˆ2@JØ‹d\Ê ²R%N]neC:‡l1Ñ)}¿W`‘0ú€×¶%/–è®û™8 1'sÀÓ# +q+øƒŠZ¸¸æŽy¯ŠérIð +DæÂͪý;W"¼iç*º”Ü —]{!Šz,Ó8@M~‰.€l#.Àâ¶Í0Sw³Ê”õä?Òd +¢©¦{¬aê¿™É+bê9¸C1<ކ•%©ÚOdɽÎ%Asº±./ô‚ÈÏÜ Z?cpût ˜ZÞ’[ë÷ÏHþïäÅo6è ÖQW#³}¶_Å‚rh44«²†UÔ½‹g› ZšvcMxb<Ô ª’9”7pðB>AÇIï§”!ÏÏÛ5IÀÊ#Òy•i¾ƒ­Õ=¢î(è ”aü&º 7ëC?Á oû&¤ÚN«ÂC°â„ä*ÎׯÀ[1èã ôô:+ÑTˆîXÂ<‚” +ôa€.¢HpÝ.Ë÷O'†³þäï)·ë}o¦.ÍþÞæ ˜"ø”6›MS¿§Éým×BLÓaO‘fqíH´I$kèüñ¡wˆÇšÛèölÐr ½KçXWL‘Vá;,ùÔçäOþ6ÑÃgÈ * %uvà ’dŽÔêÓ7lÉÎ9´ˆ"¤à“¢ÀÄc¢‹#ù Õp‰O½ÄøXšÂU§^ÑNãTg*å;¸ÄEï?b§i²Ñ*U"½ŸŸiv_À%þ­`Ó,‘Ú ¹ò·£3µÜ¿Ñá‚Vk'¢©×P0=ƒ*¾Þ)ÃIÞÁ(¡+°ÞD›ša†H$cx1Á½YÛc‹û¾ ™²Ã&X‘:p¤ßŠxäÃþñÁS$þ®àǃzš Šøü¬`—óY+2{ D¢«b³Â- žÝÖYãœð‚ÈQà.‘Kü½gr•Ñi1’1yCGIá;¸ÄEoÁ’³&¤:KâßOFÑè 0+’]ÐûÌÀí^Ãié½v ¾Ê´¶@Q{ñêx Ó/ô_ùVáÓÈYœxÍÔÚœ¸À͉q¦ëæFoŽD4WS6G¢×Ág}÷Ù#¸ÄEon³Øo޼ôÑÔ -79QsdÆLâ÷Èriy°öÞaÎÌãE'ît»ËÉMgæ¢ÿ/xxväèVä0ç" ¸¦`›Å$_Í0EÚ@ù(\d– Bo®Ž½wT·oANÙaSŠQ›~Æà$ ãKŒ4.? p¸U¨)nàs1*Åh^[ÌçšIðçÁ2!¢RñÕÊwp‰‹Mj–˜>¨ýNºAJ3sqæì¶ä‚ÎrÔaÍÄql“B¦j·'¬QÉ$XOË2ì_]à¥Ñw +» Âú} +Mm§Õç,ýt÷ìà àÿÛ[‡P'‹ÛÑ ¼Í¹€6/²fn¨ÇˆIÿª\¾f¯­ 0-7cì<ìàr´9 »Ñ‹½4Ö‹ª–|Û5såÍâ—Ç×JᯒäVÈØÀù¯Ñ刅‹½ÚµJóºäçóçk¦‰Ï,]¡X¥#³ ¼eVGl[‰^9-# Ò¼1Q—_0Ds¯m’µê9íí¾-–0½–Í· +nôª^T óí¶kKÓañ‹o£ú"­€ÿSñ¼ ÃÎMhVm KãÂýMT!”wäJM<Û¶§ë°ÉÅÝ`¢µsija0ÛsfYXH^ß‚è CVÍÁí3H•ÝM¾·¸ÜŠCÛ~[±qè­Øh”lõFcÐU +‡I9q¢«äH ꆹRÆö‚>ZZš1¹ª»‚¢»5Ît]/øÛ¾ ©¶Óê—¸ÔÉ*”´UðQyb_@fÆQ ¼U·¼÷[(­·’`fû”sõ w :{¿5ÈTíö¤$€#-ù­és¬‰Ÿ?2Åé:ˆ(\åB®¢ zs5©=¬ۧ×v³úüüõÒçÇ 8Ðó:‡q/2Ùz×Ê•ÖÐPl¨Á~E—†åˆ´'–úv&–zpK,‡ÞKzË*u£K ‡IÒ,¹•RêõÁ¦åfìæV0ÐVïn]àæé~]»[´¹Õö)äµÝ¬>»µ“Ç (>ñ­Ü¡®mäl>š¹Coͼ–W9š¹.CA<@.[Ââò×ÑÆ¡1&¿,Ñ Òt4Q—¶Dx|ŸkÓsØç"iöN7O{ wÐjÎSÌÚ7‚ +6ƒßã Ó÷öÝñPC„­¡ˆ½#6L‘RÀ2‚AåyÿôøŠ,Û¦ ˜žÃÚv†ÿ¥¸é Å$£+fHE£ÅüæÎ°œ!½2L·KÕtØ£SäWÔOa¸ËèÝ”f†µ×…ìLˆžÔ©+ÚÍpIKœýCŒJH£°Ä]ÎÀk¼ÂE T @Fù +ªø×¡R3Ñc«„m–[\ЭjìneP3Ã0‡I•s¢«Jf膹2§±á¯žÃð.pƒb-©ýn¢9ÂëwM`i:,>—Àîj`z5A3£œ•ˆ +Š+uŽˆý`²&º 7ë …rxÛ7!ÓvXåŽ2Y¢È¦8"·ÙÖ‡TÔa¡¼jò&­^­ÌžÛ6œ®Óêí4(óxåÓTÜFf¡Có€™±fatšèzèÚi˜iŸ«Î;w–Øæ¼Ý{õÝfmlr4ÖB ý]-x€± ùí$æ¿@ÙWß=ù7Èkãý +“$uÚ$ BC9¼Toœ©öÊdº,Ág5r:{¯wðs!üѯ*µ5*hƒhë5z÷Ž‚¡`„úYíœþÞ³åÖžŸØ2ÚÖ¸†€àš˜"uöì»çç3ÈêÜÊÖÍ´>ð„Ð +Cê(÷u¬4l¹ýû÷?°Cb‹2^!¡ªúFšZ4Ø4F þK/Qd€öÑ^B/e¤²¶ïq4½ˆî¶ß +}aÞ +M–:¿‚BRù´ÞjãVŧq+–HmmŸ[y•ºö¸©§». ´5bÆlÉ·ÃZ¤YÊ[¤LkfK‡Ãш @Zj[1­áà(ÒòìgU W%,%=S⡭‰~¶õÌ|ž6k%ã¨ÍÝK% hŠ…ÖJH*Ùõ³Ú9ý'•R¬hø)úÉ&ˆÆÝlŒRÞ «o•Œ[ônª•ÜhÆßs¶Ò}€Dñ¨ærçC]ë¹Ð8 ÅÖ @Z©¢j+ß +´ä^å&d­m^Ÿ«'û£z|ÀrôêôàãÆ C-”[Aa¤Å@7QU†ÞÝŠõ²ÈMH¬^{Úa? •Þµ¤+ÜóËÕ[§€ âS0QuŸùW~€&JlQÃñã}Ý%¶èJ‰C/—•BÈ?äiq]È¿Á˜ðZm¥Æt³²Qc‹©ÅÓ÷{®M1­Á2dbB#rþˆÔ [¤è‰´²n‘úØï`‹Éý¶‰ÔQùn‘L-ž¾{¤¤u,t5‘*Ègh‹4`=Hk˜Ìy Ó`ryV51âw¹ ‹˜bjnóÚË´§«AÍÞFd¦þºms`DáØ[IÞo{«ÅdW3Úf« ŠaÛê ¦Oß=^ô ì÷½ö* +'¡Õ^%ô U5½ +`N›Tl×Û<ÒE°‰Ž„«ñª“ +b‚ÑîÒŠ%X™cZt ö<ºLîLé:8Ú5â €"½ú¨ÐÔä¿ç}Ͼ–„:6YÒ+ý·¢ ЇõÆ >•˹Ņ̃€jewÖ»,8xÓ'×@#òœ¾ŒÆÉˆ†)jKœä+ ½ôÄv“zh +1K©uùÂ’‚•éduXgÆØå®HÃh{E? +¾ÏäÚXPtØŽWc +L§‰í2¬¢#Æü²ªat<ò^ƒ +Ì“š8õïQ +ÓŒ%@'µ˜gºb´½4Â>§Ÿ‘TL,>øÞïd† +wƒ¸*? ÚCևᓚ8½ÏÊñhü£ãaY"^\éJ­õ') +*„9“_ªÖïÎ@|˜c3¿ôh,žÆòjàÀË+æà*ÔŠ@~‡è"ùÈX;¼.U¬¯ç–´q&]¾3ç d“ÅÈ1ä^ÖÁšßî!54^xwÏd‡gw¤‡@ï¥vGܵS»ÚãæßÛ¸ñ>äH…úÙ½¬éÕ•X:‚ÞT! FUMÄ£5¡qvG§X"þi=x”îQ*„6hÒ‰N¶ú_ådÔ7k1vG1¨PÄoˆ-‘Ę:\®•‰<ŒtÈ ˜\ò[¿ô´¹€©so5 {‰éîpj›\ÈéJqù`’Ï<õL"€DŒç6B©©ÕßXYÒcZ–"XíNa ]E¦¢]W"F|O•ÈÚZ<Žk€^­—BÕ/»Ž@Ö|X¯€MÓ¹‚@ÖRx¼¶©š:Á7Þ\ üO/ÀÇå*c µd¼õ â0­zâÀ±–ù +øˆ-”[A¡¸#ªÊлÛK>¡,rk§×Ù!fo¿çBiؽ‚€Âä-<Ϩ2doµÈMH¬^×ÅxôlY¯ä&;ðc@G'ÑsLÜb}èÈÉY!)0U5…KGžg±sú?^ivœPæ´C°ò[›É´'H¡«Cî%¦k¦&wTH˜z&ÐàyÖ«@jjõ×ïàîÙ}{¸>ôöÖç­üÖHDØFìÆ£ªP?»—5½º²{ÏS]®©£ª&hWÐÉ­Ð8‹Ó_¿Æ Ïë<‘ßÉ´±âMöy"{‰iãg‰µóD! cê™@}:æ‰Bjªó¤9µE‰T~J CÌÄY˦ îÅFÕ‰±…=DEøòSI¬mO1ãŽèˆØÛt@.òÞs£&34¸Ý€ùñ-‘ËÅ3aÙæâ<ŠÃÓó‹Â²"zðMf~|¥ÄÄO@…И]_UU ÷Wä¶cäk^énnWí7‰+¢gšm½C%+Ño~µ°ûè~{‹ +±^tùÑ€è(‡ï:ùê•ãû ý9#º ˜ dAM«#ÝÞãÇE¯çqúfÚ*®˜Ÿ†ºã(Ê‹éñ¥‰g…:¾iœcD1AB›»ÊøñþúÞþô}*[ãÃY˜SM]1Âçï «ü4ÎûÞ ¨qrõ÷?}ýò¯ÿüïõ믿üùû?ÿxsüöÛßþ¬üà®×]Jëß°Q-Q/ÄÚkjMÁ‘%ç ²º;[IW)÷3`_ ݳX@…Ò}å—ªõ#mªØÓ²z4OïõQ>.íµ„U „$vcU†è"%½Nœ@jíð:(s¾R¡¥ £˜\ܼ.{òÌàùè‰óYÕ îäZZ¥& –6Ï9‘¢äÈL IzSîï…¼.s~3ª¾}.¯©6ƒíŒaÄæ³5±y„k‚þ*â¾Îñ¤¨b7¦sfF7àó»“·ÑKCÖÖær0¡4S ÛS£§®ÃSûQÛŒZ iY†qÕfŒØçœ1’Š©ÅÓ÷~§¬”…8•gî̼J±p•²˜ìÝ?¦ç)£€:]þ$ƒÒžA…xf ¯ó’BódsH0V6g6‰ð±¿’&‘ ö¢7'›@" €ZÙœ f™ú€Yrçfo‚~”›ÚGÕêí´û>€ˆæžרJÜ—IqȆáﮞ?|óúáã´,d&½ &eÀª¦Z‚2!SLÍm^ÍÞ¶<“li&Jƒg`=~#YÑD@¼.mëCé⺴ÒÄ‹“郂Í^)šÒMA@,øÏý`ô<í70ÝÜ·@适i£ÔK˜†ûÞh„úÙzpù“¬ ’5ªc;†>”Öºb³!¨ª4ù:,0NjâÁÙöV¶iè[i¹lô£Ê}c¾ Ì“˜xp6.e£3'&v¨9o0© £m«¨J¾j)¦OßûL-¡Ú^K¥bT¥œ:C–Zš'5q:ûIú(_!"¶ñ•, \‹D°YECM*,U¦ +ãÏr¶&6Oý}4–ƒÐ%) Á´xæ Ly¥6¿‹ + dmm.·¶¹££_Ú`š;ªmrgV›€fÍéu¿É-ýä›Y£ªœ5³€X`ž4kNg?Éš¼gí8š5Ú.û?ãåŽ%AkCáÜ«˜Ô)ÞÔ +œ{ “üA{ÿ©/ Ç…ê9ÇYó5’(II +ŠÈY¹ñ<‘ HËaŒ‡Ë'Ž× +b«š¨œÖÏÙ@ÀµÆæ 2¦…/)ÓgC²§Œ3Ë’¦”Arµ-e¸®·Õó4œ2Í’ÕSÆÙÊÕ”ÉÊbæeGuíeÉWÎ\ÝauåŽ@rÆ^í#í+‰-?¨œz©x;%¸–ÃØ”vLüþ<ïéà2‰bx4!z?efD*³ãÂÜUÝ!!¨®)­–KDýN}%»&pM/‹ã­Øè1kÏ•Â2B +õ˜5øèÞCFÈ´½­‡ñ¨µnS®BB3$$'QkÉÇ^ùmÂo#DË/8ݵœÑŠWÎÏ-Cåh!éz„KhŸ!ÖvXíé +¯ˆõz•°?è„4$J{®-ªkiZÞÖŽCx¤z±QHhÆ‚ä$RÝ.VçõÅÀQj_¢„g¦¥3J +·ÀÁA{”mQò}†XÛauô¹¯ôŠÒ“®vD‰F€D=J}‹ã¦ámé8€G艖 + Í(œF¨_ÖeÉo~ù#JÝ¢ðöÞµÃû£B¥U™ÄÑ5‡‚hS+Uœà?ã{WkÁ/ÏŠw”1fæo‘tg?ùŠG#dŽ?,þÒ)ÈåÏ 0»ˆÐr¹‰¿Ÿ‚/¤‡Ö¦á0óÝéÍF¡ˆñ ïxÄT•Ö±âèÙçoƒ‚x,rd êr8­Ã•¦ÕøHê,uë¢$T¯šHn®§òÜÇ—é[›’·±ù¸ÃO­H (Ü’DpTj©aðC0B$I™8Áñm¡­zõüä|ÝšG­K‹mÐÎϸÜZ£xàÕ‹öïøMÂ/#¿»íäMdÓ9È ¡[U4N$ohŸ!×ö²:ƒ¬®wˆm¯¥¨ƒ½ÄÊÕÏ×HåZZ¯?<û>A¬í°ú=³sñ¢þs–ÓUÐ\nϲ!n§?ÉhIÑç†ýéÄšâþF3û“Ñ™¢cÿ/#ôðy$\ì×=Þ³od‰­|j°ÊQïU7îçšéA(䫽ƈiþŠ– \dTÐ*³^¡²2.â„2•ev_ã.‘è¿Ó‚´èºÇ+z›N¼î«ÆTâÏýóŸÿ+ [Ê)ü`ðÈ9­«0ô•›á‡!j¥¾.îp^o¨Ó€%Ú˜lZ®qKoƒ‚E©Mt!NïmŸ!×vX]¤9¦ª˜cMÛ,`Ðxê4b¢Š|ØvMàš^ÇApªŽÝý*òHà_i••9AS=½2$æïßáÒŽQu®ä·ÉíªÉZ“ñ Ö¢d„1'YRI„²=Õ¥c2I¦Ì‰©Ù- ã¹_m¶W®ñw†ôé%d Ò«ÌúÊTveWA#8_å«—å?%°ŸÆ Gi‰1¿×*ñW @&K ÀEYWcëÑîÔüêvi£r=x6;„LUx7;ʼ٩éÕìšÝŒ +I³Sž½Ù¡µiÿW³c>ò[ŽïïM¡G Oþ¬eÁzDÖšÜZãJá ­8ñ5)y›—Ûq#ã ËÍ!¡û ++]TÑ8 $ô*è>C®íeumãþŽ3†œÇQƒ­GBøØ§Õ‰TÐЬ§ˆIõ|/£ZµÆ…–Gõ2Z®WuÛ%À5ÿH‡ÛÒ3ËjöxàèUÚB8 òÀaâÇÀág—5†ž†$wLβkö‡úïøMÂ/#{¯ÈYe¡ç#Ë¥¬²Æörm/«¿[àzÒ†iÈ n(Ö’ÚÏ&ºgÁ¶K€k:,þ‘ý£|ßyËA[Ä+ÍM‚ŠöèÃO+ï-΋P*@Cfï͵Æ]ÿ¿Ur×½GWA判ˆ×W´EÜ÷)"m/«ût€Dw—ŽÅz%…„PÃSÜÛ'E[ûÄû±¶ÃêQõ'_i¯ÎSæDo™à‡ :—\tNTq‚ÿlUÝ¢ooˆÄП™_¯È}Cd‡®UÃncM8 ìéð¸ùkbÑõPøÓáû‘¶—ÕýÞoY`¥ÞãfÈ£k¢œRìy׬鰸=ê— (øˆš·ø Ú¢®úÔ=öŠö{ßÓ˜¨øÞ/Bu Ž†îP_=ÜuùwüVÉ]÷~ï{µ|ï R)À¬V÷{oˆï=íSDÚ^VWÄÓzœ|JIWéiŸR ùü1ÅxB‰Wu½-ºÇkŠû„òŽôÖÏ®/¦6‡ÕÑŸç«J+ó­Ùl”ضã©‹.€±6å £“mX+WñÅØ8(stqˆŸ‡$§Ì0l‡X`¢\µÏXé®èmr—-[GWŸºÎ!CZ.µ!·ãpö샾C^· bô©íåã1ƒÎ &.tQóñÝg‡/dE*ÞÆ~Cñ»¬vÅ]ClùDÕǰ¾¦ÝCÀ½MΣD,ïΈMÊ9}‰3ùV‘3ODÔ¾èÿ®Éf6ÛäƒX¯R[ß§rꀈâŽÖ/ú®å0¶Tº¯œŸ'ÌÀÒl” :UÃnȰ’¸w(b=¾X¦QÂûÈÐ:\% Áh);Ì'”ð7XBšÔ(ܧ.C.ŠØ¬ê ÚôÁWe¾V Ys'I ܤ'0ü0ÄêD&¬h>?Ï£%šsíŽ[Ëg+›HTÓ-Š¢(’¿â§ß«ð¢ E{7(z5(]§>ûôÇ|–obÀz[T#:4C@ÅÓGƒ#g +²<_àÛC:’ºà7HzÑ …2…Ǫ·QèÞ­­Ÿ#Pm}F*ø¡p÷úÚQ ܽðRAчá4J»J,ôX`€²ÞU !|fnŒDn¯Ï¯™ýÏÙ‹Ø8]¤*X’ô¥‚24¨ÄRÛ¥vu »8Q™JlÓF¦êÃÞéb‰F#~Ä2BÕGàž +®XÆ•ÐhÿãJKc”žRá^ÑõÎTVt¶Á}4BŸ‘‚Sj3îâêÓ7t#nãNÅD_mÏp¶Ïj{°z^©ÇPgðÈ.Ë +BÃÚ¼:^ÆçClÊ[«’cäžQÁˆØXS +Þèf$±¯†|É)9¿p«QÒl‹,UÇÝÒÕ>u„Òr£5j<ônf$ÒtfB¼„åŽf€¾wý¾—ªàn†Œ÷Œ‰¦¡»ygN>\ÙÛ±¸^ “ŒîÁÑWnîш¸‚9ŽÆ—n³MÒ<¨áU!Yž~y¿×ïº473çÅx^¹ ã›ûnÌH8RYùºä”À…¼òÇvm²5Ýì‘ý’¤ž›JïrÉ<Àòê½V4k¬›jR0Kà3Ÿ\*Ú”*HÄUÕ:Då™$œ¨¢“ Ñ´‰®·ž»=ú 8 ÇQ:s”W@ ‘çMnæ™në-°>¦“gR΀I–Š£1´`¯I£nq}{d*»tæ£4¯ŽV¸÷šÄ9aTS!©³ìýäÙrç—1ØM»ÞŽu•ÜïDåοÄ_ +8' <é¥K0Ñ“\ÙÛ1ä ý%YR?é¬ñ˜ÜUÃþèr@›ánŽ•P?óq<±-»âZÖÑ¡îö¥³t:Ý Þ +ò:·“2ÆR׊:ò*0 4 Ôyòv$ìl1¹pÉ š@9{;½’׉ªoôìí5÷r'MÖ߸Ýy8³C6fÇùƒªbãéô~œ1E¥REp‘Áƒ‡|LœÑØÛ1(ͽñð´e…é=ü‘V¢vƒx`!#޽ á:Š0=J蚀 Å£ôöðx®E•–!ã´ÕF¯êÔÙ+u(?vþÚÉ%hÜHFc i(C•ˆôYïi˜µ™kB*ñ! ncDF…¦FE•#÷Re”C<'c&‘K%G¶—ð]LÐ+dîƒcGBI*!ÄU¡kã ƒ¡(%– #×Å(6ƒ"5 {ïÌRïK_¥rÎ Ö†°ÖZäI·]Ê…Õ²öMD¶ˆlá0þ@hۀؖR_|éÜE‚åå; º =Ø.Jo®Âê¨I؈- ë¡g {éÔGpˆñq‚&Z:‰: +ÖXY_&G Ô”³ X‹D¹æ.QNhJrã¯mið!G#«ë©*+8ŽÞH}Y@JvÑᦀؘ•<¬Ç¬ÕÖøÄVFû”'HèQ«2”3º„É¥làÄ9ñ«Ýç&F.QkeÉŽÎ)Œ»†2¾>}Aáë0sŒË牿:ßÜV¹P[‘Ë}/+«Ü„ÕÄô¸úÍŸt—xBÜHŤ¼¶ˆ,O-÷¡ëw]nù»êX#wø“†&T‹Ê=’nÍQ‚ Õ˜ Th6Sß@–[ÃÍÊÅ4n6 ÕíÌÝy7¤ãáhÔI«åµ>ùU6ØJn†¼õÔÔóåÃ7Úƒ®Ü–Ykýl]¯•ŠßL\ìâõô_½ÑÈ[è¦IûîÍŒ¨ž›-ràŸþþúúå?ÿûûõ믿üùû¿ÿ@;ýúí·ü^ôï¿ÿú¢noj@C«ÚixýÉp¢4ƒe*nèGœ¨¢“ESìT_ý¾…¼¶«Ï×íq„¿‘$­(¶O‘Óv³ÊΠå,ÜÉáøRI+*ÊeœÝ C‰*(óUt²h zìw1ðš>,’#HO<&x05MÝ®2ËNSbñK Cø¬X>ýD~Q¯?ü®LÓÍâsŠFô…·Å Ø8ºèÐÎÄÃC |‚ž:+:ênœôf't–ƒ +£Û&Àt=X%Ÿ½>¼‹à¼)HÎf£žµ£Â̼x£Œ¼ÁË&Éåv3wÛâ®á¤Z‰©Ifš®ð¤á6ö6†<­«0aydÃÈ0pï€21@'âU + .¢2h,PÁ NÖ•¦Þ£½KÓõa‘?ïZ<4…Œ2=-ìZ&´ÉàÛC¸AþPŽ•ÁÝD§—pÿýCûkÛ¼Ò« IJ~¯ÃË«ææÄ¤ÍeÒ)áIbE¡Cõóð"2Œ¶(ùM²6=7{ìjv Ô84¶‰;EœÀˆÔ`.ôö(¡6F[PÑsŽyG7ÄÕ¦qtC]†àì¿-p{³‹îÄã‚+ËðòŠù£LÖÅ6”%f11´Ãf¢[ÎîB»–¦åfœÀ½*c¢;ãøŸ. g½\eÔ‚2ûÈÏDäÎ/c(ôm¢m¬.IÓ~'*w>øµŠl?ƈ“_ŽœhŒ»goÇ0öиClË +Ó1/GÃã<íèò¼ ‚tòæF¶Ôö/ç^ùÏ/Œ)x R(O’Iû&O»å)Þ$,jÊ ÊûÓS”µ¨ÔB?fµ–Ñ–]þ\dªÝ–†¼´3J‡º©g˜éUÙ-ªàäÛ“Ñž¦Ë6c¦îÃ*¥æÌ0;˜»Ë"ø +úÜ«RõK¯`ËÈGá¼£˜£Æ•„­ëoèæ °–˜Üw Ñâ?Ý&C[Õ‡=þš²šòàÍ3kõBwú’‘dÄv) /§úbÉ•x4®UÅÈ.[ÎՔĥlo‘åÖq³DöÑÌ‘’[%JÏÖ"ŠtÊÑÁ·‡ð¦ÑåpŠþºê ¨7 +/:iP‘»äÄ ’Þ†Û‚%%+%î¤Ö9ýŸñj×Ñ󯡽ŸbÊÝ"I)ªÝÅ"À6 ¬ý)3߿ȡDêò ÜŒÏÏâõkŸ­ã‰Ÿ€ñùÔ‹}¿ÂÜ´ Œ™…¬è>l7øv€—‡Tóx½±¡´dIÏ窵çbËa©¦UP”ÆçN€ÝW!VO((p\º x €^GRö' =͇77Pûì4Ι¹°@ã ªý] ¿ÙsX ¶ÈüïÒñá¥ßN?ìè§ ?Jó+ãpåÀ.o(#Ëo¶¢~D­ïÞl‘ñß­ãÃKkœàÿ~ýÓË þ}ûb]Ÿ_¾ÿþ…^¾}ù%{½&üÃÚô†QœvóØÐª¦ÿåÛû—ä~ûãËLÅPñ_œË„a¸Ä°ñ2îÚ1çøf»1àžäTù~‚(5—ÝJùµK|ËÿÎV´ƒkfiqKíÇÒ2º}¡è`¯âFO(dà|5a5ïr[¡Ù§¢S÷¡Ûˆ{ŒäqGl%tÄå7${Ú:¹X‡6ìfzHvíl`¡ýPWªC’;Ýxƒ5·ê » ޝyÅ‘ŒÚ"0—AȦ5"Xa„j%e¶ã¬à í¯²b §¤c'BS6;ߨªÆfV5µñ¬5úЄ~AÄÕAVl5À@hBOAå\â륲זªƒ½âO,‰ ÷æÔˆYSíR2°q5Âʇ$6 +ë£S%FR¼£”•ô `çé¶>$14>‡¿îyêK²d އC;µìÀy8rD“çŒ0òôš“ξ³Z²;»$BH%À0¾µº +~¸ïI—IÙ*`D)ÕAË_¬e<úIèFOñ¹‡ùÕ63{ê¹:X›ºƒ§¯T+å;ÌŠò.^6K²Á¹¾Âì:±Oƒóý:8a¾Ê É#ö(êÎU×Gè/ÌÓqìé8Ÿ‰Ð]ádÌnP¯9?Òa‡I­í –Òs¾s„i©zç]í0&}¦}ñGæ<Û—ŽömÅâÁ›¹•æ`mLrÅ /¯Ò´'Å]0,äÎP\*Ãk{<yÔ0ÛÜ[$"‰…‚1X:{eFÆk²ÆzŸµ1­‡lÖÕë¢nTj%ËUoK­Ÿ’˜3T®z3Ÿ8K»êͼ¯šãs¼é Èîuq3#$³ƒ,$=8éC>`ÖFáýR?X õìKxŸÁKoÐ}¸@ØïnÃÚ3=âT­Gr~Jr +G—N; J—ûuð ·¶â4úrl…döåøµ<óz5ÞŸÏμŠÎ¼LZåh|­ùQŽp 'F~‚­I^5ÚÜxœ¤>c¢3-žèëüÉά »b9YWg® ãðů¾´ô<ÇKÅÈJiì!‰âqkvyàUÍYôª(È\þg~&M.‡Î^euÌr¯á›ö”dÙÃÕu‚ÑJëå~]mGyp9ÀBüàr‹#è"_5ógÍ<>Ÿ5s=´áiRÔŒ‰u—@éò`s 2¼ßÜxL±Ú®š±xöþ 6ÇŽ„¿+<±ÝfÔ 5CëcN§Í†•Ð +Õ–=Ùy jb`å=)]9Öð²'I¶3l]Öœ®ê’ݶË(¸6t‚a‹´øK.Úm8¿GŸöé¶Ö屓ޅ£†œ ¹º,Özÿ Úš³ßôNûuŽ´ó}»]óҙ넺Ÿ(°¾—É-Øtj,^î“ò¥$wdþ—Hý‘ù±¶‡Y…*âj™Ï‘ùãw«LícÕ½ÐZæ÷õ +Oi\eôm Ö‚§æÓRÆÉrÚ™1î!Z0ÍÿÛÈõcm2‹sC>Ýéiƒ ’<ȉ¬{èm@,‡¶OvN:Zî2íø½ í Þ÷Èœê*Ñ Ïby? ¡ÞPtéý¬™íµfðÄ0³ Ž}ãÅ~—bƒfvx›‘¡ 3’͗”ÃL\h¥Õ²4úhÉsT½}jÀúÀu±Ai í¥†,fm  ´í¨šéíÒVë¤ð¢#ƒ=–¦ §ˆCŠˆL¯Êêƒÿ@·eŸjªlc]Ѧ±¶X‹/ÿg›”(þçÕˆæ‘@36d ´‡˜ [¶®|±Î)4kø¿<5ÒÔ{xJX½Ê’M>þf­ŽÒ²7‰o9@óÊâöÂ*åN÷¤•îÝfy¨QÚ/ßÿû˜cFv¹Øüöÿ¿ó˜§Ñ ÌöÉP$nÝÔÒܹ,^þxÐ+šl5dÖ˜ÅX>ˆ"ù¡rç ŒƒEŒ9édn![¼òÁ:is’lçÐMBÈ)¹Õ™¹‚,·Yå@}F›æFs:]±¢”œOÙŒ±ÕµÁcnuòÄo2BÝæJf‰ŸQѦBQ!¼¢’eŽgKÁŒ +çÓgRž(q ”B¾JáÇ“Âú‚¬ÎÎË»¤åߤqñiÐú*pEñ «XüñÉa|J>ºMP¢ÿŠ’¨£muÖ¶J¹,´RG©.”{ÙùRÁq:#f_Ý‹==;*=Þßæg[‚¶Ÿo_Ž5,(zCaÌ_Œ“U@[ÍÇ¡wþ,ìýÚ: +…c1¹dçNFìMÄl‹Å©/ +a$t·S(a'7>Ôêò¦ÞôÚ°ê苲͂6Û?¡Ñ% °ªx`ÏF€*Δ3J©âþ ù,¶ÐuÛìóÁ õd pRªƒdGž²Žƒ%éx½Ê–,l4¦¼‡¾™Tå[M«ºñõUÇ\~;ÝÄy•öç oTÀ +ÍeÒWæ-ºWÞqbŒD(Ö>2"¿ó~üÜpÎt.ÐöÞ§â)k5ÛV¯…¬.[ú>΂¿2 …ØÊqV@:)`v+äjEäÜ)È„`G¯v—Dû§è³û¶Ý§¨­ðUC¬y¨ S)ºs€c?0^3X»S#Ž +5z'‰†1ç>°©?½Í¶«b{÷öå + °¤7¸¹ivÍ[ Þ +µ­[j}i"(Þjôkm¹LFêÃ-äkmï6‚ÜK¬–j/Ô¥ÖâT–é0Ë&·$þ¨[Òu¢½ºÆ‰)6f Jq³áIâ6AŠ·¹¤\3ðÔøu^¹b3vd¥ùNÙjS ÚÔwGhí6aRkën+Å슑 ̄åNA£ÒñN™a>f›®ëé ‚³eDCeÉ‘ W«>ô5›¯:üŠXÜyˆ­ÛfëŽìÿ,é »ÚåÎ9¯; ÕeÖp¦ˆ +Ì4]Ó° euzÅÜ û¬ôjŒ;@ªë„Ö–,g´’-ž4Ë8o˜5}öi[rÚ•f«út¶3i”.ÞhE"\R^íè™å*0ïUôf>¡·VÐùô"nb'³ÿ`ªèq~Ûí›Ùuô#póe†+¦íbí½?ö*eˆn‰ê¿ê!PÅÑ€m?;ÎŽïz8ËaË®„–––À"zуP ²m}~Ÿ`Ÿ|] ê¼ ?™ãöí4FUü ŸP¨!}îÓú|ú´ÀçÇA"Pùò H^óócíœÑ!1úü5ÆUºýÚŸ1ùsÖåî[(9Ùl:àÜX·:X±x@£,ÐÈ T«ßôqò¥Ä[DÃZ­RŸGÁi»7÷Õ†?0Ýj³{a›'Á p(:¨âRÖÉY˜ø³U*þÝÌ&kñÑߊÙDknìÑ“-Hô]­Õ˜‡Oää~¢È³ŸDïC2/çÑiÇü¹?óíÇš!YUê·K_‡7f2jêˆ"—nš¹ó6+Åš'f÷0056t{_&‡æZ›Ç¬×H¹ï[ÿ×sÚ/‹ÈB6PeÍîòÒeÎx¹ÄRïö00+ üJ]çäJÕÃgû‰n­mÅ…[h(å>‰?FðPíd†s+_Ý@pd °6»$ÁêI„Öf‰µ$¢0²LX½¼0Éx€èø£ü9Ýè*¨¸ÎÝÔ’|0Þ> +œ°Øtƒö–Àª©å|ƒƒ5<þ\{Pþ(´Ø$ÅÚO9ÛOfãs®=[ã€%â•aHìa«=‡ñ>ÄzNBƒ•Ÿ ´RâZVÓ<),´Å­§MÁyÉêÖ§GØTWù8f3¶Åá¤nÂdaË[¿À}»¥!BTP÷\iè¨jtŠŸ©ƒ(ᙆ_{ ø÷9Ù3ZËû âÕp»뎳£ec7¼È–ä Å²¨V}Ž$u%„Rê–õvîZ–!Ðý v F[ËÑAÌ 0ÀšƒuþõêÁeêú8 Šõ›eÄçí!xk°/ø"9âXí%ﲺô°“'äå畺L]Ú¡§E·KÜ®Q:ŸšøI=@-ŸˆŽ)þóÜæíˆRëë$Z«Åshŧ” ˆZ6¬Åcž4¡ß…b|—º?²«ãz6º¿žDQ¦xù p£Qý.Êjw€‚¾¥^¡˜Rlnsôy;Õs²iÍ•1†:žêðî?Ì%´ê~¥ür¾¡Û™Ÿú̳àÆj~Û¥“©²=¼ß`Ïyõ)­Ã ôŠ-ÔËÃÞäµ ° l5÷ý”Iäy2Jèýi3´»="!®ÖWH *QGñbÁ\K½Xð•×ÏWê΋V’O—œA )wá$Œ°ò‚ÿû TuJE.0œÐ1ú`t$1""Ö^Å>[©Ï×ç÷ V²iƒ*öÉÙ1^Έ¾gg«`´¸Ï\„^ÌÕv»¸Y +¥8òh¬ ¢÷ B·¡ËÄ>d Åøš¾d¹°RœRáÒƒ ä· ·Ìm`­ûç*ñæ~€…3` +L ¿. */¼­—ajn9µRüöõÌŽ¢Ø?¯¤ýÌÄáÒ™žÏ¢‹Q,•:ôŠîÒÔÔ# ýN#ã*©9ü±ÌôI´çQ&tl<#«ß@™5ÏèT{ÉyÎN6[·—ðrÏÎÔP:`ßW§æ²*kIïù=a(5̼-ûʳhB0Æm t”"A‘íäÌÛ©{$•ûåYnjÑ3˧WQ‹z·05ªÑ‘ÌÁH‡ÁÐÔÅÑ=W̽4dÚ´ûËS}L;¶|ü-1cLpÊ\T?¾£9C£Ì\_hŽºØü~à±ÓÓlNô6!LìmóKáYÍŸ9èï6t¸¶ÁåW¬–ƒË5 áñâÓ»ƯmQѨ ¦çŽßù=·Šl½?P 2þï!ªæÐ”u£o-ã¶¼M'/>‡ÎÍ +ëë䥡ãsª Bu}~Ÿ`K• œ>.%œ¦ÞYÍ{›%êÝí3S1—‹«¡ ç# máñÚÑYG³ÕE.›WWlƒèê¿,ÃÝ>-;Ç<êÍ`­WL³a¨hÿQŸ´S`H@È*Øz'ª/T4±)LíZ;ûñˆÀÕpù F²nùäîcZ¹8žšÿÖ•kR„CþLÄéÓ™žoÌ~ÌR v¬g˵×à{*¹ÚrÓÔ¤D!Úm%‹Qܯ›¥M~¤}Ù#_FBª7ïØ3\DkÌ»v5ŠÂëX"'ÊA¡à,3fhÓ!I´‹Fcq·BµUHIõá|Bt¾õíÇ¡4¢®¦ºÝ²8£„þû¿?{ᨗ¨ÖßþókºW“>í\sßõQŸ‚:mAª=¥w} +.d•[ÜêSÕ:bŒóGÓx˜´¤!H9ŽòÈ.*eÍ­”Ô`DT?ýž>iõo9‚;ª{ôWÕØr²X6aŸ›–º×#Âì¿ÁDãyV ­‡¡Ýg´ï>è-O¼,´õš¼H’Úå¼À͆–åC(’Ýî37O4lm_W„©Òù'« I%9å&ñÚ^ULQüì"â–º'i¡¿phŒÎºÅEÊâì¬[\Œèuu.ÆbÓçâ"Ð,/\-©ç+29îÄs:îh-.:ôÿÑõ áX^ó‹…@k÷L/Ê0 /ÔbÄâ ÝðÁÑ”W­-«;i\¤ÙáÜ8¸ËÍB¼¼uÕb!ãќɋ…;J‹‚×ÁEÁ8gØ“‚óêƒ|’´òMcÅÃÉçP’<Ñ/È÷éæFJ$ÿÇìâU‹W~«­D[ÊzZ•ßP¶”ÅR³ ŒµÀeJ}ASÖ°ÖQ+ÚÏys»eñLrŠÕÐÔ×Ù2ÄÏÆÅuH… «ã‘‹¿)ÙÔäŽç>ìWtÌh· /~ûq¬n#þDÝ3ã Æü¯#èÜ)çß#`#ˆós]Ÿ5"ï7XK7’_pn\9x¶í¹€6j•ÓÞ·|C9G¶ÈK ÑÖ$.>A9>cüFT±¦0̹‚Lä¿Øö™)LæÆµCAí…K/* +yï0kü0kNv²î +jÛåÏ;ÛÛ “v!€èZµÅ_nc¯{ûqEdTÑ2Øàög‹ÌÉV  $mÓ•ïós’ºæšz˜bì8‹•K& c·Z_ BC{¹¬~ÇÃŽwµg -¥ >#NEìV™“ `# ] æ5wÝ¿ÿ¯’ìÈr¶¯ÃÔÓ<,{¸¯‘yÿmƒ'Ñ®ìØÙ }‰" @°L~øôù"ðÌ~ƒ©ðç)ËÐÅMŽîZHcÕ²88†· ÌÉN–>üæ ñ‰“¯èÂR”ùtK~ü=~¯éçÑÔç´”þ±¸ÜîWfÿ¿ÿù>‚ßo0'…߇ˢ[ÿv­Nƒ·#1üö´>È0ý0¬kâgßú/üÔ\ç¿ð#è‘Ý}ß¿ð»¦DÁ ?‚ÖõÃOAmú‹á§ öüÅðÓž®å_ø)%×ñ/üOò“á×kþúë)µ{|ºý­ì‘O\Ý# õøÕ¸ ññ§D×ןYÔNêñ”ÇŸwò[ýöÁ¡v×íÚÙCü¡å“Ã-ÿ0‹ô7DqSHc:‚ cª@¡ƒH Í'ƒˆ÷üq +ÑFwà¸)„`kÜãµS=N!KÎÍ" +Î8‹ì2Ät©ó³èh<P2‹ÔùYDú¬ÅYDzõž'ùBÌçÉ#ãH뢳ˆ#Ÿ ¢B¦=«¤>ÒüÛø›:j¤÷ÔSPb³â‰°–..B䫨Ãvúÿù4T>¡àïÌÁ.üœ7Õî– +¥`é‹ Ní>Ä—DiUtÁlËŽ@pæÎS²aPœS*97½ÀZ¼aŸíŒàL¼²oqøû,ƒomòmé¼l¶eY:,|Ò†!q·ûõ—•²„'ÒXÿ\JüÝMlÝÔoãÐ q)MAØ­…·á&s§m÷Qb¦NúŸ‡ùÖ‹FOZìÏ*õ×Û³ádR•ZËp˜€ÊêO}É´Gä +T4`"ÉV!5Kýñld„”…ó¸à{ÉÊ³Ï ®3*`_³`׫¿6kå£-kjv¹_¾À4lÁ×”d¸¤d<ÑDÞæˆ^7ˆëÃ|‹úßîdÞm–Ãu¸Ì*=¹ÑL&jB›Wî[­¶K;L nQº}ãyÎÁD„¦÷ºJ— Ò½+{Ü¢iÞsär‹˜Q”zRB‚tr°ï¶Ï{î[†3»y¶¿qT¿Èéø^V–-yBøî¸2ív‰b{Rsâ·šàiW ½æÒ‚vú×_OÅK¢>ûÛ¯•à¯7ˆF¡GÍΟÏÉÁ5O¦ -åLSçàîL`ºèàôSÍzû~S:í…A™Ç©¨_©€ø=]?{úÓi +Æ<ýÝõFß ògÆÒ§ëc›2Vo4Æói÷ùh.䡺ֽá¬éz ‚]k&îTEÍvu¨ù ÝÅ„.±˜ïtÔ[·Œó{¬pÝ+¢í²×%¡–1¹Îç~%¥·.@¶'Š»VD 9§Qsw·}+ÈŸQ£gò9jÕ¡6g¹ƒ­¶z‚còV@­/•B½æ;ðzo·ÒeºõùhÿV¦rñ{¢j•ƒe -úœRÎFŽÌ¡ežWt¹:Ïç¾Ib~¬rU‚5Išýœ&O“˜®½Ç-´‰-;¯ÄìÙ"Úøpß1’¶»Ñ`/ÞÓº)ЗÓR/ h„ êÚíòЬ½ -¨.èyÄx¼ŒËíõr³–Æ—Å̆—ï|'ÿ2P’ÊxØJšççs¿'郃²?Ò¬…÷ënn÷ùVŽ?¿ Ø’1«(Î4Õ1nΫõ&ÄÊ‹ƒ[Cˆ•ÀÖöÎ*Ggfárrå\úeµBˆ§9.¶PˆI®‚îžÆÔ¡ÊJ}iÄûñŽîFöƒÙR 3yì.šVR§úEë^òO]J³L²d¾þrõ3îé­=÷\Ðc•{ÜÓR¼ès)^žŒÑ爌ڣGîáÞã|îWÒƒë‘{ô^9h§7¼¼oyêÍí>¡f^dŠüÆD¥=zìEæ??¨qLÆN‡=jŒÕ8.ÊVá­:os5â·Õx¥ñÕx¥QÕx%•Õ8½›ÝKTÎÞQ×3ü‚§®¦_óÂB­#Šq\ýˆ™ ›ÑO¢·Ã¿®pÎg̦Œ—Çb|®”ã]pj5{æ¶i +€Éeql Ú¡²iV‘Øe÷ œ¡»ä¢‹÷Lµ©²gÊ]Ë´‹{-¢¦a`oÐöT8ñGi¾À#OÄÊKü±E3¹à(«øùU¾®ùàŽÊALˆŽbҢƳåþ©¾ÞÀúH¦‘û«Ä%øHyúdD}Obª«¾Çam"·û +D°£|P‰`¢ßQå=ø;¯ËZϼ§!Ñ#¨óAFtœº" +(¯4"†Z5#‚–ÙÁîs%Îi+ÜšŸò@…ÔÃC¥ÑC¥v±ì~¬º°ªÉ.AmQêÞ•¬PýžªeIC”èHi¿†¡ùn|WÃàû¸úl‰Õ¨¾•Ôu¡oãjpŸ”£að[ >A ‚að ߉kL˜*+!˜êõ %ñ/lkží}iZcÿÒ\Ð^šBä_š‚é_šÂþ¾ŠÑùs{i§àï;Ó"ùw¦åô;jáý;ƒ^¼õðïL±ôïÌí¹Ïõ)gü;Zƒ¿þ䡱j|žÙhæ-Èe,ˆŸÐª»ñI®Ñ‚øn­º»’ØLëÕÝžjAüÓe âõŠZ$´×[-ˆO]-ˆ\òQÓcÖ²|È’¹*0Z¯è ­Åð„vA#´:Ohªd„F.«GBs1^:7ô³éŒR¤ñîO²z$3J‘F$3×ÇSYCFd÷©z=Hd…å3"G?ŽFÄ ;cÞ—®$Vwâ5òu4¦'¯ó¬mßÂìø²ïûÙÎC΃[ÍŽ‡f§î7°È;ÂÝЪ^´;(ohxwz.o8öîÖ¡‰w„6§¥w€:Àì>Q˜±wOføªú)Æ"E'Tö¢~BHÿû‡„ò–¤Ó…Ò«Î÷TVä·C5±(ÝÝJ BÃ^>gI ÕvÀ©Ð‰[L +;$GÛÉ4ÑP+¥n^hŠÜT߃Y¿d%$Ryçw%j[f™ïž¸z¿­Ò»–™‹ºuMrøÕÅ=DÑG^]Üò9‰®‘5Ñ2ÎIð*m ¹gê¼r¬©ç¯)AYi® {Îre…%…+ÓEƒ À~MË÷íÖ‹j6¦K†#iƒ¥KÒÞo½R™â@íÝÓ¯ìr¿u(šJ’Ÿx —å?x Ò8t½ÇIð±;TL¾7™^ +#Moc1¨Š4^Q[iÔq¯ˆ4ê¸V@šÞCZ·¾:l‹Ò–¼CZƒ†«+Lˆ›Óö·EóÁO¥÷"ýƒËA¢Èe¿.§ íâ®Øåàžë›Üõ}F…ñ»’%´ßSÅ6~Í[Ae—ƒ2µ1Õ‚Šª‡\ÚB*'Ž­;ÑjíXý 9Ü­‚[u°õ9g‰¬«àÆÆREª6K;¯jxÄV]R6:¾o«ÑÁ–˜Ž²2àñ‘fº–èˇý‹Rìü‹Rì<·2^éIœïéW2vþE)vþEIÐÞ#`ˆÙ}Õ¹gm…&‘µH|ôº»^ñ% +ã]ÉdzV ìY+A㨂üüÿ0Ž¢õÈXò=2J¾È؆‡6"³·äæoÊ僟ð5rõq-¢ÐصÁ¾ä÷+SÕµxÝz]‹‰¼¯£µDy{Ñ…¸ªÜ£Û(Lj.1‹Wú¢¶œ"ºji<º'E, Åñüý  ã0÷ òÞeïˆ&\ޤhhvd—¥½#˜ßªãƒŸ€©Jta×åé¿~°'ëkD{BÑDÛ“DC2ÚºÛŠö$Ñcó¨ö„œ]ö¿æ´E·³=An$bõúJ¸D’ÉŠD’hD«*f’¨wF’¨UE‚‘à«ðwpÑ7h§¹ôN¯-‰æàdÿã¼Ê±äJn ÏSð×ûrùšCÈ):º¿¡ÀšÈ_Åž~òºã£Ø1ý÷+;±’l<'J™u\¦ÖLc­ïòõ+íø:l¯`¿7_7ðÁGkYO¾NY<¼ÿV"¶ž®;x»,t×#¿>®ÇÛã®;¸\ÿ@`O¦›ÁsdòÁ_Qr½>ùk¬C篷¤r ¨3p µ@oþšh2>ùkâýøÆ_c¿:ýê¬Õ—ü5öA<ýêü>Õö䯱5ÀfâO;Ûùõý|XÍÇ#¹ìÎç¤ÔðÔ—ƒw}…28õØæ©¯xñ|£¾tÓ_ÕõÎñÉý¦s´@ö“ÎÅéØNºÒ¹Ø—Î`2­à'‹Qw:KVé\ÆNçäIç¢éNçÌÉ‹ñ´Ôo:wŒù[4ÖþL¢ƒw=Ö'…zŠ}'0ýÌ?ÿûŸ/ˆÎ•E#:ò»ÿË—>üßFp,ÛwÙ|Îxâ*Æs¶†0ž:oï¹]¸­¼ä¸üîn>îþE¬«îõ3º rÒ~¼›)~ä±9œÃ&”'µ÷oG` R¸ÝÁ63w’š`ô·ƒ/ÓdÐô½'æ K'¦¡YZÞS31—ˆB®§žššVF¹¬ËflK*YºU»‡y±U'Ú}šäž&‰Çåu$}@çî¡H3#;º©à(úô±l©¨‘âãë‡Ç¤"ã%f‡ô¸÷Ìi¢†YŒßï–á+Ö`*/¾V…yXÃe™-Îç8Ìcû}µ8Ž‹qÒÌòZF£4â xñðŒü–^NT3%2ªsÓ±P¢A¶p y—[ÄjŽJò«PýCÆí¦Ã)?< —1Ôúü´“*Åb`…ÍI ¸»&~Ug=Û–wI·FÇhpìÅXÞ‚z-ϯí#ªCr%ÊJ`jø,Ǫ¼ŠÆ$&…+Éj"S +KfLÂ.SÑíCìâ‚mEØ“tq,ȯëèÜõìÉ0‡ô¦mÈZˆ~äwZ©r‰ëÕ ÂÙ`‚µèãÇtTM¡_›¯W\2¦k¾ÁcÐ+ˆ*…)ç§EÉ ±‰U\;J.­çzĻĈž¢ +úrq=þ+VåXïÄîú|(ƒ7« °»BÝý$vØßãÿ"vþÂ×ܮТôȹÀýÆíȼdDʸݱ9p;úùâI¸ÀUŒÆ·#ïšÑ8ãvQ¤*iÜŽ)Ô“Û¹íæv˜x²\"·CÊÞ¹]ˆ‘Ó;ÇþÄð,Ø×"ÀZY|õÐLè_0¼J|c1Ùûƒ)‹a¶ú+'þ!ª`û•»•ˆé¬jͳB>[Ü~w‹?Xš©_Òò›Á] ŠFù—þ/`ZXb\9`Õè·Å`š™j™À¤Ë`o9ÄC»Ÿ÷U©?áÜ T+8*öu$ÛšÞêy¥°YRN˜W4¾ÐÂY›Ìôç z“j ¤&˜óõÏGaZ´¼¡¬cšqF¹dsä€X gŽDxqë¦McÝ‘#m^ú¾œr®²5,·)?çþ´®¡”×»u€1n£u‚Dë\Ÿ³­E›A ¸h{RÊ{àEãdœ¯23u—c2€A¹‘.Q±ƒ…–™Âò«|ϰfñ£aþ5æØmØ%ê`ѤºÂ"¤í$”–jÜØŽüwmàS)ܨþ¹Ìfñ;‚Èlñ•ê²iÑ•I²Ei”ƒ/Åv×úÕÒG  Ó¼(žå&Ñ>%†?Ès­ ©3쉫ÎáSáň}m´Ðg{Né=ÖoÑž(¤Hòd]é-þSËÆ^Z8„îKƒxMB|ÆC]SS¦bm*£| AÿäRò$Ù~.É7À´äª$0/š£…΀¦g@QfPØ£2•ô˾'°[ade3¤>ÙSÍÎZk7É<õõc<8Ät_?®¨ô½Ú¸ÁcΟH…q_jë÷Å¿c.:•~?ÐVhÃÑ+7>ú꜊”•U” + i[Íß´4SÑõò(èÛ¼äè{£Éúvf2G(¬LEÉPŒ!9ýŽ·WÏ.›™Ï:ûZSÑTDΦÒd’OÍоèbt —M]r ´g{m,e@1Õ‹4dzš²Øp¼ ˆÌd_?î8Õ]¸È#z,û•Ž?ÄøÝRõ(%îbö‘š¤WÉ<Èì2ë7‹÷"L}ä¡+â"ÀªÄ—œÞD3Q>5éh=ÙCë·";dš‰Ç4Ù´E-–Ý’Š”úÇ Gƒãî“jïîÅ(D³4¢Ót IëxÄ$ÉÁxËæ6ù| tñlWN4dÏj?§¤4ר®¼=0YÊB“°ôìq}&æ‰Ön |ó8ÃÅb(4ÍØÒ¸(^Œ©–9m rEÃq\U¤³r惾µ¶1Í^È_Le¿Ç=4H[Þ܃f²¼\–w‚ö·Qõe 9Æ*xÚ­ÝÒZ£)zÚ¸`¾˜lÖÆ§aav½@W/&;«ËŽÝ̹̚f %Œ¨½{ªŠÖ%6D/ +‘TˆxüúqÇ ïªo=–ý)Ö%Ñaò‡Êð§tJ!€V%U%©±J¢3ë[Eà:?UéIòj@o®· +`K¶ÇY+ Úw*€5œÅ£@èžžk­ö¥{®5΄Öê²Z„¶u¥Ÿ éÆZú Ý˶Îq!|KˆåÞ¡‰—Ûlm='­¤ú¼îü󣳊š,‚=ÛísÁXñ$8Éù÷Åÿ‚溦¯òÎ%²ú¯ZŠRÆÒ.ßiœrC6‚9µ CÚ×b)4_ +±s}ÿhÕÆünY’SŒ´_¨ð¹fZÝòdãu °%ã4¶ì¹÷b ·yÃ&3N&À¹P`íUýùN]ø$À™õulài’k›$X»•±y€«/]µU)3™Ô†rªŠ¿i]ÆW¢IòsqÓzSšsÏbÆ|qµ œ¸ï$£óyÒ]|‰ùg]ë¸ïh2ªúÁªøµ6¥_˜˜7ê°{¼L<›¨ÿÂï¬L†ùoӀƒèÙF³á…-;pQß]ö5MÕH‚Lì|ºÊ}~ÝùV OfùtØúŸ.û>mœ.…ÀR‘è¶Ã³d¯»—<õõçq¾Ì˜ˆ`RÌΟzÊn‰ *=ß—Oø¼»­1âÀ³¶|€3âT4ýé#Õs­ïŒú Siì¥ìÄ2H‡AaòP‡®ƒdL´$ç´¾qâ(¸Vã®?/bÐÆJ Éu0#%ÐÉK q[?"¸Öd”MÐMrm§Áâeúm“ÍÎÕæL”©x0žo¤á7ãiH`O~E-óÈLúc´6¶ö`~'Ð]·'„Fϵk㤠®ŽÝµN;ÏG€X¨ÕŠ·ñXÛj¼WòsR¸{6±ÁÝl@3×á+8{Éòn’}Ï®`a}x¥*ÐÍÀ¥¬žÀɾ¬ž(€ÿ1^eÙŽ¥0l+½®ƒ™YGo£²ÿß–Àû’÷Sƒ.ccY²·«÷SPÓ‚qc÷Pd¢¹]D¶yLSÉ»Ñ;Õ‚ˆ"2²¾¾¬Á¹Ÿ(Ó‚!ˆüN/FúݦÑÄö‡ðæÃ?‹nD$¡òVªÐµ­Ò% Ú"k)2@5± +–Æóîˆ-ÀìÇ ëd?Ì”9Ë–aÿº·"ÇPtX‘ÉÂjƒÙ¸Ú˜÷²€¤ÒlZÆ$Ô:Yÿõ— ¬×Ï#Fª¯ÁÈ×åd°§Þ;5$X”Dj‚ÓM`1TîWÜ§ðƒ‰”…t+f‡0Ç* CC:8ôŠ—h˜äŒ#14¤àaeÙµ§Þ¨Èœ2ÓxŠëé­Å2ÁÒlÏ‘Kª6*÷îˆÞÉÉbÕ.„q³ÉäQ,Ìž• FFji©ÜË&VÞZ#„”3:ÔSqå’m¯ŠghË";k›ÉÁÃÀ>¯Œ)çÊ« +ØHyâJ?Èü:7™¿(uÛ £õÔûuè»Þ\êÖûúߥ÷×NU ÞŒ¨Àš¨‰?Ñkë³VµAºßÌò÷ÎâçZk qLý–QíɇàXrw†#8/ý“(#Þ)rmUúGÑPCöä"oÈ%ŽÂtƒ¬È£ ,«?FÚìâÑ‹Ÿ`CJó·EjUöõ0 vQë +ÒO–¼ƒ±°äÒXîÂ.˜ð¢'"ºÏ¥Þ“NNzÕÝ*^†9’su+Ïúü’I§_ N£fŽÖØ–Äw»¶¥?„˜¬îGˆ{ %K o–§îO–@€©Né¬îKÛ Öý0Zé\“"Zén9-Ûkr`±KwÚ –¾°Ú%«~éâ}+x¨®:O_ׄ4©ûçú\%\H¾<ÞiµÔ[;î·†‡¾ÊÒó³6q„Áêœ RèokýDãqÛ‘çû—VùGK‚=r1ÿ`I ?!ÅûiIàGÈí¶$¸nkØJ©¡ž u»>ôCEåPbz¶$²»IãGÇjWã(¢R[\ãS‚ËvÐ;MPA…‰Òä€*³¿ñ>j¢Ô‡0#w}’J·=3å'ý„¹® …è ep°nT°[ÙƒÎ<µŽà‰IKÓ¡×ôîƒÁ:Œb¸Cúµ%I6`ŸG¨-Âx¹M*R¤èéÿ9(‹b~-72óyoôqBU&u©Îûx‚ ©"¥‘O¢÷xBU¶è™=ž*rJ> ÎNâÖ×ek<±!b‰‹ ÷xâ°¸Ç@!ÆFn<±îŠ$?¯+˜”5ì=žVØÑ§uÁ8ÇSe™]ÆÎÈLü>žXD6,ÏãIÔ07q+æ¤?‘)Èָ׸Éoú‹á´{òq8Is‡ŽTºá$ÝI,bÝpn\u7œ¤;»ÍŒ” +÷¤›MÒ±Äíçf“ +˜œýh’…AÄúMÖHÕ&Õ \y7š\è{4¹KîѤj ­ïª°ºÓG“$'¾å×$àˆ2ðS|©†}}Z&µBý47ˆ(Ð^)ÕXÃ(ÓqŸs›¬×XKëžfsKmÆ0S5]ÿ[ÒtJà‡akµec´ÿލÑîâ;×ý¶+’ ‡¬(~ï=3®~á=3BFðÞ üÖå=‚3/ï™™)nïy­Tïyí©åáÓÛí=ör{OÜ'Ä’²÷žÀ¨ÝÞ“ÖÛ{bËAêÎ)–nïÉ1öÓ{ò]Òá=ùÊéöž Òí=,·÷ä {§Í\U¸@ÜîÑ{~¨;&Û¸Û‰vÝg_a]ìw_¤z÷À;ÎÂ%t:Y®f_ÄO®¾XÊÝW ÒÕWŒ¥ÝW¼Ý}_}uD=ûjÝoW<ãð°‚øàM {`ŸèŸÜ9OûÄÓ¡bÓõù%`‚}r¿Q-¢§t­5iX¦aíŠ$~ux½C tHð#ÄUúÊ_Ír5û°ÃÈ ±›ØÄ>q,cƒT~عÓYäóÏÉ ÀÔ²¶jjfu„W‘^-eïÉ’WNy¬•9²ÊÍ4£…$ö w£¾WZð0"}Ÿn×ìü×χØ'W ’/Ï÷øÍüP}ùv”>ýYt•Ø­2ã?žçO¿,÷ +è¡ÖØÆ4¨K–·Z#„²kµžqíBG¦Z!jWhÜ6¹šjV¡ ÈU_ û¹e…Žê]•¸`/³°vÞGÛû§»Ê–tÌ*ÃõÅB}1d“ûYßþ' *dßÔb4Ôw®ž£K5ý*CH«év"½ó‡€˜;ŒéhÕß’\Û´nõ‘(RYcÙHR_–'³#‰,‹..”@ê+*Æ’ °¡¾ª“fÕDJeeŸÝÍ`‘‹BÚ”½²GÑ´xo3)oa¹´¨±G˜'¯û!Ò0Ù ”wæÜŲªð£|'kß4L`Ÿþ‚¬ïÖç—€ÚÄ TÍAÖµ×Zñª ¶]›Åñ±àÍúq×¼Ú“çÍò¬yµæXêLiµžæXÚµ§]€ j[3hƒAmk€uRƒÒI{Ú{j['•,˜¨û_¬á¨†á\j ½sÏwÍû¬šøœgÕË$!òß«^€¨bχê¨ùðªwðk žÎñå†Nô«ân¼èej‡èeö&¢—·“ãEï`ïÙ8v'zwìNôî[:Ñ+Dœh¢w‡ô ÑˬË[|½ü­h¾LÎ2‚ÎöbKF(ô\dÈ"˵ÑWÍ;¸^O‚—ggè5‚à"ë%xy”„¢4JnºµnRÔ„xÝd½/¿5B¬‡à•Їy^^) +Ç ^k¤²¯LÀ\Ó!xwØNðî :Á+Ša”±ïæ;ƒ³8‰L¥¾U‚Œ†}Ó¢ªÝ€YÙÈì|,2$::]{%ÍìýSÖŽï⇅m”•§øa™X½zñCU‚»M™}dš*fNþ5í +§†(N:aŒ%½ƒD…Ûàñà k>¡f!j£Ž*u/|äŠÜ ~­3ó.˜U‹É1 `ècü+Ï)VJ^8¿Æ˜,{/K¨à6€;}·â„†4ÊÈTÂæ2ïàVƶÁµ'Åy1œ. bZCžÁ^˜\r?–”åçFxÿ Œ¾„ÁÕlØaae‰d÷Üø3oW2vD ÁK‹ÅØó½ò¡ÊµìSÊTìTC¨hq¸eà É{ènÃÞ£\d¸+_U°ø~œ¬Þ¹sv™=3F 1-1&­†!" UÇ;ÂÃ.ûòT1óY§ÊS¦èÊáȱXб8ÊcâàG’7bÊ–S‹É–d¥÷-ŠÝƒÔ%¸0-ö¼´˜»e^ZŒÁá¾v•g4Ù)±¯9gÈ=•ënÃõùåó2AÕ>•¹øZÈHÀŸºÊí퉾Îeu³q˜Hzv³ë³w³ <ÝìµÖÀ©½›SUþÊÍ!¾»YÞl ìiqlw[Ý,ÇâÞ•ºYàv³ 6Ïè + ]w»YœNî ª›ÝèP7 0»÷¯n`sqZðPVùv³ÈB\ˆXYWÏx½Õ‡Ûm²Û«ëkÖoFé¾ëÑ ¿”º6xyä¤cÛ Ô1~Qpu„?X¥›„ÄTÝ$DFW ‰#¼HHáEB*Ûnv±:›…ÄÞ,$Žðf! þb!½æÉBêÒxò¯!…zŸS1r:AQ;‘†/Çÿ”W9vÉôy +]€z¹/'æãÎÜßø2UÝlõ—%F¡‘¨¶È3êK¯ÀÂÁÉì +²4œËXÜE ”Zd¶Šõ`ÍTFl¿ÍÀ6Le¥Và ê'‚¹Ú;ËïúuX, ö_ý9‚\íñC®*ös5òëãx¥Ëòëãb ¿â¯ÿþýð þ¤k‚­ÜVÛ½†ôwÿõA™ÌÒi«J°)fk§’°ó‹>'¢1 ¶édhÌâböÃìéX.*gO”]ðZᛤ";“ áñ.·A[ˆ0¦És[]\NWúóhlÈèÚ<¹]èø +Ë—ŠúÚ*ÇÝIÐf©A´Ïªà>œ6¬ÐÙqT0Ї +f«t 9ª±îÄš:û˜ÒÒ4¹«GžõÈæ®† Y,Fµ•«Žçb®°ÖCg)ÚB°b'*Ó{‡ÀS*.Ä¡êÝSðŒC’ÙWr¹fþ;WC,P–ÄDcïñVGUéfMô Ì€Ê…ü¢ù%Ó$ø‰¥}s 7âØml37NCŠèMBÇØ8Ð}ë=5a`—äá÷Œ=Š3*&žªâŒÆŠº°"ÙŽ‹l³Ñd¡a0шöÊ•GÑ‘Ø ‰b$i"ÒÉEõ¢YŽ–li[6Ôºôæ¸^k²ƒ+Š%®aZËÑÊwÈ »ZQØÍ#jñ×ÇÕOØWJ¿¡‡ÙµþÑí¨¸Ù.Gæi¥à§ZžpÆá82ï§±PŒ{â¢ÖàÁ^¶ë’º`nZ›tsx":ï*OèÆqšõf4›Xûz~LÕ‰~34µš´µÇJ)—h<ô¡ÔK^îìKGÁ²ØnNÆTÁ*ÏËÆÒõ à Hjv…²âi"(ò€U´…ºHBsn¯ÄÖ§Ù‹º¥Æí©{Tîh®«`ýàzÕž—ßÎõ|¨C £?Ô!Ði•áêpÜ*R–/®ö±jmW _«ÖvEN,ÙUCfö¥ü`áÜ4wù ®bå´´‡òÛ>Ú¥gÈÿWvö£W%úXe-3wÉѨ²Ð]t@ØÕeu°ŽF«äè×öDt†•ÙGë­Þ\8]½1ôõI½ÁÄÚ®Å(—•™»Øè‹¬Œ\±míB»ÈíB£Î¾ªj×ÚzÜ£œwù­ZcFÔ‡ZƒMa÷Š]nO"rG*7= >}Û¬Å#ŸöÄ‹àl¹uqåAq“åa™wű†]‡ºcA_Íätî¼}I•7Ëö:š‘mpë¬ }³ÁÚÖ°“¹dG¯5-T»DÀ¿Å¯íÉ뚔×j«ºÌÑ–ºÑ‰PPœ,y£¸ëº¡Òo=›#s +²!4[¦k@›?|¦3ôëãêl¿Ö}z8iZ<»g8 +ï™o+#66‰±öÊÛjDjkËØŸíÏdŠ¿œTWVì -þ~Ø^M‘~rl¸òB†dóˆã$Eø›©¥B?96 +\Ùx!CpJô›¯Å·=TãýôÜŠô“ã¤À•“2$ÛÕ¹õdv¾dS‰wŸÚ_§]iÝD Ìá£Po®7ˆåh—ÉSbû«#¶±+±›¨ÙÎÌ­=î53\t‘Ûä¯O®‹Y]ÌxðUÎ |N2s÷¥ $ÏsÀÖÀôÉC÷€Jq«VppŸ¢`;'íœTY.§'˜Î•Š»EòÉA¶ÄZÆW ­:m|—`™Sç2ŸÍ¦³´7#8g…Å›`m¥Ï»$Vœ»ÆRf…%a׉{;¼S<è¾o;+fOÈøi¼“¾ÄÕ%vÔfì€õEy55‚3rþz;‡A¼ï ö‡Qo*±Ç§ZEe/,5d]â,*GÒ…êèäÊrÀ 1p±Í¡1pIBƒJÕ¬ó’-F•Lã˜^3L!â‘<Ž Gg­yh°ã¢´uÆß1:w†žÃ1ϯG‰ü5[ ô0ý\ +Ðtl÷‚uç£Ð¢ά,÷‚¡‰áWŒXÆ1E+ÍË~Q0Þu“H4„¹ð-¨Ýމ¡ ²wíqÉjV+ªuI´Çqd³LøÄÝj÷c‚ƒ%øD'÷bÑ›¬PMuËJ]*šçzMË\Ѿù"ÂsÉN=h¼pG +KƒZ¬¨9)u[Tt8½pr[#ï?sdÅpû¨Ýža£Ä’Ý~n2f/N¦à£“©ôÑÉ~£ËÉ@Ç£“[ºº·É¥pw/ÐÖë‡<î®xõíÅ7Û½½yøÓ··Ï3[°r“Íeí+ë°Ã€ŽË +Q9ѣ߂&¡E4Y¡…Š" hûfc 2ïF+´#*ËË]Zá€fu +´ˆcˆêÔ„jfúQ0žç{á!G´Y‡ûGð)㈼0”—Ðd]·UACß«êˆrX¡µ÷(”eŠÞcå%G4ÌC?`0·õºAy4uTÏN°·!`MÇOIúž¸¿Ñ{PÌ+ÈßvA_…½" Ó¾ìÀ3ÃgÝ¿/ÐŽÂ'}_LéË‘òDoô“R±ܘìÕQHÍül—šBEõ”ý4ÕÔo‘j±CX +’³Cd¼v¬LõA MJ‹ÖŒ±t•…‹h+NÙ®ñ*Ñéqª†T-¶¤š¥A\³›\‘nª7®¡4Îçƒl¶Œ9Z¹c²_ ¹ç úãL›È¥P~høØelûyp<Œ3€ÓÓ3ÌBÀà}f@óã0Z +™\†Q´µqfD‡õJž\†Püg.T‡™7aϲmìž[@Úm’9B^"úÀcû´X%m«¤øºyæ–a0¿*dŽÊ RmïMØgQßãÕG}OWï²=\]Ôm´úŸÑêC~F«ù­>äg´ús´ú`ŸÑꃽGë…¹LViï’ö8Wß‹÷‘r÷ÝEý‚ºÀ_p½ywžî*Q~O»i`ù•UÑÃ8Ÿ¨º%ã/eQ~aaŸ÷ŸÉ9 i/n8Éè<) +|k¶Ö•”+È(_ôE±´½YOyùÏ‹ÚÁ<;/¹ jÜ<;Ü50ùõß¿œš{ÅmfbÀLÎÌÞÌ\OQû÷_”K‘£cËÑEx»€Ø…-d˜]$ *Ε[#¦­p\„_g[J»:t³]¹£2.¸æàÚ6ŸzKÖß+„×êñP úɱQàÊæmdß±éiŸ Æi…öD"!ÆHYµæ:‡™7©tª²øh@gkAòÚø~­‰`LL!„.`=!͵å(`Xë2¬qÍÆC³œŸÃ lN{›½,p„!”êp’q Ÿ\}€` c^»Ô&ÿ¬kâ˜)Û¼ýœy‹Ü;®¹P:à;„ÖŽm¹vKâÊ›Df²o9í0³…>¨åƒ 7åMvƒÕ¹ak­»o^Kè9åµÈ^H§‡*’ív ñ©^¶Åo1‚ƒ€µ¹Õ”Ç ÉõƒÕÁ,¿0ÆA4ÔŒy–àyˆT.ð+pܱñ;‚#:kûâ‘Ì ­„àIE®ÛÝ`iGÒ¸£55·@«• á8?Ÿ™ÃÏ…ÆQê׎õÔËê(š'm +_JÑu 8oûôý‰Œr‘áß<:—‘G6£ô^¾Vi»—þ™ÒB¡`'¢âÐ,ò¸Òp<Ð{XzÆ:Ò¤”šÐšë„dsê*x¸&¦ #_Çu˜b¶×ÈÈcÙëGeI\XhU=:KæI0g'9¹¶p.ÉÁÎ@¤;ŽJà\}å˜È†»Hj«;qpdvd~h·wVkOüÊoIJs\N¬os™ÙdɈˆr¤ÊJ«>úï&êçÀŽ8ܽ¶£Û4àÆûîèœçì¯Æytâ-™`Gr¤Ž¾Ø¸BR¥b¸;’Æ<¡ûž§ÍFìÕéÄY…–¼ýyÈ\üyFþ£cQujÓ‹ÏfSkŒ§\XÁiîüåUŽ-×ns¯Bç!ôOœÛ‹p¢—xÿ ðvKê蜧ºl,Lé¬hS­Ôû”"‘Z3öáÌoYóüíØ·¯aòvÿë¨U¹3ƒH˜ÏëˆE{ï•| +. pû㇠©šf§ óGoj~#1Í} >v»u5°žýå¬ïšâ{Ñ6hçÙ:ßq*ÔDCÁΉ`ÇrYx» ½ÇYK +¢ýXØ/M÷[—)IÁÐ÷¢?úå—m •0ÂyiýžH¿Ûhݤ¨€Í~0 +Ã’ƒGnXyŸ$pž–€qÞØŸ´W×ý—#œf­c²GeûÉŠÆÕt­™’Êfp7Õ÷Ô¤½² ßØø§jü\þ”ÓïFîONÛ‹âjCƒ!S¤)Fd/{1ØÂ< ¬†Á7Àƒ&`í 8ì~P-"VY‘ÚiºÆ Ì ì +@,M~«r‡„ŠºÏÊlåÓmîY:ƒuúÐÍeÐñØå¡½·vQ˃¼ßñäH$ŽÉ¦)ƒTFó«,¹2ûLñ±jáÀŸå€ˆh«sàG9wÞPï°/´þ&ÆPà¯1ncèIõóù+‚‘b9û½¸0%QÃÒ3€ÚŒŽ7¦Ë•N4dûtUt©ªgè{ÍÔß¾é ëâ'£¯#´’Û‚61?¹¦õ uB7?JбÅ(ün4ý]SŒEÉYì‰ÝÎr] ZÄ&©Eº9 +Nö97Ó¹ßݧºçðØSUv +v€ÜŸß°[§¶Ü_\ZÐ Á@Ë+Á@¥Ÿ]MvƒqLg¹À/ŽÉî66Ç@¥k\•­èâ¨&qä¹’ +}áh}å¹’¬|áùâɨèƒíï±°|ͨ ¡ó_´51×ø^(RzsÆŒF{A ”‡>µh áâ½iÅ%´WPáòã|æЙf¹Ž n~Os½Ò +Ç7'ÿqçùA¨däó,Äò»Èýág':e“ç·»Fêý𓙸iÝñt4·!FÛq4ÚFØ­ég¼vVBÑkå HCuÖí-_õ¡Så§ Ñœ³„öì|Mž+„м"(Wø\ \õºäœt?äG¦ Lɘ)œ!Ó2„Ö·²‡þ°Q†gi¾&ÌŠ© ‚Ų0'e£ç¥e@ë –Ê!y‡ATÕzD9Ä)ø»ç “e챚î™–Þ³Bûî4îý³tïÆ%ÊZmŸ¦\ÚVSiŸöA°TÇn=ŸV³RÝ‚Ÿí¥·vì"2Z­·ÓÖ›U’ÍÐQkí/èäÌüm¿mY>¢••r—àÄ Ž-Mh–:~ÙN[2¯M?«ŒÑ˜÷÷VOÇùÊØm6#į.”z2#x[Yç<öw¨YV~‘ÜÍÊæ‘Ï ùÙàÃØ c–R_ç‘cȽyx¯5öV]¥Àõ¢4ö–íÁuFJº;\:h}Õ@e{¸t¡,×/Aè­3È&/—Î*ÛCÔ—ïGfØ+MR‘œù³„ËUeåµèžM³õ+BSYùOÁã—*ÿ?ì|&{ÞÚ4O ´IžH–)žh×;1Ö®wb¬]ïÄX»Þ‰±v½cíz'ÆÛõNŒ·éë GîÄxGzÆ«Øù,ê~þ}àÃ÷û á¿pÉgÚ’€¨«·ÍOª‹Ø¯߯Y+¨¢ÇBRYZb‰yì|˜–o=ŠŸSŽE¿âIsÍøŠÞciQ„Û/òu³2šHÆyÃì\ rovô_ÊUѯcSfOê,®Öú¢>©$G%Ðý[`‚V :Yƒ€ÛSlî Gã{JP…âÀÖ£T,™ݷ߃©…ap'—„ê;Ê7ùåúJP—üçPYɉ9ÆÔ:³N,âµÊšß&ß÷KàÉRá³ 9“(¡a=­õ<« &cþ±Õª~üÚAÚ ðó·Þ5‰îÙˆµª$~?:Ëì/¡þá ÀÙU\µ÷L F´˜ýrÒë¦ ¡a•Á³©„øÇ¯Ž³fØÇd›À6z2ÀšÌ“$2@ã\Â’2ém«k”Ýù®}÷g|f‡œñŸ4ÓâÔ\.9øëºÂi¤6ØÔYmèÐ ß”×§ˆ4"0X¶Yø +H_ž’Îéþ‘j ù·ü-!…3xúßÿñýôŸGýc»Ìoƒk€\ý§ùŒüû_Òp%§TDÑ­T(i îsš/gz6X¥Žå&~× Fî •,ÝqlÒæz{„õû2ŒÇMÂöqÙFxKqüC­²†¢¶;èqÕÛ²AÖ÷b°`—˜|3úPéX±BÌ®¥àœ…ÞÛÕÏÈ(~Λœ€®V‡›DE¾ªÛL6l@ƒÀYü$µ=@vËZÅ1¨†Î9ó¼Ð +r(Ó'">ëüJ'SZ.w¼ ›¥=yÀG ‰+‘$ d¼Œ3mÏÔ†`#Z-çéçœí]µJp‚4ÛF °9“‡aP8JòxIH ¦ö<ˆ^dEÌ{‹Í¬ÔɦâàN$J ìÉ6ù5øùtu…ð`×㈷‘”sR·³1#8¥›˜Ž¹Ý§ v—s$ TêÎÏ“mµÎÙ3v²"·¶ß®àØ•S½`‹lÏ N30‚yÎ4íâ'ÑÐFÚ¯^‡„Ùé™q|dÜyê•q‘Ë8'å³Ö´À@ÒDkÖ:¬ÌÏ÷ØMÑåƒq­à «óZsÞ¼ÞNY2žo?àãíуóö‡úösò÷c.õŽT–·÷Ð6%?ñ½,úó`£·ü„ÀÈl ”wž#f>æ'ý‰f¹”øšŠŠêWÎÄì4‹’²xõ.nQj˜Fî +KEkì¤×ÜËÑ'ìlÙOJ¬Ëo—1pDoPwÛ¨ÑèºNžæ 0Ï}8Ï6)x´“tâÒ¶èàzÑùXn“Ȉ´ín)¡A‘²<”ÖI»ÙÁ™Û1žý v$^{œ"nû¬åÅË+ ‘E‹ \ixÀGš®4ŒX:¡Ÿ¥!ˆYF8 gh¼úôó=JSzÑîöLCf°n„È$X†ŸT–@võ“Ú?ˆ®n¯ÉH…Á‹:¼¼÷'u|P`ÔÝ—)uçä§ÔQæCÝŠÔ–äû×MÖ'D2²:h„¬•%m½dçÍI,ªýËrP“¶ƒXE+] <)y0ó.‚Ñ¡ÓP%Ùc$EØÐrü¤6é&Š-ª'`ÔÄÓ©¡Öý•Ú*î“JÒeR»O¼[ÇXôÐ޳߯ù[dH£ˆ\ÆÜꬎñ 'W Mºc®ïÎŽG=Š€ˆÉÏ"8à£b*ZDê­âe¿)t4Û©þÊVˆAš$â㮉 ¶™Ú½V<&+îû¬‚q/5«X²š€Ç©“È« oùzI!#0ÕerpÏ,‹* £™w-Õdt¾9Øöò5¢ÍÎ'ë\&ú2®)·£èD`)ÿôç³M¬õÍ¥ŠÊ17W‡z' ^Ú°ò,„õ¹\˜|nQÞŠVpýæíòÒÁOòà,˜œ%´Bè–É‹CëMCƒ0b&ð:TfS·QÈ@e¥É£ Dˆ¬¡¾ÔZáç¹)He*pëp›°¿ùöÞÜfÙ¼6â ÅOÖI¥FkËô‹f§òÅãrðS«võ•H¡Õl•Cïj.¼28ÿØ›nº2`jÏÄÌ䜥æK|g8éŒX +ƒ»Öž)Y¶õ4\i³ Å|dDøˆÊNEå §Ôò…S£pùËRS•¯œŠÊWN™ù-èÓ¬¢ò ÓùL§ˆâwÁ³ª }»攢ª|–É\ˆÝ²ü{U!¥k\U5§*iâ÷w? `‡Yäs»3µ‡6ñ¼'sA_ò¾ÑÛG(9ÀqvAo€˜$BÉ–ù%vE}%¹äˆtÏai;%¿iûÔÛ?%÷ ca#–<á Ò†Ë÷Yºv}*N9Z#T\÷„nà*klaøãT¼ûQàô"JÊÞ^De¨Uæ^ô¢žJ=ž0’–ÛŒÎ@¨î}3¢Ïá[›ÑyËÖYe¼½-`æ“;U±˜OnØÇr>w¢8×§»8{i”Þ…a–Ü4Öe§óp,±Í}òˆ‹]tºkÊé>l‡ƒ- U²KÕv.9bêU· !ûú`ŠŠ–´ãVÛ‚˜ìØ&ZµíÉîUÆ| úÊ]²? ÓŸ±Á‘¸tÛI“.v1„Òªsy¯>º‹ýI\Щ`?á:Õs_®_Æ^äaŒ˜¿ÞÒ¶¾• ,euk½yìX¦Y +×_K~$ƒO/èôêÀ3 Ÿ"ne›X.ÐÆ@ñ¹>%í_¹^ÝAÊuNƒ¨7gη¤é„¨6÷-L*gßÓÒÖZÞÒÖ¦ÃdÊFÞ*Ýãpâ·­çr×T$Þ ަ†}e8°l†òôœ.=g¬¸ +Çøèî&ýÊ3v Ÿ\IîbWC;ÈÉJ;ÊίÜýôÅQÙyÐu‚²-LUSÎ;Èî­™N:0Ên~º‹(ä-´Œ þDxÈèêð{„7ÝX!õ¾¿ù§ßEªÖûèÊ/bÉ3=05(Of)¯DÇüpA0udº _ƇÔø‚£jÿ…iu͹T‰žÑ°#{=ò¥úì‘/>NÍù·àMÝÃ:gd)ðeàIï/`ðì‘/>ñîæÕò¸~ÁŸð¾z¾|YŽ/J þýëeA.Ùz¿ÁHI5PY°V6jðTâÌo,ÛÈý]q´Ïs{Âà» ä•/€k­ÃKêìÚy ¢?²ñ’{-¹q–<~àÀ‘µ‡Ò¨å¯Ó M(ü¼–’¢Ç£¼0ïÑ2¡ù á ÓèŠ×ùy2΃à3éå8Èc¨¯Ž³ôu”½—×íåF`QÐýóÑ=ÀdA ýqfÏQø¸oûÆRs¬Â§N•£ð}ÙT<ß‚½¾5"ŸÕ3ý‘­á#É.t5l5Gá£p=ë+šÖÿRø¯&ö¡†VJ; ÿY…_‰Chÿúû×Wr ×±R?h¿Ø +XÀ¸»„©×‚{›ƒF¡à?À ?oé2HÛÖ¶ª²¸Óôxí'%‚eNZ!ñ9ö¸»ÛAì³—u {Zõ|=ÓÒ ²¯†FÅb.GjiXœKté]ìÍì.ö9ÆRàNfYpÒ<¹+KK\¨4sÃðE`oæŠ@Ÿ8‹Y<9çó5í Q¤À¹YJðHÏj—ËrKpyÙ×SZ¶L=ø°ѧÖ^Òûk*é}B”ô/(¤Çç­EÒãœÝŒàÌPdi¶ÈzŸe=ÒšrYXÅæYuíYy9ŸÂú‚‰³EÖûÜ)ë_PXï?¿¬–Zd½ÕHXŸ@Úßóy(túá{U¾ÓÇÂt*, Á´î)L/Hs&pÎd¬ÄØ× ¿Œ¿ÌÊ„‡)µhX†ªËœ“r A]¦b VZ< v;|ådžì‘»ö>ã%©tÐç;–Ä|T:\ìXØæ>âÙR/”8Í‘¨t&¦´·,xëŽöF3KŒ=Ûéâ&Dz¬Õ“?i:ŸGœ¸Ó.fª!qžÇønRõ!y+)Y|>Ë*¾ñù"©ø|9U(®îª½D<ŽÚÃÝsŠÚóYrz¶|ªö|æU{¨²^íùjªö^P´ç?¿Úó¬Qí¡ÃôdÚK?Ô„²ÆÕ^í%¯=y®¡ŸPú :4dŒ÷»s­‡¾ˆiz^ôn^Àëvéðâ9éò"€Ì úz­óçä2/VWØÃ `¨kàÀ5 ^àFmD^$¬ƒ#ò"áW³^P‡‘7É/^Pxá?¿¼À9uD^€üyü힌+÷^1^ôïz2÷5–E†¾¯lµÊdŽW=rR‹^&“ù[õß×ès,GÚƒÎø@ÕšUæõÛ­¨®Ã|r³#óÉÍàXÎ'֖êîâÄÞH‹ÁúÐúòö_€™õtž§‚%–ÖY¢OžÄûüLwM9ÝÀG#9x41ñGÕEODὪ(^PDÏ[ÕeGDƒvÕUID± ÔªK•¨æST±@;óɪ Ag^¡åmŸ³*žz^U<•¿ªx8rU@VÅ󹨂°d«BYûÿÌç§ìûjcün>GšÇØROGL°JáÓüÔº•%<Ÿ,Ó,E!¯%¿ÒÁ'8tzuà™ä¶rT,¸âs}JÚ¿*¤ºƒT!œ¹îÙ£åÊB°}ÍÖZ53åÍÌò–ÌáÂtt’‘·ê}1ßSRÒj•LÕÊ£ ÀÑÔ°5ÄBåjÄB‘Z¼òN•W/(¼Â׳G^!Y¥…˜ˆ>õÈ+Ü3Ùç«—¡G^À­G^ \Ø@áÕ¤€#¯PÒ#¯n‘^½ ðÊ~y…sj¼‚zr7^ý†NUÌ—NëÒɆÿz¹™ÄZ ¿ûãCï{ŽÜX+ax’Ašç7–mäþnhË2Pº’· ä•5€Ñ3ˆ´¯ò‡4»¤U#£ÓYòÌÓPù¬­ÿ¬±ÀÀ°8î5hÞ\ÊsòZJ’—òB½gË\øFYki3ÞççéX,ŸK“©Ëº ¿o}ÔÒWR2ôÖ\^Ç—G¡ )Ç©ÐgN‚ϱ6„”†€Ï[Ž í‚ϼ6„þI3dži;ŸÒðkÎÖ%n“A±! óL³”†€äí¬c.÷K“ë/(ýÀ}}Û ”c;°ºýe; bNZÁ°ðbýl§!ü3kC(Ä,$Rÿ: †žä@®n¡>ÑZ´°€‡KöFõŠ?š9 ”¶^ +z0( L|@Ðó¼ë\²c¢) d‡À¶—ì“àìà˜Æ\²wÒºÒ$ÐõØ9í2bH©}Í©a¬ºß£)0%H(l_—zKè7Ùøi) ´Ón)‹+%t:Ç#c²FäRLëèF¹÷ryz!MÌ«É )©#<½IàÊ|ž›\±|½ëÀê0—)ÑÌ °7s™Ð'³˜eNh=®içMþGyµ$Ë–›À­ô +nèÿY€í¹{žøM¼ÿ AJõÂ]žUdqJ+9‘ÂÔØÚ(GYzIü9ükl2D̃ÞjÛð%A¾ºåŒAË.ø(å• rÃ|˜²¢¾d—1cbÍõu‰ôµòjÄ”’ÇO¡€ÕÏ’r–>èøVƒH^’&¶4˜Iƒ©WÑ–Ë·¶“†÷DÀÞƒ ¦IkØRpemÁôúP^ÃÔÜÐ\ÆLòž +’cXLE«Ÿ'm.0öír÷7Ì yP;xliq‚¯ {îJäô˜2³¼ú»ÎØL”%‚VŽeÄXÐkò£l#,Y¦^]G¼gDG‘Øp¡™ÜòÉ…FàÉàU'ü«,˜P“ƒ&8N‡I‰ËáÑ0S±³¬,øJT@)½.A]oY€äžçÙÈá­ +ÎÛßV.0Ú©ŠBU¡]ôüÏ,Ʊ@íd›ÜVfÓ¶¤9ƒÞéq¯¼¼žK^à¡àìÍÞ¼Õ‰1¤Ýo°„ãïœDç~rïó›3f´¤ÙÞœA½½ÏiÀ ÷ÞÇnþïßÑ¡I“\Å?þó¯¿Ì¢®5£þWöªfoþÏP"†r"rÖIýa¤´ˆ¨)ë$z&%;‡[„|>sµr^O$ÀܳNˆ§ðÆv|ž¾!ILîswQ€mÏ”âJw¥8a–¥ŒÁÔÇ€äáGïyá1“Õ)½÷à‡mµÓõhY¿ÆÇ¥_v`úeÐôÛFɶÁ¨~;zgöíiéw K:¦úÅ=köÅoëÄUwi–³ÚÙ§"<T:ØŒlOÒ ‘Þ–mÖ×ë°>ØPùƯå+É™G¾í4–ïÀMkS—3JX©ÓR«ùîxQ§eqχñô™¥Ê÷¶Ü¯Ñãs?ãrz&P&É•ÂiRÚT—ã'…ù©ÞLçdâBo³ôñ˜í@DÑç1”©lÉl7tÖ‚»ìyß%Åiå­; +ÕE³Ž]rà˜ äï@êúS{}åPÑùë#‡*_lüß½µaŒG ãw½ÕÒ½ Ý™)zf÷cv²ƒ–Ù1¢Fmo;øî¿±,-Ö{ü˜†ƒÚR*èqp¯C¸ÇnÒig:ׄ]l»CtE·ÔA@ØŠÖøÖ‚T…úø@EêÀå¿›øm©$].õ]¸ÏÖIéŽ2ÎQú{ŸÿƒŽÝÈo6­ÌˆvïÃA)CwÎõYºÕñèè)g–—L§éŸA«|Râ[ÎÄñ©=P\â;)âßrG5æ§ðÑ5jüh½Å·œÑÝJ|Ë$µø–³óñ6þb=Ë2™ËzoØʪâ¿E[Ï¢¨3ýÿkM;QjZ6—ÛVAˆYmÉ+²_ÜÌàñ–ü@ÕýZwOÊpðØ–.Utf¶}îàw<%dºžñ„É £P‹˜ë +–Ã}wÌŠµ +˜zÑõ.b - ˆ÷ÎÖØ”ÏkÑ­ÍhÆ¿˜Î·fÂÏ\­`nÇ'ÞÜŽeQ@p­>ÎØ†€=¹%V×¾>ÝÊu­‡ò´zœ<åäMo‰¼ ÿZzBrj®ˆ¼2,½º\‰ÎŸ/£àX\µÉ £•‘Z^`ïÁ9ÏÝà~L®ìôP^ÃÔŽ!¹Œ1çhã0’ƒØBâkð4–u|Þƒ•’6{Þzmâ@õ:äii’RwPÐf!2v RmΑ†$Þv¸Q™ii°•c‰«£™%?[ÁŒ‡z‰}„WE ¡!–ͬ£<ÙPB¤YviPRa)öhðÜó×-7¿<}ïù°Ïü®Ç@'£éê1ÚÎÿÜ‹1Ïî‹£çζ“Þ¬Èjd:êÄGíiº>„pt÷f˜ë|NàW„ ŠZ32¹©Üt—ˆñY»#b€øZ_U(­ Y6á)e}UÏÓdîYÆò9Ö “ñêšsÏúÔqŒíø<ÚÆg:>O­lƒ|b +jVŠÃŒ ²Ë]l²Úlóï~D;,ãëq?µ˜ï{õ€ôl/) Î$~Ý™Üà-#ï‘3j G`ŸsßHᬭK +íãý…¿Ö¦†Nw/uKJ]ÿGËú~e ên©R¸-w÷¹|žÆ-§g×K p”©é0Ëž0-Gêsü¤0?¥)x•Â&A¥¦Ì†·ÝîúcŸÇP^ŸÏ nè¼w)#èJNÂìŸn—Ø3ƒ¹Ô²j’(׿šü±¸³“(ö2ÝN;ÀNü¬CVÜ´ƒ¼” ÖÇ|•yÀG™‡¥GÅN–}îàRfüvrÖ¤ l‰ö#Qž6AÇŽÇd¹·¬'Û±ÅPmÕhÛ/ÀÔÜR¹ÄÖ«7¨Ýv°˜ ÿ¼á˜ ^7¨¨"å¿n~6øÌ d$;Ì@ŽÀ>ç¾)ý³Ò,^•¾Qç ±ä¤µ=Þ5‰%ßJ­óúÊ|Ú¢kµ‹mo8¨z¯˜ÓÜãÙbÿÉÌÑKm?aX+-$+_, ,w˧Eõ l²ÑÆø¾u©t—ÚbØÒH"—Öµøl{ï(1‘•þÞç{:´ÉÜlºd‰w}û9Cd9($刳n]“õñ¡¤§6TŠomð© #ÕQ4ò äŒØçþÏÚÀöº~ÙÂ+µñ÷hµ„dtûá¤)S p‡¤dÊmë NR[òŠ5°¸Qh“é0ãšC'I,ucMë<<)̇ȇÉr*o ßQrvÄEI"J0ôµä”Z0ïkb(¨ L½ØÞ†Çd‡ŦhP‡I·MgT:vÙ{ +À.Å"`nêSÀŒ/ ”¶} +X{[»OOn‰…¨¯-iôb[R’Pär‘âÔàÁÈ('EzK¤hø×R]Ñ©¹"rðJ&’’ÊG~ö¤ò8¸L‰&O¥ƒß¥ò¬Z+•™RBç¥o«{`òNö³ÄÊ%gŠÂê¢ó¦=`Œ å5LÍ Í%Òld¢Óåy¯|aÍ‘ «ÁÒƒV³×º¨Kì.7,Vyë°åR"Aß°uwfÙꘒȣټ¶P‘!6°|YJð±¦õy+nÙ£´4;\ÁB—ŠGxåÎÞÉgG1Ê•f +Öžlhœ}/¢»Ä%Ojx£Ø#®sÏÇÔ©7q9ø¸ÎÚºÄUޏ¼¦i×5ðZk—¦ö%#ôtjºa|Œ òÍ«ˆ¯==ÒÀçîÛrçî~uwÛÓÖÝ+÷È¥MüŸÆYîŽ6[/Ñ{bIeyÂvx&ƒýhðhâ”ϧ®¬Öäæ®Ë­I`lêÓ‹+¢Íç®`ÙMù¬%®-©ž8åô1ö6Ub®wÉê4²~»ë?–2SÅ˧=ƒ¼Øú鼨RÞiʺÀP.7xçÝè»lé0Ï;öMÞÏ´òÞ>ÞFÙÛY³èš¼ñ*KýÃy>câ~eèÓÒ¡y'Kk ìÓz¯œž \¯(ÀQ¦eS-jÝAõ9~PŽŸyϼåÝ—Á Ã_.¯åîÝWS ÷YÍà†Î\p—¥õº%ô‚t»ìè—æR«¨IªLˆëHÙC‹ÙaÍ“AšVïI;‘±º¾ì“iyɼùÊð€ K—-Eà2tð;ž]qɰ“ ÷Íy¿´ž‚ ÍjF ¬Í×ÞýL­º6I«LõF³Û¯§ÈdªñYO‰¹†ËV]ˆ >Ìñ äÃŒ9>ìæÎ&±˜ÌÜaÉ×"ÄvïS´1!¶?yç¥Më¢îìd^¼½™fyÏû/åU’žYޝ’hšÐp‚Ú÷%zcoúþ‹$gv¹vvü<„PƒÎIVÑBÖ½:ZÓ‰K¦)ð^GµD_{«LNÏ~«) +{——‰`é)r^yÂÑÞÅB첦6Þëü8Z%îT:5{w¯Ï-gLÛÎPxr/{ßiôhà켯7øh 2ÑÀ¸óš~¸óbyè‡ì¸óþ•ÃàVê¤~3ÛÈèÏÎ Û”dÞŽ¶†5Ô½Þ;/r:Zš²ÞÎiS<úŽü¼AˆÄfæ‚Í-3¸’[Ö–4(piª™—¿ƒsÃz-'Y_Ÿk€Ž÷ééycÐá×çØ!•1mÀ40õ`¹?/ Ùl÷9HÓ˜{öˆ +F?s´Ò¬ÃÃ$¬ZóJ=ç˜¨Ò Ö$ >oÓ·¢ÙåëÖçßÁƤ³¹ +“J`tÙdùhÔp™ÍŽBcïSe4Û/sÑe.Ϧ+&Õ®ëëYwñynºOaþkÜÇÖ~|L\+RsŸ½ÈÖ‰[·‰åÊKÒh¶Í¥É%—Ë!N ™í0[o‰'›þu“M×RsEäà¥È[îyià€Ÿ7H«½(HM{5n­öj å¸-qѧqÓO$>q¶#u-n0£°·WxjÆB='<œGžØ52´öj ÐÆ5pƒªÀ%ÓΩíhÜ)üâ¢j˜L)Œ¦XBgGN5¥Åïˆ Œä|í<ýóºZ’3{ó•yj¯aénh.³0O$ +`*ɨ +­ Rrb¹ÏŽÛç®ï­bø÷´©É„Ïüûp-Užw,ŠËUöäl«fí¯eŸú½¹%M,v~º‚›(?ÚL¯²@¨R"kî´Š[>ï¡Zo<ðæqp 3xu0Dê wraâö8ê[…òä¼-Mѧ ÆOÒ*”¾i0åô +¾SzT¸èÇ$.no¥à),½º dt]2º.oPuÉûI:Þ²ä¤&-?‘%.0û‘e ²Ô6r~C6¶) Vò9úØÊèÖF°êŒ„!Œ¹ppÆÀÏ›Eµô—0HUrK% ?E s¿s[ÚûDŸö’~zxóœû3Íï&Áò€½?}€–,7cHÊËÀiy˜›1HýæfL|cÌnÆðçÞØ„1|ŒFù#ÆÀþQŸ„1†™] +ù.“¥o]«ívy¦%©ÀBf;ΊÍ},…ü9’geK¦âÁ¢ê6t +q=>O}ä[÷¹;qI > ‹ Yœ“÷3ÉnËn¸+6@ T¶Šíéì²D0DÔÛå™òi yDz¸ƒ—X(UÝpL,ü¼”—z5±Ä4™XbBM,1õ&–ÇÒ¨}‰ýt£;'LoïºÀ[µõÌ@ËSü°åV𛾅40 ;¨j³yœª–{WË ªZðy®¾³Š\pN­?ß"…ëÈ¥›ýá¯÷…3¾nz4ZF$e×ÀĵŒ3{öXÆ2rª\nËÝå/ŸgDâÓkeK¬-ZN4 ÕçÉÖ7¹ÔpŽÉegA/ÔJ·å°øqÇ:†¸NÚo›ÜЗÜ%†Q1,yYEQ¥Å~å2ˆ†/>Ï“2ˆ"œå"åøä–"WæÅÕ-Ób–¤u‚ÁìM,Ë:–<†ì¥ï×Äæ9ýs*Ü»Â;„âãðøú¹WÔEX7œz¿½ÐHÒ ¿©„7¡/Ùô¢•"eË:xªå‡ñfü!¤óóUdSã¶U¤¨ñú¤ì÷z2„ÉU^­¬Ù†þ´¹}*/¿6Cy”h!ÿ’ªB¿·ìþQXÉb Qh(ìci)dž$^UÎáÌï¥ØêN½Q…¤&ŽÅEmÚa"wþÖåÃ1ò©’Ѓ6¶ ¶â§.4?¥UlºsÄeVN#Fº‡k@ïV¹üšêä¨9öPÕÒiyœDN§F™-Hеs^¯WMÞö‚ÝJüN_Äqƒßzs/ÀiÉS—¡G*´g½ÍAóø¶èÿï¡ðÅÞ§vµê,†(VQóþÚíf|̪ UÙ?c¼è€Ä¤PKiR1ýå3¾§ÌU²±óÖÛ¹ÛRŸXÎd\Ç1¬§×MÕ»cž¯gQKê¾Ê&áÑ;êvÑÏ«Ž9WŠ0ù¶Ó€T_ 7žÂ†®Zع~×e|èþëYÎ8ʰ­÷¡ø25cŸÕíãƒäݳ_áÊÚ«¸Å8˜÷¨f+_@J‰? H4v„ž>è‹w kmúÊhÏ ÛƒyR9F‘ÊñAÔ¯!"ë¼8l°¯´¤é ÂÈr=|Üš‚µ`WzA,mƒ!"`;;eÞAH®d,V8Bfg¨ ¢ºÓ톚¢zÛÑàAËÇP3t»<+¾g²f}ƒìµVz¯óóldª»Äd¦Š¹áN;jˆŒÏ©åõ’;E÷‹côrãa‘•ÓV†º”xþjR¡2nÅøy, ~_ÁEž˜–D/®¶öÞ– +ÂQ—¦JÇ}ú\áŠñÉ"#.T^ŸÍ?¡VµóÎÌ<•/³–Ѐí1â2;PÑÆ}•°Óü!¦„­òŽÉÊ8~Ê…õÆŽÆäJú%hJL1F{ÒÆ˜¸­ãq¤¬ó*À)½†ØQAÀÛ°j¯ZW“ËV®ùDûÃ}ÖÑK“1(‘›6<9 ZN@u¤mG¦ÏCÔ9Þ/Úø÷] íÈýBDö&ÇÅÜÑ®èíL4ø÷.EíKÐE%Ññç&ŸŒðŒÖ¥¢vJ--ï¦Å¨ôVFñ-%êìÛ/ýñ*¹Žì†wG1 H+HÆá4Ôù_]\~Kòܤj|; +ŸÃ§ +P馗7š4—­Áeû”&š­Ê¨¡1Ò††eoÆ`7{¹ Ý†í¶hq{Í㯎 IÏéD¶IOúô[°#F ;¿Ñ§ ¤Uí Ÿ¥ñÀ±¨c}kÂgÖ«É|+5G4I_Ÿ1ó (Fºx|ËBÙÑÍãSïÎ[@décîÞcSCv°®ÓžPRÔÛ³‘ªÐ&Á¥èÀ`¯3˜9ºaMJhgˆñþˆ³°OÁ’Á"'ZªÛš°{]©˜I˜™Á?ïÑ£Œìa y…%´ê¥WrIÑK陚'*¥÷M™¼¾¹M‚®oý+Ì`³Ê=… «å|]hœ$éKѤ§ek߃+èd:ÑŸn&zö]²vUè0ÆïƆ_Š +2o柘Ìg'û"º®HÍ=yÑ'½e¤ð& tÜz!R5êV›ˆy)uNâS´øthEÎÇ®¼è´›E=*‡ñŠÇô¬…odEâ”ÅP^Q€;éÎÉF× ŠÈeÀ¸t·uëÝ9>oY7Ðæv’7-ˆ²åpF¶z— =•– LG¤Š®7 "¿Wɪޑ¦Ús˜ñgœ¼à[eªY›%‹‚Qpø p úŸ"uŸ ŽØ +Á$¾SÉR¶äÔ‰•í-ÐJEäè ¨I–ýt®$~›Má¿ +#/H-Ìä•ëíVrˆ +†ÃöZÉ?„·E¢õ²"3ÍÔâ~HŽÂ5GâšH9×ÓÌwØ Ít„ž€ä#£›­{ îLë´Jð'Á•ãzÄIeƉՊ8©m!ì¶b=½·eqj?‡%óÑØXÐeÇ HšHGO#Áæn [_D!©d+‡¾¨ÚFx¶>«}[®Î'Xޯבö”"·FˆgúËú1ö¤¸4þÔz áMÄÄ­¼~fì±1GÇ7FÇ §ª× Êý¥”(~l ;\©ñ‘@Ú|1GüVt•VÒ †ÄÞÌ• +öU0:0‰Ê;Ń×ÔÒHPÞ­ë,§9ß`~Ä!¦:’l jsñM*ÁT·dôÁ<ü!Ħå ¶ÃÎiü@’½’ÜM!uØŸ¢}Æå´Ç‘MÈÖƒ!â(2‘ë[Ú×Ï!À»¯kžõ®¥Í¬¾¿/E’©nYf†}|kÙÀ×ùgË&]é—epÕŸ–:_^Ç4Xàlé|*}§Ù¿*åèœôF³•…³6 —j4‚ªs€˜u.¾b`¡ï×øˆ6kÛêÔ8j\c~ÝKŸ76¸D/RK¥:vš:æ38źms†õšííôÃ|{›Ž‹6ÌÏÍɯ®%4ß›Ý vÝ3÷ %o%GíwWYl‹ŽÆ8K[ŽKc¯ -`vj?u¾^ƺL)›¿¦÷úøÉh¤>ƒ*ÞF¿—˜ÙHlBNœA–ñR°G¶gSÌ>2Î&]gSMyž×ÛdðÂ“Ž»ZýBe4$‡ï„ý5@ÔwŒâL°5›BA6˜*ÎÉ×;’54h׸§éli?nN²óÒúzH‰r&fteë—íÐt…4rÙ·íP –èÝ/žq5((çÔ-¨F¡{9¤Ä™ pÎWÔŽÑ¡bÇf•½A}Çf‰ °›a(Ÿlˆ@Ý/Ãð)€i-¶/€zØgFlÁ_v÷§ÉÞ +µ‘Yö˜[ØÞD··îóÐåÖýrÀTlZÐÐ¿g³XS†+øu&K×Bš_Ñ ©ØåY«AžÞ$U˜‘ºÑ;,h T`çÉ›íÛ–g3}3:Ö»¨ä¨ŽAËT »\ß_C±ZÄdØ2{5¹^í]7¹¢ZÍoõL° °Iíà…mSþ¤°™j}ZЬb¹ðk+5d­ó,›X• $Õ^ŠÉaKYY?€^•8ŠBäë#`JJ:ÈK,BÙ|ÀF×?}æ£À0À’b]ö¿íJ^•ê†Ô²b˜Áúî2“æðêóÛ‡6„ónhÛñ¯|×Îù ’±yeá}H;qæ*é×Z QÍb—úâÕÖØ#JIZ¬`9Z«—&!Ã:‰<@KÃÔ¥a¤²ð˜1¹ ÌD9W{#·«b­šŽºV+ÚÃdÞAö­ºöyŒ'`Æ×NÌm¹÷Ê×WèLviä:{„ÿz¡qš™‚FD@Q›ÀÚ4…ª—^&V³sýŸŒ\Q‘¹’p…É£›–¤Ç]a‹.§Z,;;ã¡×@kµ´±"Ș QemS°dGfa)/,L)byXÚ’­+4ê¡Ü™7ÖñÍý-¢“ȹùÆ4’ȆQu±{zÞdÜÓ®ÞYùÏ‘‰mȃ“~F‘ùÑKö¿ìÓÉ Z;Eªd’TÏÆ¨ËãéÌ›õ…å>IÖeÐÚó8;@OûõZ à +ãVéÏ’†˜äÖØå÷¥iî%‚\¦­™[Ž|(B¯ÈùÁÙZcÔ +#Ê„‘F„…áÚ ·a(ÀÙ0ÑøíÐÄÃ6Ã'…ëe}[aÊÆ’8Ú׉B²U¦'°×±KKQÏŽm3ï:{wù†Ùì[ôfG:þmyÊóoA¢7ù…Ò­_sçŠy\ØÈUüúy¡»V¹C½1%ÄãÒ¸RýJ„Q‡]ˆðdá:“Í*•µw‚,G©®fîì¢Ý ,6Îu`½.,Ç¡rÎzYÃB8‰Ùt¦[ØÌ–ˆ [ÏÆ¸ÔáEê€ù ºÁÃX9 =M‘ëÛ<3™!Ðg·k˜^è]‘8ìØÐÛH +x‰dÞT¥±e%7‹dÇyÄ…O󻙊êW˜Ä²·0¸.æÇlå»äw¡Ë™¾ c @Ë(W +ÀpÉæ+Ul Ò3~h}ôSˆNí(×¾dʸÈe~°¶, Иbe,S°d±_Î`"5i€¹ZT}¦ ÉUe±®gŠYR:ízA…G R~¦Î—Q%H-ÙswÄF¸co*Ìã%¡Å/ŒbÇàúõq`;ÞÔ"Ûr>g&摼~`o†qd3(A,¨;&|tà·‰ ý·Ç·†žK ¸ŽP-°ˆ|§KÊ‘¾úæPÖ×fcTƒËab™FùÈÀo ´/‹žh `ïd%½¬ŽÁ-+f­ë^x5¶Äx]?7F0!2jp²-0™zQ–NÐÊÂ×Ûªo‚d-z²`ÒŒ<£–m§îaé:ܬäþþy«Üo+ü‡=+!¿Ës´+óMªýç+Ûñ¸Lô^²"˜éNx²KåO~Z÷EÎI´•ÏaCT§¥bç<ÛuåÜl;ŽßÚK“[W€§ßÊ­%†U` '…}I8Zq¾$ìtÚëÛGÄç)Û;ü‡=gNÞqƒ +Éfñ”ÉQØæx¢Ã(þ\ +W݃ 8y2KߨW„O]ÁÔ\rÔ ÇÎ%9GMö¹ëDìlãëÉÁXÉÈYMØP€sl. V=\:'æüHE_o,4w8Øã³dë}dÓ¹<ªˆf4“¦K–Ö†Ù‰µh:5t°â‰¥*Ÿc½ÌX'cÅ u(زKv©E—ñ ÝZ-$¤u'¾.ލv"JYoÏ?ª pÐUÕk¡ÈþóDd´OT¾:ˆôäe$»ƒàÝ­ß1cÖ{ÅwÔd’¸Tâœ|Ê7/¤Ú,âÈ’B™ƒE“]_Ÿ-y ÀÊS©âeÔ…§+/QéY2íJß:áŒêÜ™ˆFyýõ_\޽‘ë¹ ²Wsâ—œá˜ÉÂuꌓóXNº+€…Ž ‚=è•|fè‡Ñ8*@8Í!ÕÀPŸTU’Å0{üË +VÛìvj‚cè<4LÕ%ÆaGÓR9K™2·Õ‡I6u‰5V†‰…²¼Å¬êHïKrǪ4‹ü|üDNÔÈ­»¢/øwÖlUÑÆ9¢ +Ö¸âƒEÂâÈ$™×$ÁTÞÁÉy¨T›”¥÷ýŸ¿ßƒ4 ,‡¡-IAt+ýøÿ•Ô°™·˜LíÁ&#A›uLëZcU7 ŠšÌ‡\o2Ë`̘qúȆÛâDÏú5Z5ŒÚNLW: ãQáÿ{ï0•f®ê]Š`µâÞ0÷Nts1öv?ˆa|LãÐÛ iŠª R©&KA†-U]Â}3ËÔ‚èy}¾%kª¥˜Î2­žr©:Ý1¾ÑWZô8Rìø¿>ƒÃŠ,Û“ÎU£¡ÔdXËã± šVਞ´ŸAïi5bÛ¸¤…X\>–]¡ý%D—ÊÄûüxŽÁ{fY¬…/oþE0V®Xbm…˜Ûõd]~åç”<2é1ºrŽ1˜òsu<•Ñ*YkE.Gò„s5f£ì¸Z?B&o>Ùr\xÊåÈ¥ô¸Á6¦0˜Ÿ7\¹òCkâ@Ä]¢¥ïØà£õgÒ¬s …°’Z>ŽG^O¥Y‚fuIì6%|f¢6šõ—2ÀšŠÒ 2 ÿ¶e£,‰Eä`³5rœ ,ÓË ©1uÕK\ nL¯ÁΜXüée6&}=¼ûA7æÍÒ‘í$Ì%Ý:¤%’XðënôXµ”ì*«h;Ò q• ¶Í,ŠÍ%qpts8$'UáØˆÛÔ%—íûWkðð2 ýóB9S° :Óòg&¬í¾˜pßLxÿ\aT3&õrjû‰] Ì<®ªÅ뜊øUÔW}°†Œâ†1Ó†½(qbPlâ2L0Ó‹6.èq,b숓RŸ¨Øu¬s M,ǹŒAAeÉa½Ïˬ´*„ûižBÐk÷Œ®8/ÝÓb”P4ë̱¿ŽH c×ÉcжãË‚ƒÑ¸¸caÍ]FŒoè/zH†Æ‚Óÿ5¯Ì˜ÿlÿÌ@Ì/y†ýhi³ÁÌ‘×ÎWK½”ú¨[êEHO8‡Ô2™sëœg‚5¦)Cï§·ñMwþúŒXìõ°ìצ Þ¬¿Nbá]yKN,ìêã=A>_cBfÏåƒ3˞˗†Ži¨ð˜È¤døÔxp(DÊP*£ˆÖ‘z³‰·"uÅ>£qpÄ“u(ØÂsÖw…Œµýc°Þ?>O\~ \!dCæ×©§aXi.XbûºlÓ¥Þ{·$¶L|ªlL—hîú¸£÷D\j ‚V%ÄARÞ\IÉ@‘7#vÿ¤P 0‰N%ú]ÀLÌÛò÷°Y]p§g”G]½Þê"†Y¥½cö"˜³;º bf¬ÉR P*¸°%,˜ákBÍZÔŠF—X 3yææ\±8Trß¿=¾ê÷ã4s—åáЮ_€aÆ÷¬h¤Ê­³bž¯ö×bÊ>ì¬qr{tJ.×·Ê#Fûñ+šËÌ+îÏ 1ãHlÐ"\^"m¸¢ZL—çÿ#оò:Á­ÔUîøó/áwÔ²ã÷ÎS}ŠCLl^€‹‡:"7¨&‡9À² Î ­ãÁZ¿5ºÍ^¹NϱÎZÔ®Wõ“˲jsàðˆÃÉ,À¦ûZ­+ŽØ£Ü&wðl&žØ¤³À’’ ‚‹ÏìÚ¡%Xs3•‹ÑR¥Þm¥Åã=$µ½;§=lïNj/»³Zv\«íNÍaR¿·’׃Ì{áàm)ÀëË3ÔW}´Š1Éä;šrÌxÃêêE`ÿk¹äYìA¬Kw¹¬{,[Z'âëÔG,&r{¥R¡‚"25¶â’yl‡Ó† +[뺈KwZتqZ`%ðåÓêÈmhšwŠÍ°¦ÏN;îRþ,¶2ÃàÁÄ‹èS~²ÅtþáÊ{]˜ P¢õÞæ’2i^Á‚O€¥\¿[×OjÀÕblbf·/ªŠ×Äzç¡õ" ++Ø@V4T°HT#³åÓÓJŒËÐ-³ä%ì`¹ò‚TËcžbÂ.o@Ô “ zXÃxžr}Øx.d¶RÓhØ)£X…[›Öâ”íÒÇ_g4ºðv<±mÅs’1¨×ÃiéÄ@Íå/Ù)ĸ â{«IwL³O²›N…¯ß™’[còÁ6Ï7Á¡*~Ù¸2¯CaP hä9`ÂÌæÄƒ˜h6âÀÛ óL#‚c¹ò< áOL5¿ís¾á–Êl `˜ˆëÛZqë©ec…©æCú:³=6‰§-z~Kqη™×š¿;}c÷û·ø9´3ìÛ–3_Üny?òjĶ.Là™òÌ1_÷¯6EwcTI ÈÕ!éXz|°9\#04‚¤ïŒã„Ì ·qžk\2hˆNU`Ãpø¥D¼kiXïEŽ}ä‹fDÊÙPCë§iÀj‰CåÚÚ0ƒXˆáÄ]ß‚”5•+âXŒ9°Ô6¹=:·ƒ¿‘s)áàXrf3°ý]ó äú6„ŽÆ9ï¶\Éø*œ¨/Ts»Ã™W8Ñ1ˆR¢¹!0t:©ŠC]EÅ™¹è„V‚¹Zf¹¢c"O†dµÄ!‡»pɹ>lXsï6W*@sjwÊÐ1XyŠÕaoè„Áv´º+_Û„Il`è1+ô`ã„¡ïmZÃ^E²®€ÂÂS»äà‰°¥är¸ÕLŸ½kXf‹ô-—gr‘Âhfß(; +wô- +8Øâ‰ý€Agx +†rg¹|²‹VöÙÚ ;S‘ÉD†:*«Úq²‚6ŽûK^†uìÔPÜ4LÞ¶ ¥ÌzÀâ*¡´Érg=`õŽÐæš -gU—çÎú/õ|Á6¯u!ÄtU+& WƒxrikSWkhs!׊}Dl„-—´ Á’ËÖ— ß¡þ-f¯¨\‰.—*™±âöA ¹äHGú›>ÄUßY˜nË|wcîþ+üuw?*œO†Ä'­FgÃŒ<—jbY¦ è£Zky¸`}tÊ­º?õù”À»âßFdB³ 2Öâ%w¤Çõ‘TM }ÔcÏWºWŸŸey€’zÊÍ Ã Æý-=õN¬u—Û±ê3‹Õ0mV¨ëÃqÔ]* ª¿}ø·³ÏǤ¦æ¶lºÒ ¥ƒŒ‹;.:›¨¯š}Þ§W ´½Oój(ûU÷iWØÕ5œcÌp‚¨¡óêU±¾Oá~š.øž<ÜÂ^Kز?ªbç+— }ó•É8¸}{éçœÀæò"YãÇ\k6lì(Vbµ–C{“u& úpµk&`fó¼;jÖõg?‘¡¾Ú8`à¡ùÄPˆZsU\W`¿rÏ7Ôú£FvTŽ #*à ãª%ËÖGw3Iìñ.±ÕÛ>Æð-4«~‚$¦nEî‚×ö3ÊÀ¤YÙ­dœb+i;*;¹|;l5ð^*ÏåŠ./oÅ7„tt¶ˆÅ÷ß¿ÿó¶\3#™ë|6CõIªN[/Œ”‡ìò}Î<ˆá4–}u›âÇêS9ˆµê;"¦Ê‘Ѷ³^¹(O}˜<âg¾‹ Õ|ˆ›yd>çËÛO"°ØZjE‰cÆ…6‰lL%#ùv»#˜~Çô/åÕ’åH÷uоÀÔÓÿs'ûþÛ‰„”i»«zgG" ˆ€K¨àCàÏë!xÚ5±TޥޫÑGBzïXoM#íÑkBŒ M)}ú`«â`F½Ÿ×X„>8f‡f4ö»Õ¹]Û)>A6¹ÿ­—þ @ Ï,ì–€œcÛî¥ÌÓ¤ó¹¨Õ8W¨ K€¦E 77&NÖ¼·ºËk`4¥Kă9G·](ƒU*:`DˆÏ“XOA‡‰È6”§ƒ}²a‰ª X•ý9tH‹§vUž ÜíÚÀ‚Ì¢-mƒR)Øœ†õÈŽ †…¾ìl¾(2}é-SvkÉ\Î m¤b˜æôØår•©O×êÕËËåЂ\ãÄ–/÷f𑽠y“®¤A– }HàPfÃÍž:’³7k87|4×8Þ¶›,DWéï*z!ÎFïVîñµuö¡Ü¥3ÎObí±\mJªß£s.äñÅòÑÐU’ïÝ¥17 ¬^»lØÃ<Ö‹a³u±ƒ&­ÍÒÞÆGh‡“§¬/f¬ø ñ%Vª­u‡¡c«mõ‹A³Ì Pg¨·#gøß‡1Xi÷Ä Ü’Ìì°ý£6kRÕŽYjµ†¯–†•-kÃlç¿›o­;^<|-r¼‡L-ÀÖC²+o‰…Ò©;;¨"7ô*9 +U;÷´qJÏyL¬m1÷cA9¡žx£ý¢ÈJ'MïGÕ;®¬dÏ9¦^Ô,0]ð8\†B®ñů–d,´µlfa»rfæ†ßü‰0šaëÌïÆ£«µzŽjL¿8Ô1%ÇzÙðãEC„!%DBzá!6l‰|á_Ÿ»tŒ›³g‹¤š«¥aé{µÀ¶]ú;ýP¦I?§œ~ ì™UÊ]ý H¬æ’6ý<Ò_/ª°¡P;¥ŸI?ÒØØS¤"WìÌé†>ÙÌé§°Sgìâ¦ì×ùÚ9'íÆ¬4ÒË»úZs8núñ‹£ôs„z;®ôóߎ£?Á̦º3¢ëEœÄ×Ì^éOéÖX>‰¥Áî¦ð‡µòqF…Zí P0ñ +f×Ì #á±qiÔpƒæêÚÜm +V“œPíæ„ ‡²]Ïn6¤6ì¢ô¤¤VxŸ8ÌÎ=(2;Öo†nbøÚ8öy,W6ôs,k³+_*^0+þñ¹ãᘠ+"'·9-+N.¾!è…Ì͹£‘\/!¦ov°7™9¾‚£µ‡ŽÅÆêºÌrSiØñnxXï[¹S¯Ýíz° )ÆôÒBHÃN&ß¼J‘œK£ÉŒG}šf—g­Ñ°µsMaÙièµÞr2ﶺx¨jûغí§b@,°žMQ쌞­3mx_¶–ÐìT„NŸ™÷}1G(b‹z‰[Ž|ÊoÅtVÞ'×?­Ì:àiudå´VÉ#­ÀÂõ‘ü¦RzCÏ^{)Z¬,„+«$Îb7Væ%¿ªˆvùÆ*Ünn +a)ZcŸ³J"ï:¦¬¬Î«¤h³ÌÁ*¸c 7VVÂU<‡+é:M»ò;Vñ«8va•ÓÒ±a?6«ZÒ¬‚þx\‹wé.H8 ÄCxBew°± Y™BU½t°MØq®ØÑÜ‰J.âm4[Š‹P—àv6j*žKoµ«B*·—Ú~ŠØ®«<¾Ž{£oT¿´=ø‘öèÀ¾êBÅûc샞'„.y1ñ['!=7é-H¹,ž»ÝÛýTò’QoôÁÚ,ïÔÊQ³½BF±ð¯Ô:©ììrá¸fPJš‘•]2OѽVl!y£™•e×UpgRþÎ. Y¿‡«™/E³i ^1XÙÕÿ·Ô^Úú‰ãÌrâà ®D7)$ñ¶­ßF3i(ÂÀ`O9kcHy«¢š»fÑwzMôg3F¬Á™çm¾±eWMƒã‘ÔX#qñ¡Jl ¶¢rj®Á©ÒÑÓL†A‚À²™5UñŒK¥*¼ÃK©<lE’ŠK‡ê–¥ˆ.L„6$C©ÚÃ_€™Uëd÷:.éß÷{|íÈäÚ…Ù²ùq¶‹Ó~2-1–œÞ¿‚‹<€[Ï+ˆÉ¶ê0t+”KlÇñ÷¿Þý¬ý>³Ñ±aà ™íZöÜKã˜À8(,çá§¶Cìãµ²†¼,1£H£#ž¡nÊhÅlªöB¨øP†ÚXIìÓºÃ\»õR“Y®v `Òú¨u/{¶.½n’;SµÐ*µ\ÜÆÀyÞîq†¸³wЋœàòçG.Ý«2¤Zpã½Æ.v¹áóL¨“PÆíÀ6âqÒÖ[• >¦|ÝõõÕþÍg´Xɵ-ßÜ…Ý'Y™vM`ñ£t­°€®Eù›Îµ<Íh “cÌÍÀ¢@múrêÐF0 ˆënaí¢±z½ä`†î\¢€Öo¬}íYB™f™û:ÝÇ¢¶–7ëó/1jøïàrÉËîù’Ø] ö·2.º5zÕ… "ÊÖG\|§Ñ…â)¿ÐØaîºéBä¸p×€)\t!JÓrÓ€ÈýM¶q×€=Ýu`8uKÓ]èK¹ëÂéµë‚ßÏU€H¼èÂáÈotÁ&©€Ûõ¿é¶›Õua]š5.VØ0F•ÌlľŸX’'=ßﯺ°6d5[¿Ò@Í>>·aºÀIGò°[Ç0Çe9F‘vy=& 0ÓìŒFVÜP³0u“éo D‘'³Õ-Ç’ý›L\ËàÉD÷g’T5÷§ÏÌw\íñu G«. + ÜžüFlžÊ¡õ¢°ìС&… B×¶(l¸gg>•ùâu×߉ÂÚ?’$?Š‚ó*ì⳩]UŸ`p^EALWÓDa{Ì_Ñ-µÛØcU²Þµå-Ôu·2X»QX=88]t|’åUE—U‡K­,ªGºåôí<À\V8ôšçkˆFCã·Kn‹1ÓíeÛ÷È¡˜|µñÖ.àk­`§ýõI,ŽÔLžCƒÞÓ«¥aí»˜åÞ±q&³ÕꜪÂÅ=ª{úÓQ19Ž|U,Hoçpä_%ï )<0Q-&>Ï»¥aðÃ,÷ŽìÂÖê÷dEÇb‡É¨ì‚øûæ_„À&ÃÀß¹[åž(Ä$ ­¸vÅ$«³_v|§«Ÿœœx|q„þ^W¹7¾š)‘i+˜¹XÆ8iŒ–T¬° [Gà‡ÛQªõžÓzèÉŽòz´Ï ¶f²UOq,»Ù5-ð Û#{Ù¢3R»šr)«¾õØå1€®H—.Š>ƒ’°~Ö+?2Fµôg°‚Ù#¼ÕÓe‚„ê¸þ&ù”#’IB´hûßã £”j­ÿÑëvPiáÛ·Éæž“ä4¨ÑTÂ'±Ñ UU +Øl¤¦å.¸"1ù7lj¡E¡¸k­tó¸ «µJ‹ÍƒíÞ³ÍKZfÒ~ æ^\Aw3š6;ë¢Ä§§èë¤_ö=¾V bŸÍÿúñ×Ô¾gÈ{àˆ0.—?%tÖÀan$¤—BO2v,Št34 ïVÛŒ\^^ÒýÁÍ‚–Œ¯éâçk‰(Éälu’”8Ôx2¬|ô£È‘À†¨”Ôíë¡©9ŠF ’(¹\VË’­),ºVæ‚\òFuC Ý ±’C$²,å{V7Rb…nY™» ìl‡úµÒwžÅÂê9âïnœ)ùý gþ`dë›0š½ÈNñÑÔöRƒ`Úœ,¹¼7w Úïû ðKRK\ŠÖc*† ÷Û”¹„)äßCà”2.aÛÕ¬ºÛÞ¯LÙŽžØÒ$qf}O7+qD©¿ÑܽZµL³žÈ×íø’a•²û¡gnèÙVí鮫‘AìÉÄž[öÿ)¯’ëºr¸wN@}8ƒŒ øièå¿í*œî“eýã…Ÿê‚$ÆV—×¹g~ô¿ÀòÞ ô$úEûn ÊEUuõ£ìñ ÔÇþªœb’[¼~KáoˆºÄ¾ äãÎɳÜßuCw$µßÚ½{B?o•‚ËsMZìÀzc{%iE“ +^¦^}A-g›ºC[ÕáµMªIÖ³©]ËàšTÖu¦0HM±¹· +¹|=!©ñ,rH–œkÌÆµÞ·eœºÖÙ¡©x`©rÆäQñ_y7+uÔæ£:½›ßŽÁ„™¾V6òéÝ& ¹,êê©:T¿ÝKwƒZ‡u•¦oÌÅêXßO: h*:–ÙUİaO°aÔƒ¶bj.¢0"e*g–¾ˆÅÒ§­!zæRë¬U °ìŠ–,C=v®6ˆ#ü4v`Ɣⲵ(½ð. {:þ6 I^òäñE& îHú†Íñ¢o@Mô Θ|5ÅЙoúå¤oAôM¡ø o`)½Ñ7ŸŠúV.~Ð7Ÿ+ú^®8èû–3úæÇ“½×›{³¹–ƒ½ñÿÙ”½éÜ~R÷òöAÝö÷R¾‚ùFÝ|88£LöÖñæÁÞ§Í“½Oßx)ÚÕmì=]3É{1ÒAÞÀÒ”¼Ìöê4Ê« +N¬êy ò¾åŒ¼ïûŒÄÎ<[¯Näu3=ó%y¯¯y¯iû oÈEy÷ý â§oä~¤y;ØÌ}Y 7y+7yßbF¶÷uFÊ|6<È›V…yãGêòÖÏÐC§ô ïeøAÞ·œ‘­ÆöAÞ§×Wu9™›ë•<˜X’s ídnÄyÄs±ŸÌM±ü`nÞ5ŽÐcšöÍoE>ü†ò£&ùF”]¹·¿ãké½)uØ(ô”ÄÀ=¯_ÈîÁÕucŸÀ¤NÌn|®aß«1Ç«G¿ÜðŸŽZ£ŠáÇHªEx7¬SªEI&ÇY¶j\–¶ÀÆ1™škV òÙäZ˜gˆ`˜U}b’˜QÄF›ïJ(Âw#:OMÍΦž‡bŸºÀn“ki¾;ufõ™~Ó¶Ï_§[F‹ÿ¶.÷*¦¥OØþý(l¦øcF\j“+Ö*vÉ¥€ÂØØÍ‹è“—lÀ+”MÞÞ6øIÐzߺ²â;U +x)^¹ð‘¼‘ðsA)7{µiÝ̽j ©J`B㊮ۣ‡œ °ºP’ÿŒQ57Ú @°«Ë´rU°ZÔ?²¢‚hÎÍ@ô4>Ä;s*Ý@£IUIó\A›@/åË?¡L=ÍÌÏ_—k°ŽjŽlðPé.¹¯šB‰& Ÿ ŽF±õ¯+b1sÜ ÙFù±9Ž«%ª‘é+Hs`¥. SùгEŸP¬´ÅzTvV³ õµ­B€…–±ãpˆšbG˜b½Å´[Ö¥I¬—[* rÊŸ]¦ +ÎÏÃÜvxåTec_œqڑǤˆŸÌ+Õ»î{Å-±¢µÅl> UZ«í­¯">‚,H™êºm¦ß•‚ +Õÿ9À¦ W +Àïœ.°:ãÞCx4¡€‰ŽETvgÛ„J`ºÒ[ ¥ÈÑÐ`ã&„æŠÜîA¼^¡ƒå4ï +•ˆ¥lRQ'C@­Îë1G•5º”«:Оrƒ0;µy°IÛþC‡ }ã@fsâd58iäÇbÙÛ%#é";Dbl¡&@ÚÀ g‚!hH°A¬´¬ÝŠÜ§ó.04’‰-9˜«Ý`߇ÇjÖà»Bn†eÅR 2üÕ/“«p[ˆÙw£ÈA¦àÐ ?dK³È†YCí$¿‡AU´<».¸(§Z·7L?œb0#U„XéK¬¥a×Ù³†EØK,¦\H¥1­¯û:×9ºy?ûp½©7‚¹~b?‰mGNdäÜ5¼Ó.¸ýøú:°‚’±Ö¢ÜÆ¡,Põ£*W”pbÏé+B‰¾Ü ^„òÆØ~Ø£!VÙ?QRAß%†®£åðÁþçr”7Óæ +l– 1e™†>ÖFu¹¬s0¸ÞÚ1Çd(K~p^㳋M=¬k«&6˜-Ÿ @,®JÂv[ ËÚO•#SÏLSly¥­ýmMn¾þ#¢„ +ŸÎ]lMÂà»Â¢Æ$EITOØž‚¶yðxˆHñi©±™PñeœXèMBÕÈÔ ø^È ó`XÀ÷ÆB] hÈ„¢Ð“’<|ÆËt$ ˆϭ(Ÿù ›ƒ±&σ½gúôÃÖa#?˜èi;Uô +N/ÊÕP¹6A*öbËÕì¦[-qæ[∬Öày”«? Á苘jÌ'&$oÑËÊ44[Qð‹B€¹„úÌ'T†¯ëú!Ùw›ÖüöŠÐ¤z{èŠ\–mÎÿÓ rœÐÖà9P|ãÑ‚ŽéãÚÛ4qÈT'¥ )ç˜ãøåÎ…Á¸uÍwæ¼ +JxsöÇ¢L÷:¡ÞÍÿ;ÁÆùüÔhaÔh]ô%aʘ; Ü_²0·&ý3 aúYé¥Y¬TÛî––ÀZŒ+[5 uof+a0iùHDBX”ÎD$TåJD^ÖcÈG"Rtw"êj".“vÖЍ˜qCSƒŸ0%öTtnÆ®cÄæ úu6RéÓ·Ø ÈMód|”ðÐáæ!ë`¹›ì¾´¢Íólã[W©èséJ~LQ ·Ù§_ö@ml)CKRÆ#4ñ„;\R®¤~]§4‚1º~Ó@‚Úç Ī„€”4ïäfád‹r݉5 "(¨~H—u´X |ÖCOW¾ £ÝÌ +‚‹Ë9h2Ç\ +MÈ‹lNeGm¥Šç©,0¾£¤Ûòmæ¼€õ+\F=_ +Jcò,¥ë€M°½i ¯çÔ¬¼ Lbkù)ØkLóôºr›ôqŒ¿ Š,qA$VXƒF –\“ƒ(jhù¬’ו…egï Eöì ;a`Ö]6/ÉZrŸÇKŸ–‡±$¹¹(˜aø4hÄ€Ew9Îݧ7}ù"˜ãÛÛ¯iº{T—„ sšàT^¤¬‚n{èK¥È P/…ÒŠ-ª&éShnKÄC¼À:¦ú\eõ©¬ÅÁ"=åÛyè¡¥äx»ÍÏ·¾Ck%Ê£Üw +Ô¨ËÍþº ™‚Ä+b7iß ‡¸:³n¨ë/ÌÃqöpœÏL×] +eì\®Ð(1>™ û–<Á”FŒwŒà£žJ¿ão’ÎX¾øÐD¢•o>Ê×ʪ6wžÅ¶‰ƒEªŽÛAxq¥&ŸÖÂX• +}4W\WN«ùxHîó™Ãc2ñãUŽ]׎s¯Bh ®Àù÷":yJzÿA€Ã}þ¶2©.b(k*ÖAãѼ3£â€%é`}YoXô°Í²fŃJ½d¾ú­©L·Îe‰=SËÕoz§–¹_ý¦·'Éñ9ÎtyÏ:»OF˜‘› MÉNz«ÇÌb‚áœK½Gcx=ç··çÖëÎÓ ú°.ö{Úð‡Œ\y"‘œŸ–-ÅE—Oœˆ‡ß§ƒ[ï+Os.-a+%6—ó×òÌèÝxn“y“y…´ÚQùZò£q5ýü{ç¼z´{ð£ ß11™šOÌuþædªÒŸ·9™´&s%=᪠h-ãÏõBXYþvÛ ,Ñ<Ínœ*Y_gÏÀAíÁåÐê 0Izp¹¾>ˆ×Ĭëu|ÓŸ–÷ruŸ`´ÒG¹OÕ(.Xj{p¹æt‘¯žy€Ö3Ï­g®ƒÖ"r©ú°Â¶ÐYzMZBÌú{蔯 r j¸Î—©RQý‘ ©¶ â!6Ÿ(¹Dšó»m›k<üB«¬±Ì9Ls„€—]R1· ©a­‰+êÛоǜ»TëºCmN:š +x&ä芀{ãÍ´e»_ýZüb+í<_ß®yùÌdÐð' +¢e%…sv1ÅÛý½(OKòëÏÊÿ'JT~Êö«TB^µò9*ü®)cJÝ ¥b"î×ç&ͬñ*{ ¯‰êžžÏHž,gœë¦kQï¹~¤ÎÖœÂòNO‘äINU§ç€^j|xûæäd sä®ÐŽß Êâýz€­%Z-ºak–¯³ñêU/¿ß ³ROÌ0Ë1àЃX/ú;]46ái*#E;vd½‡¨t)G˜x¡•N¶uÎ=Ð’mUO¿Ã<@>4ZlPúBG¡°Å® ´ƒ¶õFS¿ƒû·¨`KÃy ä!EFìÆ×Œmâ‹ÿ@wdߪ¬Š­a‘]Ù®S¶èˆ¯ûÛ˜”(þónÄðp  +Y'vö¥U¯&¶…€f‰û¯›j Éü7­^eÙ&_ÿ@wVX²£uÅ›ØUмª¸o¡r—ûJÒ*÷î°<Õhíÿý÷ï9ÇŽ|-0ûöŸŸ3¼Ö,hPv»1”‰ë4õdšK“áí½£«êPë1€•­Ç4ÇüfŠrä‡Ë]70„X{Ô¤“[Ûâ–£M#ÙÑ”W§äNV¹‚*wër ¾£Õs¯¶®\Õ”œOÛŒµ5ÕÅ£×Õ ¿ÈHu7I¦…·¬H®Ñ!me%³­g-e¥å•ÓgQžhm±dÐ +ùj…ßo +‹ªpN^Þ}€$åhÿνß}¬öW_²¨±?B|s(ŸV_ÝjÈ1E*‹£}Md[ §­,”jaG+-´¶vRÁãÔ2¦‰_Ó žåçï𳊠}Ï×#GEn(‚ùÃ:Y 4 jÞ—Þù3c±K3 4J arÙš&«Í2DccÍÅé/aN·Sj‚&W>ò ySoúì:ò!MwA·ñOtN³+^Y PؙҲ”ï¯ VßÅšº¡JA?ŸÜàYO:ÉR¬úÈ“æ„ã`I2O'Þ–¥)IÛK_C"Fû„ªéä OŸ2÷òë¼&žWiòF¬Ô\!mpU^³{ÕOŒYì«JäwÝŸ;…VΪîñTC‘R]ÖŽ¡[ Ƚ„´=i–.õïAil†°ì|[âÚ–îã5$ž˜¬kV¡o6Y[7°ÆÙÈ\’F“šyüe¯\Ö;«Ò]“ÖtËĘºv„ס`í}½ÛJÑ»räúwŽÜi¨ÔSežS¬!ôŽY·ë:Ú@p6Ïl/»ªËU;¢þºîW™÷Š\ÜuÕ­»õgõÿ­è ;|×¼­wj°õp®‘-0˜É®&Jûôʸ÷w²Ò§2î+E®F›3ŸÙJ*<«µqÞ±k†Íi_v2¤Ú¨þÄÆ¹J´.>h…#]ûe¦«Ô"‹ÈÓP8·ñt)º6înŒ³7öÇÄÔuÝ e柎w\Òëúo_ÚÈyõ_Ÿ7ëX©¬ÙëSnàwáƒÏ6¨Ú¤ðÕ8Û–]—ïJ8e¥i¦®ëöÉ+!MŸ +æ¾ ­ –X²D—Úzt= ¤9Ø)wºíFÉ«]Ü_èlÐú`9±>ðë{G'í§‡P1»„»ÄÉyÜù?s–£©1=fÙS.±ð «í .4b#׈MNa îC1¯àÁ´c~×|ý¸R32™JÝàéÏé-¤5uDË—nšYô45kÍÉ»{8X»ºßt†sœ …P{‰ÜBø¿Û?^Qr0•v?;ÈËøÊ\sÔåK"~10o |e¡ëæªi,“~B¢;µ­¼è+4µv[âQG$<±[‚[õ1#K€õÉ’ +rZg¸OÖ‹ˆÆ ·¬xzEc<ŠñÁø£ý½Ü`tœèÛÔ$tL¼ÿ7;Z¾N·FØâSwØŽN>uúÂ+JIz.»ƒæ5öÈÿ)¯räÊrèës®à¾øÑ~×!Æ‘œ¹¿1™ÄBò}I¥ñ¤|ü ˆ%‘Èâ J¥44ëîZš!´ûŒ +ö^’˜(`€­e~õ䲡U}œD‹›1Å™ž·‡`<Öa?âWˆäLÓé¥ ïŒÕYzêÉ ñåçºL\ÚÓ’‚Û%nWŒ(Ï=ÚI‰=@)ŸÆŒöóÒ×íˆR~ÔªñœRñ?)%¢Þ¦ë¿Ó1Oz¤ß•b|—ØYˆÕÑŸ ö—“(Êœ.¿Îc4ŠßBBí@´omW(机ٜcÝNõœuZseL¡­Ÿç6ýᇺªWÊ/ç;ØNý”gžG05%z·KgT§Fzø¸ÁQŠó”ÔáZÅVêå©o²ÚX'¶šû~ÊÆãódŠaŒ§ÍÐwHôö„„˜Z÷@U¢ŽÒÕK«íê‚(]pýÜSw^äI>]².ˆÆˆõ.œŒV_0ôÿ>(ÅUsW0œÐ1úèèÄÆHˆXûèØF}îŸ?ØØM±Ïžó嬂à=={XEGG3ð•‹Ð‹e¢Únw—BiŽ<ë‚ècÐm`Y€Ø‡4T£_Ë—b V*‚ÓA*ÜÉö ùm­pÛ#ØÚþ¹H<€e`å̘Ãs'#ŒÕ.‚K“Ê ouªšsç¡VªÝîÏ(Šýó†A:ÎL.éù*ºűQ‡^ÑuMM=ÒÁ7pIÍáE`¥/&}eÂÀÆC0±úŒ«æ¦/9ObÀéÉÃfú^Ñggj(°ïÌ+‰Ksi•õ,÷ü^0”æ ÞVlåYPG$˜Ò6PJ‘`ŒÛ'È™+¶K÷Ä\ïs”g¥‹EË,ŸÞ¢X”»„©åPK†2 Cç°H\iP÷B¨Óî/Kõ1íb$åãï˜ +ƧÌÕêÇw34ÊÊõ…–$‹ÍïÞ;9Mr: ÷abo›ßúÏZùÊAûxx·¡Ãµ º_©i.×€†Ç‹Oï*Dü¿¡m‹ŠF]0=wüÎï¥7dëãÆ×ÀÿýÀDÕšq‚¡nô}¡uÞ–½£éäÕÏap³Âú:Ñ +ñ…Ðñ9· ¡êŸ?Ø3E¥ƒËGÀµ†ÓÔÇâ1NÞÛ,Qc·¯\Œ˜Šx¹è„9)Xh Fg-ª#Š\v«®Ô+Qç_–a@Ý>­;Ç:jd°µŠ+–Ù° 4Ð’ç¤1€ÊFl½ • +šI + ] ³\ Ýy0â1Ç6@’éÌÉöëJÔQ†zM_B„p ÏB˜ûk!D*Ÿg!8xÙÌþ¤°òu!à3ô÷³€ŽðR@±˜< ýÊK!°'»èª„Ä᥈æ—J š^*=[_*ž•—J8^qT‚¿ø¬€m<+ÁýúY% 2b(œŸB„ŸÇwÉn妶A«„œã|=lhÅPÖ:0«õ×Z>¾)Qˆ·g€l1ri©šaPZ™‚ö¸£Ú©å–a—Ƙ’óŽuQ9îׯM­°.ZY Q1žwVã¬U_r䓼Ëý jÐìÆØ‡XEu%ºæ¶žYç>™û˜V&$ާ–_²r­á?qút¦ç³s§¶ŠëI¹ú|Ï•"W(7/MJ¢]§QÖ(Åý²YêäGÚgû`âˈBHnŒ½ÂE´¥²)pˆQÞÀ¹P +qg™1E» I¢#jÁa4Vs+4ÝX#[R|8Ÿ€o}»#”g’Õô@·[g”ð¿þûŸ?{ál—¨–ßþó÷r¯ey 2:¸æ~È“<uÚClú”1ä)¸U®qkæ&uÄ—OŽæù0©ICJšõ‘]4VŸ[9‹Á„8ˆ~ú½|’ê#ÞKBïˆfÉ^ÕR/YcÙ#ynYî`¯G„É¿AEãy6BZOE‡&ÏšÙo>°Ñ{®–øèh-[‘d±Ëy›­îC¨±˜Ýgnžh®&:ImßW„ªÒOû/zA@’Æl-ç4G«m¯bŠÚ`g½·Ô={‘ÆK/MɺÎ{‘²¸X×y/&pgó³Ö‹©êô¹zh‰/½4iRÏWö¸5žµãŽ–÷¢Aÿ_#Ú¯¾ëB8V§Õ¼w!Ð6,ÓÞ2 ÃKk1bé¥ ÝðÉÑ\¼ÖÜêNÚÑ‹G‚^¤Ùi½qôbªwâå}Ø«¼ nì]¸£ä-xôLk†=[p]}4‚ûKóÍÓãaÍ—ÖP6ß')y¢ß4ß—›["³ø?ï>,Z­Zå÷ÖkÒ¥ld¯üŽ‚Ô¥lzïÔVt`ø”)µnIYÇZGy,h÷>‹È›Ù­Þg±äÔÍÃÏÖílò^‡TB\ôþÍY§&w<óa¿b`F›yñûÛ°>‡Žø5Ï´%æAçN¹þžAÒ˜Ÿ{¨–ˆ|Ü`«C›ü‚KçÊÁ³}ÿË´S«œö~äÊ9‘"/5D[«qñyNÊñuã7+¤Š’"À°æ"@ +²( ÿÅ~°Ï,a°t® +¬£Š(ä½S­5ô‡ZÃpÒ“-pçPh—?Ïd¶÷&a!€` )H€Bñ—ÛBÇëÞß®ˆÌ¥ 6¸ýÙ"óÑdNa3£I»ÆÔó}~αù\SB#*“g±rÅÕ…ih­;HBè —ËêO<xW²mIÛà3âT£Þ×$X£6 ] +Ÿ»æÀÔµñùóÁäŒ ûš‚!éÏC´¡‹—,Ý5àÆÈi(ØšÓf×M–?oÚó‰õ¤Îg°°E'D½};ß~õ ?—gžó‡ H½ßàvéËà*Ý­Zéõ%ýçgi‚ŒÁÓÂiðÕÕ9(Œ¤éß­õÃ'C`³&>ŸÔ/é'!Ì/éx2ë'ïKúR"(é¸Yhú :éM?Açü¡é§Íƒò%ýté`|Iÿå|×ôû3ßß®Ðlº?À‹í%²K>it— LäøQ4 ÏæÏ÷Ï*j;9ÞAkþ8Ãiê㛯»‡Õª;Ä7”Ï 7}1‹ü›"GŽ)ä˜ È˜l©ðAä ÍO‘Úüt +Ñ œc +,E9Þéœ~ÔçÚγˆ`Î"€Õ†˜Ï"ßÀÎY´4ž (›E¾³ˆú¬’…8d-…n>Îb·Q’YïtDß¹Íýȱˆ¥ÎøïL³Ä‹£' ÝÏ2ùU8›LÈk©Úñ'³›ö@D ‚xs6ÛÉÑâ¶±’îÓ€Ïa'—ÇX_£å®f~¥sÖ«·×¤€ý¸÷3À¶¨×'hÎhH¹x‚Dnr×5VÄX‹a” þ»géiÕ:¶Ìlœ\8“YšÐæYy«ä"e‡‰¡åæ‹Îs šý:R5îÊÉ›R3­6[LĈ äå@Ò®`e®~®Ó†32'~–_ÈšŽqD?Ùíø½LÓü„ðÏ“a)”m“䤽°Ó6¸FÊbƒûößoWÄS Ï~œg |¿A…_Õ«þ¼ÈHG_ž¢ÀxT= UÁYµ€ùЦî‡ýõU\Zô¢ A˜ÛŠèyÒrÚDêê²yÞÎ)øôó|»¿è5 ßW,:^*¶xÅú÷Â1ÝÇ¥¹NP‡êòžƒìDu™þÇxµ#˵ÛÀ\«Ð\Åÿ!CÛsÏ"^"%oÿ$~ÄLɓ݋á!tƒìaâNUÔlW‡šZh&Ôp‰ÝÀûNGÝ}Ë8¿Ç×5#jÐ.kÒj/×þܯ¤ôæÈöDs猨!ç4#j®v«è­!FZœÉç\¨U‡Úó”ó°ÕV"@pÌBÞ +¨õ©R¨×|¼ÞÛ¹ +©˜.Aÿíÿae*;¿'ºV9XæÐ¦¯Á)åläÈ,Zæ÷ŠŠ«ÏþÜ_’x?f9*Á.Izû9%¼Ø(ûÓ!ÍZ˜_W¹ÕóÖŽ?ÏlÉa*Š3MuŒ“ól½ ±òä äÖb%°µÝo‚£3³Pœ”œK?,°«âé[(Ä$¥`£³§ñ}¨²R'x?î§»‘ý`¶Ô @«‹¦•Ôi£~Ð:Ežàî Bé)Y2¯®Æ=­ÚsÏ=V¹÷È=mÅ>·âæÉý‘QkôÈ=Ô=öç~% \Ü£yå Þ0yoyjåVOhÆŸ™Y§"?Ó1¿Ï¿F•—Žœû}Š»õ]c/#Rˆ¿ñío<>ðµ”¹Þkn9Elˆ?ô}D¥›ŽÙX›5š"6ð>i+Àöì`ùŠØtÜîoy\¾ÆD¥=îØƒÌ¿?¨q¼Œ»Ô82+ªqÊRá­:ï!æ^jÄo3ªñJÏOTã•žŠ¨Æ+©Ü¨ÆinV/Q9CxG5^÷ãÔ8Ýjú5/,tuD1ŽÒ·˜ ²÷Iãvøëç¼7ÀÛ”1y,ÆŸÂÁ™rܲ N­Æ`Ï|mšB'`r™¨wèlzªHlȲsPÎÐ]Rèä=Sm*Ƈì™r×6­"Á^‹¨iØ´=NüQFznà‘'bå¦þX¢™\p”ÙGüüU¾®yãŽÎALˆŽbÒ¢ÇOËý[}ÍÀ}$ÓÈýV⼤<}2¢¾'1ÕUßã°6ˆÛ}"ØQŽ>¨D0Ñïˆ@CTyO#þÎó°ÃƒÖ3ïiDÈDôHºÇù #nœ:# +.P^iD 5jFm³'‚ ÜçJœÓf$ ¸ù|ËR>8†JOOt •®‹iõ±Fl¸…UMv ꥎá^É +Õï©Z–4D‰Ž”öm + ™wÃàïq5 þW€-ñ£šÕ·’º.ô׸Ô“r4 þÆVÀOЃ`ü…ïÄ5^˜*+!˜ê#êA[â'lk~Ú=iÚc?i.h“¦ùIS0ý¤)ì÷TŒÎŸÛ¤í†ßs¦Mòs¦íô;jãýœA/ž~ø9S,ýœ¹ Í™û\çL9ãç h þú›AcÕxÙ 4sŽd€² ĿЪ»ñI®Ñ‚øÛZuw%±™æ­»=Õ‚øÑe âõŠZ$´&÷[-ˆO]-ˆy©éñÔ2}È’9à  ­%zBk3<¡]ЭÎÄšºÅ¡‘Ëì‘ÐÜ Og4£›Î ÷YtF+Ò¸wƒ'™=’­H#’™û㩬!#²ûT‰ ½žG$²Âò‘#‰/G#b1ï%#‰Õx|éÉã!¤ÿõÁ!¡½%éë éUç{*+r<·C5±(ÝÕJ B/ +{ùœ%5tV[Y;¤B'.1)ìMl$ÒDC­”ºx¡Gä¦ú¼õSV²A"Å‘W¾W¢·å)Ͻ'Jïçªô®åÉE]‹º&9üèâžv¢‰èŠ#.nyŸDedM´Œ}¼J›CêLWŽùèùó‘ ¬4ׄ=Ÿrd…%…+ÓEƒ ÀºMË{„vëE5ÓÀ%C„‘´ÁÒ)i¯ÎUÏTq ÀöìéWv9ÈWšæƒ’ä7èfùD‡Ê»</»CÁËw!ÓKa¤i6&ƒªHcŠÚŒH£kF¤ÑÇ9Ò4ižFøî°-rH[òi ®®1!r!]èŽHƒØk›,Ÿ¶Â#½/§ˆ4ú³8m_uhš~ƒ´(½é.‰"—u»œB‚´‹»b—ƒ:ç›Üõ÷Œ +ã{%Kh¿§Šmüš—‚Ê.mjãQ *ªri ©œ8¶ë؉V»ŽÕ¿Ã]*¸UÛ=ç,‘]Ç*¸QÓ˜ªHÕféÍ«±Y§t„Ž¿·Õè`K¼Ž²2àq‘f:–èåÃ~¢;?QŠçAÆ+=‰sã=ýJÆÎO”bç'J‚6?Ž€!rM4wÞøúd =%m›ÈáÂÚDALeÞÓÏÞ”ƒ|-¡i>øÍDÁyÏÓ;B>3ÛÎЌתÎåØÿœ:±¾ b•R…-…]¼jg(Éñ¨3ël‘ŒgjgüŒ²‚÷âBí ݤäbùo©;Ý|м„x¯ÔªËáH2gd×QçžµšpDÖ"ñÑŸp»k‰7Q¸÷Jö8žµÚ`ÏZ Gäëÿ‹±p­GƒPò}DÆ6 ÚˆÌ^’›¯"´Ë¿ákäêåZD¡±k1‚½ä÷#SÕµxÝz\‹‰¼×ÖÚ ¢¼ÝèÂ?UîÑm”cD—˜Å+}S[N]µ4Ý¢G–†â¸þ¾Ð„qxÖä¼ËZM¸IÑÐìÈ&.KkE0ߺãƒß€©Jtb×…åé??؈õ9¢=!‰h"‹íI¢G2ÚªmF{’ècó¨ö„œ]ö¿æ´D·³=A*±zü %\¢?ÉdE¢?IôD«*f’èîŒþ$ÑUý ND‚·ÂßÜA¡wÐN¹ôN¯-‰æàdçš~ý¸Ðy +­õv¢”§Ž«Ñ4šiÌù­^¿`ÿ ×‘{…ú½õºƒ­eF½N¨>ûò~±›±t Þ¥» µt¯¯­tï=¾(]õÃUú›öÍtk T$ƒ~åzúÕóPõë½’5ßÓi 9!oýšèfŒú5í÷ñM¿úyUýêçUU)Ø“‚~õsàVÚ¼ª~EMµEýêGSl&m¬ŸlÕW4÷O°ŒGˆÑº¬ÅçÄÒÐø¥Á›_ŽÆ/§6_Þñ|Á/~é/v}sûÉý–sô€¬(çüíãÔ¬Œv土KU0™žà(ç|×UÎyʲœó—±Ê¹D ‰rΧ®rNмOKý–s–ÌëìX{Qƒ7ˆÚkƒÐI/ƒÐ$ö `ú™þýׄ΅¢óÝÿ£þ¾ò‹À ^òûyùTñø§ð({5Žâ©Ï]ý‰Ü¥‡²Y—XÉïåf+÷¤ºêš?}¹'íçÀ¹™úGKÁÙ +–Eù¡ñþ­ä—–pbk+wZõ@ÐßüµƒéÙAÙï˜?dúà6”LË;4î%’ƒX×SOÓÀ(ƒ®Ö)wrK¼²ta»&üÐýÁ2¾"©6ôòê²²”½çÀeÔx¨PZÛ{"XÅM ÐPVv1Nø;ïƒðkÅùl’gÉrš“Òîä;eròÚ2‡Z*œä©ñ×íIâÅ$3ã:362$ óIæÔ~Ìv±È·òÜnõ(ïl6íqgŸâIŽï>"˜ÇR5w,bâÎ0c•rƒÒH7àôC-äÿ8¯’,×R8¯½Ô; ÍžœûŸþPGsít½óg™q±Ô† h¡oåæt€Mr yÆmNY6š7„‹úPgÉæb¬Õ+im…þ>DZòna¿)¼pö50V†n=Òø‹Â+¢7Ú>fs¿©d ,FÑÀ?Ž:XÿdŽ ›ÅÙ<3ä3ãú§½3þ Pia~°„åGÁY’4Š*ñ·ú'(-Œ #G$H ¾CifÉe“€\1ÄE³îŸó(RŸx\“P;Ø +ä±OÖÑ«þ¼–}RaêI[a^'y’?L³îgªjðŸCêuÉ#4¥3^ÿ½¦!ÃÆÝüË^xžKÑG6ˆ±°ûÈ -Ý4¥­/ä¥Hí—½¯]n™¬Cç­ËŸ3?ÙU¤òxgíödgÈÉnÙ[jëCÒfMZN.yï<¤´ýÕ:p–êZ˜5`ˆG-¤ëè1ƒM–…AúCG¬FCüHl}=ˆ-ì&v] yP—A2Ѷ*Cõœ˜Žúw©ÐÝ%ÿ9Q×gê Êâç%4XZ#uMC¶L9K.£øRи/«ß†>R•¶’â™næíBPøM^îdy†9qåÙBtUx†N}çc%ô™Ï.8çõvò99’V°[éƒ,þ-Ž41—¡{Ó&Ÿq{h¨;V»ë1‰WsòÏ6¥D²é·NêŽ0 Û*ÌCú(ÉP} W¤/¢î¢ßæ½€‰‘]͈M¼)˜ˆö;-=Ê›PJZÅúF).yˆÙ(Æoná­-xXêh¹Žì‰‹ _qsz;šEò9¥muG¥_É4öi=Φif1ì†e¤å¯=\p8ö>Ëv^¯h$2Ë=ÚÊ´´‡ŸÑA’-Œ÷Ù\»®‚6²—Í¢á?  ƒÌ^âçúhÅÝ•çrLöåA¢PÍ-œ—_Ÿy¢…£€ogmøß3Hº™Òƒ8ԭᣌ;B£«euä‰V9r·Ÿ8¶‰b§³kæ¾² Ë+‘¿–´Ÿínb­¶UÜMz²ÝLÜÛ!ûk+~s¸íÜå(·4F«Žî2&ô—8[z”ñ.XÐf³ t0ÅÙ^ÖÙ6kp𦩚«³Y £EÍÉ©8Z†q8_A"RÝ#öâ×?·Ÿp¯¿m£›Ùo¾¦$‹É/™±>îl8  +y@©¸H=ó€’¬Y•Ëæ§ ;©ET#äÎñ–Êd.?{œüv¨…=x<}ÅÚ3@ßÂ+ÖîgAKYg=­ã +¿@}‘ð :GLý¸ð-ü‡‡"ö úx›g™éË`—‘TžÛÝú<0Çd­’";Aαû\0F¼ìÂÄþ}鿹ËÒ·¸kŠ þSˆ\2æ#ìö­É’¦!d™ݳ10„} =…¢Òö³À—‚&ì–½ÿd5Ñ¿kö…d'£ÌI|.YF·]Yu\¬)4…´m93S€Jnê„MAÎ&À>CP`ìÿùLlz`Ï~;&p“cÆI¨öHcòµÅ%³PªÍ5UÁßÒ„.òEd’ýÜž¹ +zJ˜3ç 2_¶¸ûE´?7P C7±õÙÇ:ö» €yšú9Áâ øuZ­.=¾PÌyXD=^÷$â?˜â¬Æ¬™ÿ(˜Tþ4$×Vé=p/¸Ì¼Á!uwñ« -Ù(UȺºˆÉ¹ͺ+ÈKúêê°ò›®.yî‹&Vp¦D6w¼,Åíë•Úõýç±¾ô3¥3:¿ÕTìRº¿Ÿãóä? D‹ƒZÌ^òœá'òð§<¥Þ²ú®¨¿P•¶—&¢s¦AÚ + +}P›:Îa;H¡D)9Ø{Lô‰ÇÁ1ªVýf2‰\?'ŒÔ3›Ð—»ƒýzïÔ` )‰24—g£Ô¤^ñ–„¡\µé6Ì.¡°RÓ‚¡Ôá¡Î¢xsžMp€4‹7†|8ÙH˜=lÚ‹Xç” œ.SÜnï8@însV.Íç@“zÀQ;µ8÷ÔüAWT]&Ovš£¤Ì’ {áç±h‡MLCH9o‡v+žÌÕm5¤¡#Ùl=œƒ+¦ƒ#žŒ)@qò…سõ‰÷VúEæ· ¼ÉüÕR÷:t´Þz¿‹}×û€¹m½oÿ.½¿,}UÈU­|hMò9©^[Ÿ-ª*ðøM„ ?³fáô:M’­'_ȉäX.r§ô/ªŒÄIlMú“j(€©&O9’á ¹$,\— (ŠœjdEý Ò£²Œ^üs‰ßT©Õd8@UëÜàPõ°-2~zlÖMÆiÈ¥¹¶ `AF¢ºïpýA¦Ü=鳨qž¾‘ÜÃhxxÖçtñÚ4êÜÇYû’ø‡Õ¾4ðŠÅã~QÜ©¸[ÄX Ý_ÜK é]<îÂ¥oÐâ~$½€kR‡à–óäÞØÊ²?zä ZèYÔn\T<ú<þÐ}‹lÓ[ì7¥¿^IŠØÏ#Ôa¼SíÑŠ a»ý”W·µe7 Ì·Šm@{èMÊ¥"”ìOÔ !ò¹¯dÍ\>8ÀÌß*¬˜¿Ì,D=FÙ½Pš:Wçq–¾º^'--{b˜­-… +„a¦Jº:ý·æå”Ц®™±›þQƒîì;í~Û)9N‡Xß÷žWÈßðž!sGðÞ üÖå=¢g^Þ³P§¸½çµR¼çµ§”‡Nï·÷8êí=qŸj.Þ{‹ýöž´°ÝÞ[ÎbÛ9Òóí=)ÆqzOºK>¼']9ßÞ“Àx{Oëí=iÃ1Òi3­ +ˆÛ=õžoêŽÉ6o:Å]÷Å+¬KãæÀØn^ P°ó,\Ó£æjñ + ~rñ +`­7¯Œ¯Ë›W´Y¼y_¼:¢^¼²û튞“,ˆ7Þ²ö)þ,C;çiŸh:4ljŸ¿̰Oî7¢EÐèØ)]kDÌ4Ø®HâG‡7”À€?B´Ò´|öج4µOŸ†€íÅ27ØÐÊÏ1D>ý<ª˜{ªæ®V‡@xæj­{O’¼|:š‡­,‰Péª5$¶O¸[{¥#2öézÍAÐ~>Ù>¹J¸|y>?€LoæEõùÛQúüË4¨•Ø­Rã?§Oß,·ô¤ÖØF5¨K –‡Z#„º«µ^qíB'jµÜ¨]¡qÛìj*Y….ˆ®úRhÜϽ(-t‡èªœÑ ö2 ;cç}´^0“º«¬IwÁX^ÖoõÅÍÔÜÏúŽ_U‰úM,FG}×êå1WÓ¯R$J5ÝNQîü& jƒÆtdõÅ·Ì×Ç6}h}&$*ЬÑìŒ\_’'«3³,K..”€ëË*F“ °£¾¢“VÕDJyåXì&°òE!mê^9kZ¼· —·’ŽÜjÔØ#¬“í~ˆ4¬nË»rîb±*¼”ïQé›§ +ìÓ_Då}þbPHl hލ¬½Ö*ˆWíd°îÚ5Ž·ïJè#Ä]ó¦Ož6+«æMɰ¶•Ò¦œ¦Xú…Ó.@…֪ŠPh °­–@ 3 àÈ{O¡uƳŽ{¥ÐàždM™‡Ÿß>x´ê¶Jo×$BíçÂlW ’/ÏËÐhF”ü¤]²žÃT¾]²‚HÚW»d9IM¸vÉNwí¡KWô¬1š®­Ðv0¡¾]XgÙ·K^fk¾]2Ø‘Pk—¬^F‰]„ön—î‚»]2áT¬9º`>µËNidÏÓYB¸Ó 0¶;C¿ÓI Qie”Àyg`ªwF–|g`‹wFöº’¤âb¡ÝI˜ðRË‘Tê™íNêjð.ßò9—”V/ÜÙVd÷XÔúY‚’ÁõÐWkZØ,ƒ×и¡ÝòÊÝöÚe+ñ8aÖ^ÈÞAí¾œJhø_ØpÃp.UÐ‹Þµç£æ}¬ûœçª—šË¯z¢Š£ª äëÞI¯!Ž|Fˆ·È7t¢XcwãE/±õyˆ^aoò!ziK69^ôNòžbw¢wÇîDï¾¥½Üˆsœ‡èÝ!}CôÒüE/}«’/•³„€Ù^lñAÏEŠX³´>jÞIõz&xiv†Ñò!xZ³6ÁK£$Ti£ÑM·>TŠªo»Y›à¥·ë!xy†âa‚—V²Âñ‚—À–bÝ‚—'`iù¼;l'x÷àeÅ0ëÜ‚w󹃓8IÔj{¨,YœúMŠb +¬Ê&êÎÇ"E’k§¶W–Ì~Ð?Õv|?”(l#]y‰˜™Ô«?±qsW£”ÅG&©¢ÎI¿Ž»Â¹# +§“NcYîàQ%<ÞBcTaMÂ'´ÂÚŨ£Jà ¾bÁ#÷‡^ëʼ Æjñ²9¦€ }Œ•5¥³¥tâ…ÓkLY³÷Å` ½ àNßÄ­¨†¡!µåLd*ãK]wp+Sß íÓºNç)Û'pTꂚÀÀO5þ¹6¼¿/!@p5vXØH"Ùœ›¿fÄÛå „QGðUÓ¢1Žr/‚|h|@«;œK¬zª"±Jiºeèœ÷0܆c$¾ÈtW¾ª ñM&|;I½sv™}gL<R61ÆTÃa06×w¸»ìóSÅ,gM™*+§kŽUƒNÕµ/ íÓ¨_ øSV¹ýÐEGŽ粸Ù4U$=w³öÙ»YO7{­Up©EïfÓR•ßr³Gˆn–6³½ !Žn`‹›¥XÜ»7ëÜn–Àî;:w…ÖÝn§G÷ÅÍLntˆ›XÜû7 °»85x(«r»Yd!ÂVÖ•ÁÅ3Dï“êÃí°6Ùt®«Ëk–oÚÒ¹ûÚ£çþR›mð味ë^hóGø¢ ±Uº››ª» EmWGbGx5!q„WÙv7!v`WGxw!v„wbGxw! þêBrͳ ‰#<ÚÄS¾åñ(Äøœ²‘“ ŠÚ±4übpV[$õ[\`¡ÁI¯+°hØÎX¤Ed.Òkå4ŠaM·ŒP¿MÁ6tË0JQ¬†µ0HžÌUω¿ë×aEY åç(rÕÃwèHUÑŸË%ÿØYé,~=¢±hBÃÏøóß~ø¿ŸkÂ]I­¶›Cò»¿þüAk2Q§-–@)fÖ6“ ùy?·D1)¶î1(B,®È^ÌžqQiöDÖ‚'Ã-:¬ŠÔ™tïì ÚB8B`òxŽe RÇåöJŸGcË®ÍgDǧPˆ¾´Q_ª²Ñ¸›#1ÚôiÚgÐŒÀ ]l€ +Fñ…Y™4G¹¬³X@S§>Æé{Ó4I«G²u¯Í].‚f±"ª=Ⱥêâ\Ñ£+,yènж”ì„òô¶øŠ{œPÉî&<Õ!qƒ‹ÔWr¹¬™ÿNÒbƒ êÑ’È€Hí=ÞꨲºiÝ(½€J‚üØùm¤àU”úÍEhˆ‹Î0‹l\1 &Ñ7Ú—Ý·ÞOìüxè{†bœŒ +°ÐDV•“Ѩ¤Š‚JK\¤6u-vôÐí•$ #Qƒ$#I"%¹È¾h–£…µ¶4[j]ûæ¸Nk¬Á…ˆë…# ­å¨ô<ÃÎ[jÈš¹ñïgž WJ¿ÐÙÙF?¦Œ›í0™»•"î8åæ 6æH³ŸÆB1îy

ŠÜöb©K’f€¹ 7)ÍáÉÒyo¹K—0ŽÓ¬W™Ñlbíëø1eOô›!oQØ$­pHJž¸„æ!ÅCJ½ä•ξö(‹íJ2¦BÊ<¿6–.†€f@’kA+”UO "D2°‚ö!P—IМ–•ØúÔ{Å"i©Ñ2uWåFs]„õƒë]OxN?{ DêùÀC £?ðèTf8Ž‹´Jß‹c Ð>׌tzX\3Å›XkÏìƒ~¸á´0~ƒ¤Øý€–ö@?Ë‘QO‘ÿG;ýÑ;Ê!|HY}™F9ºTY¨ñƒŒ]Ê#€uØ3Z”£¼¶'KgX/{ïzñÍ•ÓñJ_Ÿð W¬í$ \ÖË4²Q.²DäÈf2¢ëŒh´g_¬2®­ÃѨÊÙè·¸F/¢>p w +Ö+ŒnO*r£¯è&Öàÿ‚*kÎÅHã•NüñjGs4Iþœb.Pýåûq‚õg±N•³÷76x$’Z­¶ºâGd$\†{Ô19”Žb'«K+ïÆ1†/—„ã@ß í|Zݾ¥J;=Û[šQã<à1é]șÅu±“}l×ì½TºD¿Ão˜²ç~”rŧ:º st—nèÆÈ(V–j(öº©(w…E»žêȶ‡‚jHCÇ…ñG,Òýþë¦_í>Ž:')‹Wû É@£}f凑5‰uæN»ÕÊ*jgʰÏúgQÇßÁ^Wì#ÿzš^Õ‘| +l¸ E#EªF$pâGø›™Ÿ©ãB>6Ül¢‘"X%曉¨å#ÔóãêiŽäSà$ÀÍ))Ruë4?5®oÙ4@Ý—„ìkàdØMëÁTÁ*v‡²s}@¬fÝL^³¯˜a7±S«®™æ=î=3lt™¦É¿¿hq=ÌúaF _'ÍÀçšk›&º}í‰4è‹]…¢¹pÑÚÜ–q=¶¶;n’섳Ó'=à9öêe–qËÏ =é‡Al]|>”°y(Ÿ¦FàΤ¿ñ¨ÃÄц óÃê.1Ç—ÞÙåll=Uâ4+nRå>idq0IBîAsIB‘Ð…Z—ª‹–#g±,˯Þ+®B`ÊnéKî³÷º$ÙùP2ŸùWÎ!œiÊáÚþëÕ2ý‰ín?T~¡èê˜î›!Fid6ÜUXÚ€!…GŒžèç’õi^óEƒ¼Ë$Qè"T ?ŒêîX(µ‰ç.Bg>¶RÕ‚Ê»$tæå¶•¾Ð쇃Õý± Àœ|B7ÍÅì·èC´t³åw)hÝç4yæ‚Nã‹ ïc»e¡‰·@8J:䯂jÊÔAõ@ÎéMÇ‘¼ßÄ™${†g º[D†ƒ,Ž­Åy°Ì^A&Ãç “Óç êð†ž ]ÏAåïàMá1¼@{:§;yì]ùŽí o@"üÛÛ—k ÆCšdk;óÊYì°# ãÒ Ï¨Z(¢?Œ¦EhчB(\4A@Ú/À´%¢ÒÞ¨ÍMyx1ÓãúN6 ¡¢š€ðš©üÈ0ûñ³Ñ"GèÐ÷/ã›åˆxA„ÿäЕeÜ}¯K š³BkóðTYE s§MŽÐ´~‚0sºBu Ô¬ÁpŽÅ`/§Â}Ã?Ýô1)Ôï¸ÐwiïHaÇÄ7K‰Ðú,f@[#&—˜ж¶n1#ôYÌÈ/×É%f@ñŸ}P³xÓ2»¬éñ dПDžŒ>`2f«ÅùÈe۹Ě™#Ø–&@ã*ªH¼}¦°¯²nò³nêCfâ²®ÒSîÒSîÒSîÒSîÒSNÒ“íÒ“mÒz1ge™Ž!ϺúY¾ÝþuÊÃ÷õ ‰¿pɽF×OájÏY½O6Ýipó›U“Å8ÑeJÆ_¢ýZÌB?ÛŸEÅ–—?7œ¢t^< +|:Ö)P…Tx°"ñIÅñöá“xÉ+~>ԋ좥”¼Ev’¹'j`ò÷ÿþKªÙ1W£ÇÓ[O772ä$?°™ÅVPåtRë™…IÊ9“­ÜæÖaª›Ò&¹_<øHB÷‰•ê™èüÞ ¹8XRJ“Áî)­}ÔÌ`:ã*lИƒvóŸã˜œÎ±g;àJ‹)õ,óB?xú9‘8ÌõÌRFÿ9Û„_“§yý9Õ-jÏCsQrð“„ÖŽi¹O-âß<L•ŠÝì¤Ãì‘ærPž6ì”¶öóÚ­oÞOè5å3È^¤ËÓ+âév¡ðÉ=O‹? B‚ƒ}„Ñ”–"7닪üb ‘A6äÛ‡àšié4ÀŸÄь߸ªû5îãWÊnYZ ^Š4n7tC€m¸¥rGka€–[¤Ã¾+‰_HM 4ïŽõ2Ê0šx4/Ú¾´™sè<@°ÞÎû²ÚeCÓÒy.éŽ0•ÏêµsÛ½úgy*W¥†™ˆ§¡™Ç–†å¢‡¡g%ŸÒ`Zû¬Ôœ¦:×BåB™Ç¯óYL¡í=Sæ1ìMwÙ + ,t«î>[¥•`­ÁrÓ@8’o’‹:!3pâ÷é+~Ej¸‡¤´:ÏC c™ùM»´gñ"®ô­ðS çë‡Á:™@¥jÒbDFIRY‚Êyó×à +ºp¢.­×Nt»†Ià<-rÞ˜O +³W×ý‡#æ­c2£²Ý²¢q5}VÀ˜’ÊfpšÊ=‡iÒnYÐoLþIP->ŸòéWFíO.Û+ÄÕD© ’ʉìe/[гQð‚Õ |Q`ÐX3D »ªGä*+R;©kL +À¼ÐÈ®ôÄÐä·:îÐ`GÝgåhåÓmîY:ƒuºèæ2莸ìrFhï­]¡e!/ïh9 ÇäÓ&ƒTFó£,¹r,öQñ±jáÄŸå€ÑVçÄrμ3 ì°/´¾É1&ðç7Ë1æ)õóù'‚1þpÄãìWñÁ”†=¨Íè°±¹ PéÔIsAE0§ëE—ªó }¯™úÛ£#´ñ»øf´óq„öAã¶ MÜO~ÓjÈ¢NèæK :¶8ïFê/èšâ(ž‘ØbOìfËïZÐ">iQ¤QÄd»™ÎùNŸÞ=§Ç®*¨F§ðÃóyÝ:µåþ&Àu =hy0PégW€&;ÁbL¶üÀ¯“ßmÑ<1*]ãŠ1PÙŠ®Õ"Žq®4…>Åh}Žs¥±ò)ÎWœ,Ô}ˆöW|X¾fÔ…†Ðù´5q¬‡Åzá‘Ò34íMb ,úÖ¢oïM+.¡åPÁ —ç£ @gšå2ÜüÝõJ+ŸœüÇõƒP©ÈG[ Ës<øEí·è”M®[Üï©÷„o¾dâ¦uâêhnCœ¶Ca*´0­é¶¼vVBÑkå +(C%ë~‹>_åÐéå§ S ¹f íÙã5YW•ñŠ@µÂv5Ī×%vÒ=þP™’2¥>à¦p…L«ZßÊþùGÀF= ®¥õš S ‹e9`Nž—>°NBêóÂB9¤î DU G”8ß],cÕrÿ?åÕŽ-Ù s¯âmÀ}ôC¡8÷,ÂÉtâý.ô¤îñôsΛº4BE Š`å>ݵo’çÞ>Ïî]F‰Ž õ»)§ÂËUàÝþ1žÕÁ…ânÕ1Îd@!Ù<˜-%*eûEfVA*»­­&ˆMÑšs¦´'xðÇvZW=¢•¥ Ž.1„çëKÐcÔ±Ã8ðT^if»“gÞî›MŽí•±ÓmDŠ_CHy+ÃE›Çœs_ìW¨éZ~ž\“͈9ÜI3[ŸàÍØ)†ÚRÊ/¹4öÁ¸Á<Öˆ÷³óš«ý¨°¿LÌs{°9#„µ;sÐü:gÛÃ1g:ÆõcÎôœ3ÄçXŽ9èÜüœqÄ¾Ç ½¥Ž@ê5d¸`~>ÂżÆÊcÑÝËRëÓCm±ò̓àñ©„Îÿï‚s~>{Þ%ZgŸhy×6ïø\Û¼ãsmóŽÏ·Í;>ß:ïWØãŽÏ·§§¾;ŸeÝìß'Þ}w¹?P—þŸ +0¦UB]>}~RíXÄ~$L|«{­˜@žó˜%§›ÊRæöó¡,ßFä?ï  óqyK MùòÑ)cW€²("ì—ñ•ÇdÔ Æ¶ÃäØÖ;ƽFè¿¢Õ9¿Ve7é,6­Q—ÞŠLÿ +ŒY@‹¯ƒ Y%Ä2»Ž ¯‚ød7-Ö2ÎIn*œ,äGÅǯ‰í¼Zxìr°‘pÅŽò vøº%¨ ösLYÕˆñ6¨5fXä«§Þ¾Oü’xñ”«û<‰Å88SÂ(ô~Û./#ùø†×¼âøq€²!aÀ_DKDçÛˆµ*'ŸêƒÆ˜ý ¦°Ñ‰öLÄ­ Þþiiu“ hxàÞTbøÇ¯Ö½fHµ Ÿ€ ,re€9›ŒÈ• KJ“»uZY¶àiõÝïþš„qÆ~^ÑL“Qs„dàë +Ö6Ø­ÒY¯6´i˜ß¯CÜBf#ƒ‰ÕÃÓ!ÔM’Æ)?Bö)ÿŠ_Žàéß~û}÷Ÿ«þ± UNí«bð5 ¡þ¡±:'ÿ5NѨ¹HE×Cvà”-¸¡½Ø.t.[çU:–9hø ŒL•<»ce™Í´öïçaxYÛë0F¿¢•<þŒ¡„VY6C~¶;èqE¥ëCFܘ°K´q2úP"¬X1Ìö¾ÀÖ’ÜàhWß=£øùØä&Xäx`¹šKTDç`êV—P°%³”¶#…žÒ{CqT©¡m§‘'YA6eëŠÈO߿ƤEÄ›–#DÂg*w"7x%r»8éIÒDúÆòÑæ>Ò|”6o#£Y5/?j§5+¡{ h©½â©ÖZ°4Tik +–¯™™C¹ Ñ‹Ôp{Ä{¯¹iY:9À ä C©€,amÜ?o6]!=ØõFÆK ‹s™n[ëîN>ëJÞ‘uØÎº£ù³¬ËÝxg½¾<–8ÃÂ}ž×,ÄJÝb qeÖ»ÏÇ`jf¹²~ZÎrùœÝWNϔǦWMæ2ì¨~—Kl_ÓžÝ9šöɺP‘§ë°ÜÍ`l¼9$›"â`†F\`Íþ¡ç Ó銬gϪ’)Õál2x5l±ðÆ£®Ž4Ö£h´ý1ËÏ(BE]2Üà%ÃMÓ!CÊÐýL† ¦œ 6×x×Õ÷w?šÊ˜ôš(†8@ª¤„Ì—`ªf¹XÙÙ,WÿºHo!…æÁƒ:Üœè¦nƒuþJÝyØ¢n[~JÈ0n꺧n³4¿?OB°¦!³QA‘Ù@%¤÷¨,­Ö+~ÞXbQ¥s0˜ºK´b œ³Ò"’ë`>"¤]0ëÑ)¨’h9šEXÐrÌr5é2'6?=“&v½Nµn·\­â´\$.W÷ñg¯gÌLj¹Ñy›_"c6 +Ï¥×f5p½Õ>?β;ÚCgÎWç;Õqéè*!&ÞE°Á«¼µ<õZþ°ÿ)t4Ý¥þŒZÈAh2Äû]I--”s­¸¶1qŸ¶ ô{©zÅ’UÌ"$C^yÝÖKI™€!w¹Å¹¨Ú33ç„¡Zœ¶7†…»­¥Ñ°Ì­ëÐqL:E'Kñ ]øÄš‘OPCʨ ³¦wÁ¥.=¶$µnãþ6ÄËgç}@Qw¡Ÿ¼Qø‰ö‚9t\+ÄÜÒÆâP¨¬Ô xÆ:”ZYa£ÎýU^žb™k¨-µ*#ü<–Ť,.`®æþyœNÅ|&k#îÌ27)5Y[šÔHÊ—‹.Î<øèe³»n õ¢«zÇÔÀ¤æˆÈÀCÁñÁ,' +Ê-Ì(Á© –^ü=¥1¢w¥Üö,«Þ‚þN*aºªê¹\M.ö)aZ)·„Q>ÙøÔ’ . ‹¸+ô ~"á½± g×Ê«°AµÝʰ’U¯µ`"Êi.5æ’[ÀC¹ S5CucP Ö ²“&[Ës© d‡s©sÏ¿M ŽYVʯ†µ»ÊûX¦®ª‹½ga\X±ˆð33Ä#[Ëm‰‡dj /½ZâŽíðæ†eêᮊˆšq|éi¸'³¼’±øˆ2ˆ8ð(*Ÿ8-*Ÿ8•–Oœ*‰‹o,SwQùÌiQùÌ©2ß‚žf-*º:oÁâ\Å‚âwÁϪBí»ØÕ0†pW•gù…¹+vcùçUJ{ÝUU\U­&¾¿û;LàŒ0RešÒ®ÚÄ#·Ì}ʉÑÛë•r€uì‚þÞ1I\)˜ÚKìŠúJΔ#RnÕh)?Âß´½õöGÊ=èTHµÞ)xƒ´áÎŒ{–¶BçZ¯Œ G½^WâŽÐ ü ã°Æ†?FÆÉ£ ¹=¯Uv÷"ICÎkîE/¢òð„‘4íf4Buü¾µ·`ny·»ÅŒÕ|Î%YLæs6l€µ;Ÿ$Îþ '¥"ôvt³œM`îvún.K¬E-Þ>爋]´¹k®Ó <Ô¼U± Ùv›™rÄDY· %öþÀu[ÊŽ›m šbÇ6Q²mSì>PUÌ[Ðgn‹ý]ý™œˆ9PÔ.5éb_†¨´ì\î«Wr±Ä]uº°O´.ùä­õú2ö‚‡Z1?ÏÔbÁR–²Ìšï9öLÍ,—ÖOËùH^>çx!§gŽy$‘Um˲C6.Ÿý‘¿j=»ƒT듆U½1Nn¼¥L'"µÆ;1!}J ¬)4Þk +ÃP²°YKw8løÆzîìU’d…7F€µ¨!õ(,šázz6GÏkö4c<ên“~ÒSùŸ\EîbWC;È•.ø.;¼j÷-è“£eçA× [˜ZM1òUvgΖa“ï²kr]¼]-cƒŸí¿£ðš+V¾÷÷§:ð[&Í-¨ê¤Jª‚9^Ä’gõ0¥!<™åz%óáÔå‚z©©¶K/8*Ó‹ B'å|eD·ÛÀÝz¡5ºõâãTÎß‚›ºC/t +Ž`éÒKÅ“N—^ àFÿq^íÈ™Þ8ð*sßx·Ê¹}'žÄ÷¶A€©<òfRÿø@èÆ#òÅÞ½¼ºÃCÜ×/ø¾ÀWÏ—/ËñE©Á¿ÿ|YK¶ZÀ=!©* ÖÊF ž*œù…e¹¿+@â‚Öy.O|·¼òp­uxI•]ë"TôG6^r­%7Î’Ç8²ÖPÚµœãàuª¡ …ÛÁk)!zÔPJiG"áÿ'«ð+qå_ÿy@Ü+9óX©´O¶0î.aêµàÝæ ÑUðà†Ÿ·T„ˆmk[UYÜiz¼öŽÁ2'­ø{ÜÝí FöÙ˺†=­z¾žiéÙWÃG£b1—#µ4,Î%ªô.öæ@ö‰ûc)Hp'³,8ižØ•%‹%TZ™‹óyúN£Fp¡Æï÷sÒxDçTÃFëéü°#ÿÈ?iAýûÏ_‘¥ üí’¥\²8¿ÿv²ŒAž’”1²´µ„äéM™6M¹UÅ€L—˜Y2زsÀÞ$NJ=|Žul ˜Ï, +°ó™†/{3ŸPê$ÀY̲ åœÏ×´ƒFI”çf)—GxV»\–W‚Ë˾ޘҲE깑ëqûÔÚKzÿL%½ˆ’þ…ôø¼µHzœ³›œŠ(ÍYG@ZS. ë¡ØÜ"ë¡®Ý"ë!/çSX_0q¶Èz;eý +ëýç—õÀR‹¬· ëHûk¾#…N?|¯ÊwúX˜N‰…!øÒ=…éaÎΙŒ•û:à—ñ—Y™Ð˜R‹†e˜¡ºÌ9)×0ÔE`*b¥Ek °Ûá+ŸKæÉ¹jï3^’J}ÎwÇ’˜J‡»;¶¹x¶]© +œÆHT:SÚ[ôº£½ÑÌãAÏvº€xɱ,+Eõä4Ï#N¼i³ Ù{žÇønPõ!x+)Y|>Ê*¾ñù$©ø|:U(.諾D<ŽÚÃÛsŠÚóQrz¶xªö|äU{Ȳ^íùlªö^P´ç?¿Úó¬Qí¡ÂôdÚKßÔ„²ÆÕ^í%¯=é×ÐO(}aPzeŒ÷»s®‡vÜiz^ôn^Àëv…éðâ9éò"€Ì úzÍóçä2/V—ØÃ `ÈkàÀ5 ^àEmD^$¬ƒ#ò"áW³^P…‘7È/^Pxá?¿¼À9uD^€üyü뚌'÷^1^ô¯j2×5–E†¾®lµÊdŽ®žG9¡E-“Éüέzޝkô9–#­Ag| lÍ*óú­V”×a>¹ØŠùäâp,çkËaUw÷ÄÞH‹Áú õå­¿12ëéoU—ÚUW%Å‚P«.U¢ +!0Á*u„Oó£Ö­,áù`™f) +y-¹KŸ<àÐéÕg’?tØÊQ±\(àŠÏõQÒþ¬êR…pTäExg–+ Áö5[kÕÌ”73‹[2‡ ÓÑ FÞª÷Å|OIýI©”2U+&GSÃÖÐŽ–ÍPºÀéqÆ*€«ð±â¤AzÄê¨XýQ*Ö±ÂgÚQ¬8¿ï(V¼½î(VÏ «¦Š4˜;Š4è;Š4¨;ŠÕ'WÅêi b}A«ÿüŠçŒÅ +Æ4>ü_µ0peQ‹:2_µ0!Æ5üéâÄ]´…'ØO×ós0À2ÌR8Ô?pcëV܃:ùQp—‰Â±¹Ú#±¤Ö¯¼SåÕ +¯ðõì‘WVéF!ænŸzäÞ™ìsáÕ@gè‘W pë‘W6Px5é‘WÈGé‘W7I¯^Pxå?¿¼Â9µG^A=¹¯~A§,æK§uéä ÿÿ|¹™ÄJ ÷ýñAý=Gn¬•0<É Ìó Ë6r74€e(Õ ÁÛòÊÀ‰Û3ˆ+i]å)avW’RˆNgÉ3OCæ³–þ³ÆÃâ¸× ys)íäµ” =.¥C½gË\øÞ²ÖÒf|Ï÷ñX<>–&Su~ßü¨¥Ï¤Dè͹tÇ—G¡ )Ç©ÐGN ‚±„”‚€Ï[Ží ‚¼„þ‘fŽÒv>¥ àל­JÜ"ƒKÄ‚€Ê3ÍR +‚·³Ž¹\,L®¼ Ô÷õ-€RŽåÀòö倈9iËõ³‚ð߬¡³Hýýç1ô$rv Õ‰Ö¢­€<\²7ªWüÑÌ ´õ:PÐ;€AY`₞§#¬sÉŽ‰¢0Û^²O‚³ƒï4æ’½“èJ“@@×cäh@´Ë<Š!5Rûš=RÁXu¿GÓÅ ”KBaûºÔçX@¿ˆÆwSY vSY\*¡Ó9~ŒŒÉ7—ô`ZG5ȵ—ÓÓ i`^M^HAÍá ìM.®LÀç¹ÉËG¢¾¬s™ͼ{3— õq8‹Yæ„ÒCàšvÑä$'»kÊÝqµÕ.³ä‘øqÙרd\`ž øÇË6† +ú§kÎ<¨ÙE…ã»Dò +±ÃÁê8Xf'n`¹ ÷–r2ÐOœ3a•F€£$c&¡Ö§ Ë0Cu™sRP?%,ð˜7v;-m0OvÉõ 3Ce rÀ—Ç––8ÜåûÀž{¹íNÕ†t}Ö™7£†rH0ÚµÌ f/v´€c¥C˲RäuF?sáht7EC蛿M_Jξô·øxúòè„ØŒ±e9s k}kj%ßuky>ˆÖ§–Bß×’»QðÉmœN¯¤Iò¤p+…Äp!LŠËõQÒþÌÞêΩ.òšÃ`Æ#‘bîkHSÙ¡ÙNfhQKærV~KÉ[å-'„ª¥ J—ª‰[0ÀÑÔ*ËYG6Cé§ Ï®Â—|Ät_þˆÉ{UöyPyŠ‹¦ÅdGõÝ+U!>ª¥ùÑÝ1j¹ò~µäÓ­'ût»†UË§×øŒ +†j r ]aöo) +ïYtâQÔTE™Ñ•äóšÿôűÛ]sW;.ûèšeÓ–a–’úþ—ZàºÞÑs œû”WÛ‘d; +tåZСz°{™öÿw ¢'vjþ*²8A‚Hæ¬a|L +úï5ÔT·¯6Z¤CÃäo¿tè jÓâ :Þ•é*ÎèÑ'Îõ4š2L€¬“Ù=ÅÝ1dã¯gk‡Ì— ów³UË} ¿ßÊæ’­²ç1DvªZÙ9³D­o;ò=~cI=·wýX¦2RÒcà‘CLj¸Œþgˆ¿–’¤Ç¥¼ ïÙ²)½Qæ5iÄûüE:Î ³©mæÒ.ûà[ k8]@’¡·æò,½ì< +íì饠O§ò߃Ú)ø„rlg—ãÛ{H1å¸)!Å-ÇvFŽZ®¡ñ15Zþ1 Fϱ1Ý(ÇvF’zŽílùøM6þ Ï*oæ,Ïà ú‡vÿ'«<ËÌì@úÿ÷±š$žJdîiV.¯­€ ³Ø:¯¨>™Þ'ÇzEð]÷½ï^Ì0ðÚÒà.zS[ Ì>ýÜÀÏòTPiºy*.OØÜ° +õŒ½Ž Ïݱ+¶Æ`$ò.c K½0ˆ÷Nel©ˆgƒDµišñ/¶óÙôµö(Xûõ‰7w@,2ˆ\‹O€+÷Éà(f é:öçsØAµmyÈO«Å)Á##“nÝä–¨Û´¯y&KÍ‘O…yVS(š`¡¾×A0µ£ô¹ÓÏ üLñj¡‘ ’ðá.tý©xásÇâª_éŒÒëÇH–óš0žÇä©NÂÜI K¿†ÎeÎIsŽ1€©’Ø’•‘ö}ðùHÚ>(Úõðµ³áëä§¥sIÍaÌì„ðÚuƒ*­[Ž$$ôµÃh•ÍÁN×WÇ0+v¶€õ&ûL‘EHÂp Ià0ßh•¤%TCÂÃÒa¹)K°ÀÁ{Ïï—nvy÷½ÕC?7ð³žÌ~©GnÆÈ<¸ÿûYŒ}~nð\3wõSô®ó€¥iö OG[ø¨‡¡«`HˆÀݽkêÀ‡u?wàG A­UTr'¤ù¡»IŒÿˬ"ì.‰âkyUÁ4š,6á©TyUïÓ¤î=ùsÈ ¥ñžšë¨òÔ^rÌýú¼ÜÆW¹>o¯ìÓùÄÔl.N,w¼&°:»–§ÙXÚͪûïyD‚/–9zWdæ3o–‹-u +ú°ôs73ó§›g‡À¡è¸õ›ÃIеók2ß›¥Ä­vsg¨õ¦i;/ÀÒÍRr ÕP› ¨3v ̦}Þñ,> î`QCÉ¿ßü0$Ø_À£èa +úôsÁ'­%ÍÎët­¯©3è²d +RǞך.K¦JuŒ{ùêó©BW{jo(|oØÓ <ëY¡êk¶V;Od¥†¤í :œåùN¨Þ…mÎñ­#”Ò\ʈñ–š$çR§–?[Å7Jld4â}>O‡ ™7›FY—wyû}…œåt!IŽ|Õujz~ü`Rè Urì †Þðdt}”5ù +úŠèçþßÞ€zÝ¿Tðroü7ko$N2&ˆþpÊâ‡)9ð„ž¸eèµ5'‰­ó +Hæ€Úy;¬¸æ”M¢nîmý‚7OûÃô‡±8å7ÆŸ¥äjÄ’âR‚¥`l‘C°Ÿkb)h,ƒT·á±…Ö“t‹Fê°)xµiå‰MG§Ü, Ö.>¬ð ‚iÇ'ƒmô­}F1K¢±UÒ¤*©p(|¹ìâ”à‘‘I·DrK”hÚ×Ü]ÙRóDdàSL¥Ðúl,”ò:xL]š¬”~VÊ+µv)«+eJ˾Ãî‰Í»08®ˆåK®Î)J{Š®7í kL¢hXºªK”Y“‰IW×+ùÒÞ#7Ö’–£æÈº,"ö´„U=<ìW\r$˜{ öaʢÎ%!1 ±š­G…2 ¡ÀêcÉÁçVöçÌrdiz¸€ Ý,ž)Ò“}8ŸÍÈWZ%éTÕ8Ç¢{ÈÅOj +Œ,ëÞ3˜Zê•\~F®+[7¹è’ËzÚi]Y»9u.™Á§ÛÓëcö ¿ycòõ0# ww˜­àÞÝÝ]uÚ¾{ó3rsÿ—yÅÝå&@Ry‰Ù“©Ðöux7ƒóhx¨ääÏ—HVrëq«”˜»øTÆâŠèEõy:˜µét>å­’Ú“OŸó¨)ʵ½MÄÒiV]ýÎÔ–¼Såǧ>ƒ^ØÚé^غº#ÒREÀ¸Z𭻦ï±u‡YÝýaŸÔýª ]÷þãmd5دÌr×ôŠW²4¾°œ×»&ž·‘5ÀXZ©»³Ôâ}êìåÓ«÷+ +pÒÒjŠåD¯(>çÚñgÝ« ^ënb0ñòW)ZžÙ pÏ1ÁpŸÑJfh™Kæ’úhG(a”×åÀ¼T—ÒEK¥DÜG²%µƒÌãEÚ V›I‡KÆžú¬'Ë ò¡!ò>W¤á o–[ÑÐÀÏhxµâ¦áp4<7÷úRg +.´šv`šun°u“½çXz3œ$5H™fƒæŒ/OQÉÒr§.s—m"\62ç/  ?L3çû$sWIìÌMŸ¹›%“.!ªulN9Uä¢úÉ&¯SZOê®&³ôêM9ëužìI«xBÖ+õÑñ"S;ð•£2¢ݺ7§ o%ENwÙ˜p––"óh“Çm¯˜ ’]ÖD#^çãdÈ”xSiÔìm'C®ä6ö9~Ò(ôÀÕ¼× =à™¨ ×¼Új^ˆ‡ÞyÉöš÷ßì·Rgë¯æüŒŒ4/lSÚû¶·UÐÉPóúj^ätPš[ÞΩ[<Þ^/øëÑ$º3(·ÌàJfY)IPà.Ò­f+vö†-g³FŸk€ŽïéXéyc°á…_œã„TÆÔSÁÔåù¼€d“Þs¦1Ï.l¬~æ Ò7X‡…Ù µæ“zÎqkµE°¦-€ð9MSE³ï¯©Ï?¯Áʤ«\7“Šcú’¶ø F¸ÌaGiãè©2Hõe."æò$‘ØT»È×+wñy&ÑSØÿˆß1€µ_ŸÏ +€Ìg/[uâÅ,Gâve‘4HÕ\š<p¹ìâ”à‘‘I—ÙrK”lÚ×´•®¦æ‰ÈÀ§ÐÞûžO\ð× ¶E± +RC±À­E±\PÖ¯¥2ÎûTnÚéŽÄ7#Æv¤Žœá3;Å@9) åW8‹È•Øzd Š=àhc=ð‚ÒŽKÚ8§Ò_ô¸S¸â»ªöÀdJa5…¸Ó´-®#.0’ñµóöÏrµ$cöá+?䉢aéf¨.ófžtÐ~¨¦’”š Ð:`KF챯Á»ãñyæ;U,?»ƒ{:ÔdÂg®À>ÌAÆ“ºË;–Åã*[r©Y{´ìSJÑÉ,Û„°³ÓìüˆrÑfŠB —’-ƒp§UÌ2ÔCzx!ràÓ˜×ÁӘΫ.RkLw'kLÜG]rKcºI7ç-9©IFç'm‰ Ì~Û’\[Ê3rÿ÷KÛÜ Lò9ú8Ñõ8” +è Ó°æÂÁK½,ª¥G UÉ,…0\Š sÃóZj}¼O­¤îjžsÛLcmâ,/Ø{xÚÚââeLÛã%0`Zæa R¿†…yã롌 àa nÛf #Q~ÄØÃ?æÓfLsËÌ…|—ÉÿûQø?Ê«;²æ>….`=nàrçãC8Q'¾à  Ë3“IÕø –ÂÆ^笷]ìaÌPà Óg-Ū޷BþÁÓ¶5·âÅ"Ë5´qŸÝ:wd¯“é\ƒ¸¥:‰‹ ©ï³ÝMpul€X¨ô[ÛÙ!‰0`‰È§Ê½åSÃ82‹äqb¡”åÂÑbÙà×YAqˆV-&-P-z-–KR©éu*‰íu¥;L¼·º€Ç%ëy¦ ÆÉèq+u¬M“¶a¥ZÚg/f§T‹‹½UË Jµàó˜ífå‚wrþõ+rrbìr©ÝújxãuÒ£ÐP" »6®¡œY»?ÀÔ†’SÊå”\SþйW$~=;p^ 3jC‹@$;¢³ƒdãQ.Ù½£å²¢ •Ú)¹,Nn[î„•Û`‚¸`*±ŒNÁ‡vÑØÐZT£´žÊ‰Òò]Û ÀZ†Æ7b b(í12þ6Ÿ¹˜ìiÙxoû¤©à(Þ ~hÜÅ‹çq¯‹›¯‹°ï))•rêÔš²×µú¬N]Ü=ˆ¸‹×eòl˜E;W»HQwíº|Xíž Ô®K’Ö®eý×jt~aÖnsµ+„Ù¿¿üƒ3ƒ”ƒH©’òh­ØS5I!¡¿˜¤Ì*ÂÒ@JW\'¸Ox0®b2Ñ͸ ~àH +ãκGÝŒÛÞŒ;%µ7{BÿºR•”NrU¸F7ã\ðüç¡“&]"Ä›.ÆÑgt3Ž>©ÑÍ8zcÜ +ãðy¡“px¦’Lt.~Ęc£ÿù9ÿê'‚±ù×7ÿœ’Ì[⯓d1E#ÙÚ4§l ’¬÷¨Ì“Õ ´7’ÇìyELÝÀÕ> +A´9gã ®Á ,Ú[¶Æ‚ñökTŠIÊ’UP_Q{<Œ‹Œ•h‚£5æäšX^PCä4ê ôOëê8ÚåÍïÄb ,I_íÕ@Ùµ}vœdwQ“ùŒëöÜx°èj+0 +p=ÛÊ¿N÷n+hkÍ$¥­TþdcÒUìy×UA-a¯QkÝÞÖ®€Âìñn*#œä5oö9Lñn* B‰wŸ3ÎXS¹J¼›Šc¡5•”¦â¸©]¥p¬|W h ÜO"ô—«›¤„ÕAªÙH¢öþlv¯°‘ˆÐk"t`2PëÐy-¤òM;I´ézQšUfTD‰ó_•›3ÿÁ–%°G‡¢b¯@E‘<=c‚hÝäÅ:Ja »›b=ö%X§òÃ4€)¤2Á„Äc”3XêhUÀy6Tp['$ÿ]y–™dÈœøŠYFöPKÜóVÚ’j;f4Ö/ï%8_ìóRÑ,2‡I~ÚœA„Væ–)¡Õ¤ãgœDÕýÌ]І;ò­à*þÿBÈ +8$‡_^k×H|k –ÒYއš{üLÄ >ô£Z™òmRÃãœlÄÍ & +`ï!\æAUF Ÿ’U’Ÿ¹ bàO;¥ ¢ ÇéHÚ:y¤L—ùp5É0˜eiì‡ Ðk™’ilI5Köä››¸<»}N‰g—˃3É'‡××oÊ=£/BºàÕ3÷“F3 ó7)áÂCc!»ÐǼô¼” i•µÓ”?Ó/Ú³™ñIûçÃ*Ï&gÆ)+ +“|½L­WÈÞ×K›KØt宕ÑK“Ÿ÷qOÅan3[òó_’ªï5ºß–N2oƒ/ 4 Ö1¤2OŸª{3æ×ˆVlT£^Ë“¤Zƒ› Ë”ÍDžü¥Î[7ʇLóêjc$À’ìÕá7Á9*ݹ™áŒ‹îf5 ¾en¿Z¹s”›)Žja<"‡S «Ì*Hеr\¬{NnÎÓ˃x®q®÷ÆLujò¤@k×[T÷ˆþ{7…˜½Ð8tËYv1X1’€Ø÷Ç7í³g)óÊþåíÅ$&…HÎ!Û_Üë{ˆÜ% +/µl߆èÄé´7ãܶ`Þ³®KͱÊÖúþº'‘¤j§l˜<:lGßNòy–5ç6ßrcbÔ×€Çýª°&§n®wSq®Õ~]E#žRlÕ{“ |ˆ*ˆµOûöÖ‰EòœÙoìKÜYkžj±ƵªéÉ—P )ùŸ_$jËB ê‹o s.’eŒç€ëÁØ)m «HfûPÔ· ,«|8,°Ž0&HÝ@˜§{ø¸s­tƒ82ÊEÀVtRß¼C!5,¸3bN0C"ÛA ån”Ð[}Ä€-/A‰Ð©²ñ®x¿ÝÒèù6²æœévç×£)¯àƒ2ö†3ìè!s…¸$’G&WˆÎŒcltsãbѦ$žÅ`““Øz?bù'iS(¼Ü3Ñ¿GWJ–*œ ’k;l¨éò¼ +å ½zªò-n³*P§aEOÁÆ#r  ±Lhì;€ûBZ‚÷>A+ªŠ%zAT·„\.ÁakDáóv¢Çm0YÊêÙÞ‰"ˆTïÁjª‡i¡Þ|úp”‹L:°mgnœÜN¢Eǧš÷Áòè27s\š +a!­mWå0«eµM;8ûk^ÞC| +fêbeÙ+¶þ ¥AsG^hZl#=Yê²´ßÄÐwbЈўÄH“Õžð²½a(ŸJÃî¼@mºã9xÆQzÈÂ…’íµY¢Þшíbg=Æýy’úgÒE +Ì[­Å^,@WÌþ^£ùÊlÂqöÌl"MÍÎ, þÌléL+ þL+VfëŽê°C]rMƒO®<å“›Æ3³@Ó•YxIõ’*›©‡Æ¼; O+¯ýÌ© úœB©Píð²(ý]ZÅÌ•ÖTϤÂYz&õm¸×¸‘ ƒ|"’˜ž¹ Ú1 eµá1Š_}3¶ˆ¾wr¸4–q7;¶¼?º<ÐMš®‹¿—m§FŠ´6yZYýåmôd5”ÕpÆS0­UÉkL¼Wøg´êŒÃÿVåê‚“rî.m>,ò¤ŸÙæý&)²†¹óÎ+i_H¸•˜U}žJ”(µó‚³±·b~½ ‚ŠØ{[L0p”‘&ÁàÎrÒЕ±uÊ™N±îOÁý©'Gתô«Ã8ÉÀ¡&¿½fDpZ¨ô"i”ê=Ä6”vžUŸŒ?±‰ó~Ú”4`„™Î÷+jsòšh|ò0ªÃŒê ìaâ&+h–¢ˆ.ÛQ‚ÁKP«y”élâKRuf±7ýh¦3·šØ;Œ_2Ñ‚”ÓÇšbPnaÉ‘šiÆc<„ý¼9Zøw)H 5apiN~ÆÅˆþN|8¡u¿Î¿×Âo¿V  Ò¼+WÉc›A±2š‡™FI ©Ä¾ÛC˜­’Q|EÚpêÒ‹!²¯Ü0Ó©’o[A)lÙ>jJ‚æÅ2ÖÐ8Ò jo¦–½hâ´m0/0#ʶwyüõ‡ Rí9yÄL’#¤ÿþó“`cWíµÅì,Á^ŸþøkÚ»†7–ÒjhuL„̆zßJgÎ1š*ŸcV—o@SuÇ·(êdWC?õZÞ + ×~å8€—µlFÞ6 &ëPµLoCæâ] —›¸6b$ÁÌqÖj‘É"ÁÂû# +±½`Á’-´mM½ÐVZ—Iè™a¾ö¥‰Ö‘wXBÖ°„F›JQKŠ›Jwjþc¼J²ëØuØü¯Â°úfOñþ§ E‰ªrü’‘ƒË¢Ø|¢­ŒÑ¬¢ÕöJ_r¼GFv ÿ ++ج‡bÍwê!±Z¼à÷…Ƶ~þš†˜Ù:Îà +2™<ª¾í¢g?ØÕö  +Æ›qÍ[zŽÌ«9aïKäs´¬èYµÌ}˜Uд7|äPxÉ#¶‡^H TÕ„zÄÞšzÙªq'Zºmì£9ŸG4–јE™•ÃxÇcyÖò­Å%»I)á™îœÜa4-V.Æeva:Á9Üç81ªF«›e•Ã_[nÖÞë]&ô´õ¤`r‘*²Þ€¶ö{•ìêi©õÃŒ?÷ù÷1óbO«dQ0Îdµ‰¿ÑGãc¢HÍg‚3‚ôLÍvª“<$wëÄʶè%5Ašë ¨I +–óti\Iü6oêyAja¦Þj{É! +œíµÖR„EMêeGf™)Åýœ…kŽ:›5jÊT˜Ï©C0K‹±†º-»@Ì¡öa¸s°¬“*qàN‚+ÇÕÄIŒåœ"0)ŠmûNÜÅê½ß¬ÙÇiJfרXÐåÄ HZH®§‘`u·†£/¢D²§/жž­?åÕ#lw>Áâ_FÚC²•vk´èËÐ^.÷™ðSìI?–q­n"ÞÐAÜÊûgÆsŽà¾Q:Î 7xUßl.ú[«ÇÀÏc¡»À•:ï‘H›/æˆßЬÒJzÁ蛣RÀ±kF‡&Qy§XðºX ¶·uƒå´æÌ_Q§Qr€D ’s-¾Be"˜ê‘ ýD0O{±é¹F‚ÝÙ¹ŒŸH²U’¹ÙHÎç%DDãâí1är†Õ1DEê/2b}¥}ÿ\¼û}càoݲîàZúÊzáûù#C²ÔmËÔ°Ï-›ø:ÿݲ‰IWÆeÜF5ŧe€ƒÌ—o7 6¸Z:{¥ošý‹¡­¸ÎI/š-,œµ¹T£T™Ì8À,Ëpó }¿Æ@´ÁÜÛV¦ÀPåëëQJ³y£ƒ«ÉEjc©Té©s=ƒSlØ×:ghШYßN_1¬·é¸hÃú\üó¿+B Í÷Ä–A7ƒÝ÷Ì=HÉ{ÉQ:@æÝU‡Ä¢£1ÎÒ‘ãRŘÁ«ÔÌN^ç·Ñèeî{@•²ùkz×ÇߌFê3¨âmô»DÀÌfbrâL²ŒoGd›q6Ŭá#ãìmÈlª)¯³1ðïz› ^˜c’qW«]¨ìŽäðp¾ÆˆòŽRœö®S(´¦Ê„s²ÅýNË´k<‚Ët ¶tW'Ùyi=[‰Í'æteë—íÐe…trÙ×v¨Kô£ÁŽaϸl~êTc£g9¤Ä™ pÍWÔŽÑ)bn3ÌÊÞ >·fbn3Lᓨçe>0íÀöP}j4Àìes¯sšœ­P;9ÆÃÛbÈ/\€ßªcaÑÅrùn?¯XfIUÝÛ]™@Ⲻ%ênÏnôر€ßV|“ì–Θà·F+ken•·_ÕÂä^*K2⪲ÕÄe…RDÑn±ÄÈ\û€Xj¤aÀz´YÈ[Bô¡ †Mì¼7%wÁ åÖ$ؘoK]æ„^šI*m¸ MuþùAJ0Ï{à:sþmºÚ ª¶£›¯#ËÏ©’xäU^ÇkNaÐTGíÅæTФPp;´¹§Îçt@Ìå`[#æU´©PCD0°áIQ öÛC®•ÊH¶ÙÖ´g‚³¸V’lÄ6\'Äz¥?úy—°Wn¨cR-‰ôoh™9ÈK‚Å$¤P™Ž™QÖµ½½0\ "˜›ÔYŒ’®NåÌ1 ÎóG*–•“ŒÿmQÙvõù/ï=e{ÔÄün½ò‚nï ¢âÜ4ëÒ:úôà«:¡ÿ×L¹;ÿ,#È…7â™ôJ¥ º§¹©.w@In2Û@pÏj9ˆÌç€WB}±‘GÀŸGÀj¼^/ £=/8ŒÞÙ³~9ˆàõ‹þk\.Kò7UÁÝTŸäÕ½†?Úó¬˜Æó¬§ÛiÎÎz~œUü<íÜeºà©°Ò‡Y#Š…ï¼"ÚÝu¹ƒ:ó¾‚:еϳ +`ϳj‡æ2é€kž~òãL}¦uß2ºÕ¢HÀa!NUš9ê˜UD²UÀÎ&VÆÁÔÏ­™`B5Â6 +Z™C¯a R£! ¼V>Éôá×0UQÔáÿøH«N2¨Ì;>š3æ)ÀlÕ@ó&"`1óà‡ìù‡dE6.xìò3,Fç>Ð/QÓ åŽyÛ1ãeŠ[]öø·€£+±G¬ý‚“ª³Ù̘_1ŽXo&)úå%3N¥v«LŠõâ°"öÒK‡ úmÌÕ¢_«kô}qÀRs»%á8È‹HîVfˆ2IÀä‰[8:{ÍCÓͤ­d"º`J ÆQ(#‰Y­'+¸ÞÙ‡ë dSÀîbZ”:™kü½(bÅ}2µê¡"jYô=è9IÈççoA¼ôløi³?um² +Z1Tùö:¦4$V‹ªà~YXTD›»} z ¦_09?F#Á‡o˜»F…ÃøüŸÁmí­„’'K³o¾÷ÿ¡|ò3D«§KúynܘT“;â|JmÁ´+pžy’HÜPptea«†ÆxÐL‡æY¼1§º9d›L/Øo]°/”U±çÝPY5-t¹ßm÷,74"üzüžxä½¥UÉ÷£ Ýìjä/ÓMÄùxtù`œw}àhÝÞG$35ñôXÆ é$§V®™)Æ+oQø?ÊRz6ÆhÏĆ V‚m8G2ÐèÖ㪄ÿ-;c%Ü2(îåìäŠW±Îu« ùƒEÕ¦Ào¤r[.1›ÀÃRxÂ?áë.ŶdLÏàìKòd`ÅÄ%`²=/‘¯lpJ?Ÿ…Ÿé¶ŽÌëåÇ?Ç ÅWüÊ2ôŠ4’;GÊr¶#âóZw¸ +ðU²ó9(ÆxÎ ï11úSàcHyÏë—׬çE××Ë0×ÿËxóf†ë×~3ü0f<£¿'ƒ ¸Ü‡æÂyÑS¸ƒ9ßCÁXác€¶!ÃÒZSúâVå:‰ÏûꈤÎ}ü½¾@µ¦Ä’Òfû^e})kÄùhz¨\Ýjàç±pà: +C^ÃcƒFæçy:x» Äœr³ôYp‰›Y@…(Ɇ«¡wµ#Ö¡µ~„£µ*8›v–$ÁÃÈ.naÙHʔ͠[_`¬ú "<Ú*¸‹~Žódð~Ô`zVÉ@®ø‡`ïjù9"->døñ)7Ï[2Ãc-+¨/ÃU\MëãÔL. Ó0T‹øQ[¡˜a‡bDµñˆØ{Éñäþ·”cHï”·Ù?‚Ü•„+öû„ß õbjü0¸rJå1Â&(Ý«I>=‘Ü&alÇ\éi.l2_‚§O:ù;hyÌù+'i°Ø¨`ZŒ•»"’lDu¨ðrmŒQf`ËÐ$Ó?G'öx;+û¦ ¨C‹ó¬ZÄâ~z¤QliïxôêH­ˆEèZ1|4dJ\Žyoª³¸ˆ8”mN-­ÁQ¬}Šájª0ÌmuÌ=7{W‘8–%ý Ôܬ¦šÅ@„ûlágÔÀ9b»@Iû_²ÍÛâ‘m«>ü†…X÷oß±ÀcDËLúžÎJ©<ø‹ÿ§¼J’$Émà½_Qè2î˱MÒA63&Y÷IÈüÿUŽ#¢f¤[•'î 7| ¢î'€ÙÐ4•AÙO+R°ª<† gZS}% +Ù¬‚ÑKx ¤`Ó“£Ö£^£îžô~{ójÉ#ìô˜g(»"îÜdú„‡Ï׌ˆ­m"Ÿ‰Ÿ¬úxRÌÈô3n̺™ŤLØR¨Úí’^ !5Óz¼9fʬ˜±¼ãe´„¬f=Ø)!PãK'+”Xg’¡‡V8Ú´‡!Ÿ¶,ϱé<‘õ´›plÓN^Q7’Oûr¯o;½ ]²£¸’øŸ$Þ©G9Ë0Œ‘6j3Y7š°?D€üŒ ˵M5È…b”vãÁR”ùé’K‹’çYÁ€{t«L·3f3•%Ú—n¶ ]RBÔ…Aps%¡Z0£–ᲉsG”æ­@ÝMÕµˆ]¾G¯©/ÉMHê˜-ZÔjf Ò\ÍF7‡Â|ÑÁœô‰öص=PïÊ +e_k„¢û"?¸TëúwthËÁ„à„‘äuêeûÞ3Ó°Q^#Î#Ð(9hL>Pÿ6š˜[[ŸCÓU±ÄÞh`Ÿ±Ëá9l0‘0#p u¤?2w*§²ÜŽ%­ët»e »ëœ²OÑÒÿZ(ELè%”âE(áGÑЄ# JÍÔ§ ýëÕ‚x„ææ½ý_â=â®ÓƒxÏuìF!ÕÁ1Äd yˇªŽƒtx2I· 0@Xvõ*Àbš¤«xÄÂ×»étĬ[”a °öe9[ReÛ“2¡’ÙA!S™YÎvƒ²3kåuÅ-Ý +3uí`®om‹…¥*(2ÓÓ¤Âm‹ƒM)³µy0é+¸ª®ŽÎF¬©ÖËdNG‡> þå¡ÏO☣A×oždµôôŠŒÔ®þ÷¢ÿ0D— &GCIÇDï·}×ÿ†·™|5€­QÒä-cé²ì‹Ð°a9­˜_ÏËåû¦?©¸õë{¹…m&:Ͱè^ΗE÷§¦‚i!C?*6iþúLÍš2®‚_g bÉâZHæW<ÐTtó¬U! O{$U„‘ºÊ;4*0¿òfý¶åÙÔߌ†õ. *iTÃàe +.—3 —ì±Ì^Õ®W=×B®èV½·ÜŒ±• ¨IyÁ Û¡ü/ÌTë…©‹yCÀ¯­Ô¥Ï33 °Ê ÄÝ^ŠÚ޹­ô=@^•8Š,ä}GÀD”tˆ—XX, Ì|ÀFÆîL‡ÃK‚uæ=ú¶‹xVªR{È‚a˹+`Lw«×7Ÿ‡6XónhÇñ +¿zÎùAdl]Yh?¤8±æTü^kUlD ‹^IQ¬« ^ÏŒ0"·$a,+€£>õÒ8e “H (ci¨»4TTZfÔ.È3ÑÎUÏÈ-Å*X«j‡¥®ÁФօL{~+W{¹ñLõšÇ,–“Wž·Ð™tÓ,¨u¶ ÿí&ã¤2‰oü&ò½ ¬MUQèz~Ë„xí\ÿ'WäH¯’°…ñ£«—$Ë]¡'º ¬j…±lꌽY ¬¥FÆ\ˆ8k[‚%]2 µòÂbÁ”",-[Òµu¥FnÈ{æ‰u|s~‹ì$ÒÜtÆT‘HFÜÅnåù¢*І˜võ¬Ê›#lH 'Ý3Ò™Ÿ½„¡ÿ3ŸNš ÕÅÉV%“HµjŒ¾Ì1úË|A_ ÷™Hd-žÇÚyÚÓ)¬0Nç@QŽqµT Š@-·ÇîÈï14î%B¡­™[ùp„·ÂëÍþУt)¬X!)ˆ°0l{á 8&};¤°ÀÀfø¤½¬o+â|²±ÄíkE!±U¦'°×±––¢¬;fÚëôÜu7Ìî ßâav$Ÿö˥ΡÝ&ß$Ýú5w¢˜÷\ù^¿´׊v¨'&‚xW©ïB}ØYOš._lêR¦=\'09rw…0s¿ƒwмN`±Ñ\ÖëÂrbgª—z˜'a:€ Ë›Y „åplŒË¶Q”˜ r7h1V|£§Év}‡§!S +äØ}5L/„FW&\ú2“¬n™Ì[ª4êA¦ä¦™ìXˆð)ü®¡¢»¡&aÙž0\ÃYÛwÙâB³SAÆ€ +•QŽ@a“ÍG©èY<£õýb¡S;Úõ»‘Ì[i™ïÔ[ZxL¨ ae¬P@²àŸL¤ &I°³¡Eñ§ÎP\qëúp¦˜¹¤S·txä$uÖgrù2*'©%=î̸ +Á(7ìË‚²ò¸´Ø†Qt\¿¾¶óM^˜Íagsfbñé3é†à3¦MàÍ•Fæ!>P£V( «î^y~ýë÷¿ÿãç?~ýöñïŸÿüãÇÏÿl5·œAqD¦Zú*%ãî7Р§”h'¤H¸Žz4`<¬½Û!”“Ù‰Ç×Äáö)Öñé¬:ßÞ³G vFëÊ;¡•d{ÍEHh:#r+e #D[Rð]ÉâéJ¯#ÈâJ´Ñ&€´mè}zQÆÛ¨˜B¢¦Ûí{]‘º{vzlÐ?åt ÿº ZxRBUSEÚâý˜…^ŽÁd½œ’T<^-ãÙï=y<̖dz¥*ê”Ï~ªÕÚùtZÓyÒ{Aþ’æÐC•ˆàè!@ýì¡}êê!5r=$Þ{èz‡×ìè’é÷±Q3 šü„Z»Ë@LUÛöB¬ÍÐõÉajzÒ`Å.“”QýÁŸÃ²Μ­ù–_*\>û'Ñ–a†«<@C´–l¶äîz”ëkÓþ6÷[Ÿ$RÆ·žÒtV±fŸy#ñá +ÌÔxŽ?Ô"6ñyLÄ_÷‰ˆ¿ÚÙÍO1 Ë©÷±Qï#†õ¢ÝhŒ™6…›íB/ç¡©îŒ*OÜ‹i¼­·GýqÎ퉎;Ýá°4 ]ãJCX}à¬Ü¼‚Ç~ŸW—z‘ú©5QõÂX ¢nçf[Ùp\Çó|îë}õù 6H»Îk>7èlÇü O QàN&„N®×\Î }]¨“YrBPÅ~Ì/ i%² gƒúé'@ŠJRöqx&ˆ¡Æ#07kö\ª2À‰ WVÄš9´—‡W”Aë ùBœ¤èõzZC.¨òe°%{þA/°È\ÇÿÜF†ìñæ>T†rþѵf&a$êvEV´mAÚ÷r­UçÍ£íâ°Ñªq=·¯'báaŠçq×Ü_¹llÿ.o†OïŠÖWá^/*cCG“˜Þß  ëÿÅxuÁòØoØæêÀÍ€ëºq À|òÎýܣǂ 7þÃuJ:¸¥¯Ч|#?€}¯þË÷vN°õƒõ(á:1d³¤’—¹ÏŠ éÌ:á¦äô¡äJÛ\ÔåM>ÃÚ£YkŒf„ +2éÕ…p©Ñ3%mWotÊ îœu7C)Ì[tâhÜÓE—4:üÖ6]ö³ðÀÞKí$]>’4$Œ %ÊhÝŸ>6€±•Ñåsåa€ )’€SRŸ ®P“X¢%Ìg³Ðé ¢¶,SꜪ¶ëŒî‰5ËŽÓ‚Ç›‹Ú#ûš a}Þj}§ßų +ò˜RWð¨Î×ÜUÇ~>ªmà¥à‡­™6УàIî)¯’ËŽ¸×)úÝÈyXJ² °-|†þ÷ß:8&óýªvkWŸÉ™ÁŸIx´îƒœZM2MNØŠÏ·s$zy*,çj[H8~o /rË­ï*°„ÃðPšðâ¤2$¼Ðþ|&ŒfëëÇGÄç‘íþ`OÌ ¢JÑ„M{}ùjaM_05‹—:ÚäÀ ,¦IŸ0Š~n ÞS`þ\E-Y%-™;µ˜"”8,`° “\=ú”Ü«ýÜt"ð³é,+æ¾’ê\UL8'3¸‘²ƒ&¹±¬ t˜òx¨Éëƒ +Á……¨å§ä˜sé0ÍîQG4³š´M²±ÔN,lÕ)¡“€$ç5ËpßûMçÄðxÖ=–€£šääZÐßiIµ„ÍC|oeéç+‹ˆR]£þlm`‰{mt« „¢ÚÏà=‹G;–ͱÏRO4dLAl 1É@Ǻc2±zQÉRC4'ùÆ¢Ë}hÄ‘%* IB5}sÛàuIl¦Ô¥Š—Q–®ê6¢.ÊS²œJ?:áŒè<™ˆFyíuNÂWËM>ÏxV¯Ð[™1ÄæœÄ(¹‚c™zó¦yRÏ5‰€ÑV„¨m'ù0+M˜ÄÈß(5vnU ëÉ¿ì»íÁàLN]p-%—GcÃTuÁ• ;ò°¸ÊÝRïæ¶ø°Ûh·Ø ÊP±ÔÜ[LÀ.ŽÌé’'Vm8¯-käÎ r"FØÓuâßÅØèNÎѶY{öø`‘PqT½²(®…ƒ©z‚S멱íþäFTJöq1pÓÀRvÚ +ÄÔ‚HFÌh á6éGŒ§ö¢&#(·µ‡v̘RË«eIfÏkw›e°F +fí¼mdÃmvbVùš¸æê#bJ5ÁñF†ÿŸ{‡©´kïJ g÷–óΣƒœÄ\Ìsáa[À¼šXŸ™¦ˆÚÄ•Ê`Ñà«ãQFÏ눖#ñ„¸«Röœ¡¾oþðBºäj¦¥ôºÁ±63˜?o¸'âÊ/©‰€°»4ˆ\_ØàŸÉgǘOÒ,s …°µ|…gºžÚÐín’ØmBøÔ2Dc í ZÊ{iBƒˆiØ·£*e)TD]ó(Çí`ÛVCŒéK©^¡Õ`ÆÌžôÌÉÍžv³1é{ðî{ 1Àœd!GÐŒùä™Èvafž6™Ñ®´ãWlÚoöë‹°1ÁîFʶ]¢žWÀ2žk©ò’q•qyÖIXR‹wÓeœ¥{ÂãÊm’‰Òˆ²BSà(Ô×ß ,•§=’I’ÁÚ—JºuHK&bA_/¡÷À†„`¯®rtnGr£»JÛ)åé’88–8œŠ¿SF§±‘¶©Kší‰ö/×`ð2¡ýó”R‹)8Å´ü&ÌínLx&|~0j +VÒ p¶™m?.·QO'Ò’º‹Hv<étvf¦ž·¤r\€ki¥û=E¯§UÚìyÌ|1W€(‹n×MBÚ9–ŠIœ9÷MA’v§ ×Ùw¾ïÒCrÚ9uîCÐÏëûƒÇÎmÇAôhQ)ÿÝ€œxR”gäÁMÒrDûdû…è&¹dÌ»G)VH;æ³–~²2©›¬2ç{e.´X“âÇÀb—xß2É2Sº¯€5¬^§¾j8,ï›&S¥Ýà$¶ÑÅI ¹Ô¾UñÇ&RMHœ°Îp!Ö™°¸Ø‹°½©ã£NžŠ·¤b´EEòh‹èöõçgÝ?3g:ÔÎßmØâ-ôÌJßšÝeXd™ˆ3°jg8r'f LŽì¶>îÿWÕMMJ¦áºhäíÙ«<è€á°Í•‡µ±²ü~†v]`tvûTÚÛ„à>pDôd]ˆŒåMœØÚŽ%æbÏíƒá˜!âµäܺ÷·uĶìªg¸{ô¬SœüãÛh&Ø€óáÎȯOJ±D#‰t7Î Â6ÒÒÿy;ãʨt‡¸&–ª˜«å]´fEG÷>YÌDpi +]†åCÃ2¹ðQ!ìÚrë&Ö„=%ç’Gc }ð±e˜1 †ë6Í"Æ'3'R4iS¿Û̯€¡‡¸Ú6Åd#šc¼°\†uš}KäŠdXcV ¦Ø·y0ÄÁ1æ„Àjr¬2+–»¿‘&Qðlh2ïw›©üô]÷­Ð%'ßcRÂ~lyKóûðÒ¶Ÿ™Jäb†…ƒŠ’Ÿ^§Ùળf2 +ÔØ@ª¨x“þ`;Э2„ZElñÇ£ðøGjˆL<ê¡6ûìVv–F$ røý‚¾´ZÔö3vM$°ÒñpU(Þ¢©ˆ_;ûÊŽTQ¼À0fæ–{V Šå@4Ã:fxq±F zœ[vD“’ŸØuTÿâÀT¬f]Æ  Ýä°Þõ²+ á~ÒSzÅâUÑñÒ£„²X'Ž}ÿ%Dk'@ÇŽO Fãb  kîìRÄè þ…É4©àøÎ+eÌ–4ú%a?µ´©Á¬™®Ï–6z©¬=ŽÔ‹ >áb˺έ[P1š Ò˜¢ ½_ÞVĺóëGÄâ¬k°¯‡.x³~Ä»ò–T,êóc‚ ˆi°‘¸p¾t°HÈ;…qüÇ_¿þëë¯ÿè8S~ûç¿ÿûå?üõõ7µ·Ð·¾å›J ˜É¡Âa2*œ[÷1X@˜ÈÌó jI;YÌóÒf³AØa“¡]ôÿRåÃ),ïEËúýÿänÓWs= c:u' tAi”î½M îød‚Åy›;P½ª> +T°ñ@þBšz2mJL9líFYz5ykÊÔÎkPFóÂõPOdðÑÜÔ[ôîJä¾ÃIÊß$Ê­f޾ ž0È‚> ¯Â1 KïêÕ´õµ‘(ÓœûU…ì ÓæÿƒœöS"ôÿ¼Š(>Ö¥‹Mç—ÒABrKÔÓôïÇžÁîŽÉ?‚ß°̾Æ: "!€&uE¡§;ÐÐÖìv ´h¦ÍÅСő]C\Âuˆ«¥hû”š9œƒ ¡ ÃÞÑÏ» =\bM¸éjfOН$ÄüóРÙèûwm½Ð=r= hFË:Ý2oö4øj߆ Ø !tÁ”c59äâ™4Îd+*v‰Û¯Pù­†2ÿ?Rç2G×é¶:tñÄÑœëôò>£™ÐV µéLèx›ÎQ6ôÐ4 •¬üó5£kû–Ò§Ph|»#&Xs&5¡ûmRƒ—lÙ°´aeϰŽþœyýQônc¯‘]–OË  ì9IMË´À‰rGPéoQ.ËÈ4[®ýfk-ºen½à1M#c$2¿g†Ž¥¸2ÍÕàRHBپƂlM÷­P¿_rV¥[ tõ÷èÙà½êŒµ¨Çp cÜ ’¬•0K½1j5š·—H(§‚xC¡6+M°h@gæ ö¶ŒÜo!Î8!ó»,x|³l‚ *:¾¥ýf‘êu8ƒÂ¢ ßB·M¯ðÎ@—)”Ó[Daü5»áâ|¯w %?ÔÏx'Ö/Иoã'6rYÃCløá\ ÔhZš¡ØàIadÕÖY­üZ;¡yD iMݳ•µa^Œ®v¤„jôïk!ÍçÏ ;ö‘f@Ó“?Íî„:ïndÝüãÕ®cYnóþŠ í`zS +mØpjØóŒ¾‰ÿ?pEQÒ¹=»ƒIzêòP|³tÑ®ƒ©@ióéî»0LÛj˜ån8x²¢s +V¯ûS]Û+é~Ónt¯¸Ýoh‚cøsma͹ZBô‘u´>Ð/öŸ%^\ è¡ÝCçÜ ûTz†?3Ó‡Þ23Øâ»|Ù‰ÿ"žÂ:¸RŠðD_¢;Ï Þ#”é9䔽¿„›áýÂÀáðÕ!Í{ÓVÛl¥=¼ÓI^ÌÛ¡6fÃœÞ ùrEâEöAÊk~ho›™a­¼]+Ÿ­}ÏÏB¬â×ã¾€ÀËwïì¨ö7o/ÙýÒÚKÇ·þö_|ü†BCRû·€øÏìóZ¾‘I§Á2ˆåøöãõñ§ñçÿýøûü,%£¤' )£ÑŽÂâìYA\…6,µ"}[‘‚™3ù!›¨J¬2q00k +JØ`ÎúÆd®%=Á‹êý9Ǭƒë!¦½Ú× ù›X,QêüºlÓ«®Ô[²õŸ*¥å¤ˆÜCÌU Ñ?6A¬§ä‚­!ÂOkMi‚ˆÚÓH€Ý?O­h€¦ZŠù]F˜Ÿçmù{Øf]àèàž»ë§Sy«‹¬0 +Jë³ÁŒ˜ÝÑX³È–fjÖ†¹3¦á…,Å<£V4ºÄtü©3–›KpÅâP‰NJo¯úý<ÍÜey8´ë·ð¾(.؈o¹ubŽyûëqJ=ì$Ç/£Þ’Ëõ­òˆÑ~üŠæ2óŠû3CÌxáÔK‡—H[G©Çtyþo¢¨á+ ¯ÜJ]ån­,Tüö¿ÿ|œ“Ç $ZË.ÆnL Ìêk~û¯|@®À¡~Ƚ~}€jrX“ï–]à°MõyjsKŒŽ¿k´X¯ÜF'3:ºÑ¨EízU/äÚ-€b4  ´"f]qpÄëm2¦ÈÄK“éK¥²Õ¶f_ìÚ¼ ú[–©2c—2uFã_x­ÚÞI…ÅZfÙŽíRíõíeÿž‹^¤ÉšÃ¤3_g0È;Ú'PøV¼6“ë3ÔW}HÀ€XÍ1·™rÌø‰µÕ‹dÅø1Él5ÅØ!ƒX¯Ýå²î1ð*”zšXîÔG,¦Òòk£B+x兩¤QD€Ó† +Eôø€kqY(­æ:±øòiuä6œNï³°TLŸ œvÜ¥üUl«±$Ò, xuß.dÓùyWžXM“„þûBsI˜ä­ºXÊõ»uýJ ¸ZŒMÌlùI@±M룯»Ià‘ ,ª*‡‘ÙKè†%)ô™Yòv°ÜJ—iyÌö!&ìò&GÃj¨Jµ€a<›\s„¡¯3Û<9¢¿@¶%;·ÍHIôwÍ7v¿‹Ÿƒœaß¶œ©Ð`¾¯®<ÈAÛº0gÊ3Ç|Ý¿Î)šÐ¸£zHâ`@®IÇp!(:3]#04‚b?5Ž2c$ÜÆy®#@ô!U Ãá—Pq!&iÌÞ‹ûÈ͈”›C ­Ÿ¦k%•“µa +q%Ö² R&*Wªc2sžž²±ÈíѹüœKz„ƒcÉM›µèïN߀aA®oCèhœ#ðnË•ŒŸ…õ…j–;œy…ƒ(%šÂÐ##/ 8ÔUTÜ4 %LW‹•+:&ò4aHVKr¸ —œëÆ.àÝ€ÃæJ(cNr§ ƒ•§Xó 0ØŽ³îJà×sÂ$6 +0ôØ,ô pÂÐw1kØ«HÖPXb’KžT6#°”\·ÚÔ7ßXÓ–Ú·\¶ä" …!Ó¾QvîèÏ(à`‹'ö :ÃS0”;Ëå‹ÕX´²ÏÖ^Ø™ŠL&2ÔѺª'+hã8±_`É˰Ž*ÅMÃêÛvá¡”YX\%1Æ;ë«w±5$gU—mçaÝ—v¾07ïìBˆéªV¬‚\ bàÉEÖ6S]kAl!·†}Dl„-—´ Á’ËÖ— ß¡þ-foU¹].521bÅíƒõ’#éoú;T}gaº-öîÆþ¸û¯ð·Ýý¨pp~<Ÿœ}4:;fd[B¨I\tŠåj. ZkåáÂì£SnÕý©Ï§Þ­þmD&4Û c/¹#=®¤Ê0ôQ=_é^}~–æJê)g†Œû[zê˜t—۱ꖊÅj± +u}8ŽºëC4õ·ÿÖú|5~`˦+Ýð·vbqÇEgõµißïÓ«dïÓ¼jþªû´€ŠÆ+ìÀÚˆÎ1,œ jè¼vU¬ïS¸ŸÌß“‡[Øk [ö—ªØùÊåBß|ÅÇá·o/ýœØ\^$kœà˜™3aŽÅJl³eÀÐÞäF³dA®¶qÍÌlžwG­Ãºþì'ò!Ô—œš¯1A …¨5תËá +ìWîù†ZÔÈŽÊtD¼a\µäaÙúèn&‰=Þ%¶zÛǾ…æqÀ¯‡ Õ©nEî‚×ö3ÊÀªÌ²[É8ÅVÒvTvrù,vØ8jà½TžË]^ÞŠoTþÑÑÙ ß?ÿò··åšÉܶàëÀ°šO:PuÚza¤<„`—ïpæA ×àdùØY·)~lŽ1•ƒ˜4ß15ˆŒ¶µz=äb}êÃä©>pì]L(ñ!>Íã ón^,o?¿ˆÀbkIЇŅ6Õº1•ŒäÛrG0}é +lüó~¥][åøÔ±ãkðH¬Þ'&­ÍH{ô15±Œ mCyz'Uñ`BÜÏ{LºÆ¡ŽÙ£Ä~÷â4nc7b ’äþ¶*1|C€žQÈ–€œgÛæR&„kÒç¹èÕ8V¨ K€†E #nlL¬y«z6ËÖ@4”%¢`ÎÓm7J'±JeËçELR˜ÇD$ åë˜>Ù°Ä­0±ªúyt(Å›rUËæÊ$°fÑ>m«R±1 “HF Ç‚,9»/Š^_ó‰–¹vkÉLÎ 4rb¸ææ³ËäªWßüvº¦X^&‡Ô[¶<É4#ûXäMYIÃZ&ô“ô .öš('°cV±†SáëÀ°smÆ›ºÁFô-ýf]âmtY·r_›‡R‹0Î/bBzA,W»’ê÷.¼ ù|±|4°JÎ{7©ÁFÜM +$ë×F– y`¸Ç¤6š¨vÒR–zÀêm,B{˜–0Y“±âg,_b¥Ú·n0öØ¢­îv– Õx†zr†ÿë0kmI Ê#ÉÌÑœdM»Ú1Kíìá[Ò°²ÀR˜íý÷có‹DO—…ïMŽzÈÜPÝ5»šñ–Ø(½³ƒªë†V%Ç0B§œ[Úx +%…‚ç<&ö6ž»XÐNè'z´ë êZŽé]T"p XÉžs\½èY`óƒÏÃdlÈu¾¸kIÏBû¶bÚŸYئœ™ùƒ ¿ç'ÂÜ:ãO1aÂün¬1º³WOÁ^mÒ¯êØŽõRøÓ!‘‚â@z›C$l‰óÂ}mè•“³EŽš[Ò°ô}Q`S—~üpMsü\FùøÁbÏìRjYã ±›KÚã§ 8~øüª¨BB1åæø)°‘ãG‰•"7r…`>~€áèSe>~ +™:c÷ø>aµÿŸò*ÉŽlÕóZEmàסoödïú#$!à:Óö›eÆ E¾“ö`Vé‡í]}­97ýx`Áè@ ý©ÞŽ„›~þ·óèW0s¨îÌèºg"ñ5sVú[º –ŸÄÒàtSøÃFùŽ<£C­ñP(xñ +fa憋‘pÙ¸4j:€Asumîö +V“œP-rBCÙ®g72Î(=)©Æ‡Ù¹ÇMfÇzd˜&†¯-Ï>ÏÅáʆ~ÎemòÕ)ð‚UñŸ;ŽI£ sÍiéXqrñ yA/27çŽArÝ„˜þq‚}ÈÌñ|mþqcnT¿´=ø‘öèÀ¹ê¢âý± ÎAŸ'„)y1ñ['!}nÒ[rY’:ÐÂkä .>TÉ-ÁVTNÍU 8U&zšÉc °lfMU<#¨T…w”Ê3ÁV¤¨:T·,Et` ´!JÕ.†ø̬zX'»×Ðq)ÿŽïãÏÎL®]˜}!Û‘ßvqÚO–%Æ’Óë[pÙÁ¸õyƒxÙV} ]p…r‰í8þ~à¯O?k¿÷ltlØpCf»Ûž{i­“å<üÔqˆs¼vÀ—%Þ(2èˆgè›2Z1›ª³:>”¡6Ö’;Ò´b˜k·^j2Ë5®LÚµïeÏÖevBT!¹3U RËå6œgtgŠ;g ä—??ré^•É Õ’Ÿ=vÙåV„Ï0¡OBÛˆËI[U6øA0å{ׯ·ö;Ÿ1b!%÷X¾¹ »O²2íš ÀâGéÚaS‹ò7k ,¸šÑ@?&ǘ›E>€ÚôæÔGÁ€$®ØÂÚ3DcÌzÉÁ Ý!¸EmÞXûÚ³„2Í2÷uº;Em-o6ç_9jøŸàrÉÛîù’ØS ö·2.]‚½u!ˆÈ‡²uÁ×ßé¿èBñ”_èìðîzèBäsá© S¸t!ÊÐòЀ¨ýC¶ñÔ€==u`8uKÓSèKyêÂéµë‚Çç*@$^ºp8ò]°—T@tý;]Øv³º.,©K³ÆÅ +ÆS%³±ï+–äÁ „/=ßï[]XrÆš­ß4P«Ïm˜.ð¥#uØmâ˜ã²£È»<ƒ“˜iõF#+n¨Õ˜ºIƒÌ·¢É“YŽê–cIƒþM& +®eðdbú3IªZûÓçæ;Bûøs¥£U…nO~# +¶ +×íÐú[QXv˜P“‹Â¡k[6ܳ‰‚3ŸƒÊ|ñÞõw¢°ö$É·¢à¼ +»8ÇlêGWÕ'œWGQ¯«i¢°=æ¯è–:mì±*YïÚòꊭŒÖnVN}>Éòª¢€ GUçáR+‹êQn9};0—• ó¼ 1haàvIÒm9f¹½íbû7rG*&om|Œ øZ+Øiý$Gê&סAïéÀmiXûWÌrïØø&³ÕꜪÂåÕ=ýíè˜G¾ ÒÛù8ò¯R÷†˜¨ ŸçÓÒ0øa–{GNakõk²¢c±ÃdTNÁa<}ó¯B`“aàïÜ­sOb†v\»1©êì׎¯tõ“—/ŽÐ_ë*÷Æ×A3%23WËxN#%+ldÃÖøáv”*@½ç´.z²#†Üs‚m‡7Ùê§8–ÝìZx툑½m1©]M¹”Õßzìò ÀT¤KEŸIIHX`Ë• +Oµôw°ƒ9#¼ÔÓe‚„ê¸þ&ù”#’IB´hûßÇ<ý Tký/ˆ^·ƒJ ß¾,6÷œ$§A¦~ݰPU¥€ÍFjPɿa¯ZаÖJ7»ð!°Z«ŒØ<1ØNà=Û¼¤e&ã·`hîÀpp7£io'`]”øôsÌËÑÇŸ•ˆØgó¿~ü]Ú×Ìy|"Ì„àò»ƒÎ8Ì„ôRèiCÆŽ%C‘††áÞê@b›‘ËË—r¿q³`$ãmºüüÚâJ2yÁ#G$-5žL+/ý(r$°!*%ýG;ÁzhjgŽbˆ$J®—UŲTk +‹®•¹ –Œ¨n¨a$V²cÈD–¥¼ÏêFŠC¬0À-+s7íP+ý˳RØ=Gþݳ$¿¿dáÌÌl}qF³Ù)>ZÚ^jlB›“—qs· ó¾ß?A°$½Ä¥=¦bxà!r¿½R"—°ƒáûá8¥KØv5«nĶ÷+S¶£'¶4IžÙßÓÍJQúo4w¯VmÓì'òýo2¬Rv?ôÌ ý ûª==u52‰=™ØsËž\åeîYíXÞ”@VB/ÚwQ.âz—T?Úß@Íqî¯Âé!¦~`Îë·þÃÔ,öN ¯÷<Ûý«oPGRûíÝ—fOÐóÐ)Ø<×$Íl4Ê3°Ø“t°^ÁËôk8ÔrV³å+0Èj_Q^}ƒB¤Zϲ65¥+büÀŠo§ƒÕ2+‘ïÖN.÷#zj\‹;ÔÝÎ<¦0Dé÷§._;å*pWΚ<:þUv³PGm6ª3»ù˃cR‚0Ó×J!_Ùm½á.‹òô*‡ß +õ’·ˆBm ºÊÐ7ffu:d»!“ hšÊ‚N»ö®ØÔ#Ø0ÊB}bÊ]D`DÊtN#ý$HŸ±†hÌy¬0°ÆËP~¬;'Z¬ŒvMž·8c +·Zö¡Š¥XkÉ€šä‘ A7j½™ÝãÀ;ã>¨ÿÂÞötÊ& +We•ãk[ &'%¨ÚI’“-ÀÄ'a¾ƒ†žÇœÉIˆ›¥´\M ùëÎMbWp/JÆìÅ0äKŒª­Ê¸+šˆ©âNE/Y¶t%ŽYê{H~^Óšáæ w £x;̺s>öCӗΛf§nä=y®*ƒ—Þ]V¢QÛIªô¯ŸÖ=‡¼°2äÁ2ºê]d°<°Ÿë}¹Ñ–ˆ»“lð5I—|]7Í\S-ÑÜ– R"–¼*RòÛ¬4Î/÷vH¶×ÖZ +mÎU^·«Íošï×Ë£ô 2ø~Zz\çÏm7æP»~\‡ú¸²~¤ +ò½ö›…Sâíuw‡î×ᔯՎ–íÐ.-ËRÏ}Wâ(?ƒ˜1¥è±¡îÕÃžŽ¿½„$¯þäq'“„t¤ÿS^.InÞ0ÞÏ)tÙ|?¶q²I•+ Á»”æþÛt$’Ç“òšO ‚@<ä /ÇM¾J=ä Á˜z5ÍЙwùóÕÊ7€«‡|ÓÈò “|s+È·hñ!ßÜ.ò½Baä{·Sùæ—V½×žF½Ù\“QoüoÛ€¨7ƒÛ¬t¯hé6ì÷¥¼]æ“tsc7eª·Œ7‡zÛ3Oõ¶±¥LtU·ª÷ Íï¥HF¼ÁÂ"Þ³½eŠå£‚«úo2wˆ÷n§â½¯§"fólí:É'êfFæ¥x¯ox¯iÛˆ7ì|=ÄÛ°OܸuãI¼1Ð÷pˆ7˜Q³3ÏÝÅ›,íâ½›©ØîË©(s[wˆ7OåñƇÐñ–çÕçpˆ÷:¸ïÝNÅVîöouªV­róyUå õPn0W¬rãž»?”ÛÜýTnšÅC¹¹V7Wiz¼üÖÍ»œï9Ô›wIPviý™oSkE¤Û°ž)y ŠÄÀ:ïoÈîΧëÅ`5O¦+žÏ°Ýô˜ã%¢/ßaxŸöœ½˜áCâEöØŒ/<§Ä‹Ô޳l–{YÞ‚!}P;4×( öQ튛¿-‚®§j“ÕÀŒ"ëeî[]ªÜ×£óäPô·¡Å. öÓœ[íJ˜ûNŸY}êß<Ûã͆¥ûª÷¿ØåËþ“Ò§ +\ñ½'6S|ô>â^r©[¬§Øfn60°›§*[n¶¯ØJÛ0ÚÛ„šÐת++>rW(ù-îa4~PÊEw-R·„±e¹Hº’' h\~ÀµºWNXY](É/½gÉ @›„L –«À¬·~£¢9…èi܈kÆšB•IqIò\ N ›óé‹KÓO=æãm ž£’#4.í%÷ª)à*Ñ„“ÎÑÈ—öºâ`æ#Ç^m´'s‘ãXN^¼ðLߊ4Ky1Lå]~›d a%¡µk^Ô,ÇŠÔ+Ñk…€¹Yó¾DO‰Ø¦YK?Å´›Ö¥I–Ò°[.WäÔØv­¢àÆoÁ0·™¨XW.ö¢àTÓL;Š">6(oÍ£ë>WÜ2KR[ÌfƒÄi©6µ¯â"Ʋ(Õ¶Ú5¨[TT¨üÏ6¸º¥âî¨é§Žø‡ýp= šÈabc`‘™Ý¹"†e¢ä˜nD²*Qðˆ:7š+r£òÄå%ˆ(†¹–+¬, –²Zy™ JžËcŽvbiVÃÕÎ mQÐ8f§2ØR ×ùú €ÌæÀɪsÒˆÇÃȳ·×ˆ¤óìw †š€hƒœ †KC‚u²T¢t+jŸÌ»`h$“-;WºÁµ6ËQr€ûVj +šÂ˜«’>võˆ2µ +«9ÇÛÈsIøQ§>DM3φ™„¡vÂX?†Tñäqø‚…bÈùІúW¡Ö ÇW–Ú2+¡ërº­2ó’ùp±„é4¦õµ^ãsŽa¾¶=B¯îu§¡Ÿì3wÛ9· ï<Ân¾}7,¡d´µˆ¶q¨ƒ +dùRœË’`Ù9#½?w^‚ò¤Øw?ìÑ0Ë쟪(!¡ï’¡ëH9ÜÙÿ†]„äõÁ¤¹‚Ͳ!•)èc¥çaeCèµq¬vQÉ;ç5nK3_$â`MZ5Yg¶ W^·IY”h]öÔ==š°•â¤öº<Ùõú—jˆj¨œPøcÜ¥Ö î[™Bô˜¢XÝ«lONÚ<ô:D’Æ´T؉Ô(Ç411šDYÅÒæô¾Ræ]Å ¸__¤3”@½Nä+#Yø>ÕeH³áq9ʇÏÜpcMœ?l-RÐg..ò‰‰žgç§Œ^ÁéåW¹ê2ŸM°ŠŽ½Xs5†éVJœù8"åìFÅ<6¨Nå‹L<’7ÉbeêŠ>Qð‰F@…ZB„þã¥>žkù^ãxÛ”2VÏÕª•ÃWär½Î#óÿ D@‡ì]œÅMè˜c\{š&ŒM¢t4Õ<ÃjR_á\ ‡[Ë|ôœ‹á‰âžÇœëË$J÷nQkÎçÖ£ÅèÑZè%aˆ˜;àÜo²0@·&}›…`˜~VzI‚¥¬¯»å%Xñ~e«¤!XÍl%"“M"á¡d‘(×-¹Xó.šD¤2é^‰hÜ•D\Gº²È£búަ?ÞþúþíööõŸo·¯ß¿¥Ûâ/¼^,„ÊÝþŇ¿o žÌ¼O/·£Ï¿îú§›~ŠÈÛ¯îûç‚?9ë^7ÈõççÇ›Qëw¹ñ:ÆÞÝë¬^ úO€5») +endstream endobj 1540 0 obj <>/Border[0 0 0]/OC 1542 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1541 0 obj <> endobj 1542 0 obj <> endobj 1532 0 obj (128.51 MIL) endobj 1344 0 obj (Total Etch Length) endobj 445 0 obj <>]>>/K 219/P 446 0 R/Pg 24 0 R/S/l1_primary>> endobj 1066 0 obj <>]>>/K 54/P 446 0 R/Pg 29 0 R/S/mask_prm>> endobj 1256 0 obj <>]>>/K 42/P 446 0 R/Pg 31 0 R/S/paste_prm>> endobj 1531 0 obj (129.65 MIL) endobj 473 0 obj <>]>>/K 247/P 474 0 R/Pg 24 0 R/S/l1_primary>> endobj 762 0 obj <>]>>/K 50/P 474 0 R/Pg 25 0 R/S/l2_gnd>> endobj 845 0 obj <>]>>/K 48/P 474 0 R/Pg 26 0 R/S/l3_pwr>> endobj 916 0 obj <>]>>/K 34/P 474 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1080 0 obj <>]>>/K 68/P 474 0 R/Pg 29 0 R/S/mask_prm>> endobj 1166 0 obj <>]>>/K 34/P 474 0 R/Pg 30 0 R/S/mask_sec>> endobj 1275 0 obj <>]>>/K 61/P 474 0 R/Pg 31 0 R/S/paste_prm>> endobj 30 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 7/Type/Page>> endobj 1543 0 obj [1545 0 R] endobj 1544 0 obj <>stream +H‰„W[‹%·~?¿¢ã‡Ñê~cˆwàMÀ™÷vŒ3óü÷S%©.ju{޾VÕ§ºªôíëãÃß?>´Ç·Ÿ>{àßÿýøðújw¼þôH¦×Zÿ@¿›3Å×çj²¼¾?þðÇ^?}ÿ×ÏÇËñþ¯_ÿóÏ_|~õú ¨|IÁÄS=^?Ýnûî3ÐÇçqó<¦ÄfÝaMʶT8Ñ¿—f +¥.:ëñ.ÿx{à k¼@¦ÔÛ¦çíñóãL¹‚I ¿þÀ/ðÿ—ãá³59Z8•KvP+È'ãI‹À/®N½9 ¡Ïe+ 8lŠ6ÑzÙóâœI¤klhì:Vعu"Äv(HÛ!°¶CPe‡lÐÇì·ìŸáö#Üþöãÿޝ¿àûOGˆÇ7ßtcÁ‘·‹qp%™Ðõ…hìdr¥šP ß (¹±~‚7ž¿âo%¼‘<1?ÆÁÚ¹‹Áj(*È?2DD Â@‰Xü­ö1$Ú6V<ŒÅ"L+tþW9ÈŒ€fܦwŒÅ4—z,\h4ß,®£¶Ä)pœàð)dÑóÎÒâàðņUµ€ê7|iË —£©åœ +P.X»UE“¡l–ãTÈÐÚ’J^+%YO UJälÓ)!‡ZDUJdoZ^SB Ѷ±Þ§D¨ÆúsJ0¸D´¦-%übJ@§>‡ÈÃù SÁU`Ûì]!O×2(P„š…’Bcñ H&ÏßúBÉ®è¼qm|aІ* @BîѽÄKk¤Æ+ÏZ¯7¤T­|·¡ðÁCY”\Ž˜MƒŠg‹&·’«€oŒ&¶ +%.àM(Ê](à.å +‚)dYÿ͘_FPDpÕ®âÝ'–szO¶*¼ÖqP›84¢jåû8w|8ò]y—AíòP.‚£Àë8ä‹’€»rÔ®® +ïf‹’Ìfhf>Ëqa¸´Ö ¯EÉNÖ##°*og‹’ÌfHò_Ž¡êÄåÙ¢Ô>‚DÛÎz"׌‡•Ã\ýNèŠqvß4XLè—É›ð&D¥"6ªj‘xpÒ34j‚Ũ`8 ó{ÚêmgZ㣋G‚ÁÏÔ…BÕCíã±¶õwâC^Ó†ƒß•×Ô¡€ºÚƒ¦À›øl᪳Ã{‰“7Ú>íÁ±ÆåC„úòùÀÑÃÓÇñ›Dwôƒ ÑøY·àÎ1è1&ˆ3VÓö%ÐFÓ<}¿Yt#è¹ÐhXká¼~µVnMk}Æv=?Žß$º¬´ÊZo0¨U™‘nMk}éŽÇoÝ :-¼lÎÖÂy' ™‘a Mkw¡È’l4+¹Ø ?ëj³ Ã,"›ûÍ8?Žß,º<¯¯oÊyN‰ä¸pb3ÆL1J%¥úüسèN°¤:Ì|©œR1F°ÇjÚ2¦ê‘Þócÿ-¢Á’sÊZNl92!à "kGzÏý7‹î+­²–[ŽLÈ0Hh§µ#½çÇþ›Ew‚%Û”µœØrdB¦A$DÖrn€—¢`£YÉÅfNl98!Ó,&'›Ç8>ŽÁœE7‚ëTçgÝ \eýYUÇÚÝa\Z <+"~8ã%üœé;/I~'ÁS Š—Ñp†·#C ´VDÂpÅ‹7¡7’ù—$¿“ 5 È +wksÕ3F0à¡ " d\ 1µfRŽp:†`-“¦/ æˆA_ó Ä@1~¥'àùˆ¦d¼îb€´lL×éùº¿;°²Ð8aTžÌ Ê1µ|S tÇÌ ‰+ðç>p5xÜö9_3ö-à›õ8Ãâ_gŠ%ñSÁ²å­¢À\ä—Gˆ€ú2¤ýùâ±h›_£\W÷ hqÎ<¹æ"FM o æB4ÖŠ%âÃLQÌõ8/9t™ôɡˤÏ`¹ˆÇ'ýâäÜäQèšÃyïÊ£ Š›ñ{<8Láôb‡p²Ka§°”rË…ÛÝ6 » +õv8h½Á7_€Ð5øÝÛŒ  +ƒHŽÍ×cJò.’­Ë–ˆžV0éiðm>ã j3°nU¡Có›o|Zã ’ñ{¬Þ%˜h[9o: ß,@Ü磶xÊ[oR¿U˜¸A¤µ·ZÞ}*˜òýÎÝý¦´Šï¼u&$œmÕ{EI+ÿµ‚W°Þ6öÜëÍÊÞóp—P2tàój#¬èÌvã¾Ç¡¡æŒ¦CÆûœBÂ91xºÅêÞ0V7T|‘äÈahÛ0´i [ÃÐáûÄQ¡Èò|ÀD ÉNíb„5m|76óø=gÖ#¾\Ú( `oK‚F½@䯆ß8ºìø<,~Aƒ'SZÌã“Ýηž€ +‚ :ÍljgHøâT›æšô\ðÝ4~/CR…‡Ñ=Ð$IÖ`Ÿô.õ¯’›Ó´Œ’ú‡:Ÿ•8tá;1‡* ‚Ò|s)Q‚žý,yÑ©}‰¶õæ!Z¹Ç‚¾qC2¹9C;W'ƒEhD‡ˆõ%ÜÇê¾áO%¹1ô¡@àï¨á!‡oªž€ *º°íÓ‘ˆ„ó·ÚÇhÛXoR#è¹’`§pŠMë £0’HTÍRîÈä—=ŽŠˆøžó¡Ó5©ù ‡ë´Îž£ÁˆEexÂwDñÖúe›`¢îÄzã+¾{¼só=µ¸ËESÚÉ]‚‰+DZ{ÌVì5jÛ”®µ;MéS~saö&e¨ÂØ!JZ¹ÎB¡çunטhܹoº´Ô¢ S¦A–Î>él™]‘Aáux(¹¾†b°è<íàµ(ÙÈzY +Œï=:Cší„AÁ1ò^D “ôôV›ÆZôl|x ¸,c…ñïý {ðÏ—4íÛx ×'´˜n§l!ĤT^@c=^my('LP¡éhù7§ã-Œ°š•é: <'†¬iºƒÙ†l—ßlÙÜ©¬w)ŸÍȬºzJ‹\vg(ˆ $9q‚Kå챪_?ƒ³ó¦Ö a4|ÉUF:‹'|ýQ¶…ˆo4'v•êÐ ì)Õâ,Qêç•êc-z6¾›dp” -˜–ÈÎ4¤Wo1ª¯x¿`8Ž´Œ¾Wf¶:ãʘ tþ)$ÂÞÙDx #¬feº10ì-ÏYÏ“©48AUÓ+½ýKã(c4UMnî µÖ²ó­mTæsP“T5¾:çOu”ÊC*5:Ù4îy¥h§\Órq —€2FÊb, Æ.•0ýQÆ D~g:Ÿ@9ƒË@Ù ¥ÁvÊ!´3F)ˆ3úZ+Ú)Ÿœ¸Ú­qHdhØ9SpºJ©¤à¥?qh^1ŸëC@)²kR‹áR ¼%rR²žÙuÑD™rœÎ‚˜åî]Lëâ +p9Dn¬Ÿ½å¡•vÐZ)ÙÈzŽ ¥ɹuE@q5Š(AÏ~×wÚÇhÛX¯Å¾‚°â»å¨¼ëªïï0H¾GbŒ‘’M(®ÆƒåÁ'œ'„Ì#¢iãë“(kƒI‘Nñ«ÜZvú7ŠNà÷á.*‚ñ'…ë¾—¿;E(€b÷O,a%@,È·´a†`åyX¡¬¸ß²”*¢gJ9t©rqzôê$Ãk|6È4<©"[¦òý­ +^#b’}»yuy²²3ëìn¹‡dçy¢„CÏ—7Å4)WˆŠGÓk¦a•ÔÅEQEì’EÅs+†UFö#[e}Ð*×´áxÖ”[ 7Q¥w‚šk“ªØ°¦ê’â( 3‰§n±é^WZ»üï=çÕˆ’ÇæhLr„m´ õs~+ë©`W{½/U›VÓ!fn8KO(¿FÓ1’yT§¦M?Tè„J'‰L  dšGu{ý”o²ž +vµ‘3$F$uM|jîLüé§‘È‘2NMC¿t$W*n8/ƒ` W$â½F(@»Ój¥¡¯„賟VÐì(eÝe.9Ø\Šò:Æäb’á'¬zAÀÐ]^äÓyàY³¿ë4™7ésþ\‚WC·v=¢+Z{•µXÆŒšÛ¸lOf˜‰{hý2®³LÞc™»/ðÆ9Ž¥¬÷2AabÈa ~‹OÏc,ó¿³gèXãXœ†w`s[³¨b)ïb³Ó:Ï2Ža´·aD©¤]Ù—;Iz'½êðg®ô¾ÄxìmdÉçñ÷§§ÑÖOù^|»Üa†AiÒ/c#‚{Óy1Gz^¥ß¨1I‡>±"¯Wˆç^µ‰ØU×úgÜC:Î=®•Ôl +œa‡)CbD0rõfÍ£xQ“þ”oc=|Ždd$Ñò\Or[1ûûSç۸蠸®Ì±*ôûS£§ˆ^©iç`,™júÅÒ¦ ƒÒ»5/NÎPÏ¿ó›Ì§’/õb0Äób [©ÛŽÕ.Ã{÷4ó¨R>h:Ø.ãOŽòê :HÜw|ërJå¿êO_¦Fk£™Þë…äÕµXWøó3†®¹Y}•}>Ž1z¡0£6ióB‹TU‚Š«­)_d›‹I^GDÈDíú¾øO¿cŒëÿÝÐks/ƶJÅŽFçõ æVK õXŸ|is˜”‡²/#ÁMŸ‹v|k]X‘?ùˆµXçkM`>Ü;Û™ÅÈ FÒX]Ä¡hôT#šgÊ9õ} 7ßʨÿµeÙæÂ5;ÂÐÛ¯ 4S_¾Gk7VB˜HÁ–±™"NÖ¡ScƒÓK†43Ôvb ït>ï†tô—OÎ +{ª”‰­Øèž€C¯-êÛpèã 08Û+`è]þ:l&¹cÕ‡0CO‚u¢ˆÊ>§Be*Äš·üGs™^ùTG%½ü7ð‘ÿèe¯uÚÉoózñ¹Ì/ýµÎ µëûâqño!¦Ë+Ätl ±C!žú·øÒ;‡Íð)Ÿ—®)LÊCÙ—iÖ:Z«2=îUÎ@ÐdX=‘G|[Æû}Ö7HKÂåâb£g¬.ÊÐrûú¶Î&çзfçœ`× ä-ÔKÙ0"sk.-¿ÈGDFörsD 09‡¶Í†zc‚,-Ι7Ac7ÌŒµ_œ ŠÈä[ 2:*"”tèû’ìé ÿ–ò½,Ð[¾+ôHvcËw†ÚeªÃf:;VMùj¬“‰8•}v¸™Ãè.k[MÈÛt§ÑQâui&ê°ˆÕ¢Ücz0nb0óŠsƒ4² 8Y§Vi*NÞý.À›XÓd2½ê1lPsoÖ(6¬I®,(¥a&ñÔýe&â\ÖŠU»|Œ—ÚjKÄ É¸—1ÉÞË– Ø‘52 ÅÔ©ÊËZ‰RÞU¼3>E0„±:ÉûŠ~×|§w‘RFР†‡’^Æ7Ïö:„RèÙ„œÊf Ç52 ð`®|‚a3Œ³A™ +ýʽ—â‰älrN}à Ìb‡Ò+¼ôë¿ÿÁ’TÞ9CƧ{ seo +#â:×ǼEFÆÂ•Ǹ‹!“õÐøå™Ú +‹£ØJ¿0qÊkQ›ˆ ,âoBÎ>ŠJ¡ç%á¡c_Ç‹šC,‚.¤ýÝË?BŒŸ#’³É9õ}¾£XÙ¬ t$AᆟêbŽ8¢yG’úÝ^ðôû’Éã¿õÛü!±÷÷3‘œÃË‹ÞUyYÌRƒèŒ±:gpDóŽz±yü^EÄ3>^AƒP]R“ò—'Ç~¨ÙŸàp< ‚]Dâñ‚TDœ¨Cåþêhƒ3)*} ü¶xOJŸ£Êã% +/Š…‹ÛeD-ï’·°9ˆÁ^|.jX×툙¨]ŸØ€ª9»Þ²WÌ(a5=‚Ɖ|Aû!–Î3ÅK8RÜ Új¬Î'hØR|)çÔ'¥ü.+xØÃºß—I郗xgF¤PxQ´Óã}MÌàv³öðuñ9GÇRöžA&j×'6„{%²¸“dŠ0~›'$ö‡y©F$çðò¢wUÞãµLÒLƒèŒ±:§CãðDóL9§>1/VŸf¼íiòÛ<™”ÞWÜÉói +/Švz6_ûñ4 ¢‹Ï9Ëñ4 2Qíxš=¨«X¶ÔS~Ò‡Iæü¼ÚÓM"á¥BMó±§§‹†¨ñ‹É¼úÓ?C(&ÞNÙ|ÑA®ÏšCl™É¡å† ˜³ät4„Æå3!Ùçâ:RÆ¡ék+Íl[ù~—{.?¥h'%hPBšË„m¬„~²GGˆÒ>h:¸¿/±$ïˆ!þêÿc¼Zrm¹màü®âlàµ[jõ0<ˆ8ƒlá €÷Ͳ„?U’ú™µªER¢ø)ög8«–- ;R¯a´Ñì¶B•—J#¤ÖkªËXü8èÖXÊÌwª^`T P Ci¹¯êŸ_õöXëê‡ó€0å ?Ÿ ËîT·÷îÚ-æÇÑYuÅûcøõcfåj,[oƒ)G|ý#ÃŒO2ØQ”WSÿó÷××/ÿúÏ_¿þúËŸ¿ÿóW9_¿ýö·?Nû¹¤:󾎴\Âc3(Ìd=®«ÒCÈA}Ü ‹U"RnÓ{:éXdêÜ”tTÎulA7½˜hŠ]QØS2G¦ã\î–*wäB¬-ë`!ö°$ “%pÞ"hêR± A’«æu¨DUËÚ´MVŸŸxKñÄÂPrm¿¹UÚvL ÓÚ²£Àî³VaÓ…Rí0þÛ׬b°¤,ÊÀ´aþ´žØ--wwjUOàëwcdZi“C¬k0©ô¦ØË¦M_¤EÌ*,iª:ʘDáÊ!íX¥8ÉŸŠvƒÆÙöx¦<¤¥ä„ØÉ°,©Ñ©l@=|˜eÛŠf“"(”%þç +”0!k)BÈVC±!Ò2ã ’ÇÎî%Q ŒÉ‚èŠ(6€–Á˜ÒÅÒúE;·[ ô»C½–|CP+gÂ¥ï9*{€0}\¸ +]ìDÛGSº=ü6]:¦, +oÂ" \”²%ƒØ`0¨¬Ò0Ö¹)F/º%aê—sÅÜìý$Ö; +ÓhWJ‹OCT³Z’QM… OðßmAò–ÆP5Òå£]TÀÀP(q*¨[iS[“¢“¢¦DÔ@†+…\f¢Q4Ì;¾AWPñ`lð ø +éN˜Öõºa~ñ ¶ +Æô29œSÏÙŠD̹AÒœEgÄ+²4ζÇ3Q.I2\c.¦©B¢‘NðF.Ù +*fcÂg%][òq’íA¨‘$Y©XdX9*èïX³ŠÁRóƒ”aÂ[1ÃCòØ (½Êeï‚M±®ÁäÀ;ȼ4aˆHSìXöÐ65³Õñ45H<9a5õ¨±ò ¶BÔÌÆž£fŸ¢†+¢å˜“‹rƒ8± HË`Œ‡Ë µ‚0­&.çµb€–ÁX;AÙ—õ!d®FHú±@Ò2\g2@×lu< ‡ÌÁЦA¢2Ef!„Œ¯ b6ö!d6„Ln<}µƒ>Äý '¸(;êr.K¾uƒUÉQ2m:Œ[¦~p9÷Ò:e@Ë`LÇÙÍÈ…W†×2²›À¬²†dÔÞýn¬Âêò­”ò³¥ñT{=øUÔËÀPVq*¿ÇZ£„6µ5+šM~ˆš#¢2\kà(T `VJ 导ãÅHW¤b66øŠË |…BA˜VõŠc~ñ ¶‚ŠÙ˜í=MGž§Â?÷4ìÇ<†ü¹¦)Ž4O„YzÜýt°ŸÃt@òçž§ƒ9dÒé!sî1yÁUç½l©÷Aî…«N9ÚÚ{Š Ð6[­%Î:¯ià$¨y‚äÌYç†iÓ¾Cx6òì¤ üÚ–49é:–=õ­‹ ¿<‰’“î¥s¤.CËl­`8çÚãY$¨]ŸäÌ9W„Ðűó`àƒc¢àÜë²M޹·åC_šDᘫs]§a¶TG0œrçx j'9wʵD ·ïž|pL¤•õ.?«”®!© ¿˜$œr—%)EP8h°Ø¼c¹ænÁW!H]cBæ—{_ÊJU‡Ö¡a0ó¡M…s²ph)æY¨õ¦ÇÊ•¸µï¿ ”I­äЍ /ÿ;Ò?–­YÍ·=±ªÓ c9Ê‹äÚúÝ”—«ÞÌwÄ:”ÌÆZ…?5åîW)Ëêï}^Ƈ$zäÓµÔx©•9þÖožŒ ¶7tüÓIk€­Þ5 êP=ÁfïKû‚¶Éê‡FŒ6 Û[5ÎÖ{iÇ$(•åØýÙEwy„TÐ^ˆùa„EªË®7Ïåv*(cërU¢ x7 Ö×}(šMÖk¯Ë‘7U×—ýû_Y¢h«>zÉ¡ÙA‘½¸:.Žƒ½Øçi›¬~ŽUéoIû­CéÐÍ9kbî)ÕДˆÜ´ç>‚.n½xÏK¹Monº~2(*nå@iߥ–oAÿ”ÇC-‘ÑOiEĽ"”Wí$S—ö‹}û[¿]²×ÝçÁ•M-çA€”ÂÜŽ>â< }‘¶ÉêFÀ„ 9¨Ž»Ù`£•c®A¦$•D¨F‘tÆÞmÂNDwó „ø)aJbIÔ‰®´üãb¢KÍ&õ(BØuL“¤ÖclmVjËo_ +õZ-B!B`ãï)™&ßVZ780sD÷ëÕm°©˜½‡Coå{"S¿‘¨ûV¬÷CP4›lGÉðwÎȧ•Nº 0»«É…'ä-¤fÅ_]‘ü`¦³M>Adߦ÷s9w@–B*Ô chŒé |î‘v¯E™¦»™i5GvcÀV_ïÛË;vÍq‘p 0u‰ºoÓ}X)‰=„¢'“ïá(äç5-Û>ä1aÍ,j®N÷©klå*žŒé!²eö-­Ë*ð½[ír HYödêJL_w­\í—~BnÔÞÛNw½‹•*Ç€ì>­„œ#õÚ«U+ìršF{Ú|Jk*}$ÔV³ )F˜½2D#Î$$tE*fcã!é<–4ÄcúÄ$ê1 ývËTo€¢Ùd;Ê%M¶÷…xræuˆx ?\eY‘2¶‚ø`„ Óý%ŠRêk cz7ó»_» |w ¤7ÕÌ)äe?Nš:J-’÷qÑÔP7u¸è0u$™¼Š÷Å’0îVò ”„È꣄h@o¥‹©‘¶Éê»?ÌjU³[I tæZq’¶V*_«Šýn ŸÌ4ëRÝW齕x;5H‚órÞ*]LúÀ‚æÚ|-›slhtlrÀƱÁIo-7m‚¬÷ÚLo%Þ…Áok +a‡šNiSk“*‡T'Ó PˆðéÇ’Ñ£FÂÐÅMoÉ6=°^€¬â¶‰äô +7Û·{ÂÎ$œî\·^œ@j:WyÆš´2ní뙪NIÐÍ8£„­µJ¯g-**€DàZ–tt{€¢ÑÞ»?Ä*`=ƒ¨dôÍ@‚ê—¨ßpê$MŽFah[`ÐÖ›¬Çr´ü¬Ej‡Cº2j±‚€ä’ÛÑ •‹õûëÞø÷Æâƒ ¶›)c¥Nª÷ÕHøE ¹VÅ%ìúZìJïÐ.‹MAÕ`¯žá¸œ¦n‡±÷Ÿ_’˜VÓ$(W&Q‡Þ_Gô{ìäÚ¬‡Ù­4ÈaÖå6Ë”ë@KrYÇ])à‡ÙÔX»’cõ ûmð]³\pd£µYAAn Nµµ"c‹.]Çl©·¿I¦h‹:t¹€Iµ“C¨-Åò¹\¥Þ×þÇÒÌfÚì­E‘—Vìòÿc¼JV$=Žð½Ÿ¢Žö¡K¹/ tÐHdƒâÏ7r÷Œý¿|ƒ‹˜SxÞ¹á} ¯n˜!ážÊίýN¨w¼Jåt‘GZ` ĽhV:N?^Ð9“|½ï/š¥{tÙR‹ÕÌïm²A˜cW¸€Bã^¬ÜSÞHк‘oås•G½†}#ÐÒ)‡ÕVY!Ú°Ü¥¯y{yÍ˾æ¨QFWi§q+ÿñ‚^íA!À}–CIYõÊi4äùÔ÷W!kÆì퓦6$×ÝQ V¨@€ãˆ—8¦Ò¥ë¡ýæ4­‘©†½Vê0ôòV&Ö@÷Z±7ð,Ôë=Æë‰TRÙó›÷œH*sµÉáPáØ„˜yh#iS÷"å) 3ŽWÙÏÝØ§¸1å¾GV ”2ŠtRC ›„p‰¾äo艰"ªò÷úpïŸHZ3>ÓÆ.!>Utæß ÓÝSH mývt +·‹Ô/d\xâ*Ÿhæ*—ŠYÙkŸhÛKŽŒãõDêé¶#ÑÔI.-¦éã^»DS?yJÃŒãUösõŠ„ +9u“2ö‡*Ö߯2ŒX!´‘‚æš<Ñú7ÏzuX{ôˆˆ(ŽÄRtnÕGÁ‘`´Óä‰øÛø\ä=÷â+Þq·ãå \©I¼¡¿ÍP%vÞ˜k÷S€?ÃÍ3^¾°·Î¡ìgfƒAj¦=5_ ZºsÅþ4.iÏ=1Íå>yB%Ü«ƒjàã´ÉJú÷:m[z +é[^¼c@d©Š0u×)QFn·Šz ›{ |×§¼­ðdôÚtfì¤’í¸®úX +æÎÞ߬ ¸RÅÒÐ7lÚYdq¥ó)Ò! +:(ìsGÞÉ7‚o­ŸŽÈ eõ oYSö„ ^|0±–Bés»qZWƒR nŽõ!Éå-4gÚ¢©ï\Ò¦U+JŸÊã"i]s·¸:öߨb× À»8, }é“ PÔÐ*¹7ÔŽ%–ãB.qÅ Ç•øöN7‡¾c$ü©<.’;2ŸKf‡b–xž„·Öd,ÞóÁÅIcz}§ˆXc$ëÓx\$i'ávòïO7ô’|[mäÇÏ{!üó¿/ùöùOú1SfĽô…ciË÷0R­·Ï/ËÿüÇËÏÄâ°ø'F}ÁîBÊ‹°ÏœÖ¤o÷–œ‰¯ŠúèuÕk%Ö&x 1ZRŽE™_h餭ŒoÝ­t©ŸME…ÚRBb¶h=ñ"š£¼ÇŸl&·ÚkD…¿óÒZ„A ØU ¥Ô…vdedŽÒãFD>lQyÆÂþ§Ì¤Ni±‹;76tÒ(„Ay[ +Û|$D Ðs¸pëZ^.ð+¥@Ü)àÿ‡yc̺Ö*–4Vàþó€·:jÝKX~@ßòÉY5ýz²F ´!šºÿ<ÛŽ¯µ†¢É`0‡å瘢;uóÁ÷[Õì¸ï2æ©™TM:C*ëÿ– +~q-aÜPØ€ö ¶gz½„~VBĘI½¡Í«Â€¦8[—R˜Ìa ¿‹Ö]êŠNè,•[í9äÊn ¾`«IÄŠSÊ’ÍuðVÀA<Âմ޶m3Ô4û¦ô}mûÆámJ²¹ŠIíç„L]P|q=Qš6A±r•!è=':„ÒW£o4±_-%óu–æqIiC­q£æ•6â(ͪoh- mÔ(š”)g¸'i¸jjmWïÑñ—>Owª?3øío¿,õje¥ÜR3÷‚!í’ª©‡ØÄ;ý!pg4À¹+`nœcäãv!E8âK‹[º#³>Ä8¡:kÚ´3]bpƒâv6«ðè%µ¼›_/¹„(wÎr {çžy¾Ê!ìÖçiqvñ, ¾ƒÍšyÞÀ%11ö$ðì•ÑGË’!U½B +{¥FõécPÑ\¥û-ây³Só&¦Û¥%GËG×Ðéç1D°-Ç*“ê å!ë–È)Œ&Z~¢ïVr¥á~•2–, 5 RçãØÀŸèNà ,ptÒHAVm-²„„¤;ï#Æ 9÷-:•¸‡àsôo¯“‚N§BBP›åÐ Èji[©Š¿O•Ѝ`(´d'í³ÄPYÒ±ú5½2Òæ™é•œ§rŠ˜TÄdí=ì€K[`(!‰j*a,.«TÞ·«yKµ‚—C,lõ\g¤fZèf²·³TŒw€9:0ÑÜX¦£õºž7Ufm#@f1²­v%ƒUô6°b:o$aövïu§Œüùj}5ÒZ® +~|–~ì”™ÚåP¨é;±:i7(ü½g©}Õ¿T1RK†Ë-îÈ÷N+c^ËNo’«¥Q7œâ@\±¶}€eˆx E +JBe“´ xUÛÒ:{^*íõdJr`§OM»X3 \jîÓ‚Œ&°¬«èÝ+ß)¾[ºš‰}kÈóH[Ž §R;ày÷¡å#óýÉgå™4c©eèß¼4aherÈœ} ÝàÜ»ê»ç:Õé_VqmÏ‡Š¶F—{´`³¾àˆT}{Ý! «´:“.*±@˃W ŽÔÆ”i‡€ê.SílÍž—Na¨Iµ*”¶f€š*s§¥ dýRiÒÎ ÛFÝ `ÊcEª"]ÍDú{ÞZC+s‘p*ùð|É»˜a±%$ëá]YâèïÑѬӺÑúÚÜ*%èÈ+|šô :°G˜Ændé"X6k!yÊ&-Ïóì’ß$ÚGË«I²ú…‡È¹¤hµBeù½×æŽæº¨ë߇·â%ÿöbǼ(gDšãêmëbކ°lˆ{`x.ÒÃxphJ‹uÆE—²Xg\LuŽùƒ‹iml–øà"Ð4‹êoQÈñE¼EÇ-ãâ‚þˆëWïXˆÀêµzÞX´Ui£ Óð 3–,dvà S•§×]4ÇEW`ÇEº½7S=Yˆ›÷±ne,d>úb²±pgÉ(x“èü;åhG>$)öù€æËò±ÈÇäçù^”äŽþ ù2e1xûÑÁ‰~¾Î›|ÞJ·ÅŸÔ P¤ƒu[TµY+iØ·`ñRL}¾}¨·[–¢õt¾Ó™ÏYõñòTw›Ì¡ÖÐHÇ,CIbIaË…âÛŇ¡{%3,(J°B›Ç æ2[mcݤ-0u™g. MàÈzNÁÏÆÄj^…Þ—aNóð:V‰Ä_¯;~ÿwä%fÌŽÜIn?½Dÿ4ž0ú(j?Êê9&·™JÃdI”Δ§×Ô牥TÌ460žv}”ÅcŠ# Ø—eõPÄð(±äÓ%@`âžûšý¢šV¥oSÅ,cv úÄæ°T?" +¾… 20§Â,L4Á¼c‡¼oùn i +)KŸ}_½bйeZÞjÙ.‹ô@]v—e»Ì¨žTÅV†y‘ß,UØ–XZ1ù¬~3Åé—e{ÁFά\& ómcp¤>£ZcàQ.ìHY„&×eæs¨sZK_‡Kî‚Dö êy¤'v†Ï8ŸÍ¤µQÂrdÊ <ŠwT&-Ûb½ÍY^¶TpÞ ä·¶YòØÖô*»K Œý²Þây•¼šÜõsãî—¯³(vößgÔGŠÛŸ HªËàýÁ+²£AWŽø»9§0<·¹9ò…v¶‚´ ú£¥—·ÑBÌé·›.qªÕ»¨ùkÃúÓSÙ ^£Î¤ˆ*l®v‘q®LG¹#Il-¤šîˆ™D“¼L»'¡Ý8ªø`lŸ³{#Þðísöj$™Ìrv~˜¶åÕC&X]œ3ø€÷ø›× ì  Ue‡³ëä•Ã_[Ó§:?•;ZðÂ1ôèL5z4‡¨÷J»¯,<ðÑ›4ʨ)I®lœ˜%ךÏÈBXߣƒ¾Rœ|@šrHS4òçYOÿŸG^]ËŒ½ªF¤ëJ+ýxsÆì8âŽ(5¾ +;ÕHF d<Ìø6q*Ó¡÷®2Ìä܉䡑äè̺´z!»LDyõÂ\"¿_Õaf"­Ãµú®æVrn\)?*ƃÿøÜ ™öW®¼×WÄ +¶1I*,‡Äu˜5&%1‡Pw¿ ŒÜÉ ̾ºÀ ;;L IJT|`ŠÔ¨ø|c {±¶þQútrŽLŒŸP^0µ¯Nä€åÎ@íD„{ë§­Ëÿ·÷Ú)šŽWæ"/S©o“K^éÜ鬓,š’,ËÀ¾F·Wü£ŽÊcjibW½®“€i2àX©jkT„Ÿe8°‹ÚÂ36xåTäÒq±ˆ!¿ó³¯¶šÁ7Þ<­’Îk®ETAˆ,HW ’/´æJîÎ-Ò"Æ m2n]¹’û®'cò7¸ú2Ž”ãÝv‚âÜçH+oâB‹að!×;.+8¾õDjà[Kîªë&` k6cN§ÄËÖáèÈÂÍÖ¢²v¤™MLndFBÕ¥b‚¥&±lÝPárô¨L­Wü¼­H*šÿ¢#–ÅÜœV¶Ûq_˜H»¨Þ\Ê]$ý,òËõÃøçß‘3¿lG­ýw 와¤ž(€¨ã÷Ä[壄\ù†"Ð&­¶ç_FÊænõ^}ø»2‰Âï.h/=;Ff(¢ˆ’9FŠœÊ,tq²k4Û(o:Ñ^Çè I=€ô©h_ñNe¡KDŸ¨Ž±…,Õ'¨ˆ2E1áç-°ëåe¢Æ°oÁŒô°2¢7þþïÌSF›÷º#;•é_Óž(h±´u)"„•Ü1!_R?‚êì#zˆmåC´2ŒE´Xê’^ èÉ™æð0Ü5gHÛë®^Ý’®z«4ž¼Xû² —ºÅ“=´#µõâÄ;6Ä<»½Ú-Z¢‚šíËGéYø|¦+Ëv·…:JÑ–ôfW–òû"²M¥(‹B¨s@iºâe‰¬h.š–-¯÷ÂÜÑ\½zæÐÕnøtí0®¯,oTgóå›,0ñ¼íF˜KÝÏ ÖÈS²îá4İSHé¿ßò/ž2ódû6ÀƤ=Üñç[\ûõŒ pm;.ý×â2OwB½R|ñBmا’ÌÇfd¢ ÞÒ¦&?ò?u•þ¯Š¶ÎD¡ï§ùšÃßlF±cÍ(ærõwia%táðžUUND"ìywo¶ )?¯´î¦jïUx­¥Ú|pkøóS(|Fé¨Ï·?¶Æ=g$AÛ|]‰ö«*X£*‚­Ä‘]l€¨À†ÎçŸ(ž¹lâók>“l3r‘¾bƒ#Is#·mîz‘,ëDT{P»êâ\Ñgúyþ¾)–¥ ¼ »Õ.©¸x=å{±'ú¥ pß 8P'|Ɉý¹™x{›Þ/e8—þåüæ"4ÄEg˜E6n1 !Ñ/Ú—}©KxA]P½.!z=t‰¤è¡K\âœ.]Bt$Õ[—H’º„hif;u ÑüÐ%Dâ-‡.áÝGÔWÈߢÈòqÓ%GžL—8ôßt‰ûá]¸ãC—M]"ù¸ëIÝC—HšïºD*rw¹K·E‰/ó%âó•(a:Ÿ¢hZ<'J˜•§(9re¢ä°5QÂ7à&J\N”í§(!t=D‰”à%¯ªrGÿ$Jþ<^Óo+úzð(Þ¤;^m©pãá¸1V³_öqß äô°¸f ZÒ}3 šÆI?* Óè´÷ý€‚ÖwúYŽŒzù7Úͽ£Âuu¦QŽ—* 5~0ÁØ5y°k£E9æµ½0½Â}ÐB9¾¹r:¾±ôõßTäd”Ëc`.²FäÈf2¢vF4úì‹UƵu¸#«œ~‹kìˆúàîlVÝ^T䎾¦ÛKKâsÇùñO +ûc¬§®Vh¼ç<[Œ}žÿ¦y·óæ:µ"{P‹_á2é'g@Þh"y®.&Éÿ/¢éñ¡¡— ýä¢QàŒÆM*²ß¢éÈZüu†j¼oæH?¹˜8còFÉsá0?Ùoo£)€$»/²¯.&Ãΰn¦ÌsM3‡*·XŽS”¾ ̾ºÀ ;»™N0¯íg9Ì_ñ}dó‘Bâã“;ËŠ¬Úú­_9.ð9Õ¹úè’$_{w©ãç“;Î5Ds­ààSJö·™kpôÑe9¶ 1í’$ùä [f-ã+V7žK°\—Žd›9Gæ±÷ ’}oXðtŒzs —j—½8P6Dy¿gU¶¥+ÕöÉ×jƒAkàj0‡ÖÀ5 /Tªv·l1ªeûê5ã*CÜ–;qaû¬5-v\!™Ïø£Kgè‰5×þõ(‘¿Faë6„¶Ÿk^ÂN°ÿS^åÖ‘å00•I@z¼Æß bµ3ù[¸HðÿV«×“ê£A°…î8 +-²áÌ¥j"+Œ'…j gSÔ§yÈÎ2l;Ktª…£º6$Jmà‘Khf+U-¨¼KB{ÛV¶ÉDc+ª«CÁœ|B'I"ö›ô¡ +šê²åw)hžvšâ!5å5¨–šG/‚ÊóÅhª©_2TÄJa)( +ÌF’Æ °C2Õ3ƒ@?-ºÍæ( .B[q¶“ÖUBKt~gœâ!UÍ-…š–A´ÙM±¶PÅo´¡4ÎçÍ6kÅl¯¤1©_í$¹ãúq¦MÔR(ß 4|ì<¶ý<8nã àlÄf!`ðÞ†Ð|f@K¡HŽaF(ÚÚ8‡¡÷aF~¹NŽaLCe˜ù+¬Y¶.»æv™d. ŸåBDXcl­ö‘˶r‰o¨+3å{´ú”ïÑêS¾G«Où­>å4Z}²÷hõÉ^£õˆœ'«Ï´§¤Ýçê{ùÞöÏSî¾»¬¨KüKî•Ý•x¢«Ü³þ|Ÿ,ºÓàægTEàtD•Œÿ$Šò98 +ý¼þMêøËyHkyù¹á$ çÉ£À·¦²N,A¹ Ä?‰úGaÞÞ|OãòŸ-´ùè¼å +Pò棓Ì]B{7z˜íyêä“Ëžg·ÑB ê%‡-¿M6·oÑÈ'g4Ûh!Æœ‹¦§µ¿­äU(®#uîÕˆÊ4ú¥ž0nø†ø<Í·1F1áºÖ•ƒ6\QtâÜ/FÒv÷s\+Æxi²A8>·œôuz>ÓS vœˆC€#× d³ÙÂ6ãæ×B…Ksáßhžªm­¹X[*%ç0°„aªW"‡}LS¼5[0P2ÝÄ)+j6KÞ}»/O/@ôát‚;˜o ­ÕêU1Ê%ÓE«‡ /zµÑFªƒ¡Ù²î7‘46ÈÐxx|+¶Ž7¯;+ùêšÚ2c®zf·"€?•pT¬2¦L6ï|ı YóSô*K(ÀfÉ £´¬`±äFüg–9˜åÚÒ*)kIGÈ}ÈÏñ@ë*Ëš›‚­êé;öBõ&qÊ-¿<Ùôtúop‡¤Ü‚Ì_ÿ¥Å8¾¬ È6³A½,ù—ßýó}Œ뿪Iƒcl p͘öW[ù/çOg¬+Z¤¯ûd‰ZáGµ®h­Ñ-3×6vvÎÃtYþv˜9ø7:9–·ëc2'òÉ…$ÀÏ6Z-H>i¼MŽ:ËŸ´¾º˜v†u˜.0›r2‡èìéV|ÏCÄø&µ5µtŸ—õ@ZlÙ‰T€¬Í4­ zéb+` +N.˜W€ÕÄ×UˆE„õGÒ=i¿˜¢:-$êäE.PÑï½–…>°^÷N*RŸÀ¸×WQúö½©ŠÐ835YYãð·O‘ùÓÜ–¢õšÌ$P¤>5 ¦ÆN¬Øéë– ^‘ú‹Ÿ#žtaúÁ¨ýÎe{PœWÛ‡ ŽÔ…©›5e &ú`°t `Ã$ ãC»10°À`daà Áa݆ê1|ލH®ˆìH +À8JÊGú,òÛ&iDÒÊÕ3³­Ûœ˜ æ®i!¯©Ñ“ŽÓ¤éå©%6j¾½e -6öiổ}´‚)fæbûá€Î¡Ä#nûi-£râ[²3Ï ht%Ê7ðEއîrGŽËÊñÔ¥m}~xÐóG“ÒøAœ}“D\*|±§¤Ê`BE¬-e½è”¡‹è:ô=GÝS€¶`háwñÅhåã­*o-â¾ó›VCÖ|„N]OÙ駈¯:+:º8Šg$¶öuÙò»4‰O<ê¬H]‚“iv=Øù;|z÷œžuUA•ÄÛA;žìæ®-÷‚sC º 4Ý *ýì hX',ŽÉ–øÁ1ù‹Mã¨tƒc ¢ÇŽj{žqËxçh¾óœI¬ßx>xZT;ôÂö‡X[Îå†Pù¯bÛd[\Ó&BwŽ˜Ñ²=å¡O`Nú†p𜤀 M +^¸ü8Ú\ÚCO‡YãæwuWsÉâN*RQž„JE^mÇÐ&íü¢öÛ¶Å~D‚®›¶ßÑB­FÂ_2pÓ: qu4·&N‹Ë«]•zß¶›¼Ò´Š^+WÝ‚Ý~“>_¡ÒËج Ñ\³„Ö¸ùêyy8tPÙ¼Î8b7™±n¹$v.˜Ÿ%\Ì*+E×>­Ö‡‡º²òǃàñ±•ÿíÁ9?ïÉžg‰^šÇ'zIOÖR<.Ñ[ïø\o½ãs½õŽÏõÖ;>×[ïø\o½ãó½õŽÏ÷Ò;ÇLîø|{zÚ]ì¼—õmÿ<ñî»Ëýºô¸TÀfzQ—OŸï¼v,bß&¾5[+È¢Ç\QΤ±­²\È*LóófY>ȶ 6æãò–+´Å—n1ö$À* ãf««m£òŒ0H=|k¬ý éŸÁ´Â6´:²‘ó*àƒër·âB ¿þþû:À>U;Ù«–ßýó›]ËSì³òDƒÀ\ÆÛ¸GܵL”-å , ¦¡èçÜ2Ö®ã³C§ªË6HÜ꽊ºì±Vq‰‹7³œªB¿É9xí#+X,Ìœj6ËÄãæˆ½âÍéÏå–_F>!ͦ! “_‘ Øë÷U°yFO¬G +<ŠÂ™®ºð笺 <ÿw],W¯êF¥*·«.2‘¯ùZÜ’;Ë쪋}†« Ã¥.€U+Ut/+U$·‡YZ] ùZ´äk]°ÏzøŽ=| +²‹ÂÈ?êÂÏKãCh>ÁÈë!§_ ÌœSuó דøiásLÛrŠ?Ü{F¢ˆƵSÒH"EÈGP¡ëÄj-¾O·¶N‡à°õÓÜK|rpà¤m`K„.üs,ˆ¥‰:öm&QWüÑ÷Ñr¿J‘V0ƒq:µz}0<+ù)Ã$ˆÁ0îP´}Óå V…å¢íN†S–‹¶;•¡`9±Ç ÔÓ–í]„é¢íNWaºh¿Ó-C˜.Úïlõ`¦³ö;ý¹0µßiH<Œ–ÿ¯rôÈš–ûsÑWûrçþáDøþ.µ<µ4“IxÕ, ’àá§9Ÿ­ß}žÏLÖï|=`¼gÚí!ÁeveÕñ±ÉÒóºÁTÂ0©p %uë½nYÒµn[_[î·¾Õ\¿')M©Xœ‹c êÝ]A€aÖ EsR`?µ9VŒM9ë“…«M1ÝŠÕ~ +¢[o„íì`ó^XßÙŸPx]ŠþóÖÜZ”d•Ö—ãàBßï;Wáu³Þ2ìðç9ŠßyX—~Çe´Ÿ^Ÿd8ÁM†Ýd8nÙ|˜ì §Ñ¿bÅ2õbÀ)çÀ&ÆüÃØ²ã ‹óIŒuËÉ ü­¤ÜܘœWOnàiõ 7¦ Ó‹ìð_¸þ?ŒE‹Œ2ÊOß ‡‹EcÑc§à Çôx«v2EN–Tm!}Ä´ðZHe³‰¾jù©3<ãöÆÔËî|†ñ/4£šð¼|# 2˜$õƒ¬d`lð8P"¹ˆAƒæl;¯^ÁÁ=ö)-ÒMQ±ì’ž¼rñ¢ä`5aØDz|Œ1×]x%Ó0ô¤ÕÜ lÓ.Þ>c¥›ûiŸ+Î@‚©®…˜X[¥:|8aÁÓñwú¨ñËpÂg™Ÿë«–±,ˆ »7ÅëèÃÊËf¼'Ó[ÿâi+fK­qˆc­Š˜ë)ŸUÔÚÕCPwºhè1èI¤zº)%‡­[À + þ¡ÌŸáY«Å Ò3«ö§ Â(ÏˈœZËO0ÅX<<¦ÑIø0pÀKÄŽƒd,";‡<Êî}ÐB]Z×±E€÷ƒ¡ÛdgkzÞ½eä§“-ç\ŸÏùûhÄšµÜÏ`†A9ÿ†;£¬ ë´¸LÛëuÌ¡d‹Ì¶ÅýƒOcúöiµm|ЉõFC]&âKÐH1i‚ÁædÀìèH.ÁêÒ`OÑŽªo€Ð‡«º[½éͳÈc½±Ju.ïèÛ&$u*2qBÝG±ÍañÐþmåô\]nnç}J|^-ü®ÝhƒÚ8@´ˆÆ#šZÑcÖôm@ÑқǷ,ô8;‡¾ø´»óP¹GŽÑ÷C+îÃÌîÆuÚªymÈ,^íd%ùÓ&{µ`æèŽõVB?CŒûg4bŸK†R4´T÷5aöºÑ¦.¡gÿùˆ~0¶™=,ºÉÏC¯N¥¸]R¿IÍmú‹U%z)“ ã[þ +lò¡|‘£ò±ÇóàëB£‰¤OAÓWp¶ŽÝ¸‚t¦5ÍôÅ/¾ì_mÍšfŒï#[¿åË‘yu'xÇd>ÕÑXÍIÉ=uQ¬]ò@ž¤ðå,ÐIpÛÅ PU]¨Û@ì­é+[µN|-Ýìa9Ÿûh¤Q¬OfWÌÊf¼âa/ëáÍÙÖ¢ÍqGÏIwNî0ºMHDÆÅw»Ãfäš¶#›eBíîg¡xB”}nÖÞëM¾´õ¤`:"Ud¼míg–,öÎdfÏfÆÏ} ÿýš ©dÍ( Â8“s£ŽÆ¯ ’ú› ÎØ ÁÔ|¦'KÙ'Í&F¶—@/© ÒŽº€™¤`ÙW—Æ‘Äßf5øÀÈ R 7Q׫ÜJQÀpø^+õ'‚0ãö¨ _VdÌM!÷ãä,s´Ù¼P%çºÚÀ<°‡MÊLG è ´|bu°ÄóNXr€ìWŽëÙ'q6‹ÙŠ8‰o!l ++YÏ×ë°8­ŸM€'óQØÐeÇ H²¤£¦‘`}n Û^‘äd/‡½(Öfx–>Yˆº-Wå,GáKK{œl¥Ý½!ž4ô›7ôýæŠ"¯§,5~‰>›AíY‘¤å…Bó4ÙW¦çö*›Éؘ|Y&˜ ’0fypUw¡n#iPmrMZe€¯!é>6Üþï²Ë­NLkº„–i™à¥¢ æUü´2u¯Ív¾zc>OVôÕËb$¿m1ÝO“‹7ôCÔ),ËóvêaÑ¥²N2÷/“U$7ÏæžAA è.ënL$Ÿz=a~pœÏ“¹°â/“Õ¯X/VÄ_Yø,~ðLѲÈ\m0!úõÎ94žFÿ$žS¸^'ñp°YN®iÅ¡… !î“;naÛì5M³Êm“•rS8ÌzÜ! +²N0«u‡#öJÚÙŸô(Ø6c1 +- +OT¼þD +È|T¼²&¢Ò¢¯FØp-׊õù% D£þ&¡Ë Á®E†•DW$.%…ÝÁ‰€gÛ’ùóûŒìowiBfseó]õ“ËB=cÆD•"÷!›QÁd™˜"IGMZ@4~ŠÞœÈIüq2‘"~Òm‚óm=£ŒD5”Ù:*èv,®«GUÁ–| 2,#Q‹fjuzÌæK£Mm€=fy"ž_–;µÆPc¢Ñú÷1TïPƒa.¯cîT•z¯"Ø6Õ“¾s+Z"±švhfî¾£ðÈ:¨êùJ2kì‘d_sð Mª®o¯ñÀ_\ù›÷crˆõz?81øú‡>Lñ­0 ePfªC?I˜-ƒÚPÖœ#u_Y P/ƒúš@2‡Ášj½ò°×Ö•¹èj`îôVöIÐYƒPâ¶ÙeWc5TMä òj–ñh£bÈŸUmFëÁƒò©ÆùB¯zÒ· žÄVm¡Ù "§?×Þ©á2»ÓiSnûÖ*q¼2¬Aòœò¢Ë¥ ~+ôFýˆ²ra¸Øˆp}„O +vا)²RZ¤kÝqF×åËÐ|¬#oë|Yèлµ=]²o”×*ÚN,çÖ‰qŒâÆþû䨙eeè[Îdìx(Ȥ ¯}mî,l—÷}Œ@1/?[…»Á$Ñï+H9a¶ÿú?åUr%× ïŽB Hû‡Ó˜Îÿê*$Áß³ÈÏyªñIK¡PÁN“Eí{à -Чà×)JVf{+ÔNuüAI qµ„Š,Å0=xÀÔmf‚õP¥•›"w/Áz¶o±(4;oÆ…õ.D98ø†S¦b H½"$ Åj—áËìÕì°.é½Ë劚°wOÓè>Ñ%_ØqåoJí^ëƒiX+"»ðkÃꙵš²´+°*m-5UŠÙãd/±ªÃÌ’ÍMQGÀ‚U+0eúމ K£`AèØèJ££ñͼ”[aKI±.dÂo»*`¥.G*·4ÁRµ{·Ãèg÷ª|Ú!q ãÇß”%–£4ó[÷î_sç;_6L0ü{¡ ×®7&7Æuâ7T>éBu¿¹Ë<ç ~ÕØã9A2„+A ™[Òï%Ç?ˆÅV`½n,Ç¡v‹à€UábÝDe°PssµEŽCkcÜÇaÎ ÏÀÒÜfup—Vò¾ŽN±ëÇ=s™!ÐkÏÓ°  ¹Ü‘p~èë¡ÁB|‹d>ýÒb%Á…Ú,’ݦÝ_ë 5ºXŽ!ŠYˆ G¶Ý`Û!juÛÙyÈLT‹*¨É§€;dIùJz-’#øa[»+»­rãA:›_Úöl¨ß¬-ËU#5Àï´§=;z’<}0‚š4ÀÎn„õ<; ÉÕÖ –b–”NT¨ð(AêBúx줖ìº;âÆFQ#¾°/Š™ßºÖbsÿúr؉7O‘%v!šn¾ÛöÍÊÚ!Ç(‡ÎÂÚVB¼%ö·4]c^£niÙäü1ÈŸ¤Ûÿ® éÈׯ°nk Y54Éã¨Ê¸*¦‹`•Œ»‰;o¸VZw"f`Û†(ŠH¾0í#§-ªE…ß0K+·(< 3 e¿66‡¸Ó·å‰U±ƒŸÖA•ã×™É$¾€‘k±f…IçˆjX㎤w™œTW1®I‚«|‚#RAΛ®÷Â÷y1´ù§`ÿ˜ò`œ–¤ úsçk^¤YÙK0*BÈ·éia`QJ +Á¡¨É¬qÈXé̘2È¢B’Gô¬_Có†Q›Çl«Áv‚;¸|ý:týÌU_—"õŸ7ö~sÎà#Ñê±7gü"V†F¯:þæ4íØ •*`²@£Õ&ã,S ¢çýù±¬©Š(ä™eZ=åREb5 + Ši¡ºÁeM¹ÁaE–íJç®ÑPj2¬eñ8M+pTO:× ÷´Kß–"`q¿±œ +ío!ºŽL]ÖÍûòÃê™íd±¾^ó?‚±ÛpÇäbnwÔ“uù•oé2¹btå4˜ò³:eôlÅÏÆC\>u :ã!>fUâ:Ïœ6©Æ ªj½- ; Ð91sô;Uò»‡b(Pußm\žÂbˆøV ’ÌDçð–žmu6ä½ÚžƒÒsµýD#yi w ŽÖžêxý¡¢Šc•¾´±SQiÜðû}ÅŸö7~©Ñûe'a#pò]&µÀmÜ.jXn¬Ñ°>u›ÜŽqÓHÛ¬°)8elïàq²$ru]&ù€nXŽºÁ¡zC]vS—IömàœdºK²ƒy<²î’»½Ç”$ê]µUÌE¢Æ¸zS¡ãÇ—: +NCБDàÍ]FL8‡¿wn#ú·ä•Û?ëû*¯üU¿¶b`޶½}Ú¯­âeàŠmõ"ÔÙ;Ϫ5émhXÖÉ¿)¦ÿÓ¦¿?ã”÷NuÚs7뵫쮼- ;*õœw£H+bùɘžæ(~ÆVfŒ©÷E)F½FüKe{â/ÃØz7Šï 6ž(;¸‡uɵ¤'ƒö¾ûüL7wB6«}ÆRpk`ÒõØm`–ãz}›Á|9¦ÛóȾ¦zïûãÞ³Á÷Çfˆq™¶akÜ{O¬6Ú0.뛓ÇþˆÅa(Î aFböÜŒ.›ÔnÒ/úZ`PBú-˜BK¬&¹¡V;PIŽëy›Á¤Ža´‡Ò“žþ%ñ6»í1B7ìÚý2ÄxìoK`ïX8Wƽ5|ËÚìɾËèEëéüø:ñØOgää5Þrc˜òu»«–{_øÖµ”œŒ{KsŠ4—f`!ÜiNB wšS89XÏ¢]~¤™ÇÍ“SÆPê4+'õšf`u>Òœ¸¯>ÒŒ7ÆðH3°iÞ±p®$'VŒå"ŒÏÒ¼tiN‡a\š½åÆNëîDË“qK¿:¦LŽP Þ3F¾sîí__ÿ C-R’nŒ§'ÙøæÓÒ0„Ê,ωð{ƳÐ|í[­"×ŸŽ ÛödqÌ÷´]é*ñÍ ý+Ȫ³¿Ä&ؾÍYi¾µf^`F@×_›‡Ôú‹Xë Ž‹VìÀð­tÜ´™B[¤ ûÁÌ ÿ.ÈN£tW` —ªoh`³bª ¶z$ ²#ʇÕFÉ¿D¡Y¡Gàœ>ðE,b“-|bˆÖ¢‰küq¹2ä„' s‘¹í æ\Ü1‡=+·ZÎ¥Š¥XkÉ6þ.Öƒ<¨±8]wáq}~äà°/š ¬ßZWB!ìqc08èë‰àûBTèg{¾½úßëGfê-WÁ&BI;6ö5ñ,ÄÚ †x‰Qµ¯²85C<©h‘SòºZÕ÷ö}Ms†ÊÛ­ÞÙº·ÝŒlÒû¼Ñ0 ®J³[òsç\¡œÎi:Ñׯ/‡¹ÉŒâa·x=-Åä°Ÿó}¹Ñ–x7h^Æt’.yw 'o3§Û%T–Ö[)¿Í +ª¸<ŽC°õŠ%6ˆaÐU/6¼]m»ÒöyØ"îÔó‘aŸ§©w +„Ï ؇ݘCíº+‡ú¸¢îBË>oR¢‹¸ª§;ô¼#ÂvÇP«Ù¥]ZÖ ?:Rº„;Óðº/ÉN£2r龟‹ð¹oô9Óƒ¾A\ô ¨õ}sºÎÍWË 2ú¦o`±{úvƒzÓw{blú–Ò}§µ9ú.~Ðw:ûʦo'&6}ßvJßüѳw:KØfoüæÓØÿú1 ìÍàOÝ;ÚŽºös+_É|£n^ŒQ{§yÕ§Ô¢óbokå4}w+{¯Ð,òNg‡Ûä ,-@•éÜãÕh4ÝmwpbW?È›Xx÷m§ä}Ÿ§$æëlßúóv·ûÆËþ7òÞ¿:òöz~‘7…u·Ãþ"ãÞ7ò¦–OòæØÌbvö€MÞÄÊMÞ·™’í}œ’²[!6y»âØ%ìò–ÿy¦>¥y»½b“÷m§d+¹}·º Õèž¹©­ûƒ¹Ý^uº’½yæv»Üfn—ûÅÜn•ÛÌíV9I½d\uÿÊ< `Ûé€$éõ±-_ËÙÝ^”ɹ<݃Õo´úßÐÇ?ÏÓ¾]G°³ˆq'{¦ÐűdŽaeÃÛ +7 ”ñîkè T¡ºˆ8½!å, ì?³-¨6¡ÿ(¯rìºv˜ÿUxö! Ž+èü{HIï?è*€àpŸ$Ë™TÄÅŒ‚j%”ìÆ4X5„YD¿q S½B8Kõæ’äºBe|y†—Š:–Õâê1ăJâRÓTÌñjwÙr[ýaÏ8«–ÿ‡ š™ ?âÿý÷“Ç9ôq†µ•b¤½ý÷?ÌaN!7»ÖJKvÊ!wb¨cµËKå$bWML{˜{DL  bûT®?ÅDøX6†b%N¬Ú ªƒŸ¥X¬Úƒ?yàÒ b#}Šû2OS¶^6Lò¼A—ÉÙ˜æ™kŠ­¨Ô iYжDÃ=¼Ÿ*®Û&ó*:ƒ=¸Ì%¿Ûð(ÐbÖkK4*%w+”‘¬QÒrÍÑ„ò‚(×Ìhšü U®X ÕèCƒüÞXÈ`(æPlŒdK3}Ö2 $ «†·m(¢pºƒù&þ°wa¯ÉºÝ¹ïÅ£Z=ž?wµÒw½ðÐÆ>}V«A‰¤$íX­ÊÄ0u²ÞÇ"°R¬#;ª +×½´Y‚¢ëc>ŒÊZ +è„„šuzeª„*°BI¹¡<¤(´ÔfCV§öÒ{1©^¶FR×åÿ_H•ô瀶w~Q^HÇ9ßW}2LÇ÷BFË6«¬ñ/‹ºù»08·Ô¬ŒaVÌ(“çâ9~Ì gÊa Þ-¿O°’6Ÿ-Œ-EU„`F¸:ÊçÓª0eTx/õ¬B`XL«¼´ +åÒeœe¬Æ¸ªUËXËUˆÀ°3ª…H¨Õ« •v"•õä(DÚ1êUˆ‡¹ZˆË¥]u€@t®B<,øF!&Ü’F³"ψÎÑsŠ«S®“R° Ýï«88‚Å‘¨1«c0Zc™hÒ{QÑlûšhŒ¯²…ûiZµõ–I²ÔÑH¨htJMÍMÉÔʯY˜ôU¢¿OH…ùÐ@~]”“*h¤ÉSA ¶SïhÕÖÆx‘ÅÄ•:QCp¢¶8ÿ>|íqéŒÙ üæAi¥Ææ·U©E|$å Öäè°¸Jl²A~ ‡d©Wߟ¿Ã½Nöþ@sꚸß¼–^Lzð$¸Ð7EƒÜš¿OGøcœ£í²ôø=Ùªz€sãü~À––÷³Ä:KW.½ß5³a—Hº‰²Ö|çhàïØÿ)Ï^ +:jˆ6á½s•7Ў÷ݱ““-•Õ‹ƒhŠ£6o…a°ÉJ^}g—Ž¢#e—Íe¡Ø•2Ñ™Rê…ÚU¤Á½1ÙAÄjfÃéâ<"æñÕM@K¯Ó·n˾U¾•LýŽ6‹lh3-ÿ­ SsÿY?±L«£ mJ⥧˜K6¯|E´‰Æîþ/OiC0½‡§j“–,(FœèŽJívý•eo¨U\6®,n/X)wº¯ ­tè6ëçËù0ýrJ(ÏeLóJ1£Ag{›ÝÇ%»©…X=³ü£Ó‚cv +@©VcŒq}E:âCåÎ[CO£ºœp:AÃúù]Á®ÔjfÖW~ +AÕXº—2ÔÜwlÊq.ÁmZ?Ÿ6-ð°é!H½™/›€èH›Fü|›†3hD&ÉxX ¿X3Í÷%@µr€f⃃ =e'(žÃ¥ÄãK»„”ûlÛ•ŽHI"™¦å=€sU0ä< %åÐU‹¶ÊÛ Ug´–UˆrÈÝ>¦3×À9L¡0Ê~;rÁz(ñ÷^&¥ß`¯­èóºŒQ6dä-6Í.óÆx;,ØÎIؽíŒúaÌ™ +ÄóçèÏQ2Ђۓ?*?‹Úl'ÖIȸÊ×RÊNÐõŸ‘åø*41r$#ä—‰;ï¨÷FÊ(JvZõzÔ‘Æi8<€¸¨Ù>ÀÜ7ˆ|`D_zAR²zÙ¼*U­–°ŸçB^OWÒ6xí¼Á"\¸îc¨gT4Á¬WÑÛi|c~ç×—›à[ÝŸG², G&“ê]O’Žë>Ñ^ €;–#cýl¤ KKÐ +À÷ìCv‚crÕ·SëXAÿÜDm ²çËÄM£ó¯H°¨¬ÍØ#»`+3l±BêL[ÀZ÷óܘV€«¨´CÉš®R(¤ W½š4È™á[/³¶ñ HÅ¿¾ÜDùåý¼ÖŠQvdâ0éLÏgÑÅ‹5¡X¯è:‰ãϽaX'½Ñš2·Âí¢é[E_P <Š`êsäE >¯F:%«¼SgóúæÇ#öé™`5ƒ³_I˜ë¬2œ+iw…{Œß²/EÊ +É;À”¶\£Qk7Æmý[š£”[.rƒ7Ó虥ë5šÆ,UjPMŽäØTa—Cahfâè‰+ Ó¼,dÞ¬ýãŽÇ<­ìxÞùj÷ƒ²G\"ìÐ8väDIµ õ}$¿¸ i¾ã–²½Ü¿4—+q˜^x$DVc¡íÍwè`órãúÆjWmm˜Û;v¬Þ^XÝbQ{`ä<-ée¿Í]à +/09À*äÍÜB»e¥s´è ¶[÷ÍP°V¾ G¬Ñ²\D›µ‰ÔFF$à°çÌŠ–ÁG7®‚yW&%É¥ÞÿøFu®œ÷š“ß7^ ï%J ùå†ÞŠéÐù¥IÙÑ'ú‡u:LÛà²+Õ¡Ë4 ááñ7#ˆl•Z@Y¯…DW›ÝPÌ;7†ÅDŠÝŠ(Á™aÉÙecÈJË=~,í·`²³®q*õ6Ñ„rÉŠÖ”­î€†nJqAõL6ýÁ €,èIœh›w%¨h—×âf…ZÅeÓ<-O¢Ó×·îÉà.ºÑmÖ=°þpœ2£^jÏ,üˆ¹¦úEûn&¿h1¾b®ôn®àƒìÑ·º@©Ö›Œqþ@TÆCåL‚”Ó(ì" ±41…¸»UáoµÉ.7â-cHÏÎëɽª©e™±l:fTs©'0[ï”ØSc¢}&n Y‰wðûhR<ñq¡­Wñ"Ó ‘sÉвl%f×ûÌÍ•â­{î‡/ćý·w;Š·ÜjD ½¶Ws4—]¸ÆÙ‹ÔÐ_zhJÞu«9\²wÝêÅT昿z1ùÅvõ"Ð_zhšI=½Èìqo’ÚÙkŽÁ­‹¥a²$RgÒÓ1ùyú?åÕrIÃî…ð<ý¥ŠcÓ°ó¿.@JUÕîñÞÆh âd*3 Œ_»>ÊêcŠ# Ø—eóÄð¡QbɧK€ÀÄ%<÷5+úE5­JߦŠYÆì@õ‰Ëa©~0 +¾… "0§hš`ÞÜ!ï[¾[BšBÊÒgßO¯tnÙ†·Z¶Ë"uPÃ%DÙ.3²'Y±“ƒ4/ö7S¶%ŽVL>Ëß qºÄeÁ6ØÈ™¹€Ë¤4ßGê£0ª–raEÊ!4{]f>‡:¡uq;\ò²oPwär|©°2|Ĺ6“æF–#Så‘lìQ™´,‹µ›³l–TpÞ äÿÚeÉ϶¦OÙU +‚2öËÚÅó)y¹«çÆÝ#*._gRìÛ|›|£>PÜýER]¿=è?¼˜ºbìÀß͉8…áyÍÍ‘/,ØY +R‚ +è2FýJ-o£…˜Ó/7]âT«wQóׂõ ÓSÙ _£ÎHUØ\íbwÄy2éŽlb+!Õtg6šÄ`Ú5 íÆQÅ…±}ÎêØáÛç¬ÕÈf2ËYùaJüY–W™`u<'ù€/îñ7ŸX6"–eeÓÙyòÊᯥéCŸÊZ°áÈ5:CÍ!ê»Ò.Ç+Ë\z³2jJ+'fÉåº@ó™«{¤‚cÐgŠó ôÈ)‡4E#ÿ{Ö¯ÿ«#[¤b™Üë jD¸®´ÂÕ˜3fÀ7£Ô¸v¨Œ@Éx˜q7q*Ó¡%ï®2Ìä»ÉC™äè̺”j!»HDÙza‘_¯ò0#‡æaš}—sK9¯ž”•ãÑÿø¹A2í_yò^"N°IPa9„×aj Ô˜¤ÄBÝýŽ{'ÿHÌ~uÄ ;‰¦âX*ž€b ƒÖ¨øùÖ%¬ÅÚúGéÓÉ921~BØèÔ¾8z"wj%‚Rì­Ÿ¶.ÿ_Þk§h:¶Ì“"S©oŠÉ¯tÞˆtÖÙ,’,ÇÀ¾F¯Wü¡ŽÊcjiq«^WIÀ4;àX¡jkT„Ÿe8°‹Úš¼r*ò踺ˆ”ŠŒßÆùÙWYMò/O+¥ó™ëU" ’ÃeÂQòé‘Ò\ÁݱExЈñ#C›Œ[U® ä¾óIn8âW]Æ‘r¼ÛNPœû¸iå /”b½yYÂñ[Ol üVÇ’ûêº Xš͘өñ²u8*²ð²5VVŽ4³ÉƒÉÈU=*&XjËÖ.Ÿuƒ©õŠÿÞ“Š"ÆŸ¨ˆecœ›ÓÊö:Þ iÕ› ¹cÒÏ$¿ü]™Âß!]P^úíA¢`%rdŠ˜Ê,t¢¡‡ØV“\3ò¾â‚c“挎ܶ¹ëC²œ¨ö vÕñ\ì3ýüþ~)Ž¥  ^ÐÛj§ÀS*®^Où^lE¿”îw'ÔÉ€_2b^&^Ä^ç¥÷K€žK?±œ¿9††8v†³qã4¤‰~Ih?ö¥.áõ@õº„èõÐ%¢‡.qsºD<Í[”ˆÏW¢„á|Š yhòœ(aTž¢äˆ•‰’ÃÖD wÀM”8N”í§(!t=D‰¤à%¯²rG%?Ï„×í· šúzô!Pì¤{½ÚRáÖ‡ãÖ´šõâ:h÷Ë@¾V¯Y-é~Mãl?* £ií´÷GûE[ßÛÏbd­7‘ÿ×vó?½k9ÐuU¦µUjýÁë®ÙGë°2Z-Ǹ¶¦W¸Ÿš(×o.®ß˜úú¢ßTäÍ(—ÇÀXdeäšÍ"dvØY£Ñg_]e½¶>îYÎÖ~«×XõÑkxS°Yaíö"#wôu»½T°l|Þ8#þ¤±,Xc­ºZ¡ñFœól-ûyþ™æ¾œ‡4Ï©Åì-¡ÿ<„Ët¤?96 +œ„¼ÑDò<'‰ÿ/ØôøÐÐË…þäØ(p²ñFŠì76Q‹¿ŽP÷«ÃéOŽ“''o4‘<ó“ýÅñ–M$Ñ}IÈ~uœ ;iÝL'˜ç™fUnÿ‚XŽS”¾$f¿:b†Än¦ÌëúYóŸøžÄ|¤øøäͲ˜U; õ+Ç~Nuž>zdÉ×¾]jàøùä³A¥h®\¥4lûš¹G]–ãêÓ>P Ñ$Ÿœaˬeü +¤Uçß%X®KG2?›9Gæ±ï ¬³"1…`m¥_wKl·»G=â>ƒõ‰ûvøMó`2m+S|C]3ó·ËÐh^ÒDeƒÄÛ{ö©êk¼úª¯éêS¶†««ºŽV_ò=Z}É÷hõ%ߣ՗|V_r­¾Ø{´úb¯ÑzDΓÕWÚ§¤Ýçê{õÞöÏ%wß]ÕÔþÀ¥öšÝUxJW¹WýyŸ,ºÓàægTEàtD•Œÿ$Šò98 +ý¼þMêøËyHkyù½á$ çáQà[SY§@– Üƒ€âŸÄý£0oo>‰Ç¸üg mc>:o¹”ºùè¤r—Ð~®=Ìö\:ùäª'ÀYÀm´Ȇz©aËïEÓ£Íí[4òÉE#ÀÍ6ZˆeÎEÓÓÚßVñ*×Qº@÷j”Ê4ú…O7|C|ž‰fç˃£˜p]yå`„ W87ä‹‘´ÝýWGÇŠ1^šlÐŽÏ-'}ÝžOçßôÔ‚'âàȵFÙl¶°Í¸ùµPáRÁ\ø·š§jÛDknÖÖ£JÉ9 ,a˜êÅ•ÈaÓoÍ ”L7qʊڇ͒wßî˧ úp:ÁÌ· ­Õx VŒr©tQöÐäEïu‚Hm´‘ê`¨G¶¬ûM$ 24ߊ­cÆÍëÎJ¾º–¶Ì˜«žÙð§’ŽŠ1cÊdóÎGÛ5?Ñ WYB6+n¥e‹7â?³ÌÁ,×–VIYK9BîC~ŽZ-kn +¶ª§ïØ ñMâ”[~ùdÓKÐé¿Á’æÉüóï?´8PŽ/k*ÍlP/KGýåwÿû }äåúŸj’ðÅ`†Äd"®Óþj+ òå<â錵cE‹ôç>Y¢2ü`ëŠÖÝ2smsagç&s"Ÿ\Hœñl£…ЂäƒÆ{Ñ䨳ü1 õÕÅ´°3¬ÃtÙ”“9DgO7ò=‡ˆñMjk*uŸéGý#[v" k³M+ˆ^ºØ +˜‚“ æ`õñgb$aý‘ôGGOÚ/¦¨ÆC ‰:ù‹A‘ËDú½×²ÐÖëÞIEê÷ú*JŸÀ¾7Uúg¦æ¡ +kãö)2`šÛR´>@“™ŠÔ§&áÂÔØ)+vúºeB‡WD¤þÊÏOºdú)Áà~gÚ)ΫíCGêÂÔÍšf &ú`°t `Ã$ ãC»10dÁÈÂÀ"‡uªÇð9¢"¹"²£(ã()å°@Èo›8¤I+WÏœ­hÝàÄ`0w- yMî˜t̘&M/ŸZÊFM’ooÙB‹}šCøne­`Š™s1‡ýp@çPá·ý´–Q¹ð-Ù™g4ºe‚øC‡îrG˪ñÔ¥m}~yÐçŽ&•ñƒrné›$âRñà{Jª¼&0bm)ëE§ ]Dסï9êž´C ¿‹/F+GhUyCh÷ß´²æ#têzÊN§8EÜxÕYÑÑÅ)P<#±Å°¯Ë–ßµ I|âQgEê +9™f׃¿Ã§wÏåYWT³“øa;hÇóCvs×–ûM‚sC º%hº'¨ô³#Á@Ã:aå˜lù9&¿seÓr TºÆ‘c ¢ÇŽUû<ã–ñžg ùžçLbý–ç#O+Õ½dûÃ?¬-çò@C¨üW±m²­\Ó&BwŽ˜Ñ²½å¡O`Nú†p𜤀 M +^¸ü8Ú\ÚCO‡YãæwuWsÉâN©(ÏB…‘WÛ1´I;¿à~Û¶ØHBÐuÓö;Z¨Õ’ðÅ— Ü´NC\Í­‰ÓbÁòjW%€Þ·íN^iÚ€E¯•+„nÁn¿IŸ¯ÆPéålÖ…)ÑÌYBkÜùêm,>¢•%¹K0ñ\`C ÍRg6Ã敾m5c4æ÷}ó¦c¿gìtQâ{)3\´™uÎõbÿ%5c=?ŸÜÉÊæZ‘×¢m[_`ËØI†ÖSÊ7â\8ö†Ü˜“׈g­1§êj/5Ž›Ò˜S¶‡­3BÐÝáÐ@ó]g•íáЄ²\?t¡§Î Ÿ¼<:¨l^g±›ÌX·\’H»ˆ Ìï.f••Ç¢k‹²õå¡®YùÛƒÈãk%Tþ·çü¼'{ž +½4/ô’<>YKñ¸Bo½ãk½õޝõÖ;¾Ö[ïøZo½ãk½õޝ÷Ö;¾ÞKïW0¹ãëíÓÓîb罪oûç»ï®öêÊà€éEJ]>}¾óÚ±ˆ}GL|k¶VE9RΤ±-Z.dÓü¼IËLjüg jc>.o¹B[ùòÑ­Œ=XeaÜÙêjÛè…<% Rßkÿ×Búg0­°­Žlä¼ +øÅ ÄºÜ­¸ÈŸÿù9À>U;Ù«–ßýï/v-O±GÌÈ soàpÔ2Qµ ”3°4˜†¢ŸsËX»ŽÏª.Û q«÷*ê²ÇZÅ%.ÞÌrªvý&ç൬`±0sªÙ,›#öŠ7§?—[~Yò i6m ±`8Éñ§$Cöú= vžÑëQ—R8ÓÅ Îâ äùŸy±\ýÄ •ª¹]¼È”|­×Ê-¹³Ê.^ì3/ ^«FÅ º—Q`ñ‚äö0KãÀ¯¼  _yAÂ>ëá;öð)È&…%ÿà…Ÿ©ñ!i>ÁÈë!§? ™9§êÎ3\OÊO ŸcÚ– 0PÜøáÞÓ0’E$0®’F)B>B€ +]'Vkñxºµu:‡­Ÿæ^z䓃'm£[Ú DpáŸëdA,­HÔ±o3‰ºâ¾–ûUŠ”d3÷¨SÙëƒqàÉäÇ “ F†q‡¢}è›.µ*Y.Úîd8uÉrÑv§2YNì1hêiŒI–í]$ÓEÛ®’é¢ýN· ÉtÑ~g«g:k¿ÓŸK¦³ö; ‰‡ÀââÔà³ö»/ͤýÎÖÊw£™vÆ£È\¦®Œ‹3Ó}®a‰)£«ï#Z®»ÓËXCÆa¥ˆOñrVt.Vh¾­rU æªS)ØTÇÇÆKÏëS C¥‚CKêÚ{ͳ D׺}Ý[î·±ÕÏ\¿')Œ&¿XØÅ1Ð +åì΋ À0kGwüÀ +~2j3¬0ZTå\´OZmŠêVTý)ˆ®½¾³ÍZxUbhüÎv…BÇ¥h?oÍ©EHPh}.ô}?¯¸ +7ë)Ã\<×Qüä¡]ú‰+Ëh?½^ÉàÁMn2¸S6&uïô-V,W¿A61ægÊ–_xœWb¬S<7ðk´’rrcÒ¼ºrW«7nL¦7¨Ã߸þ?”E‹4y”ûØ ÍÆ¢Ç.£Ç/ôxT;™D,K*—¶>cÚ x-¤R³‰¶j™Õ€²1cÊÀ¥îìÓø†fV—o„A“øý *Ù5xN(‘LÄ ÁsÖWŽ Á=¶•<ÒMQöôžìåâFÉÀª$°+†eø=ì®›ðJªa(’VsS°M=xÇŒ•nî«}­< ªº¢AHbuQä×aà ž,ˆ鳯ÛpÂgžŸë«3aÙ›y´í3·š8;<¿´M JN/y34 Ü‚ØÑ +sç!Øñ;Ñ¿ë…Zq'v\D«&êňùN¼8Ô¢uŸÎ¿×Âgd¡4÷J¹òP3¸¬Œæ¡KænI ©Änã!ÌQÉ(¾¢5pªøÅ#b[n˜ÂtúŤäÝVQ +fÛGMIÑ,]Æ3-hXñfjAâÅ'‹ag7¢X¼’ñ¯¿Iµçä‘’r J_ÿûïȆVíµÅIvV²åÓÿkÆ+–ÒjhÊ:^„ÉÞ†zÓÜJçžc4UŠÑ8«’ÐTG5~ËB­ ôÓï®[Àȵ_5èËZ,†‘- ´'T-3ÛùòÊ$Ãæ¦©Ø#)™9Z`­}Y”,œ?¢6¶7,IQÑBkê…Ìi•03ƒ}.zi¢ud£%äEKhd­¹¤h­t—æFké½Z?Dë¼hýYã5Ò0ðÖð_AÉæ~(vùv?ä7w‹7ühÔçç×DSŸ¡À–ú\aN&J€Ï¸8³/qÕõ°‹9Œ¿Œ:o9sT^ ë½D={͂kM4­>òPxØ=ÖË/,Ъm±Õ*YV2MàLK³{{EÍÇ6 ۇјDÄÃxñ¡™µðŶ֨¶k™œ-<ÒY““FóY#ñcÀ¼ô­.Ì'4‡û+ [Íâ,#ˆþZvƒZ£³M8ÓÚ’€É1Uæó´ÖßwÉêÞ‘Ô­füs똯‘U=iË¢a&8’õ&þÆ=ê¯&µœ¢`ªö¦:Ë-r—O<ÙvZIu"ÕÝ ¸I–}t©ü$ñ·yIwÀ¨ J‹0eߨKq‚ÁÅND¥0 #îˆêì—ÅŒ†9›û²…Ÿ9öYí¢¦Ìó^uÌËÀbª!„6š£K€­g 4ºÙ%üã$8jL~€§l,{AHqƶöÄÕ¬>û¥š=Ok°evtÙ<IJ@rw–t)l4-[qþâô6Â}õÇÜAe [7ŸÁâ.þi—e-õôhÑ·¡\Î5ÁkÞ}Ãâ}¿~X«>Øça@-ÿœäz¡„Ð<•‘l‹.O‡€›þ“öìX“`yf0A%á™eÃuã Ñ{C;²GCRgµ $®k€_ß8hžnÎðü +dMbö\J%øÐ© æuùÙ ÷-ƒF;ç½1nKÂ\=ù¦82gó}Ü…¹NpUiÓqÛùêQÐmF9 +5Î>ñú»¦€ÌÇ—®‡‹(mÑÖ ¬8–׊õóg‚òMî]–›\2¬$²"ñRRxº19UAVš +Š9)FƒqÌ;Æ’c)”Uä]S†–E"úËP¤'Ø êúÕáq‚Ä›iŸY…þóšÿ~‚õýÓËÒZùÌ!À6>N»6ž=í»¬@G6´Y +ÖtlmWK؇íà'äöÛ7«Æ@c£Q=pŒÚ„Ζ—NE_b¿¢þ9†IJ3uŠX©:ª$©^ Ú†%­:,ö„¬Nv8Ù³qP¸(ŠÌœ¤Éêá”7Çjm´)M’$JMd†õ–¢ë1B’ -5Å;g˃XYº¯¹Ðáñ5 ﯡä­Ê>v Y +¿¤> ´Zg m3l§¯£†ëÜ£†àQIcWð.2FÞ—fH:vÎC!zšÅ…ÿ$z„n&.Çíë(ä:×ÇÑô^E˜•!è¤`Áõ¦J›ˆ5Á†D×&ÕE‡)ò·.öÖ£2GJÕç¯ÑÞ1X¯WÕu{2pè=]8&fþ·¬Š•pÚ4¹ó@¸²kظ›¬Ö¶îÎĤ=bi£fö\ Ùf‹ÑÝÕW+š:…eL7ùÙ± +('®ƒ§èa²(ñκM,òLgt£õ‘ÇßæÀ¦ŽãÏdæÁ4v³ÛÊj¶ñu%7íVø.á¶éã½ßsÈsLôöeJôv Ïafíðã.ë>ÑÝk ÌÝ Þ²áøu„/Ãa„/³aÄ=ð÷s2˜«}ø2ö‰¾™ÂIæx–1,_øÅ" YÒ˜œ /”-¦WLé͈_ýhZf~‡ç}›`ÁÊ\HC ÎË]j%—í£m½‘ÙÖày{Ò¼Òú±ØpUb&Ö\¹pb[ÖØø~$‚\9¿sb®çyPwQÀ¤JޝedÊ H—úa„µŠßcžCØæŽY¦]éí3é«/·W»NPúƒ[Õæ4‹ëèž: XÓ§ ¥§ZfD hÞkƒÒåLc^C¡Å€ªÅ9¥ËDÝfu Fi³Ø_H* :UJjø‚,yœ ð£ÍÌ´ùƨs¡)Í`ïb*X«²ŒRå+ŠÁzo9šÆt*ÝEïö¨#ÌKQêÕˆŒò +ñ£Qj‹Ý0’f‹%•¦X 2±Þ¦Â„1o1PÊ!1@X]pQt_â8åz‘ñµF(ª/JÃ…`´Â÷ѱƻ,”%òŒ¯q-3Ø6Ùβ€õ²0ì5Þy ΀TY> ÎÀõ[yb¬u}ÞC#•EŸ`±éã9l‘ÓÏ'Bø£ì®Àé´-·mGJi½>½ ܰ;Ï)û&mPƒí–ÄÚ ÂLcʲwí,l·÷)Æ@ÙwÖÒU˜zû ͽAÊ »ýA˜Nƒ‹Ú÷–Z®à×!LVv{-Ì$=iÀÈ Td)†©b¾¼R³‰©‡*F‚ɵlßÖ<ªéqb­É ì¼ø'-C1 H}$$tŨˆÉ°e42¹Föî47/™ßÃ8ºVtɶMù™’C»]& ׊Ð.üZ á,•jÊÒ®ÀHÚZjª“ÃŒ‹v·qÕag•؋Ž€«V¾ødÒ7l„X†Ý…AÆ °ÞtŒöÊ>ó£|JÕ”k2LøÛ¦ŒX¡iá"Q,‘½» F?;¯>Þ|j"±¡mÇÏ”%Ž£4ò­{ׯ¹±ŸÏëF¾hå„kÓ‰IÅõ~hüÁ¨Ãd&*€C£É§€oÈ’ò‘*ôZäÁÖy»r·ïa8¤»ù©mÏ õεeY`ÖÈà=­mÏ=xxú`"”4ÀN®‡UŸ)CrUÙ$Œ¥˜%¥Ã*&âQc•)Èñ^N$Îkh}•Vî•0·c݉·mmíF…ðè¸1!X{?¦Ûʃ§ƒöăL¼± €tÛwx7ÝhEÀ#ñS¹-»ºy¼ßu¿~{‹ðˆÿýñöŽ¤ÃÆŽ¿Ã4 :r}Ä,æ~{¾ý¥þõÛß>Ï¿ü›4'BîcÆí”4{ãE°9lj¸2&UˆJFîôÃh–6n¸ì¥êˆå¢ +àÄ(¬/i”QÄ5!>zÁÞ5N#OÅ%ØC­Y]MKå(hú¯>ŒRË)Vñßnb¡,o3>UGZ[’;Vš&ý¼×H"jäÖ‰Óª-ø³ VíÌaG*Hqŧג²€2ñ9®I‚©¼ƒ“sW©:æ.DU„WEeFKÅahKRÍ*#ÌÊÀè G´Åž‚¥Ò½4ªŠV›8bREM&¡3m [£ÓG´ÉX +Ü'ZÖ¯Ñx¡Sõ˜U;ÊoDøÿ}ï0 +F&õ.E q¯¯Âß:ØIÿت~Jv6¼Ä` mLlS¤RL–ÌæBÑZ8Ž2´ Z^ŸoIJTŠé,Ãê)*Ùf úJ‹>Ñþ¦+حȲ=)àX5Ê„£fqß +p¦ûôžVciKÒB,.Ë®Ðv Ñ¡2ñ ¼>žA’ébd±>¼ù?‚±ÚpÅ’gÌõŒz².?òã%]&gŒŽœc ¦|­ŽK][Ñ×ê,UÞØiã1¸÷áJ×Fä}"q]b²_*Ça²‡Aòd°œ’†ýIy•ëX–Ûм¾¢B;¨‚vé†ÓpÃ0`ÀÀLcÿ€£^2ÿøP\Dé¾é*£ƒ®w.EQ\É"›Ñ‡Ó˜e„9ûÉ3s;”¢)ô¨Í$ÞšI¢> +½,3çB:+°ÍNF€lmp)JÖAÅŸj™| ’O±q´váoœ~Ä€"Eëá¡Ò«tS¦Ró”Ã÷ ’Žíµ}Å.05jm‡ìJjW@«$F Î7ß:/l!#݉Û&1¾±FÁ ˜SX £i2™X¡¢ .Sˆ&wÐÖ„6ä]°ago¨*w!#¥n]A t,ÅÄâ‘‘T¾½Å¨¥ÈÖñÃ>^œ'jŒZ› -;8Ÿd O +%š=ºä±É9ôerwè”pó÷Œëœ±ô3ÿGÈIZw¿T¯­˜£LžOë•¶ j&õ˜KÕŽAÓ²*Eº +–¹ó›²LãóÿQ¦oÏ8å^©o‹)¬Xß<§XUî’‚+Ï¥1Z³±4Â×Yáµ# ¼90cŠ(Ùøý÷_þùöËß0#„oÿø×¿_ýþûÛ7±;äÞÅg@Y‘ÇTB™¾Ð/(Ãg)c¬{'z„½bö‚J`ÁjS¿ 6ïIã躒üæUg˜Áâ…(>ùìÙtªZ ROk„öÆ(±áB©ƒÄc\oRÁd”mÈ–UÏål\Ðo/¤©ÕÉkßãeº­ìè”…ïêÌÚq4JPÿÆ80 æåêÕÝ;æœs½ó9…X¹æÌÒçDÝ +©óÝAw+ Éó +4o~2v°h Sû­éªÍ~ÓбR„~÷-‰üe•«X…0HËÖAH¬·@¦,{»+˜¿¹wÃn4õìóÔ‰8ªÔæ…vGC[ѱÐ$‘"”÷]B›$÷Ê)ŒR1hfK’òa(}pt‚Š‚šÞ#Ç+“žÝ@OâÉ›ÒÞÛX¨šÝÉ¿}Ÿ¹ÅvHÐ,}ÓVÓ{îûµ5qŽ«eø}…›ýuoÕ³Î)zƒs3ÅùXLv±8ƒ6#Y’ˆ­@bì«O2¿d—æõû™:“YºVµå&ÇSsÌÝÒ{Q3¡%)ªìLh»±³—uµ44E¹óü¼q4ÍëáO!W8{ã¬YLMèucjÌe¶”,•¬½ì"kÿžÅ×ϼ·»QvÆ,@Ñb‹ $<"íž”êÍˉ éj+ÐqÝlu²IºÌ®sLϨ̯qBËÒ@«?Õ=É!]ÖÆœlp÷®PÝo²Z¥Y tÔ»÷—¬{½èô¹({w. ½ßqÔ’ãR+L‡jŽÆËRÄ¥SB +ÜP¨2&¨7 3¢Iô›Û"*ðº¹8VŒéwYÌñE£‰aPÐö®›a4TârÎ…ne/wOC• ÃÍ£0~ãn<±ßóhЇºd¯4õ3Ôú~œ`¡'‹{h>—ÝhÔ5Õ@—lxIšÈÈË­=kú•²\sx a Õ¢¥`e§¤€l´om!ô“Çc@= ¨[ð»ÚÐSû^M€´ºÝêØå&(mÆîÖ ¿°iáÀÀÜ÷‚ÃKÔ;^°ZÞ{umµ¤ýN+¸kXÆ­zs ^—‘œi J›ÜZB4Êr¥ôI¿¢eĸĒ #zh;é8Á5a{¥ÞýÑq¦‘žš¤ñmoYâ‡éžBy°…î‰ÖDWœ!̽Εé$¹9ÝoÂÎpß0°8<[0z³Ú”Öæ¥t„û˜Ò“%ózP»¸`ük€…¼=¥ÇmØÇP^ó¡½­yL kå¶­|¼´öžÏD¬Ý¶Çµa._µ³v :n¯Ýd×M”›ÜY»ûÛ—7$‚:^þá×y-ïוiœÆ”‘0X^¯?/¹þúã¿/ß¼às/)ÍCH¹ÙQ(9Gž 6‹B6,µ"|KÑ3qò![Ÿ*Ñʺ¢6Á˜ó¼4™kI'aQÝͨQØ«œNˆc¥›`‰½òé²L¯=PKÝ%ÛhñTÙ[NêÝsF†h‡Eí)™`kððùÄZSb^;8ìxje:`ª¥È»Ëøx^–ßÝÆy¥ƒúÜžXrï·¼ˆA£ µŸ=ÌðÙî]€>cG¶Ä¡Xx‡ØðBS"’™½V¦w ›ô7#±ÙÕN%*)Ý.×üýðf®´tZù[h¿(Gôø·ì:Ác–Àv;@¬R‡4ã—«î/ò’úô¥Òùh]¾ySÍÜü~Fˆ"^ˆõ’{%Â6ê1m/ÿPäðæ‡—RS¹ +`f%T|ýã?/žy,Á0DÏ´‹qƒÍ“ü⳿þýrNîAàE§8MÊ|»¬‚—tª¯“{T0:þÔè.µ²ÄèhF#gÕOõf‚Y-"€]Æ$€½•.Ö¯8bÝMÆÂ)ð„%žt¥R©Ô¶&§ŽY´AŒ¶ÜYeÆÑ ëŒ2ár,´ÓöA£p—’QÛÑ]ªÜ¾^9Þs±ã¥·¾‡Æ™äãÅ]©¢3oÜ“¡.»všÓÉ™ª·µLÁ(,yýp%ýà& +,öÜB¿T(Lf$Lž›i¹M}Æ6Éô¬ÌgÁó±„Õ4o¨UÔj#Mu=› AèÈòP²¤€§_§¿EÎ,†ë†\k/ƒ‡-ªØ|áLYÐ羬Mžì«Œ¬h=­åÃH;yn¾ÆK†._Í\VXdûŠiI±§aNQœæÂ ,„=ÌiRÂf`}Éå#̤îZ1%ßJý3°²BÏa¦¥…ØŽ0ãØ“ö0+á³ù™² /øR ãY˜í£ sZ ãÂì% [¥k +‡í?™1Éoéµ£Ëäˆ Ä[FžïÔ÷ìëãj‘FRÃH;Å’î:$£•‘%—FØ}ééŸÚ†•âé4l²-`¶ˆÚ|OfÊt„~”_XFØ>0ü4f¤y+ͬ G`®¯ð“, ÀZo0X”d†³³â.é)!aˬ¾0Ãÿ +‰6ݨ¥ê ØUÑÕ'¦5‚íãq¬AW6 ˜Y1À¸.k0l‚x8ž¢”D ¡‰Ö裚2Æ O:䀌'ræà\Üq yVnµ¬KK±L¬%¨ð»H ’¢FÉAÞuîççGÚö§M˜¬ï­P vðÏ4csPל3ÙC?0QoÏû£µþ½s°~d + 5l2)É|ƒÁ¾&Òß`6(‚Á_S¨Ê©<Éxq„HSá$¦¤ëjeÛC²ûÇ ™7̬ީtw¹+R‘îúFCƒØ2Mn]È畳 eUN㎮_s?ÅCNy=éÄä°Ïã½™ÑÔ ¼4?ÛtšUòXïVÜØgnb ßê ¢³ž†|+Èâr¨ƒ³ù +6C£«~ØðrµY¦™>l{èé‘ÁôqèÝBÏ ØCn\ƒåºK‡úؼî\‹é»hDŸÃU]ÕÁúÖfC³š\ÚgɺÁ )mƒ=öJÃÏ}iî4/å-˜7ꦋƒ0вwº¶üœ¹è߬ìí}#¥œ._ÝÌÞê%ï´v8#o`IžL/k¯B£iínVÁ‰ªú oÂÂAÞ»“÷®IÌç™ÝúùvguãÇþyÛWGÞ~žWò¦Áºäí°/DÜ›q#ošåÓAÞÀ›‰ÏÖ`äMXÙÉ{c²ÝÕ1)»ÂÈÛ­K.a¿8È{þq†6¥ƒ¼Ý^aä½Ë1ÙÎØäí½î\5ºgnš­ûÁÜn¯ZÕ‚‘½yæv»œ1·‹½2·[匹Ý*7C?#Îs¿FPít`$éõØ–Ö×ò>w·ÿQ^9r„0Ý÷)ê­ ¶éD‘""eŽ0‹HÑÌ&÷_ähj¤)êMÕk Œý1öû s.Wßaoú_èíòqµOÛô,6¸2{¦PͰ4 Cˆ½ev@IðÃ÷'ê +H«+BNi ÿé:Q<D¶*Qò ¨S5Dˆ,¼_y syChK­ç’4× +Jÿ² sT´´¤e.$lT/sÔ0y\½/[ÂÁÕ9±e´Ukÿ› w4"Žxüýý Äq$}´au…xzÒçþúÎærõn­ñ`§r#ƒŽÍR0ÊËÆIÄ]5˜°¹#2€âöQ^ÆD8¬ †±«]›#íü,‡Eµ3xeƒË]õTl*úË($¹fz“hÔoPjE%Ò8'†Šð{}‘NWõ:Q¬ôdM#|~dèH WÃÛÝP&ÄùÁ±ä7™[ž5YÝá´AÎýâ¦ÖéÏë]­Ü»ux8Æ {z¤Õ`…FI`µãZ•Á-Ro‰i¬”0täMUáu/uHPÌB°ÖÇÄhUKA9!A³e¯`•*‘"JVkå.ÅÐZ¾WOr˜ŽÕKkÅG5ý`kdéºöÃ÷判,6t·à,ÐO=ÊŽáØóûÒç6¦ ƒYú^¤×ì¹zc•OîußïbØÜZfEü³b†L>^<ÛŸ9¡MÙ jÍýñ²CeÙ¼[´-Z ý—Q¡ë(3¦«0e(¼ÝU†‹iÉËT–K“¾ËLc\j5‚µà¾\Bá² ‘¨êIˆD¥ž„ÈÅZ ² ‘vt= q3ׄ¸¶tW +“7 ^.ßžoÇåéçíxz¾åãËW¼Åƒ +ƒ«Âñ?: ’Å3Ztü}¾]ý5̇WKòû_×óĹà+Ë{¹þ|~»lÙúÝ"^û,ÍÍê †4I +endstream endobj 1545 0 obj <>/Border[0 0 0]/OC 1547 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1546 0 obj <> endobj 1547 0 obj <> endobj 27 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 4/Type/Page>> endobj 1548 0 obj [1551 0 R] endobj 1549 0 obj <>stream +H‰”W[‹%·~?¿¢ã‡Ñè.5C¼ë‡lìyK{³Á9€0ù÷)]ꢖædÌ2lë;_U©¤O¥Ò×/·ç¿¼Ûž?¼ÓÛ×ïßm7½•?¾=¿¼èÍl/¿•Ù÷ú~g¯² ðaCVÑ:øz9o¿ûý÷/Û¾ûÓ‡íi»û¿ýòéø÷¿~üøó¿xù ?§¼÷!o/ïR¿ùù†ffúÌTò»6›V!ê”anß ^ÝnO»J0©}3Þ(Ÿ·“ú¸ßÊL³_ Ýê>ù¹ßþqûáf ’.±œ‚„á×_ø þþ¸ÝlÔ*z ³2A·Ð²AYôÂð“É=Œ$GhcjÓrÅHÞ ÇçÉÐW£1Ô˜ŽÖXƒ;6¢<$ó`XæÁ¨Èƒ rš•pdÝñ¾Ý¶m÷ó_?ÿüøùÓöå—~÷~‹ûöÕW]£†w_Ã^è²&$uv‹™Þƒ…h Qµëƒ}W™ +é´O•=¹@6¹Y²œØË™Œì–û5ÛÝc¶ÖeL„0¾ìC ¾l6ƒQåä¼CaÀ¢ëìb~…àÄF7çÊEgÏAÏ•‹Gyk)1âËT,ƒéîôj·1D î¨):ó +Á‰nΕ dOAÏ•‹G‰e’'¯ˆK‹erñ•E]³Ó¸½ÌŽ‹í½²ç çÊÅà 3œ­ˆ ‹e‚àëE]³Ãe{‰Û;±§ çÊÅãÄøˆ¹ZïaaZ…?1I”\wåç™Gȕڜ+cÌD:'ˇ%‚7ÆF•€ 7€su™mV&@C­Lª·6 p€I9ì ¾‹ ô3Ä9º$“ÚÑPÇÔÖ…A¸ô©ŽZÛFk&‚nûïœï×øSÆ^/bŒ¸ˆ&XµûXkv¯Ø¾)­M‡°ºw^R)·.¦È#󡉻ˆ>r×y€Ø1Ø$—ìAŒÊ{´ÕƒN¹ìž$S–*&í^a#8±Ñ͹rì)è¹rñ0¯Äyy4ø‚k¦ô}ž)Õ5B#7n2¢¯üÕœçØ\,¸]¹Ë9\Øë|\ | \í¹œ38óy¯ëîÊî{zTæíÊÛ>ë1r»ƒ%Á wŠ>òÖyCy@5°Ëa+Oâ‹@èp¡ÕL¢î*Âöû5›À+›Üœ+==W.êmg½ÁëÀ†ËnC¹ÖûRqÈt4¹À¼ÐÍ’}ÕÝô\¹x¨;>G¾œÒ‹F`ìJ#È%\Å>ÙQË£éÄ[F—ÜWòàý)·|=xƒ¯ œÜi~ÄeµOæÈí.Ì1—K¨ój*ò×8þôN‹z‘òجÏMxçÖ[X<7Ÿ¿ýAoŸ¾Î•¦!ÚÞ4(W­ÈÑY4’+Ík% dÔ‡{#Í`d€Â¼©…4AŽWFÃË +Mi2ΫU_®=ª}/ڼщ¡NèrÉ×e½švb‚Õ®È;Z£ŽµJumäny×ÎEóÖÜ´5o‹ì•ÖiÇ4½uðM €,4¨¦ö{ÍÇG]ç¸Gm$‰ v5Æ;úR·Žç»åk@H'9méS (I±+¯Ì¡èÓ}Šåwð Ýë|L‚N°Ä CvWÐÚ°]`d•÷Z[bàX8™‚£@‘ç­³ësh €´²àÚH•™ÀÐå[ðboST\™zrYXZÕzˆ‹Ú<Ü®¦@ C>C‹· AÖñÑn4ëé÷6¦@u"RØÉR{J5‚¯¡ÁÆG5ÒÚ‹ßûˆ\ý†ÇY›V;v§!½‡zÚJéw!¼’¹¼†²I]ïƒjYûšâ+è*gKñZuC[(®àvChõ .aôªx3,µ'3( ¨d6ÀeÜÍpxÔi%[D/8IObxÈ™mh>§6Ž;O‡m»±ÚJŽ€Ø“½Am›O›x +Plb1Ö½ + ¬·Û›7m7¼:ÊcWÞËQAE\ÝõÆ>ègá©blîìÁÁ‚ë½³©r'Ìv°@£,&ó Sjo0î<,¼kÂE‘Óµ—§#,S…” ^kÉŽª1ÜJPï¸ÓX8™‚U!H˜ª1ô¬i«1CTeÙTTcˆ —âPboSÔ±óúòãÆ#J¿n()äüxH ’¾†ˆÇ¸Í|P=4¾f<¨ÂCH†|T¡+ðq<ªb_CÄ£wÂÙ_k3CJ»¸‚þo]6ÖóIMõª\µ±¥,BË‘«C—b9Qô×Lõ¡;éq=àɈº‘ÛM*x±·9ꨳ+Ý–»] e±K#Ò@è.¡½w× ›2øŠNÞÒæóT‹î„Nšlr`ô5ÁŠr®\ü6ÈÚÁ¢ “OP/Ëɤ7íÈXAE„µ@'Ÿ ®<}Ðjo´v¡Õ®ò6G½È7òi{|Š'Pª +ìU5­å‘Q´M´Ù$Øo¯qcD+hبÉ=0ÀCt0‡)Ù3ê•Ý[pXÄ’hbŒÐ_®ê‚{h0ñÇöM¦S€ª€yι¼ßÆœ©9±QÏÙÆ^Nûï4Ds˜1¸ÈÙÖƒ•ÅÄ ©i±QÏÙ©Üû7šÎjX wÑ%gøLû8eBZNdÔsé…ØGý›L§cXÎ>ó˜-#-!2Âluy^õÛ7™NŽuaDå“$àɈ3"yF\ƒÑ²ŽÚP¾ÿŽCr0‡Jy¾ž0B ÜËÓÖ†(øþcýfÓ)À 9‘3É›§ŒHˉŒ0gRxÿ‡ä`39£¼y∴´8xϹ‰¼ÿX¿Ét0(OäLòæ)#ÒsB#̹‰¼Ú7›Nưœ-É›§ŒHOˆÂb¶UäýÇúͦS€µà +þ ß•9ÒŒL ÛÈ–™lÛ<9åBÑbÿ†h<»/óa4¨ZPÝïD‚p%O6qmž¬rUýw¢ý¤„ŽÊ{Wh°>Æd‘Ë…éʤB ÁœCЈ8e*kÏ@’‡)Š vP4SºÝÛ"®ìd²çÐ7ß_€^¦H¯T=#/üÚh<ê á`YB}e›‚©ôœ¡—¥„mS¡)tÁúÜ©{dG¾Óæê°Ñaèë¡À‰À½eJ7.»È2í¼KºH6~ÜEè²ßðÊ(7rYŒ*œúq60_¤D Hæ R™¨‡&¬»ñ\tH¸£ç#%Àÿ1^í¶ÎÏ(ö +z?Fp›z0Ü‘Oß?Iñ¡ZÕ4ºÖ·)’¢(ŠüÝ j+æZz¯°üŒÓ^(# f½7€œ€iõfùPbè43œ ÎÑB¾ð’¡¤£dùÑrBì;û)nªˆ€5UÍŒŒ„h SY¶ Á:Bª‘8!âúZb ªG‹ïyŸ â-W9%çZU/ŦD å¤)CF †]or_¬Ì†:¢ +ùÀVfÙ]ï΢|È<­¡Œóa©zG'çAü¯îL䃰:ÔÌPú]A>!E”Y?¡EM” qF +kmb7ÓsrjߦàñVº®Fa9a¨ÃJZá»Æ56QÃOp4¯Ðc˹"rÆêÎâù¦çä@”.'¨7‘ +JY|0«•©!ŒSàöˆTÊb»˜è¡œÊôã ™Åòæ0 ñ¢7Û×ñ7ù°^ ^N•ðoWò0ö>Q’žÜ{}Ú~iÏß:.töÎY• )þm°Š~ Ûh8»]£â‰7æyÑŸo¾¹ŽTü¯‚ÿ@3@ËbF+Þ–í0 LÝŒÒO1:¨µô¿üÃŒ"yÚc§ +¢{ŽùL´èǵ[—0ôøG0]Öc¿ +*ôܹiù¸ö솂ÿPÓµ]¡–- ?ª„úüŒ;¶¿üÃŒ¢¾Ïý¼&Õù÷j À4øÅUÈœü}á}šVnøtÐ|Ñà +xse+›ì™Œ×ó°÷pc$u£¿z£¼PªåÖ—ªº11Kš„}ºŽ[⦧æ +ÃÆ;~Œ©û†t‹²Êc°Ð÷^10•DK·uß=*\úØ}@²7]¥[_Ô@‰1À•DKb½PÁíx„pý[¯jJa@À̺d~¿å-œ”èAÈ«ºíÝ> õ6(ç¶Ã€ùöA¾ßÒ%JÈ£ÐA®ê¶}ˆ§PŸ§`h¾j.¦I¾®¨€Wr[º­—æÖÏv¤ ¦Ö5ËgÏ@Ur[ëƒ_u—áõ¾QkI×Þ`@]«¹/í^õqÍêäêãr†\ÛÃêÃ{Gáš«0 ®õ=:cï FÔ¹¸ÔQÓ‡E½—m]!A RÛñBŸ.C¾UYã±´»!ÇmïöÁ#±õõqÿ ùÕÃ~¥}|p¡ƒ¢ªh/äf]4å~TƒÍûvÚw¼AÈ«ºíÝ>Ä*%—Á`@è`çíƒ|Ç;r ´î*eßчxElÓ~ˆ†ü¨e]ÌÛ´ rU·½ÛÏÛ´¢!?jõÁóÁ6…rU·½wœKè"¥±Ë¼FÔˆÝ6æUŸ 逡ë|)¯¼¶Í(úThµ¯Sò&㤌˜¦‡½ßdEÓ=7*<L²'ç›7Æ 2‡ ¨¼6íô¬’/xêyÙLÀ@T-Eë»tëò¾¼÷ü¶ê 0&“˜ àJ¢¥ßÔl…óOw¡Ì3å®ñªzJ¡Î¹@=e­‰f8ªÊ>ü)m/CU7!3ÐÈ J„°VÂ…¸p[êRN\×Óêû±#¹|²£ÎmºÓÈèQýôfvõYÑï¨çÓ¢x"GªÓ³–z†ƒe\jnGí¤’ö¬%Ÿa!rU·½Û‡¤½;ˆ ʯVoäûÍëdX¸„Šª¢½ß¥qù;iŒbí„wwrdúAî÷Ÿ½ï69”äv.\¬‹ÿ˜Â‡—ÂAõ§Î`_¡û…w¸R$]ŠÂ—œ’?#ô«rF%‹¬2(×øwÿó’ABÑ¥(|½ï.¼R3óC‡.æêB÷4è¯Ø z³¾TÆÚ·ÜA¦íiõáLÞîL™m ‡Í×(g‰3=µn¹ƒLÛÓêoR7Ø–È„²Ö7RãgBñ8ÅïÎã +åj©x{2Úæ¯ŒWž„®g^½^«JKF’cŽº„±i$á|©¢7{ƒ†ºå çȵ=¬~A+Æ,#Ïà~CG—¤àf¤k+t[ ´øÔU뼓µpp=ùåU’Gïz…?à.àöž¾Úçùþ$`Uµ"ä‹¢+…XÀrÕ$©c¶#0²hkWð€&¢vj篷ðä±µÁN!§¦o6×ôH‘ŒÈWéY­î¥VÎ5¾# ˆ=œüTÁêŒè³”ÐW:ƒi­¯æq¥Æ ÉÊàábHWcbcêþ}Ð9ÒZ¿›ùŸ6ÿ<ÐËø.AKm£è”@ß#@s•á“BIÑ RA*Êœ¸si§™†¬@“r?ˆÿA‹3›Ù´7Jí9ñÍ$RËÑÝ2­ÒmwÉü n¾YV™¿Üitq@§z!sìwÓªSiËÃ4)fJG«¶ÃPÑÃ/°¯0ÅÝFáô<É q7­ï3ɃK¨ùŒÔ› ݶ·(ÉrÎ]ßY âé€mnRZ'C!í¡õ}w´7&U\”P’âfŒBo‘W:q‚t +i­ßÕQúÑ–…²”;6gl¯è"2m2ÖË!;í£†ŒKÞÀ Ô;÷)ÄÈ ®t&.³Ýˆ]Â*#L:‹ò9û.ÅXdýáÐQ £.i:e`‡Ä§nÍ€zTI®¯¶nUr`žþ÷Q(iI}æ“òÀBâS÷­V<ôZzjºü+x@ùµ +_8Æ·¿ß"©NÞbOš„ ›º÷õù[ÊnCnûQð¥¾Ê)L¾Õ†6¦jtGLÐMÝçÊ(?9?VÚWÆïörÞýýBãÇuó»Hïõ´å+õNùä6b䙨ü)˜ª®+O wjô{ZÔ«P?D„!s!3ƒÐDÿ~p¥]x­V\؃Ró ´s¬ ­³ÿ¤‚IØ€³IêÒRð€ð>U!g5{®lc‘~‡œ‡¾÷Õ!BLöúÃ’¥×ÁʯÒn b3ò %qéwÈyèc3v.¡ O™&^;ÒZdo&û|MÔa?þ¯Ÿ&à¦ã¢v®ÓX ÅKÇá㕸ڼ¦Q¸‰#.æªés)Öô/»^nô‚ð s£6MŸ¶>•$.£"yyR^y£Â’ìòHûÕxs{2ßIyÿ³Kãοi±NÎgÑ<ü¨l¶‹‘)¹—{ªå‚ñE²äÖ/Ùbß.ä¦IªÅ1K˜Üó=cÈò!´[Îä6îIs@.ê¦ï}æÑ8²Ý4QðyOÖ³qŒÝfÞáPH{h½s´hN·öw†`=ÛÇÄ|¶ý9}ßLµf¥ÂLáZ Vš|ñ÷Ï™wŒ1ÎÎÕùAgÁÙ¯¾b^l¦p´úÒA∋¹júÆÍîÃkNåEÙ:¹M@‰‚g¾Oƒb¢‘|Ÿ‚ž*¯3…» •@©2_tŸ*ÅT "ù>=U^óó/Ù(w8’팊×FÆ SÜSñÝ #6^‡KQ2îvtÆFK$b#ß§ §Ê·§ò—µvÛ Ð!÷vçeDdUî›ñù<$ÜÔœª#^4F™k[uøUã$†rnʾ9qãþÃðåfÔ¼ÇWÎkí[g#¹øÉçtçÑ÷`Vêon=“:úØzè5RÕ]DÁ‚»£ü2.ýâ“¡¼Φ„«¦÷v@1J¡½”­]Áê(èS;½E +µ­Ý6B®šÞ÷ðÅámˆÚ¼Þ[ò£Ì9Ó 7B+¬ô ÚHˆz¨|XçáýÖ׫ˡ}šœ~ÀÁ}¢Ëw &ê¡òsîâ<9RW–§Üi=¡¯YßëÚ¨z€U,ºI*ÇYzË–…Ÿ0ï 3èöÐ*Mõ¼®chx@ÉÊ8X RcVçßC!í¡õ»Ò·ðtJâew¢ôsž|a¼Ë”Ô6Ì‘Ñ_­ b|ŽÀȉ{”`cŽ„¤‡>I5—¶Ž.v8rØá˜#!é¡oÛ¥}•¾HQÏ=þ|Õ¼™ûÜîÀÚD/ï#6G¬Ï: © ÖÀmÅ*‚a©*/Zé†z«™¡¹†Ô=cm!›3V8êÀp9˜Zªs +FÈâUR²ZªY\8ƒË£Y®MÕ¦šL\ÊJ7æj›·Í9…n`o.M=FßXO©ÑjŸ£žš`T›ñÖ„ŸŒU2ûš‚b¥oˆ;ÄPžk³ÒL†•­zU$±#j„zš´2)–ìi)'5—“‰“ +adš«uÔÞjk¨­ç¼¥ÍºZg7­Í04ç±­«&/Ñv?cV¬LÄ[±±v8±Ñtµ¸yQ° ¨^$Ô¦K‹öËæ!N$,ÿK`æ2Â)45)éC$~Ø¡™½ª"”+SaÄ—!]ºòð‚C‚52 ¬M08Á¼çDÂC/0ÎléW8Ú¦#ÔŽb-Í¥XÍiÕ ˵©y|½ãz£©XÅ¢Ö—VÅ” +ÖkéR=cZ#Ž™Æ˜ÓC0œYB€úØPiI Z!ꊥ‚mŸ1Ê­ðS”ZEå1†XÓP õ¡I–ñvK1®‘‡\TS* sª°±É¨JVð¹’VS¬BÝ`¬­±6]i3wÆ0Ý:)†Í—½å%¸“a%³·ø‘VÚæ¥> ñl_(‹íF‚@†ÀY8-¸cDWÆ&e†0fÆP3em }¦0†.Ó¦aâFÇãj! /šÙ¯Ö!”Ètpjª·´EjŒq—›ì80t4Út¹Ö$X#›·˜ì•±”SÛ2˜2®$šeËÃâF™±¾<ÊÔØsÞ×êÊkˆòd¬.6Jr¤)ZyݯÁ7Åb,—b~,˜ßy«Â*/í¨ ,ëÀæ,eç£v·dæNGâ*ÖG/›µ%B׿ÐèM.«4K:0 +7{¾U!-ÓÆ`ìwóʪjä,âjÑÇÕGm‰8¤ùÜ•ÛJáæ¬kp@%åD©¤v©yÆŠN)ï A=D¤Ñ¼ôÕzéHj\¿4.u‚ÎþÆ®ëåÚ%"4/ÍR"GÖhÑLÅ8$Â,Ö|§Fï{“F*6([3/U_Åeƒ ®Ök³ûpÐpöl¹ba!ðê6VQ$FYÁôUFnKŠU¤‚bÝÆV£¥Â²J”V6*x5«>¡SËC½÷q„†–5rsÙ(ãþ¤QÂÒk“¼å&OÝFÉd¿-¥ë¦¶ nK qŠ*ô?Ûåu]YÁTÁz“b[ Ã÷¤Ýù©ÅKÛ +·ù&¨’ÈS†¿êlyå°ùµíÖ–ÐWj®¿þé÷$ÅsõTÙ3‘nbÐzA²Özôkð6ýAÚò5@£\c¢`Ä3i‘‚<šÖð Ñ¢¾} ­÷¶iMú£Ù· ;cè·†òÚn÷­k`‰6çcRãJ¤þ" À­•šã,ÑJÿh–UŒ;ó +,ÑH;9ÎÀ²ªI³X¢Ì9ÌÁ HÉé,Ñj+iGËJ|ü`‰v¼rÀXHë9X¢­Užm ,ÑæzVv°¬ªùâA–ÒƒY¢uYé -%•Œ–@K4#cÏÑRZOT´”æ)5Þ”|î¾õG×nÏìÑOŒëA»Å™­šй{lnåt mhó“ÜrYìIp)šv³(k,[ìÙøìÙÜ)« ®#È”¶ÔIägÖãF^7>mGAZ?Ï4Ï’)+^ýȮљqŒ˜n®u†¢±ªO·ZT2ʰ2–íYµÊêÅÍÍ…í(ŒäÞ†_ɇ€W¸–sd¡½Ã]6÷J>ìy•*t’7«_Exõ½4wíœÛ"C€Èöl)ü“Pº#«$4ÂÃ4ȳ…6¨S¶—Ò´1wG˜{KƒboKRá‡t÷–ù1°µ-qÉÑK­dÛ–‰…¥-ìØŠK`¤ èl“§Oa«mãHщ˱y½ÐetUL]Å<9î^ßè%â¬Rm:áfì ±•‘v;ÊAŒè¡Îˆ–Ï¢ÐžØ ìE¼i-¡Ñ3Ã׸—A|¶q¾3M¬Ú¿òQln}§­8ÄøÊnvT‹Ì~#Éž*ýæF¦ÙÝä1´:NËÔ{â†[]/E‹SLÛÉ.§ó×a`–~§Ï×gV_Jƒ_'õ ‡Ññ“F)9ì6Wê+dF–ö¡²ÒZš¶â¨N–&½2#²´Ý>ˆv²4­¿mdi§ÿP¤‘¥ÝÒ=Y´,M« ÂN–ºáûŠ–“¥´SYZø•œÎÀÒsW.á`)mä;WJâÒ¶¬VOžß¹Rœ•Óx¯z>ãŒ+¥íGAëÉJxw¬”ÆÛ<^VZí塦EO‚2®”9ÏïĆ–»¼º=†”6{Û¿4zÄX °9¶Ë’CÏ[¥mÌ5š½¶:°ý‚iû§$ûõ¾mÕiI$s®FÂvhý°øy¾’mm‚›Ù1ŠÀ–ió5 ¤iŃ-©Ñ6ßÛîQO9°a»NO¯J`Í·ÂgËò̾¤Íå᥄ȋ˜6hY³>Ó±ØYiHfE*Q±íµqj¤z’Ÿ¿¶–…r¨\çø'r‰2=}W“ä™or½' ]ðÍ †Äh¤?ñá3 Í6ÛtR×0èòÍžáÌ1HQ ›êDö, +PÛáÅSÒ:ï&$Ò%Y+`HóËÌÌß¹8¸ÌýÐOŒ# Ëñ·Ù~ŽÎû·2ý ¯5(­ñìj;=ÑÒ˜_ž2Ýxëô|„'æ/OÀBÿñ,ô× +Í¿žÆÿõ„ÒõÙë—'àž¢öêÛ*ǯôyB…ã¯'<Ñ~y‚Ðùë ¸O<,Þéc‡Œ˜£+ñ]#!êU"ú#é‰Uq$YüštEŽ&]k~ºË:UÚ xüRj±F•ŠayiªKCåVŸžP¹.µcýâNx×;f¹!ݹmE ÔÑ ¹(ÇFAVê†X°ØVgŸÍ§çÿfSË÷5i=íŒKî5IíÆ0iäVyÆK:½ùôkmßýnn&$Җ͵—ߪB¬û\ðnñûÚzr“¨®(+K!jf :Ó7“¬îÒŨcÀÝ÷©è¨¦¬·ŒGÈHÐHñÉ5’¢?’¤@jm| «’6oHµ-IÜbòá£FT¤ +…«Æ.YZeºøìö±Q“qâ9 iôúTÔN<½âÅ\€³)÷îxóÒŽfiÈñ’Ή^•)$QHÂd¤a³óîÝO8GìôÒIúNg³Kê^pÑ<>˜›‡ù¸¤Iž`¸ÏÕµ1“Äf.©°›æú½“R‡âÕÀeÒ¹±{Þ‰M#0n[m5¥æ©yrSRãŒ.U¥ +“¶Ê6ézãaþ’B :‰²-ý¾IûÆD=¦¤Klø¸Tï…ûHBVœÉƒ‹ò€TW­.Es():¶Yhk¥p³‘A¸6Œ´È·q/sûw¦Q¿þe»Ì‘$ Š ª÷)úCaH ÀÆ0C™û«<åWÕ Z—wn?3Âãź6êBN>jP +y{Q½‹?álàÔ4ÔÌiÀÃT¿Z2w¯¤-oެTOu>72gµóX¯™Ã3UI½gš(Khp-ݦ){:8+oª¢ŠN†k‰Ý +Ö¡“á†Cšúv¤Î5†y_6j +œÂˆ”àSiÇÖG!q/´Dûù^ô¹sÄ!úi<7<WESÀ!ðá| 2ÔFᑽE¥OÒ¨V¸²iwdÓ.Õ$ð«y ^(d¥í¬(0ø§Iu‘È!É5-ÐõãÒuì*ôŽUì–Tçg–)s¼-f¨ñ.vƒzãÌl!©Âñeô¡6 +‘Ad¤¢ø‰+!|¦”½V”aJ™’“#}#¹ ……„_²¤Ž€_îu*‰¤Æã»AWí‚‚'ì °Þ‡Isõwº<9¦zíÓuš0,qI‚rÛ1©ÕËÄu —Lº› â),TD·ÕVZ[3ü)&q™öâ”í+w¾âÞêÓî”Í ³ +tÛ6ÀF7IA´Mb–"^šÂé|•×O +P¡ÁŽ˜8쩺üäCU iGO¥ScGjöURI!®¦I}T?½¢á­ö’XÓ'k`¿ÉìË#é^ 2_‚Þ~U·YQÇ‹°KW¼»yÞÁ׬ü¨R»PJ»ú{.Üý˜Ô7aJ?³LÂ"©ºzùã€~Ôz, ÒÑ + `Û¨éöyñÝ,×tê :¨`ñxÝôY8«Eßí¾–É×+°©‰>íÂóUÖl!š¬*IhbÛ-‘z=úš F¶eA‹ÒÕ5*'G7C¸Vºç¬~ps–Óg´€>3 î¨ø]òÄÒ¬þ Hc«„á"€{|É=ÇÖ:ÖÛš„uó£ÓüC6M’9[í­ù‡pÖmþ‡“ÆãékÝÿjJø5‹ŸÓcŸg¡d~xéQé'–á:bU|wN8<”ݪmH4¼NÓWÝá׈8z—×nÁxÔžNŸxÊIi¸Ão.é„d†¦Ê³â¤°I”§qo(â$«a}ÌÆnï•NÒª>Š~06ì§{!UïV_«ë±áXµyM®#Ö¬\\®+%¯Ûgì¼ ØaÝN¦C?&øRÜ1E6h¢¶øäÛƒ&Æ\3g¬Àé hCÑKóý°•îóÎÈGm;ÏI¾!kžãl´â DŸ¯^k¾~t½fs ?Ú>±»?+ŒDü&Ý‘ÕÕbÙ¹e5;À±ÄWC‹IœÃÏ@Kã—…ÕÛ‹ë.‘ÃõJ«ny×û»vU$|1Ëæªûj§'«¶Ðz©=a5$ gÕPV¿Éª#5JGÜ…S†4¸2iu¹4­v;­Ö˜ÊuîÄÕgT1‚Wól“šÀ:S[Û¿b5ŽvJ d8B»4I­.ASe'µÆ05U;°uÅñh$çHnm©¾\SëcBל;j™Á®{¥6Ï +x=)ŒA¯35Àµ²ÍZM#‚_s5bé=©}Ô^Á¯÷™Yo ‚½y´WÄ©©É3¿Ù‡öa";·¥g\W×êîUóò(û;LnæÜºÝ;ð‘g)qy8fžNÀ¿Vië ÔÎ7¡ÀŒããË©±©½*·ÚzD^Ãël\úb\Ý£_Òïe +Ô6¬mü6v§Š#<4n +šzS³°ŠX©^ÚöÉÄ(xmðªhÍÈXñ\e#T]LÉÕÏõJ åêdÌ´ÂJùßyØã¶–çmhU®Cêè©›Û8„ÔÈ€Õ½9=´¡vˆÀr's;6á}ŸD9Á5Pež˜h;X'ƒŠq‰úõܾºã¦Ö¬Š£@w;q «9h4ÝÁ¬Æ½ísaC‡*TåNŒ-ÇíK(¨±ÇêĤ•k!Ñ8|Ã]¤µéÔƒÖìa¤‘ÅÓµ±šï ½÷ÐHícã¨0VÑÑNUS# _ª®©Òu×–`«òês}Ö{+ÆÐª×5°zØ\ÚÖÔÖnö¤}Òé4}Z#n¤5ŒI­Ž´c9†„õ;"«æ„FÚNÄTÊêÚXA¶@H‰å0F¿eñeh„Åô&cXj#µýpy ³&£g±°8תAb¥NÓš=# +<Þ=ÈV5*Fë¥ímÓî123wŸ±Öµ¹2­Ð@œmsq^Si·MO–Qrî"e§Qnñ¦SÚÞÝ4ª[q›Üö$ ”ÖŒdy€f®`ÒLÒÕ/Ú¼¤Aî¹á=¶J¿Ô–]þ¢‚ZÛáC8wl8iM»åøC£U%¥lm¯0FiæÄ4§fkº¸éÄ‹Òã°m™|ÛbQ°ö»éJfFö=ù6\añ€)ä\ë +Ìì#źÜÔ÷åt7ÇQï‡^Fj}yƒs.¥*ŠÑ©-µåˆ ’–'š‘Ïe¦4Î{ ŒQ×Á¶ŒGÛÁ¬Ðàyv½^Ç!üöœîzÍà~jÂ}ƒ[’(¿vVŸ»O>8]GrÁ8ý¹½åZK>$·(ûä¸UJsÈ­ùj€w Ê}ã¨àÝÜç¢hí‚sëY™dw8Xß¾ãs›Ê…SÕs<ú%b€+“GíÌ×FÜ{#)|UÆÔÙ¥ìö›y<¾p÷‘¹ÝêH-#æR5b{ Ûu߀W +5à&ñæÌÛöÞþ÷ëß_õ»|×ïýý‹$§õÞGÁ„]ýújc™zë—ú®‘þôWûû}vj?Ys(Ty÷‘/íYñÿìý“Ã}ê寙NŒxÞÔw '©¿Ÿ)5i’f8ÿÇÈ—öZñϽÆ…]¯·XóÄ‹&~™vÏ£½”õC$ùšå¿2G„¢<Íùû}Ïì o*¹õì?šïïÚKYêž>ö×oßMßßGäï÷5>wúù9Wdˆ:Õ¹è ~}uì×þ|´—"«Òð×¼TxõcÏí¥äJîg±ò¨ûÇÞÏ)tîóÒ^Ê ú}ž"NÁðö6Äæîô±WT]{Žç›íQXó·ýåí^£RyVús¿ÏSÔ÷·ðo~´Gi€ðü:»Cd‘9ŠÌÈ$Š&f¼w3wÕ SmöHVe=Ä!„ÕÔ˜bbîô: ƒ(0z8 _í\P‹%*JKJ=æPXL15wxÝš»¦Oeì½#Í~pˆQÉŒ)âÆ:qÕcÕ=–‰ÑOSD,]þÞÇÇ®¢€‘9O³ˆÏ{ŒÌ(z,ŠèY¬¾>?€Âõÿ“²¯(ÞÖ‘Ý^ðF'Àh ³äcu“£Ì +uT,vè-)lgó=¢¼kæòØK½s ;Bj³WÅ ’ÐRºkñùý££=$®.Rˆ-íÎF"ªkìõ`Á ’ðm°Îÿë ÿðêfM«Bliw¶U¶¤ÝÎUN'n¯Š)’ѵqEýãøþ1&oá#Xùòð¶_±€¦/·=˜¼.H€Œ¥rsšêrÚká#T÷°ÿ¹z«toÒ:¹qÎy¾­Á±Ž!Å x0UèyØ…Ò[,'Z»¼Îc᱓p0XcV0 4vϰGR&™<ÛQ$Ag5r9›¨"ØW­X:èó´±z_Œ)‚$cÏ!•ux ]-˜Ÿé,vÆmÁ‚(nãxŠYd,–¢;¹ÍsÍÕŸåLvÆmæ®wcL‘6y9©4¢íz;ù™Îb`÷±¹õá¼-cŠ´IÇÅíbëz;ù™Îb`÷¡n›J:n+˜"˜9ŒÙ´”øhnlE3»§ÍyhÇS£ÌoÎ×ÑÜÛŠ"fvOÓ9 {ù‚—±_^¹™è™ûƒNt +¤K—¿3 +Ézt¢((|AäŠ& +I¨LÝ!ˆXºümQزç›kÕ +Bu-ZRù|k–³Ø¸<þ¥þùÎZ¾‚Pÿôø¾*Ag±qyÚý›&'·•%u1Ñ’>'÷% 9‹ËÓîßt;¹­4+ƒÄ¾û§†'÷ 9“ËÓÛ¤–ŸR¢\ò#˜ ­£=A0“ÃÓ&ÉW)FÔÒåo„£¨Þ#yR|ÁÁ?‹ÌÛ(˜ô·ø ãG‘bD-]þfñ‰i¼¥Æ!L Ž¯b‰$8O™ÜQYìS£ÂÛå6m:Á¹V4¤uœ÷Èœÿ«êå`£u`n~iòÐMáX~Ž| ñ_ŠþezÿE“59…ÔØárDdP¼‹Ê¤¼Ü¶!¡04)my9 ±±ÃåL ²8X0v¿ÚA©*r89€º +Ð`E@«òÓSã¥vI)$¶NG)JDÅ4®0ð¶Rà0DŠ!±uzaüÒ7«Æ{Ã’KA ¿¸¹*$@xbAçx5†Þ?~%.q.J"§Øº=^DG 1øb –Ñ^ÚÈ‚f ~’#§±uzü¼´ß²Ûbç{\kX«0\}ÿøzÕ+¸ÚBpœ£-r¯ý`â’}lˆÞú,Z0Ú_̉ºMpHsw­*H¢ã+ÍóX:Ü 4£×¦8€÷´]iÍÊÀv.Ÿ[•—V%¬.'l%³ÍÅAah®Ï¸IcÄœ=†×ËhÌóûGÆ1çeáð1‚3X^í%—Ù)ª 4†…µ5Ïðž ¿®ÿEùvòMb2'&¡ ùpOØò¡çy[£AùHø¬6æ<-œ>FLÓ|¤Ž²_®4м±Ñ£|¤,¿e«x;øœ‹,¹@«áùfšAŒ€¹QG÷“öµ>|YwuóÉùÚØ}Ò¤çËâšP…´b&=>ƒÔ€b®ÍÁ ¤¦vù¼¿¸'¹J×›ÍZ@…rŸï´èôžVÀ\° 0FvO3 Á¸Q WqŠ‚ +ÁxªÖû8-ï9Ž5Î,ÀÙ=}óÙûÕèkšä“~}?©âù¥¿CÃÚ€Ì×’¼ìè·VÔbaì4¢Ö¾£ZP+‡³o®]íµg]ü„Æù†U©Ú™B0Ð?tß„¾œ@©==½¯OvÙõ­¾n]£"‹êVp)Å +à=«òŒÜ®I’èP³f…õõAùgLŒõ;ÖÎ:_ô€ú"Ó‚Z¬a8ø1µÔõ0ìà0ä2·4SÌšÛ¼¾íUpÏ¢¡dÇ¡,Ôb "Ø@ò¢„pY#‡±D±†6Ü\ÖÛIŽÚ¡mŸ +šf‰~œ¯ªàÑAµ€L…ÝÑ%L§3ôGU5}ŽÐ6ŒÐ:‹Ûß7)ýž‡<†PÎkÀ7Úpg–3øú«bùŠìŽW–Ft½ÆX&üL°4xtÍ0¦'¤Tâ&-&.iT{CÀSú2¡‘¸â½¡Iµ’vY6@Ÿª£õÄŠ&ddu–z¨¯ùý*–SdýzVö2ÀÒŒ(”gºÿ ËUÕˆ²©¨*r÷ncÿ|³Œõ`u³]mDæuíK•;©§ñ½ÑŒ,kŸ¢9޶þõI™EëãfÅæLsäëÒgQ8é—è¥OÒÞc”Œ*èµ)¹LœÒ-`ðÂþõÉK#Ý©£0°â…MRÔùS…ÑvDlÓS‘–²:¿Ñؼëzk«s¶ïñö›J©"Ir×ûfFȳŽ`ž®Î§Ž©K¬‚)‚]*WW©ëNEМÇk¨%#';]® aP_)PåZbÌ èÖ}lF‘¡ÞP,É9…ÄØérN ™Ê­ dˆ”ŒïPK¯Ì÷2 KáF[ʨ2ÉZƒ@è$&>8;ص<#üÞª°ýQöUA%êF•¡Aú +T¬ÖÒáñ}öƒ4tõá•Á òù„¡HéÅJ  –Ÿg&JæâÜXaÛÅ4!µñí? cÀšö æÊA&@z†+À~èŸÒ½#ø O²%R½Ëôuà9iíÁX« C~1kÙÔ‘˜bù6ðþtëï3ÏŠ^ú,ŠÕkžA‡‚k§\î#ÚÕ~zw£É·IŸ}«VJø÷gÑ2V;ð´)zé+‡©)A _Œáë“ –.O.£káÛ‚2©ÖRÏ/Iò}ÒîÛgÄj¼´¶Hš +7»¤ïൣ'›åÏ`²$nïCÖÉAŽú±NL-Þ¾'_ØpY*æt,•£q‹ˆöJø®h|*Ãgkçô¸¯•,3l³3ÊXVÏi¡à1´€Í„€ÑA—«ië +IóWU3$à¨Û…’Îjçò·ó®£Z{œ}gÃ:äÜ —;H£¨­ã{¾éŠn¬ŒÔ’9¾m!—˜c¦Ò¤nPpѰŽ+€Ž·¬ŒÔ’9¾·YQ¡Ê‹eT˜€ÂK‹ƒ‰âFWŽ£ÜEFµsù;Â@zŠv¬Ú¦O7È÷-Œ¼§šóÓ«Ê v[é7´ß€üBA¥˜ÊXmÚÌl®Š ˆaðˆž ï)Eˆ«#jéò7ÂQký©Ð½¹ýŸò*I–$Õû>E_ Ó‚8On«Öÿúß%4ñʺ7Ï2üi4¸h«m8æ¸JÝ£˜¢@¥ +q—2Ä,þÞF«ÿ…aäÞ¹€èÖ“-+MYø´C¨ð“XêÔUÁëÓ¸ßàüãZd¡êÓ÷Þ„Vµ8OèøY7ÔUÑYÂCcy]tU²IÄ-gjeB6õ]—r×ÄËâ‹ ”hw¥¤Ù.­•ÄJ7´DŠÒ§ ŸÂ¥V4¤@kU†ëaB¯ í–'Ý"}˜i-®×™,£Åi¹~ncå'42ó_œÛ` ´:`“{Uåçs°˜€|¹‰ÓÙ6hÂM=¹J¯Ïà*™–@4†ûxPЗí]­¤¼Ê¤Ö¯ßýÙîþX04¿o.ö`&4ƒé×5=»œAjíðúÞ]†u—?5•§£êð'¤&Å_üŠô(³A¨d‹¢îm YuU +Ä‘Ãë]ý’¦:%ÑòÑ&ï]òPišXü;`¦Aòb`—ÔŒf×ïÓÀ‰m0ÐG¬‹ÁÏaX@P:`îõЗ­ΨEN 3¶»üî'©èÊHâtR, ‰;ãÈ„f ²©¬r™±ÝåJf=?°‚äë)ܬÀTóÓ04Õ‘ Ù¥ÿ&OÄñ¢¤aÁâ雃 V±Ä©3/¿1¬D°ð,1)F1$W¢#H:æOßïõhåXŠÌWÚ±„¼c4ÜÏ‚9R¥G»ž"³¡; ŸfãðÄIe(­2âÿ›ar®˜#—ì®§R +½¥‘ùi6Oä¿~Þ2.4…B3J–™Sÿ“e¼a¢( GšJK²Í‘½ÁsÈ  ø\X DE>¿ý“<$BìÛ,^Þ߸oŒí¡ñ5ÌÌúíŽ Ñ76`~ºÃÓòÆ4Ÿí 3ËíÜüÜÿ°íp>ª‹ð§Û8<Å7&*ÁÍÄ_c…ßóQµõQ‰WËËd¨wVSR ¼³aލÃ×Óõú/ܽÔ[» -Mˆ+)vHÆ^/ŒIØ©:ÞtA¬O*<½U†Y¨OªÔ[š»(ªŽiþ‹ò.zÕÌ×UY‡<1½|Õ¿‰Ï&]ZžÇ§~z­Ù‘@jä‰\þÍŠÈËrÇS^Å^.¿ô?2W|ú-Šùs'n +†FŒê墊óóËÁ=w§ÄT‘€¸¡Íßw¾'¢ b¢+–j‰ÖèóË–®¦.UÄ5´ùû®ÉQ°gJ(¤Ù ÈRcI ˆˆÀA&§&c€Û9üaäâa¤.aL0@àSm ƒ€/Û*„¡2¸Ã߯…Ù×÷Û00@`|w C€x&c€Û9üa(‡ö£ ¼iÝÂèu½ #€Û9ü­ìðA¯Bþa°<Ó0…h<ÌBGãý´¹ðý€ªºîÞ.ÖÂѸ7A¾N.ghÄhކ_A[±/‡ÕÊ"&€ÚzóʇZáçïõ3åñp¤3˜ Sö>‚™Ð f\ŒÊ­m^¿K ÷‹·ÊLúTÍí`€0ŸØÉ’6I‚1Cöõ(%€Zzñx’ä‰E™`€pŽz2¡/«¦ÖW)¢¥Íã{‰u+±?U–õ,žCù”5”;}¼™´. u=ôEZ{økfEj—®­pevB!^‰;©DÍ ôšQSÈ­^g68ÙnòƒiuSë7Ð!z.[0 +}¹ëbë BüívN:õ¸†‹n˜!’SØy¯N d`€¨H8[âÍ©†½°Òà r¹µÃëw}õöÉ]ƒÁb;hþ 0 +p°%”Æ< ’{”àÏhcóõžÚ 5ÿ.µ'}¿»°Œ˜Ú#}lýÈ=ÓÇ"w(ÿ·¼FS»lPiR}©dPÌë §[;½®y=r(2MbCªôß#˜ Y^!þv;§¿5¯å–ïO¢;F'ÓYÔy£ð·™;ˆìçŸâ¸‘ÕÓwycݼ騟ÇÁªOô^õ>˜Äš@ÜHôôžÃù1$oö–ÃØg1‹þ-ϨÁü†ö¿3” äcÝ´…kÈãü® ž¬>ýV 8=©Õôy¸M¨à‘UñHL”^ô]tr]•EÎÎÜh½ûXT¢5mrÿƘdÑUùç+9”ÿM]—ÚyW’ѰxÔGZÇOèJÒK½Ã¢bëä)æe ˜Rð¨íd"ëY˜[<}O²÷Èc-ç h8Y&Ööm'µuo9)„Û³®$³øƒv8)bºûvÒ€¹ÅÓ7ŸZ׺b„´¹Ï3 ÛIËE‰·­mÇ ˜¯ªáŒø}£ù—EÌ17·yå¾®“îý)#6InjB·ý’ Åþ $OeS7b¶=í°g"²Z¶=3`nñô½Žoc)#õ½ çÂæs; üè ¼yé€ú²½«â˜QN ·vxå¨"œ°qi0…ëÙÀ!_ÓEσ™Ð ¦_× Æårk‡WÆGÈó)J09¡êd· Ð-v‚ªB¦À qt—À-·@@*ºR.öªà•g D¡/Û»î¾J  –3J&"’½I‹ûAÌ¡Qy€ær5ý@U×tƒÈ¶Îóñ¦E‰íB(8ø+‚U8í/S\¦hêìjwýpN!-iö‰hp5ŸŸß¿@[×òoÑ[íÒ9TÀxæÒ Ç ÁCãØî?á)úOþíª‡r‹’F¢ŒëÁÓ˜=+fˆm]¦63¬³…—C—RÄ-þÖ(|_E¢(oÇ ýÉ‘cÊ£±õåDøÓmžÈ¿@µ‘‹ôTi´J=Ü0H^©UêÕ`£`}ý 2Í™Bèe$úà: –TÛp̪–DʪfÀ—Ô^‘%.¤ˆÚ½½“âdœX»x¹¦µH^a’¶ÌTj4` ¤U5“ôB‹’Aâb†¹¹Ýë7 ³2yPí³ì2Öj€~-PFcœ]!ê::‡)HÓÉ`jZa™·œyXE#V¨¢j™uFÞïâòå&NgsKÒu׆L–3¡djQ)Ͼ’©au/Ñß|ìŽÃé)¥öÓl.¨ê鑸ÍO¯_nât¶rl°³ +tvžÇûíuÓo(F¸0½ù=éÌdÝ"aßÁÈጃq¸IÊP ÷:4,µ< …(’vȬ^×Ü·«û}åÖgÒŒ00@—LÜ ª%Jšßnçð·¦ à3[ ÐõÉ3kbYª[R$ÍïtdŒAߥfãm ƒ…ÃÓZA¹sa­d C·!yCbý˜”!ÁÔár-ŸFƒpÉ–Öd»ò÷uȲ@ôBª`DåX8òíFVO†a–í–ãÏê½¼y·ÜhIT2ÈM­þæ&Ôd,ZèãJÒl üA=į¨î Ïz¿d?LìÙïEîªá„p´d¿|›ÓßÜ$@×.ýÓ¶vÈžOôÂbQQb~»‘ÕÓêÝn{EßnÀ!;œy·ãcQªÛ;ä¦VCz¤â%äòÉ[OtÈŽèªáÒäöñ²2k§×#»“œ±ØQÃñƒ8dÇÁص$4ò˜òmvNºÁVöù9ÊÞ!;¨è…ÛÈu-{ùv#ý,{ÃüÆQöÙáÌ»?_GÙ;ä¦úQö#m€åo;¿#z8QòÓß÷rxù4é8ºA¶±–ýàŽè‘Ì­ûû©13é83Mî½Óad\%v9¼™¹ÖÚàl1 §ò–ÈŽX¨õLcøˆY,Ÿfãð´Ìõjôÿ”WIªe7ÿU¼ ükõ ÜØà”—ð( &ßȆܾCŠVÒýI%&ñ×yÑÝPÄQPi¦ëL™Ÿu +°aÍ[U‚¥¬ñ{. BbíÆëˆJáØ®:&ŒWDϰòÁÙÄ0ÏÏ·è7 ¿ZØ}L¿“ø"¹ôó)¨x–Ó{£a…åŸ ƒ|_PLiÂXWgž’óz‹ÝžñôÎS 9ÓÁ²j<Šòbz8sfí¦¸ºç]‹¶.F Y½ -gþ~¾½Ÿï§ë…¼RŸ„ðù§‚½ïÔøpõËï?=Þ¾ûÏÿþy|ÿýw¿ÿôëÏ?üðãÏÒ‚Æ||qí/ø÷H~úÃ=þüF(JßZñ+ÀrðšÎæyïà7F`†Â’Ydu–d¹Ò›ö5»°–àБ¡ÈÒ"*ú(êà|ƒ£oðø õŠy|`õÔæ^«`‚»Lo¾ûŒ)áÕù+`&¯l?Wؤ ÔÏsÒM-~M=²¦Ë¦|n¤ýilyu~qQP!‚‰8DU ±å…˹ÑeFŽ!cíðú\sX9˜2×ܪ Ü•ÜŒ@ ¶‡‘H­^ïk8z®á1ß…1šÀÃÆ[j¤…QÅz¥‡4å<ÆÀ0žX#1ÏÖÊæ ÇPýUøÖí  Aë0{dŸŸs¤Å§Ö1dmm.qúKÔ>–«Ìºt<¶d¨Áô°JSXM*@'Òß|쎳N]cXô¼LðÀX 7–²Ø›Àp`°ŒjètùA¥„½RB¢·a©A 6FÔ$ÉÆ“T‰üŠ'£¿¹±5w8?Z#‚Z ·¢ÆæÉÖ‡( V6g8'þY«£Ï;Åóg=ÃÅGäV«¥è¤-Ø!úyéc>Þ/Ý`x¡FU.½_¦(ðͺ²»º¿ìÜô²ñ©—o•%”+ÙXè¬Ám€¨üJ'R¶ÖÍ.ºäB6Oó)Ãoe=N„¬" @^Ñ5>Jk[.„ù‘ˆ^YL0e:Q¶t¹ÉŒœôš»q¼d¨œ;Ú&…ÎSÖÓ€ ;Â×`…æÙºqùÁä¤RTÇ2ƒæM;[1ê}UrбŒjèÆå–1Kš1mqƒ!Uæ +Ê ÐILÜ8à Ì2+QÀÜ\—æ1¶‡Q’þ©W6ýC'Òß|ìŽMé(®õo0l£*Ô®´‹è¤&NgTŠŽctÙF ˜SˆE´Ó¶AMÛ[©>Q <[+›³™"M?Ñsï'Á´U(ÓL©±¨@ÖÖær+T©mºcPl³ÇÒ-,³Í‡§Ý½©í ½fƒQ¥¨*W +u ÐI+åtv_)µî•b E+Ey@1" Ò6¡ª _édô77¶F,ƒhhû ‚õ˜>´HÀjes6#H™öASíòku(€7o”¸:’¾û$£YÙ<íîmuÔ+ı¨ØêP /ߨru¤0v5 “š8}PY«#ÌùL’{a\èÕøá¬!™ésèä´Ð‰”­õ'í«a›MrâAS?Å`ø±¬Ç©€ËöËlbµ²9Ãm2r–,yÂîH5 ´'˜R£([þÌJÁ,CÖÜéxÈpiÉ\Ê‚)Mj@†N‹•a„æÙ:]~P):ÅªŽ¥Í›RbDª*l¢ bºÀ:]n³Ì¢SN0‡Qer¡ì°ÔÄé +¹¯S} ÛToꜾNõ¹Ø©žOÔ9}Ÿê1Sü9ÕŒ£¯S}®ÛToíœ~NõguGþûï§7wåñh>¾<üã/ø÷¨|úÃ=þüû­ÁzH7\)¥¯·š…FÓhVÞèÜì‡òh¸7aarnL¬ÒÝ_9‡èiW\ ¨ƒKDôß ~ FXôwYHhâ(NDBã)ä"-&H6¯4®u‘>M°4øJ`Dœ_^wú,šà†¡WéU_E{¨$ÚéûN}”vP*ÀQøQÆÄÚh7­`¢*h ¸ÄT‰Ä;BÏiÏÈé"†ˆÚ:|>ׯñp›Jô +‚‚Òvm dFN‹àY­Þf?ºÆtÑIíë4aΓ.ŒÑI ãÒøg: îf}¸6˜J…Aȯ|b ÉF¥B±È¯ø·(ŸN> ’úMDÒ`š÷ó¶á‰Km¡†FRð±XÉ]Yû1ÄL4_bŒ™Hd5°K ¸šz¦~ÜM05Ô«¤A©¶^Y1°ˆBÿƒ$ư)k ‘ÁÄ•cQAQå¶…O¨57#¸ë*mdi|ÀÜ”§à®Ë‚@SƒEŒàªÊrÀb¡c3Hú”\u¿Ê¬ +©7xƒ£o +È]-øðPEžÓm.9#$ˆZÚ>·¯¨™Ã€E Z­+¸@¾-aðœz.ex7­ jiu¸p…)uâŠV®PÍBcΓ ŒqEÃUTsF ›€Á”1Ú`Ç•1 49Áèc4™=š:n|Àí[ØÂ{xòʬŽÒ*½œýj“Mdž •Y]õ«ä¦Ì]ÚÆ5 @ñ•Rqˆ8 ìÒð‰n¶Éë΄‰cjwøª^Ë",váñÄ@q‹–õs²FÓ×”î™Kb>M¸»¢%àׯ5»½’–(ûÀ?žìª æøõ0Š<§-ƒ¼·2ˆÓßì2 §¦a„2m  ä·0ºç0¶‘˜G±qúZݤ”½7À4º9Ï66Üè•ï‹]Ïhaóñ\¯R½[û¹H h ÙÌF*[ZÿåÓÉÍÞ¿©Ùݘ¯FBÆ8:sVÇ3³@¬¾Â©b»"K‚vä ´z‘ý]¾*$¤)|š`Z€•w¤ 2Rˆ‹¸ØØ¥a7‹øeF}˜ÐP`xiîu§þÕn4êÒöšZ¶]$wš(j7Âs”Jë*#€µ³ù{î_!Ý`ê©-$÷š ƒ»±\5”f:Vkgó·v$Õµ£wÀóvH·6$)P7v XÑù€}h-Ï&$Àt`‡¢[;Æ@ؤDí œ¼ò³žÅÂææ¾ë7õ`ˆL2°;õ‘(8]qÚ‡Y ×*S`0L˜Š®Ê,­Ä¯C™Dù²n û&¶äG +Ø¡¯Qì³Q1àðd¾ª¢94PºÑ›ççt‘Ú¸–³9qiÎû0‚CŽeÈ»ñX +h (?!UeÚö’X †Är©µÃës¿®’8(Â0HÀru †! ¦KR)ÔÒæqé\_q*í¯>/"Ëm©P!ÈwÁfU ¢ +ͬCÆÚáuFeáñ ˬ*h x-ÃŒ@#˜HmäRk‡×ûn÷õèvxïfíÝu{ªÔ…µ_ØP xÈ#5 4òUæ–zíú‡¤£²Ý©ïÒ©©ÝÓ=xWƒûò°jñª‡šØ"^¹Rļ ¯“„J2ô4$»‚¤#|WK*Ižê‹d‡wŠ-z<Ó.:,)úGâ +!¢’»úÈù£'•´µ‰s¨•’8øÕ…t~ÕëÎÄÿŽ æ]xñ¼£=良…m²ožäÖï!V¤k7…gF™ÌXð‚Z 1UÀsúr½Ã2 +¨¡ÓåBæê`ž¤Á)…æF; ‚ +Ahc‚4u‡Dóâ 9‘À£±qøzî½Ã{ìð‡´/àA«>Eï1àŒX¬ÙÆáë¹7dk{4Ì!}É& ,AGµqø:BÈŸ ýd £lÞBèÙfÁHÌ£Ú8|a`z¶ ð‹óÊ/aF)àg BÕgE]ÁÙe)Œe4x ‘l¥ùŽ +h ègÖÂ<0•”>^s@¬žž‹÷\Ø{ ÕB@Á¬Û­÷ÞÑ{¸|%ï,@€5b=MïÊoÞ–„s8j‚¥*h Pï©à®&ÔˆÐsÚK9[‘#H­^`|uL˜ó™€ +ðд=„0˜#„_åRk‡×§}<*_ ¬¼®Ì;`Ð@íJõ_ÎË%MÓ…Âó^E¬ o(®''=è÷öë ‚·¿²³kR•ÿ|*G_ó‘’@’›-Ñìï–#κ G]ó‚B™æ-4g Íq†Ö¿;Ø}lqFhô$—ĉŸ…ÐÉ! T@Æ+õ ÙÂë«aoD‹{g¬ƒ>•Û‘®`mãtê–™£Ý—:Bà`ñO\ÍÎÐæí‰:ªaaè¯ èÜZŸê£pCxØÓ™Œ#M¦Ûå2;GËÛõóöz‹ÕÏ>ƒ…FMø¯ì„ÍË@"y†­w†"i\/ëËÅŸ4ªkRÚÏÔ'Ãu +ŽÖYùÒýL}2Üì mÞž¨ç°¸Ÿ©O†ëò³ZK·3õÉp³s´¼=Q>72}‡<ÛÕj²؃h¼Ã AàbúÚ*@F\æÓï6v?W¼‘ÏŽSYihëãpC eºÒ¨ÍÒ¨4ÓP»Ÿ+ž>€Û­ìx¦h^¾“¶àbϹ}KýOwgÅ^vZÞ®¨O2­vO¦id…Bˆ;E¿ÆÒÈA#/;GËÛU»ETxR–yydF2xâ›L›ÿ³AÜK­ëµØÑ¿? K}uÙ/°\î|װí¬û[6}+/ØeghóöD=kK– XÁ:Üj¸ã]~’áòÔð²3´y{¢þ] —Õ̯‚5¸!ô_gñ(8jØlì~®xW —ïž6¸¡¬ËžÆjVÉšƒÝÏOËmc7ųÁ +¯Š\жÍD ͹i-ôÙ*ã±ÏûlµÀòóÄ{ÒðCì|NX ÍjOcY@)ÖÝbüÜ}\±>?Ü•½üÍ{-=Tê߈wüãgëHf ¶çuß´ùÝMŸõ˺Fæ&h<·äuaÖhµÛüÃn}¹ø£F`e¿‰ˆwr«ìW¿×ß~ªýÔìäúÖO)Ú¼=QÏænïäVÙ¯æÎÅaOÆEdurËÎÐæí‰zŠšLr%–ÑÒ£\°cî!9›(íÆÐúÌÛ!¢QoÓkž~v(»'ë ’Àù3±…÷hpü“KÍy–sIeO•«„;;“}Í4êqþù°;Wš)Î`\lNó"ÿ|Z[œ‘Y?.Ì:Ìß”¥>­WÓÏõ°¯wìEÑᆒêßZ˜\ªûP#³°Ÿ»+Ö¯û\U“n(©úí)L}DÌÚ«[ØÏÝÇë×®ÛmÈkó½¡p¸µü<ëŽöc³3´y{¢ž=}5<ÖP8ÜÚLPõJÆÐÞclv†6oOÔÏOÈ*6ß½iÿ¡êRŽø~hF<&é_ô¹H/éMÝ.¥ïœbÉf—`ÑÅÓkz¹ Säþû…U4Èl)Õ²‘öÍköô/Ñ›ˆ¦ãKÚèÐ,±ùÊJ¼U·«‚8Î/¨c’ÿ¯’ ÿÿ-K6ušÉš™QP-b3è\…^©Ù\›û¼]×z3E&¹Õvš>ëß½CF¦8xîs÷ª?‹ýÔ²÷bMßUd$ÁU~@îÙø?vì©McÜ,ÕOô7ÙºË!ª÷§–ÓTÉÿ¶{âü.Œû/ÛýZ¿ŽÓ7£¿{ ¡x!Éè•dÅÏNÐ6÷VüæaO;%nŸL™v¹Î}Å]àžfž¸7ó÷oÌAd¼‰</g» HmA9«”lðˆ{ãŸq“™ _zX~~¡2ª¶¯Ä£ýÒÍE“N:„¿F +4¦Z‡ˆ˜RcQ©˜QAa„ÂA´>êzƒè½ê°¢UØZˆ[ÏvhÁp0òë–±ô¨[ŠC´£jYZó”R.¹–êÁs&>}54Jw¹·T RŒÃ²ÇÔÈ`úAxÓ«/Ç¢‘Q‡ŸdK¥‰’Po¤–xÛ„)ƨ–Ø9Ëb]FJ½[J 1âó-NTåÞìÝ‚c†McÒ ‘}‹s×剂Ï: ˜qXSÎY!uÛ\Bï +{³”°™\,©¸ÏV –`yæ^fôRŠù,€i‰EsèEaô/*…›Zfö”J­y&?ÄÓ¦–ðmÇN¸ºK©dÛÑyM ÷Ì6žZ*yn²¹¬¡qÒÃHþéµäyÀÜ¢¹”c0{ð&ê¨0ieHŒ´1äP•¡Ä&«˜G48¤› R˜©ãy4È…çý [Ý"“~8^†h"ÍJÍNó|ÒdËÜôm-ã$Âeµ´¹å:N,ÌFö5 +Dº™%â¥á1–j‘;–#K% ‰æ‘Þè–ïÆ„Ç¢»[ðaD +©ÍRÌ9àPvg( -eƒ®¤4ã6¹¢y ­3\Êê±{Äg¤â{Ó$Îö%(” +±Ã¨7ÍcLRýEˆ0ø ·µ¥F­Y·».ÇøäR9¹eK¤0çbŸŒ›£ÛàÛ ÖÑeX©Øj\<=Aì°Ÿ¥0ö&ã;m5ªkV…ƒh‰ÇjÜþhA­=¬æµDYéõáͼâàÃ<“Œá¢Œ,£4ÍqÅÕRŽhÂïª`¸–zË9è…®ìûÖ*^±¡”æ³AÉM'BjÝm2;–M™,IîT§œ[Ù”ïŽ'wªÊ,M°JÊÐÖh6$J¤o–ˆJ1˜ë©èéË#) e¨Ÿš˜©åSS[ SR¡gº¤°(ðÜ—ÀvK +¦ÆpK +®’VËÜm×9sͧ¦0ê>êÞ.MÄ…n‡¦€‰îšØMaˆ¾KRÀ²×R0Êzï]QÀpFýT@~…åõ+íPÆ0Zb>ȇ¢kzE]QÀRЧo)ŠÀSQœìâ¯I/ùnk1ÝŠ"¸ŸŠ"cR ^ŠÂßhÍSO€ Ã|ê GÝÝ%(F•OAÄIÅSQQ­ñ” ±ÉUÁ$î>ÿF¿0¥«OFwŸ"°ß} +þc>ûat÷){œ‚mª"óQÊÕÉdŒ®FeÌQW£FñnT–»QX¯FEX¿@ —¨Ìw£"îFE`»a|7*2…[VÆ«Q–îFE`¾•Á®FEX¹•£VÓŠ¡dSB"¯W£² :cŽ™ª4ª:î&¶Œ&lÒÈ Ø²¬À˜pbLqË„£VHÇ a9bÿ&”ªÁ‚®Ž³ëPž ÀØ99$lë€uÓ”™C`-ì–5iîÒ{ôZÈŽv?yt|r0ê嬄PÉ¡.6W\!¾Rok­ôKJ+rŠºEµ×½À£—j0«$Jº»,¸‘ÂðßòŒ>b@”¤u;9ô²»K¨@0µî±¡¸êµfç =†x.¹ù%ÀÕ+»eC;`+Ϊԧ0(ƒ}7Z† «)yê5ËØ+°$KÍXרÙ×b2ѵ©F‹B‹2 †NûhlT‡è[ì\‰â„«…&<‘š8:&÷¥±ð/²Ë亲¢û²¢-ÈÃy°£MÈMoÊÿmßHði‘GÒM>Ž@ €^ØPGßЕ?Á•³ÝšRgC†=T¤>ø¿þûO.™"¬ûžp«äá¿ÀªRÏ~ )Š´ûãÓ‹þòi¢ø5jÖǸ@o¶_«þõíP»mo¨ª+ÇÙù޹ÙåÁ”•y$óǧýµsç¾Xûc\ ˜í÷ªw;E…¨«òÉWþëDZ»ç²`S¼œ«]ˆ ñÏI”ra:_“·îF²%R$7<Ü­u48Ž™ÉÊ$rB³ä q6gUVÈv¡šS¹L6Ä`Ë®@©úÈž÷ÝqUlç8çX†,[þùÔÿx.,ñe]×T ¨¶ÜmdË1Ž‚åãØe,]Z³Ãðcõ 3uÂàxHª „©i¦áîõÆ[ÙÂ=«j:$þüñâqê¹§ï§÷ÔsÀ1miêøì1ö‚£¤#e NjÕ…Ø\[h".wKˆ|³-M”=VG Ä0ýqHtmØ”kêDsìäòÊwJ„Ï–Ù³FX "õ?ƒlÉG]Ä8n78JÌÈ8˜S‹øëÔc­ÅŒÔr*• Åí±Y Ž€”I›’ˆç©žhÀ•zÿ†™ÌXí.„vs4Á—ÞÓnÎV©wÊÞmGdxÁÔ¾ó8æÄ1O +£Û™÷cj!&Øâ"q2Å>æ¢ò½5Ê7©±Ãi7.´×/.l>jà‹òÜü(ä{Šè­HŠA*Q¤¢Ôfd ª{ÿš:‘¶FOv˜YLju¬KäÂ÷ƒ.€ ·ö`ã^† Â[œØÞ9v;IÈv ¤6Ê E4T€ºšó5–û@Ú צVuÈäkžæ2¬tz1’ffì9F¿uú,\!/lhFÀAapGì/…"¨£`ñŽÈˆ-CÙŽ‘øÆeË ò<Îcý˜àªõ‡L”Õ|'W, +®—¡sIÏ€«Þ~Woժ͹öÓi$gØÈMê=ˆÜ3½Ï垇:˜ý$‡8X‚ÌØbä¬ÕŠ(bÒ8»DHé<›l r«IµJ$}ç b̘®Ø‰wïĤSº˜q˜—dŸ³öŠ·Ìg$6g\H¸Oƒ&%’¼U/Ð}ŒñCLª26öy`û³kgÇP‹Œcžm®·"Õ±´¥JS+º"d²ÉKGœÒÓZ4É!2Gœr¦‚u¾I<¥Á¾^ +T2Ç #ñý6gN³¼7W+"zG±›öqn«òäÆv)/Ÿ‰-Á"·~+ønt{Ú(¸<“$=Â*[°––î:ì&ÛvjzÀ©«±Òa$lG ǰ—m#Ñì£þå¨ìl¤¬Þ~Lô&t@š ¤)÷ðRÈÆ¾p©^ ®Ÿò¥}Zo:¸Ç)¦<¨önóõ\c+iÛl¼_¿ŸVµT0Ú‰y—åÀÊYJz­énßdS)ß)ÇÂíä|?/Y pS6ó™ôtȻޑ”h¼Ò”¾Ž«ñ{oQÊSx*q,ì×^³ª• “Þ‘6žkªXç“6¤ÕºP*saÚÉ>¯x|à¨m;ÄãÝ9%Ý 6¤Ø–ÂAp]Á&©°ÑÆŒ±†ÙaVkè°èÑö}WÏ<Ãr8âD'?fËyÞÏÕÄv_¨œbˆœâÕ¦oi«+jKñ͇qÇ«•å§ìýZü™ÔˆØ}`ðÄcnº¹ÕÚ…ÜþÎîxRmòC¢¿Þꉙ«Ó Tï:UI&–_'QSk6#ÞdÞ‹zF±”Ó= õ·ZÄíöØÚ'Þj„6V®U)qƒ—=æ¾âëaeC0E[D±Ù>27e›ž¶ûzgXõ4[QÖÅÒj{\D.²­ËŒ ÑÅyJ±NŒLŠ Aè=®>çZén=aÜÏÈÙï3Ц}`°±×a+ú¹Aêžeb— £|¶žÓë 1‡5¾Æ^Ö÷ëK¹á ³ùR»µµJø ÎX&ù0ÿõ—c9Q)·?ÙN +Éh®v«}âW='.Ñ_–\¼…‘bWüeÛŠV‹ºë"¢·=ßÕQ\pW¾Éùú¹°x˜â‰bÂ6¦GoÇQÃáZ9^Ã’UφþÊŠâJÔ¼9Sñ¼¡‚ÆmÈM¬9úAFÎâú›rsf_ix«ËœMD"kž;'îÛàÕ2 á¢g|Œý1FÇKç%A®ô"aAé8øBÓªAJ_Ø~¬•ä2_+Qʉ8r+Ïö7é’leŠöÑF]#(yµpÔÄ‹MIýxF·+ÛŒ&q”àLÏr1ý6¸Kttø¾m;¢PFd=ÎÊ.áIÅa°µ·>³¯SúŠæ¯ãDm›e¦°É=)`ªÌC4m(} ¾¶¡Õvà®±Ë*nl„aS„:v¶¬?r?ö½n‡<ø…£•3ÒEDÌË•6SïÇ8¯ìãfóú+HÚù@®i^HZû24£õ@íÖGÖ>ï縙â7‘—g‰ ­˜:ëL:¬=âîwN|ë²·A%ÊÝgî’lÁZË“Ù?O§Š ¦s¢t#˜–òUu½Ÿ£÷~qIQp! +aÙ#ãtY•‹"÷†SÖîË|ëÄž4g~“™T¡©Êùµª,}ÄÈ%}V†SŒÎ}ÒþxcKõ¡¦?ç07‘]Ä~’ï1A£ +‹±–¿•E0Í#7WZ€Hsß_Ò"¸~J‹àlÒ¿iìrŸÒ"ØÊy¯+-‚Ŷô¤ELUðKZ€Íí燴v•¢Oi¬ê’>¥E0µ€WZ€u޶¾¤EüÎ_Ò"˜GÞ_Út;÷©-‚¤DùÒÁüS[€yýб¦ºö©-‚4óK[€‰v.‰‹ Á¿¿µ¤)KÃ<¯4]}µŸú¢öb·õ¥/t󗾨åÈGhC_€8¶õ­/´ÓÌë§¾‰¨ö­/jN~é Íɵë‹:Rï[_€µÌò­/ÀôK_ÔÛüÒàø¥/ÀÖü%Ÿ¾ñõK_`ù‡ºÐmù¸/u’ßå[]€ó—ºÇªßâ"öK\€ý§¸ˆý—€‰&u¹Ñ-êÉD>ÿÄE5<ê=YåΓÈI;à(æ[›ñ*˜÷­b®.k›)ÄSìX…’cÆ®ra1g?>¼òÒ±zOî>iZÌÙŠ›ÅÚf„T«z!Áz<œ`)ËÂÄœ9»÷¥…*±%bÎöYðìwKUæ_l®q¯¶Îc5ß*ÕZ5¡>n@T‰•±vúRÁšº¬3V®Ù/Ëwá² {‡èÒ…«$‡ê /DÅ};lû®ƒ¥÷N…ê¼ï. ÇÛûœWñÏéÆîŽòîÞÞñn ××{Hæ>sÖŸ·rêýÞGF)Ïœ;Ý— WL¾Ï\ãæÒÎç6­ç9pžV² ´wõÔw:×Yû½%D±ûœ­C_ý}ò[ýóÛ\È…)y+‰Uñ.­ÕyÏ€rÓ¦˜Ëµ)ÙV™Úm;åøÂÑð¾‚tŠû¾’÷±ädÈ[Ø:3¥X¼)™ Òäöëôk›3¯;ìZÞt¦´=Á|ÛòÜ[Ö[ÖÕÆªhˆtî\íàY†ŸÞ#k8¦M8Ü‘x?#ùRë³­Y*ß©âÿé.·,[R +N厠—Šø˜ÿÄ:!«n¯þV2ÄK\Çú؃”Ìw†‡”,&Y ºåp”':Öó$¢ñÜ›žì&Jïh#FÙ¸›‰ÔÒ\Þ·œ¼†&³’ê¬ßWñ€íÞW0Ç+ÈŽEÅtȤ™Ë§‚—¬ÔMçe2#Bpçž{Hæ™>Û½ÄZ|™¹|!Æf¬Ûœ‘;öîN"¹ 3¦CÑ#y.ƒz"›êÄ™Õ<>Ð q›d#E]œð/Ûg:Ïo¾ ©žŒF²œ!êÃk*ˆT–ÜñÈ6WnDÄiå9¼¯CªpÇñ%]{WÕÑf¥HÑÌókrçÈæ½Q× åy‰ÓÆ•¬¾[æûßd™§³ªoIü|â†Êå¶t‹¹„ûî\̃N·7„Qú9V¢ÐgN¥èþ¥M¥Á®õ^ƒnÅ{ÃÔ©Ad[^ûêvÓ©Í; º¼«'jk?o 4‘¿×áy®¦a&‰ï/ÂE$‰uyý +2NÞžJXˆ»ùà¨/·3P[/¸¬| +Hˆß€]Sã0‹pƒ£¥ '÷Mö8œ£  A‡){†³ŒÿÀnbé™TÝeÎg»®ìX¼;ïiP¬åXö:lÏÃf¯¶÷›«çô +bÂÚÙ°f_îa:vu¤eœmcCõ+}Ç4]ÅL¹8C>Íjbçúm£Sp“Ñ¡p[Ýq`åq¸f9¬¿;#Ik5u#V·[ýŽaÌŽ­ç6VA,´ï×,©}¾œ·ó ÔŠe±Oµ%CνO^’™R|5CìÉ'cY¾zT ëw@‚$—£è,Ì]ºÜ~Žîœï’u«÷ÛÙcK¢PêwÀ;öîý—¦»sì³ûXˆœ³Õ%¥›â²öÜj5)§Æ¨¡ßuh$þ!U¹—Û¶.ßÒZûC×ÅH·|»¹#žˆ‰›V‹dŽ/³^ÀÐTÃñRž¥~ÊØkç–\VýË¡²+Vg?¾åQÑ/TU?i\!ˆšC²­®3EÂ댦R9±–¸ƒ;¸¾¼7‡WꉜXK¢á¶CªO)H¦‹3*9cû‹õQÙøÊƒ±Uóܾ}ëßðøÄalž,½„¢ô€ãƒÔŒ8éZÍ€É4¾ìY],dÅ9Hþ3U·¨‘àÄl6WL0<çVåŸëúò¶ïÉN†Pš×=ÙUéa|ÓsëK"ЯIÈÉÆáâØ XŸ«n¢aÒèO m¨pH%ËbÝl¸ü³hî·v´Óús&Ôf‹M!޾ îpfÅ.±³ãÖ)ëÄ!­ §.l‡«Uëiû„•¾û-DN|ǬågŸ¶÷·xZƒtE$å4”›¾·´Z¾–  Ö!èL7|Ë×HQ!-àøqí¹fÃÞµ£ø(‹”»9»ÙÛ«¦ïRÏÚ+žæîEoiY‰/ý Šà­h£eÆrQýôŒ‘ÂÃuD‘¾HÃ×Ù¨–³ßÒèÉèºí˜zbDÄÄÈ/¢ùÙú§¥f™ 'ú7T†®ñkm«Â~wž?:~ý÷“™fÞ@ìÏg§2‹Ð¾ôœÛæn4©©÷»d"Ú ×³gÚˆ&Ñ` +jûq©i¶…@†|?È¢C/RQ•ºôjÔQîë,"A=2ˆ¦¼ 1É¿´Ê£‰ c&x“-¡›D²õ„jÕÌ J«-­È[÷Öj$épˆÈ-ƒæôcF{˜³1|5óÁý ÝÄ¡|6Nüá ±(ßjw4€8…è4vG/]1{~†õ³M]Õr5álŽõ9ã™.zwÁÝO,ߺG9½ wºPŠÙÀ +›Œ™å ºœ›9ŸºµgìXçLf™>¼Åœûƒäb@½åKÔuƒ&S[Z9òñÀL¿Ñ·[i¾à•{‹¹§´fjÛusA½¹”äN“09b¹>óêL§ƒ¸zÜ4ž€DfÂ+Ë¥¯„³·p15wäAsXÛwøJ‹ØÄ»öý¼¦ôÜñì+¼$Èë‚6âD(ôè³ǼÄlþŒ"yvÄሾdõQlù±uZäÊYRàž@O¬‰‡E¼°©â<‡ÎÓÙL¹OHÏ›O`ß4^·ÄAÔÎÓQ¹-:oœ3HÆžôÐÊ\®ç_¢°W~9e…ãyVùÜz¼ÝXò (¥’Ša¥Íÿ6v¦ã:#_ “”õ¼y?6•3•iƒ«ùH» é§¾Zlô+{VÌ¢DûNÍaX%gRA}n£`W êè¾ݵ¥‰ôµIžŠ6ÞáøUX¬y2Uh»Ý呎dHXnS¼›†9ôÞJ©=LØo¿- §DÄ|ˆˆø–X,t.-;·ë Ê®Bð¸{t~ÁzL´Z]Пvà¾9¿Xõ-'±>êpº­AíòÕÐi>‚^§îc†—’œ_üë0ÈmõGüóAÿ7ãߪ#Ð:O5»â樫™Ixënѽh‹ +õkfujªö=úb40Ø4‚ÍÞRL¤'"ÁñPÞ@щï8Ø%Ÿbˆµ×e¡(iOgRg”ѼNoÝ.ÄÕ¹š}º¯ží ‹É-–G¦çàKüaÝ[Üȉ3%!™p¯pÃÞ".>é$¹'¯Âï{ ëú«™¯f~ÈàvÆc-·œ>ÄêWî ”My|ç¼ä#¤®µâ°è5ªá,¾¤ô»ˆqKm ©‰w„?È–„ÝÊ’{n½ÂA:P4|Ü^¸“MGtÆcôYÐf!6=ïFÝêôŠ÷íOpÀÚ‹Z_¢“ßjÝÄ#f­ü’ìÈw+·ä»áñÊx¸s9—TO ÝHÛmz’ˆì1òK\A¼É‹‘àZ‘-ë9©[ÞyeMëA¾È@iyu4ùðüÕ¬G°iùí9ý]7¦Ëj{œa:R nN·ôe¸Ò‚S¢vt¬stÆžt,ù—ír¹®mG¡hÿEáêý?qTîTçæß­ $¿žÏ´¶@ÁÂO^‡Ü0Ñ[ÒÛü8ˆC+{áP“¡å‘k‰ ’§¨…ô¹ ©þhðF‹K¯cXq.ÕWR¦§®¤ù7¿Ê¾‘ä +óŽ=ŽÖ¦ÚÈ‘/)YSiO0ºtk?tcÿzê<54"Ùƒ;ëêÃzÒ™û6ê«B´‘3J}Í[ÒТÍõ€[o­ì34 +cKƒ ¤#à:+IÛ°-êYX«qšE¶Y×í+XÏÖ‰“ËmƒÚ²wzj­R×ÃÔ±†›ÀörÝ©j†™ã2¤£2Þã=õÅÂo^ŒOkƳŸ„Ví$†¦¸Ÿ¦"ˆ ‹•Œ›ɰ¸ó2–z”ÊÌqÈ,BZ`¾Æiš)Åä  §v”$S [!m¦©,†´¨.íaªD<’Q«1‚,¯¤út×=ÝGJ‚ YzÇòsw °Œˆ +­ƒ%ÇÊžS6ÆÈâ°Ù—Ñ=ñžFêý„èY~軘 ?!ãÞQ‚i:œ2µšºÝç\ £}žR˜·Éú%ˆö²¡b­S¯ötôò˜aˆ¼ôgµá_:Á“‰lAð®»*ÈÝê·É㋎¥ò ÂÛ¨â˘ÜàË‚ä!ž®q? „/’‘[îà® ôlöËæq&MöÕ™¹Ä‹,5rP½ØLáï²¼MŠã²ªèÜ‹¥_ÁÂà6uX¤Îþ$xÙõ:»È¯Xý£4”l¢«Hê­çgû*Uº°®×Ÿ ž…é,FO³@Ö´½ªpeÕ# 2DàÎy SÀVHõŒÏWékñùÔT‘ø|HYRµGLw3”J0™ë„ñv’Mó3㙘úx×Íà¬a\[0tiånÁ O?Ϥ£.ƒ6O(Dl+¹î ƒ-NŽ<Ûf¨å0N±°eúu왳… §܇¹ÔD 8¶Ã ‘ȶgRÔÜùâ°£åìèÖH•µv¾Fj¸ïÈán_ÏžÜxÓÔjR/™oleÞkøËÍÚe|©þH)iÕ¾&-ü‘¢Ûú6X‡Û± +¡°t/yVK>`çV‡AÒ&êSÍàŽjO•®¶2í+­äéP¢Q·]F•þUtÛ]Êèqëí¶¯ëŽæm•Y/.ͨöUÑ•kD ·dÕ=£°Ò\§õFØù|$F•¤(¬·{•VÛ9äŠæ×Ò99jÚ !hö FN~J +™Á±o;eB2Æô­sÓjžaÓZtIzfv›y3ã<âéw´™‹ìs<:|ãâ¢*CÝÐpõ@Tèæ·G·ûèkå€Ò'Ê…D–(ì#2*6ÔP—»vm$­SØm}詪‰ÐSÏN³MWnÙËg*J.Óä§ cþóèdùUD/þ']¸Ò‘‰/œƒÖq4¹kÈÑŽÈ|5µ}M“²ü@ž±½ÿ­KJ~-ÞÔèó ÏÆ/cÈhÜ‹²ª½EÉÊß0êa>Læ3Ý! ½!ŒôY¾ßàacj)ÖÊ[X]ñm£wa4Q_W·„féV}]-RS`z°&•Rñ€ÉY]nK}Abþúªù^œ‚žMh¿3‚uˆåÓ—(f„– 3=”–ôïùЗ‰’ùz?Uð-9ÀKM©Ü5ÄFÿbòûéǕº5æC_–þ¬õáÊZêJç1'k.¸ý6i®´“¢K$’ uGz3V>hÉ3ÿz>4ðmUÁ+ÎÏ»Ç/[¿\èÃ]à:ÛqÁàƒ–è¾Ÿ.øöÁæ®8?ß=>l™ !c]¼ü}ï£hnçrEsÜ!šmYôÒ¯lão +õÏl{˜eÒó©g[âí¦7Ûp7úmòûÕ'Ûø[αÞ$y˜eÒW,Û’ª 'Ûp7úmR])MŠÛ+)32èÿt—;+©Eó7 + ÊãqÒÁíù§OB¿ÜÎ̶Д‚;ª%S ýVŽSÇBº`çȽݪW0Ív…à(\"5jj®`ÞÁp‹V +ÐÓ¡(t>VÆ Þ.kírW»$ jkcm–Œ~ë.š´ðÂÉ®„êŒC=qœ7”¿¡.£ßòRºn»80'»Ò^ªšD{²QðéÅ‚3‚§FX9AW‡äIjç¡á%ý8#YŽŒ02€ŽA)Õ®¯JÍ÷[å“ðýõrA84éT?0QÀoÝŽœn¡Ãðqi]!ä!HM:D|;B` ‡V­-Ö0|\Zv`eî>Ô1Ó‹îß娬+OÈ Ôà¯w¦O⎧ҽzZ½º·TÖkc`“lu"8U»Joê5­eZ6ÌÑß$G(г¤¼úØí­lµ${(ëç/mk ™‹¿‰I®'}ž½„¦Æ ý¸A@…Je¬NÕ§ú-)s±ovŠÂÛ¥zS[SwQk6®`I0ë‚V „§Kqdò3´¾uÛ‡€xómàÑîÊf§(¼]ªG0éùöF¶Àá†ê¼‚»²Y)0O—¢$,5¡åÓ½·å,›«‹4¤­¾U§4íjy˜:_Dñ·ŒÃÁ¦±ÉZ?Ë"5ñù`,H[½ªËJ'»ª²ò^Çß2›†l{Ö+:Ìg‚sƂȊb–­™7SÚ³°qø8•N}ïä‰Ib,ˆ, õµçIG½ý/#œ¿«ìÚÔ×½ÓÏHY©± ‰yóf×VFÂÓ©·GAUV¦²^cHäÈÇyBbÂÆÆáeׂԋMˆü6Ä–§“b"ËÑDH¸Ù”@<ÖYn ‰¬Ë'ÙÂ#×ÑĈ¹Ù”dïû^ë%£ÖƒXbw¬ub­Ç8ô³ÖEÆ£ÖƒXFw¬ub­Ç8ô»Öûþcm‘¢ãøÎ: 3½ß9H¸éçwV„9>ŽïŒÄò·ïß9Ö‰&ûw>”$ÉÊCÍ_€Ï÷ûÕ<ë«M™Î‚4úX«½ñyF(ÕÞ/yNë‹«•“ðtêQ”iQðCN¢(ÚH¡hÒ…Nø¤êae$- ¡ë bЗz%59˜f@@•RbÝ81Õ‡AÕLº`¥ <]ŠW )Y ýy‹"P¥ W ‚d?èÞ­@O‡â +¤Ó»‚3õÓùqÕå£ôú JÅ=lÛæ­1…Ð3%eóÿu.¡K?ÍÐÏUõzŸ¾Ë÷¥N§ÁhñïÄìKE¾Âw• íIyJÒŒìI{1‡€è-‘9ß|¢þïó®:pîçÖ; MkF^UàpCenaø-_Ò—‚õsëIô|}¼¼‰mT­OºiUPÀ?i­µŽ…l²£ØçJÈÕKo:Ùç êZ7Ã@YÚ8Ÿ'cZù¥.„;µ°18¹Ä~{ Iï^Žz§uå8 ”çCÙ1¬1Ç~zéßkÓ/™¥^+È”v_úÕY™ÀXWƒÃ åo­óãÓdHÚµh6€Â ·æøzmun7D®1J”ש   ðC €N¾Ú8ÙR£¬ÚófÍd€(Êඉ~+ö·7R+GèkSÜ òLÅÃ%k]/¸¡6Ó†€ßšHž%Œ°r¾6E ƒúæÑå ÈoÒ@¨—kyƒ€2MùÀTC +¥á«õmvŽÐÛ¡z“êð`j¯Œ@@ôP¥e¶=AÌœ¯| ³s„ÞÕL¡´•;›RÁîÄšôt¨R¡­Û.¦ú-I:´SäÞnÕ+˜Ö"˜*‰A@”†ó +æ 7›ÕîéV<>Ö$‡å¼£¨ ŸŠäÉvBáíP=‚Á*òäˆÌdõS£Ž<9ÂPx;T÷`¶ÓÕ¶ÎD@qrúÔ8amÀPx;T¯`⤵m€óPœ¢>5N[Û°ÞUIÞÎ7–Q¡ž:iæZâ;ŠòyXCkÒ#Gáj×Ûcðê!A~^|1çE]X Q:ôÂèZÇa¤(\íz?y{fZÝð¿ˆèòÌ_ég +=|ZýO(“µ£)ÔaÒ<*€©ô¥¸ÿüÚ}ñ‘ê*¼™´ã*…šVKÀ?é;¬öNø^|’|?Wëké¤ân T)ɸgõ‰ +~ky³òV»ðsëýÎ0Šõµ|̽œv‘ĘGCúZB%´àáæãÐ’ž6i«‹;Aí«´ó±G¶JŸ;A¿¤¡7àçÒ»Âð MiçcŽl†î!ièÁFø¹ôäÚ¢ny1õ­ yaÈWja7úº¿ÜB†àãÒºBð (7z¬À‘­CÐ ÄÅ<Ü|ZvTSÄÛ”ÈI ¿DNÊ×,XÖ#È lNPiWÕ=ˆ!rC¾6S·¥ç¨J1ÈQ•á•D}Ò‹Ï”6žRš~EtЬ·}KjËî±LÑ3¦‘÷±{ +ä3iozÿ;Ù¼ÑI4sþ‹Ä ¹Óï¥þRå-ͧЕéüifv—Ó“åqçX¢ÇmO³~lªÚëDwJâgš9 w§êo%ÑLŽ$qwÁ=‡€ø×Ü1ÀÐuH aæ,¼í’+ŒLGÕäR «bøQL[ÜV—f÷)%ñ.ùTC¿å/e}b„"÷v«^Á”7‚)c½ÿ â‹ô +FÓ¾c·ZÀ=ÝŠíT§;•vså$çÉûdJŠ7 ª”ññYkÄòã©ïêXõ‡‹ChS§ûôkêó«;q¸¡R>0«UÇËÛ®ÿÃ8\lB¢ÎÅÚ’¹NZѧ*Z÷C@Ô/j^éDC~^ùôfã ü\zWmDihÑúÞ# ¿å«|5 ³Q~.=üÔ>öÞ¥]õÏî¥Ñº_}¢Ì°r¾Å#Œüµ0ìû;DeU0†±§„ýïct± ÉYõj¿Ú3nZ—tÔôw=X ¢4˹¨üÖ¹÷Òì: —ÖBjBN‚@@üpLç~ƒ:L¿À¨Êš1vÀ“ßl„ŸKï +£ÞÕKpdË„0l+4ñÃb ÑÇ¡…™ÛIïáÒ%ê,߃H{3pNv¥]½Þuà‘Òµ¹º.=> „“]‰Õß—#—A—1ݤþ~5ÛjÏ­½›gãßÿÞ©9FÜÕ¡‡1ôg&áÕœ¸!’€lüãy’ù›Q wµéa œë©} ÊO¦%†/oûàFÜÕ¡·Ç“ÆðÊ«mÅÚÛ†ÞÏSìÈŸrѤ„Ò‹ö6¥¡ä¿j¡¯ße['Û›Bg­OÒ’mY’uÑ ɼíËÛ>%†Œ«ÏÄ€gC»òA@U¨›D¶û J +‰«ƒo!_ù  **úC¿öÁ*1d\m|#†ŽÉ7ÌÚ׊O1tâ§P¡Q0†¥Ù‰üþêxR%ç,¨º:øö|’P‚hÞ] Bx`„bc`1¤'87û¢( ¤®>ŠÁÍ¡[^†ßÖêö¦TEºÌÈjɈ÷1Íiˆl|L;?v¦ œO@Á,±µþeí2c(arŠ–AÄÓÁ7£À\1…ÜžBÏh†ù~L‘úDì¤Z-yžCž]‘5DÓÉèý¬6â_˜"¸guç/óùÄyâ' ’ƒiò£—Œ‡ç¶~\¤˜Ç{Vb„V'V²~LRN÷‡$±¿XNnY;ÂÏy[» ´2ÃMkGŽ6ýN’±?Xwiè¥c7Æ5…¤sZðwì`B†,þ6Vãf‡–/ÀUÎS z¯ 0ΖdLzŠ ²ø¹ùf q4Ûb +"âifLD³Ê²Ø1‚Mí4¹ ¦ˆxºøö(ÐðEáhrÌ"T'SGó»ÕD<|3ÁêãóEÂS2ŒtLù,R;FÞ#1C§½ -AÄÓÅwF‘EQ1™Ñʦˆìµ‰BN¤<µ£C²ñrpÍ4¯«Ç>ëiÛEx…j§û€)>øbtH6^®3Þ`©P S„×g#à=ïˆnö€eãåàš§€BÖ]ª¯:nKÍ~BÊ)eÅic>Æ…S;Ff±©¡¤n´OßEŒEyzM©(¦Ho…#Š…¬Œt%µM‹ãéà›Q ”¬V¤–ñmÜõµ÷‚)âQ;g¶‰#ﱇuVÕD<]|{c^–ÛÙgEÌ"«}Z;n¨ÀFZ’ÅËÁ5«TºÇ€œÏ1@jÓ=ä¸,‹—‹ëŒ@ÆÞ|ŽŠÈ@›î1Ø6°,^.®-3òæcô@ÆÙt~´^шÛèw±ÔÒ©ò1ú @ãl:F?Z¤|µ£ßå¢YÖ™ $ùÑÇËLu ”(±i’ü÷ÈOp-ØÓÆ#,ùV?³]Á Z™³™r2L¾ìZ ,OG UcxÇÝi1ÔºHZ” h4í + ¶cùýò`tÁ*)$®>jH ÊÜÿnÀ òÉÆÀòŒ¡Í®l”,$®6>:'SX³Â𚢂ÊO¨áe 0³bÔÑ`Ñø8¹®‚“VVÐ@8Éx„0€Âh‹¢Á¢ñqr™“ð£NÆP¶lÐ@¨wØdÙQ‘m6¨’BâêàÛcb£Ð@8Eg²Ad› ª¤qµñ͉Å=}MRØ?: ¤K[“"cŠ ôøðR«%¿‡×ib& ’ÅÇÅtò‡$üq͈Œ)’ðØùK%þ<&Dù>%±¿Xvn<Ú¹vÆÁlÑ»á&Ù¬]5híâãbÚùñO8×ΘEbpkí¢ë7:$“—‹kf G¢âmòêIv?ŒôðÍ+¦H€“ðR«%¿G=Ï9¶,"‹‹içG¥ÖœoA1‹ŒÜ²V+û€¸[2"‹ƒiò?áÖy':•BÌnh²Ù`Šø™]jå)ûpD m‚¨Ì>n¦“Ÿoz|eþ…YÄŰùr«>Í3ß@¬Ì>N¦ÁßQ¶kÇÁv¹}8ùÖS¤Îô£Jù×=2 ";¸X6ê&¹Dñ]•WNNû†"GL €<ƒ£á™0'ûÙ°p|WyJý,¼Dy‰ï¯ïd¸K•¿³(Æ·û¹˜).cqëU± ວ"¨Ãƒ^€b@ßYû›d6\LÂÓ f…–ó|‚Ì!©*Ä@.8nÌ´lÃ2È禰¼$1¿(6^ŒâeñâúÅÉËðÛÊÎ;å÷ظU»@œ\D–mÜõ¸­Z pqrTv–yÕ,“Ŀů[žXã¶jOÅ3Ò[â˜u ¦û¹¸Füõ§××÷ùû¿_?üðý¯?ýéçWM¯üÃÏ€ýËá÷¯¿|_¯ÿ¼üëŸøû3L~ù›{ýã_ÅÒÌ+ì8Ò‰R5øø¤6ÚQ™)ýû×os”cÕ†ç©~°gíñp¢Fý©-.HJ͇œwíËk§Ç¥6´ñúÊcœúà€tk{P«S´º‡9kâdKšéÉb8ÍI—2µ]ñ²fÕô´º&‚¡wX.%‡³q8GgãÇÙð1àæn˜‰& äWËÃ[ #Œ6àÇŒ" +¨“i5löÃír ­õ: b¬V±/öH’Q@X¦y±°~ä®Ù>“u¥Îd+ +*„kiV5ý³àzã'X=†Œ·‹õ½Ÿe Û8‚)TYTsb.G0 ­`¨+¨CÆÛÅúùê{WÿŸ»Òx¢¼z†J¥+¤¡7F§ìp®”ž¤9'šÔIw3f½J%Ã{L­¯‡ïiMÊÝtí*š÷q>‹Ä 1÷8t`×]ƒµO.íÊì”G.5û¦|:à˜yÑ­?5®(.ûSW6èÛtñ9…?_nݪ0¦®¾^…yŒÓ#q5^¾-Œ´Í.[B¢ÌD¶š‚©ÇÜïãøú“Å”ú¬UÍ +O†‡¾ÅÄØˆ)?ue¶ÑTL=ÞÜ\f"›½O¸’‰ö~tÅŠf( ÂÓ2^Æ’„qV¨C^µQWåû̂ړdAÏ“–Á +~„÷4ÄÈ=x– êê |ïW(?¨€}ÞÌ0Þ]óË P¯ÇÔø2¦ !Œy¶£'z»X`FÊq0ˆw67(Ä#†V0³ž«–êé`ü\Ñ·©.þ¯Q(¢“ÆôÊ sµëy”v†úxäêÍŽ˜1æc´z±šl|hfŒèôê:Y³ñè‹']²ŠlKŠ)ŽjªZ»+j[¸¨2OYËKo ¬w“6öÁ£…·ÇÕK•íyDÃ8äè¬öaϪc ªÑ=n |sF»ìy®Ì£òžÚ— ÖFÍAñú)/—äHVŠÎ½ +o +@ü×SÓöþ§ïê ™YŽè7s I IÀ_³¹òáÂÊ;f©6ËèWë‡ ·î(442»™½Š>¸xX³ü‡vƧ‹Éàýü†êj6=\Ü­!ª2KÌŠ7ÞI³ á˜+üh>¸¸[ã²c0YnõÃ…[CÕ5GÔp-O»M·TÐ^/Ön=lfÆi—¹¢Sß\Ü­×àwÜϧõÿÔ¨cYNiï +rÒ”ƒn¶¼¿Y8âÞƒ½&nɇ£Ã݇Àïë—ázú“ ݋ǥ±á ›yKǧÓ^]þ>ìmo¨—ö|”Ê•Kñê93ú€”W)ãûX¨c1ô=[ÅnVÚ¾.%Ÿ G_‘F§¬1^Ü_ÓPð–…©v¹­m_—ˆ¿Íæóz_ñ2†¾Ð#W¶»9{—YJqë1ÐŽŠ—ÓÅöáÀ­×‹¤@Ïôê©U™‰Ÿ.ÖÐ¡Ž‰õÃÅÎD»ªvKkwq·^SÂa™Ü\ÜïñåIñôñ?ïò9tï»|ŒÈÁö(}¤r Ýûê–Á¶Ç±ß·<†î¸¼Çˆ|°¥ÕÇÐ÷÷´Ül{|ƾÝ[z &²ó<•4\gI˜Mq_¿c™ƒ·x*“oÎÅÊP¸º†{[s3V0kZ +¹MAØA0r£:]RP )´15…me(\]Ã}¾Íü2‡à25Z¤ÿàxc>‚Nåð@ˆÔÅRG¨>˜¨t°;ìmo¨r€'žË“r#dž §ÈƒîLF'CÜD#ý½ý<âýRó¹qª1»ÉŸFò„YU›a¿'6ùCr¼Nôa£jO6ßÖÞÌPðx(¸-S£v +ëb%«Ôs·Æw£Û*³j{ù7þÜ—ýfE¯¡åÍÙ¿”·cs ¦úZ7 nÒÚK·Q[ÇU›l_˜"À‡7KÅ„³QhëLň¡cú³ŸÛË#Ú¥ŒÅþú³´àÙR¹^ÛDkŒÍtü|¡¨×Ìåj› 7×Hïópkµà(ÄÜl7Û„¿ã\Jð‰Ù9&A7g$ ~)>Ï@º~|ø²Xw|Þ)˜UÞ)˜§G¼{± e¥_öØ'YÄFœëF Ox¿T£]Æñ²úµ ÞÖŒW̪˪!AIï1‹ù·þÙØ‘?Ýf\¡ž1WÝ1™g&H. ß%'¸ÉhYÅí +ʹ&ð4uò«K¼Xûz˜bZ¾ÖÜŸÍ0ÍÖ#üêy¶öÑôV²?ºÅã¯òÜl1¨hi}É`¨Ê”cýd[yäâ4ƒÝmË+ÉÑý|X³EC™ùfKË*ÐÝÖùa y®ú!ßÃ6ò½ùýX÷ÑJäÈñ eH/Z‰ßMç7<ŽlŽT¿}ÿ~aTÇ ˜Æi´‘»ºÇ{KjFyÍ—,~ ¸·ø}f±6rW÷xšEo¦ÁñF)ܾ177,ÍWo~b]÷WGU˜t[9Ùžñ4 Vzn|•ij"dL¥năçà {i ÷WE‰NÈÃ.Pxûõ}ÕØä™[_EFæM¶ ÊOá{“7÷¯Z9î¶ +žñ4®,|é‘`ã1šq{©#Ìôx¦•jê4»ÂÛ3ª¦ñ$Ûê §§º EkU¸c©#ÌÉÃ6â°ÛȽ}ˆj»#“jΨâÄm¹àÍkYõ…±Õ×ùoì ÂW½/a´Q¸ºÅ3­${eàÒ¡ÌUÒï%¾ûÎ6ÁQ© +bä±^Eîm°MÂÓ#Þ=tú®g³£: ‚Ù;ë‚yÛy„§G<ÍãO~å'MµdÞžv»Ÿ´Âñ +"t±½ÔÑûëO@õÃn£ðöŒj"Am¤ÇØL²å5iåu°M2›l|¬sòþB‘ï¹ôƒmâžžñ¢¤Ô! +Ï g=Î _CŒ„`PÓ–’êtˆ)¡(l£Nƒ ?ö´º²–æTÔ1`£–5Æ@ôf°Vkg˜ñ¤UØûR8öWö\£ ‡a†RÕ$WJ–No(ÊjMÅà¬]¼@f9(IâØFª–ähSksê¨NÆÆ5…«u =ñˆÐ™1ÓhöÙ“_\ +ahaV¡¤Ý#ÏBg¥«)uÝ݉,›BÂy³…µéçL„\C3¢†‘ÓàÌÍúÊH3+$TÕfp.[N³/ó9ËTVêÑþrëJùÚ”â4§/Ň„†©²“€1XŽ=Ô`«ù1¢°ˆÌ hI`n¢IÀš–zÄ8’œA úÕ¹‘¶Ä °¬fYBj~iûž&r³­˜ÏŽ««_މºšO(™t0p{î‚0]¡,Y A¨TŸ¸Ab©~ùÞÄ¿U«“†ÜÀ)Š+1“CÞY…%W·„"Ô²Ï\,:$¨.;öÈW¤Yb¯ª£¹t-îå²$'ËAªÀÀÉY³È•.$*ˆÁ,õ¦á¶ìkENÜ ä6:²Îy +¬k.Á„tyÅžx–v ˆà®‚A”Ò£‚ …©’EGÊMá³ý±=CAm~‚Ð<3äí*€ Ôg.­¹ +’'çȰ<a°WWAƒ 4Ï„RàFNf™Š§TEÜG¾Ão¡Íe!7ÛºA …P“ß´© 0Wÿ"‚"Ì2¥j»”! íasB¯±9Å`N¶æà€Ea_;z—«ÀpRm½…üÓ{J¶¼×Ô#ù¤{Ì­-Ç·Í“J‰MZººDž{M·4ÍØbÒí¬8TS©emTV˽¢øìåS¸•ˆn’£ª©d‰ Z`qjC§0L2¡=ý že%âºBÜnF5Kä&Ó0m­+ ÑÔI!åfËqidˆ|¦mfû©–}Õn›‰ÑjľZî½SÖå<µX !OˆÊ¾—$.HÒ„ áieH­\ú²É…oÆ(ö˜Ü·^†Ð·|!Ïá$²®r‘Œ-½=xÖÍT f¼º4j¥/…8ˑИ‹B4άqP©ô«'wó¬q(%3Ä[mêêŒûl ¡,/M=£¥ÚêžZv¦› 6m'2ЉyÍOÛ­%9ÿ£»Ì²,ËQ ¸•\A¡YûßXàÜŒ¨îþ{a¡«!ÇéWG䆯f¤rÓÎ×Òß麯¾nÔ¥û(½]§¹’Æ÷Y:vÞRðœ–Çk¤è<ò3Ý9ð¥Ï±&-×™¼ ä9N]íM+œ$XŽ\Lª…8ãË-œBOˆåðbéi5wø2‡ÜDŽ<m­î…V©Šéó*I=”X@. WÇ|š¶tÚ‚ǦòÀéIÍ^û$Có‘b<ŽÖA¥·†ÛRˆÏÙúº“˜ä”Q`Œ‚aˆ*DŒ¼&-9¯¿Ù³ºêœQ#ÏíSú´÷«~­³*HXÕ¤ó/lÒ¼Oë¾!]5¥Ï$½ßŽÖ^xg…CKø˜ëƒcJìûù–Yö¯²Sæçnõ¿ýT¥qe®÷úšÒWfÃUÒðJ^¥³Ýñ…MµðUn5_^NÛ©äx>{Àµ»¦DDަ<Ö¢k*å Ô~ð#¦ºû^]Ù§GRg\©¯Ñ åÐKSêŒ:^ìÆÖÎx{m4ˆ†dûþ6YJ›¨öQC­Òr:í2¢íÿ÷ûf<ñÀþ7ElÛ‹à$[ú½Óð'•.÷ðmÚ˜¥µ'æl‡¹$¬'G:¼C>Zd@@2@ÕŒÿ~TOºï7鸼ÙZ45AÙJémk5I¶r[l$ÜuÐ㊜2¼£¤¥ÃäZöAû9ªÚãØ7C+É_û;³ÎÒlûNFÊ%ÄŠÝZW©tÏX; ÜÍ%Û0óÂÒÚ˜Tÿ¶o,µ8CÃ?µ[ìQ­¶ßçÚzÒ—¥õ½ÙN8Åj©Âøã.8*åèˆN×»ÂÿBmúz¼Qº±µüSX¼IóˆöýÑõä‘v¸aQ®C3`–(÷©pïYˆº§Ï{ú® ýuíµe=rÊ»–…!3jÊ»N@Èn/Š=È|aËŠÚVÊâ WMKÇhÊ8rº¶°Ý½ËÓaî‹ÎS™K½<£é‡IsðˆC'ì5*û´7~Ô½Ÿ°ž+(’vwéÍɢ㌶³63ô­ €Æ­®Îá.©¡î‚£××£e™Rñ4ÒV<^ ï\÷ºß½ú|WbO?£ñžÕk‘ÎÑ4¹®j&ÇéÚçZ¥3Xž®9©U’™E5+ØJ=—+]B¿EéÜèá"ЂŒ¹¾ä?½‹i“sz‚$ê”GÕßó­ÒJ^Ó*” ©Ë˜mSémU|QúW.á/+]ÁPÌb]O©ÿM¿þ5=ùë'´ƒVœ¡‘”^/@êÔÔÂFµdNÛn<+ Œñº +<³Õ½Zk=GrE¦9ÛóÆÎ¡›Z+¸½Rê*OùÜ« +ÐÎzßœ×_'°y“V«_÷æ6Ñ*-Ì^ÀËìµOî˶°¨ÝÝGRŠcBŽ‹/ó[øI¼Í ²Ï4Ô% -N´3À{£Æé³À§ùm5ï(Vô8Àã68!¾| +b¼sé×w Ä"ä”ïf3ܨ%lDbäû®ÍáýÖ‰N +DD–Ž3½“ðha’u&òüÕaÈK7×g6Rž!ßÇ=Z‹„ÍVŽÄµNÍi¸‘›¾f$$¯gnOÁs‰®JŸ¯•6r{?¢ÕÇΗ ¼HÿÜ!øžu4›]pÅ›¦Îk¦¯Óáäâïéëåmg0²ã$›O ´õ´¡ñÚÊ)Ý2MAJY~Þ÷,H_žœö©iCÌhy;öòq;Ä\æH£Ùl4޹mJ×–0ó/‡Ìòžîi!JëHv‰f&+•9› ïP_L ä]NÁ¶2Ù°T6Òv{.Gµüìgæ9fCë`¡•Õt ™‚ü¤äÎß/ˆª¬ÊMůG÷¸÷Mvú7Ë–ÅÉåZž·N;ä.ÑE¸õ!ÐÉîÁ‘÷޶ÚK=[¢|¨ yÙŽ£Õ—Vœóä\s}8=  –ˆ%êÔu¡¶óÃn6áºG cŠDæÂâˆâ¢­¢aù!}dO¤›þ¼yDš½TL{@3 6Áó(P3¡Ã]hï<õU«¢I͹vvOϰ½D|¡6F¢¥Ð㌵¯=Msu禽CîG†ôzENd/ï•S…¤\âá d/ÔûÉ+tÞŽ*s=ƒ[3!uGIshÜ—smÄ+â@ÿrrÔn~|‡_9ý¡ǡ7æaš×å„áÞ/Q÷ç¨ÏüŽÓŒ¸C4òä¶«Áš–¥Ý-›KÜ‹T9ñËÀ#'-çêÍguÔOÏmsŸŽl·BÃcù<”Ös§VìíZ¼G„´M£šï5ØïŽk+¦£Ž?a]Æ`stïÐíw NúÒN'a^Ž(C +Æòì¨7Mµx>Ç‘·¹y<çŒQØš—UD‰AüoeœilVìŠgyžC{›ÀxÝœž:îÀ»¨ÜÕã*n wӉйh©£WÌ4£^:¹½œ«wIž&ˆà>=`ô'ѼBô/%Ï…>´—IJ „¼ÜBÓGûÚHà˦ôxåÔ‡ä竨Y)c}X¢± ½8ñ¸4¾ÄËáƒ[Éf¨ÊñçØJo½ðjšŠhXŽÚ¼! µåR64;­Mna¾^šoy¥ù#ÑÊ»cŒªÏ ªE™VƒÛþJÑÉA¨E!ïaž»ïª|7'BÔ«R`A#æýZ/êãKKö³d¾íVXÚJ8ý‰o¯†O©æØÑžš‹ +Ã;s4’ÝÝæ ÔWešW$ÈÍ}Ý8`žœ Ö™ê„ÿ$òÚ™¨¹äÎ[97ëîØJ$½Z®êPE=$^Tì€Ø=)òöË´½—ž õM“¸ýZŒšW¢Æ…ääŒ1©/B‡«T—Ë¡ÕÒÇÞ]Ò‘éß°=Ï õ“j“@ë‘f’[^„ܲ¿«AÓí¡#2µt|{f»ÿJ{툴rtVÅØ¢¹m^‰äÑ%ÖÍØÐ‡;´Cõ,£`¼XJ¬âE¬½ˆ/2õhÞõk¹›—~ÑyÄwhoKÑÍrïFù“„ÒÞÄÞ6}7nd6ÈŽ*ït{üçMÕ[US;™é¨MËQ‹ãG÷?l—Ç•%G ï´‚ _iáý?32ê¥ÚË΋ߥDb¶\ÑP­•Þ²dS8ö|ϺyMDLS7­]ZX˜ô ôJ×h̳2• Bu­4ίÁÊu‡`ÃujÐŽ‚¦Ìqæ|‚Und{Ÿ¬©r€P’ý÷Äî6bàðaN‰\åû’sí\‘ëñÕj¡›ÇˆüÀF‡cø8˜«P‚³JÜ)F,ìzºkÜL˜Ôбî]` q¨wà­¶üãÏßZQýîÿa¶=MmÔ@Ø +T†)XíHf ÐꎰƓ†y»7³rr&‘Ü4E¹…†&5o„ºÛs(¶ø˜úÖ.®˜!b s V9ìùF—Ó3£¿º^–âV—®F +£·«^‚÷3ÀèŽ/€gw¸Ãˆèc÷ðÃ&J¼ƒ ”jYc¾xhxb{¥ô\c³FnoßÜòQ0ú÷æ'R]§Í[©d\]=ne;¼Z#1O‹¥ñxŒÊëcLªd†VÅ;..4Y+}ÄÍè Äf\Þ.× +Â>Ì`+ª™Žzÿ#TtÈÇxÕyHÛúovë:Á¶Õv‹4ÎlzËbžoì9C½}†AHõ`¤åö|ã›nE¾P_oY’"vLtó\\¬‚±+Èz^—Ó•0Pb.`°~绕T¯A~œüŽËî=X¹¹—Á¯ÛlÏ’WÅîãÚÕuåU þÅØµÆ›¯IÍúÎ=KßN0u6f*9&õ=6}ݸùU¤Ë¬9Ùw°N™ÁNyßQhâ`Ê™`ô\q)}¿çi{FTtŒ~ž˜¨ÁîoèP™õ}öžô7=Ÿ¬¼;©ñ`»¿Ã—‰8IÝ¡EBJƒµ¨F°Caò¹2J ¬_)Ö‚íqoDâI8 +þr#Ò›KÊP×—‰CÊWgäw5¿ÃØ•X”ÈÈeÕ:E`¯êÖÎ^¹¹ÃîÄ­Ïd˜€‘xåÁÍ8~<¸ó;®+/ +ióE¡-!³ŽÎˆbô­F4Í0b­Åº½„å‡í5cÝF—”cwm‘äl¼ØV¾Ç‹atnŽ%Ú"¹é—î Fzx+¥EÉêDþï»ñx#ȸGÑÔôt#àŒX1úÀ™ŒÆ±Šíy¾±U?ÃòÔ“Y˜íf!÷¡¤4ÂŽí\¢£ü[l¬Yûcãú;:³²›ºO9¨q¾ùÊð²XQ¼½º¾{G4ºÁ;}Gk½x¬ +ÉyG[ÊLÂØï}ˆýeF£Qß}úT¡’U Ä­˜y7o…¼ÓѪ„¿¾çÁ×ø;¹åœqïˆÀùB ¡àÛ.é­J¸ ãªØéh‘ ⋞ë¸Ã‡ÍSò¬W>Ù¬Ê!DÌ6ÇŽ]]ËÜ#d⬠۾2¦BK¬®•¬©…Û2Žõ¥@×|fêK½¨cr}³åP2êz ´ýmo§õ–Í”Ÿ4ÜñØéyŒ½rË’‘󦎽Pó3åÕ.ÎØ_ÖAØQåsœšbY¦úO·–²‰u1¹O£±UÛó‘e=¡ÕMêšÑÁÐÞjÌ׳ò³Ó5¬¯z°_$ö«2ÛšâX¯âï¼”ÿc¾õË-ß›²$lG€2x€/ºr&€½ 2ü/Öéh¶m’ĨK7Ø\ù?zfÍy.†Õkf푉{ÒæchtŒä&V2z·YŽkºX՚ɣ˜ñêÁê-7磳9ÁNq]s»#¶äQ‚MU±¹ bn•Ä"8=ŸŸ®ïíXæÇ¨î‘^4vÓ¬´oÑÒâê8ÃÈ Ó94W¶J0<¼ç£Ièý±Ÿõcƒ-´×ò˜vÇ™"VÆxCwѲHú‰–M ·xÌÖ}¯3 ™f6Û÷•V…ŒèDƒm£ÞÚ|èþb õ-Š’‹qOí;ƒ›˜«g~gÅŠ¡uc|wrÉú9è súB»W¢Id{ÁCäë^Ð ¼lUú§¸ÇȽpH" FÎÄ•.®RmŒ¬K°C(m±ÙG<Ð"¸õÎ0¼–ýlÒfu1y—œoPB<š¶rlÛŽÇBœE™€UN[Tç"§öÉyK´¯dQSÑÌZMÊÆŠ”íˆ²€(µu;¿"‡›æê}ÄÙ'Óì+ªÈ½ø£³"ªŠ n±¨iùA½šÑ‰°¬9°Çí ©ÕW³—‡dJ·PÓO þÙ34°Å饮j  Åóª#"ïtä•IoÃÝ4Q9Hy æ•2 t½IíÏþñÞª%'ØÞßaçO"tF¡ÌÓöúجªf +U¬þ°A9õX¶]j0|Å6;ã!²5"ЦÕÎ[ÌA£cçwhÓ4ãÈnO®’äÄwc»}Þvt¯n¯,4”‡ ^Þ>ûúÏã¡—{Êéö–ºš>!·/ÊÛQË}¬…†|ù-¦R+ ?Eø}Æ}žÞû­šRöÔÇh‡ ¶žDqRöMOq¡xYµÄ,ïŸ.z`ñÆîŽ"ïéwÙ%p}„j×n›lVÊ %¯ßn)¡Ú#:¶¸¤Åbþ6¼rè)ý/®Ëäʱ¢®”ÿ8øÔþ¯;%åªJ7ù8€` ПzVY$ãíÝ™Ž•åh<¦]Ç$Ý/™À“e%»£w7hÀ£J'Síd­´^n~eyƒÛ·b(YSáÿû[´y¹.2²N±‹¬ùHºŠþ¸ÒALé=#ë-ÇáíóË~ÁûÎB¿Òi ¯5Üs{¢/x§LãÒÇ…îZ±³+,NÕø1=ÿHö/†ˆž3r̪ù ¦7ªlCªEýDÚÍz‰ ìYâ™ì­¤cDMA‹“©¡çä°RµªùÌ:C#'ÉÔë)Înÿ¡g’û=0Žjþ6l±,L{þ‰ÿ[V˜ñCŸúäT#\l¨D·†5¢·S6ðâÁ6Ëf0šƒ˜ìˆg—*Gæ'Ì.Œ‹®`x";ÙsJ†Ç8TF,‘ßâÁy2Äï{>TÁuï®uÃö(« Õ˜ûƒ)†Ç4ór¯øYÃ` ðƒAno CºE­Cƒ¦_qbÑûü2þ++ý÷ûuêB Tg2U}lÂ2Aú¼™âöÉ ÑÚ,‚J–þ-رüv!üÅà*-´c6sͽ `H3v˜d¨àýíaì¾Cœ«±.tÏú˜h¿bÄVkkPz‚ÝãͶÄyÑ Ýú%vÄžÑìBBgh÷–Q;xo‹Fôô§ºf~jKú[£- ó>ÙrzÈ@ºzwkx~êi ‚ÝÚ me1˜ÃœÂÛ iº“ɬ[CŠ×½Â‚$}ßìWþ¢pîɬ™öæ–kv{:‰®W/ßï°—× lÀ-I»QYÈÐMæ;+Ùaj‘ ÈåÕx"ldCs‹Oñ0q½«,b2I×¶g< ÚÝ4dÆkÝtI½sfçæ´ZvC§:*¡$“4ád(•±*•ÔgÓß“í4ÜdWflOFO‡Ÿ;f%¨­\”ØŠàÒk‰kvcËrS»Éœ¦LUz ÔGªã¦±­ ÜÞ‹Ñëéðc˜©õlð¿7Ú°Ùli …¨¯Jf±ªWýyL…åñÃh$Ȳ„´ÑȄڈƇ‰PGàZdH„fxaÁlfËÇ0Qd𜽨úÎq‘ bôMd>Ó»’ +-™uÔdÇE&$ƒÝíAµß%"Ú1ÝŠLH6h¸È <±{²™³x’ÁÇÕ–·Ðe(mäôbøs"ü©:aΙLv.±=Û¾žËl«íAÝ#P;ÊK"x–™öŽb‘ +ÉÜ-Tá=öÛ~áêO~xg3ÔÐbæ_BÈŸ…^ý2ÔÔS[«WGö¾Ý§÷Uû½vZM5¿Åé[›qª›È¬uÝÐÚ%ÛOœ•ñ'›U£É¦åtÓ½—Úò‘ñôr:“y—Ô5°­`:ž°ÍˆÂÆÞ.©ñ f*]ŽïôÈ1”ÞW>Ϫ=û»0ˆj›+<ÚQ‚ö0­z²Õ÷'§qz÷ÙyDÑ\ɬáAßt“íÎ@$¼çºh›zD:Ç!1*êgñĸӡƒ7ìéf û¦3©hBRµ¶2¤Â ß¶NÃÛâ3\<=·ŽËî'ï×ó>ž¦–8¼†œ Õ¬uÁæ®»°Ì; •Œ”ÝòWŽž “yW½‚ã¿3ïLÜ´–pE6M¯*ɶÆ$nc¬1k 8aœÈœõ=×eÿ€n)ØL&G°Sc?Â&1ªD™lN«oé5â[ü›‘§S?Ì3°Èòÿ}ú 2Ä´ú*P¦R-RD“Í­l(;—Ë®YŸf›F†ãÐÎÁøq]Z†H7» 6Žu[4}F¦ê£ÆÁßáé€Ù’N0 +4š™ÎVHªÇ—H[ÃXd”l>ƒÌjø‹`(mÙëââ”7Ó»jܰˆ’@€<}-^TsCìd %\È.9<þF¿ÌòVÁàÓ=æc¶ü+²’é8o2Ñ`WŸû>–ßÚÞ邏²†Õ:F›¯ƒlÙë1 ;Üz{Lrܾòu„ mLøÆm]}9ì¹ùÉóÊðû¹é{–×z ò6woqE‘Iy¦‹f°õš;‹—†®¤ºË\Éô5‹¥?Øz® Pì¼&p³ç$ëE“¿t'“·^L®aÚ‰3I_ø¦=ÿƒdf€Y?aíÍ™kv{:ñªŸ&*E ò¼ˆK¿·k\ÙÇËÞ¡@5;Ì-² +ÈåÝx¢½´Œò¹>=7k*ؾ+v+m¨P\âÂÛÌò^µÜCø®›é õ³ZÖ%c ÁÛu²ÃòNfcµ·ƒšžX^/{ö8qZC-ª5°ÑÌ;=lxîV¾ÍdEb+Ž×sÛÈ hÁð<* ×ÙÚ‚­)½‹L¤ÄªZtéþgÑééÊ!Kf³«#î ®µƒŒ¢¤q²¬?ÍÐ’yïýa°+ýÛÖŠß¾üaR‡£ÙmÏŽÆWPÞö¿˜ ‘­’º]]É®yî ­¬õ +¨1nû]=ßd—HvÇîˆ ºA°#ãôu]Z›C{øÆËeG²¢ûúŠ\Ž]Öû±uÛ0`À`ºÿ 30º7þÿ…#‚”®n¦a̦P÷¤E‘Áæ×“dÞè}_!¤µ–CŠ^Q]J–úR¨C§…ÃMî¨S¬§à&wiU2Èg‚¦B4"q¹?Y›3ìÅòè¾- ËÚdGQÖ{jLDSáR²xn6¬1ìÉÎà¬çeÚ·bÈ»,{ê’õåžî R"ûÄ^T‚…V ¶,DTw²ducm0_ØÔ¶ÙžÛǪò¸.7wgMTy›:vRÇ™lô-+©CÌ™{ñ.¶> ÷É %×Ü‹-‡h« ¸ÅBpC*Æêª§ õVÖ¡%Û5'dógdS¶j¼'†L³j1‚£‹å°ëähf3¬ «î¢³¹¥,'×n3kŠ»êæ`¬]«Yú#ÛžªŽl;¥¶¢{ãÒ ~‚¹K”C—¤ÕªÌД²–Ix¯oà!ßUàSA’| TýœÐcá=>£B=0¤Y•TÈ7ª±¢#ƒ¡%>®«j“¥èã 7izB·×©WIJ"ž,X,V•.ÀÆ Õç¶èã†j©XW T§.¬WjP[OÕ‚,æá,W_¯uÆ“Xô©¸q¼tc¨àƒ¡ÅJë¸ÕÇU¶7·ñîk´$>#8´Ÿ3àÏvú³yßt¸³Q+ݽÙy½ŸÎlìÆâ8}Ù˜w'ÇéI À˜:Ù`ô“";¦Ãè'áÅqx±Q¤õz:±!œ™ÌÁ…éîŠÞÓ[Ÿ"3ÍœO ­×Ôú ¥µƒÌº”`ÕV0ìàlÔê,d*²ž”t>1þ pÄZR‰‰•“ ´ëÑméµH‡A¤d_/úThÏZÜ”âÃVÎd°H~ Ì\S—‡â§›ÂÌÎìD‹ª:1‹ohëÖ„ê„özŒß”dÿðZ^0zG¡1Øwac5Œ<;¶$ÊÕ º‚¡A¥ yŽœH*DÐ>Ó‚² õXcBGÉ0K¬æE/‡ÎNT!É¡"A$ 6.] Îj‚Ç«#¤ÔD„sŠÌ?@ ¨à¨!MÍë*ÄÙ€`B;ò{a%—˜©PiÒhJ”‰ÍTPAmèŽÞƒÕGB$vÆf½¦Ô›9¾¢I•¦oØ)xF…×kôQ¨_BHÉ3ØåàÝû‰©>;sAMpЈ­šÏ;û'*[7Ä7Ûx¿„Á®$µ6lé"•5øœk´y™µ—q ÍÙG@±Œ& h#ƒ¹¨S’1€&ˆæ™l1•ÙÁÍaF Oktʉn‘Wn™åD6&‚I’Ò¶:úB<+"¨" b¨¬©¥P²uYx7ÈÜ ñéÏ0C¢u²_;C«Â@Ë`­†h¬˜´Ö³–3Ȳ?M<¬i3cÏž8ºbÌ2-sÎ2¤7Gp°ŽIÁZ !YW;hŸžpFQ^‚@èÆF²‹%ê |¸©kf@¹Æ E†®išÄ*ÈxBÃS Þ)³›®®ú1ñPCº(D½ +ŒÍâù¸YbÕr¨–]3^VcBT!Õ'cèaŠÂ‚Y© ºšÕ¡ru ŸØ¶©°…L7€õÂ"…xOJchãªz7.²¡ëªˆˆ˜}ôlÙ^X2‘OVJÐ3Ÿeø¶Ð>L’…Ù¡¬©èm3ëÆ\ éZ¬ eNc= ©ì¹ÙÊJ\¬[it›Ê.eÔe\Ï£[véuYÒÇÔÌR¯«3¢g±™lX4þ‰ 0Tå¡B[Hy½àET©R2&M…4ˆîbdcsS®u]´eÐr|anÔú0–¬/#C(¤4hˆõ(\Æ¡"‰abuKØíVK¸½ø®ÃY#“[בë¥è·ˆ‡5夳(hÀr1—:¬«Ö5‚!qŽl¬d·|Dc©ûz¸¨¾Xò}J¼³ÝÀŒÜi7Åw9D·8 ÷'Š—[ÒX¡Œ!Yê–•ÉPÌ{#­ûA*Š¶ÇŒfqy(žÃ<í~Àà]‹˜Ö0\m´k´]ÚB,ƲI˜ãU,†¢ù²Á˜ü÷˜æûtá•YJ0ö¢öÀ.Â:T+Á& ±Ô‚Nœ!DN8{`vÓ³Dèâx„h…¬©L*zM ØF" :¢ ;¨jуtSÇšÁ»#¨•0Åp±»ÁK±GAŠá}:*lIX\EäJ9šš`Vã)Ø'^¢ „ªh¦Î¥b!dÙž[c™„ ÖÑño`yŒE¹° +9ui€SÉB°G‡ /Dlê»ÏÖ UIÙ™‹Aº›åO'»ŽÞÙÉ£q£¨–†MGÒTª*,£T^rgÒ€£v»ŒÈ7@‘lö`ÁUöd»ì.§p"qÛC4H–•¤éÕâcFÛ!—˜Å [lzÄ€ÐÐãqÿ{ûòáÿùõ ÎÃï¸õÀ¾êûFq"yLµºøé½d ò¿¥{º/àhkÕùÎgrÒ“Aõ9yM]àC!¦Bº »ØµÜÓ®0ef?8mL0ä8Êèæ“94ó•h’j6óT¦F„Íß9†~ð@ÅooÍ[ßo‹êßcÐ…öROûé4…±©ìô¬@λô·ÎzÍ[V ÞÚ1Ä>÷/;=ï?¦ï-¥#ov„…þ9÷7‚ý°ÇûÜk¼ìôáq·µïkm,•²¤âMã}÷Ùj¦Ç1ÑÀ× +³É÷{Ì{×ýhÏ!ãÒ6OZ1°à åJq|›jH¦X®8F-à+½îød‹Ç‹?<B¯ßüaàæ=f½Îë~/f´ðâo(ät_àðű>}×½hB£†²÷¶'Zamå±7@ @1}ýþö¯üÃ×?Þ~á`‰ßoXx!e ì3³¶¼ ô…´)*M¯Êƒ!IDÒ4§^Er’B%Eµ|‹”Ô–U׺իªLȵ­¡q™•Ù— !Ù²t¢/o<«+lÀ”Ñåé ¼Ïµ@®Q"Y~)kjœ‹n Cêe,”wnNÌÁ¾öÛmœuĽf,†ðÛrÊLÛ)Í:Ý€I¤ë¸>]Ê3l)øñWo1p„ðÜÊ&ø•!=Îßq¼1&3À–d}À—'Þ*”¦FÏ÷üD¿‰†|_y[úÏÁŠDÚ)ï–¿#Ë ôµßŸ`­¡ì`¸pöLp„ئºù¶îÿkfgÇI3Ó61?B*ú½¥‚ÿì-A¸ñÚ@‘{$Ûð½„~ :1õRÖØ¬ŠDÖúz +ÓV@±¬e¿»Ô7©¬±¥nÚsÈNýJ¹.–ÝAÖ)ØäÍÁlø‹ò*¹Ž+‡÷‰B Ø$¸Æ1iHù_§Š¸ünËš›T và´¢ñ~4¨ÅW5Åy šmÝÌ~”¾/µ`Û¾¼Í$³˜–ýš©9Šÿ´ž˜¦ÕÑrîŽç9Ð!–l^ñ*½7Ccwû—¥äTïa)OÇ´dC)ÑÐí•ÚcφÊâj—+ŠÛ +fÊîËI+ܺi™«mtüÕçXeF½fFð•ôJQÒ n)¢½ {»d5µ«;ÃÒZF oUÍ1€R5Çèãú"ŠpćÊ7 öœFyÄ8¡:¹ *š,óÑ%º6(mg~å%´œTÅš_Ë9,K¨?1wÚ4¤æ&:._IÖúNÙˆ1 e‹§YC,ð›@„«1ö<ðê•Þzϲ¼«B†@½Râòé3(OTŠ·ós‹xßì–y8å¥%Ç ‡\E§×Á¹‹OªKV‡´{QF-—>çk$gÚ¯’`¹©ù£TêxŽ |Dw‚†õùk‚½‘Ñ•ÆW~ +I¿uÙÊs?ᔣ Á÷œÖç“ÓNA"¨Í|q2[š‘*ø|S +(¢Œ5"sÉx0 + +šßÆLóy ‹Z9@eÿàÍUÞZ¬àå»>6{®‚#²™Ba”ýÛ‘ Æ;@‰˜8÷æ±Á^[™?¯‹ÌÜF€Œ¼ÅŒv¡Áëi3°`:’0{ÛéõƒÌ +øó×vè¯íQn ¥âª@áÇwé§>@™í‚„|€+ýb£ª[Ö@×z–í«ü•bdK†Ë/Š;îÈ÷Æ•Qæ²Óªçãliì†ÃP6Üöæ¾AÄ-ú"è IÉêið«R'k ûç¹p¯§)é<›vÞ`\6÷±êM0Ï«èó$ß_{}™‰}«ûÏ#·, G$JõN€÷݇ˇèý©g圱lë³.MZr€š>g²ÛU?O­c9ýÏgq{¾(î5:ÿn •5K€=²ú¶b!`‰®Îäâqa‰.'A€8R«J& ëNXûkÝ?Ïa¸’jV(·f€+UJãÒ Ð³~RÜ™a[/–›‘¢·"RDÐEÌ-9»l y®åî?¦v‰[0éYר•z34!]òDkÊšw@CW¥¸ z *›~  ‹õ$Úì®äõRàáZœV¨U\6Ùiyš¶~þs{HgÑnZwÃú«ÃqÊŒzM¨Ý³ð}mèí—˜ü¢EûŠÕLé]MÁƒ¬Qó[] T­Mú8¿•ñPiAƒ“rå]84–æ‚"ª×b×,üwrÒËxËhÒVy=¹U5µ,æË6ÛÌÔÜDêÃà ‹G°Ò;e#æÔ0´[àaÖxç€ï£IñÀÇ…¶^Å“DT/4Dö%EËâJÌ®÷›'*ÅK÷œß6ˆ·õ·g +;Š—Ü*D =·W³5—]…¸ÆY‹ÔÐ_jhJ^u«Ù\²WݪÅT¬Í_µ˜üb»jhŽ/µ4YPO+2kÜ ÏËq{kÕ¢Cÿ¯ýWßU!ˆ•á9¿ªhíéU2tÃKiÑcé¥ +éÝðFTWá[ëÚQ‹G€Z¤ÚáµqÔb*wÂòÖݪU…ôGóJ^U¸½´Jð\%˜æžÿ,ÁùôQ|pRl/ÅTÆò‡//Å÷&$OôÿŸp-FÝ~4ÔD»§ó.¾SJ¯Å¯Ô P7ÈÖkQ·ÍRàÈ…}N,ÅTç·ƒz«e(jK÷œ޳ +³ñë©Þ6¦V‘H +»…TÒ”äb˃âóà‡¦;ÒÌ%J°`7J¶_K-µ»%ÕÁÔ´ßtM1°‹¾“ñ³nX'ZsAIöø¦ŽS"ñ×nãç?—_¢ wÜà&4}ûë\Ñ­=¡õq©ýÈžstn][:KâêÌõtØ~žJÅÖŽ Œ¯ìÕ `L±Ë›KV˜… ^‚…³Ü*›*¡¹y¯hƒÛ´nú««,É(¨:q9øÖFÍ7„¬{€f¦£ ÊæŽõ¾ÊS«)VYêlÛôˆaÏÍ[pù­ä­2ϼ¨ÇÎ¥ "o•‚èͨ¬“ƒ4뛡 +[G+:ߊŸ¹8©2÷°&Xa, 2)Íoƒ-õ%1ÊJ åÌŒœ‡Õúìùlê<„ü(âtÓ8²mPgäår¼”™§Ç96“ÆF –-s6Ê+ؘ£³Ó2-|6Ëœ:L©phÃÖ0».K>[«š²³gÛÏ>‹Íñ$?ò9„þÔˆŒ“qe½½Áo€7ÊKòq?a#)‡¿Nð|Ø™] ê>>ÀŸõ‰h‹á}ÍYKk©0SPÆÈß™Ë[È‘¥ôóè.ѶÕçRóׄ=¦×ÍñêŘAÔÅfÔÁêˆv2]áŽ,â•BºÓ]œYhÓïÓÎIìnlU[§eoÄ ß:-W#‹iIZæ[ñ--G B°<|À‹»ý™™9±CÄðYQÙtvœÎÍᯩyºZ^7wThÆ„#䨹9*!ª]i§ãÙÁ‡ž•‘pAMiújµ“%ÉáêàÒˆ•÷Ûà)öÐ+¦lÒ\ùsÑ×ÿÕ™S¤b6î¥sk„»Fr÷c4Š ÷ìq3J•Sa»Î\/1Î&ve*\A†Ýe6³ù®!Ò•‰ÄC¬ÍTB.Èá‰8§^°#òó]̱kÔè1_!çÕÁ“ò£pÁx©|®X™öWž¼ãwÄ ¶±éTHöÉë] ¶±’¥ÛÝψ±väÄÖ׃ØÂnb—èq,å“€¼ +¥QðùQ%ÌÅRÛGn¦än™h?!wLTj󎚀ãnš‰ [m·ì]ÿ穵qiº¦Ì+ES¸ß^Óá¼Üx#RYc±¨Kd›· ^¯øGå ÆUrÄ­:F‰i‚É*`wWUo•±L¹`›ÛÆDØà”§ÑÑ«ˆ”òl¿•ý³yZùJË“‡ÔÌôCTA,YX9ŽH”ÎðÌÔtçnßÂ=(Äø!ØMú#+Ý Òv<É ÇBÜ çeìIâSÖÀ©üô+š¿á…Cワ7¯p|k‰¥o¥ûº¸]× æà½}:å0µì=™yÙ.V+)¶::7<3©êQa`.iJÖv€ØÂçÓ½l0ÕVðóêL +’ÿ"#\fq®Ç®¼¬ã½`HÜÞ—LÚä·ç)j íŸGö|ü²^±>¿ÿGy•cGÛÀܧ˜ Hûrçö!œH‰ï¸°ù[šv&ÑøE€ +hØ2A=Q,QÚJC )¸ò…‚hZVÛó›Léq·zgþf¦B¡sH_‰ +çS”ÍC’çD Eå)JŽX™(9lM”Ð ¸D‰#àD Ð~Š‚æC”p +NQò*+7ú“(ù¹'¼.¿­HPÔóQ‡@1“î::ÛRáV‡ãª@²Ò÷â*h÷fÀ_«Ö¬–to„¦q–) £iå´÷GùEYßåg1²ÒSäÿ+;ýÑo%ú±®—i%G—* µú «.­#€uØ3Z%Gqm/Lg¸WI”«7—NWo”úú¢ÞDäÅ(—Ç@±ÈÂÈ›EÈ +í°³B#Ÿ}U•ÕÚú¸+4Êr¶ò[µF/¢>j w +Ö+¬Ü^däF_—ÛKK…O;ΟRˆô>ÆuµBã¨ýl ;Ö“~áËyHºN-f¿jñó!\Ô‘96œ„¼‘"YWljãÿ›z¹#ÇF€“7R*²_l:¢ߎP÷ÖaŽäÈqàääɺp˜Ÿì7Ž_Ù@Ý—„ìÔq2ì¤u™*˜uM3‡"·ß –£ŠÒ—ÄìÔ3ì$v™*˜×ö³æÏø;3ˆùHBâÏí,‹YµõZ¿R»ÀqªºúÈ’$Ͻ»Ô@íçƒvœ +Es-à QJ†mo3sPë#—åØ:€Ä´HBÉõ°eÖ2N´ê¼Ñw ,sJK¦Ïfê£óØ{ÆYa‡èÂF°¶Òçm‰év{”%î#X¸o‡wŠ=àûf¯Ï !ß®7’Ȳê6Z?¨£(;`}Q^MÀ©õú{à޾7,£^.!áR­ì²ò†Èó[³²-]ª¶OšV ’—{Ð’÷HèB¥Ê«ó–-F±Lc_½f\…À·å\Ø>kÍC’%ó?ctá =QÇÜ¿%Ò¯‘غ ᇞŸ{tu;ƺ‹Qh‘ g–ª‰ÖÃøpR¨*㘢–æ!;ËXÛY¢‹Ð[øfT׆D© d6\]Öu´ú”ïÑêS¾G«Où­>å{´ú”ÓhõÉÞ£Õ'ÛFëÁœ'«Ï´I{ÎÕ÷ò½í_§Ü»¬¨KüKî5º–x +Wyfýõ>Yt§ÁÍOVEàô‰**ÿ ‹ò9˜…Û¿I9É–—¿7œ¤t^ΚÊ:²r!âKÂ@_ËÛ›%ñ’—?^Ô6æÙyK#(yóì$sµßóF…Ù^§NŽ\ö8¸ l¨W[~Mkn?ØÈ‘c#ÀÉf²"çØôdû›%¯Bq© t¯F¡L£_ï ã†oˆã™hv~{c®ë»r0hñç ùb$mwçÕѱbŒW“ :ÀqÜrÒêT>ÓS ës"Ž\k\ ›Í¶7¿6@.Ì…; yª¶M´æ¶ÀÚzT)9ÇKKõâJä°¹oÍ‹ ”L_┵§Í’wßîˇ úp:ÁMæÇ€ÖºÞ-^Å(W¦‹¾*@^ô¾O¡k¤:ê‘-뮉¤Ü Cãáñ-n3nÞ;+ùêšÚ2c®ú;ü©ä€£²^Æ”Éæ8¶!k~z½Ê +°­ä†QZV°¬äFü·,sX–¶¥URÖ’ŽûŸ£@«=Ëš›‚­ê×7÷BïMxÊ-¿|°©túopSÒØ"˜þûZ(Æ×Ú€L`3ÔËÒ‘ùÝ¿þ‰¾Ç'×ÿÔ% ¿Ìcƒü׌iÛ +ÈùrQ:Ãv¬¸˜þÞ'KÔ~¼Vc»™¹¶iØÙ9S³4üí03ù7:9–·»˜–9r”8ùl#ChAòd¤ñ›u–¿$d§Ž“a'­ÃÔÀ¼”ÓrˆÎžï5EŒoR[SŸîëçGý#3;‘ +µÙK+ˆ^ºlLÁÉ…å`õñ÷WˆE„õGÒ=iWLQŒB ‰:ù7ƒ"—?èÑï½–…>°^÷N*RŸÀ¸×WQúö½©ŠÐ835YYãã1nŸ"ó¦¹-Eë\2“@‘úÔ$MåNQY_·[&txEDê[|>éŠô«ãíw~¶Gˆ³µ}âH]˜ºYÓÈÄD –®”6 @Â0>´CŒ, ¼!bX·¡z Ÿ#*’+˜IGIùHÀ€B~ÛÄ!HZ¹zæhÅÕmþGy•£7—ãÀ|Nñ_Àú¸/'˜|ú“HIß?èÂF‚ïɶ:³ëA XÀ‰ À`îšòšÝ1é˜0Mš^žZb£&áÛ[¶ÐbcŸæ¾[ÙG+˜bf.æ°èJ<â¶ŸÖ2*'¾%;óÌ€FW¢LpÈñÐ]îÈqY9žº´­Ï/zþáhR¿ˆs£o’ˆKŃ?ì)©ò˜PkKY/:eè"º}ÏQ÷ -Zø]<­|¡Uå ¡EÜw~ÓjȚЩë);âqãUgEG§@ñŒÄþ.[~ׂ&ñ‰G©+Pp2Í®;‡OïžÓ³®*¨²“øa;hÇó»¹kËý†àÜЂnMw‚J?;Ö ‹c²å~pL~çbÓ8*]ãà¨è±ƒc ZÄžgÜ2Þyšï"%¥K}ÀHþ¾*½u¤Ùöç—€…z0\Kë5`Vt-g20e£ÚZ•I`YBêó +ܤî0ˆ²:@HFœ‚?],b)ÒrT°tŸáÚ7-î³tïÂO”/d›ÐT¦º +ÓÚ"Áò:fÑÐ(É@…äíaÛÖTeÓ$¿ÈŒ>ˆR‹µõ²^Šm¡-ç\ohçÌüÍ}ÚXõˆV– ä.Á…çZÐ,uöa3L©¼Ò·­2Fc~ß7ïrìwÆN·)¾‡²U†‹6³Î¹^ìßP3ÖóóäNV6×Dˆ,¸&mÛúcg1´žR¾Î¥Æ>sòñ^kÌ©ºÚK €ã¦4æ”íaëŒtw8tÐ|×@e{8t¡,×Aè©3È'/‡Î*Ûƒ×Gì&3Ö-—¤Ò."Ãó»„‹Yeå±èÚÇ¢ÕúòPWVþò x|-Bå{pÎÏg²ç]¢—æñ‰^’Ç“µKôÖ;>×[ïø\o½ãs½õŽÏõÖ;>×[ïø|o½ãó½ôÎq“;>ßžžv;Ÿe}Û¿O¼ûîr .ý.°™^E@ÔåÓç'¯‹Øw…‰oÍÖ +²è1W”3il«,² +Óü|X–o#òŸ-¨ù¸¼å +mñå£[Œ½ °Ê¸ÙêjÛè…¼# Rßkÿ×Bú#˜VØFƒVG6r^|2(±.w+.òçïÿÿ`ÕNöªåwÿû/»–§Ø#f䉹Œ·p¸ j™([ÊXLCÑϹe¬]Çg‡NU—m¸Õ{uÙc­âof9U;„~“sðÚGV°X˜9Õl–‰ÇÍ{śӟË-ŸF>!ͦ! “""°×ï«`óŒžX¾ëá;öðd…‘Ô…ß—Æ—Ð| +þ‚‘×CN˜9§êæ®'ñÓÂcLÛrŠ?Ü{F¢ˆƵSÒH"EÈGP¡ëÄj-¾O·¶N‡à°õÓÜK|rpà¤m`K„.üs,ˆ¥‰:öm&QWüÑ÷Ñr¿J‘V0ƒq:µz}0<+ù-Ã$ˆÁ0îP´}Óå V…å¢íN†S–‹¶;•¡`9±Ç ÔÓ–í]„é¢íNWaºh¿Ó-C˜.Úïlõ`¦³ö;ý¹0µßiH<Œ§Ÿµß=ý5“ö;[ˆïF3íŒG‘j™º2.6N¦ßô¹†%¦Œ®¾_ŒDh¹îN#,c ‡•"žâå¬è\U¡Aú¶VÈUšU§R°©Ž—ž× ¦†J‡–Ôµ÷šgA¨\ëöuo¹ßÆV¹~_¤0šübaÇ@+”³;/‚ìAÜñ+øÉ¨Í°BÀhQ•sÑ>Yhµ)ª[aPõ§(tíð lÖ«VßÙ®Pè¸íç­Y8µH‘”²>G-ô}?¯¸ +7ë)Ã\<×Qü†ä¡]ú] ,–Ñ~z½ƒw1xtƒ;e×äâ~TËÕ/… ¬vaÌGZ-›_xœ×ÂX§øÚÀ¯ÑJÊY“æÕµ6pµz«©Ãô¨ êð·Ú@ÿZE«6h0ò(÷±.ÊÆ*W¼”Ç[µ“IäÀ²¤ri éÓ&àµJÍ&ÚªeVnÈÆü)—º³§ñÍ(.,/߃ŒJâ÷ƒ¬d`Ôà™8”D2ƒ?ÌYw^9‚÷ØVòHw‰²¿ ‡ôd/7JV-" »bX¶ÑÃîº ¯¤†"i57ÛÔƒwÌXéæ¾Úsñ $¨êZˆ!Äê¢È¯Ã†^°ÍSõ.I ©ÄQ MtWBñ+Ñð+²5Æú˜ÖU€¶!~!k©—(ZƒÙBq¦¤¨ˆ9öЉiAÊ7£±K¼]Õøy‹þ¨Åâ•?ÿãHj#'ìÞhÎoÉŽh1 K ‘ošñ¦,ñB—aéÊzNÂCÀ„Ü-¬ñM­Æhœ5¹P´ôfü–…:Û9äÆÞïÎ[ÀÈm\rŒ¾Z±f¶0®ÓîP­ðmC¦Ç+¬$»ÚDc¯JfŽXo%tO1ΟQ Û– ¥¨h©kÂì5§MBBÏ öóÍ0¶™ÙÀøç¡W+¥¸È&©ß¤æŠ¶}Ó¢¢Dex|ó_Aɦz(79H>öè _U$=MƒCm»qîLUÍt‹‹nö&®¶f¹àfŒï#k¿¥›#óN°ŽIù¤¾UƒäÜ“î!«Eçôf=¼±m-ªmŽ›\'99i4Ÿˆ4 ˆÛíœÏHkÚf6ó„Ú-ÎBâ ¢l»Y{¯g™ÐM[O&ÇTáñ´µŸ«dUïLêÖ73úÜúߟ‰2å¬iÉ¢`œÉjã?Ejw&pÆ^LÍfª³,e[ªOŒl{½¤ÆHsïn’€e]$úm‡1Œ¼ µóÊ«»¶æ^…7 8à +:·щ^Òûº +§û$ù;“êò Æ*ôõj·’CT0¾‹"#nªÖËŠŒ»©Åý89 +×mÖÙ¨‰”s]í`îÐaƒ4s" ôj>1º9Øú Ä÷N«äÿq\9–s Nêl,'V+⤾…°KØŠõ|½-‹Óú9x2]vœ€$@:z ¶çJØö" +IO¶rØ‹jm„gë³ +Ñ·åê|‚åh|i“µÔÛâˆgΛ7ô½rE¢®‡Š +‰oÑç0–Uˆ$k/¤œ§ª^3ß°ÐéT&}cðe™`KšåÁÕqÔBÍÐDR'Û¤LZm€¯!™ëÓþoªåÖ$¦5¡ex&x©r€y5?­ Óµy†ïßÏ“‚¹zYŒ¬o¦ûizñ†~ˆ:‰e¹c^O>¬¼Tå$sÿrZÅâ¦ð¬Ó3p"0Ó²Óä³C¯'Œ_Ô€ãy2vüer û kåÀŠú«‚ÏÓ1ž)Z™« &D_ãYôÏâÀs +EáuG5ëɵ­"4¡HˆûäŽ[Ø6›äniž«rÛd§ÁÔf?î•̪ìpÄ&,»3ûƒ¤‘W3£P£Ö‰‘ןŠ4oUÑÊ¢­AXq-eÅúüR¤Ñ~“{71C°Y“A’˜D¢()œn èAu‰µ¢cNŽÉ !úÜæ¯¡@r,å¿—{žbë'ÈW¼ˆþˆý5óA7Sh§‚/ÆÑ~ù$‚:Û–ÜŸ3²Ó¥šMÉ6µêI"Å‚ Ï/Ë)1´˜˜ƒ]¹þ} ÝÛÍ`Ëë˜Y¥ÝkÔ¦yÒvŽ¢`$“´C3¢:ˆp·…GÌAcÏøS’Ùc$O™ƒoR²¾½Nd>LáÊ'ø¾ïƒK¬ÉþàDçëNÌeŠoÒ¹À4”Á*»“rùiÂ\dtrC•9G&š^Y ë`/üš@r‡Q…’D®|lR›U.¦„Ù˜›½–}ålA(qÛlªÕØ b‰ìd^Õ3}UtýSÌfôÜIŸ$ŽçÉRúÓb¡ìŒ÷:ò3Ókj>í¯:úù/VÀ¦ÐuN°&v‚õYŸ 6Ù¬ía¦‘ñ"îº0u(—ýX ó–XøVÄÉ@Á®F¼ÑÊ{³1ì§5[;VŸ'6¦›µ|óæå5<Çã>ÿØÑhhÆx Û %ПÿûïÏAçm¬ÑsnÚ/ÿú·a¨T½²Ì4º±šó ÷çÔ6&–…”×ìAÔ²­6Ÿý‹“˜”S1,“š°àTò¸3ˆE<ÚÌL›wŒ:ÉÙ`Šÿ4Þ_B³e””pSï½yäd:Ó¥ô#š¸·Gaç)0Üš LK䀨&·§×³Å“*ó„hðc½MƒÐ%s’‡¸b€:ñ{&àš,šÜc¦ü]‹áΠR,†ÀŸ;3}WÊñØ® EÕ¯±à5Ö²²hïi–¦®Òí²0ì5î¼%,U—Á¹X¿•“„»®Ÿ÷ÐÄNNµÁ“P`â‚fƒˆœýÜf§…?êî +L§o¹í{XRâxeXAóœò¢Ë¥ ~KôºüŠ*¹°\|EL~„O ¶û§¡´ÒZd²î8cÀˆëòeh<äÈ—}¾,4ð]©O—ü鵑¶KeÖÖ‰uŒäÆÿûäè™eeèÛ"É«ãÁ “ Þùõµkga»½ïcŠ{ùyØ*ÔgfŒ>® å„Ýþ§`: õÙX^hQ<_‡2YÝíµ;Iÿ…’ê¶ãDBE–â˜îp#5ß™˜z¨R¡R¤öR¬eÿ-„Bu{#N¬5”‹b°2 À´;@BB7LŠº _F?¹d÷N—5áïÎÑÏX`E—|aÛ•ß)9´»ÈcÒ°V”vák…ôÌVMYÛ˜h[kM•âç0ãT—xÕag©r3@Ù°àÕ +Ì&}ÃFPѨXÐq¬7£½òͼ”ª°¦dXÓaÂß6cÀŠLG„*M±$~ïrý|¼êó3µ+‘ØÐöãwÊâ(üÖ½ëkn|ç뺆¿/´2áVÀrcZq½_u˜'MGݵÌsŸà«ÅÏ š!\‰š©’>&ÿ$kA€5YXŽÝÎÍLt¶kN*ƒ‡šÊÕ…1†ׯ¸ÌaÏ ÏÀÒXǤSK+y]G‡žkÛ=w™!°k÷Ó P°\®H~lèû¥ÁB|‹dÞýRcÁH‚ R=’Í·ÝŸr† +ÝF,GÉ,ȉ†#»6Xç5YçÜ2 €PÅh:S@ YR¾R…^‹œüaÚ•Ý&ÜÃxíæ—µ=ꃵåY k$øHkÛ³£‡çL„@’ø8×CfÏ!¹flb)fMéðE… +¤¦CÂ= AªÉ¯»#îÓ(ZÄ'ömB±sâ{B—`-¾÷×××íxÓŠŠœ Ñy ø…Þ~`?HÖ:F:´ký ò–Ø;Ti&c^£©´ìtþ“èO25Çÿ…!íùR|[o.ýTE“èX¶Í¿Œa(¦Ó¦_Í”÷N=¸çjÖK«¬®¼O:¶Yê¶WÿÀH±übMwŸ¡Ê|¢†ÀÑû"ˆ”u½>øaŸ³`¶Œµ5ñmÁ×içײ.YJz‚1Xï?ßÛí¸!â¿N}2¸¹0ézl¾0Ëv]Þv0_Žíö4ÙæVomý¸£÷|±Æõc?ˆu™ÖÁZ©{O_mX—òæ$À¾~ž°ÿ˵XùîMg¶çïa³º€^SqtÕEøi{«‹¼0 +…æ³AHÉGt–ÿS^娑å8ÐïSè­G‚û ÆŸ>Ä8JgîoL`!þ¬’j^]Šä±10EpäÀÖK¶‚%u`'Ä.G“¥F‚±Ú\w.‚ÉÂêøyùî߯èæiËÐé_€ÉòNv<$]Ë‚Íþ9½ýv€yKm÷³#Å[—zDñäý˜ 9:—_ÙÜn^yVˆ+ŽÂ&iÂ#´+6‚‘éãVM@ÑÃWB^èüø:ùpŒ­sæ$šxÒ1LùæîªÁzï ߺFdÜ[™)[ÒB™¥t—™„î2S:5Øañ¹ò(3›[§¦œ[@4eVOéµÌÀÚz”™x_}”1æô(3°šeö\W(ˆÕs¹ ãWeöC™é0L(s<éØyºnpB´ü¨19oô10eJ†‰žqæÏ=ÿõõ*Ô3KRÇØ:ÉÆ·ž' Cªì䱿W> Íï}kMäúÓ1aÛAæùAîÊP‰oNè_IVÿ›`ÿ¶f ¤ùö4Ëv3B¸}4lÒë/ÆúèpX¶f†oåÅ-›) ¡a«¼Âq0;†ÿoȬ±tW`â-µø ­†©.Ø~# ™Y>l6JþašzÎi€/Æ26ÙÊ!¦lO"±hâÀ:ÿ¸]™r"’' ð"sŸƒ˜CrqÇšVé­žK£\ëd?$ü]í ²¡ÎÍÁÙ Þ×ð3oûmA Êú½ mÂù7&'ïz!9¾ ñl/wÐûýÇä`ý(\:@ÛU°‰P’ç¾ÛBn  ªaÈ—jöUrã—Vˆ-Um2cJ¾®5õ=‘ß×µfè¼énÁO÷>·2?ÒÛÞìW§Ù­ùùå\¡ž—Óu¢ï__ “?ÅãÜæuÚŠ)`?×ûr£o77h^Æ4É+y¸¥S7ÍYP œÛ-T¶ÖÛ%¿Utq}˜C²õŠ-6àkQlÄs­{§¹=lwé9Èäö´ôApû87×Ôs#´COc^Y©ÊÕí-–è"®Úyjïˆ01¬ÕìÒ!O6?v8]ƒ]4£î#ÙiTFnÝ÷s^#÷¾1"=èDÁE߀úxÐ7O×å|µAFßô ,HßaP;}Óô‰áô Œè¾i/D¾…‹ôMg_qúbÂéû>§ôÍ?Fö¦³„9{ãZOcoü?ŽaoNîŒÔíÙÔ°ŸŸòUÌ7êæ‹“1ÊfoZWJ/Ƙ7{ÇÜØS¦_·²÷NÍ&o:;œ“70Ú€*ÓåãÕh”Îîæ/˜øU?È›±ô ïûœ’÷mOI,ö™ßúóvçï&Êþ7òö_yG=¿É›…õxwÀþ âÑ7òf-OòØÌrvö'oÆêMÞ÷1%ÛÛœ’rX!œ¼Ã +qÎö‹yË?ž¥‡Oô ï°W8yßç”l¥¶òŽY©š#27këñ`î°W×ÉÞ#s‡]Ι;Ô~3wX圹Ã*'¥—Š«îß•”l;$£=¶¥óký”ÝíuA…9—­G°™àÍÖÿ}ýõ´öí:‚EfOJC#s +b«¼QÁ¸¯ãe ;J ‹ ë%çÖÀþ³ú†jâÀXeˆtÇ´¸kBe‘ýÁC˜Í „µTv®BÛVêœ_^ÃÒ>•…–õ¶ÍƒÄ“œZmŸ2WÁã]÷2·ïgÅZåñd•Mùã¿ÿùM‰³‘>Ö°á%Þ™Ôoÿý/®a¥T‡nk--6ÕT'cècñ·—œ+³Ê0y+ÀvDŒItLŸÎãO°Rø[`³ðìeÃÆêS¡¾øZ>–»¼Á¿yÁå([ÔäSì—Õ\!L½ªX©¶ƒºËÕ0÷44Á<+=IY:žHzóNïoÛí(¶Åäæ\®%ß;ðQb¹_±{€Ð)uj« E©’%iךõP5D»VÎ&C¦ßÐuЊ¡ž÷‡i ¾o9²8•€ÖØPœÉAV>}2œH@Ú _ÇQ&Ä}¡…~+ûÃ9 ¿µâÛáö¡ÜûbèÖÏ¿O·rì²ááOÄô»^M"4pª$V;Ú«Å0 p!÷1-k-YéRÕxÜ—a-XÄC`sÙ‡YTKƒœ(©Wa¯$J•¡ˆDk0TWi¹ù5”äÐ`ݬ·9›žšýákféêñðßžê,t<¸ôÛŒòFrD~÷þ gLèÛ‘5ªruÀÿK³®ñ:†àÜŒWü·rE›<Oø±Ö”à 95ÿD°³lŽ9ƹ¡ÿ« ¡Œ°u´ß3¦v!Utøl=v!0 &o/éB`µÍ²bë9{·J›Isé 3£—Ј ~5"Cm\ÈÆfN%4"û±úÕˆÁ]iDét «ƒЈ„]ReVæ5b2õÄEÑ»‘j7ÈÇ’ùÎ`/\IóȨ*« g@­¹J²/ +Zu^3šóûÙÆóɼ:v›‰,q¡H&ähÞ.´Nc»HÍ–OkL޵äý=¡ÀøÝJË™ÄÀ`™lZÒ™zg«±ÖÛY0né†*‚udCöýˆuf·™«Bøm'e‘'¥ç±m+iä}ðQ”'Ø)•ðÂ~¡EÐb¦ù6,’­_ï>þŽð&‹°×­4¥pÿ<ðÞfÓÓ‹W‚ ý4•ÛòwôÒŸ³QÛåiøtT½ Mœ°–å[ÌQkÝrÙýS7fI¡[(KÏO¦þ󟪽¥$TÃè(¼ï\í tbñ÷KȘɤÃ@ÎÊÆÁ(åÕÇ~ +K-`’µêïN7AÕ}¶6G1+‹¡VR¶ ³Þ¤iG±2éBÄݜԇòvF4âë5m³[l=žýQûâ<¤$Í;ÛÜdK“ǯ Ic£øKß·iß(d›HÀм)ÂÏV¯TÄ04Ï¿GÊ>$µ"-6äg!1²¡'+}êöÃhqSïeŸÍ^ÅwÊ]î+I^þ`}‰Òç–„å9ŒÙ½ÖÔiÈÙÙŠrÁÜtɯi¤Üw2¬ýó–7 .{)K×ã÷·£(G~˜›1 –¡Lñ”E5h;‘jRxÍʪ@¤Cšg%«hVZöœ>‹òDKÛtþ³€ðð¦Û%ýÏõ¹D?pò»u<«Cº4»Qv$Ú.{Ûß°n?©@Ü`chésÈG÷€+ÌN°à?¿œ"­T×0¾êó #è-·CÏý‰O5ÛüµOþsôÉÁàÓã #x›õò ˆPš9Õðóíj®•EÆÃ£„¢€ü>0fÆž—!ÔZÕ#ä =ÏXv Ý$„Ç·~–ܘgÇ/ +™*ÄbšˆîÑÔ\»€©&ÚihTÓ+òT¾,U“³å^!Ë©N½L8WÁ•™La0—óíª ã`É$ž{•%ýgM>ï ë”WÉ•\9¼·å€ôH‚«ãÀŒ©s»? ’?S¥î[U$>ˆ-°ä-¶Ì.ëÆxLç…$ÌÞvFý0æLâùcôÇŽ(7ЂۓğÊoÆ4Û „uòzùáZêOÙšþ3²l_å&F¶d„ü2qçõÞ¸2Š.;­Z=jKc7@\TÛ>ÀÜ7ˆ| E_ZAR²ZÙ|UªZ-až ÷zº’°±Á³iç áÀesû¡žQѳ^E¯ÓøÆü®×ÝMì[Ý>ܲp,™8Lªw|î>\>Ø®ö‰ö^œ±lþó\š0´ägØœ}È.p¬]õujôß›¨âö|™¸×èü³.XTÖVì‘ìØÊJ)V¸:ÓË )¸<œÄ‘Z§dZ) ï„ÜXëþ<7¦ •2”[3@/€Ò¸4´ªW“wføÖË*€mo™Og-§ªâ1a—”\êçc&hPid±sFÿz 9Ù!uãµðÀ¤´p!ßÐK¡˜žÔO']'?›ë?Ömè0mƒnWª«¤.Ó€†‡ÇßZ·}Fy—Z°ã_œ®¶yt’(±3&¢‘(r‰v8Ã’³ÉÆõޱø±”¸õ Š6ÞÛBø•­)O¢ }*ÅÉÙk˜²éçÓÈbŸ‹ 7Ÿ¢=ÎÓ +h.fV¨UL6•iÃéBtúúúëŽ ïÝfÝþÛG½FúnòømAL?£®œ¿¦ƒiº¢ý>ÖåJïÓ<Ȧ¶âV”:›cœ?ˆÊx¨\ICrå‘]4–f‚"Sa"É‹q)­S—x˘j‹y=™W5µ,+–Mû²jn"õᄆõNYt8ÚWâáÖO¼Ù€ßG“b‰Ž¶^ÅŠD¦^hˆlä-nC(1›Þgnž¨£îŸ[ÚâöGþí¡ +bG1Ê9J´Úö*fk&ëDÜ ãä"5ô7.MÉXç\dsÉÆ:çb*k.^\Lvâ^\šã¦•ÔÓ‹LŽñŒŽ;ZÎEƒþí«ïXÃʰšw­Ý2í”aިň¥72ºáƒè¼n­;i\¤ÚaÜ8¸˜ÊÍBxÞºyå,d<š1ÙY¸£ä¼‚I£'õéƒ|Rloä*Ããaäcðå|RòDÿ ù„wxûÕÀ‰ö›eâ’ª\Žt‹:ÀX¹CÏEè€eìõ¼Ò±—bqLlêüvPoµLEméžÓÂqVá6~Æ>?AaS«(¤…}¥¦$•ä%À ìu؇¦;’ æŠ,8fâ%¯¯¥–ÚÍ“j`j³ß4`Y`—ùNÆg}aE̠К JZoÓq{%~m>¾þºâ½ã·AÛçMóÚ„ÖÇ+à+[Í1¸Õ·4t–Ä[ƒûüXMb*'æG 0¾6N6L0¦ØEÁf’n!‰—`Qb–[%@`ªš›õŠ6x~ÌÓÈ»ŠKF9À©§–I°( ùf‚ˆÀê033ÐeÛŽ{¨ÊS«)VYêlÛõˆaÏÍ[ÐãVòV™µ.ÎëðR‰‘·JAö4+~£ÑÌA~3UaK†Ê!åù[!NCUæ|‚uæ*Ó4óÛÂ`K}+Œâ…¡œY‘z9.®kÏgSçåhW$§ÃP_ȶÁ9#¯ã¥ÌÊ8#α™fn&aÙ2µQ^ÉÆÕN˲°Ù,:uXRáÐ&<ÿ¶j‘Á³µNWv•Â@mûÙfñrE¬Èz¡?5¢âdÜIñ·7ømðFyK@>î'l$åˆà¯<6Ë®µà?ëq-†÷5·ZŽÛÖW)h N`cÔ¯Öò2Ä•¾Žî×¶ú\jþX°§…é}³A¾zYhçb3ê ;â:™®tG’ØKhît—Í$šÆ`Ú5‰Ý­Šcë\Õ1÷ÎU«‘drÉUùa­ø«,G B°v.ã^Üío¹XÞ"†ge›³ótn,Í3Ôò¾¹ƒ¡Ž6 FW¨Q£âô+ír¢ó`àÌþ‘sO9¯ž”_… ÆÿñsÅÊ´åÉ;~Fœ`Ó B²«]—¨ƒØÆ4%®ÛÝ?3ŒÜ‘ßæ¿†9vv‰:ˆc)Ÿ†ÈNP£àçKX‹¥¶¯Ü–’»e¢ý„Ü19ÀÔf œ€ãÎÁY‰0)¶ÚnYMÿëÔÚ¸4]SæÝD:S¸ß^&¦#x¹ñF¤²F²Ìˆ›µ ^¯øg*ÊŒ%NI7·ê%&Ób:Àn¡ªÖ* bP¹`Óm c"lpHÊêt4Ѥ¬í·²6+«e|¥çÉRºÜ´Ct‚X²°r™8L:Ó£¥iÁݱEx@Äø%ØMú£*-Òv>iŽ…¸A«ËؓħìUùW 5cJ ±ÞvyÂñ[K¤~+ÝÖýÀíº*˜ƒõfô锃jÙ{8*2ó²u«¼)æ‘QSçQ±À\’JÖv€ØÂõé^6˜j+ø¼š%EŒQ&ã6×cWvïx/,¤noGÈKÚd޵9óê­Ê¦´Š{Å«Gþ·ßAâŒÈÿúûKóÆ]Ý5§ì¥Ó#d< Ž€lÒÉ’Ív…£µaê”dÿëc€|t,!47š~éʬûûM@)Ö™m ÚhÅùG4_ÛØ-7ziĦ87Ëóed(µ nyûŧ+.¹]6W\ìí+‚fåéGF¬ƒ÷Cƒ!`Ù쿉Aji±‚û›b¤îD™µrui.jÏèŒs’Üu’škF¾#3V@®ÈØö€ ¤›#j% +¸-ÂŽ†HñGk>ë…Ìa+@ Êm¥ŒZgÂ×Ë€‚ì£P-Õ÷2.™ +æX|I}øò:ÍÞฟ›»T[ÆËð&‘‡÷`D>ZÔž_ +æ*¬Ñ +{L[’Å·B+‹Ks^¬Þ<­{e뫃XG'ˆÝâ ÂÇa!òÏa0ª]®‡H½˜Ì ²º”XÓt['g&Èò|ÈÕÐn}³Tñ*ÞôçßÌ–ß.7_šPiñéÜ0.‚e­>ì#¸FüˆK®¦Ã2VGëÖ@>… .‘žéúu€g UjZ=3LOðÿ”W9re9ôçu)¸/æÄTãtGt[séþî$ˆ… ß/…Ê“òãØ‘ ­YShFi¯\d¿*/Äz¿¯àñ>ë< "c`bЍB“€ì·ç¾?LÒ×ilkò„* vûòáÞ ¶wĵƒq@ÐÊÊ8¨±~ϹÆ> > ÉïIf( vº5ÝΨ1òI  Mª¤™pÊ6(ú’^H¼¾xɾàhÁ¶Gòà‘´Q¾jo”ÍpdLÄc/9¼Ôç© ,©h}Ú«ÁM<³.H`üÝùpÿ뉇±Y–¥›pþ]†¥¥ai€’%©5Ê Èæ Rd®j«Ö)+`IëÓ±¨ Cy ´v¨}¼ä0¾uöÅE’€P2—Û§öŒËéX×ò@‡œŒ°ô(`êjj€0L²­é÷¬TZ{/Ëj±IPdî+¿ +¿<„,2^]•¥t< N¿FÍab}ï¥ßÎüN,¸³P¶ÕÙG¼•’y9Ÿ? ŽÏ3^F õpU^Jƒ¸¼/%ìYF¤xðe‡pƒÇZ½WL÷ˆYœO +ŸðO*dOš2w¶ŒŠ+& µÑ¯,ê‹©íÂ$46Ö§›û8è[<…,Jҵݑ¦ðœ™Ô§[š›[†sjægÜ$EÛ´õ´¹CO«:-Êø5¯ˆ_ªÞ ê§¶Q©ØlÝèFuàÞ¨ø-ɹ·­f¯œõxÜ@{\ÚÿºKñGïõÚ‘ôÖ +ØïJP¶T‘MJýÖÏMj>øMêÀUñGà³éT}XŠàäš@–ÞËò-‚êâ-”C”Rà¯é¨¥sÖKÃÂ1&ÅïDKZŸx«HE0 / +ûCÒÜšx«‹$^…Œˆ8ÅÜÄ'²þŸ?þóן?ÿý÷ÿ~üóߟ8WÂrE¢N P¬Ttê{Y“”Ü +º[Î ª_ú,R+¦C0sê7 Æ|ßm”‚ƒ™4Š×¦€ûxbN¶'–La«ÕÐÀ/ahG )Ð(w(¡=óçX8Â7º\õ™-WHÏC'Š·”U¢öx!ò( +·•X=­ÞX¼ŽpX¨Žçæ*ãî«‹ îÈ|:쥺SP5ž9±‚…Ñ9äE¸ kœyW†4¹sfq8 ®.ÿ]ÈÍé' DUtQÿ³Øúgvæ@§$-5 ;^ … µjz‡¬bBkMò=\]Ð^ôaâë†Ð5ñ@¥£Jlö} È\57„õ¹ãp¢I,¶¡«-\ŒÞP ú\èèê[ŠUµÃ¥f^‹¦€ÌgÞSèæ: ÊZÊÙ³rJÍ,‚öÒ†¶N¯ñD9a;ˆ„1ñò!ØoïÄxI°B=´HgÖÒÐ2xåÑÇaëF‰Zá(˜Zá\‹Ä®@HJqËb‰´~„PhývJÁðEhªg¢ä¿¥]ôDñQgø€õ|W¡µ*ª£Ð´ tôš»¥î·Tv?¯w?oÞ€ÛZm~ï•ÄäeºaϱOø`èMá”mè(oÐâ|…ç€v¹%É`4Œ‘TÚ¹„•Ò…iFrra}(KÍI[·o7ª£h]ePùW–Fº¬Á=Ö‚al5Ü«Ê{·s.:@]IªlÅŒ*kZÖ©ËÞZªN³(ÓÖç5ÿ‹”{ËEÔÙåc¿}8³”ƒ‹ Õy8ö¹Ð±©‡Ì\:bzt+1·ø #U¶êµž:m¸éŽÀÎ@§qc†å¨Adj+hÕŽ³áLüsU¥ +‹œ»ò´Å4…¾Í Y7t¬v?¿ 8þM»Aã>­v+ïL$×öl:‡îÍ»òÇ”0»[?P–®'g8Eͪ ùDìoÖýÍVOÊXÕ®•уãªë!”âù/ùÁröuçùÊ:ïÆÁW–`U3”µ¬‹±”… é{[Ñé7ÛÙSäC¹) ¡<=Ü^$É‘ïrî]KQ­º#Ëa8‘TnªBhÈé"*¿s_aˆ×VQât¡¤—÷]A3SÑ‘t®˜ær1!3x’P0€×2Ç ŠÆPPÊþºŠ •5šlXÐ’Ü ‰5ôw\›ì(]bEÑ:Zè‚¶f²í húZq¨Œ4ñ"´–U6D¶a{AñéAãÃüëŒZžHÇ…nËV·“V¥Q +²¤ h +ÈBH-âU3Ó@£¡hè!6Çb‘Q/ºÄ.ÌÊÐæðEFŠš´µîìá~*`çW¦M鮲a²ÚDwOå’\ª£—Ô²1Õ¼h ¥íª£ôœÛç„¶µ>dÑšQ¯…–س™GÑ”Š¸'®HA))õѲ„+N öæ4K×;17š+6苞Ôjxså0¦ð¼>eoP=Ä»%·Ü@éÒ +¢@z°F|ÍQ÷0zœQ£MþýXÿbК&+Ü/ l´‡Û~D ÝvìóiàÚ¶]ü¯Ùešî†Ró yÈͺDFÅa›5Éd),ò¹þyýÏ…š„ 9¯Ó18†gnß¼i½Ø‹c]2mŸ©…TŒ¡¨ï +ý•×}n]Ÿ„ŽY™Ýº’ú;a^ëFžïU€ŸB©!/E}0‰‹­!?s¤…¶Àœ•Ð>+ƒuMU[Á*t¶*¨·Á‚™ÏBsdg¡sn©S.GúVšÖ­IT!Ô-›;;B¤J,ª=°\uvªõÄÑôýí)¸FཻÐòµSàM*®^Où^tx•Ì¥¶3ùîw$qŒYWB=Z’N‘o•Æ+Iƒw\(UÈm?5i)z.ýÊJùÍYhˆ³Î0³l\6ÕDß4h;ûš¥ÀÁž•k(/!t>xÉ +у—¸À9^²4Ý8?FüCIJ úºêjÇQæ™.ûYþMò‡ÓäœR˾4¨Å÷qEü“³†Ó /$H–ÀÙ´âÿ kz|phUÁ?9k8­ñB‚€EöËšŽ¨ÅoG¨Æûê0Eü“³‰Ó&/$H–ƒÃôdq|iM´¢ûÒ ûÕÙdØiÖ%*`–3Í2Ýþ†a9 +)}i˜ýê 3ì4ì0ëõ£ +ó{üÚ2ùHDâÇÝ,jYµó\¿Ò¸ÀÏ©ÊéÃG<÷íRŸ7ºq6È&šj­Rlûš™ƒF©,ÇÕ$¦} €¢IÞh†©XËøH«N½K`™“G2=›iŽÌcßAXge)Ä6k+}Þ’Øn·F>âÞ‚õ‰{;|§y0ž±oV(3„˻ވ"ó©ÛèH|£‰"Öëj²5g¤Ñëý@†}/X°:F½T‚Â¥Z—Ê^¸.ĵ¿%+[Ò¥jë¤mµÁÀ9p¹‡™ƒsàŠ„*•«ÎK¶Y2ízÍp…À·ä\Ø:k̓“Õ$Óßctá =QÇÜ_ék$¶nAè¡òs%@®ƒØ-¬»…—àÌl¥p"-Œ7G…j 6Ž)Jk´³ ½Î9Bµð¹P9¥6¬•Khÿg¼Ê±+ÛmàV´õá<„>l§¿½'RâÄÛwa$ø®ZÝ‘ôЏ X˜MV¢ZPÉKBg^GV¶ÉBm+ª«CÁì|B7D¬·h¢ +ZºËr^ +Z·Ý&i.èt{áám²[fÙø +ÐQ’i ª$•©3ŠAǦoHÖò~Á3µìe:Ï@u¬Œ’0Yçyp›½H&Á'ɤôIò  +﨑 t=Iå¦wðøJ/Оìöcæ'4æa·+T×¢f ‚s,{9<®{Lÿ<¢¯NQV¿ãB¿s{‡CÐvt|sÇS„ïäž(¶’ÑS¦ÉWÌq¡ßYÒ:Æ‚K|´Á!i(¯Ig) uÍ&¨l1Œ–^æ‹g€jB¸ [CP w0RÔn€#S¿=tpjÑkÖ2@yà"t´ »i]%´å wç-JWß’ ehdëÝdëH]ôfkŠ@óîy?d«FÌÑJ3&Õ«ã¤p½B¿íi±”Ú/'·íØÏ®G;¸‡áÍ,%4ÞG3ZŸÍ hkdÉÕÌEY[w3#ôÙÌH/ÇÉÕÌ€âŸm¨4³øïeþXï[@ÆK' ý~\ȨÞÆ|µ°CÛÎ!~ ©ÌüŒ`[êåU %ª$Úþ¬Ã~åuo¯ÑëÞ]#eÞ\ƒ×µµF—ŸÖ]~Zktùi­Ñå§µF—SkÎ>­5:Û[ëe9wÖèéHÉxöÕ?ó÷‘ÿÚåá“VÅVÞÒöCVÀ’ÎôãZöüǡطb´´þÜÑÎy+ÓJƒÅ#8>\këÛ;-~0¸6»aä†%‚Óz,ÀJ¥ŒÁ©ÛÀÖØž„Žšdô$pÕ¼èr¸ÓuÊX°ì#Y×l¼‡¶z.J©lYNƒ™j;±b·û+ &wEöž}ø¹ì)/LE0brØ^WŸÐx3m¥´Ý e`/{1ئšLMACUÔíØ ©œ¨©´‘FÁDÈU#|•Á0”êå€yQ‰îˆY°É·CRuFRw Tô°ìû ¥3X§º…´–AoÄc×±³µ‹Zb£á;JŽ4°6‘NSÝ£«,TÙ¥¾è­ZØñ°Û>ímuvü(vçíµ®Š~ãc4ÿ§›ûxƒau;þŒ`äŠ6¹ñ87ú6RŠþ #³æÝLTh'ÀŸ¬“•ѥb¯£çÐyÍTß>ÉÐÆyñÁhçëí£¶¢MÔOÎi¬ä,B7?JбE)ìFVWE×¥@‘F"‹=©»,çµ Et"©«"Ý 'Ûäf²ûù”÷쪠ÊNáÄбçvëÔ’û ‚+æ±'Á@Ë“` RÏ.‚ëÐJqL²œàǤw;›Æ1P©Ç@GwYã¨qä¯ÌOžÖ'Ï@Ç“ç‹'§: /l¿ÇÄrÂs]ºäÚÈKÄõp®’”ޜѣQÞ`Ù'£Üô ¬EsïÜc´˜)Èpù8[_¨´+`bƒ‹ß«º^[u‘Šrÿ T"òUv--ÒA/bÙ‰JÙä¹åè]#õn$|ð#­[OGq¢´™±  %Y ˜óÈòÚÐD(j­<a¨Æ½EÓWmè”9‡Ua"šc–О_“û +¡2^+,WW½.‘“êñ›øÈä”)ñÑi£™!¨­«ìqŽ?lTÀáY¯˜ûi•/eYêÌIÙèyiЀe¨é•~Ô!qWh¯¨ňSð»ç ’å\»†{¦€¥÷¬P¾;µûs,Õ»qŠòƒVÛV”KÛª*m+°KvìÖ³•êœÅˆz4Ù^zk¦žÑ„h½YYožM6GG­µ?ÐÉ-˜ùÛç¶åñ˜tá"«^0li@ó¨s.ÛiKäµyd•1jóç½õ„ã|2v«Í;ÿŸò*ÇŽ+9‚¾N1 _í‹-C¾p9hGŽ®¯Èµ²~ƒðÁAǯ%+r‹Üï&”j‘¬­¬sžûj–§_$w³²y:BdÁÓigmt°1vØ¥Ô·ÀyÄØ7äÆÞz'úúèèë£w¢¯Þ‰¾>z'úúèèï£w¢¿]ï\O0¹ýéïbç{^?ë¿v|ø|¡Áý.p˜ö êê}æw²ƒØ¯߆TÑc!(wQÛ<,ñÀ´s¾–_Z?›Q‹vÅ•nšó­sÆÞ Äßÿƒb`Ë4(Û’éž™I±‘ÿÌ[Í”ÿþ×? +&iÝÿý u "'0¿ûÅàØIph G>2€öªÊ ¯ÛÐÞÙA,@4ìEWBµ +ÊÊ™¸Ú”•“-)ƒ®€tz€+-²2n/Ú1¯‹Š¶\€5-…ˆ’’<î%ë'åÐã°i˜ýZÉ"'M; a€µ“_ëm¿'®e:¯+Ù+°0xO°0Ñ+…’ô¶n7}Y¿¢ê#ºªÿ$ÝüŠJ¨ªÃkÝî‹B–! rœÄqA3 èŠ<8½"±Uc÷°O +v^‚vŸ5Ä$ îÇܶùmøæÎõ0€·´¢’0göLI“ÐFüïBÿǦTßÌs@ÆZrÎÏjO?ñÌåÎØ?Ú Q¦{#äÕXv‹ +@}55#ÕBÀTc9Ã3å±dxæ¥WaœJí føV‰x+¥¸$wGé •õ¦upB&.ö0°E‹Ãž…;–å@)R~œ¤ï˜;½åjçÉl¥E҃ᶴ1—¨äÄWšÇ%]Y¨L(wd™å+E+DPÅJÑ#Ç¢©VßÕôÈ™{—#ñða+·©Æñ=hó«*ØÌÌZzµ•…uæe;r*évyå§‘OÈ0™iˆóªïÎÑ€æÂ_Öo ?‰Q”eõ:5f­±c˜ŒE˜´»f&ÀQ)(²¨pÚ °XÄSÐ,AíµUdg©m2¼™µkÃØg™ƒ%ì]UíIÙ’”º§VnÉ+ò‰”‰PàÉ{­JO[VenT,® ¹ÌG¤;;•ÞΙ‘»¯N£Ý&bÝÎïYùÏ™PÑŽs~ðÚ¶ù… +£îÁkz:²""³¹Df>øy“bT §A•Œéw©l6d·³è|[s +lƒá^n®±<¹Ÿ;3C'úó˜ºÎšåžt‰ÁýA &íyh30g¦!ítÙóœxa´óó˜!¬,i‘óaEVµH^ 5´·(¬?K?±¾«6®]Ï‹áEéŠcÕGRSUºœ„Øâ@ÃÖ½ÏÒ¬9¤õzxLk˜vI{=mz.‚†Í}@×á¯(-þlsÜ[ÀH± MúAU-~y¡!U¿Û.!fÿv»Üªz®ŽéàÕ4ÃRï›ñ²4dÝÜ7ý¨ßõM,j]{÷ÍJÍIû™÷:Î:Ÿ÷ÍsG蛦Gß$Åk-Òû&½ËZ¤÷M¶Òú&ÀTŸ}“$n}öM€½êåÇvt”z7M#ÿ꛼Z§ÇÇ¡™øsªs#)H*l€™‹ç|x¦ªMü R—dôKÀDvc#U‚à„™À<ìýè§óœ\!@Ï=Ë*.6ÈÿI—à2ßZg›™oNÄÕlÎ(l½4ÞÞ–Ù2šXçY&Vwü3ÏÕò¾N–VRA§"¤ºJ7cx‹“¦M˜cÓ'¹uFÕR!ú¤ýNŸÔ ~xc¾õw=Õ|‹ƒÛÀ'¯jœæDº¶¢ ÛKU6   +P/Sü×27D@ð˜œHFºx3ÀÔÄ"… ¤Í­ÏD­Ñâ3 ´ÕF‚¤L€¡4”) `7ÍBæÓšn›MÙ[Äçyˆ°©… È¡0Ø¢¿‰¼i±um‘^%VÚý(”ç퀺Œ7Hã‘iÍ´u‡ˆ:ÔÐNÅ^¶&–긟޹AråHPÒWº;'æ#Öꬒ¬# ùJ°j¾hjï!©iŒˆ¨·kcE‰×{=ýÅM¿ýp×ú/kP©”‹YÞ”‰/ë½6)\ŒšNM/¥5š>$YøØ¤&j¼\Œì.«¤¦S“€E +RÓ±IÀ,©éؤ ¤ªc“n—‚¢„LBMâ hÁN5¾êØôŸYtlpqY8Úm"ß(ù$Ìð°uÓý¦ XÖBÿN=[Ô[†ü™á6Â*r}]«‰ûaMcÓCCŒÝ¿ÑQm³V½Œ«CÄÇ—‰î`êÃ"Ú8ði©Ü,-À»Ÿõ®L~i[W ù e‚±ƒÕ€µ äî9Ƚ”ž»'é=Ô2x%¶¬> kqEÉ"6 áÆ p&Q®®[è*!pv5p˜ÒéXZ|W{B£ëJ¶íc˜9½I”°¾ §±á¼ï3N×mUD{ž²õ ’—Š™¯bÀYöFƒ!‚'"z‚!ÜrâaS‰‡~+*ü¨¿ e1pc£»i´~qâ~†ßc»QJÚ›dÝ36ð´þ[5ç[…ÌIK£Ècƒô#+Þh{# ¦lxx„ð8à#<\S¥¿LT¹ "¾ 5'ŠAôkQSý·j*ý¤Ùš@Å‹¡Üi&kE„™©•r©êVO{¥uÐVƒÀiŽd:K"€(Ñ"P„Ü<‹B››<)‹dA‡! gÉoï÷4vì"æì~@L´²pñlHVúÌâëÊ}Ñh§ñÓìU/äÜøÁlÂ{),غƒ˜æpÀ3줿ä¦ûHñ€.jL +9ß „탚а†|ËL2 Œóú]¦®sæi*cF ++KoŽÛÖ$.‹Å,Yô9¥†¶YƒcŒ3xXDb¦|ˆ‘çA‹OŸ$^'Éù@J?kH|#¨w=þi}Žô\”iG€]É2 +Õ~x)ÏA§ðÿ*U4sŽx–2 3jXÈ“u@×M^QÚjsÜ[ÁGY +eng4Ô éWôÄ‚d­Q|•ÿ²åÊÿìs+¾5†øgrZ¼œ9…ÇO9–"r(åÐ2ÍŒ%…CÊ«°óxCÂØLÓ8'Ó% ÂÔ 9že`áñ†,ñù%ÑÀ' k'¯ Ë_¦³ªtXÄùþ€fÎG)–6Á³Ò²ñ㥾œCä…µÕx M›ƒEL §2¦…º1¤…#žôVN¹˜äƒúL òA»Ã鎉°Ö;1|ü<‰hä˜ôòòL *0õ™‡hOŒibœ­ž€pÃ#1ÜëßK l•ÿ¯ì8 +ºŸzÿ’Ÿ'¶? h^Íì´«Ο•Ù +C¶ÆÈªýŠ)ùéÑtåßx´·: ÖÖ[õÇÇRÀSm±«>Êœ³‡DЩ·ØÅ² ÔÈÁ»ªí  äõ–”s‹Õ¶«( guJþg½e5EªöPòÃj¬/?5ÇÖ·ÛQ©n¼‡’‹[Ѷ?¢¸­œø˜æJ»¤¸ëÚ$" ©úr¤ÓÈ—OÓ”U ‡Ò;}©<¨èºQÌ>Ç…_hê8Jï3-`ÑÈ<Å@WâO.Ç)TË7»»Z°–‚µ¶¦]A¡¯³JF¥3(ðyI/™Åæ'¼¨ØUÊW”NÃØOòcB»™HغªêÓ¦ôâc3Jñ>Oûtž¤T÷…¨B¬FûR)=yˆÂÒ³qzjå#Ú¿Ê0•i"qÌ2wY…êo©ÿ#…ˆ·3Iaí™_ÚWH<ÊǶÞóbû–ÙWP«J‰Ÿ_ B†ˆ…dÉG€“„*pµp p%¸”À¼D¡Öh¼}¶ž ©ÍôV„{v—)ñ€0#óó°Yb +`-cÔ'Xrn‹€ ;ei¬ýŸòjI’-§¡sV‘¨ +ÿäÏh&DtX“—&lŸ#K²eß„GϪNêÊÒÑ`hµ cN3ÌvgP‚EYèÞ‚JÆ-ÑC÷— 2tª”±z½ÝÆÁmdÍ9ÓíÎÿÏF¤,åîÉ ™ûêA;FѬä+@*yDR(:#. Ø•WYJFœ“hȯü3iS@—”l eŒ¾R²TÍy•à#*$wOû޾=¡Qƒî]Ç| +ô-íP'êw OÁ¦Ý_ÐX&„ö¨ê;‰`çé«(T}@1âj6òA´—µV‘N×±ì„-KyB=ïw¢ +"ÔÅC@k3¥ i2Ÿé$ é„6žÉy‚žù„þyçÓï £\É´fãA;¯uglœœq³ãCg¹]]æÎI'¾8§BXH²œ¡í.9Ìêfˆ’c_óêâS0óPW+Ñ2-ßa•æD+Š&É6æ¶Bp2Ã×·Gb¬wbÐd4†gb¤™Õ>+àeûAHøT¬ó•´Ôø|ÂQ僛Æ3²‰¦ë>²ð’ê%U,SÙ: +¯ýŒéô1…RMµÃ˲Òß…UÍ”°¦zÎÒ3¨éB\£5¢=6äyˆbzÆ&¬Ž±QV£ø=ÑcÜð@ô½“éZ\Fkvlyty –4}-þ^¶ah(ÚÚôé•Õ?¼>Y·?+«á§`’UÉkL¼Wøg´êŒÃÿ»Ê— Nʹ+Ú<-ú¤çoÛæ‰þÝGÃÜyç•dn%Ϊ>O%J”ÚyÁí±·b~½7±÷&™°ÁQFš wÄÉJÄä”Û:Õº/Á}­Ž™À=«ýê0Ž)8Ôô·÷d§Å’–$Z½‡˜AÉâ¼tñÉø›8î§MiF˜é|ÿ±¢Ö9&À'£k¸"£zCö0HÑ’i–¢ŠŠm€(Á`\ÕƒÆ<Êt6ñ%¹tf±7ýh[gn5±w¿´E BN/™jPnAäh™¹Çxöüv´ðïZ@+jbGÀY´bò³\ŒèïćÓI-R§ñëü{-üö[ZJó®”’Ç6ƒbe4=2wJM%vka¶JFñ­†SE/†ˆ]¹a.¦S/:%ß¶ŠR0Ù>jJŠfÉ2ÖИiAò7S b/š8™ Û ÌˆböŠÇ?þàHª='l“”cPúú×?B6vÕ^[œdg%[>ýõ/Ó^:ÜXJ«¡)똓̆zSßJçœc4UŠÑ8«âÐTG5~ËB¬4ôSïŽ[@äÚ¯äe-fÃÈfaÚª–émÈ\¼ÒÉp¹©k#öHJfŽfX«E'‹’…÷GÔÄö‚KRT´Ùšz!SZÅ$ôÌ`ŸË¾4Ñ:²Ñò¢%4²TŠ‹€\R´TºCs£µô^-¢åæRÆxµ4´Ìþ+(ٜŊoçCþælñ‚ï:~~L4õi +d©ïÆfgò¨ø´‹=û`W]3€UÌfx2j¿eÏy1'¬y‰xöšÝ£–cM4­ ¹)FíÈaö<Þ¨ebá$ÌlìüפOG ´,?ÀÖ:µ–£õƒ`‰Ä,¸–î& š5’:Š‚‘¸6üx ùŠºÜ±XÍøõ+î唵á´TŒ(~tžKóÚ‡X rm±\·$aÕ<4FùP´s¸‡7¤KÀ§ DK#Çjƒ ìÓóÁ3Ù÷ÉÁ’Kã„ãSr-ðLCÜ’›·°u6Ê]Âl×ÃÖÉ˃#sæ0¯(›¢Pxå¨Ò¦-ÓÎG®GÞ²lŽ£ÀkÀ‘ÅÌÿžsPÉúƳg¦E[»!¶ÜGyÿüž`Š$ßäŽÕJ†Ô¤È± `Èò>cØp1UXIª’FRŒ+b››}Å"ÇRÆò zWxí1òÈ. h—Ê2€’¢}ñWú%ˆÑÛžJq¤YïÛ`'ƒY¥sw;Üqt|"c’”±T…I=(áj½Ô +tævN„Í,g–¯»1ÏÃOÑb¾gÜ9âxJy2ÌE@r³1:l:¦µmûç[ò/”½GnSÛµŒo³‚zµ&=ª/ck»„²eð¡[e»^.R=˸‚Öÿta£Þ]ýÖó¢/xö–)ÍÓä#WÜdKF¥Ó^“«–£Ýò“¹r?竲¸LêYYÓyS­Û¤,@^=𘠘üóNÒÉ© 51ßžekàÃ:L¶þæÇ_Ç ä·øµ¸ÜÎH·Ÿt'cKEÎVDμҪ“£Î*Ñy=ŸƒbŒçœò>&0Öß§ÀÇò>#BŒ/=G³î¾vÃŽþwãÛ™®¯3}1¾Ï,¤5ðÿ÷ÉGîÓsa¿xSºƒ9߇‚l>¬¼üñ¿ÿþHŸX‚ +ã#ûªHH6E>–»®Á»O÷Ï~l‘Âh$Ž€$TXL —²f{yYoä·¯þ­É-\fÉvþ ÛÐ*¹"&r[ÑÕm“þ(TéCˆ-Æã§l¸” ,Õ€*ÉP® ‚nùÃãŽïr%Œ¹æNHnÒuèÄÈì»;ÑÚýà E:»X^O2ÈÀ^F4GéM-B€ÔðѹUõ÷\ †™ûm™C-I «“;1pÀÚ§X©u˜Â4—Õ¹ríñ®!y¸%¼s”©ŨìÐ̬"Ü{à=s`Αûþ)É`xÏ$·Hr’ÙCëÛëD"ðɨºÀ«l{àŒâýÃr#ð-eòA¾„5KùȀõð €Ö×+a[zp1 ¸Á¨B*DW¾2u¶ÊÃõDÍ5;ï D9[ZÞ:…Û[7ø€9)uÏx޹¡ÿ%Ói«]Á”çS²µñÔXgj;#Ç»%V"ÿ§áƒ«n"žE_v‹w~ò+E‘¦˜ {IäÕná°a«—µSARÈ‹xè&UÃ=诤$…oE\ $,=„Á­-pôa?íÕÚ±û åì£.efÌ®›ñ8v(ÇÔ6¬ ŸM”Ì!€¥ì3p|!i$èV©©Á½YZwüàÈ Ç³ÇB3š!ÞåÒ°VuXÝLi öÈQ3¨#šxwda§•ÑȯP?˜ +/v#HaÌO*…X r±Á¡°`Ì{ Œrh P'^cÏ<@Ô½/q—£éøZ#Õ—µáRrZqöѵƇ.”%úŒ¥–äM¶«®`£- {Mvž€±ƒ®ËGÀXR¿]&&ÀÞ×ÏGb2IPôyf¶ÇkÚ "g?_œáϺ»’¤Ó·Ü¶)¥õzx™¤awžK=Ct™´A ö±$ÖŽóa,ë$JøÔÚ¤áŸ^Lv@É09);d \ä5a«q> ú²Ï—ž?e¤ƒŽÿ,÷†8cZXÍÃäbÀ#-‚±“Êä¡þ”óÀ»`j<›óR‡=ƒ<+s‰Ñ[ +X«ë :UŽ·yn²„ÀžÝ®á@uÀr¹"qر¡ï—†â[$ëî—žFL î‘dß~b~œ3¡Ðm‚Õì2 r¢á¨~,9D–œëCf²8T1šÎÈ ÙJ½R…^Ë2#ä‡=nWé6’= ‡l7¿¬í¥¡>¥¶< Â…|–µí¥£§ Ï3˜ ð!7RϦϕ!¹¦,`%WMéôE… +Ï$Ö!aÎãÐ õâÏÝ÷i”-â}›PìœüžÐu°6ßûëëëÀv¼E‹ KÙy ø…¾~`8YtLèÐ>X{ô'È[‘Þ‘+ÍΘ—€Ù®´êtþ·` ?Å®9ù›$¤£^@ìg Ku4ÉCI\ ³Ã@1¬J!ŒÙÉÝ)'í¡;°/AHñ°,•ÓÕfÄJ|˜­·[ #¼ Kmy[“4‡šÃKrǪù!?R¿t§ø +f9ûë^˜bãÙ)¯ø€zÈ-S‹ñ*‰kÑà@ªîà(UP}ó(Åuð}] }þl¸?¦: mE ‚Ÿ7_°¢LÚb/Å„1”Ñâ+0 =+ JÅ ”-™”‡.€$ÖXÁŒ©‹ Ú)u‚«ýœ7 ê'æW ®¼!7À÷Þ¡ëg%ó®dá âÞX÷ÍÖ!N¢Õ3÷Cø%Xmx9lý¬eºÚ¤•ª`ñ€£5ã&ólÓ +‚ëúù–¤BJ +Eg›^Oµ‘R¬.DBH¶-³ž)78¼Èª?©à\5šÇzµmÐôGõ”ý zϪ±ñ’ôËËǶ+”ßBt©,¬çæýxÍ)zfÙ¼…/oþE0V®Xb8¦\ûõâ]~åç”<21ºrŽ1Xê³:eôlůÖM9>í +Úë!?b¤q{O›Â6&5ÖzK:¶ ­±Êê?XÉŸÌe(ÅRÖ}_´9,…ÄPòm2X$U]W¸ú{È8P×i»•çiû=FòÊ@î08z²ãø¢²‘ãjÜøK3jÜñý‚~ 4Ú©íoì¤Fï?ŽIhÂý„‰ ›¯Ù1 ¬'¹Öd¶+Ö);ÆÓ®Ée˜\e‰5i +Ù2~wˆ:=e±“â;V³]p¨ÞD!7혔¾Mò„l2»%¥“[<ªÝ’«O‹…’˜uä§Ø Ê9zÓ mÇ·< +FƒÐÉ5wv%b:sä‹Îî$׈ý­y•Œ­Ïö‡Â –×þª_{s°f¿Þ¾ì×Nð ³bI½bé©eäMz :Vmó/eŠåß´éçW3å½SõºUVWÞ’ŽýŸñjÙÑó¶¡ûyŠY¶ $ê¾LÐ (P €cdÑPx6yÿEE‘¢ôíÀ‹ñ>ŠâõˆÜSêÖ­ÅX”“Ì4kÂkoN̘K”müå÷Ÿþóé§aF?ÿû¿ÿ{ýüËïŸ~^vS@í 9ÊŠ2¦2*ô…÷‚+|¶2ƺ7¦g@½ù¶0”ƒ¶xi&Xyõ[ž‘6¡Aë7%9Ø„Áâè¼=s›Oµ~AÛ‚`‹£­ +Êl¸Q~ƒAâ1nŸTŒ²ÍdUõQ œúí…5• :s“˜Î°åÒ=Ë]MX;bYͧ±cL;28Ô÷ßÛƒl¬±59§(ךÙúœ¨»B! ¾;ènå!y^QÊò +Û¯ D4ð©óÖéªÍ~óбK„·£ˆüeEºX…0H¯­ƒ‘X‰ºMÿºíÙì.`þêü†ÝxÔ“¯S'â¨RGJ8 mYÇFieŠÑHŠÖUXÞŠ”pšÕB«} +YŽNPѼVZw¼éÙ ì’ìHÞ”úVûFÕìÆñ•„¨4Û%Á³ôC[¡·ÔÎk I«eø=ÂÃ~‡:_õ¬ ŠÞàBçLq1^&»\ÜI›™Ì´Äv"1ö•*?'Wæïû÷GêLfëÚÝ–êzx<5ÇÔ¬¼753šIQegF냽¬ë- ¡** ˜æçƒ£y^ß„\;àì¸(ÆY³™šÑñ`jÌe¶”,•¬½ì&kïÏæë¢w{P6ucÍ  h9‘Å +NÐ9@TQ&€f¤©­@ûxØêdi½2§^Ì1yEF l~‰Ú–^EÄUç’K {Æœl +÷©P9o²ŸJ³h/ÏèoYçýÒékq]ìù-ôq¿$Y#Ç¥Ö˜ÕÃJÄ•¡(ÔÆ5&h4 3â‘h°Etàx„8ŒéOYÌñY³‰ap¡õ-Œ‡a)) í·g!´›ÇcÀ{¥P³ä7µ;àMmg7ÒîvÕ±ËM*PZÝí- âaÕÆ© O4:^°XÝ{uu?IçÖp£[Åí~sàÃHδ¥MyZB4Êr­ôƒ÷Š—ã+.Œè¡ž¤ã÷„í•úðGÇ™FzjfXßáËNüq˜áÉ\GJžhèÎ3dƒ…×…’n’›ãÐó&ì Ï ‹ÃG F«Ö›ëisÈVÚÃsLidżªCÆ{,¤Ã•aCyI—öºç±eXÍmåëK­oé.ÄÒl{ÜæòÝ;{*ýáí!»oràºÉµ»þòò …†¤ö×€ø!}^òÛ‰ÇiL„Ár¼~yùÇøç—ÿ¿üòåŸ[N(iBò¨lGæâìi‚Ø,2Û 0—‚ômELÌÉ—`¬mªÄSÖ œµ ¶°Á”æ= ÉT2Ý`„Eå<Î4k ^Äi/ë4!‚åf‚9¶"§ó6½´ÀOê)Y{·ÊVM¨5;ÜCLe¢^‚xžÈkE„oK!Q»Øí8Õ< JÎËï<‚OÛògؤ.°tð;wÖV§ÔÚ£.bX…‘QZWÌÞLˆÙ]€1“@V’Ô,¼# bxæ)Å,QË3ºŒMú›Î¬Ü‚ §D˵~¿z3wY:‡výfÞ/òUÀïâ›Oà1+`» V©ËNžñó(§G^R]ß*]ŒöåG4ÕÌ#îw†8ã™Yœ—H[G©G:<ÿQÔðwn¥¦r7À¬,.¨øúç/žy¬À0Dϲ‹±/›¶êKÎ~þõru'÷ÎààÓœ&e¾SVÁ±^ª¯^+&÷¨ +`tü®ÑmõÊi4-££Zœ]?Õ7ž fwÔ˜<¶5&l5·e]6pÄËi2¦È‰gŒdÒF¹p«¬uØg#ðÑ7XS•){Ë¢3®ù —c¡¶w…Ûjµ¯KY·o/û[Êv<·ÚÎÔ8“|¾äU*x™îIЋ Ü;ÍäÄÝ[kâdäÊ–¼3ý}—GXl©2„÷R¡0™‘±ånâå–ÚÌ-­é XëI΂)¦³Œš7”²Ôª¦º–L † uÆå([’ÁÓ¯3ÞKÎ,FèúºÖéXlž¾ÝCmôMÝ^ £o`Dú&]ˆ}O.¾è›ö¾bôí† £ïSNè›?zö¦½„{ã?’ÏÅÞøëŸÉÞÜî©Û¢í¨Ûa?nå#™êæ‹ÃbeoG}ÎZô>+{ûجV¦á»[Ø[C£äM{‡3òF +Èd:ìy]4J{w³&îꋼ yŸrBÞ§>!1_gvë·;ë?ö?ÈÛ¾:òöó¼’7Öí"o‡ýŒ{3äͳ<]ä ̱يÙÞŒ¼Ë'yŸbB¶§:!e·By»bËö‹‹¼çîÔÃ&ºÈÛíFÞ§œíÌíEÞ>ê.T½yææÙº]ÌíöªÝ-Ù«gn·Ës»Ü+s»UΘۭr3õ3ã2÷kæ…µvŒ$­\ÛÒþšßæîö~@‰9—µ{°¬7®ú7èëË­í»ëv–)ܘ=)´i-ð²Á·Ì%üÃ}ê`(€."´W¤œKûϨ +åÀ ÀÐÔÊÉŽhpÕ0„Ì"úaV?!¬¥sçJ¤ºBåøòT*NZT‹ª‰‡)5ŠJ-SÁãUö2s[õ`ÏX«ÌgÆVfÃk|ýóo¤8.ÒÇÖ,ÅI9ûùWÎa¦›lk%$I6å;c¨ãi)0.¯)—"Þª…Í^¦16  âõ©üüM,%> ¬'nŒ‰•¸°6j¨¾–Åb=ø‰\ö‚±AeÅ~™—)„W/ –òÚAÍäˆl,óĵ‰YTþ¢¼lr"†a(¼ŸSô#’æËÀ ±àìÜË{vâºHƒÄ.ymRÇþêØ5HXL:,÷ÆåÞ» ¢»mivEÞ¹q9—±äwZL^ÛNó ”Ü B%‹—×õ¥<“ pÍô&¥Y¿:ÔŠ•Rkah8¿7Lt%¤Ñ–=Ùö>ýeèHHJÃ×a(âúà<ò[Z {Oü×’u‡Ë†tî­ËŸ×ƒVž]:<üÆgºÇjBo¥ÀjGYMSC”\HÞv¦Eh¥„É‘6U…×}jÁ$Bëc.ŒRµ”)Ô,Ù+H¥J©"‹´K­A)TD²íGÓ$Àêܽô^ô­^ÙYºÚy87Gì•å“ ΀þéQv‡ÏïÆ§{§ ƒIú6e´¬¹Úi#õºž×4ζ±ˆÿaVÌÀä÷ÅãæmŠ3Rïêw/V–ÍÞ"Óh‘mô/Q¡ë(÷3¦R¸gÞKõBÃÅdx …Ðréix ¡ÕVÁZêKˆ”Z=H©´ˆÜ¬Çˆ´cÔˆÎ\ÑŽtP …Î DgÁûåùõ¶]ÞnÛÃë­lO˜Å„ÁUaûÄàe£óØ I<£DGçkvÕiXƒIòþÑõ¼pmøÁ2äˆ ÷_㯋ËÖßñ6Viî­®jµH? _w +endstream endobj 1550 0 obj <> endobj 1551 0 obj <>/Border[0 0 0]/OC 1553 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1552 0 obj <> endobj 1553 0 obj <> endobj 26 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 3/Type/Page>> endobj 1554 0 obj [1557 0 R] endobj 1555 0 obj <>stream +H‰tWK‹&·Ý¿¢–É¢kô¾C<ã‡8†Iï³hòÀÌ@0ùû9Ò}©ººiJçÓ}Ÿ{%ýðüøðëÇãÃ/ÃñçÇ#óï÷?>Õ|–Rj?ž?½³éÇ_`üGó&Š7'•âÎÚuøóù'èûv<žÆIpd±Ä³ôã«#öñå1½ëå D¤¾Üô|yüçñ÷G„¥0m峎ùë7¿áÿ/Ç#µp¶àU¬MoPªgR-?Å.föÍÍ ¦FìVžâØT6éú²ç)Ƴª.Þæïts¦pÙº¨s!‹cƒö8Þãpt‹Ã7ìn® ¯\—r'.÷‡¿ýóÇwßøùӑᅩr ¨—Ì…™$(IX%‰9Z9C ±òëY@Ëîà%ø8Y¬rº~\>Ûh³8¾É Wuµ÷2«#6õ¡œ£,ƒ +^ @»º~Yr‘–Á}“A®j·÷²h¸E"Õ3¯\ç|Î>þDêçÄÈA‡Ò8k:\Ž×/JhÝ’íÐõ¦äfl9³Ã3“ìsZƒÎÄ]ä¢ +MO0DÂüÞöäÚnV§3oQhvCî„­à º¨K9hJ:T@nî"–ã5\CÖTìw^m +n†V‚\ÏBj?ŸD˘‚(–ã"‡õË +¡l¿Ëʼ2ôb xi¹ -‘½tT¹j.Ó/f: Ü vŽT3"¦Kx–ÑFiÒeÛcЮi[®ä(TC4J'v€Á ÚptÉŒ˜BÚ÷lkÚ–og'ËŽõFÀLìµÏ0§g‘ÛÖ"I™œõæ ˜ì}fëMÉÍØÊÔ[ŸµvÒ¸ö™CÖ?.ºõ,cÜ]úÌ!×v³únŸårfdõÂ&HÇ|e“AÎÜù„Ðk¹òÉ ]×Å"3Ê@çTÁå%^9µAÊtVaô—veÕ¹®‹Å·y…3ý5¯Òl-N¢rASnëô$ÂÜik Šœ­q˜ ˆ88BÞ7)´©ºÚ[šasœ²õ¬u5¼‚a´ä´û ëéC”Žß6)´©ºÚ{'YY“¥vòæŸ%$›R…2î}f„{vôgËV¾ºeë-5˜ó…^§Æ@‡ò¸–ÇÖ{j¶M–-Wuµ÷vj(Yjp ãæÜ”¢Ì /»ANÝI› £mŸB®ín•/Fl¥JA†‘×ß g‰;³± –ymûrmw«ïd-Þ³¶sÊSdŒ0HHcrF+KŽî°üå›Wf9¼‘Ë3cŒ0ÈyãnŒKådr­r’?Óv·úN÷i®2ÆŸ_õ rË/AcSÌ‘pbü¹ÐZ¾<@ëQð¥*¸›™~9Š‹Ù`ã/‘†91¢7Uk 㸊'ý‘¿Môf`Õfè™í1Ï«Ä5fGVL.$1§¶È£€/UÁÝÌÕø3®ëàŽ²Âr!‰9á¢1Ë·ŠÞ ,³i]ñ.1ã“ÆÕeC8&’˜ã˜O^É·‰Þ \Íz´øì×há€LH£ ó&%?ò·‰Þ ¼Møq#|æ‘ÑÛ0CJÃ-ÂyÄËðò».MÁÝÌ…ðx?TzExà )té6^*áåÇõí¢7Îm1½ÝeE8&Ò˜áò».MÁÝÌÕø³ÒÛW„Ãrã3“\~\ß&z7paÞ³ÑÛ]VDbR!™IÎ+þvÑ›«YÖèí.+"™Yv‘\~\ß.z3ðÎP ÿ„fõcoæQœ¤±5¯ÒŒÑ7'NÀ^œurQ~·¥ +ßÕO­¸Ó³Ñ §•Aä§‹dNÂS:óâ£ünK•¿™¦ÛYÊ|}tä'F\3¿>ÆnrH‚Ïu*dºìì¡8ÀKÓp³²›¦VÅž`ºŸ1] èLñd0!^wWÄêªåfém4‘tè:"ÈËHmr`„5+hC7,"§i$<YÒÖhŠ^Ö}-]væÚ^Ù\7Ñ6Î’Ä>ô)j莡懮§õL}½k·]޹¶«ÍwîÁr5°3¯ÎØò•çmÑÑ óL¸ôž³ûå; Û*p·½ò¶iõÜ¥¥Ý1ËÊ&½åoÐ-û6,soX}çBé·o &Ê£o0>ÇæäÅõÉ:„!ÿK8GðŠ™V¦³uÆ“H/ó$>&Xäð‹I® _–¦‘®¸¤È‘mó¨Q”JYX¡Vjáø-f[.˜#uÕ×à™Ž³„´j{–1ŠøK +«Ê-´RL"K)ãpg¬Àö{ ]°Ú ÕEˆNQ7eU(æ$>Fœ°•Ë–zÕ£´°Š ÕÄþàâ0®úƪ€1×´¤©·N +B¹"Ôh`m}‰wÄÛlÄXî%*FرÀš‚I°îR½Õ 1V›!ɰØòò§÷Þ›îNhŒ¨Á¤RÙÈ]I-0ÅátÍ +’(èD³Œ_î $R0Ô’312™ÊŒ}Ëö(©©í\ré ¶¬vrÖ‡ E…¥k¨šqðp°í +7,‘De IU–\K†Õ¬ÕdÒ:^¢0`ï1r< “€ð#ðÎ4Tº¦XycJQëP3 3iŠjR+éÅrY‘”'[äãs“Õ¶Žš¤PÕÍHvVjêRÙÁÂX60Kyq¬Xy[ eå½ÇRlg I ƨuj‘u¶Ðþg«¥ õáRæÜ¤æO²Á\M1ÈÉ'bä€Ð&% ˜ãììÙ¹4º‚³×,èpCÁŠËÙš.Ôƒ$)c0Pã©14ô<¥Êšˆ!27ˉî¡5Æ0= { DùÛ0£ŸÌC’T0ÂCë<ÆBl6jaT™ÂP°—ÔÄØgçëbX¡â Ÿƒ…t#Fh'–n•¬¸ò`ÅÜ©‚H=R×ù~¨ñd†vSàó‡KVÈëà¶Bc˜8øÊMMÙ|¯udž×HfQx²\1Äž†¡5ÕÙBá0Q½^œ‡ŸÔÏ–[g¾«!dX0J¶‘¢gqtÈ(nASh$#²w Ò¤©ÌgM'aÒçë|ØæµÄõ€ˆN@êZËÇ= :Q—& N€¹U™ÏɤÿÏyµäH{ÛÀýœ¢O0–D=ËؑÎÂ>BÃH`à_9@®ŸâSR÷d“ÅýÕH$%‘Å"v?;‘¢ñ”¼ ÎÚž=F´ÇÞovø¿È~žZ@VåŽVtNØ 7Œ +ÌDµÀû€ÄÀ) ìw£™ RÍØ’Þ;¸Q’/D¶3? +£&wŸS¶ã)kq°K q%¶8ÐÐB%:Í0XÁ$ ôZ¬,2„ Àà'GH©ŠMPêŒ8+W @œ²ûv(„,ójZ«ø7þ4j¿¤Z‡´øGñ@«€/q¢¢ÝÂ)ÒŒwƒbpe“2üÂ…U¡ÄZ׮ʹX~DÓÌ +©0<» +ó3°*óž‚ÌC…AÔ]óä„rGÎì­ ÷Q:d;€b•±t/cúƒ¼\ðÚ‹ALRÊ]\X ‰Ì”½Ú` L +¥ªthƒiKH¢"ÕWX9H­ÉÊ2í!E80jI×"Kæ)¹-†!R›h. Ñ.le“õ ˆ@@ô·X é&uZ@ªº3-s„4¡Ô89”&ͬ m 8ÆT,…F7(ÍPÙ¦ Íšêoåá—®Ì9yì#[D54iïv›y†âBQ;5w~òC®¸¸žù]厅ò^Ëœ£„šŸ"®øÞÛºô5~¡©Ðü}Ǿ7¤Ÿe$t˜,«7͙ڷ±¬a,o ˆAE³r,nòF"G?Ï~m6Æ5»´½`¹…ä#1ÙYÝ×úä³”N0Ìveö:GÌe›eÓ§:VWRüjGÁŽ^#å‹Q7;ˆ)§ËJL©ÍÁª¤ úã™O±Ò™F˜OªçëÎ9³žOÀÆC…Ò^ÉÆ%è’ůðÖr âkJ³m%ß];Z†€PîÙÀ²¸›+ ¨/è!³™}ªRýV‹½Â9©²Ýäk…ó®Tˆ‚ÕvGÖ©ÈWb\Y²*:9˜YIŸ³B#P‘6ÄU¬RˆGm§LMŽC @ÇLí§©†V>……™õ|!F©*·†;1Úb Öh*5w+ +t}Ø?‰LˆLÔæ0)`´Å +N¸y’*M€ @ÕPÿËW¢lɦ šÜÞ®¼HSÙ“”Å΢Á+ ô½2Z´¨Šå@œRik-»¸Â—8´ôg/QCéJÖ[‚d”9ºv}Æ0ê°ÂP»©VÓ¾ æi,N­‡ó”‡nÇ!|eÕA„ÁŽðz ž\ý”Õº¨™Ü$æU½Lps\;ĺ…™¦Bc•›šSçÂÆÓá‹E¼åWßàÛ>_ƒdÝU_ƒnîà>xÁ¦ñzEz}¼^f©9—×kƒ•—ç)Ù›ÊñŽ MÌóÅQ¶ûÈ<ì=«¯—ÓžÍwùÑ'¤›9Ó°œžžÆŸ ðýò›âÜ•ƒÄ˜Å–îóï§t„Ásç¹( mêöwÇŽ8çÖ‰ïôûé…}.2h›ºý1œ¯@ï¯Ð`–ôëº_À6r{º½—º½Ûq< O0÷îX^3°ì t#·'õŽIOz7õÍ÷<&.û¨9›ï­m³>Ê S/³Ï^жöæõ-˜è<Éá\¨9¿ŸÁD€gÈÉs•§¥^—u^WÒ ÖªEá­+ }TÝwÞÇt6Þ‹Ú÷qû»cØ7±¼ûìøÚgôö5¬Ï´,†½È ÓÔéïÈMš¬x_"ÀwuÆ÷YÇ¢€¶©ÛßÃÉRZ ÐøœãŽA¿Ï¹4o–Šï3†³DâÐûÚO­ûÎ|ˆCïEmS·¿;†qèýˆí§öv>Ä¡ÏEmS·?Ž!Cçǯ?jš¥7ü £UyN pCØK·©pù~ÚÌÇá-°ÏÃÄ›«ç­çѳGÐѨWé< ¾Í3ù~Ê5fĸbE|o#oÎ8†¿þò#¦ƒüþïÇ÷ß÷Ëûé‘çã‡þò`(Ï2©?OÃä·ŽÞØ1ƒnl#Pg ƒß#¶9ðüh¨ËDuÛHzõÆáˆ~„}™C€4K„™3°ÔÏ:®x~`t€;˜Ý‹ C¯Þ¾¾¡B~CP¨¡¥AªõFñÍ)ÑŒmãkmp°÷9òü˜?9œ½*°ôæ#<Ñ„ÄQ`*¬|'mоßQ8‚(HÞ%« KoþþG&U¿§ÊdÅ- +•úY‘|Ì8' üÜà†2ÊZšÚÞÐóƒ•q»Á …µ/¼r ‡ÅõÙWÞÏä^{ Æ!ƒʹȾÝÎþ¾¾¯¾ü¾p 3Ñ|¤Ï1+±˜¯rùl œÏyÑkËÂd9&vx@t„¹éØiÈS¬å<]« Ù¦Þ\ +opKÙ"ÁÀ8»F¢à1÷ÜÑH('õ«Ù¦^\J$‰çÐǪ[xÑ9'Àú/åe’+Inƒá}â]À ÍRœÀ@o}„\Ø0ªW^øúþIŠƒ"2ð¢P©ïQ$¥ 8”×E'Ý»dRݕà D%ÑR´^qJ·.õÓว¶]»é†1™tL W-}ŽŸ•4~J™{RÌØ9Ô»²¸²Î@#ƒyºý°W|DY)Ük¹”×õ´Ê÷tðZÔtQÜ{:Œ*ÅÝ›ÙÕtAF×QÏÝ¢xR¨AD Õ±±Rwl0 Œ—Ä=ÖÞ§kò!ï8rU§½Ó‡¤ )ˆtÀʯVOdýæ}ÒBEUÑÞçØ™—ÇNÇ­¥pC}»âÔÙuÙé»/È7Dl¥Ž0H(:…•\¿T›UùS&;’2(׃w_ˆyùABÑ¡(¬$·a¹ÒšTµ{Ÿ9³‰Ú–Õ„º:2½[ߪèÍúRë:å62mO«gòåΔÙÖpÐÄTùpF8ÓÓXë”ÛÈ´=­~‰냼©®t-ˆ "µµÔúB£U§Ã€:2j¢þÝ·*zs’Xs´ä¹¶‡U¾>ǘƪ:ƒR6Š«Á€ÐÀ‡3‚Þœ?Ѷ乶‡ÕÏ×Wë_•ûŒpíãíH’03¢¾ztZ\;t×ÚÅ%#— Î&`À•œ–xJ2¦…•ÈÕ¶u-\`´N«7ïÉs[W ¢’héKkT¡–ñèa£ ­»k„—“B–†ƒŽè„‹¾šo5g'µÛ é)È) +ÚVù¾"¦r#ÎÌ=í -i:1DÎÔý;Èrm«_^êòìÞh@¤Ž˜Ä¡…˜B§¡Ã^å*ëG·*ˆÏ™ê!f,¨»Y•L¿õ!Cueì÷ë42ü’©V·*b8 }«(æÌÕݬ’+ŸûmäȶҤêJý;'ߌüŒct‡%îô(©ÚVE”|iOW”3äÚV¥Œ'gΤZÒpPâ +}sFЛõ•ÑÒ:å6rm«_âk>+AF7dÓ—ÅZnü1XsæAä»c¸%dÔ$ßÓ$OÛr‹®5¦~Ý‚.0‹¦°;Ä]º8Üs” Ì5>m½†2ÎAOóåŠÓ™!áö¾0æ¡ý]ÔsE™M\Ñ͜ܕAñ:ºêݧê\ÐÞlŸ xø¾s‰E“1¢Šnæ>ZùP0ÈÅ^h8"õ¦Á¯'À€ðþªŽ{«"¤^ôƒ(HAHÖ®ça+€ãöjZŽRß-€Á€2†Ì›FEäF~ás!Y»ž‡=ršý¿!ê§ÜƒOmÌ ®œuïMº|ÿZˆ‘þ.KUp³q˜]—˜]¨¡|JcNh  f6ï.i!  =1bjNK_Z«daÒ¯Û…äQî7Y÷ùä>ŽKѵ)¹Yâ 0¦÷’G¾_L@zl·®W“û¼ßM@¦êf}ÈX=ÞGÖîÅãÚ‘…¾oïc¢¿½½#C®íaõæLx%°œn¯Ä‘=ß_ÉB…¯DÖ®çaïKbé1× + w… ²Ÿ©Ä‰ÞÀÞä·tU +ÿ»,MÁiƒ\ÚÈoåZ;*Œ9ÑãîM~•p#¦æ´ôå>†½ K49¡ΚÙ4›: ñpϰŠ<ú¯£¢§É3ÇR6$ë4dÙõj÷,«È³¬ ñ:*zš<ù¸{Cá0þ®ìÀ•ñVìùÅ(Šêž†ï…»±wŽäoËŽíÅ»‘·äwÃë¨èiÒC9Þ‹=‡þ†ô´;.ýFö£±¿ó2h¸™‰¦ýìÑ8ôw¤GÛ¦ýìþjLDIÐs3ö¥7¶—ô¹Õ«¯Õ¨ªM +³Ý"ÏT¥> + &gùÑ]²¢«¼.tœÙ ¸’Ó’4yÊZrë¥lëxTÑ:­Þ¬¥õm]6p%§%µ>i~=]XC‹¼Îþt#kbmghu+R^!£AjWõ0ùðÄÛÝöJ™æ’£K5´[Ù°Ó^¿µ£á DU=L~ŽŸžž-ïhûá5äÍ=C’Åp訢ùJ½¶ÕЛ[¢Ä3TS´=¬râ‰8kÞR +¦Ã€’>%ߪHœ¹xx +r†\ÛÃêçëËv} ±4òöœW¥oŒï²8´•™˜æ:ÝgN®WI 3âšö8ÔLfÄ+¯B^ ÊÁœÌW™/Ç÷)× ÷àDצåaK=à››øŒK.¡sP ðez%Q"â¼”³7ú|)»OíwƒÒ”È‘;}5cNYa´,„\|-+Óð°óe:øË„¼uüOíßø÷6ÿýéçŸÿùU.}:ÈGt]Ûß¿þ‹5½Jý$Çë-S^•Ë_űïäÜ'r ?×!ôظµ÷ªœhÿ¼ï¼I‘ªÛ–-±^o[ïÜ.n\âØ±…4U%\dÂE¦}‘™/²Mmª +ú´¼:é)=qÌ@#ËhXWGæ »•!é⼋V”tf?Øæ =xº¶OMÚ”hd…éî“2ò©£Ør Ig®ñi›|úŸ~ý(¥KŠ6±‹ûeN²cù‰-s‘Êøl™;•ÐuÔqZzŸ¾rqû­ˆ}aN(?žö{Wû£‹}‘ÐuÔqZzÇȲWÕ—ÍLxÒjs‚ÏÇc5‚5vŸíRFTÓÓ‡Q”Úi^HmÌIÛ¡ïk63–Iýµ‹ÈRu<-ök±ÕÎlÌtÞì ·àRJLÓÓÞéEŽßBÎlÌHYš±Í‹e[Ží"¼4OKdŸq-g(‚yWjÒuÅÅJw!£¬çuÌV¼-hŒ´|á­ô£ÒÐÒ¤–´p!ù’ºõÔý¥‹±šE3a¡Ù QXŚò$I£‘5<™\öV4ã54äœ!ƒ˜3Sw·ÊOQ!>ѽœ.mÐŒFÖö%W–VöÔ1ß©+*æÌÕݬ~Ë”Ô>²À…¸CÐPl´üÊÜÝs’¨GÚ½¨ìS‚P¹ö@c̉izØ#Ïœfòö"íqÎX$¹Ÿ^(a/®:œøÚ´Ül})FÙ,ß»×DÃæÞëÒbc ¯RwéúýëªÜ Fj:‘Š&Ò¯Ú—\a,†c§Yƒ}YÃ>¬ÊüâBŽTÓiì[ü\»s‚¸Ì¬Þ¯‚ª69éH48­n’åû‹¡Ë½ÐÍ |S³èÞÛ¶*È@µymSŒ^sèr/|ïMÿç#ûÅhˆW¥F«ý¬IMKåÄØw'³.z¥Ò Þ ¤põ鉵ñ-¸þ¿š+7Á¹(˲àµÐÑP6ù‡Y®3áãÿó¾Y?6´&IO?ãÛÐn\t¹®ìÌÈBËÓJ‡1;‡|;ª’)­ ¥Ä5=ì½¥íFÇ$}$‚;·ÎŽ`,š¹^9À€Úk\­÷Ÿ°Ur2:¿6ÒŠrŽTÛ«âÚÎÔÈ…RÁŸTܯmXa@ðjÐç×}º¦Nú5`uF!G¦êfo{êÓ‹Èõ}'(öi<0'„Ôþãû”¼‘'úÈH¹Îœ¨¦§½ýq–V04ùƒ¦ ô05’ß¿dË¥R†²eZ6Äa4„Qª,?±´ªÈ!Ñ&`ÑÿºÊ)ï +á%ƒd„s˜öËŸ}x¿åù ßY/y0Ã]¬Íj]XÅa ™Ñ܉y1¡x¶V­¢lŽU6ã’ Oh³ž5Ä®4Ûfµ×)ì‚G +;Œt—V¯›¥Á$¯íí¼ +B‡^è6Š.Ÿ‘XÃè¶Ù‚«;{ǸFl¬´Ý˜­‘»`«dÝY1åºÜT†x†ÚP¶g¦:³²ÒT–‡ÈµVU]ê‹ÍæÏ§,'¶‘çR6®YD>ÒRF‘ V0W5eE\.5ÕjŒM®Õš™ÍTв¾ÙZÎVc54Ô½2Y®‹ˆ™Vb÷j£ìû?¾Ë%WšÛ†Âó½·õ~†±ƒ g-42³gÙ?rø«êÞ̺¾–HJ¢È#]nk|µ£ÛVåÍ;_©óÙŽ¢1Ûɲn"c9æ†ý±méIPIÃÐàL«Ô"õ¸ëäáÝmC”sx™Â;E*dIxsT™ ñßò`¶s—ðð~©fp£ BÊVqº™v`,e5“B–SC»é׬Ï9”aÈÖI멳+C¢ñ¸]¡÷”ÍJIŠ 2)Ja;Ñ8µÇ¨Æ¨qXo#°6¥è¢üp§8 n€ ÉZÌ)]ò‰ªßô’Qp¨RÄȽÙ"ør£ë힕յp•ÀúЋL›‚ "ÍZ‡oÞšÄÖ³Ú&ã`¨A§––Æ’ZÃæemæ\yPŽˆÕš4-šä$„š4üfЙu¤¾Þ‚ÞQ|X «¹–çfsË’³WäGÓ¬…ž}­L%¥qlƒ +$ö t)›{P¼`8Å.l”+Vê’ëˆDöff¨™:®À2Û«1 îË\ܨőtÒ½2 Us +šÅØÆë|¢Ìtxlífs«\©Ž"1p¢ì"à Ìɬ 9n<ÙK„,‹%Å€«Ì¤Œ-Š¿Ëúe=³Š2ÏÆPŸ·NÅÛaó8Hw©´ Ew“9ìzê“®$äü壉êKd,©³¯ ±é¤ÇRÔñèãCE5‘š鉊Æ3+š€CfLfØ¿¥,ï!ù…œ—5€¥IEùÚ©÷3C¹ëÌpŸxù)±dX/ô”b¶öšœêudÉW°Æw#­×²qÈ0ž›r“:QèµÒùvVôE܆è÷µ¶1Ò‘~Õp0\# +Ä‚1Ô.6–Æ–Q(å©SRS6[‹ÊPN]}B8M.MÈi©`h•ÅЊ€)3ÃÊ]ÂÎ5¶–j+z6í–ë:öÅΫÒ1PÍ-sª±†SàŽFØõhZ©—ŽÓO©N©õHe9wnE¸HÉÆ•<‹´‹dÔ¤]g [Ãà„áN]` 6Z“ŽU-âÑézC9^Ʀ˜ËÛ¬ m5åY5QeÕåã†èÜ7÷0fß—þL¬wiã%CU§¦2<- C?ª6BFT†Ê.B) êªëh­Ô}ˆU9º'£ŠðÈË)T5 ANØÛˆ,h¡uë¥Fg**©ü(úR‘žo7*£ÚÔ+VE •Útj¦ö´GV*CU^VÍJBO¢1·MÅ-,"1×°Ôi‹ºËÓm·¿ÉéƒfQÖ¶²±ìd[¥SaÖ,ê HÖQ¬a'¶²ÔuSêÜýª»³¾ +“+N¡ù^"îÿü16½+ Ñj„ü”ìQ¡Í@}ó÷Àxï™AÀÜåC}T_U_§x{ýü)o¢’QÃ({é%ƒÓ[xA #ó¨.9 õA=úTCx°êÉTÃ8GÇÚÃëç 䲓§#0 Êók$£pUDÃÐú}Œ<œQ ›4'WÍBÿýEÏ·¹HÇ9;„2¿¼tŠ||Èr&•ð·~»«àvÐËÌÜâŠì}X$(Ç-}°[hÖ”Ãßþ­®>‚Û4½¯ÖØ!€Ç­|ÄÕúßúí®>.ns¹¯ÖØ!ж=¸¥¸Zÿ[¿ÝÀÕÇq‹k;ÚmµÎ +éu’}†Ç!JÜÌÕÓÅyY·5;;„õot.ŸaÝqˆ7sõÄÎInñå‹'á{]¼_™Ï ë‡ÒÜ‚Žrâ–þîQø. A5BÃwâK QøF@+ÏëF8qK—(bÚÛÊOÖ:ѼöYžù¶jáßnãáéîßóßÖ|Ò׉&xð¯WÀÖ{Fè·ÛxxºúEÎWë5ʉV1ŸåuÎ׫#üÛm<<]ý‡jç«õbHÝWÿZð|½>Â¿ÕÆÃw™Wzå׿ÿAÏ(i“;Ó+„Y´—$Íœ9¡'fI”_6Ïɇu9^J%Œ2r,=üQ8‡šø‹^³÷:Ì ~¬vBȇ_ƒÿôQFŽ¥‡¿Kô’˾s_˜’•혒OÞ…>ìOþ}¦>Üݦí‹G–û/Ì =IÆÅ->yٽ؟üûL}8 ·$+AO'z¿U䲚"qŽ>««"°]3‹eTü‹æ&úü€¸(¬7¸ƒŽ±›K +.Pܨi´.n•]ñ5CÈXâÕÇEdÆn.ù¢`CY­â턉cóMož`@ z +ûå @A"·E>ϨƒÜÖÝã-ŒV= qÂú- ²ÕŠ…á£ ¹­»G +㧬¹Ÿ3¿òÆ@ Pﻎ€”w¨9¯0ÍЇT;…¨)aÜAnëéñHMJJ9(ïYðº"ˆÉ,w¸ƒ‚­»G +äïüöúñó¿þóß×/¿üüÇoÿüý…é¿þú·ßKòⱼ˖´u‘šÜEÃÄ©¶¤É›ê#ôóØxøâ{±5Zò'ËsÐäFz Az-!ÚÎ0‚?‡/»Šœœ¬I:Þmö0Í5¶³@PvÞ¸g¢¡[˙޲—qŠÜØÝå#Š«Î C­!0 „Ò¸ß$Ôœ$3NQ0vu)‡‚TÞiÍרïÔìPèØP½4ÑÄiË}¢:„[ÆÚgŒƒcçáïÆB1 ^îÈë2‘À‡mÕ4ÖŠc˜‡¿¯o’JoË”Þ ³ùöUÒd´Ï7­d ß5õfð÷çGGï©„o±póAÁÖ¡ì¤9÷¤"5t`@Tâ-þ†÷ò.þ¯üöÉO'ßlL·i(·ýHïrÙóÍ« 3t?Ž5îGøf wS`g?ÚFÚ‹+ƒñŠÃ<ÝÖý¿'>|½ÕË, ‡EB·¨hËHžë0 „·â6Á±Î7:#4’/Œïcäê‰;³2êè´`ò>UÚ: I×£-û&ïUesä蘺úûNÊ‘ŠA£éÝÒÔ]¢àïð ¾ùÚê,ýú°ôºTâÁÈÕ“ìŠ1«oäªR~xŒ·½Ó—x3a€€`äêéëliíQRt#3 {ÞY!MïóŠè}MÿW¿Îü››4MñŸ94²BÂ>øfÑòÃp¬Üœ}³EŶèË—jÿÆÓbržÚ¢’œF¶P^3Õ}›jí¢¢:õÁòû ;,š»xå¾u`'”ž,¡‘áùJ¢éÒETÁ嬆 9$ºøãô4ªx˜ÍK­Áa6ì¡<^½väååL 5¨6ôñk¡:È­=½rT‡zωŸŽ§ˆ䥿L % E×. ’o·óô÷Mµž.Ši‡;ÔîkVø4ùø  êÀ c‡@²ô™¦ Ot„,À@îžqŽŽ±»KI£@óÔ@Бæ@î é¹IÜ…‰†(õ^u´ÆäÆî.¯‡v©Ež/¡–&Õ&LµräÉâcpC_¸|†â¥É³%•À¤ò\B‘ê$ÙâôËM|áìûn6ßiªÒ‚„ôF»½›Ôøy ET§¢Â9pmF¥ Zºy”Ê혖siü€sxA¹ß1$Œ=â(ÇÒÍã×w¬÷gƒ +lWiÔë»ß¤ÑA^qt^(Kf5J#ý>F®žx¯”…Rå;n¥è ¯2:/Ô¡†&|“FSWßlÓŽ2þrë|/Âe Ln”ͳ+'{aÿÚ×™söærÍ|' LnÑñ-wÌ·Áp¬Üœ}½3¥ý_—Ió(2ž”…òB.l4:W^ôõýs#â½zQ…_R$%q?|gÈœƒ<¿ÎÒ‡³wœôûèyØûXÑÑá1ê/œï®Ü¢–Ï/V‡”úÆ8àË䓚LAUL©D™€Ž¦ð)½NѨ½vu q¡wxA%Õè€|Š3w‰2Má“ÈU_‘Tô™”Û« ŠS‡¡aVj¡¾Pœ@òËÃÈe={77p<Ãܨú0txAy_ÜðÍËRf«GÆÁÑs³wI …Ga©ß‰­¶QàÎâ“íó0'èÎ8 Ñ~ù:'ß_«¼Z«?RFަ‡=rçhÛ¯‰•™¼@ajýÃÙ!¨íõî…x JâGʉkzØû0Hï^žk—æe%4 À¤E…¥Öü¦x“;à(zš¼–™K?ó¢:Q`Ò®.®HK“¢âúuT<}.2 ÜUh7ÈAÉóüj9Óhfð‚ò–K}³¾ÖKÊW9G¦íaU +NÀslw†êõ<ð‚`âîŒ qf´&–œ#Óö°ú>²†…2—¬üê8î©(Bø¹œ’xˆÆ‹ç,4ôÍÚ +ÐEN‘+»›”öhE©PGŸŽ±@h«ýîˆ q¤ápÊUN‘+»›¼v÷Ù8~©ý'¤É.ƒ.E>ïh`¹¿VÙéwV;Ã=N²Dí*J: Ÿ¶Ù¹ u¿Z1Ÿ*3ÐÈÆ¡]öÅ'cäS S¤Iv4>m.=º +÷ôMÍÐF’‚—;°Cªš³®zéÍ>ÐO×ñ°ÄAå”f;µßP˜yÎ0vHÓ©ë¬k>œáz "òé:–øºÐefíê?_÷:2Ðð(ÅTnKôóûë™j¢~ʇ¯}è¿M:ÿ|UÞà<ÈÔîv1JŸ0š´!(ño×ð°ò>ò#0/Ù¨ìïÌI™÷«pb¡à@>އ¥K(Pùß·Pp愞(ýjùh,wDøóèxXŠ·‚Wþ +Ž +Ó\gKäÓBA?õÃÖ>ô_Œô­| GЂ¹N³B88;ÄôaÈ‘qÄidTªï>#Ÿ&•Ø(¦Àt½³ÊÞгír:y'~SÌË^ó=ëÊp2«ñPT.R‡¹¶›Í«v"ymWÜE`¾U]NȲä6ŽÔaGÛÕæ‡‚<[ }iMzÇ.œ÷ÍD*ÛêTx¨§¶èK Që¬vÇZQÎÑÑö°ÊéqkæL{¬Î ýj>œ$ά¦Î˜œ£¨ífõç£ñëAœI¯ŠÆ4 ˆ³™_jˆb|½úQJizcñáHÒ+"¸Š:"0 ì£>ôÍKSW)QÓÍâûØê>þ’…¯<9à‰1uDOâ§Å8ð ‰>qdûRG” ˜78ðƒœ¡£íiU²Ò1¦) +óFæbàð -7g }s–cZBü}ô<í‘ï/w”\…gG©Ó[Åë¢ ºB‡Q˜ò}¥†àZÇh]©»9GGÛÃ*ŸSÄy˜3x,jrBÛ¤ñ4ºÒy!TòˆüuÜl}®ö›àBBK„Æàrâm=îÓQ ® gèh{Z½×Ê!Ò-’†x[¨=gyp!þ>zžö>×€I\ÒDï’!&Œ[<89 hðìj«†N·™^ ÿ•#àà(¹Zâƒq=6ãâ}àÕ­×mÖK.ÀQ-}x£n¤¾O[!œþÀ¿AòŸÿN¿þó¿0úå‚y­¯Þ©ÞãÁ8Z@~ý—›7 É:5¬ïÂynhž¸›\PhéYEGÂiúN¾$dL+ø¾Ê?µ¨ü{Ïßh1¨¨×œ/òŸýÉ(¼˜æ1Hç¼0¥®lòw-OyW«Z þúõ…i¦Î$ vãݦH •™'7©‰š²Sý5ë«ã‡íÎ5:ÿÛÝLp4!“¦b¦T„px”Q Ézàõ`Œýùµm³³êÀP6Å êA¡zÐFPßw™³G0Ûž“ÀnÈ&a}Õ¶HM*c›C.H@b{Œ" ‰_Ø\î‹c ,u +Z*Ni ftK³Nfm•.l캳9† ž6< ´«±Z°bóªCü-1±K›ÄÚkצkgã»XÅ s2›mSY›æNr;Vwnº ” aèÛ“ÝK ·',5LÞÌðG¶‹ ¨ññÕZá²Zó#Æ ³/—€@¢Ö®ÉA¸Ë>ÏlawÞ1ãfÍ ÛØ[§µ{çD8èÁWѳ&ÍûËXI³sXÏ\óVÛ¶žê`Írm¦¬kGŸ™mÔQ–Ê-(ÌÄ +vÛHŒE %»ÒEóa•Äry Þ/ÇÕ»ñúRÖà³6kSÖ›œK†aÓÇs1dU¶Ráý¢lc;£n€á…XÔn†ï-­–Õ–l^›ÆnY™í ¸\¡‡&1Ô]õ%×^ÙèͶq%ú°xt¦•`u—ÛJb¸Eâ™ÔNc‡}¤Du±ˆeiÌ*r cBs–ùQ°0 3º/]# gx2k5™ÃHNvù:·±Êž ÕÝ9ü•­Î’mç9EnÎaG‡n!hP Õë™]ÞDÈ*»Ú5ª¨«x¬*›-ëÓfùÕf–h"Óð™n±˜ xÌ»«Vcy%‘C”ÙÚTdcH½£ðÆÙ6b½O¹F¤Á¬·É5²¥¡F«·" •(ñÖJË–-e퇌Ð*Ê2R_b$4sÇ^™†ŠZ4ÃQe¹Ÿ P8K©¬^Y®ÆGJ AË Œ.l"˜ØÒµ5kCŠ,cµ ”O¤0ÒY+KGi©Ä£¦½‰¢_RÞ‰õLWIŸU}é¸Ufè ÕÖâ×$–xô6é¬ðª\sl“Û‹zœÏœìÞèŒz›cÚ6ެ®a Á²ø%[ʲšIœ"É,àôUÔKovȈ>B Š]FGx ìLK&Jç^Žæ2írq$ ÈÀ¢ÑSyX+£ØÊŽÑ‰åžæ°ÂZ6Ë¡· µ:7²pPÛp1t7ÚêDÚÖnµqQïð·ÍÚR)ˆá£éXwu¨ÒKK.¢ K3i*c Y4LËŸ…~S™Õ)f åþ–µµj–M˜ ò·Ó…m9J¥¼y8Š´…!­Qœˆ!m—°ÅéJl¶Æ‰Qé€doˆ«¢¬`Ø`}¸ÿÝ„¡Qd9LÊ:Þz“/I¹ÀÔ>Xèÿ\W×±7 ëÈ£À¤þ3HûÎþ»ÁI«D"@¾yyÊ•kå½C¦”O²¬a0¸¨z±í‡\5_WíÐê#†xð^°ü#iü«ppùB ÷`U:FêÂU +Hb±Øc…=èaCîçVYïÔ(bq½zé ø¬¡„¾`}¥UzÕI¥™D<ýQ6œëFÁ‰+] ¢iÁçUó/oN†§¼¿^ãΩF›®¾£÷nAvl÷é¡TRôòÔg'øÊ.²»‹l꤫ «Ø·› v E}¿È‡‹ì'ßçðÊE°ú|î ÿ½úš·)̧g¼Eº>ê÷ËšJÂ^ç»Ì£›z‹¢=77Uš}`_— J¨Æ],;å6-Ž./˜*ÎUܧw­âRü?ZlÜãƒ(µMßWç#íæ­ý‚RùØ®0vТÒ,?;ºýRzµ§&#q*œÊLÕ¢õTr¡–F±°hiK y 1°;ã`;iQöyƒ5¡ÏxÏïÒøt°€v¾E¾q0)ô7¸Ñ;Øik´Öw4ä…û»Tã¤]•ŸËQæKܾeù¯9±vôh¯û§NÑ{> £´†ò‡½¶†XJ¾ÛZRT¦|·lÄüx|¯A§‰‚ßß›Ý1Ù¿· ¡V=SP!:æ¶S°çÂÀôå)Ü…Ó•ïoœ(·‡ñ2ßÉqüWïEÑû?Îåm›N™Ì¦5N2X& Y6¥¢›™~b}ž»¼Î3ðš/0…ãÀ¼¯iüâµFØt©Ý•T#iÀïG‘æ/8%)àÒäÿ­ƒëö\µÛ Z¢8&Sibâó98[ãT”H4vÏ.èÒ÷&„ÝqÕà +M }Ã%`…óh ÷4Ÿƒ¾[«´7©m·ëc} +¤Ò¨­€»«€ÃVjÝe½Ô¢Õé?uO¸ÖʉÙe8E|«âE9w¹ÌªCÛáÔfÕHòL NjæB«+>XÍYã¥ÃñRaëÓ‚aç‘3˜D•ÞÃZ>˜ñ{ï~˜{u$ñjœ=‹˜g¬çÖD˜ØIõH ¶z¶Ò©-Û<-î‹€èWcq±+*S‹Á[·£«?uxjm¦Íj¿7×+Ô‚l®xø<#<ôÞÓa]jñ0TÂaâŒWýž^ÁÒ¾”(¹õ\øZ + ú¸²Kbë*åVh…3²\%ÃÃ5Üž›q˜ËL;ÁXf»ÙÓÏ—òW¡Þ†¬m ì(/Z¿|‰è‡m§2À£ÿXhæ=ŸÊÆÊ[k¿YQ \¨ï¹±{p¾Îí¹’©¯¼zyÏAƒþë .ܹ ‰:¾KBÈ­…´²d.8¥.Y¾Î&'ð©µT–½yÓö±¹”xdˆ+LzìÿePõÆP˜>áYLh6œ +¹­Q4ÕGC2eë$ÝžSßóÕ"“º„TXž©±»SDt&Š_yÇ[Þ!„R>ź|EÈ'òŸ2llé©a™ÿòeñ(½Xž æ‡B¦˜RÇEUH³˜"0ú) ‚JVPl/I&CtF‰ ÂMÂdYÆÄk¾€§U|%Ò«¯43«§&g<éA(Ic£€ëú[ev³pý=⸫OÒ\ÝÆÀµ5îIY|@(Ó'ø>[++7½®©.ìuÝËú: ~«&¢ùtÖ,—€ZF½î†¶Ò¯«1Xgüˆ®Cí2­b>Þ{ƒÛånA5»1A}1èò¹qX§Ó&ýÍËÀ÷±÷²( ¥kõïQÑbT0x(ö+¼^Êywò6 |]s±»Ý˜Ý$>¯£ÉÛTÝOa2•ih+Q×—Œó„`…7&£~8ÎŒ»èíÂ|ù`ª\"úA¯…jÚb6¡KÕ•Ó=F85 ´Þ`SRÄM»'ð>›˜]¹’%žðBï†ç¥yhÃ'ù4 +±->Lx¥éš5ôP)Až¶?Œ®à³6‰]ºþÏoœÒQí6 Uvåúlï2`â\ÕµG_€^8ƒ¹òÈ>ÛÿA¸*FÕ•nÈmó¶+«°<%£Fbpµt£¢¦óh‡¾}é»óhWh3™—þJ ý®˜¥r¸Úþ«(¡á_6ÛE^ê`°Mz»ºDÚzëì¬óhÛ±ãÆ®icxM äÒŽ_£—Õ$f¦…5€òU¦Bµ%¼98ïi•ƒ~$³c«Àö["ËHîþŽ¸ó¹ª»ÄPÈû7Ê$¦†Cþd™ÄüöÜÎ2‰½u~£L”á6ûÍ2‰cñ›e»Ñ[î,“.êþf™Äà/Îo–I ÑȳLb¯<õ_–‰,7ãºÌ2‰ìi“eƒõÛ¿Y&±›ã'Ë$&~ã7Ë$©×ß,“˜U‚úË2…‰f²LT­†ýf™ÂÚ.O–)ìÝøÍ2‰ÅîŒÒY¦°4€? _Ø"¯2Â÷½æZ¸zÿ0e4ÀÍÞ¹+]’}sa¿Ifþ·.ÜS˜³é™4c>gC5a¢±æž•S·­N’¯¿'BH!wÇÏã©$Ÿ‹N¡=ä>&œSÒ’2(Ó‘.ùŠêR¾à„¤ ȱպz´¿õ÷ UÇEš²þžî Žœû¦˜³ý +[Iiº ª¦­^bcÝW¼^ôT°})Â:K€¥ŒAd[/y²pV}îÞìõ‚²ñ'%¤+ m§*ûžÜKåØ2ãAË^À>”.'„U•x2ØoTIÀ—€–bä·Þ*«à›5ƒI%­Þl-j(Rúó˜å¿Å`^±jåm5õ,9V_SØÜ2DÙE¬yú¹  ›vÎÁˆA|,À¸¯¿à ¥IûyÞî’PPX‡Ê{”ëݰ ýªhc+×»2%v5ÉYe¢ßµ¯‘ëúi¬µ›;F_¦—­]í½KC¯1M¡–4?¤«‰&ƒ™Fh¤¹ÚQù%¥®Æi62B2ò&†ƒ½2þ(öÝãpr«½ÀžÜg‹ÆB/= Îô:1ÑÆÐÏ8•Tfàœ’+¼†î~L 黄ò„Ö0!'Xö)×ÔÞ…A£Ò%„w‰e†¨Kr!Mx:P†2W«ÿs™RpçxÌK 6@ Cÿ°•ך “oè LÀ>½J•=.ÀË>É¥—}cõþBnŠl„Shœ(˜Ëstð%ßðªQä \RiÕúÊìFLàÞµb +ÎÓsÅöaŸ¼x½rÁc?¡a“ØJ@‰”€L*5*½g}µÆÎì¶fÜûM* •8“нÁÐ Õþ1!ô•^ ;g6ü’“3ª l´1ÞèBÄ„±št+ׄ1n%¸@ºÇFô%¦»À´” ½-.Õ¯cµÔ†ÇÆŸß´Id¦þsÄã_ô÷ãññÛïáøç¿¼,ÜW–)Üüxpß¶>Ót±Ž$.zÏj쟗¦b¶L¡áÿ«BóDøjàá(ï5%ˆ†þG¥Ùu徉$ku…‰“Mnr^âRíâ¤ÕðÿK«ù¤‰>¥÷·o@¹”ë ¹ŽœkºàžüUîƒ +‡û˜êôÇ#áɇ\1úxôþ¶¥ö"´’ÐdM§c¦ñ Û/òxÆ)ïâS¦5-ŸEŒŸŽÕ§±O´Â\¼þ"§c®q·Ý}Šô¬µ-O‘²²ä 0‹¤!Oáâi:ç 0׸ÛÞ}²<ÅÜ#¸0*À,z†<ÚKê’'À\ãn»û”N:Œæ$¥NCÌB¢!úÍ–óÄæ˜«[¬.®XnRíßfÊ `ñ…ÄÐïQÀΖ ¨‡ºÅ*»Bû#_„KõÄF›j䥨QÄFÄ(í¹‰4£r«1׸ÛÞ}¢‡¿iì2ÄFè(íIм­¥¹zs»mö‰öÐ+äë|‚fšT4¶b&4÷aK·ìè &73…LyjD?*-͈èÕõÑÕEþL| +¹¶ÍjOÂtœ™3©³QŸ„“+Hœ¡ƒWœq>…\Ûfµ;CßýêO*_¦´<ñ‹{Mæ»9PS= : r&‘¾ÞœK×´Y\¡éUÝ:`îæàÑ’9;2 W×wÊ¥ê\ + M›Å¾u|°ÊCNË3#:Ú퀑|ü‡± ùz\taÔñÏþ[åf½lÓ¡Ä{ëÍËß¼¸9fß‚ v’ ò!1þÙ»èfà5­*Y7©¾­Üå–õV0CøxíMhr†¼x?¢_\qÆ5×´Ù›½ ‹êÅùd/›c†þë\½„¼ ‹³K']Çfé…{mL¡Ð¡@{P!¹\šc†ðfD'H=†˜¯G¹‰;Ó²k˜!®hµ6¹@ |© 4ÝB.—c†p¹†Å^¼ÿ‘9*+gˆ+Z­± ?ÿBݯüu|úôñû—_¾íøüù§¯„Æ~aõI›«´ó[–ˆ\ñ(¥!èøz¶ªe±$ŒƒÅÚƒ †,ŠXâ.@Ñ$MÂÏ[KΠ”«Øu'j»Šå€ÊLÀð‰„FjæI` J©übc5 Ñóç]£L‚Ñ=Qñèå*vcᄅWÔnºÛ3ôwŠüºn]ð tè¢ë‚¬™œÐòâË­Fƒ’ÍXOŽÃ¥¿•=74'С«Wˆ=)ŸA m³:=žÅtµñÅFqЩ/ˆÈj˜„v=›½¹r>„7 +Ç@€Îg”B7²Ú&¡ÃV<Íí‹Ù°qáQ8dº(dÆðäÚ6«›3û(ñX²pÑˉÌ`:lãdÊÉß÷S¤w>Þ²Yóè¶S'±›äÿF‚†ÍÒÜL±ö››É@‡š!qA°•ŒËPµ™œ;©ðS5N)ϼ´‘CV*UsÞ¼ +8‡Ò®d¶ÔÝ0Ì*¥œº¸øvÈŠÀ¬[™” K0äªf{r,´7ºç [÷8d!º(ä!Ÿ[÷8dÚv«›3–²¼vC.:ci¡Gfê¥MÏnONZçªHõY–ªpÈU9ÈFâå9„v%³¥Ùºe€îϺdÀ! ά[øt€ä¥*rU³½îC¸µo0 ‘®Ì¥*²]òdÇÇd9dÚv«›3–“HÇkæ)å8dá¢3––@V…Ò¦g·×Ý ²ÌŠxo³Â! Tå 1ϳBiWR÷Ya˜gàÚf…CœY·ðã¹Í +‡\UÝfŖиÄïÈN…<úÖ¦à•4a Ý »\Ó¸##$3;Ân×µ#¦&l1ÛIaÓÛ½ô#VÞ»€Ö±¥ 1M›½Õ‹‘zí–pÄBÌ{ùÓ.ƒÕ¯¤éØ,½·Od{¸iMÍYÆ:a C©±J¸‹ôz¤kì:dÚÞ°Ê:œ/ò‘=É3âtº™:ýzä¸pÄYÃj£Ûí³3«ÉØ_“&´Q.]‚„ÙH +™Š/9fHWÚÝXÔäüxäi¡>ŒmHùÂDYE@HžT³±Ÿ¿9ýã¯ãÓ§ß¿üòõ8ïãó矾 —È©hɺð Ðú{_tˆÖ"ý¤&jŸéÇ|m›U¹GNm8Sû Ô(<Ï0;c8s×¾è:ŸA®m³úvúr´ôÑWNüîÐÔ{8•zÖ×g ŽÑMÚò­Ï>IÍo|âù F-‹1Ù1ŒÏ:¾„¨0Ô±›–‚ úÕ÷™£À4 Ôµ˜”§}¬†1Óq—Ø0v2… =ê?é¤õt¥T~±±.þ¤ò&Ǧ8¶ÇèÒ©“¾°yú!2xpE»Éw*%­•’N?˜¼R Œ÷Ó’-”U‰ýW(_Ì`зL#?^#†"F[yueÂú0\ËbLvž¨Ï£WG´O¿.òñAȪƒÆ+T‡R*¿ØX Cuð–´V`òåAÔªã~BõQ`i]M½3~³W…LkKŠ"#($æ!12"wˆýW)Fíp‘L¹°ûBLbr#v|ƒe>Gælø¡6 M»IaÜæ#Ñ„qnÚQ +|Ö ®î ëC0Cí.…¹g˜GwƨܦÀÔiPô†Éw*¥X¥¸ ŽÏ›ÇtH¸¨MOÐà1À½arÉNϘÏÀd`€è*šÁ ”©xØ8žÇy@«O›ši²þiÏý£”Ê/6VÃÐEÔ×ÚE€I“€¨5Òõ,É»H)W±{§RªU +ï8ËNB NïümD{ëláøíÛƒ?ÚZ¼Ÿ'µó¥—H»clD=|6ýÞ*: W×jN3› ®k³)'ÀárWrTW(-?ý¿òÛ„w#ï”Mûû²iÏ3QÒô¦/å~½¨õr¼(<¯Óá‚ +ð·ª´ê—”€Éÿ2^.9rí6ž{½‚‚D=(­ @¦YB¾£ ²ýü|J§Ê620\çk¾$‘u,½;´” Z1F˜¿°çûÀªë†{”>P.·P’cééð‘4«½ê3iÖ|_sÌõ­YqixÒ,›@“\ßfá͇p±“:KÊä™:Òä¸ôðBõ5ä!v |«­‚› Þ2ÒΧ?=¯÷u )} á…põ-Œ]#Œ¾ç-¡ŸiãÓ×#evyµgÊìöêwÊ\ßš—F¤Œ¥'eηYxó!\ì¤ÌÆmXŸ3ï…4-.½HÔx&ýNåO'¿I›ýç´a}YüHÀÍ}û¸EJ¤âIT`Ÿk™·7–6δ컯Ǒ'Ф¸Âˆ´™x6Îu¥V‚ÛΛ¿gê0ºä5Ü”òš÷uËWð´Ù˜ßózŠK˜Û²f‹ƒ+Uö‹ëóh/d©âJž'{¼z¹fšë;-¼¹ùͼ› ²Ü>­ø ù×›Kz,xftï£gßß°„+¥D|#ŸÎ$¾ËÖöR‘ªwÚ„¶ö;ý–7Kv$$ò;|:“~Y4¨\븄 &§ÐLj‘ÆšðBÈ@™,¾.Õ@ÈØøyZt!—èXûðª9{0ci ò€¤½&| ÂoÁ²`Rå’Jp,½y|Oe» ÷Wo(@ÐÉlµeW„­Ÿ–¯©ša¾ë]æÈº¬}xÕ¨nlÏ2 †=Í^¨Ä{਒`š×Ö%—èXûðúë‚«ž_]÷ù¿ØØãßß¡ý·”¯þçÇX¯90[UyÊ¿~àí&s0šî×Ïÿ‚¿ à¯xÈF¯º^mÉ:–‚ÿÿ–· Zhñ@«Je£Õ¢Y~ ”!êRÄË…éÀ a;:Õ×¥¥\¤tIºù‘K”Ö>½~kŒT«wn¨—‰—‹†Óp\mÓB«¯}ÀÍQ ô­+)}¾åk^=œŒ³ã‚]ﻓðBã5ؼ–˜èÞK.QZûô»³b¤jÈCß"TÛõÀƒ`€[—öª‰dw:òF¶â’ t¬}zµp*¦{<2‹…#ýˆ-œ€¢áR „âÅÕá{]rk^#œ«áàÈ’( /4_µY8Wß7ô­Ë›E|_r‰Žµ¯N6™…:¤Ñ»¶6\cC¶"áA¬Cœ¸IÕDÒÚê‹–œÌ%è²öáõ=î¯VÞÃIxÐÄH;žá$ºÃ¹ä2Âcí뇃™½îP ¨K;,<§žL á‚Ü–©HrGº¼¦ò‘Kt¬}x}}á$¼Â‰Š¹lžÊº|¹@—µ¯NŸþ씳ŽÊS;Åjá Ì”CÝÕ@§£THòö’Kt¬}xõpf÷p§2ÎÝšÌI¾D'ESõNe½¯ž©œè²öá5‘<{lͤ˱-æ \²ë]û20²X )tÐ1õôg4üþGœ»Ÿ3*¬ÕðB$¯#YìQ $g„¶¤½å’Kt¬}x}?£»¾ÏdE&:u›ªw}ç\rylÇÚ‡Wgà¡ó:#©" 3Ô¤z^¨aбHÕ@rRXîÔt=r‰Žµ¯±;Í· Wc†3qõêÉ$<Ô_A©šÈÇŠùÈ%º¬}xý¾ç5œDc ÛØñò«‡“àÀ•âóûÇ` ¯ëOvHšyz2÷#r¨ÆÝõס¦m +ú)_$ÈÏh +ö6û‰D­bó|¿ñ2[®/Õ×û’që 1ƒ•)pòlË!÷Jú®“ÿ -ü™…uUø©'X°8uC{tvˆ„^úPD]Ýa£nOÐ"o#c}éãooL¥ŽH4¢JCnÑ„àêÝ"DûkÕÆü3Èa]µê ×€mÊ,8åYalô9‰ 3nH}…cíPÞ¸B«Al0\Sh}ÆfóE´#.fro‡KÑ1ÃV 8GYǨÓáòζ Y\š/›«/'Ï¢ÕÌå°µÕõlJ+5$±ßdÇ@èJç¨K%‰ÖØñ"]š­ã:u¸ÛšªÞ§TßO-΂E6MŒÝ[sXwï*‰ÐÜ&cƨ½=r ³HïY‰wi™\ÚW+˜Õ¸ô€8Ie %ØÆÎ œrÊÆjÁm¥Œê åJÃ,ÎV)´‘µ»Är¦­°s€ªf¿ÀÑˈm6Ç©¬5Âh8"šÓM¦”ìÒ‘îN§ì—@,<Õq¿t‡-á^s¹ºÕ +`Câ°ÁÉ!ÙZoÅ*Û¨lÚcÍXe›kû‚Z‰ˆÚîí+Lv”šAM3‡•ٜӞá¨7ô;¡<ÞÞyØv”Mql}ÊKKÏ—gBôCƒË CàšvÀƒëNɽª:ƒwÄŽä0†("í¤¡ºiºd¥L¸Ñkè}#kÎ9¦FDtÒÇVV&$-èhm\xqæ’Úòx.7‰Ž© –vK²ƒD<µßö=ü$Ñ1‘~Z,hQ#$GÅä¢õ;f É9‰µ¨+‚I?'=aÀ“ýºuÍ=½5cJ¨Ã_ckí²6bÒ~†×îjGÁÞjëBã 8—›@òΈS³f¸­ïaš+Øînm“ý€Ð6ÛìÞt§×Ú&ɹ(dG¸Å‰LyíáQ &·ÉSk`×±qÎd“”û² œÉ.9–®Yì®AŽì€èUC_™ípr5›h6%$W¾Á“ü(Ð57±5Ý] Òû#"Gh÷vâ f¶C\}¬‘ÊÞÌ)Þ·JN4çá+›šŒÛ¦9d\Ñšƒ­x1VQH«×n ¸W³òÁŰm‡Va]«×š¬6éZ‘ä&1–2µR¹š•&l·é-lW(×WE14g -“¶RìNˆ¾Òb>¡°ØÐ8„¡ òÜC!ÚT2j¸c®‡^/×£ #¬2Ä© =}·\ JG ªaÄü$ÍI+}‡6ÊNGUË͹¥'5«êž[¾¥A ªÇZqÞ¸bå¢igz’S\l«É(­%wBËÌh»¨£…| ˆôE•n”N¨c†‘æÖåR‘umޤF“E$€ÈÅ‘™ŽI`c‘Ôƒ4‰0~b C£«ä üŠ:c©H‹z‹ŠÄ¥ŽPP5 +z•=5¤‰µ‹ûPcGS6ƒnQr¡0(/O6Ö9t©Ew¶ôÿfpÖ°v“+ZI]ÍMÖºBc +W!nÓ€]®”1iG¯’õÍâÁÍ’‚EjX`ï¹û¶ ‘wáI?M}^tmsÍ£Ä19„™”DIYä{sú!9ÀU[žCÁz·B:‚4Á$&áÝ4ò5° `øPß‹Ã" /[®oé[ÕÄØú sˆ{q)D §MŒÐî…VB*êõ´K7m”Ú:a +ÔFü€KfºÔ‘à1µã‡”é<žm…û²O謬ò8KDÁ Cë:pÿì2É’ Å¡àUêý˜‡;Õý×e_€°›– Îýî2 „4T5¼V‡ÈçygyuGw¹$[ä¤ +¼‰JÞçh‘Ï#j¶ê©àdÁ^<®!Ø¢kT3çqª¶-º†`/_¶4×bXûeËã‚3ºF•·Eר2¼èÀRƒkTµrÁ5ªurÁ5€Ô‹à@å¶_×*l\£¡9º®ToøãM®]£¥k³]¸jp–™;¸Œ÷]·|®¬+ºO/ïis i5¸p×àM¦bþkÀjj¾©FSóU£©©ˆª¤ªïÓhU©9˜?‚iù¨`@ª`ò34Ób +Á4€s½ñL¸órxL£!”­ùcÀ<¢iˈ¦¤çì/¤i4IÅì~#Ì4€lK0 ?˜†àˆ¦ÑTÙ£i4«¹¿¦!Fëðž6Ó[Á4ŒEÓ80˜†ÁhƒiˆmUÞ¿¦apT73 àJÁ4ŒÓËÑ4K4 ÁMC°ÓëÑ4G4 Á¹}‡ŽiîhM +LC¬Ó«Ñ4{½Åè™†àˆ¦Ñ¬ÌÓhš0š†`‰¦!XƒiˆõhÍö/˜F£`—h‚-˜†Øˆ¦!¸‚iˆí`MÐÚ·û°MC°EÓÊfMCpŸ?¦!¸£i4•öh‚%šF;eøÇ4ÄZÿ&7ÓìÑ4ǯi½ŒqEChEÑÜQ4 FÑh*àQ4 FÑÌQ4 FÑ0EÃ` ÁE£™>Ñ\Q4€»FÑ\Q4šœ"Šù‚h™;ˆ°æ½ž@˜hÀ(¿¢ë-ŠpŒ(À•¢h¹Ì¿¢ÑEXZ Uo¯¿¢ë3;;¢œLãÛD¨ +ò#ÑØA4`Eø#@d¥ýˆp´ 0?ˆF/ò™_Ñ€•DÆ‹{þk0l&˜‚LÈú÷{ú¨FG5vÎoÇj9¸ À–£j9á @ö'¨ªÜ;ªFÇ*JT `i¹¿‰Žjk‹ª¤ÖÕ貊¨@RN}#jZø«]UCpEÕèVtUC¬ÕA5Œ=uªq`P ƒQ5 Õ›Q5 FÕ\Ù~\Ãà*_c'ÙÜQ6ºJ{+^=L6s” ÁdC¬FÙlQ6ºÕYߣ#ýT~o^M6-ÿÚF·¿¶!–£mt›0؆`‹¶!8¢mrÏ}³®ÍжÑm[?‰0ݬQ7{ÔΕoQ7iþÙu`+ê°¦ b9è†X º!Ö£nލ‚+ê† WßÍÂtÈÉ5ÀtC°DÝlQ7{Ð ±uCpŽÏNM7ר.í_ݨA7sÔ ƒQ7Ëwõ,Ó‹¶!Èžù7Û0mÃ`´ ƒŸmàVÓŽ›úgϦ-$<Ý6Êùz‘ör`Ú'p±;÷ ˜f¶o”¾Ê “­’Të)Ó<¶jÙN^iF¨åçH2 BUr½™ˆüŸ&>dûç‹Òë2H„ìWhª­Sé}½êÑ©Y°­™ÞÓ$Y.ZRÆ›†p(BÔ¯G'Çwñ&wÓð®RB%~²@oÊ]’’]Ü5Ð(ƒ”M¯Ï™½;Ý5ˆ§.8yËÆªpà&šös¼oþ3²òóú$B…H +ükÛ þ7œŠ:Œ5dˆnÁE‰{r@ê"¢üœÞäçeõ¦÷•ŤØòvÿAfÈÀ¾»»NÚµä$‡Yw H&žoß7nÇ’¤&¯!á0Š®öšp×Þ©eI\ðÜ Ë~Åz{foP{Ĩíû=l[[¹x¼d’¥½P^ý¦æx©£ñãePlcKÙ€Èpzb1k:#)Þw7° ]%åd?V­npÍý.ZÉdeAæ ¤ö4¢ónóê#Ù8´ÎKî˜lŒA¦{¹„¨¶ž>·g4+Ÿ‘«ºXäs¹ÜKÈä*ƒ³¿D–¨€ëÂõ|RØ}|:œ÷Ëû;pÕÊyç.Åߨå•›d"p/œ.0@:þ*•ä@\Ók‡$6—’ç[Te¶{ûJOgdΟ‚P†ûó«q{ó!¼½@Zn«oT|û&˜Ï2i +’œÜ:ƒ$ë?E÷ì^±ŽûôØ‚+i£ø¢Õó=ktw•!çܽ~¶Ï2I;ßÚq/[æ[ D°”Rÿî}3—.$˜ë…4V¤Ö¿¤uùÿÉ:'‡Ö­.cü‚©ÁHëÁ‘Þs'Õ‰ñ½'Õ ÊÛƒ˰Îv`Qr|PQ,È ùäÅ"*«H¦·E#ŸïVðyèÐlÓ'¡õA%M˜Ü¾Éé9í•HÁ)0Ó:¥¨ÿ™&÷ÃÆòõ`]¶È…¯e‡ã|}Hö’b‹•ÛÚë'„Ȉ3»vj[z¹×ö—œ*ˆyé$¬b‘&¦¯r% €Jcö(ЩD¾Í¡ï²ÃßA.Ýã"§õWràöt¹Ê’}3H6ð‘]¤§ËoíDɲjK¼ìSÍ…*pï$ðlAO~¯Dq·}$‰l¾W¶1ÏG’òò{¼•ŽÇΛ(Ø[·r›$—qfVni÷{º¬ ÉÁíÅî , ì·ŸR ç4¸«_ÓL¹¶‘¥Ìþ&OÖ™(\©®h&½À¹^«%ßÊ‘U/\“fÅ`yÙ¨Ô ÆùÌËt~æõíÆ²<Ü»æ/˜³­§’ÇÞÔé™¤ï› Ô’ìráKÖ‡[ëï…•>åÀšÓ[7F–ä ‡Ä½­±àTåÂlE•ˆÓ©ê0ïso ªON}µÉ‘…cW%‚´;¾ å|e,2’Ä:m•‡³Æ„'¨^ÎR£o&>˜ÏÀTZÿ¶(“l›E·|¥¤<ú·—«žLÝÖŸ ¶ ¡<Ÿjû^™ç©åXë8¥£} ×o«1cúÀy7Ǫ6XÑ*å;Å[×Éá÷œ´¯ž_œvîñ-˜uûVà>§¬+>¿³i§0“¬|d>%fôì÷ä9OQ_ŽV;’2LL/´,nžÐu3O E{gM-.×<úpX”íÍQ¦ŸÉ­?›)ï«ëÚm]ïÉo>:]“ÚÉG’òžJ}#«<ò8Wy@¯Ù¯œuÚŠ +ÝTÿµ¼rM°?a<mlî†ã>µ´g"S&»èmþ’­Zãº$¯ÙQk¢æWïÁ#Óyg0›:®Õ¹üi6«çn·ðÞ‹òÀ½VŽç5i3«d-µªHÿž‘xb$*üãeŽcÝm„ѼWñv Î (°däÀ^BÀ“?óþáóÇûž8êwO“¬b±Æ:ë²fÎDU$Ù/FN$Ä`1NߨÊÒª¡M£d™7¤jD’ï«1‰¶8ÇÓ.5qQ ·.aÂT5žkœ #°;5«@rËh +šSá7ñif ó^n±»Io•4#Ì£Ñnr{ïM%ƒÆH4½ñè’¦FÀý€”ˆÍÀž[¶ÝlÁoê†3Ý{ #δ åÍš®•ÑbÉ6T0³Ù2Õ ™"£­¤ö$Øl.q¶rµ>zÁà½-$£Œ©Fo]qþÊ[œLƒ®=o¤WbªrR5³3£¤ ÄKYYD b¸¼ ú ƒ„߆f ÊE&›=ºP&/ŠÑlç-˜0´ãp“Qv Öb¯ÈÄ#ÄÇBÞ}ï®Ãì¨ ÒÚtý0¨˜ÃYêÍŽtĆ?»›9 © ž•´_ckáhTÌ<.øéRÜhÛíí”T¬Ôo¤-ˆD_ VM +Ël]þ+#²7ôŠR 9}_=ªž †ä΋© +R6ôæÀê5rÍÛ T2[XT©€c!®¾Ô¬Ìwc¡*Ý‚Ùܘj[W'q3( +ªež0Û|d*pë5ÈJÞ M¼_Ò)GÑ®žRÚOä5˜F»„ y²W….é¶ôy¡Â=r5•P=.X[T®µÚû„¥{šû¦º™G¾$<“ =‡_Û3Å¢Ʋœ³¡D1<3 L-Ì‘O—˜¨·|‘“hÜ:1R‹š`I}Z;9¸2¦1¥nX ·©ï qìúÝ·qÓ\×ú>[Ûm ¥m -S’à[Ž®?Œ®¬ßƒ>0Çï#¨¶³W!1ÕnßÒ÷¶öð¢ª.¾Åþð7§êóŠTú°–%]DTÛ·übMUufefLÍ•'PìmæAÍ-Ι DBìfŸ Æ÷Ê¢¹N Õã¾c7…b´±¤}2ÄÔõIm*eþwo¦–jYƒZÆY¿5˳ñn¾3w¨Ê³U³WÈ rƒfÉ6íd•\¶3i¶ iß :Òô +ãl=Gµ ¶ëõkVå‹Ùêý² XC++_xÒ¦¤ÜiÍ1ºAZÇíQ­uo+ ¤V¶›É6@ú·ÃßDyºþ>[FA/?! „´B.ÓF±¢KìXÐ4Lõ +÷Px5`轜ðR ¤Ç! wøfu¤éÔwtbÍ(Xi]6䉲`.©¤ ‰AÚˆr©IŒ’¹¯Cl7;Ò|[wÝ­tî¨9l݇þ@¶©ž›3L^;ÛgƒHW£—B¥õ±Ò_a'7/-í÷‰šðÑà¯èV9Ò™øýæ<–­Äìe½yHs;Sæ®&±iƆöö¬¥‚>g· ##- Ð¥zÊx ¤‘BDÓˆ¬•¨4 ÍÛ”®è&X¹Ú¡¨|#æCß±æQ $UŽÀ‚[ § ën¥ªEYäD·>ó‰î\ÕÛ9¡ó–U¿sÑ^ƒôÑ<ÿÔŒföܿô¶ÕxAzG€vSQ $7y¤ÆnU× n+á'LR$ˆ=Í RRŠAÚɰ]6!=Ž"HôôÉ*ëÈ Ÿ—ÖÎkÌ}ÉÒH™*º®NP°jV›a¬ç!†°çÄûä¢Ë ¶ŒçËeA'—ŒÃ=INmlÇË$A”> ÆÉ³Z¥Ý–Gâ~væBÔ7jÓ^AÝÇf7:At[ì{;Ž_›Á< +Aæ*?ŒBX÷a±*óÒanH´·%ÊØNrÊ$ƒ.O•hQzŠãÉÅ2ÔÙ“µÙL +Ò[Ys r%ƒ…¡+M8æÜíkŽ©'\ŸQMäð2›B‘öéÅÀØ' q† †|ã ú®¤`xʦw$ÁÛ +Zgžã£æ=ž05dTØãI \=:R˜ÖJ +p4Xœ:ª™¯x–"ˆŸ‡U!)q$1OXÖ5‹(˜ /ÁÓ. Å)Wû˜xÊ„×cÒ*+Ñ;…… µ*­Ay‰„㫞¼ì11*ƒ­÷°Ú`¯â]f'ÅäÙ‰DÁZÖ ¤+Þä…Y¤4î¢orÂivŒH +1H‹0 ,Ö¦5‚„Àœ2yÖHß^Ù?ξ?hJ˶’ :'W¢ŽXôsOaB”Ä»qÌ¡‘Ó8ÇÊ:'@*hVk'ÆK™Fj‚ ÇÛû„‰ÎÓVf—G“®·Ä¡fäl;SÍ,%» RW,9rƒmçÕn©Î3vg&¦ ŸQ—¨+ –>Ô„ñÔäGMÀ°Q-æqöhtZ}²¨^UoÞÉ'k¡+®˜#0\Žò\³¢’ óæ;y2ÚErþÖ­, ,¦%”Ñ{Ws²"0ä>å(ÐîH`œŒú‡;Ã( +m-¤ó£¡º³zÍ$IP•Üãiç›` ™_+]4 Ê6SvD!uRwD &™ðŠýÌã[’øÏ׿¾ü˽üëŸû"Úq[!ùÕ^?¾hJ¹ˆÊß¡7£ë*¯{«oNSJTbßkØýÈotºùHx¦Jê–óÚEoF2noª´fªðäų{Íç O‘R…Z@l/%u2‰3KÑuŒ¾"{õSüøa½DÆ«ë¡%ý×ëlœå‚êI9+ÆçuƇ,³ÐÁ*"GïL…Èû[… ¾GEe»VÌÏuƇ¬§ +‰f®½[aà U%ÑÛ +\VX+æç9ãCÖ‡ +”ñá&ûÊ^¨Z÷óP¡çÛ +× +ûMX^ˆ¬Mç²v¯oöð«à…4òÝÒ{ÒƒæØ!}-˜à>ä–dÒ£Æ8lò*Q¹”ö ¢W)ÆÖ^H]K*d«³u¡o;/å0ÅîuÓ>¤~(ã«ÛÊ߇2^(Ð\´weÊ””†2gÝDç´©Cò¶¦Âºž%&UL½Á‚j*?¯¹i|H ”´õÿ Î9ÑÉ-ÑÑâ¯x¡¦!ðˆnq‰n~Šÿßà>ã’ó}—’Bšµd Z?¾0N5›ovVHÊÅsÓúüþÒðW¬`,vÈ>æ)IZLD:£nèý,ŸovHš…` Ÿoê…T";dó”$áýý×××Oÿø÷_?ÿüÓï¿þý·Wp¯_~ùËo`÷r£~e„’t%rÒ’Våäú&Ók-·ÓŒal~®±ñ>×L1AfvyÅ>§¶kr}ïÞÄü±!è_§!¶Ÿø¢†é¡þZª½N¹4ÛèHß[7ÂoyXg=Ƶn¡ë´©æ½“/ûð_h6ûÌ^ˆ‚žÊl4”é˹ֺÎiRÿØ|1oóÑ™FÿnµªÑnfºyÏŽ5öÖÛj5àDO«mtö!Õ¬vðe5úvõ˜·ÕÚÖ8[/«Ñ»®uÓ>¤þY³¦!ÏÅÙs••´ùlÛðBd‚öƾmâuq¯Ùà>çMžÙéÆ!5F_°á…4­½©QêR£ä©ÆX³Á}Λ¼Q8ÞjoÝÉáÙ*WgI=ð|·QïÞ:зյޚÒãYw¡sÚ›Ôe*ÃÒR¦2]ÔïÊ ôm[™l‡ä³n£sÚ›Ô?‰¸ô™°¶ßÉ'ã{èmxEcÿôö~yû޳³n¡ë´©ÏÐcËÉ+Î6¼B¯S°>”ié#ôκ…®Ó>¤þ¡—NƒzâlÁ ýôjÉ‘d·û9Å\ÀýHQ'0à­aÃx³òÂ×wð§ÌTUÏ Þ[4PI‘ÅOœâ™óº}S|óûOi~xŒï™‰wñ‚kk7y“FñIÇojÞò®~‡ï'ÚâÍÚú§¤ú¹èéEËQù +F¤ª u/‹×Áz•–¡xœý¥Â|(ÝÆ¾T +Q_.fyY£Á3"¿¾#ù«ŽÿCәУ¥6Ò?Ž£?W·ê¶™ÏêÒiÐ šýqeÐì½ïqlkÝzÄqŸþµÒ<|*Mc_*- Ť¸)®JŠ«6$MkímKȼ]-™¥ÍyV»‚¥E,‘tdÂö;,9 ˜ÌƬÚf` ×*=0ù»Î^5°>Š`1y•Îc†ŒFÓ «¸> ~ž˜0˜!‹[ŒÖ„£ÿ¬^ë…5w1d'Ã>³Éu˜Z1£C,¸Ö[ÈÇ×ÄdØx-Bw6L‡c$Mëæ…kˆ’"z¶0‹ŸípÅV:0o¤ÖÀú\:ZeÝõ5µQUŽ  ŒzeŨtáÀ0UYÏŽ&Åm ]1<†dX#00eLjÙï‹Ç–{À¸ŽXc©¾ºÛÅ–¶ÊÂÂU°1¥(!£Î`…š¨>âï‹u“;5»›P“ÀÀºEõ-(±{`uÄ+´X¡?T l 4k`}0À@ªÆž>·Á¨HLºxnë“à3fvejŠÁ¿)ÀPÓ!§ïºZ6{óXƒ9ä.l±xÞk¥[® ˇ?Œ‡!ëäµD^CžR·ÎÊn"Ázi ¢šªÝhŒ13tRý0E¿Q¨¡S8ñX\afÕ•XÇpUŒŠpz.£y0Q°s›ègŽ!!ŠqÙÉl€ÞmgpÂA‹å:ªU©ŒªÒå k›R²ŠÙ’K+£c¤ámÒ›…$ +¢oq>j¨‹‚$?޶ˆÎk ˜p£1' ¤ò %…fB¨ANɆIF +ú t°[¨Â̬”œñIÈ%ª`Ô}Ó¡‰HwÑgjÛj®ª]×Aä’>˜:y«m­½`¼¬cr`hè}*Ö¨x8"ÑãŽp¤V†N‰|2u•d FH‚J$ì8Þ6¢›‹‡ Ê›yÉù:—Ða “O®¿©™$R¤9úÐ,ˆ`×í`¸“h5Ä­º`´S€èqˆ¿©ìá9úsÃ$rÛÔ„‹Ë%kä>š;Ò·ùm¸¥JLÖå`Áð2c¢ë8Ñ``Ah¢rØT¢?89±ÅL¤yÔÁ!Ä-vÉJA'NŽãŽY÷ý#µ{01hr);/5@Ä©yiï °I%ËLIÉãX¦ï,•"d æeáiN2eH”šR*‘Z’y¤\M­kâΙ’HténL$ŠÒ&wµªB”fä~µòåÅé’hQ[¡ å…PžÞ&¤l/£YŸ]ÂÀåíiÍë0o˜”Z7ˆ)çí©q:©Íxy£Þ7ÈÑð¤m• ¯d gÛ Tïß‹ê».(ÖmWÝ®Q\’û~´“Þ—|‚ÞéÇØ:ç˜Ö˜G+s»)à>=æ08·Šîè:1„«0ÑYF‚ ¤bG\³ãík‚è7Õ­s6w©§:í—_Tz€åì’m ‚ì¹d[+×¾bð6Þ‚4›oýR9‡Äé𺗴™ 3 ,c“OÎmV‡±n âV¼„Ð+9ÈR™ES¨«U€¨6IAÖ§ªÒjÔÖ  ª‘¼=ƒ=´'¸ôêž_z¼Z -]Ò8xíP[ÌÚaž°‚XIúÜ®ÛXZQ5qI‹ð(Jo[Þƒ”«‚­­YC«`GQ'Hv + ¡ñ¥NDì8Ø÷ [(1Ö€f«Ê +®LƒTÚnäpötHï- +*¢ÁbX -tÖ¯ ²²¡!ú‰ÇtVlÉÜ‚àŒhCGxõ²RtÝúÛE‚K3shߊbÑë ›‚½,ïƒòFkÚ gF0­ ¨o­Pc ›CA]¬RÄ}˜d·øÅûL-e€˜6%oŽYØì8¸‘¬Ìƒ¢´ ž”2ßZŸ¦r!Û29uä ˜6Bl-™nC×Î3Ò­œ9æ3Íræ @L§#‚§ôG +RAaŸ)°É™‚•ý<ž‚‘G +’®*g +DñanBC&VáO +Q>RpJþMA :åO +%›¥à” ý›‚SŠço +›ë»_ð0 +~¤àâ¾06)o›&äÛ-?Y4'É—•Y¤1)¶ˆo>ñ|¾pŸùåàÔdÄËے3Yd+­¾¾#·#'C4yk1Å—‚Ä  ®z~¼.#MpŸ×Xû¤‰±ì=ÅÃ$Áµ =ÊKÌ‚ÂìC“>sP…œL´ù ‚í.uï<:Z¬û7y³÷óÞ’_¦ÇV)¼qÿÜß0_MÉŸÉÊ º¾ê[´ࢽ½2ÝÕgx©µº‡”ÏÌ}»ôÙ–Ö{SFô¶}^4¹¤³Ñ,d¢·ÓÍɦONXá+Û¿_¶†jBâ2„MVfØëd‘ƒ‚Òw¿!ÙZú»8i¢™»ºjÑÎ×™ÿƒS +Ìáºr8êe’ù—aW,àí;‚òsb†³¹Œ¨í`uX²- ¸SzI뀴ˆ<=2Ä¥[¡?%,õ­$aºC¢Ÿ'¯¸®8%Ý O©¨Ç1ÑXyŸúŽT(Œ„˜?ü:õ[9[“c–·rh¢wòšœ(9ø6oÓ·áA¿uœÈO)kðŽ^e´d@Ÿ±2_|å´4„‚£ø>sñöA6ûÑQ %W– s>f‘ ÛßÂáwg´g'Q‘¾õ¨Ç}Ƽ}0NI«ííÍx:~ Ñæ6ŸÐ‚ž ߥ“ÕíEñàp×fúûÖ(óB9K0&ÅûñªÕÓ¥Ó¨ÞBŽèIÝ«½ ÚXñë,GO!RÏ êt{ Ì=Ùd²^¦7f¾C¾ýà(#V.&ÚKõy<¼mŽ–+ù+ž±* .dEj”•?¦ywÁ€•<¤í®¶¬ž1Ÿg,šÝåj[ MyíèC£$Ôy¼1C,½ ›Cîø,ç`>Ÿh‚ë$œÓ”-j—Ÿ]ÑXmä7½÷y^1Ũ8ïÔ³öü¢U:¯÷ôÝž¤ TtÿSìA“-ó9±[Þü”³¹Ö?HNÄìY;77^×Ç qëiC uÖcž­ý6JpM>b¼ë>7 eñ.9™>LÛx‡Ç®®˜ºwÀŠ5‰@ÏçmÎé4䵿͇F‰|‰ý| "]ݨÎx‹ÝÛ…ežé³2âçhΚŽyE »Í·h×c7·ÐJM%æ¹ujÂAËu5Šd +i²Ü•ÄJÊø^²)Ч{mõf6·Oó +Bíß§”ñ'Cew¢‹« ʪ_a¤ª˜ /@B0iEÂ(´#¢ÞÞð4·0ªëëéå¿Ê,@‹úÄX¡'}a©¡Q{ß'WwxêýmÞCŽ2CσCöG1°ú­D–Eçãã2[HÜE¡çÉÚúJÅ8£Y4–dúÌQ}j›rTÃÞ[œ«[›ìO>%#³FÇGåç£K(ñ¬œdÔÔrÝJ®¿…Ì•ø5}¿e“|£Ç`²YXíN¯G:°Æ˜[ï· ³D`[ûŽÎm™ëSÕCöšFA¯Å8¶¯|–Í;ͳèj¡Ýº«ŒËN³šƒFgqÑÍUN³›Ÿ¨Ïþ6ÏÕ᥹òý؇Ù7T2»ØÉi#ü¨»>_ìWd(”X‡¹|_œ¡ƒùÄx脎¥a½#®j…®;ë#’³ß.’ɂݾã̲hNÊåA™ Aòï;MƽPŒªˆbêoŸ¾ã½I÷ФߡϷy»J ÍÞ¬j .ÁÓèÅhøm¼[ÆI\Á[†|bOFèÿZ¿l™¡&7EùVÎ6c%õôÒEoêpÌo%÷ˆ•sÖ/«s%7ʕȈu½O}œá*Q^6„¤Þá»l¼¤b#;¯Rè.ëú»vÞÏ%’œÍ+×)¾Sîæ™p÷ÒÁYˆÍ²ý Ævw(mraG ,7—?!=z{ññ“´¡îq¿£oÎûsc¢µÛq±˜EÀhtÖ`-¦œX«û.q!A„Ñ ¸Ãd N© ÁNóM¸åh®ó¾©Ž(6zn¸¼Û0ìlhOÍm˜Ëw›eë­œw—}Jîr¡™o!÷æäLò"{r¡¾é°2’Bò:V¶u!È2‡¨·Rê]Œ¶ü ¬9Do<8: +W,±„³T‡˜ºþÁå¨]±"Dy¾%=]Œ$D ;Dì|PBZðDãG°Vû|‡\{ûÉö›—óca÷ó0<öÌHn¬¢à¶½ßCtáSäß2/‘6±E]¾…TÙ¿Såyo õŠø:AæÒž?"î+Ù/œåMá¦ýÜFíb†•Ë IƲ7óz¬Þ9¤cún uºÕ•|ÿŽ^Yqá™U'Òô(7¥‘ÁGÚ騚ÏÍßIiÈã"ùæïT§£åéåað¶ê~W‡ø{uľù³ˆ‡…nÜò +Fc?²;LÖÆˆN%0p¡çê…(š€fW¹mù©CÞ~rF‰ŸJG:(#Ú.DW±#k´nKÿê€ÈÆèƒ@Œ ¿:²`{åJÓ=`´ÖÐxVÿ½8´Ó†žRÜå W¤µUT5‚îwÒ≗ ¶Î÷6Ôܖϼm Æü.Îv¿3 xúv†FˆG³žÞrm¡,€¦ãêó„‚1r‹îâ ¡€S +RæIêeŠª¿ÙÆÄ8I¹ N +é\¸¦ÒØè$ ù/M$«'‡±àÐ `lw?É—ÌÓUß¾ˆ½ –ŽüíÔ¡¬©jûH3ØÝGÎVÚØZ+ýB‡’Pí¦!#ܼX†Þ.˜I°ˆþ—¿VU¥±MÜȱE«†Õ¹C„)@ÒùûF’l’\@ëA.sÔ"xl]&8Z‹‚6Ïßèßlu¦†|PÎr扖D•º /:ò䓞¨AÁ„ŠQjžOÛ‡TÛW`é š\ŠÀª ÕDê?ÿÃf~³MÊ\°XÏO*Z ¥˜Ž|ÈížÀTí3t§ÃjÌСdl¢ÙªCÒÀÃI*Rw:džµ )Ržˆ-¹Y$D+9ó".q|]©×¸(ÚͧGS7nv!©3ÒGã”jÓ”—Øn·éÀšù€ÄêÔ[¤@ÔÓ£ãÍü1Þ‹`U„—-SñÀHÊÈJå ¿Yÿ¼Ôo'Qß/Jš/Öså9ë8$¦7üŠÒ¥õú…8LjÏt²kgŽ6íæIº“m=ŒzjãBUû*IŒ„؇.H#/¹9“†¢â9W24uÃ1¾O*®‚:ÙL¸äoé¥ç:1’±‰¡NÇÛ¯i‚r¹²É" ŽvGñqO‹C2‰#/ ¼‚ÃÂÔΟ#fP=̃.iaUˆàÛ2ì¶ •Ä +ì÷jÿ‘]W’%9¼-Á¾àDŽUb/£ÿuÍA"+«où,ã…µ‚dú8zU+vìsn£æÈ‰*ìs,ŒÛuåže RpzB%>G°© uŒ×²ÊVú WÊá¤Z®„´³Ä«`q».0SCp;b©tIš²z¿!EÏ”Ðl·ÜœÓ$ˆe«_Ò½(6ÁèVg^‡ h£4¼õý) µ©åeº€€ÔÅ‘ä +ÎRvJÍ´-FwjÒ´­äœ® Nµflº‚¶ú›® àô#‘=ý¹‚€¯›²r±$3Ãд¹«;ö†)x¨cOV&!àj™ÌRB@"®?±¹„Š4ÝRý¡¡B¼—öV7 -—S^J0 7i3·äâðËË(¦! \CÓ5´ä¹ëÈ(v -õçeC×Ð:üøŒt wˈM ç^'Gº†€c”‘ér†r®! û«5®!`9õ¬IhmµTãKAK¶l„.!Á2³†¸X–ØoMv>òèkNq{ô¡ôä¿ Ú=ýž8žªÂí¶&Wss5ÿ@k×o{!;Ëï_Pë:¤v'ÜêÒ Žœ“87XM–ñàþ9æõlÊ Ûc„Œ³½z0Šaw†y© ·:^ƒåæ×xúå#yç‘ëô‘Xž–°—Ø:áüFb¹Œñäo ar Y Ñ 1 ,·“ðð"··~7Í¡Á5nÞF_~žBg[ÇÔ4Ÿ²»33hÍÔ0ûXƃJC‚¥Î¼Ž.ýþMÆn½mvSÁµMjÌRÞvš‚Y°c˜Ü>g´>lA VŸ¯¯ä…÷I1²•q¤ý1|¦±1ËÊ ¶Ï¡éO¨ÖœuÚ„hì½o)¸ïçzŠÍH­w=[éZpüˆin×FªSž{aÞí8íÞ“«“ý¶Ý:¹õ½FeKä©ÙWޥ̰A¥ë|ï6†TÔw.DæÀRÔ•w™4ººv²O›ïm¯k‚ìCЏß#‹&!sªÜÞ'³X´Âc´ï}â­Ê8ûûDx«öÄçGïWÞ¿®¯KêòVå)Ò¯ˆcùèŒâÛùó˜j´¬7?Lj’{ÜÌÏkCó‚´¹±wU=BîOW ór–Ï2M!l5mÏÜ:>â8 ÿ|ÎwGlÉ¿ÞÊ+ÉÊÙ^ôï~«»7µJŸËpÒÔŸ$«îŸè¤w·Dèx1Âo¬;ÞÈÝÝ9–óy±ÕŽOI¿SþÊLUù<#Òu;ØÚÉ÷6|›Ê˜yé½JSfÞ"¯+^®êµÙ¼ñ”†žãóÕs¶fõ¯7mGÂqÂvîó ¡}7‰gÔ<9ñÞÝû[rq\q,Nzð”½Ι;b#ÍwÄëäœdŽ0¸é®+é.af@,·?$Ü’u¿B]íÁÐcs—w™;¡K‚«ä·¸Î;<*»ÛAÒ…û¯Õk~ÜúèÕMYTœÏZ- Ø|_—»úv9îÈ%@Þ±¹p‡{Ì*Ôªµé6¢ª—;ñy-¿ÀbgªæÜÔMƒëæÁq!ø®íp„xÔ“¸×=;×A™·ú”Û%sñÐ3FÀÈ™¬mÒ£»¸ •žŒÍ°_b¼£OyVÔüª·=á\wÉuèü-άùu©ã„‘.‘²Šldq‰ã”w@Bõx‚ر6 é:kaQ¤ÝC­&Ä6‡¤hÛRsÚwÓWæZ©¿ÂòA=i‰ž±t¢L=£&‘ä:®KòþïŸÿþCu"Í(—QÚˆqº?ÿBU²‚¨+CìöžÅkÿú¦z¼ª.ç3C>s·­AO}ï>ÏiÛù~|ÇÝ9íï)‰%(ÂÉàÅÑN§sݤmÕh [/-%rÑIîÉð_ô‹>s%%ß Ÿa̯«½»Ÿ ‹éZyéòhã2“ö1·Ózú£8§ëóbM£Hwí]C©Ö¯vv„…ÖRÿBD/é¤?Œ;ÇÔœ@- Ç6Ñk+”(^3b¬xÉ„Ò;üޱÎy©èë/JᄽtGeµá3à½CƒR¿ã-©¾îŠºb¾†$ÈLAù­®Ïƒ¬Ô^ZYñR×-´~Y·§Ê;oÛŸz0…™HÛFÉd—A¶n ªv(ƒ,Ü+tÕÓÈC7©JͯœÕÕ„I¸N8a£Ö»­ÈØ‚”wÍà%1$£Å “†ZÒUoäM4ã‘£nëÖØÃè÷½d=ß/ý¤×Hk­úð=4¼NRj%ém§l¯Ã¢4o>-¢çbÜî:F‹NˆÖ=’ÔðT¹[j‘‰Bù>œí–ºI–øšœ6±u¥º•‹‘RªåMó`8;nS™Îµ†l­ØZµæ¤´væAW~ßq<Õ(æý]b“Û6Jª­9¶¢Dv’‹Q‹ÓCï˜Ï{ÈCÝ(í&ÝádÕ ±ˆ\^‰VDqGÛæÓÊÑ%•eðiI”;§ÅînË^jÆÔÓË„h—‰3:FNËɦï«ô6ßÐ2-> ­”¤…"‹•åfF”ê"Š3¼íæÉÌÁÄ<§JˆÏt…û%T§ýMK† ï`°YbbM󸘞±ŒÒ_Þ·[òÜtмû£8§«?ùÃ3(¹ôm{mçÿ\—Ùu,9 CS™$jÏ?±¹\«ýþ|`5Kâ€C¾³-¾Ö½Ç 4ÒUc9Š@ùë·='†×Ð5<_dÞ'ÒPµù†Î>êe8•ˆ‹c¨,,iþ²óó°õ¶l‡;±„{×5#íºþÕϲԫ ¤ÉŽñûrk^ÇPÖÝêÞÅo«î¤¸u¶ÛûŽŽ©]?ÅÁ+G'°Š¬LXv³’Ω„ 6Y¹òkKÜg6Œªîe9 +Œü»Z÷; @¥t«êgç/ˆ¾x—ç(kI!}‰ºePx%™‘òç¼us"@ÎuVPbê= r-I¾Š"W²Ü )³ÑL×PX§8›!Ñú€Âqçãáv…±oòÕF؇¡¨YgˆûÅ^Q&D¬)=òö?D ºæ¥n9@ydÉÑêºl(ÚQ¿|k‡ÚPìt‰ÁxS¸cIFϰ̉ÒMW¿ ~<Ò;ú>†Îw+eÜV#¼…VM´‚Šòò–3Iˆ£mV›L­Þ ÏuQÇfQQ–ÖÝy.G÷jëkHÕE×8Õèª×Pôò‡Ü®e ‰ Ý0'÷@e¥¹ç ÿ=R/…RJq“ææ²¼mGe½4X×ÜÐbGЮzc¨f)Q<†g÷ŒK³ˆGè8ÕŒ{”ü Ü\xF‹ó”ÇÓ5PŠšÏ=tìp”Ì:oBI¦*ñ5„åC‡I¸¢£_¨zYCç©”q±å Ï} ʽžñ†»íj ‚e¢êixïå(3·¾°ê×]£UÜ1m*§n¨ò¡·ÇÙ~Î÷´amíKY°ÈD§X}*e§ûÙ»OûÒ»–ßì®ÞF•b¾@ÇÚU4½ŽÐc] gG1µÕ"ín¿òUúJßþ´ÃáUMÆæé(„óª!ßñD"j­WóÎgçmõ5>_Ÿ_`oñê r€…ïnCá ’‰áËè­ìÍ<>)¸×¾gÎ*jîØŠn‚§é¹!~¡ƒ¤g‡*çÍ„ôÜO“ÞS§¢èÆÆ&i⯎£Œ_².f¬{€‹(íh²º¡ˆÞ̈Àò+°•J²¹¶® §;J§`Ïö d9ùÐaYÄé>)èLÇÁ÷©T3VÀçö[ëÞEýUÇçBêu×;m¨»6ÕK"–iîΩs|B¶¡XÐQk )ð³CíO¥knGû¬‰MV-KW“Ù~˜\¬¿0]kͯb׈#ÔËñ§•±Ùª[Æ—ù eºÕ3˜?«Yªþ‚§¡°k94¡;®¡8`ùü‘¿B«³WWCÍBãâãöló3”4kÓ«úˆfÊT(›¡zmE±¿9|Z5€±;y–zþ5†èåðÑAêòåÂþâCé(ŠnÄPZèhÒ­œî`ÞÏМy´ÅvFXîC@ù–vž}íŒEæ súXî•Sº>j Ò›r›ÀÜgTB—4å‹•ü¬¨¬õ—[=lІ.5=÷i}A+X~M­·Ç¥”³n»Þ œxÃ|ooÍé]È”³÷Ú# W–‡,eµò (­Ÿš%‘`í³%ÃE1/ÏbØ{¨[kž]Ý>†p°ÌT‡Œ¹]dà É‹évçr4gE% ⊠íìÜ&ûºARÕ¹™òQ³‘(‰îý¯zª>)´«õ «Ny…T·/ÀvÞ=é„@o[!Ê0@Nêxc„¬¿iÄŽCM;LÄ;Œ Ã1"7 ¢ZìÞ${ Ÿî†·Î²ßù×è ]qѹ027§RQê^j~èŽì’åµ +Üñ`ì`¡¢7RƘ…΀jo†õ[M +ígÿc5Â{áI{zEÏs¯‹Ò­î«IÝݶ°Åè«‹!páTï¾FsÇï“/cý¥±~ßÅh‡0ìc¾BY+"Âjßu—æþ§mäYÚ¡zäå.Bάå8/¬¹4­_vYì'}Mùú1V–¼*„*¯ûõoÃeTkªò¨Ç·V~¿aŠCVFrîÓ+:Ï7¾XÖØ XËV¢l5±Míw+ÂT3”~¾ÉÄc]q”¶YÉ+šƒÿlÏ|7G˜¾|þªI“)¾êN¤q'ßn¬ÞíH÷TO=|Ó=µÈèÐK̶%"i”ÔJsÔƒºq…aÄQÒÕ“õálsûGÇ0ÁõŽñ0^-H~ÇËË2õ=y[LîrôÝW +³®/—÷N‘üX3ßvµ) Sn5pKîA wo?JJaPL»,žÊþ©éb[×Ó®íùÜûº™ý§=•YÄNZ°+mî,cSëh([”ø>?ËîóG}ÐtFOÛC°­jÎr«½(ê Z O1–ÙìÏÁyðgÙË$éºN. Fÿ†>97ŒB÷³»Ô4\Ë¢}ß6µ¡ŽÊ™9Mì¶Óo»gÛy–Ö²³’«èfñûb6K¡Ta¼S*ìyX-)Ò™~]5èRèö£g|ÍÚ¹ã(O¨£[ݦ¡{—?ä¤r¢¸¨Špô=ŠB̳΢wO^nT<î…´êº[…ØÐ5¥Îî³=é¿Ê*ŠÞWÌŠ]—oµºK‚ß^;w¿®*T…备}‹½°P]« E«êiX¯¿)!`Ìò +ïíŠÛšµ“P哯j¯‚pógž—n!ŠŽ+eW¶MŸ¢ÈKõãBæ:–_cýax÷—%[ ÍćêY<šðë(ùj/PäW ©¢Ücžp.±6>÷ÖQ̈x!‰=Pæ)ô61A2³XYNûŠÒKn,Ò•qù°í +—MlŸ¼®fÜ Ë`k˜‰’Ôi(Yžu՜͑a™ðr»¾Æ2çNŒþußçÞQ¿°3‚cÅ„zEÓuÏ|_[-ÏNFÒý(æ=õ¼ÒŽ’5v“9ß­”õ³Â¥Ž +¬UÛoLC›–ñÐGGYIJoîhÓí74Z½ïöZQLìÎÞǯ.·Ô{µõõcdSmUÇ ~ò£¶ë;ÌÀ¨ûQ>ü?×e–$G Ñ+Im÷¿˜b©8b"MS‚$sŒÞ½‚a}®B +mékÊ€BŒé5dãšn“8¬5‚ÎÛ"C“`6P}šéù¥Ö+/~Ã[­Uye„µÂÌûhaïúl–Û»~òºûÎØ6…Ò®nx ®¨—¡ù5˜þCÃY˜Õ³ #Lªî*ÙÞ-lcKo"Ï^E‚ÞµàÕHqždzŸݽÍ/íÐ9Z¥Ýúªk>iʇ>Ò5òû®64¾ÖZ•l‰àX“˧§£k·¯¼sFìì­Þò©é‡ŽYÏ.ó=% äxë׌´m­Š¥[<-»KªVØzv_]†RÐJËü,´Ö«wõD,ô˜cs¯ÍŸX`>½4¦ +r|YxqZ£¨ŒEŸ-ÕÑJÛÀ@oÐO´4'uñª^…~³oغ=m3žLZàUí¾ƒÞoG@=û¡ w"ælð;kGô·@©gr.¬ß=-JoÔæPy=:˜©¥™@®qŒ¡P§$—ó»nÅ^¯¶õ0‹ˆóüÐÝŸÏS +ۯ넠µ mÍ#©ÛªØ)¦©{§Çû«3 ªçøü1rW•ñ +ö~ ÏßÍ^Çèb&?(oýR h·66tšæ©´¾æ(hÓïcæµµmÕ +½.‡5ñéy3ô¤³+ Ÿ§~AÏcmÉ"tß¾´¤ì£´Ð”:g#Ð3+Œ±¨›±ˆõ m<ÄÎXdû2A ÜüØÚº|Ÿñx’ÃèÄúEïV^Š ¾¤`¡•Ë&~Ú„‘3}íܽäjo6euù»=‡Q|.ÚÙz¦5&޾Z%Ðæ´ ºS2À¹ìÇÈIEÇŽˆ½+ + Š<Ý¡!î® sE,ãÅe»…`Ùb @¨ IÅ׎ÆRmU^Hñ„<Ê¡4t·RJ eüº——2ÏYèjŽLh艚1g±g@{›¡üf“{è…O%Z‚{SQ¦æ1t߯¬èÕp°úY…¶òuY®¼ÚÔˆEåWÎí®øÑ}ò•¬ßÖ·N¦ÛzÖE¸ÞBm:jάž-48 ô{ 3>F;Tèèq £ÔzKNpÂ^Øûe—yÍÍŠL•¯#››Vg½„ ”@ËâØ<‹”ª÷š2>“1ü +7†*Iº0K÷›y9‚âÛiáÜpœ‰"¡Ž£îcÜ%ªHCŸ¤âÁ\û®‰½ –íþÜ^þÜ„{Ïßm‚}‘ð´4ëJÆcû݇2E=@Dõp£»ËÇU»ZÏD$"Gßì ŸìÏDé6y(ÕêIûÏSû›Ží¿ç]nòûÂ1êCÙ¾; ¼FÚ!s2ÖÁáº*’¨îGƒÇ¸¤ÀÓ»‡òMt {(.§V ýgš ôâQ=S^{]kÛž×½£ýÐñ½8U~ÏpmWmT$Ñz(.Hjû_è +$ÞïŠpô®sS0zƒ ¢Õ›S¼é h«U°ÔHEL@ÔŠºý‰6@Ý´ÜÛv¶¡s§Û½&à d7çÔðÕܥfA^ íZ|ÛLjPÙš£Ä+5Ê´Vè\±0C2½,~„µ>eµ§D‚£Rißþx(œ–ŒÒÍ >ùXÄŠÜ2Ybèøæ™§]r)ÔÔæCià]è1ca(*ª2ôG¬ ³Vl·¿Ú?5 +W£ÓÖ­¼×À‚’ +mÛŸŒE´¿s©qš¡ç­"‡¦Ÿ‹/µ*î5 ûP‘]Å=¬rGÇ­V€Žç½X½Yè3x†"£v=O?‘[±X¸8ý«òÒ˜†¢0ñ.u^1ú0bþ¤óœ:ŽTÚ+8ÊrÉväÞqAW« g?ƒâ\rÌ}=†žåŽ5&äõXôìJÅ4ÇzíÔMh‰ç£ozŒ`ºŸ×´Ú°Eñ?ºáKÏË"8bÕ@ãùKtSAwi¬yMnBò÷†Ê3¯†²ç3¯‰¶Åñ›u{öýÚÜê(3C¡Š¡ÒZ¡{dÍ1‹š(ƒ›O)NA†ÎÕKóçi±3;Ðïk( =úñUiÑ"‘vô„ÉìzòºÐ}°ÅAûÖi1lÖºo§3]Cë`íD·BѸJÊÚ"¶» xàU¿Âæ´ÊjZ@TVlŸ#Pöâ-ôƘlí£nóø m‰¾{“ íýs1ŒZÐà•ŠÔ"â½n€®šÁ˜R½Ø—)EçÜýÕv[¶‡•ª-\T.õ8Æ6¶+_×íàÑùó8ø¸è|ËÌ‚e7ÿ¬ëüù¶·­£qª?V³Ùx›K¤bã ý ðwM.¶ûÐî.:Í(µÛ}Q_ÈoJÉ£T¬Ý@Ù¾Oð“{ î Ûè;]õT¨ö%ž@(cOu?]4my„‰¤š® d:í›§¢›\WlvWæ]èW&üjçqy´ã(Z$fRM*>Étìý4c‘\:þŠ£;¦K.äЪ¯! ÷CYµ#Ï»†—l›\X™aÞÙ]ÊuähÞbjë.ÅZ›-c=ÝŸDäM2-Âõ….kHÉÀÕ¤ÞS%C³‡H#6°½Z»Ïá-ÛX-gâ^ÛýOûjµ)ÿ’ý˜xØ,ºMì:ÙYŽ.öÜ×=ÜÊûkt˜ÎÕ·ÉÉÜNw¥ŽÎÙ‹ÂÚ#ІM[a*¤P$¤ü5 †Ê +S!çšn3wc“ìÈF»·E†&An °k˜+”Aæ=[ÃAt”Læ…)ÃÈ¡´f‚s„_B¹h…2¢âÈòºl€0“ü«"Àªáï4Q0Ce„ñäÏBÃY˜ÕSÇí#N†Þ¨’ÁË‘6­Iæ*].R«èk¥UÆwµvßÕÔ¼O›_Ú»åê•ÍÒe9~èã]CûÞßÕ†Æ×ZûJFãx^hjV,.ÁÏpÖn_yçëÅaè˜õìkú·ìXç‚ø#k[«Bi†ýP¶—T¡'üf›àY=6G ðÍ­~¼Û¿ÆNk½zWOÄêiùµ»ÚñÚ -kU +žÀ„AÎ/`zi  Ú8¸å—ÐÑJݘБ‡|WŽ*Dé úͶaÖióûPîU(ÖòõͰÛÜT0¥íeÿU1Ê`z,Œ8“3a…í(Ó—¤‹ëÚ +ÉÕ!GĽhþ~ ãC[ë’\¯¿Öµ¥øj¾³@„åx ^)h«clÀû­¨\WY¶d!Û’  îcÆ[¯?+Çâ*CVPvMºÆ3ÌaYÁÈaÞ$Ð.ÆfgYGAØ»EŽÏ n†5Ú< “g7Œëè,6<Ë M^¯ 5¹Ã\?4ŽÕ¨o<*_½n4G¬mMîç9I:oµ§ ð¿(ÖÆ;cGó,NÊt—pdl9µŽ=ÛØÚ2ì/æˆO¢ëç,hdz°à+¶?§‡lùæiÊFͳf£Q…RS¢ð¾=z¨Z‚vkÅËä³ï¨À•º.Y¡¸o>˜Â3çÇ 5Ñ(« ‰NÊWߨ_’w˜u-B®WÞxñµ³û,|2sݬVZrßÞ†»ªÙs'|N¥AXµiÉ”­ýïîÝì"ÐÌîR¡ÀbtP©òx©X„¤7ò`/ýÊŽ|¼BÁqœÍàâ˅‰y)ý.ÈsGPá“Ò¿%*Q•èR,?Rè–'Ù»àüì~ ¨É©îç—YŠÿ×LЭíÕQèþÍ¡Úrú¾Xw `3¹£ìjelÁpÞ›ÿ‡R=iÐ6\IvwT\Â.´È9PVýK-Ž*œX ê†gâ¦Æ¡á±~Í× º¥”¹íÎÜl7m—uÉ ”פœ4¥ó‰Å¡“¾‰ò`¹lŸ§ußIÙǸÂó(#Àl¼>‹¢$b$äôY$:©îºîæ\ð +eT´ðŒ/­ö…¡jÕ¯MÊÞ°+3ƒv¾ÍLRS­Þ5Ú BÇõÈwÌwûÿà¨Ø1íšL¿ŠR³þ"Ê-;53²WÔÁÓ; Ы¹YìÍ¢çiTæ€ý5m›£Ø!E¶¨I¾"œþÁ[´A;'hø@¾ïkz7Ì +ñ=Ö¨f#7Æ|æl.Ï…;oô†í»øÖnìÀp€Æµ9Š]$¢D#0H}\ÖµÊlÐDZp=oZê炉Âè?÷r£Faåž÷¿žâ•(¾Ê£½'å}õ+èI·þcò¼;ع{JŽMÂ[‘Ý@¬Ñ%Þsìþaôé© ”{Ö­L.ØŽÂ Y†Ø3ëèãÝcç=Ãn56Ï0XäÀQ’a[8²›Œô0!RgÁCsöù-:—¨ò¾fŸ>Á +äuí +wXä°¯NkFá½$¯ §9¼ŠêæÑ³¿†`[Å樸٠Ôlì!ÃÍr¢0QÁE'Ðö±Qª÷‘Êáâ2s]qT…ç¬-ô´ývÔ‹è}C¬@͸øÖš›m·z‚ß&nì6BŸ&,Œ…(é ¾T +5OƒUØ«£`éº.ØÐ¦ÉîŠv‚ÃD¨±ÉsÛiôyg7ݾ¬vçÅô9 +u™~Ä$‰Úš÷vG“ÛÒ¡»—_ï™ °·f\4Ãé³F+`Á&\ M¡˜¸¿­þ GÁ‘2Væ8/vÏ=Ÿw6ñ§aO‚êô¬ºçnöŒE•í²tÛkººvêÿ°f§)èúÞèéò?÷ô@ßÒ³—§”÷9—4_IùG "vOT0jy óÎ09J–GaîîÇÙæöÝQl.4èu9ew¾esv1ɸh˜ +v~þE„ÍB"$º]¤~¾–h˜3GWŠT¢êýóŠ@u¿LfK_£Ø2òÅ dë¯aN¨ÉQ´5¯‹½BB£\/ÆÈ'QÅŸ¢EÙ]åÿÍ÷ ßlÖÙ…‚ÞoF…ªPŸÅæ*9&~“S¨¥Íö¾c3*ŒIÙú¨ôkt¿$sôó~ÁŽŽr79*¢}XΰÞã‰ÂŒï K`&*ô.;ügúE‡YÍ/üémô,ßbª¥Ãâez‹Xç(FÑŠ,ÖƸ>¶²IÅ_=~Ü(ñ-»[\>HZ“£ŸU$öí°v¯Úupm“`µ~ ç4íc ï [´H{Ý=h¸GmK_Ììj¡0»s å»ù;»ZdÖ°Ä›ÍI¸é´£6GQé4½û úî)I¤=/?,6Y€9Ê—Ÿ‡Av‰2OmÖXˆcïLm0´%õL4u¼«,„œÉ­o e ¶ðt¸¢|OqLFàü¯ëN¥VŠƒÑ«NÐ{´ÖÝü¹#Ÿl»»œÔ¾Ú#Iæ +¦‹yõÙ½®& +Ù·P´;å`Ÿö Âç¤Ç|X­zúò›(2¶^Tv’¨Ã œ V¿9úŽq¿[S#o p‹Åad±ø. ËE3Ý@Á:{¨‘h¥ýV4Ó±¬›èÆÄ47b’Ë•co‘´ƒˆl}q™}l!ö…í¹ïË”wºÖ`"(·r7ß(VPÉe邆Tç"…­³+A¹2¡!Ù:½ð‘'©wWŸE;q¢0ZÒDŠùsvJ·U +VáD— —»ÖçŽ +“BÍÏü|=dÞMææ#÷F´¯!©öQÝgÝ•#Ïú&ô‘[”«+6Ì>ª{ý,¹¹…OLt~'Ö>u#=lê«u–Y‡råp]–È|æÞÕQX—f ‘pû@a”iâÆˆ + >qyçÔŒ ’Z@ŽÌQ¸ÈB7Ý~.„Þò +ž¸AÑ®yvA8hÐþÌÓ‡žPpG ûÀ {W¼]urtÏmzõáHHè£=ʵçe°€@|Ý\úE}'QÝk‰™ +iüÐKu-ÿ½,\ª£pÏšg ½=æ–@‘Ц X1Ê£0Ì#Hp¬¾%3éØ-+,¨“ǧr˜_‚ÏÝ£R¾0¾Í~Ðpžåñ@G¡¿O£–;W H›ÍY wEp¹Jzçû3 &©ƒµ""Àå2´¢Q”ÔEûlžÐɳV2CaR¢m2†…Üb®çè/X.PúW±4 Dãê1QF7{Oˆº Š…êNÏp–bŸ‘d&æt9¹à¹v…ÿåÏñ?¶Ë+ ’‡¡W™lÈQæþÛš¬žÞý«@))ŠO¸Ðþ8k×£À¶ùxÎ×$«1]…Ưòòç8zP…B®RÚB¿óåY Û#(­õâ¶½zîK¿¥ñ„âðM”Ê¿qcc—ÝÙNOô‹-ÊÏÑ•œ9Ub{§KÂjˆ¼™yÛ™u=(%äž½$šãÔ‹!Úl?º¦ »d +…‚Vœ½m¾B›å ωGл[çÑ´=ÑCD,´2?ƒ÷T†™©Žèë/r9Öéu–®Qzš¿#Q´ØÎzB¹”…ÞªÀë&J/kÏT™®™Û+Ɖp ÞÏò×iÚ8Tþãeº«íì”ËèHT+Kœe +&ŃÒb':ð#ó® ZœEfÈ@×^£ç^™5º9Ià®[fpÚÑDV-t˜ýE. $!(Ç$z>»ïÄYm`ßml[a—\®ïì{+‰põÛëiÖZðëh»\`Dû#¨ v‡rÆñüL®-åÇ3¡ª0°]£g&lô°€àHdžôzò6{Ä©r‚oLv™*‘ÁöSÂU óݘhLýÏ*A1á¡]¥Ë(¾1ÇWºÚ.ã2ÉöB7½ÿ{|‘|MZc™…dŽå¬n_S¶Ä zú×Öm4Ë©|ç¬VmsΜëog•)NÃg7RqÌŒ èÖ0qR5 +ï®2k}g9·‰l?»tJ*™[m)”Õ6ÅÔúÐÞ2ºDÙìw>9˜L(ôfÈè³Vt/K ôÑ/kËRÛÿ‘ˆ5ë(Õð=Wøl}©ì/•ùhJ_Y®'ÝÖø•c-"c÷û+Ýôà·à€Ò©ß2Ôª¥ …›wYuÔ93ïbwùPøw‡UXÿ•UÕmX5—€Ù¨-¯¢Twè»åŠw¾†l#Ô3tìö#òîJ{+‹ã£¥k‰ŽÑ²`°s_ ,4e3Ž<°R›ý9/ZË=.m±I€íS·M»ÞOGýÖŠØÌ4GQp¯Î²Üú¢{Mÿ8›ÍÑC ʆöCçʳp\±³Æc€¯·ï(ãy8ʨèØÓSÎ %$;Ptô-”W†´Í7 ÞM³ìu«åK»ç0ô¨'ðµ÷¡{Ä U±í ¾ø•Úʺ¥‡ª¾Šn½xîž}膴ÀPgéXo~PJ©ráδ`%•A5•üJtî±!‘¯<ƒ`NÞÆ0únk! „–ølLí¹Ò‡½S°€n ú<›£”(t+th`¥9ëA)ïDÍnÙ%#=£Ow¡GŒ8Ìs %±#c¶{ùég†7"¿|¸£BÖ«DÛÍÂAãß2ßž™y·Va ½vVjï$J ep È·ÿBµÌàìMãBs”¾qšŸR.Ìÿ›¦‘ 4íŽ)Å>ô^üNPp +ÌšàŠyÿ/F¿Gq=råKŽ=‰w'Bý…µ^Øö"cÙƒÐ[¾Á Ûûå¹îÄ'l=&™°ëÌ h²IÔg™#”qì„ Æxsûø+ÀæÕ!ÌžÏsa§õøv½‚LYÐ é!l‰O„1[óeÌHÖ÷©oùî!òeìY~+ÇO~Š ÇÙ;?W+…°=Z^ËßÍ]Pc¾‚ù2†c³•Ëß Œ]&#Eò–ßÛßíõ­5ó¤1fGݱÒåXpa©rdm«³Ó1ubìpŽ!®Ïïœ[cªü`¯û¹F VÖ‰;Ðt6Ê; 96¿òQ¤8G“ +²V+ mëKãÒm¦2ZN޽æ˜ÄsºÂêI5€¡)v£ßpù@±}y2¼j\V…`n¤½i|Ý +r?’{`leºMUË Dä½°3flk¬ûµbìÐ7б˜é`YbïD‘ÿHzø©µFTŠø +ù%Œà¼´ÆŽÈ»ÁxŒó[kxžµ©™IR‚Òfž€0åÜcŸ¸ A +˜‰Quþá>}ìÄ(0slk! l![Ù³`C£E~XbL—¸ƒ…h$ÖvÞÛnTöÖR°Ù[®ÝÃTvÞH—¡âéîÙη +ÃÍ•¶w÷×ÍSöˆçv¬¯–.»»¼Þ®Om5ôi£°¸aUË +ê3Žý¶¾ýRx¾ fs‡1:¾O½cMx¬°陹»ºÃ“ŸÂì|wl'#IÔvf€h86Ö¬W\(ܱv?{ÏkÉû$t3}xƹ•$¡»<¤G*µR1ÂÍ…ÍuÝ=˜`}eqv`è½Âv–ÊøÅB‰ÜŽ˜ôV#ëÇÉ®@¶<ÇØ-vöŠB ¥ìö<ÇúŠìƒî\™]ÉD±5JÙUóuÑÓƒÙŒeBÇÄvLc#íݳ•¡Å3BªÏœ~ÛOOÖjöÔfÌзŠ¦Ö  C©$Ë ŸcÙ¢¥ÁÜõm’ ëÜ·&’“ ‹?I…å}#/8PÛŠÍ#õÂæE,QB4*nÝI +kÝÊ_B,‚îJñØõ†­KYíòbÓ»êC­'j+4ÑHl¡¼ý¬[Ú›( .lÌúRJIBè¦sã‰þþly»ñ%½2ÓZé‰S7Õ”¯ó ‚!¿\”ï´TF‰mi0öݓָj;ã‰TÓÜFólal¯'Æjse{‰4âTsj„UojFÒÃ.éç–¶¨L£æ³4‰ê!Z·³ùëf¥ÌV¬%Uõ0€ü䥽ݚùÌÔNŒúáõM0ÔE ¾š™ó™ÉÁY…ìïÕàë1Y¦tΊo׬z‡uâ½RŸ²1Å,<­zb¿îÞ¸Vî]»áÞl™Híi;®U¿¥Ëfu÷æLÙ v[Ì[æó.÷®8‡˜þÎéEÂ@slÄf¯úžF%û9ÖûÎYsÿxm·ïÜo™²§0þ1Õæ÷­Ë0”h½‰zº¹…ÍŽˆ¯^±’Ö ]Ç“ + Eh6¾HÍXvz¯Wðî°v·Õ—ôð!Ú×—! ïà]‘3 +c£œ*ß%ǨJy©tQwyê\ )µ™šVUÖ× +…½ëY_5~J\Zá˜?â"þËu™eY²â@p+µ×‡ALûßX›kˆÌª¯¼ÇÂå*!¤Q [OËqc¥ûßßí°7¹0‡–•€‡æy£[(¡!šÒAªW—Ô¼Á+õ|ô¤¯÷+ô—·t€lô©ïf…u="ò󖮘Ú>ØäÂ,凼{b¬PzIÔ¯7b‡BôéàhΔm·Î{L|ƵÒßTÂ_  Æ­æã$ë5wÌ åG–©]£ëÄxìÚÝnç¯îTìíèX©,yZkîÌÔí®*»ƒ½ù©hó zÜJ/Å´6§ëóžoœ·'0ræÕºçĸ“íiD/Øk_ÅÀM 1ÄvV”q0~Ž!ž ¹ð¹$t­;·w°µ +­-Ïõ¤R½B`[—»VÕfº>]ÀøB àþ¾Cty|±1­×•áº!R¹9ªÂõTZ«ÈíX¤b«Æíùê{óDð&ÙSㆬ‘³»r/ƒ ò“‘ µ—ÎĨ_ž£ó +üÂé,^K¼UùƒÙÏeß©WЩ±ì‹üQòïÙû_LÊIÒýÙ]aé¿Ñ¡Å˜Û½ +S¥ÿýÏùÑ(²õq-ë_¦¾Ðm–IÈùo°éµPlPmW!JïsÆû­©;íÛEÕÓœúíl yžæÒgÔÛ`]i,DæT¼l‹avb¿0 ût¶N~­¯•«b’mÅK3šû¥­1“°¾öflù°œË]7ÿÜýîdÝ"L‡熇â/´†?½û²g‡z8ÃV;»kÖ8³‡š§XÞÄMëO‹äv6¿ðÜÌo‡;ÿÆÐÑ™£NäúÉ(›ë_&#]s÷æ•u§×¸«L…Ñ÷d“u†>ÞÜ2f¹ù\¢}òÎ0„×Åtç1dÃaGÒØ2‚-ÀF‹ž¶ÝsÂ&j”…•¤<ÁV%÷L÷Ïä—ÞDgâ÷½Õ”Ñ€ˆÑ¦d„–8ZÐæF4qChD¿RsfB3jˆ­GÆËµ`h§BwUrÛ Æ'Ú0&x⡪uìb§E¶Ãh¥¦Sïšã° ”_ØE O0D–GìX1ÌàöuªíëÒ k~Š7®‹Û–h©+Cïv0Ú‹gÁâ*¶j2rss/”s J5úιÏÔ¾j/²%bSOtøÜ;ÚL†¿¾d¼™« S’qy«ÆmtËϱ{ÆOùÄ9$ÖÉÞ¶¸4›ÍStÓtU]Ï0ÙX/îˆòï/F¨Ìã×h#g0Þ«gžÎdÛÚžQH•‹ìÒžxœõ$£èÍ“Œ´¤9÷á@ÿ¸áàÍöÜ U2n,C2¶õxO¡åŽ˜ï.Rñ¸Ë^ÁÖ\«%;Þq¯³¯¦b7ºg=ïqÃÅö‹5ØQÿØÞ¾ågÑ!8 õöÏi1 ¾åw?ÒºëX£/¬óÛPÖÁüÚlÎYãÆt«ÑÜBŠ‚‘¦æ†nËbÎÊ"æ²Èz½ ×±¼Î°zœ«ØS÷0CñUrôo´ÕºÐÿº|¯ö/hòE„çÉ­Å'àh*än‘þ£Ž.ýìƒ +mñÒúäihÍ¿ Žddoô.:öìÜNLÿ%ý±ÐDûb¡ØÞ7’Ûè1ý|3áë¿ÚŒWú‡¹[t‚ vÔô9[þäÄH—d!0þ +¼‘cÍkòîF2nãŠÑ=ì·^¬Iééõ­#­£®»o½`Q_`ÖFÌšg—XÇÈ8£®çk6DHlÏüœä5–¥ê×0Ag´w5n[„YµÄQ/#ö-pU†EæÏ¨GçLe ˜,˜Ø9€m%¦3Ú€UìF8k~“žÞß:“wÃzZ±}ün0£í›ëÇR«Ø¿QÍyÃt9³ããxnöÍÄœ8ã%Õ¸vŽÏ¥¥y‘%\ç°:ìŽó8FÅ)rÎÞt…н’¾*.ðäL\ßð0Ý|Òž‡lAÏ—ÐTžÐ<àúüI›!&­ù4 ³Òrܸòþ°}GE€ÅxÛ°{Þ{5N ‡?˜U©NAîB<ÕùjÙ­”Uþ­YOç¢[ +ÄÛu‰†Ì9#ÄV ÀçØ±ýO¦÷ ŠÚÊ'7Û¾¸]™v·Ýãò ZÏ*'î¤Âsç±ãÃmhs¸Ôî +ɯ>»Â„KåÚ{0”_çZ’TwÎZ¬KæŸ<ÿFŸ¹|œ-Û9îLj©úî`Ñ71Z°;Ë vvtPZŽâkÜÔA}š˜8ãÅDÊÊ.Ðu9Ûoæ÷.»ç*&+OµF‘~`¬,ØhòÇbgÆyñÑx˜{£«â'6IçËtÜH¾õ˜»3-6îÅTfz°ùqgZÿx‰xja‡-¯ëF t=T——¿ƒ¹QÂV&Bnº3zÕ`´/Ï"Û¼å tÁµl…@Ñ!©çó šIÖ™¾‰Y<ÈÿÝIdÝÛ"`ž\v~Ÿ§¸•:äUÄ÷©¯8žœ‡–¤ -öTäX0öy*Òxz—)ölxÊR&o~ÏŽRAyÊ+Êqx™ãïéÚu÷'vŸNÁKX÷æˆ÷pfrìÉC²Ø 7bçù»kg¯üÜæ Ž¿^»†-]ª0iK“-=Cz7v²ž"ÓSxžªÂ1êíæ°ÕZžÛ^턦Ð\ðHÜÚŠ´z‡¤öZBeãFý¸3·GaÚ'Š[wO(óŽã’“/|ÀTS™Ö¤7Ê®ÔþÏá’z˜ä™lÑßlïb»jˆ\XÎýTŸOsIÎz«¹]uZ¬íHŽÁÆŽz±saX G&¿b¬æß£¾Æ^`ö¸9±ãv\hê- ñk‰!9[ïÔ¸&)³»ós¤š>“G‡ápbܰž[¡_DvÄpÆ5™õu'úRsÍ»ØEbâ$!-ÑôNFÿT‡J¶Ø¤kÃÏŠ%êµ(-¡ŒOŒ^¬/ßȸµ®Ë·S;Ý¿&³Q_kJ1²âþŒs„‹úù\œ +÷1ß·¨­Sé÷··îëû'H4t–HÇZ×W੆ú($R±ÞÞOä"¾í­þ±7üsí¤ÅÓ=ÜX‚ÃôÚ1%Ö¿GijöÝ«›_„íCœ(52üTâ_¨·-ã¡8©\¬ñ»r¥Ë›J,4[|rûÿBžå$¦«¸dðŽû®ËäH¬#¢wYA µ/vÈ ]Æÿë< úêFÝõkÅ’i¾G -2b˜¯øiB}Á¨$hÙúƒ‘_%’ÜY'œR@¾‘–•N¹‹7'±c—ê‰è0³ãnd~3 +†Sê¶«QJ’hueåºPûð²gtX&‹2 §%«[L°¬ôÝ»Ä olÞb£?½is­Š}ËI÷Ì-œ\ŠÒ“KñÃûž:ÛBj¼ïÛq/¼×£(–7{z¨ÙÄ|šûÞÆ|EÌÛÏ[­,ª«hÛ祽ÄnÑê¹_’?`é/Hå¡K dFnŒÏc»¼æ}!b3îWQŽ/5*f#ŠG‹±ÜØ +z¨¿Ó3šî³rz¢ç^C Ï’”¦á×Û̶”ÜœÛ)UõäØQQÌNyèy‚¶=cvvGPžÂ+é“!:¬ãÚ´"åäYËpŠƒˆ¢0L}¯êÔˆ G¡óȼ¥µ•+ZJÉi­-§Ã+”Qô]<0¶sc'‚®cÍÎi¯‘;Ýì[íNqtåš9o³6´¸¨sê®Î¨µ„SŒ5_'º¨\±š[;Qs7#ö°j΀§-ÚƒÛ;Áâ÷¤£­(˜v§w¯¸†¾[ÐâŠËqà :]oþ¸]V .NQó³šA¶O´cÀy2~¢í–ˆWÒɱxÇ“e·ˆÂý³5Kz&Œ·ÍR +Ÿ˜C2Ì"aÝ7ï*9Ã|‚zpFÝ÷¦q¾ÅNÛ#‚q£“i¤ÕçãJí’$}>* c Ñë3g´#m÷ óf«ñæÇªÝ£kiDÏG{‰£]3£öXíÖý® ³õ>Äõ·Z×îìõ§—½›°ölZF5•†Åä›Ý©—£\ÍMÚùJ…$R%VÓÖÊÎÈB;W³&¿F®Fý;½òŠŽ6­õC)Œ9^´H¯kôxÔ4j$%å++wÍD8… (Yhå¼'Ç›CĘ2z7;©ôfa·õ +P.¡W§èTeζwc±kš%(ag¨Y!=)Ÿùy=·G@œS å’z.v‘XSg¤Ýv/@ÕéØª@‚£9ãé•#ÛDú:ZŠ:ô†’ܳ;]íΜõà†(ýKãQBAtou(ih…Æ(·üè]½mr˜Ð>¨PA«ªÂ¶8q F¿°ÿúç/úýßs`×þ ÝfÅ…üù_Bú˜ÁS íRØ€‘ŒëÎH†ó ÝÆànKÓà¶ÂepwyFƒXByL)äb( Ñgò¾8*·çBÈþá{GwʳÜ#FÞ>rŸ×;ÿ˜êì½ä–¨ïÍÙ.2€Æ¨ ÆjY’-0“%þq8‚„tŒÚÝÝÐUŸ±¡xsiêqkV™_[¿äˆ:ŽÉöN7(cˆvG·)Ì ^3L¦€Ë-- Ñ—î-î „³ÝÎzèšn±´Ž¯ÜQþÉQ,6f쉖ʌ¡ci§qù-Vdk3ä÷Lx-½–žp ŠC„un›G ÷ÙMº™Ü±CŸ¹òrÖ1ûjp©ÀÂÈîoÐx˜Ü$y£ aó,§Žæ7ç•KŸFAÐ Þûؽ[l–Ü8O­»­»¼I3ß#Eý}Ä–E¢ØÎ¹V‡½}¯tfƒ8Öò.“”ômR/÷»·m:ÈÛ®ún¸û@þ=¹â{ûLöåÞMˆùâØÍ¯Ë2Áj°ÏÇ0|\ð¡-ß6^¸»Kàš/{¨%pƒ) £úœÊ‘¸ÒHý8Ý!Z;C}_­ƒ¾¿/y8£`E&,þ‡/Ö} ¹Šv´Ï—ø-¾]GD>cÙôùšoït¶ì°fö¨D£„ç×£î1ðä:¸¼¡‘¼S~Žu,‚{®,OW×:g÷Ü{ó·S–ÖrGÖ ttÜUÞQõöfpÔž# ²MŸ¯WŠ + à‹w•ÿ­áö@¬øà¾UïËÞ>X»ž!óõª¯ûü¦œ. Þïë±tÃX’¯#vËgyÐÒÎÙ®©nåàyÒ‚ÖYšà]¯Íy“58ËS&jÇ¿FªoÿšSþ×êÒ¿¶)Õðë@’¿Ž.òë’¤X~]§¤Í¯{—úõBÔµ­l9÷“U³½y{ú‚x=ʵ~[ê˜E‡Äj¤4¢êŽO1ŸѯÄ8VC&Ú…(ŠÇSQÖØ‡âR°Ó«vdÆ…ú#ƒ†IËù²ËåܶÜÂóŽÂøz‡“ð¤óŸúkßöà NmixEb™ +fãˆFÝ­—äEC¿®j;ÃÖ¯¶+iû¾,ÅÒ"¥n ;Ý©4ö‘t°>]Ô}!pp”ø3¡NN-±$–ñg¥ÙõH™\à’h€3ZÏøà\ôÊ­“½¸N)Øl•4°õ‘G­?n•^;ÊQ0åðí-û¸ëè€4ÝóÖ±5ÊŸæUoàÐ*@(«{4aUBÌÿéþP½¥FgËíàRö¬fÁ×ëT—6dM`»Õ®P£fÍQK)­µÅ1ÑÂ#ºàìñÚjs ” ñIJ~Nú'©šû}½àÐÏx7'KÐú9éFM¶ÏNœC¾Û¶Ý&úk;&Ílãþ~Ò="ê[ÿi%q~N®®oå=;À6ÿïå,:?ÖØŽómººÂ¥!ú¼ï63iU‚Ft$[ŸÌo8£r¾¢ØñöVu šÝNw¡‘Åe{¨Ì¹ú&Ëb|³­jßö(O`€*™-ê£a?7Ï!"ÛÄÇ™Žq}I]gªD¹Ë¬U’aÑ®å:Ý¥àG;ÚP¤Z’¥$FXÛ$xvŒ}<¯µ“¢Ô´ÝyÚï*z$nÁfͦF‚ó^ë÷wæa û“>"L¾Üu• +ß;·Ø19uÕ>¶VÍë•G”–Ì<™†ýÕ]5örl©Cç}½¡&Ï} ±ËÖŒj«gÄ«BøHÚó“Qí…Aѵ< -GÂõnf¿ÆAµb·³î ÐYòê“-³ôÆ8öȃð¨Xà†%ì‡oÕ*ÐÁÑ‹òtŠDÊþ(2ãr—mjTµé +(·¥šlP–r³•ô›§¹CLþ‘+#üoKÖ!X·Ô5lÛý›ß²Å©È'-1*­ûõ ú÷ºu{ +„ýEzêÚôƒ>l_·Ó×–U í²{~vŽ•Ì¡s5_.tŒÛ¦õ–”ë;^Ž\ø^ÎÎé'™MmU8†‰ÄM¬û)p:ßnKïN7›¨ä©·W.F¼L€O/#{@v:9¬Š¶ï•Éf“Þ@„Y Ô½¯ßf£™YìèF¶WkS±"¤Ž_e²É@Ò—×O»69·©½êêÄ.×¹äþH¼V‘ ÇíþÉNšîøƒ–|m1ZqBÖùJÆ øõ©?Í]€8ªœ# -*:®ŸüÜýHд¦ƒ*7ˆµiØ>¥ö)­øæª¹kCáL¦Õe)›n;‚«R×vMÏ5MÂö¥'ÇîÕ¡‹zd¥=‘ŸõVN°¹"( ºðƽ‘Üä¢á2Ø[µ@“°žvË6=5œ5Èa2`gÈI~X„â›”Nzt(ço«ƒÇÈÊ1YiœÊ}Æo?é&R¹?Pvzt¦}ê}²®«ç—Ô0ì]O?§Eö{Ш“à ”Ô‚Þ¢´p·Â¾u=C,DyÝä]Äc•Îû>ÿ‘ÊåÄ»d4–Ê«â—Ï¡An4žå㽈RË.[à¼Üzå|¶mŠ(’t•ÅÚöÎ× ôuÅi)Ñ+íô?{gPü½?p•a‘>#¢iÄf`´½¤^îbxŒè ¾ßSÞ.Ô¡Ã3[¹½ÎǪ‹Jª“Í‚âqÔW½Ý0y³ê䆲sò“Ø+szh'8M>ƒÊys e´ºúJ× Q?q“'×òù +S÷;óÝ$!z™é'éÑj¯VX(F‚óÜ Fä’æƒ&Õ`.µ`3Æ;Õ©Ë£ ¤¶¹å{X4†“´è¥xo¯ëíÆ0cNn-p/7„*ã'ã:DÛ뤌ã&å:õrb¶÷Uàx +†YÖ¿] 1E2šGÖŸÊ¢›vk=4Ȫgö'L ˆÇûæé³\ZL™÷ZùM8'Tú¥íœoç~¢Ù5NÂЕõ»ÞõHÝ}ö·ãÑW4ì`ÊO¤‡Û¹H®²£F!®èÆ,ßu‡zC\=^7ð„Pcoª ÙÉPŽ[îg|½ë§ýœáÍt?/W|òjûyý{yÔ‡òHùbt<Ä*ó‹ðZÌó6¾°?%ÌT¼ÿL2pÊurý„t* k!m!¹URå±Þ:tªÓçž±„R%»š`îØ4dß*XfÆ)ç»H,¡Œ¯…âö/4†¸CcßS-t­Ç×–mø"8M‘hÔÈ(ø|ïë¨ÅšÁàËÏž¹×MtõƒÛ6ƒ"”vDjÄÕŸóìbãô]H¡rÁTñ“w·êÊE¼ÜúýøöˆbªL ƒ=lÔç,zeØrWÙ’lÌ?rF‹ƒ(²|#¡¶I ¸S[^'@7ÁÛ}<+z]%CµV0j¼wjÚðF·.Ö nO Ò#§»¹ç Ó¯­iê ‘žƒS¬ö ¤²nŽDÖ†áv(œÄzü_¢Â„×zXI't¨æÅS'ú#OžÑÚç¼u}š + pÕõU®äëúµÆŒ/–âD8Y7¸êÍCö¸ÞºÎî7ì½"6Ö»ÝËæÈ ÛÃúïh½pÜÛêz{|Ñt~*²'—ÞŒ7{ÔŽxŸVzŠXŒxÏýÌú4½ªh‹^ßÜ;®¶´Dïaòa¨÷Ç~Á>q›]33ÁvÐd •˜£ܸuj^_]¢PIhéÝÕîÔeÔ7‡/3€]À‚¹JCahîYŸœÞô`HèO^Út0P“†4m9õç²xîFz¨kOøÿúÏ_¸Ë|Ø&Û¿­dÖ¿þ°o[Iy "é¶(d‚µ'¶ÕT žU§/«÷h\wQoÅÕp¤ß(&}·ìP!6Ûm äÛeˆõo2òu8ØÊ/\¼ ¼ÃýdL·:).8µ­ri¸èé m™HÃ@Â$‰i«‹@oÌXˆˆ–$ù+ÝdÒÛ̪ëI\yˆ_';¯+Óò8x^Ö D›Š,‰¡G „¢ÝMf¬.Í”uÀ­3²c3”æ{ŠX`fž”mâß@j÷>=ÃFŸ˜Ú‰ÝyüàwŸúÅݼo(€ÁZâ—ÉÏ̃óîé¶BQÙ€‹ôº—º_’éívèÄ–ßÄcKP‡µ[P©ç{Â…y’`K`7Í(«§:†l pñû±TØÁSxÃʛĀô×öô¨îr€ps`çÞ¼=ÄÃÀµW”uƒgéçf’xÔô¾ÊZ°ÄË8ûÁ.Pç°÷ºNï]¯¢sîI7ï„"´V‚g ?¹­ÔgžŒ‰Èn³B$Ÿ¨ƒ‡$8LT8Ÿ\¾qaÓrÖê•÷:!Š)‚iáP³½îa¨ý0ÖѤxÆûL;„û}’‘žïQV»w²õ4Ž‚¹ Æ7éoóþùIÀîêËKœ«vµ°Ý%¾(#†¢E<\2瀺$®;w(Òlû±XÎ2Î_©š†Ð8/k´4„„oî±ë:Ú-RqV¬D2þdæÕueö´²NØÃ:*.Ò6Á;§'Áöqý“ȸ„3£4Y0fEü?¶ËäJ²Ü†¢û¶"-Ðá<Ø!r£üßê @F†zQ]ñŠ>ÆÊѺ€mœzeW-‹¶!°êäâäp3ÜöuúK¶¸wô^n›)-‫/g,p¤3¶†‰®“£d/£Á†Ìò‘€cgQïÒ €rI¸8^NPÐãÈyÙª“˜VOå$:e`îþp2Rõ!œb¹qšÊÜìm{„h›eì7CHmÒÓû“°«zImœM¶Vj‡<í7Iy·á:då98· סsßÀªÍ ¶O§Ð“eRÕƒq¥Ê¦ïªË2ʲ½\ըૠ3OKN +*w{‰9·ÃÙÕ—}N™þR¾Û^¦™Üúî5kô9N£Êý(-¯±,'»€K‡„œ™íìhnEM‹¤gcQ€PušKSÅÊ`ÌäÒÄ׉ÙÃ’—ª„.eW ¡mV„Û§`U=‚^œ–”²7+ìYOÒ¸kjVظæ†:chœ-{ÚpM[æÔØrppÕX£rXV²F-œ +âè´qma”c:3°Ùúƒ}– Ž(XZº—- ê ¹ë|·Ùæ\‰\ŒÒÖaV)T¦‘Õsr½âÃW±ñ˜ Ç­óŸò¿½Fuñ߯ÿVqßqh+Ñö`[*•êv4ZÂ<²«Ô=(„”áêÙ­l†iÔµ†mÆCDHîÈQn»m¥ž¬‡æ‰ 4Ì6Û¿xØ8B’ñæÒc•ë^«y«pºªuŠö¡D‹Ñó~ F¦ŒžCx¢ûì@…Û¯Ôü%yT•Ü,ÍLŸ:Šä(!M'U P’ó1#«Ó±ZeA(8“›aó Óè«‹‘µt°Ší•|˜äœ—ù؇c­lŸÈyãcY¹½æówí“/Ú2û\…ºY­´ ŽLå‘Í4gf¬fJ×X´Õg úª×-Y¬uøB¢Ù-a}õä:á†Õò½W,r>7Y Á€Ü%ŽA²¨,ÚöIzµ‡NºŒz_°Ô´9Øî<±V–Ú¾ùª9÷Ëñ²JdÜ÷evBm|Åna9 +ÖXI䢰m×mò—36tݰÆ«_ƒïšóìÇÍåñ(œ$Bf®d/%¯«5iÇKú5Öd Æ¡  4î´¸çÔ$eƒøÿ%Z,*K¯óNÀyÚ§GÂyªÌèŸ+EcN‚±G¶uDù禎#qÅ™±VZ|L€Yþ.åÊi›TdúLrVUÈZÁn§t»vÊŒ¦àá²~Ü5ÄY®g@@&ü ÚcÙ¸Ë]8öKµ *ÏH©Y‡º%'û«d¢Ñ6 }•8^XGMAŽ>¿äž­²Ï—ëúŒÕç–Y×¥Všß Píf×=Ú(n©à=˜œµ»ex:—™N)‚öÍQ,—#ZA˜¾>ÐÔmvjO=@b© ×CˆÃ~ÌÌxè_É(™&ªWÁt µ~Yš‚] AÌò¸ ;S@Ìç«SUÒË×!¶™bÏÙ—Ü ¶ÑÚýsA°/(´RÀ²¯™-ÛNÁÜ¡=Ž—°ÂÈ¡ãh[‘ æ¹¾ì2íœ ÛØ‘ äÐp´”’»Äšïª“üä¨Á¶¬Jë)L9â39xTe~[*´©GR´aœaNµ¾÷óR>hAÜü • —ITša\&•€%ínrÝeñ²È±Èîênˆ¹"Õµd‘D!1¥bá<ì!ÿJ¦VWÌ¢…$Œ[Át¿¨w9.KsJ‡Qçá^a½õca¢µõ%‘vXÑV—à2Õ?³,‰XƒöÌ>=Ã¥È]!`gË\h×é”öl*Íy8]eBgW°øÜk2…†)Þ8@†7¬i®³æšœ*K±‘Ïæl4ó–”ãÆGT#ÄÌy•üÈÌHÃÀ¶ý%thmýl$F†›êLÍWø…éì)»›¯}%Uz; ÌÊÀU“%×Oö•#»¡4gVC v`Ú'œãLüú¯ ÓSãLç3²+Ã]‘€-ŸšÌr”¸Útqæe·üÖrâ˜äp—f¥%+™:“K¤š‚¸1UHZïÌù iR°yfçÄe—`#ëÚ4Ær0ÓÚ.ymw:kí"óÛ±™­Üá6gTaåEU’Ê/aÆ*·ÛíH°Õ#¸ý¶Þ?'…€6Þᆭ‡ÊnCŽñ‘•­Ã'ï]ÂËn3®ÈŠÏ™C§¶\"n†uSõecËGˆúo;'ÿHù»®;†LxÄɺ¦òÞ\''ä´M°V¤·”³w‹ìNa±²ã9y¢`hT^#*kÒÇêÏιF¹µiXŸî÷’™æØ µ:åCHÁÙ£`,ÉÈ ãÆ•âæ”®t1ÂÍ$xÀC¤…àßœv°æ8X5DÓTÖvC¹Œd*Ovp¤u˜§®íÿüóïJ)E?«0ˆdÛþ„G‘ä >Pfé5—óß¿È%* +î÷> +èªú´÷k^dªuK#¬-Ÿ¬8’aòòر‹p\.¹«A‡ð$Ëd¬Íç]@¡ìÛ¦;#­ñ³–N If÷Ný~Rn_{äü·8R¸‡ôû®ªO{Ç‹$lF¦îqºGmU«>›ÕÆu_ÒdÙK<ï +mßV=(Ê´,•UؾºÃ|¤or`ÒÙ†õsÅ’°pe9Yžw=º¾,Wt<‹Søœœ*R,0J´\ð*ËžîçuèWël6 Ãó. «í˪G&2~.ϧ㖔ø@%êÏäJŸÔáà‹ŸG]UŸönÑÒµÈ؉¢µ¦ ðä¦Õ/=rþ[¼È§iŸG]UŸö¼haPºÐ¤kÔ$ŠŸ$ï >P†ª+êm‘³†1ý¼ èjû²êî°"µÅ‡í×zÜ©2D»ý0­3BÐ!s&u±ü¼ è*û²iÎ@.„œR@¤.†mʲH¬T΄¼P9sô-1oóV>J>ïrmÿÇêq‡EÀ'oúî”mî0ò.†¼Ð’;Wm˜\üÆ‘6|¤Å£€UŸöŽ£ò±âÞëñ­ èÚÑ×—¾N‡z´}Yuwšð9Ú9?Åx¥vM€ªBY¥.¯h@¸3|>ïz´}YýëyXã¯;>ò­ùÓ€^wžw=Ú¾¬w#PþEH•¹Óä4–à…äÄ€ÜHA¸h@R8LÙÞÌçУíËêqGïÜÂ)­? ' [&÷V ã>ý©à€UŸöŽužh½Ž4x—Õs¥º6Bôõ¥ÊÑöYÁ]mßV=(YȾ­)uÛ™" ð +©H)\Q‡$4Â%!Ï»€®¶/«îS§üPd;r4NB¼­Ú«…_åâ÷¯~CYZ¨÷‘CªO{îÅ<ýޱĵ ,ù»Xuðš\…j#DúÕÊu ›¾ïºÚ¾¬Þ-=T‡\nýæÈ‚ƒ$ÓÏËòˆ:d9*F®¶/«^ÁD«fù‡leÜ©Y6K“"MåçŠô«](—à|Þôhû²zÜYT¥ °ÃyÈL†¹$e¹>ЄÛëW_Q‡pò2‡„âyÐÕöeõ¸#ûü«¿aÎûOtû6DŸþþÛU“-ë çYÅ[Aލ€®'Óìœâ×î{3ëS­Â6¿[M#oý²Y±ÿÓlLÕýp¦¡çL_ýl6C~5›†>^ûeµÜ¹5)¬›Á±¤¹ìnðBÒÓ¾Z¥ +s`ç–Zçê×~[-w ËȤק;x@÷þº_È3Ò?± ÏVÆs ½Ç~Ù gøzí#f˜¬î dÇF ÆAüõØì{üóúlD–òT!ýÒo{á‡0Bï²dÿ½)ýÀÂ+fµ±FÐï6 }¯‘þt¨Ôwª÷Ò/{oAp~Ù:wI—øŽðèœýóo€wkœJš A"P€PûÒ`¿ŽÎ´¥At›{c‚S)Á…\,'@’¾¾÷Z¢y qh[:qòœ¾­Cfa¼;/϶}QšYý‘W”Ä*‘ 6”¶öi¥¬C N:¢AÜØU͸W˜Á·Œrhî}D¬ +ã¹õå,Á«3À}ÚŸ…JŽôè>õä:Bq¹¢¶ÆöŸƒ4Óí7÷¶\:n‚®dÒÊëå8)‹Ê¬ï0P!@ +<î’2ËúÔqðH4õ²ä[oèÎàr ¤R!Á»Ž5[óst^Üë‹9ÞÜö[Â) +7Á“¸²ë R йWa:4һߋ“æ'«œãH²jrƒ§X%»Á%™6hö¾¾¹p6ÈIŸö{ÊÌò¿¦ T:yp´$¢êôm°«ÈC¼+êÑ«ïÝÏÉ“³ì,:C‹SehÁz2eœ—P2eµuˆÔ[ߣZ #=ÙM’ä…â$\¿ui´t¨Õoª†Ÿ×s’àa•ŸùÙ‹ÂtÊÐFEÿ”;ç ò‡uôçJ‹ÎbÐ)ëB‰±â.©ÎŽ<4ätçA9íªÑ¥î’riIÜ%ÝúnëfÀPî}M<Á±Û¸8U¢³¯j<‰u÷ãúŠ“cwuÂû›‚ÅF„ÄpðȇïPLªM²½¹Ûù3Ö ÚFLÜæ¥íæ9h8z™V2VÄ]V©‰´™Ø`›3ù(4ã'ʱ¹ +âºÙ_˜¬"ÈMºï2‹›AwíŒËöA pò{q›ì;¶°œÎ#†´I#€h\ý&Mž³›”|]gIJv;DÛ +s€LUak5†½#uˆ×íÆS¥S&&ºa2w ·8ÈÈDÙÆ°0ò´/+0RpÍN8†Äq×ytÐçqe4ŒpMй‡U@.½Ã¦º·»Ž^È=€ðþ‘›¨k!~}]æ24Ø…â°®9«`°:„uðúÔµ&×1vj ‚Æâ1Z˜6uÒ©kÐÙ ¡Å‹2ú²â@ØFó­±­ãP˜ÞÔJ€Qæ$ßÜb›–ãxz Õ&7¬(eÁ'Bt[¡o\ws˺­m¦„GªõR¨ aÛ¡>¥n³j>µ…Öà¥ÖeHùŽ”CK?±¶8À÷âöÅØÒO"®3ÀÕºjMÛšdî“!0 ÔÃPŸa¢¶êjàåæt%'[ОqÓóiäqóIÖ§¦}1q7¹²†~AéѸ­Ä¡~f~¹´GeŒ:ìÐF·¢ùÖ€5ˆ°Ë-â;?˜Û\B/ßQÕYB‹å'—¶´N™u¤©=m+Zõz«ÇØþ´gÐݨVOt¦¨WìZ[ÏZ—³ÚGXFR`PÙÉ5ï“AXU†|3 v\úf-™û'…lå¡ßZÖ\⃅b1’o +-ÜÊÆõ(´l9‘ûM¡…êZáÒ£@äK¿S%åe“¥@ÔO‚ÏdÖÌ«±¾¿BHt«ä´=Ââš[+ÃBÛä‘Äâ'a-È“}N5xÑ…@rNÑŠ©Áf *¡@¦Eùb‚™“-ÒÑÀÎP®óè““wZŸ§BD(É44¨Áqr°H§‚†¯®N«.C4âdÐm3H¾rÒªüÁŽô“U¶ÐXúbÖs³6šU¾¨ðúf•­¦zö7«nl‡ß¬8F´¸Ç*¬LDß´²ýcD‹{´š¦0~°jºî¦oVÙª‘!ZØ>ʸu»|òôm,%¢óh¿ÓÍ{* b.0ö©“ña#l ôŒ ¶•qPŸ2šYÖÀ8Œ}£ÏÑ™ÙÇ.ÓãØoªúp´‹,·Sôˆ‚ñ:@çqˇæ@7IQÇpס¥sQˆË¯ëªÆckʉFTNƒˆ‡è@YÆÙ¡VÇ╉u`öíy£ë]¾ùAd«¸òEêsRèš ¨Ö×Q.S Òª a7Ðo¡j NA«§OÒÜ'¤o’×< +Ù\# ÈšºBJŸ³ûk¼o˜èV­P[2C3w0ŽÄu4¤þÄK#öA½‰•orQ˜ÿX!,“46Z© ”ØžÄ6»Ï8¹Àp?‰äÄAYúb¹‹=‰nÛ¹¹mv£Έ$šdGíæ®"W¹Ÿ¼;lc•˜Ü ¯Øé£Ú îcñƒdÿ¸ž+âš|ŸŽ7±Õt0¯©Xïóµ›,б­¹'Ö[9}ý¬("ð~Ð \,@h“·¿RmŸ1ð#AXV)°j™YC-vCI\wóp1à8±ÞžÛ™´½Ç »îcöJ>atiaÅç€íH˜ünîÌaš +JùƒPÖ¬¢ÀûúÓ£è]k?>¡¬É1=êYWŸÖXïã/·ƒµä=97ˆ²n¦@Zø“<„Ú#&ñ“X_vÛ‘»¼5h,X†`1zé&—%ÁÌÎìòs:_^4¾DÁÔWhŸbE^½{,ïŸÓöÍUómˆõ ý¡õ˜²;¬`„¸r¯±õÁ3#5J¯À ¡ëN‚•·æÁ#βþÇ=uÈÕ6ÀÉ=Þ ¦à‡›rS@œ‡)@¡Tê:¦µ_ö ³†Êã:BT'™½ò Tê“1\]6H‚7w€Òã^‡-L޶®æ²Ç:Õ`ïÿ¨.“#ØŽÞ¿2¡÷Å9¡‹ü¿* Þè6‘ÑózŠÂ÷™ÒÂ5!ìacõ°&ýÀºo¬d8<5ƼW—ð]n®ôõÞ}¬nîÙ`ÝVdÿüùû}‰(‘$m \7ò¯Á†\Wƒ½»n’ØÇ 9± Ë –PÒop=É$ñ}%å™+ Ä5èE%tZ…F% oõSb5W~‘L¶/ı?Ø6플s#¾Ù+k î~OBš…Áû"'Øx-Á‰÷¨ 'â ÎÞà.¾r´û­”-|ªålù¿‰`³Ñà Þ¹“õklYî,öY½Œü$ylŸ¤÷ï>DÞà-_£Û—„9Ÿm5ÿâ].;öê{Û7#GÍè ƒÈ\¹¶Ÿ’–Tò›DÅ!3@œóý :a¯~ô½ïÊo";£ùFeY"ˆ¼d¦+rî›õ®nÂÐyƒÒtÌI º>–ŠÄ ÜÏÁ¤½KP®'Ž&!"V7 H®öæ`+šå€xD—) ‰{Åhq¹° Ýü{at‹á¶Y òÒiZ{ðl4Àq„Q=WlåƒჷÒÐÜ…j†ûkotS‰ó SÔlv‡€…¢2¨Ü›ðVû;óÃ˘m–b â*kÂsU>[®é;{W)mž`W· ‚t¿)ˆ!x5¥«Ë ‘çÁ@6¸2p™ïù}Í#—í ÑžÝB~yÖ³2>z`Rd?¿­@Ö-}Qq¼¶¦w x@:t ¸˜àì‹bñIb6Á]ÇèÞ9ª­ä²Yä•rðû•ʬ6•öƒ¨E·aŽÜ8‘ÖSã–Ø)¤ONm}útéš¶ ðHvþÕÞÄÊÞî'»´áÞm.×]×:>·Uµ-‡XÃêc, +_ÄÅïéðŧki>ÆRú~$ -Àª~¶‡ˆUñq®Ï§']>_ŽH°Ìm–AÜ‚÷t ¬´Ý¨*å jD\>Ç¢ïHx|¨Y¥öpôÝ,HfÏb éã9Ã'}ân+à"›ãïx°f 2—w ®V‹´¤éõý»+„* ijñê¦k©À»@{×0´%VÛs¨÷öÔ¦¼ãïhXñ ˜' i.ùLÊôdž¦ÕVÉ•TвWاZ •.á£èf߱Ϟ¯~÷~vZp¯jB1ÏœqLÚ›þ +…­´n³¹å,q$šQßR¤Kÿ˪ 1p¯7OꜼ·É!Y\Ò{Ž)_i+¾9ÞÙ4[ï!i4=$#óåúÍ´˜mf¬DÕé3Iª«[8ÕD-• h~ÃŒEÔ«yž‰@¿F9³_ÇEF7_Þn8y@,ÛöÆDCO"õ· •Z^û[«Ebi­àÁÉd¶w72t›’+WÕ«ÏÖ™pÜ×gÇy•®)纑Ù}ôؽµ·°ÞUe-N°¼~.Èäçþ䜛ŸÄκÙíÄ1 ãu‹ñÆcÝýßêwÄ)içÇŽN»i;á:vÉUFÖdõu $ý[7êu³%#˜pØ64ö:¾?w[L<ßÊã>hÖ(I²zÈx¾ó}5wŸ?OY4NŠ­U>x†CÚEƬ.7Š30Ìô0ëáÅÿNæ«1šûæjSï*¶çþÒ`?'¿¾H(o¢+¹ò¾,ê?¡ s{È;æ(3ó%«OG@;ÓI¦zˆ={Y}ÆJ@ +dwšâ>±ÏÅñ^A¹¶P“br³¥ % +oÕ N,@ȦEQãÇì-„cé'|Ê•ƒ¾gÇ ¥Qñ²œmÌ‘¢‰÷3¸Ö +9X²bHZJîn[±Ð žú é6†±k¡:4y)‘ ]GëÓãXÙ5îT uæ'‡-äùg²&•V’$O~ÌM½j*æb‚l˜V6 òÀ½åU‰xQìç{L• Pnb +Vä~Ñfg +{Á„_1ô-{çÖøcH˜Ùd5Ê bÇ2Ù‘Âõ½9O´4Í”™É)É ¾:Ã|Âp¹=’3ÚŸK­/ŽU²NøÖ‘[›ácPÔ%F÷·!(«ó!AÄ~?H>ƒôÀ„r¤Í`?O™ñK\÷¬k„1ãߺ¬Mf]Ô`„§ÈŸ_Y%“IUdZ ¿—«ª³#¦’àn¿uù$ÍOK«99}óŽ›+û]Õ_³žCYÇkÚ³×ubN,ŒwµV§ç°l2Âe°³$àæm,ìwÂà³ù°ô G?“^™½,gè%ãAäªÛ‘Î(- رob—V G©¢|}NÓÅ9V+ +3†:ü¶¼Ä2Æ¥Û­Ô•/4–µf§òË7—ÕåõGç uäûT©{Ýœ¶°^Õjšn“µ¯Éˆ<‹åXö£‚ä«ý›~õÙJܧq{L$üÄ6dÙ\쇻[öE:¤ª÷¹¶7cNîˆ{Ô¨±ÎîBÚ’ÉÿCÐVÂâ)ÃäSâè ­ÓžèN/â·’w´IævÄ|Ö¾Õ p=å~p M«³¾Û,1M6¹ðr ƒ¥™ij¼ßµ1ÇVöŽæ›S ÷­ ´ˆ1ÿ©Š³ìDÜáfÀ'.Ãàýî=>v¡ÉHáMƒ’ /ÎIštÛˆˆÝ؈ޥf­9òî8Ò„Ú 1‰Ýçéמsá™c#\s·H¶Löµõ@œI&Çn’pA6Ýù_ÝΧÃÒM_IëŠÝÑCL›àðv)È#Î÷‰oz66á)ÊõT ÿ_Ü€Eô}âi?ÐnlMÈÛ?ûz·òr~É(ɪ¹ã½FOt4ÏÚ³õ[cæ{àò4¸=·ÈÖ\ˆ`û7v®ÄÎØžæÄžÆ¿éµz´—¯´Èz-7ða#þÍÐ0¶§V¹ðxõŒZckö›ž«åÕ¬WOu4r%œÝ#‹n–ü÷Ölj•Rj¼%ѽø¨½ø»ÞÏMeçÙUª¤ÚEºvÂë'/LŸù÷Ö½|ä%OB ÿSA\ ̽y¤]-e­OÏ•6/I³î¾‘C —`ú´‡Ï1~£¶]ïÍÄB÷qqÌàâ×+#NIÉ—[‘¸EZì”(}þ¯ùzÊ΀ãðCèûdžÿyÌ3kÀq×ëèrBsÄj35“ŽèG½çy¨úåkÌ>VÝÁ9[Þü@ÈÄý]é>`c;oz?m[{úŒvä‡tVÚw—áßõ·³±ç÷>ÞN0 ßµg÷ç¥ýGv™dÙ‘ã@pß§Èè‘à|žZëþÛ6@†TµûiÉà8fß•Ç#¢VÿyšðD÷ó0r'/Oð½~ˆó²£ù:$Á;öœ³úyj=ë µˆÁÝïk¬­¯Sˆí/¡\™ð½¨ê éºe€Èà ~Ú %¸×·£Ì ޼}#%Nü˜f_>n®FPùAåûÔ!ƃÊŸƒÝë;w,8V]_îlßѰY¾;:¨Å”Æ}ù„ªÎh?ɲæ‡TöžwpŒÝ¾@h¾!í©Æ¨Þ¸J³± WW× Fù¼÷FÙþ5ÝàÓZü‰”„°[»ë4ÕÏC¢Œ§þ÷Ú)WOY³øBÝ}Å£é ZÖSâèŸuïC-›¿E!#/¤)ŠS–þdùé1Ç|ON[SvÀòŒÉQ;éÐ>Ûxøã$|ö¿l9'¯a! .»¦ +ÏY"×DäKRyÇ-÷J†XfµñÌÎ!vyj»nçà¨$Ë]{ÊyÃã/RýóŠ“}7‘¯ö¹[cõxßó|º¡Iy}žŠŽ$#f½žS¡e}?·½›ùyýç3Ž#†Èyãh|eŒÄ¼§±Zâmé{ì³¢uù2ÎgËÕĉíïЯH +Ræíûq|$]Àç ûˆt&ìÞ×½ßä¢ú>«üO‰ð‘qnœàøL½{pÉÎêoNÂe‡@­ýms–”²5žßz)=„ò|G+†7z݃Y‰ÏiŸ¾[ï=z)«7)€+çDß–þÕÙFËkÊ+ûñ5‹œÖo™F }ôf‹š¯2y?}àŸÿÑʤ‘ù ûØÓýkÕb3Gý…ý´É‰ò[ˆ2F%‹ö( +Ú¶R=NäïýÛØlýl]!àvè±ók·D DPðŸ‘*í …³º¹?!ÅU ¦UÅÚ‰…á,Hg-”þ†i¡ÚmVzÃp[«®1¦%£¹¬šŽbséÀ%nYëå…þ++p0”¡i:n3:¬¡€©ÚH÷ê¨Õã‡àxa`†KAÑt4d±;Ø@µ^ªÜq”–©­û2"ºkÙÂùî·¸ 2Ö¯ƒ-ž—£ÅEõvÇQÉàE.öpCÚ«¾ŠØÁßcàˆÊ…4L»ërЦ5pœÑ3 $³6g#;¥á@ÃøO”Z¡®§]žÇ•.Oùæ_l|ˆSÌ_Êô7[G"`“Z0ß +ØQñ>-rS†ðÜÃñ$3÷»ÏÓT<$Õí>Y/md¡´Õb]W1nç2p M<Ý%U:Ô@¼KGO†Øs$zDÚÑ +£…²;޶àh¾î—r:72PÿQïã d”µ{㉵{Üa…‚¢%*:s‡v¤ˆböfÀÞ9b4[Q”whÞsÞeqŒÜ Q¸…Cåa6£}é.f.ÌèÊ»þB[Çë*\~þ@M­Y2ÌîêÔ¹»ø”›LÔŸˆr\œ¾O?¦¡zý†þ;˜yš4yæ…9Ð¥³8£"‡ü Gtc¨/¶„Dó*'Ñß· <ÉôQcV‰=k‹!l3¿\Ç(²l”¼Œû¥Ÿ’½Ê~ +všrSö¨G5£ b8æ¹ãNŠaíź|t²AåûñfvÙZÇçcŸ^´Å˜Û~¨j¯Î§îÌ1ÝîtC%ˆàèa¼|Yì‹MÀÌ‹:k³µ¾äµÐE†¯>ò’·[\ØÜgÝ«B¦Ø(ç^òÔ7b-õFcÕ…ê¼³IMQ×-/ +Ǫݡ”éõ´È}£º—\¶::ïÔç̶žÁ2¢8…µmZ4d +ŒšQáüé^@å÷@n×ok“ä=-+/åšð«Û;ü2ÆÄÙFj°E W1*žWA9Vôe9sÏâ¬!ê1ŽìíÁªš3ÐÜÓ-0Ï‚œ`”K †ŽqHgÓņÛDÓýÛ ù‡UJ,[‡K¬Æ›ÁFhpöôÓJ•N b«ùt_žÃ&ú៞ּI…©AóKF /³9t\r }Ó;5&02È›^~²BóÇ%½½Zðsí‹[ùxû^¦?-„Ûký,=Öà=ý…4 ê{Ùk•dÆ7¢TËuQjn‚¨ ÙhE-×çŒS"¿Û£[mD°½y1šž–ã6 +'„‰›Råä tÙx KdªˆéóV°I•잣{y?àOŠ`x*s9ý2nêÏ”÷g6’I1S£CðH’Mñ.eŒ»•F%FY½ë¢ª$˜÷f¥ç·ÔIË{ÀÖs/‡:æòX”"È4G¶fË7ÃSoV´ñä½WÅôK¸xž²(”JÌc.¬ze*»OwF÷i§"^_¢!Ò+Ws…§ì—ütO¯?^0ê߬ÿ²û÷±(>3ª…‡_b¤ìÝ%|ú¸Yû¸Áée ëß°Õbº¢µ 슅;ê¡’‘ÒlwèÞn`¹4¢„F{â]ÄåœÎ¹^G¤ !9JñÙ†z¸›v4bT°“Ÿ’âÇW˜gìdt‡ÓWX4c¹ªÊ_Ã…zE–Ð1θ¯•;¦Ú>µªîPI5T6­Œv¥©ÂvTšÿ43Ñp!nïi‡*+NÝÛï ”Š€ÛUÙY§‹ˆ[\—ÎÚâ{=Ù¸”üˆ!ínŠ\ÐVÛ›'c¥0IÑ0‹°]¿'§uܱ«Gã#j*÷Nø7¶ae \Q M:9¾S‹¬wÚëLÚK}c»Ü¶ÓñM€2XÀÕçÛ X=Vß!ˆØ9â¶*©ÅXZ§^ß¼'v@H7”v)à´>TïétõW£Ó“ÞÔ©^JÔjëoZ:ÃVìþ.W¿rð7C­-vk8²ïyh(ƒ®Yæ{Êš{04«½gÇ:ÅΜ D[À:÷:FN ô¦¥éHÚ‹ÝC b¹]Òq½hÊp†Î²/¾°è½ÄF¦9˜2Ð ­– –¬—ÊÊŔԄË«+(” :Cô†'OÊ}÷ TŸI)MJ'h³¹FRÈÚOéb7JP–:-iŸlÈéno¨î¢½ÙÌ3ÈÔ+ÒD‰ƒzÇÒ]¢þ¢ØðL§®P irÛ7’ SB"ºÆ©Rs‡Óã=ÐËûCåþkFt›nÌä çÛ/’ŠÛÄê½±6z­åw6îÌ)>äÝÂ* +:“»¶¹ßÉ<ˆZ·]ÿ¾\ òØ2 mß ÛRØ¢S¹ì¨—DÇ 82\YcAÙíÒ*Ïä´’–7º}9åéíR|ÖêN5â=.¿¥/x^YtlšÍ¤äø‰=̹óu¥éfÕ)n¶[R“Quºkycûjþ6P¼M:G‹-à¸ë­Ì¡ÜG +>Þ‚rG;3ª•¨A§«í„íÔ6Ú¼CÑ–‘‹Í’Å?!qØfæ8彫͌}å¶¶N;ãÆÃõ‹q+›B÷¥ú¿ƒ¶D8W‹u8}^+M^4.{¶z)Û˧Uû3 ¯(AŒ¥=*—ýjŒ5*ÈLÚÈ”Ø@­=WCƒ¤-Š®ÃÃÜ “ÁMl¥F CÈT„ìä./åÜ«F c£NÒÓ·9lk„ôTÄ©©"zvð²#i-–ôÀ.½FÚâÚÜþÿŸë2¹²ë†è^Q(‚3ãpÞ8ÿ­/Æ×ÒÂç´Küx$†ª‚¢¾(ºïô)ºÔuÚ0·Ñ2.ƒ#>`Ÿ‘è{ÖöĘ–Íù'ŸØÑñœe¶ÙÚ@¶ŸñT,ކŽ+Ái˜ŒüÅÙÎ^èÖ¬§áŸ(Ì“oÀX/àºÏY̾ŸÔæÌB^ºÊ|²iåQzmŠ¡xêžuØ÷4?+jIJèûˆ‹wÏ@YÖ$´¥k’¢mZö±'È¡C®vVÀ‡©Í÷= +ó;à¢ZU9v”_Õu91ÿ¯–ãYÊ@1óu³é§4w*ÜP¢zð¾-ð†ÊîÑ…ÒОŽUGÒ¡ËWŸ‹­´éê”­wv,_B¿ÏÁóU=û9—”èýµ†ï‡5GU•ÈÃné'ÏB<ËŸ‹o‰Âêþ°±ÒP0t&Šâ[11{£_¡­—Gù¹R÷Õ–†g¶¡HáM +BT¢@1[c&ú$"àMNR› CAMIq.Ít Å\{!‰Åª³u[(Þï·ÙuUÚß*~†Ü¦¡x©Rƒ bП<¬n¨…ò4,ºVü¤á'bè^!òFÃ+Љí*Ý™fšA1'­4ê¨iQ”–™%gïÚYµÚ½ªË·ö1ƒÔ’u/܆"\3%•:««uާ¿Ù%‰ÕKäc:Š¡“< ×Û‹åÛ½ô›‰´ŸmÝêFªf(ëU¯~~ê4% ýI+ªŽ¿ÉbÇtj[¡ôÃxÉ®P”j½¢\«ÐÃqVöÎÙaیۮÜ8 ®2Lët”þ©³,1uv°Ø.äïᨩs Ó<²¢½—òLÜcDh{åƒq|ÆlؘûJ ø]|mè¬'*ÇÈt­/.Âï_Øìº.öÙÓ I N}¥íc+Àî¸K©Ôl¯ynú–Ê9aŸWõ½ßÅfd—Î-¾£hâõéíÎJNÓ¿&4w]78”ìWÜqÄ“-œ:ËfgÉH¡k>¿/{WiødH½–øØ/éXrÛʾk7Üíquß©.k JZ`h×PvܽÒŒŸ¢óžYÍ;£y1Ÿ%=ËŒŠ¡øÅO¥l“©~‚ĽìºUÐdèæ{Ø&ys°y¤Íö• 'Š9±¡èºs•[¿Ç£Ò˜5ÖŒ‡úrÐŽA/ ÏZz mç& ¡£v-,-Sjveûk‰âÅ,]-{¢·[“ +Õ;IB3éHS^á6÷ ÊzQäö U}—úÜÙJdH«Ц)ôXãátñ€ŸL©@ë_4|mLâê†vúµ„ÎÖ"§ð]úùºù_#ëQ7ÃUCŠž^[Ïeê¿“–¿­gn1tÎ/‘\C;Þ1ó°žM­4?*:&÷fä×0BZKí 33l¿ÊŠÞl‘±ß_eèú=‹¯fÌú}‡â²‹µÊ$B+Ê 3,ÃpÒô€ÊÌNÀüJFhÓn«¶~Æp:PööfÆÊÝ@a»ãtõD¹T·.Ñ·S]êó£ðâênÒÑ$+5JºÚ”š|8º°â>ýªk+Ñ=ŒkÔ®Q×´­ ¢@³+S¼ÿ$Ea%§ÝA+ªK\SÖú¾õÞpZ#³//;Üù +õÒM/Ðך3ë|éïHÁr!YWe°‹CpæÍ/ÑÿÝômy¢ÏÏv2ÑR›.¡ÈW6 F0´eäCkЛQ|ÕE˜œºäYRÐ=ÜbJwB×å >Èñ÷ñ¸,^»tÑùK6Õ´Ÿ”Ø™>nëž+TÓØæ ˆÇyÝm¥ÌÏVNZ«v÷­É»«»t£³"¼gñÏy”ÿfX•žý*Z70«géé!ÐQèhï†1*îqZ€ŒP=rûz]aîh`ÞHX§«35Ðñ +LJ /PÎúËj€÷ÒIÞóÝ༰­}Ã…ÅÚÛºUPòexý0¾gÕpžq£I¡_ÕVÍøÿ#a¾³ó´3[oƒNLòÐêŽuÂý¿¯kŽÄ0sEט¿0äSY¥:,3N;Ëúº1ü´²æÎó¯Í´õ^[ÐÉ¡|w‡{ÿ6&åö»1d‰®—¾§’#5e‹¾DGkïÀ@Í {_ÚÇΣÊÝb(_2@WÌnèHiAeüÜšêêlnÅɯN–PKŠ+¶EYìVÚ%¬…z!ÊyQ†Åv$}è +(Sñ E_’5:+~“üÔØ{ëS±o•´`<Õ&ösF¡ÖòÇÖL +Y³ºâvÞÊê–éQÙ +ëg‹:Ч‚”µ:® Wפº­jƒ£$£Ìcg䃙@È’˜ûºËÑ5¤èOn”¢¾aTRÃç¨ÚèDy„5=nu{Âÿýõϯ§jšÿð–²ÿº™;¾‡>Ssñ;¼ëvâis¡kÂÐ ê*ÇK™4W2ŨívÕ'ŽÝ㤕@¡©Ôf|9\® €ÛYGÁ=FDÄTÎÍA¶ÅŒÉBê ]ñòÛ×ì•‚lž¼ËšUýÿ5*4P9Ø@òœ_N°€hqž|2ýž]ÍDbñ Éõ ©òj s¶a¦@Ô¸î3ÖtÇ„có9oED˜&Ÿsp¿WMËÐñCŽ+#bé{¾exD¨3½—ŸNÐÉ“CâÛãJ˘¬`â8ó–P½?IXBœñs ë~ÙX½Í­à>qO¨&™½ +¸2E¨ÞóB¬çÚ(,›þñ㾌~Š‚ßá»Êƒ”Å–8Ñõó˜-<êóK7ßú䟧ƒ¦¿.¨¥8‘šã oJ`ëJÄ|h!q”6ì +â†üׯ»Syjº’PUÕÀäêf£X7•r¶Îã6VA`¸w› 6$ï|7>®êÌË{göÞ{y²kâ0¼eÔ\uœ‰‚*Œ ¢¨×À=Q +ÉËÛÉq=ß}>S<–SPíØ/“´Ô<b ×ü#›jî•L»Õp;£k}ì:ˆ/_Šx°µŸ‚Ùâ†ÏÔ¸Ó fu½1†YCÀ>$ÛJŽÚW¹É‹¸D?‰ÍÍçOñ˜˜‰—sÒmš»fbßÔÖu]+îž~Æw`8#Ó¬·Ô§Y½u­nÒU`h«*¸–WQ÷IÍžXÆø9|gSGÑ©qüôƒ8ÈZe š©e×ÜŒÔÿ\—Ë•m7DçŽÂxéƒ~q8 OœÿÔ(N¿çYw] !¨*$ ³@½Í¦¾á>}®6=¹‰8M_3+øÄõLûöKîLU— y¸å™8’ÓàTÖá„°[@0ñÈi—Œ-¶i¹’¸®>¾dKO±r }®ÄýéÑpãñh×牞à„ý_‚#x! +AÒƒ +ï ¯˜Óëk»ÙÔm}¤ÆVV*)HjD˜ßr¿ì•:Òè +ùeMc#ôùeP2Hä…UyN7_×EÕz¶#Æ#9ÔÅÒýšƒ\1UÆ%М‚‰íœùW‹¯Ÿ&ñ°ìû±²\—»€_ÂWN7npɉnM=âdšj´Ÿø  ƒ¼ Äuåø¡Io0^ø!îäx÷jÊÇÑí/u•¸3c¨x†œtR¯‹+E8“/Et¿Ì,4^‡s }n³¢ds£6Þ¬ç}#£äÉ‹IÉtùãö=Ŷ¬W·æí[é%gÿ=…yäì1¦ÿ«×š ²²_NctbO½æ"’3Àñ VÍ¥çéëœ! Ó¡¯Í$,þ§ïOk§¸]O°3ˆPÒ›#×{sˆ;cVÎqØðZyWÞa­¨øÍ®Ïí.Óé>µ¬×%Ž¢brK˜÷cÝ×›fËyûÇ¥1«m7u£°yc„``åý +L*œGºTê ³d&•öóüB¥/[Æ8w‹JÝ/8ˆ*‚|7¬+ fª²ÉT-ÀÙ‡žâr‹\çÖK"Û#ò‘õÖ×5|!¿£e/7bÔ?YD’´1z½9w³ÇU6yÕscDÄg-]ˆ:"ä`›}VÁõÈ‘;uušóý {Wm±Îm/ÀÓŸXËz˜ 0ÞØÔÝ̯±$»Ll¯•h¼jFÖ9¼Cqæ\cÝQ:M)·üš~.‚Bç"€xæÚ²“ë×mµ%šØ´Y4L¿•¢üºP&0@jGÍ‹aßy:6u¸c pð¶bq(²=?É A÷³°9óóy£@„m(vvOÞ+÷E‰;ʯњï>ö‚§gÐÞ·åËÇhÁw8b–`ßçSÃõï>Óò Á¯æ~'÷ÄhT%ŒszOp¶+›k „MNåÝ? +°ŸV5Ó–Îic†Î qtÑ#긳d|,ÐúÎ õ=¾•+‰Ô)檸paN|rÕ¦]}>¾ÊÆç^aš&]WÜP9Ø|~P³Œý3|Ò-j¿éÆ{ŒiU›ä5z€i(ï3¿†á§0T84:ÆÁ)˜(AbŠ#œWN`]ÞwÑ`¹°ÞŠM^Œ!6ˆ9ê žöJA¨ðÄ0OdrN ©éäJãüÖÂ}âjKF¬ l7šVüv“Fñ™gZ-ıX€>Ü}ªÒ¢Ï1šíS•;Óð´HA‘k³›Ÿ{ ¿RªÓrek³(¶rrmÏMã©¡êÒÆï/ÜC­ù“·V¢¹×ëv‹…Ãë +ê{Ÿ»òsìÒÕçüî{‘å“3Ümt!”yåÊC¹WÝáý¸Û.J@ }^,ItÏ2Nni? mçÍ]!~¨tÔ×LŹä0bwÙ¶ÞVOÐg#·¿Pb ®½fÔ»½£Ä•¯1íÛÁ°{$8Óh:x¬iîíúN°r´9<&×WòÞò:òæÏO:„ÅéQ]qÐ=Z¹†×‘G4› VwĪeS-\ì9™"æÏ&§`Ê6&@äú¾‘7¨ÁK he2'CÐNpÆ[P¸– ía .\îIpÎp"þ¼ÐÚLÃ7§ltíÙœ[²dp"ñ9zͬ¦âzí}ðÍʦÌRÐQì[¥=œSkQ„>îô¼ù —›°UìÓâË…<Ó˜l¼EîyÊMûM¥(ô-±ÑÚÔ–†ûÈæÅLm‰© 7LïO‘«ƒ#¸ì–p%l/ÛœDÏ:¼¥*A<¤¨½Œ¤(ÆŒZy"€x©±t!¬q’ÙºâG7 í&í»G§;uöš·qæ7–tOî­—ÀtÜ™[*",rOÆFSfÝŒÝ\è¡© ú²Â@ëo M>RPÜÒüæán†ÓISeòµöd6›:g?·ÿ¡_Þ *ì™ÓÁ/JgÎβk8¼¥=ïþnýûüžV2+ƒb¤¦ÉSö-ƒØËótü¬‚c ­$Œú|îYv`UBx4“í­îþÖÚ&‡±^­$5›7Ýè¹Äɵ|½F÷7wWf±yûݺ¥óç(ðê¸ßôD´¢É°­m»À.Ûñ6ÿü½#k÷¬Â¼çÉöý*×d ç—ÛÊ“®nБaâñG}‹@mùT;_†ºNAg¿x–l;,; 3ÓCÒhö=éŠË~’>æÒçëUqð¤Ê{`½×–†ØÇ©2ÚåùïþÊM† ­œ»mX¿ÏæÂ>¾‰£rîFåü>›87݇ +,Ð0ÌyvoÚs0hh,Ú«Š¨Ã\+ç'ŠD {œ´F“ð³ÁåHçæTl†/‹*âÈ;»VnF’\ û•";7Gºs¥ç>>¼Ÿ?;ÅfsË•ŠK±±[ã( +&ê<[ޏFB%“ yò©0™eo.¼CÕÈ-<"¤™qV×Þ‹ñÂE¼j/Kµ?­îƒ•"Æ,ðúÏ2ÃYme³%ö£õ«…´\¸iŒÊÝŹ`LnêoIâœù1…¹uC“Ã>n¬JüV¨‰ƒ^/õãD]‚¬«ÏºÉì×'“½~˜ÝÄíNIOµ ƒØ˜¥Û7ºÂ¾W÷ ³–ç`Ë L5÷¼aT²\ÉZ~þVúûþøûaÛÇÿe –Ûû翉Â=QúѨÅhºÛŒé*Ðyq´ÛûÐ3oî°Ç ² ”Äi­¥Fú\åõ| u~´DÓØ—ÂÅoÚ–ÔVx·Wèl–áb8Âï'ºséA³+,ìÖR®ð-µå…åèÞá$½nÚEò¾–ßÇÑKI|kW×}qSmÿ #w¸ó…kïeÆHÒøÖš³S 8՟ȬedØÉö%g¾•ûrVû"›óe oäÜ’);îC¶¿mû»¹-z~7Ñ>µíi?W‹¶ +ô®¹¾§ì +×;z|ÏÞ¢œºÏ»£…‡Žl׊;t73ãÛÖFÓöÖWÃi2ÐݾûVEƒBÂyßEFæËÓ6ç =DžûR §ÖÒ€¹Kâhg EmîJߺ*‚¢KVÛ’rËÀî¹Ç„v4ů6ÜÖ¶)o°ì¨x.u^ž.Y Ì…Cà…8ó{¼Ì¹…²A¢ç{^(Þyâ.­¶Å¤ ?Ìɵ·'ô?²«%kÎT‡Í³ŠÞ@÷ÖÑKȤ'wÿÓ+ùEUþIN¢PþŒ±%YQEGQÏ[¨6š1|> r™ZuT¶ÀÒÐ3]Xz"yaxr‘is”—€ß°9 ‰o˜~µméN +wÌå¼G7†jUÅL…öCÚý..5m]ïà­€wÚ»Dè%€¡ò'ß’kÄ´HŽ'?a*ÅDj¢00Ç£¢⺋$Cz÷XùæØ ¬`Ð@ÊF4.VÌîhÇmªõω³‚u%Q:c(Dfëc%çÅ+pÖ +øïþ¸ kHSGó÷Êå7Ãú7P0¦u>P× +IÅ'ÊÖMc¼ôø~I&c¬@óÉ6*¢k8ª™Ø+4¸(Ât`ýÓÈ,9èð¾ê_ƒE–D¡âq|à ôyýnXæâì4ñ»á’‘–Û6ân²e&ŠÇ¿mŽ ·›æ[Â\ô@¾É»áBP2†aõÎ9BRv[—:нÊ#¬†ÌĪŽÎ‚bO]Þѳùþ@Kéö.C¶Þ‘@äÚã¶pìDÑ߃Òݹ]^Çö‡'¨³ûT"¼?ü2•ߎbŒô$ºÜ1`®1_ù1¥yv“aÕˆÎè2–ÙnÛо¨ÅÎŽëÔBÇ\ð–Û úZƒãv“]»Þ"BsŸßb +åɨSn„®Z3ÀK9“ÈB~K®íµ¤íéÜ^Ç/Ö!‰}åÇš/¶Q͹¸ƒëè÷&z†;,ˆÌ¸-[l·Ô#ÐàȾƒNzX +O¢hçáa±ì +¼Ú’pˆêZý$Š[®Ú™aq±uC•eåQ¸¹G¥µBAtñ±–Ê&âÊÍ›ÁÍpgä”tS7C5ÝP¬…á,æ^´aã ”6–5¯ H/m¬lauW8©vê¾ w¤GGooáxN¬«îG~þmiüÚ.ðN¿ÂF¶u¶<\æŽá5t@WR1Ñ{vøÔ>êf²¦›9°•V†4¿Ùþ¸Ø ¼ºS–:ù|ýÖ[Àùï¡ï½ž;Røú¹_m÷M¯N¦®®éiÖ¥²Ñ„{]ç Æ}#Xd=±Ì‚e7çÊ¿gT|‚îóÉTZóÄ0½ÕK(©§ [¥“^~´ÆÓÛ†;&¶‡Cä cº¡(XKÁÂA™ª}í$r MPî’IÙ騡þ› &Ù`|$S ÿûBˆÎï Ý —?dFÐiä t¥³0¾\×Ïba,fƒ18ŽŠTX8üáp—bw°}2×ÜÕ**ö k ¶£Vh' EW·b•#c•·ìý莀âäÍ(¾¥ ´Á'•`NÒ$Qü¨xxP2 ÅÂÓ“re_¾:Ð9{Eˆ&*ØX2‡æìÚ¹ô.ɾ¹H‚w[¤«ê]¸g’6г´8ˆ)ˆ¡0B5>kîëgÑç'x`Yê†bÛ«6÷†î&ê§P§g (Bz&ºW)Dð3Q5ëNÏݶ”?Ø™ ³9;•ñÄØ™`»ÄœÊ‰B1;Uy„çôÜÍ­¬GmFÏÝœøcAcg‚ø£²uv +CÛ»ÿ=L¹>Ê6v&ºn›ïh‹³³ÏÇÙFÏÝ6„'\NÏDÆ7=wz«ûÈÑé™è–Wr§g¢k=Òvz&ú!õÁÏDåC"œ ‰¶­U1'è>Ù£BkMtŸ'ÕÑû@_mœž»­Lõ­àg¢EÙN΄ÞÓ7wó‘%%ÙÊ@Û“-<ópÙWwpWPCuab“›AÞþ}€å‹Îèž¼{ÜÖXz¢øW«1n†çĈ%YÉ{ÆkÉJªðqÛPìwu®Wº¡Ý"ŠyI%D瘻¬äÒá(Mx¹a´Ò1–±øruÁ+zö,‡ Ûá(|ñ‡ïÅ‚f(~Ô ÜéEï}~zÛÛ +.¼ËÑ«7>¼h—Sy:ewPÕ­;(ÏÐ5Ë¥Ã^ZDÓn% OC;©œsŸW …¨ÍÉ1|Li¢z×zµ¾7Q©U£sôj·õ‰ïQÀm'{ùØ—‰Š¶² z.+ pJÔÁkÇ¿†©)›GX±f¢_mŽf`‹…}%†BL3ˆµ~,˜cs .I׉e‹©ÿž±ç’‹ÿ§˜…l劊ÍLEüÑ‚Œ®Gâº7÷?\‹üc£…Õ +_÷x 2®#PMpœ1g¸=â«ð$†²¶NÛáyå})Ó¼8TU5}"ºA®Î³¯Ç]ãÖY¾y”¶ï;”Õk»[lKáÛ=êÁV2=ó4GQYîFò¶'—¤æ…"ìæMÓ׌g„ÞŽ#ÑJç¸7:È–Þv¨c¢Òtz+Á¶ÜŒ )o» †9¢+Žwþ É w^c + ^WÙ™Èvjth2¬W>ßo NÛø8¦¸ùNŽÎg Ó?|¤ïLÆŸ|n¸` +èêÌÄàd–~³Š] ´çÍÄ4iië¸ù± qv +ƒmzwPUg\˜ƒ˜ÜóïŒ;hE½Òœqñ©Ìàîn>4¬0YZíÓÃbcù]“œïÕ›ÏS#äöõfƒ st&8œÍ l.1³•Ï««Ôh÷–(š°¹òÂzkfv—^{jñUZ˜TÙRDzÍ9B¥e䔤Ìð‰ª—‚¼´Ð=BåÐ*ÁJË7ãìÎýPIÕú}V¬\Ê~NK”DaúÂÂt.#Êf%§R¹ḭ̈%ýY¨ÆQ5êM£°'ut®nçR˜=aF‘œV + óçè^gWŸéäî>•ˆð‘wØ;¬Yutî0ä‚…ê-,*8jÔÍnxg6q]ÍÞÊPlWö ç{«,¼$6½ í±?ŒÖßÍ(~Žv-Ò…g‹t¡®£zì´èLOÎÆ‰q‘+p­ôÿšË +;Ïç»F«‡€=<~ 8ÔGÐÑÐŸÛ +FåàõvR1F-v dó§b¿htçôLØ€ßT8-f«h¦´ˆ¬¾i9ø,M +Àòåg1’'Ǻ J9QçHÆÉ4_&IhÅBÛ‡R• ÅÜ3tpz‚Ý–_s‘ƒôDû´ç¡¾ÞÒ¶,@ŠÑåyìhzBÙ;èd|=|j‘<$Ѭ2ÝÀygw·»Á9pwM»à01’w÷˜âgâ– Zµîeš3›å›3¦–~õfúÅAOU»Ë0t zùò@×Ð|Ktió°`Í^é¯eŸCJ—a›¯¡÷<†F¥ ž£³@SD1à+¿u¸9Š6Ag¹9:÷ù³¡Å„ݲýï׿¿:uj(›uÆêø¿_tXµToe%óG üþõ7Œý!óöŒóã[¿¿RÀó4V×R¸Ëì`BÀ@@²µb€l ±' ì!çÇ·¾SX° r¿R((Ž+äòU¡€ ++¤âüøÖw +J‡Òûxˆ‚XüËùxˆ>¢°B*Îoy +4°mƲÐ/Zî…¢× ¦þe¿©ýþÅo‘Ç J b|Å¿ü7|¥™²-Füzf]P]íƒåË_‚ëOVõëT"èç×êþ“4z¸ n ‹—`Ð&VÈ^¼æ7V€Uaqw*( +óã[âlðgÈ*¨€ÎUè³…X!Vžyœ*$ýüšg–[„ïÿÙ.“,ÛZV‹Öo+¾¼=Ì“öDõïù-”L=µˆy– +Èn4JI.ÐGS4f¤PÏB5ð÷]?Ñí+R nžX[BJÔÁ©Y¬G·PcJKP™’Hbä_í”üý£7"PPeJÌÓu cß:2 Ú‡%¦C윎DCA íb:žx×ydÜ>߉î^™žüó<”¸óP¦Ä<=ñ.Ô¾Úu/Ê”ÐtTJœeJÌÓﺧCoA™Ó!vN‡Þ‚­b:žx÷y ‘Ûu/Êü ÍÝݾ&÷N¿ûÍŒ¨§'Þ}¦ÃÎC˜?!Öáö%:üîy•ÕñÄc¹{GÍpU™{&Äν%4‹ž‰óôÄ3ôÈùfNQѺ£1%Ö¨ÅÎusŠŠîí:¼óôÄÛ:2VÞu[°¤RçT¦D+Rí\ÝæôÝ-t•õôÆ»t¸>fQ…)Ñ¥v®iT[¥Ê´#>ñ..O5ª2#’fgyªQm•Íø'Þ­Ãú‡º™í jçú‡FµUNw¢'ÞÖQ0º¯'x¢°MÇîÊŒ`úˆÁì„@ÇàYK™õôÄc]Þ+ ð‰•´îgM¡¡¸¾$qèfªèï_ÉòÖÙ:EêíGT=~Æ}ŸKáù× ¡ˆ/¯–öɰ©"Mûú¤Ì !óöFÝrjá)%⋜7¯bQèPÄ}Ó8SAÿjà>æÖRooÔ-§gN&èNÓ;gª ÿ‡¤Ld«VJþþµÁ‰ªL‰:ºƒñ°œyvÄwåW¹Ó·*ýC¡CØê\ß f*J’ìßÖRooT–?zÜõ ð¸®Ç!9v±swÓ‘‰×ÝRWW3UfíTYÆLÕûQ…š_Ê©J©/üñ•§ð……o+•™Ç±ÏÄö’,±Í«2 $¥âô¸Š²eÊœ»+*‹Á·áùP´|?J¬÷n+ß k} +Eêé & +Ò5â›óH•8çéHËxREæ)ýHK}Ò2ïT‰ó_ ¤%<©"sv‡d)8ëð> +­sh׫”YKScßúêàØ¶N‘w÷–û «ùG¡étÖÅÓn/¦îQ(M:-sÌÜ]QO1þp,°íF™Ût¸>u-¬-2%Î×òNš³ãI’øŽgLû˜³vOóį4fߨG1’´xœÇ4˜z=R?^1swE=zË!F{‰³vÌÄÌçÝÔvâ—Õ÷ݼ£>•å¯U–uJcÖQÍÚ÷^+$[iÌy|cŸùì%Y>›W\ˆ+Äéq…¤ËŒ9wWTÓó;²÷qìJ¬¿©¡ïƒm>#»"sv‡”Ûjôš :D³@˜¸s3D‚ƇÌjÝ­3dÞž¨&gàCÝW=´…¾G¨géCº1@b¦Ž{ºÌ1swEÝb2Ý^Hù¿ј0 B 1ä~[,Ô\ÿû±†…‘X.tF›¡8K3õ¶Yí±×ÅJLÂ"¥Xœ9ÅÍJÍiÅÀ8Öçfy.F RÉkQèQ‚¦ÚêZò˜ Ž6ûb14^cíŠd—…’cYW’ðǬ Ô8Y)Ù(‰bf”þ$„©j£^ +["‡™µ63ÈݬÂÛØÞÊÌR˜[2„Y)*‰õÂîr¯›ÌÚxUeîóHýg±”[X*Žr3¼yë^ÂÀu0Âæ÷ñ"?Úf¡¤¸î¯t\ë"N+Õu”)Æ9™¥:÷6ñ|¦²ÖáH¯x^–¿ÜCÞ¨wR@©„Ì2þ"4cਠG¶6VkM•Y}eMK˜˜¥Ž4&6CNÌBL+Do|ùpÓÇV<(…˜aKÝDóîÌJ+Æì³4fyÒ•áxj‰EXÁ-ƒElCPÍ»1àd‡¸ ¥.F³â°^ܵ’—»’z—°·K¬†Pe»¡Å©,„¦¹{O+È#fxVŒŽ6ÀÇ×q,K "ÈQõ÷<2J[h_q' ä"sÚG0ëä“?NÔFoI \sY¬õÄ»˜³PYSùµÀ©‡sÌ}1Ü€dhìqÙb&ªœŽq¬ôƒºÄÙ„‹á%bè¦sùË!±)Zeb´Bf­o%r;hΩǹoŒ6½Ù(™o¶NnÎ-ñ=¹X*Ì©ñ561¶²xöÆQž•4y0BÆäì\d`¨‰mŠ’á3¤x±šYÈe‹CKç 3„°K'Óû°Yl¹lÆ¥“©÷‡í Ï5GE¿gQ +ÌPýÿ¹.“#IoßÇŠg7€¤2A$ÿ¯ïÃÆêê‰èˆ‰,þ ˆ%‘Lê·ÚnÓuŽ¡çÚZØ0ÕL¬{Ýyk ‚Mßçœ8ÙãÚþu/iÙ_þ±€4½úõ[Jh‘¯÷‚Í{ÇW\ÀD¶þ ®žŸA:rÆW.Àx˜|ål1tfj¥ˆ"_6OòXUÊ2¦è_{ÉWÝ-¡=º“_t·hž„òøLl¬ýä;ÔÓoñØþÍw‹îÉÆ{|‡,l¿ùLóÝJïðÝÂù$£¢»eƒ{¬/º+Š_t'6Á¾éNl‚ùIw@ç‹ëÄFz¯3=M-4Mðß^1ÜÙæúmá¬BÓ‰Ýì4ù`¦ºfrÝ”ü½|:®eÇN³â0L÷Îsg·àIâ'ii&AcWfúG¥Ç»:¿U ÉvsÝš# ˆ/ó*y-˜n‰ü#¹n`ÈÒYçæ·CíåVbEwJšvU≄1¢*`§- ^WÞhÒÒqnºL ¶ß!rt%¦=Ô‚Òfbû·‡pÝeï⵫YîAPÑŦÞWa EöšÆ%Ž1N™#º®0WWœ{\ ^•9ÊQ×sÐí{µèÚ y¯eoš§¦ÝÖîyïj:]Ï‘ðža¦ÀBô3¬[Þ1 ‹kEL¥î•¼yšt ?³{ýêþv9Uxc„L…²>Qâ+ʾõ%3Ð=ÃêÉcè¼6b“Ñ +´Še,6^- {ïXeàû¢±V¤òSÝ7>…’ò +¥¶=úiw–à¢ÕW™v‹8tH®2cÁô´/RÁš.°=Fѕθò¦~6V“»L?öÓAb8&‰ë½-—™^ç°v3¾§øŸ=#w™ö!ç>Wd«8wQ,™Ò%³¸¾ÅB2&Éÿè}õˆIeJ-¹ÍéáŠDé¹h¿K^Kµ³ÕÑÁÖX(älaÒzgzMÞŽÑE%±ØÞ#;΢ö’ÜøîNÏŽÚ¾[à»G‘³ À™y”#{R‘‘mÅej¥ïèFeŠ—è± DG­”mÆ$„¨–c›-„2pÔ&o8V$tì½Nº8Ng:wa–¥¨¯D§7‰­,÷ךE­ØÚh®8Kù­Bú$³³WÖø¥‘ûÍLj¨C)‹¬›»nZ¸aœ¨$ÆÕD—­+"üžÑh±N¦¸ÄyJT3’WË…Mgô¨æ%YŽ—€hGq{—dŽh*ÙCƒªoðF†âè-ô„g&ÍGdE¾¶Ê»”»kFC!€luz™%;;(¢@ !8~ðŠŸF…‚»^]†ÌÝAW}i]fÛ[RÛØõ2ÈÈ d˜Ö«»šˆ5ª†ž÷МàšR›©M@[²èìíEñ°Æ…Õ¾f¯£»ÇLí˜êRy0%sç ÕÊ/Ì×cr)Œ[èä 1¹Ú­ò;¢Fp`¹ÀG\fSgf2âg\Öñ¦W=«îþk ‚B¸‰²PžBéÙ©k•YlÉÉ™<äm’“žo…¢û$\ DO5Ÿ2 JŒœgÇxcßTgV£ÑG…j©P‘²°¶<»ëh¢³À!!Ånç÷Bç.)Æd|îιJJ±Ú<™¨ÎÇPP(ž³ä…y›Þ²9Ìñ9ÚR·õ¶xStm¼}GgOÑE#ë;KSzJ±¡7] Ôæ{Ù’—AWú¢ÀL»?&7ã¥w¼“e¸cŠä 3ÕÑ_S@|=Èjju¨óÝ—vÇK.¶Ú!îçèÜ©ÊåGr¶ôŒ­êýW9×Â’¥¿+`k©žì®ê ÞFÙQz$cÅÊíæÅÄËšÖˆ‚ˆÇåí°µtç#âE§:JÀZ1.Z&Aµ÷²jbà8¸ÖyG¡NÛ@Q\Á +FL½§f\+l¬µ¤·[{KìÆlÓvt›´}<Ü-= , ûÃÃÍÝe’¿âF¼m7 Dy½³AÄ}Ãb÷Q&DÌbf(ºC1(8ß„Û( å‘ZX zØE,ÎzºÝ8´5yù¹wÙîÊ~Ô+ ,?jbaŒšžÐí躧ÕY[ÕQäÌ*"¥ÿ¬D@yùª(|S ÝÔÓãrè×h¡3ÀÊÅÏpŸ ¿nd^5†»Ž¢@åSÝ#ÆŸûÕ¹MŽí(+ënóô  g)âÃ{¦‡Ñ4d5£wÆçŒú׿ðøÉ“SÛ@ïy)}”˘NgÇn\ý¶´ÐÆ£¶…V˜Žòs/»а€ÊѲ‹öñ†ÎGŘ“q’Ö^ךּR6î«÷"m4|àïEa®cÜÚà˜þÐ1ãl;ãƒz e.<í_ k¿˜ÍÙ$üµ¿Nhö¾úô0Ø8?OC¯@é9ù˜½¨ÌöÌÎÕz æ=ýÚ÷þŽŽÏ.ì)V}A^L¿ë¥‚J$žo ¬sEƬñ1hc&Ý@ì6S÷®›(FÈ«@üQ]]NdÀÅï‰ö,ÛAN9p”Ìê8T¶W2ÿ>¶2~ÉAx1ñ°4[ Jk=:˜©=3À5’Q´5éIX÷šûŒî(™z²TkEî:Œˆñ¹¯t¦ÿšuæ}"ÕŒºR\­ûR›‹ÿ«\ï4éJ°ª0l6ÿØ\œiÒèy*,ŠÂ\£Ö˜©ŽUQ8c}+¹TP™µ2­ç“£³ýy7=Ãs­5¿»ÖØ )WÏë«§5°FÒ;FøÊu«g°~–“5بéƒ]‹?Øx÷3Ü?wÔÇm?gYì´ +Më|¥†D]³¡”±:¿cy·¡»‘h{M_BQ̯×ü諉êêz€0µN¿¢p½Šøî@É÷ +]ÿ²±3,J.žîW²c¤<Á˜[;lÇÙ·bkÚä°dÆ×ÎȳÛzÌ{1þhùÈûb¯bø6VéË;¬DE—@¯Xá^‘í­ja(¼²½]tÒµæ”_ÝçÙìð>3žÕÆ,JlÁtbμ›xɳ¨†¹9Z„¾êÒÎÑ 0ÜÎMCñ¿Ók×o}ëRî>½ûMÿ¬ݯL»¢ùû‹*LóÚ>&Ù›úü( +üMbiÅä s 2ª+ Ú®eà^†wˆÏúcê3ìÜv/Èb%9+؉ôh+ºÔñTX׸ÎÂ2ëc vö³<ä¬l—Wf¨i»’÷•Öœ[{Û™Êä<Ø73e±QRõîݬàÐE¨gTOž¡ü=ò2‡X!N¶’Èu‘l¬1ÕcnW(¸¢g#Œu»«h…¥Ý +ÚÙ·øèˆËÅ«oÏiÇE’'‰âÉEþ–Î¥C‘W“ ûVWqvûl'mГ.wg™ÿèss¥®`G·zùn…:ä¤C6#ÝÆˆâ€ö=ãìÈÅ£Ìð0sÖYV;¿þ}W\•ßðF9“ŠžîŠ)tGu©òZî²g/hPÑcÊZ’X;m…ë[Ḕð +ŸCÔ拏L¿£èya]±+:ã(;ä.°…#öPy±5Ãúî[¿‡Í|ÛÀñõ¯^ OXê÷å5Æ «>æ+ºs£iø²•pßhç÷ d~b¸_Û¼ÜBhÀ™ýÌ„'ïM]¶˜'Ë#Ìþ5có‹±ÝÅ+¬r&¿» (ƒZ{P«¨m‡}ÏI¹}dž¤ŒŒ +©ˆßkžoxǾ-V6VÍD1.×ÑýnE€S¼†ôr1Øc¤=§&/HeøƒS·w“ïY§/ŸŽ0Æ}öXfÆ:¹n˜ÙÙÖÉI<Æð÷Ôú‘°–úïuwHV¸4íÔú¬• ìÝQŠ%™,eO£.`%(OåZAÞå%¯ŠÚSCÑÝ“ÉÊñ6‡ÜWâBÅŒÄÕÉÌÞócíêÂ0 +œ®dئžûèÝÆj÷W© ›’ú ÐÇßKsì÷O[Vò¶Œ‡ÕëýùÞS_ÙA üÜ™+Cu—¡,?½D÷¹4<õIƒ£oß"[ÆN©§cÚ͆aTthº:‡êØÁ¿—c÷”‹y}ù—dP¸³ûï×ñã¿ÿüçž.ýþüåŽ>õ§ +¾î] ˆ™ßûî (z¨„)ªû©£ý¸Rtªµ6t¶]g׎P"ß.¥~žîS<+î±ïìÖ<¥¡0ÝKêö°X)g[CµE1çïê.´ã(Wè…®ã¥Ä»W2Ô†WQlUE½¢õ¬³"q_<ºûSGãfwp·Š‹ª«ÕQ†Î?ÆGÏ—Ølñ±ûZÕ†•ÒÃò©VÅ}jk íýTqoÜL5«JsÞ t±&*ÃSx8«S¯#7Â2u–®;J+.-«(ž“…­ÒíÊ+ +BØʲû‚"Ö¶õœlGôZGMÑÝê¾ÙÏ¢b+y_æÛ¦B ×³Cà@+TiÆÑåp®X‹]>]øçÌo-àôë÷¶V|:J‚îÆAïÝ6R›maÐà=C1¸uÃ`ƒïÝÎ €>G +b×Î ”ÑQëzêyA1N×P–¼™açÖ’Ò{h [L¢ãª…eÏ|…²ÎCùU£gÀMVíÖL8Ü+’éÂÔFc˜Yf§P¤ëÚçý.!ÓÆ¦íoºÚ±t!U¦àdFSAíê$å­ª˜ +¹¢jÞ¿ª«æŒS/á½°t%”,êª6tò…|wx9Þì}4}xXfr':0–V8Ùûzô°ÈàJÂÂó[ÉPuú"›ÿ•ðÙÕötìWÛw¸å]1jŠæ«=(x¯8»31İ«;7T3íMŰß™9 )Ê…·GÀñ÷D§ª–£˜ëèÖ%Ò‹3^eáí~7ÆÒ2S”.Œ»õÓ§£òb»£b®h?æ“»­æ±¢êk¤d„…A÷ÖÑ-fº]WÕ#¶ +€A²¢Ó{óa(ŠYÞe³µí)@)¢#f-€ž@ñêýºúMœj¢O·[LÈ ´C/âcÅÑ(*/>lÄï+QŽø¸|ä r0–g´á‚ü4°ýlë7Ãò>ÇÉ…Z¦;·RÕ/»øÙñœsP‘UxË -™;?6Þ• ¸~òfƒmÒyóf‡p]Îyw#>"³^ >Êœp?:¤U±×£ríh1Qã>]¾4““/9Os©£[w¾/f[ÝðT¢ëù›ñ¯ñZ¶Ødþž‹T˜½€5ï.‹ª>‰ +¶ÉQž2.Írä/Y´6wê] å&ˆ†®Î9d% YE,ë(øo¡l±!×ÍÅÃÐÞÃ7=¸'*aý¬QÓׯ t»a°I%‡0Ïʰ ×3ä{ú™7o{aÊpcju +3ÍT»£Ð4„Ÿ™ØÝw…I£‡ëì>‘. ÜèßÙ¶Ãûµb›4ç‡lëä‘ëW8'§WQÛz]7&RѾ‹Nu3<£o°Õ®*À¤ñµŸ‹½õÂZÔÛ|ΞõáÔÛœíQ±â"õŽ.”êáOÕÙý[ÊœÕ +Ÿw÷zœ‡÷/öuÝñj­Ÿ·y¤Ë åÈiÈ^þ–£aYÃ/†£Y9‘*G±#õÞòìBácÇ¢7ixFÁÑŸ—ŒM=b#|Ð|¿Žò÷örüŸê -"É‹f;Îy[R ¥íל­ÜѸV|+[ÅSÕ¾ÚN”Vº†6¡"F<é0tÑJ 7ÝÆ@áë›Ä6)j7TΛuÖiXtIxE˜Ð°Z?ЃEû ƒ®¹Få˳‰¡ì¥¥FüÞ +‰©BûêºzʶURÐI=‹Yƒä²dëÚQu ½g^t¾ÛòÕbOÅÏÌl¦oxX–—’T¸DÝh›ÅäØL(YJFR¢Î¦y =(EÊ÷XêH7[Ó׎²]ãôÿ“]&¹vÝ0{/ ÔjÖ‘MdìšÃN×v x¨/éJlŠUUb66â™?3›gG¹lˆb÷œ=ÐñÈBÏï3ç_÷Bè¹?lJÊh:ôñ­iê<á'f\z½j@Ûx¼¶dYOƒ¢ú;×ûÛѽÖ;ׇŽü*º\}¶<@¶¼¥Í…²¡³Ÿz®^]qþ¿ àµ$Ö6š«?´¾Ö\ð&JNâÁmÉÙ3ÎE5¾én‘]{nq«®ÌMë]úzÄ|Ý{™ÒõèîM¿SïTg{Çn1÷j(sñCr í{/óadhk/bš"æ]ô­åÓqPû¢«^w ÚÛKe—çrÀËú°ë85ޗߥy,zö­¥Xâ +L®'žQ3&Õ eñK;“+Q"úÎ=.ú U› U»Nb&;O«mtv~l~JîŒý¦ ªy›Ôm ªÑa˜k1s½š~:q/UªQiD(ô[eÄÇò¬.²j±ñý&¬pÅ"¾qtæö‹¡f°oBPÛq‚œõ4ýq• 8Ç™onÓÀѾ–ã6ê.ÖBœãIÔqº¥;Ÿôîªí:ˆ-ùPW€rǃ¶fé›PÍæ<(a{NÉ©¶Ö´n×ó¾/'Ð@*Ân&¢…¯g͸6¯ó‡©Ú>Ç‹A÷YD–ùŸÛ¯/2*Ï-¢4þ},>¼¼`SUù2vt;ʘ(n§A<ÞnóÕ¸%èf×y53\÷‚²ò ÞámÚŒ[g%e½b-Úw|Êhì8·½µ\çx²‚ç¼×ù „ñU>Ui9ÝhBçl¦q EøVîàò€ˆ`ºqÀ’îVƒ<ÿiU—(÷=‰®mM`(CÃ[ÚPFsO4Cf(³Õ&§£"u.¶Nž .A e¼÷™_Û3ÖîÐFÞ“»EOk| š=;Qí.³íÁ´F¡j‹µ‡Ê*tXœä9š ²N3æ*†m²®G.›xz ܧÜÍ×&º4äi—Ýk­Ž3¢òlúŽDbY ‚l©&Æ4N@ûÊI”≠+¡Ý·È=]˜ºŸw%J y5™ãº„å:;Úä06qp®ñóI”<«I°çˆC1»~Ù¿üõãEwoBö~üûa<™mö럓Ó÷à0í º›52¨•ã$†—‘ÀÖu6˜®oj7©Ž¼Ûf–CP un×Ð"Hr» #DŽäÝçvýe š)ÁÁhIp›1 *Z‰k4b`[;AH¾Åö•“G2µòãÛ +!Á¡'¶ã_W~gM³ŒÚå”eýcà¼'‡!Íxì!Z ©{nôÈ(ðžØ¾îº'Ã/â¾¶fÜ%»—ž‡Ñ2ѺuuRaoåÙ7|OeRÍB Z•5V®H3¯WŒÎÚñræÕ¨«Ów#2YoÜ®Õ ëÒêHÈ52i^Ø—Û÷Ë$å¶ãîB¢_º7´äm=CÄ„\ÃA%ýù¡®Ód…_áh 2Ãàm8Í=ݵÉm40mô4ïb§½—qhÉ3i`਽ž-8Ó YÛ_#g@ôÃÌ'bFÌ]Íñç¥Hò>¹íîQ¬“Uù1n70äº5¤ùf …ÒzÁ`zºTu¾¶S5=@¾¼V¦b{ Å'®_’&VzcôÈ®—‰ƒÿw¢Ä..ƒî0ñàõRë(í‚® ú½G Ž2Í+-Çæ ]ÆŽźaI i<Õë¿34O€f<‡ƒÁÞì[€4çÌ3i؆5:»Àku(ô®ßˆlj*Ò@œDü=¶‹¨4GÏ3i´Q 6A¤-4Aé& d:ÕJõ`z'yó¶œñ€úvíbØ^7×ûš· P‚³1(Ÿ­kew`Øê=ŸÓç[¸‚Ê ÄÔäwv4Ÿgn· º?Þ¨÷]}´–ºat ë{æ{î¹¹{LxÝÁ«ï£7Á (×½=Áh4·£ßÀ1¾»ån~´ÚÝ{~é1Vݨåî‰k-ÖK©¼C$ý;’Á+Nž‰=;1€P;×/¯>M¶ƒÞ’àó‹¹2DófÿøÜ­û®8’‡·\¸‰ËÁyCRŠù©>b7TU /É‘xƒ·¹'yâ„$²=δ´h€[âÛêÈuW§ÆsÚÉŽ6j pgÁm»ÛÉ…Ip(@&CL[ê”üôê¹ÒË›Û% 3O«ÿÑ]æØ•\9õ{Ú@õyó°Ž^‚9Ú¿Û70äÏÏ’,’—ùf YàÑv‡œì~îÒ]ŒŽ\óð uºÏêp—¸µÂA¯´õxvå;ÊÂÝ÷ö×i~½tJ7Þ†ðvÍRõ©áBÑÙâ÷C +Æ' â·<\hZ=õ)T},ÿ²ï¼« 9!1½º`¡Fæé.ÅncR"Ff9§HX½_Ã=`‰M¯ w`”´° ·£]­§YÁ;¯_Õj ¬÷²áEW|Øg·£«ÐÌ$U¶BªAKèño*`0¤ÜõT0ŠÙå¢6DËå“^ §¤(,s¨ÊL{cEe²µ{R0ýË)a‰{k= ÄâÆ S7ªÁs‡Ý†Þ¢ÍæîOç…[F°j­Üx]ªaÝ À¢ÁŠaÂë‰ù:Q0Œyä"ºÔcÍØvû2·”ñ{¬‘QPÊqy94µx“Äao„ÿ¸®x@ÊáŽD©þdÛêÃŒ”j'zA´gGæÞ~Ž·²#KÇÚ¾ÒÕN.È›ê»=Ï0{6£§Ùw|+Ä6êt»ù/ûp퀻Ew‰ÌСÙFlˆBPSÆ­[_!xmùÁ9íLe$‚ýCš¾º‡g¾¶6=w‰’¥°¦–‡Û ;ÙCÀyT‡Ï_2ÈÔ÷½÷D™£ìß©²åc «> щÍýE9ß%iIoG–Î;çŽÀ÷)s=椯Û; b9{ìYóࢭÈÚE‰=ëã.ˆëPÔ³Æ*i”)Ø¢›žáN=à=ÖÁ'ØM‰ùNËž€åñ £OOÞ»fééCðçËYéXvóîTL:£sN Ÿ«ü0A‚q»ô 1[9çêQàñZ7‡Ÿ´¸æ_~ìl¥m¹ùûDŽ,W¿ŽIª—–2bóôG'î•ö±{QÓ%?°Ö/TÊNGZ¼¨éÙJ~Èm…ÎP«Æã‘{D6#=ºvãKÒ-¿ÄDÙâ@¥gl³öJÓÞˆæ—5Òaj«¡üÌ+ÅW©=˜{÷‰¡3 +â§-®]z/(Å={G£„cÛ>œÐkt—Q«ž~äQ…Ö­.'œ*×A ZÈc ÅAâVn@lX ÍB9ce9Lgwg7†öMŸoÖéÏ%HÝtØûIæMŽ©i¼ï°Ñ‹•JÄ|>¬¡À”ºõ,Ó—‹(6©>Z1|ÑúÜÜyÅ×:Ù]"¶Q>®‘ðöæÃw‰ŠfW´}!*à9 oõ-ÑÚäpªàôòåú4¬;¦\mÇŽf¿7>Ü+_Âj¨± +\#Äú”úŒÆøÖ9Øó¼¬ÇCœ€«¬Må‹Ñ«µækŸaHG£Íj:œ£€;Žø)ÅgµŒÜÜ÷Ž—äM›ß:i“çÙ­íØú-¡š‚€3·¾gö„@(åìjýºBÖ¨8ú7˜e†Z©V‘Þ°Ëq¨ñÚó¹ìÉ?Pf¿•‘PͰÃ~q‚}©ć݀ØŒx›¹P‘g†í 4¦KDkak̨x”åÃn@ºÇm_2ñÎ/i9‹M©*ÔRãx¬.[9ëˆlòX]²Ü„¥]ÊrÃ-ÒÇ8ÄTÚÁS‹É੺ :–„›²¾I¥9.JŸ ï:­3ä‚Ð…Éšœ„U޼ÊD©ù%®‹ ÂFKؤïÀUïÍuºj›àÀ¥÷„¨•Á&z ò +ˆW*<ê)@2´gÎ[ r÷³º K“ìµµž}J\š\fys³!°‚uzƒhbËÍq¯ûŒ„øIâxŠç]'IlÑ@ä}¦CÖLxìºRµ-»áO9Ö°ePŽš‘@qHYOx\öþG£—sÊ=%6’"p2äP@ƒTß ™õlbªM†Ø]ÑĉÝyAÁÛ6š­Ô€4Ý íÉ“V]¾Ù`Û#‡{®+‡œ_Y)Øï¬_°ÊŽt?ú¨2Ó¨G5™žß’òOð—r¯AäÈÜhdžƒq4Ý‘ˆíL^ÓuµûwQaAôAN¦mOˆæÂ(×'hàRõv‚µã_Ê"3‹ûÛÛ¥“½2ZÆ–mCèt*!qÛ¸'ct>3bŒu¯bbìÄPkµ²º'VÌ£ +5µª¿dè†EŒXUc"¶ï3ñR-WBͱ#6\ËÄèS§1rg&“Ó‹CþlsÏIDhèÔ™C‘[-ÏPyK±±žÏìïæ9ãß bµäé™Ëv¦ÌzÐ\6ýÞm<ÓßkÓï眄™Å9ž³ËDŠÕSòÞÐ ;ÀFœWú(F ÷Œ£V ÝºgÝ-F—ºb,=–W»K´rzi|ÏtÅR9l’…_Mž´E€‘êÔÞmŒŸ¬ª¨ÆØI†ýªÖ5Å^x$$ ™ßÏ^¸u±j^$ö|”sLr{f ÎÛFxf~ ç~âò¦(Ñ „[‰—à!"UÜüXQž ¨=H;jûP +¹P#X>‹Ÿ¦ÔÈÈæh­îчQZP+äý£Þ;*·I=‰f;ŒÛ?þÙy§agááë²X:'ô ôG8òÞ6¾äÍä0To=úW9Ý*øñ, ù/š6jzq£}»”Á^:©@#{n_Žx›&ÄåÔ툲¿5 +Û,beú¦­‡ñé9=®~]7š:’T‹µˆ Ôàh.ZÏ_ ªŠ3úP”¡¹zô–rSXú­ã´i5NÎgª¡Që6k þI‚ve”Õ7Og,/X\âe:PÝ2õe8¢F.!6ç>A>BÛj*vv]2 {Éà` ò*ÑÔ$÷®æ +dǪâÍÝÒN/Í0¯zf¤ú_yðîKÃùdû¶\Ê5®cÆr[RšQj} Š>’­ø'übàl»ÐÞÞÉôåY×ŠŠž±nÝŒg¼Éš‚ŠŒ-Ø›¬Ê¤¿²ø‹E¶‹ÑÉ])ÁËâ–¤°jš¼†i+“Ba"CÓÓ!Aü*1ºÏ–·99Ø!§3DÙ•×Í®®LÕù—Š-å–X+3Þ¡P÷\@q{=ÙÝ!½Þ½ˆQC¢»c²±&åíùLÚà‚ïÎvßUÁ>Ú׫²ÿÌ…cþD¸ ¯Mµ$‹*‰äå@θmæ1WõÚGs›lJâÅ¥9Kw¶{É­QÞ|6kÌœu‰†•ë6òЏèaŒͽa"¼¬·¸Â•ç —PG<륮ºK˜O„]¼åvÓÑM5|æMz¾ôíJó0ͦîÕœN)s¤g÷¡7nÉU†½*n¯ÄvM¶WÓ#¬YÜž|órÿòÓª‡¹=ìÅ0×òåôž__ì¯ÿüÏýðUÞ0#¢ÔüÛzJý¾_ôͨ]‹×P2ÛPHó^Ï7ðLôKþùc+T”[Q᫾lÒ7C“έœc[ÁßK%?ß|Àg¢ß—ô­Èwˆ9B¹æ¿mÆÆÒû_¿.õý t H^Öç‹øó3Çoký¶yß×9b _èȳ|oAÀ· !y¾ˆ?ßsüX˶Pe-~‹ªúø#6^Ìßý54c£XÕzÅÆ |&ú}ÉŸ[yÅ¿kÛçý¤/æïþµ‚¿ZïØxÏD¿/i[i2ßW‚æd<>'y1?nŽËûhÕÖìŸ>à3Ëžv𺠩ùã&^ÌOùÙ_Ck¯lµ>à3ËÅü9ð‡–7q"8+¾‰|!Š­Bïÿl—ÑÙô*„ïO_yÔ¨IêÙþ{8ÂŒúß­ï"Œ1Ñ€¨Èã4í°˜Cø8bî YîÇÜÙm“0ÀO}I‹Å:„#–J¬‘ÇŒ\ÂMú×Rýi¼Rå$$í t0ßMud"}»Ü dˆ½mQ71£s†ébäwÀI½‹1dbi·Ø ¾¶˜–ŸzQý=÷¸‰£BºVe@B’÷yÜW1ÑÁÈÑÑII² +_[ÄE†´Ä2Šv‰”žE†ƒŸúª­È±Xr_[DKTy§Ý#@—*öCJ>ÂHHS[)¦:úiŽßrNd¶ ÞΨ‡˜ê»"Pžò; ¡:š“]Ìû@ÌhØÉjö´E4!m+]º‘;ÏÚ•ã*iH‡„ªn¬Ï²ÑOï¢G^`NÖH}4шž†NÀv³Æè§^ä­kÛîÜÉi-Õ*M’=Y΀„FcørÁ9áSVAØÕòP’ê~h$$Ißw%JèÈ€‘v´´R•ýÑ"¼åûÞöIÆýõŽ‚HHÞ¤zcÅD?½G†ÅÂÇë $XM$$|Ý$ `‡Ö}w¶Ð!|±†!W½~+•k$nç¶€˜öÞ•€„ÆŸ·’Ç@¼+‹ÝDðvDÝĤëkc[pA÷sˆ1„]Y¬&pOGDKXiË_‹ntdÙ£}Ÿ3ªæœRg:†©«Û–KXï@G;ŠvRµ»Œ°Ö{jUÞc¯ñ·á`‰a۞祊3Á&g ¶"Ìò5Í´ÆÁ-| {¤=~ôÞ¬epbKãø³ñSgÿßF<²Æ–Nì}⌴•:IÒºçÅ›^?¬œÀÓoU!UVž8m½Î˜ä¶ªp‚]€áeE©‡M@~;ñåÍIØd9››%ÇÚ‘åΘغb’/¹Î&NÜÍÉö¾­µ^RßjÄ»q­!×:ÆpÐöZ„Œï[­ƒxF7®õ1äZÇÚYëmýÎXR´oßyNâLoÛw›¶ç‰8Çûö™xþ¶õ;cl²~ç-’%Y¹¤àõ}ß̳¦mÊ ¤ÊÇÒö&æ9‘T{?ñœô‹O« ð´ÇÛU”ÇUŒ§—©(³‘r"jÒªÂÉHø4£ÃÊ <íñTÅSý  Þ0?Òän½!3ëûhª÷†ãïcíaGgÈ] +zÃüH_¼õ†Ì¬õ[¤XoøH+[¼MU8:Cª”÷¹Êº#²Ÿé±hrÁlµsšïÆ[5"vƒ@8ÙBqxÚ…÷ÓÍY<1[a„·xåÕøò€“5”†¯¶½Ò +=h@ÆÃªhÛçí·¸ÁD"¢JÌO[>· ?G¼M†ÕÝeÈA^µás¸ í°xâlÂ$êótXÄ>¶X&¡ÍD—/×ç•Tí`z Ý’zã`ª£!CªYâ’ÕðtD<„¤äBÚõ–)Ä ¡[&B Ù~È!½Z)`O[DÒä]12õ¯ÇU³Òî«K*>€„ä)ZÿhžŽEBË’”5þŸ#88ñÓƒøùžñ z¯¶†o]Nƒ^ñ¯0ûˆb_áÓ2‘=)WI3#[š½X@Bò–È#ßb¢ñÞëÕ:›á猷ÉM«‘µ +.¨<‹ ?õe})Ù˜~Îx*C“GXë#Ÿ!£K%è-([Ëól,"d ¤cÓ´ð199‚mÒ¼'‡ésôz”ŸK¾4iÐñЯñLš뀦a4ú}Ëá))òɯ6" èzŒ\Pþîûù‹i6”Øw™-Ù‚'.žþ…€ª]VÀ‰k`C 9˜ +Û‚'š9¥î:#ÕÞ‹J¨×›gÖ$$¯ ÒÇûD?Õþ¶*É*ûZ".2¤”R ½äYƒ +TŸ´Ê0ðÓ‰âÙdÀ*|-M†ô¸½Y½æ7M!ÒwÕ6Žd‡„ò%~{û£©Ž†IÃwÖ¢Ûbo[ÔCLº{ˆ¹Ûmb ’G¥,³®b ™˜çyí[¸] ö¶EU1EÒÖîWI¿¿î4/«€„n)4½™0ÕÑOý%ë"Øn¢ðvF=ÄÔ +1·u I>‡˜÷˜q‰/V +ÂÓqûD\?”žóP1•+(’v”Bð¶EÝÄpEr ó y}ÐTÔQ$ìÁÛu³œ®¾ t&ÂÉSqÂú6!xÛ¢bpÒú6ÐùH§hLÅiëÛ@v„àm‹jÉÛÆ ÅeT¤ÿM3s=ñ¡¾@@ [6{ôY1q‚¡â½ž{„ ðsÆ;dïÅF¹¿cûIˆþl2ºõb‚Š<Éb [,kÓlÏx'jž-(VÈW±òËšP· @~Žx‡ŒØ ‰i-(VÈ×É2æN²&”l Ÿ#žkŸ­Ú’Ï|ŸQ^8Š•úDÚ¦çxXØ|± ±ífà +ù*YÂÜ Aã]Fc¸øØbù‘%Š—-(ÈI—_“¶@EëϳÃÀÁâ„#­Ñ±ú2$Rî(ÖæÑ}éUiU 'I£§ç*rhdé Ÿôä>ËKÈÚÿ ÄÒ{Õ–žûϧIN4q6 w{ÔMJ’™CI÷Ïx$4~=‹Cˆ{@B’FzóÄDœd¾¶ˆ›Œü¹ ÿþ IYÖÐ×”ðÿcÌ.–@vVI‚Œsè¯ÉcÓo 9jÚ«-­CBr€f;çD?=÷^¹¦ÂbáãˆuHHrš O‹MBµÛCÐ}w¶Ð!|±ÖŒ¬ºÛ¨‚€„ºTu^’+Ù‚·#ê!&½cµP÷NžÅDDZØMoGTû8]÷Îk~H2öR>þ¶üëÇDäG»¾»Þ7lÀÏïy®,Ç +^'þýI„gˆ´NÒ‰¶™nŽhöa¤”¦¬ã“*«Ö\÷¸vÕëûF%Ú,ÏQ¯nͶ€“5G—-+]~[OípA~Gû<\äM: ÈFàŠã™†ìÏÞ„âo-èäkŒ‰Ø‡äžÛ€Ÿ#Þ&ƒw#{_‹%ò…ÒTlH¶'[MO[Dïôä‰Ê›!Ììoc@s¡sVìÄH7Ùüƒp²Fâè´*é= åŒæêb^lÀhÛšŒÜÕ³R³&Ê×M5a£¥&Ü œ¬‘Öè÷Y ÉK¢qô1Zê°Ž´¥!/?RÊùêb"v ’ßmÀÏïqŸÕ€%òe’ ߊ™ø°Ð!ûØbq&Ò6 éC>Ð\âœ{€´wƒp²FZ£ßg„r ¹¶ˆ>—Ž„‡Áp²FÑßw$F.].c¹+$úûÍl$T¯§×úþù<ÿþ{Ÿ™ód®¶x¬¡]OšÞ™ó€ ’¤ÁÇ¿1Ï21 +WK<Ö0r=Õ¾îƒCBùʲDøòñ²a®¶x«†œ¦,Ú!!Iæe|¼ì9"WK<Òð?ßå’cËmƒáy¯¢6àré­ bAÎ [8ÈðβäÅ—¤¾éQó;JEQž ýÈ…5 w1¨í÷ÁRW›ÞC9òA¡C }á=öÁä\-z#†o¤Ú×kÈ1¼Ä_sÐÐ(hÃòÅóÔþ|½xRåçñйÚôÖBÖP‚¸ßбúÄF ùŽÏC÷¢Rd®6=Žá¡¦[_†?ëmySA‘®Ïš6"ÀyÌô ãj;›ÒªyU?ÑP™' [.?oŠ¡FÒÔQލ§M¢@_AFéwågFFz¿(3Òî„´YÓ¦ïPèV”j«Ci×ü~kõ'3‚sÖVýJÏ'°>`ÛùØ”HwÉxx.ëÇAJe¼g5v%¼:¥ëG'õØþ°¥ó•][׎ðKYÖ®„Wæ´yíÈÑn¿³åæo*C»vÜ¥c7Z×:N Ò·7GœÄΗ›Aöç«–qéÊÏlÐÜÝû¦X4áÛs¿Î¸B‡ÐLTï‹lèÂç<à<Âlqò؈©ÿÆŠ8;ªâ·B›òAÊŒdÜaHãËæ ù _SË2Љz:ôö(pV%Š8ŠÉŒä»Ç=ŠI(Š’9 +ÅD=z#Šòòá¨Ö66üÇWÅ~¦Qö•yn8·Id~¾ÊȶQðùw5ÅÁ)³Š§åmŠ ÌH¸ïŠLˆ·»çñáùw5ÅÁ)C™ˆ'C ^9Ý=±x§êP)‰/K'MóC{Ejü»˜æàÙÅC`ñvgÚdeFºPƒó&!$N|¥D=z¼ÿãn}¯_žû¡êðc°—žÊŒ ïÇ—  åyBð¤ï°QJœ§Mo"'bv`ÊŒà+?{“Pµp‘Ú<Û<b¨n ÛÎ˦µG {–+G0™YŸ@ö`;ˆ’ÖBlõrhíhÇ\öˆöÂùì À–Blõrh-¸n¹l]£í„óÑ5òzuDZºÆCe“Ö›ªl]£î„óÖ5ò"õWß5þ‡(.KîP7$ùq‘WJuƒeNl75kþä'4Ý(âéÅ-¢ùÕ@ÙnpA3s–©’L€9Ôu”€ééÅHDÕÞqvzŠmD[$OIK»a†ÌûóËP|¢dH]mz>ÔÈ1TÚÿ×Á…ìc›bèt+»A©«E?È£]X½Â/_Š*wlñr' ¬õGGˆé|ìZGñÑf6è¾dÚB€B×¢ŽÓùصܗ£N¦X—lPèê6YwTmŸ 6ȺÚôÖbçôÓ+t_ñqÙ ¶ÏdȹZô¨cyîwvRØ?þH—>;EaFPzB¼lÖ´?ÃÏórÇÌ#ØV‡Ò®³ê§Ù# +3’ñXõkcý2:Dý,¨¬Úx&ô}í” ·x_§Í¶[»àµ«CiÕÇ?q_»0OR‰pëçMbëwcØf/‡e`@¢âmr½Yw?Žô=3á$^6kÚŸQÏKI½èµÕÇ¡´êãå/֟У1OFnùY3û@ž”zv#ÔV›éßá6:/—Bôn¸d‹cFe—Í +œ}øDíJ̧Ү/§w|ýÉRI¡C¸\µ>˜‰F0q<"Ü i›ŸCïû v <;7¿_O¾ßm¿ é>ØTÛ¯·Së˜óuhÒny¬»Ý'q(¼JCº>Ù-Tñæ6‹Mór¨ýìøáôÆÙBñMžÆKö”W;’d¹ ôçmJÆv¿®räÈØ¹ÁŠØèqöþ†$‚Õ­¯*&A|’œç†mdÕÌx“Eú÷oèK9r™mCÌ͹2(gÙ½’all#Q”Šm®j†'Ñ|ÒlCœ¿ÓÜ<ÉÝùæÉyxCìd¶Î?n +b7ñtí÷daQ }BŸöÈ í „!æéÚï“*Jwû ƒ!2c©qÇ0ßgÍ¡Cóo‡„.5à™üYÞ3Ṵ̂íî¹ë*'! »P CšÞF=a<˜ +ÆKÕ±ªfÛî»2¨®(|çN?¸MŒa1™à†pÖÞßdÑúƒjÆ‹ k(úzGd ÃòðØÆoMSRÈÖ«{lÐAáZB1&÷ ½çOg´!sõØorÈò²s-v´÷6l#Ö9më¯(žêLÖ_óqíôÜ_û*xö³­nÄ:¦Ûßš*ž@¾©®¿æãÚ鳞ZšÌИ*¦MR¥CÄÑÌ +ÄRt/\Àì+Ì>âl0?÷~LÍÁ£ÔhÐì$< * ¾¥ šTJ«§•âéÞñAê¢^ñPÐAÈÂvÄcG<ÌFósïwѨኇ‚(þp±0 ý+>B¥wîˬ‹“E¢B öylç)ÝÂ(‘¨#¨³Ð¿æãÞ뢠Q¨Ü\•ˆÏx,\QDT½…þ÷^³{ëDÁ3aI:„ª héUζÑÍì§Òö¥¼4Žhs’YLvþ•©)Š«ž8M«¢xUå®èPžÂl³ÝWé½ »žßNÊÂòëNJ¬ÛÌ6”ÝQ©=ö,(ßP+©m´[ܧàL9¯û’]·C7- µŒŽÿsȧQ™T¦0½Ré„°Z½ k»äjj!V †¤?6”Œ8¤RR]9Æ1®—)®#>\î{ÃÄÎi”Ç'T'ëÏ…&É|t‰¾Ôjg"H·œ*IókyÝê$œ2 Ùs£5ŽXQÒú¼mÄ€‚r‹çc ’‹ß"B±§¿¢Ò[¯¤R,*±®AÈW°¢R¢Åôy)O”жs¯"^7;;Þªtµä¸sÁÙUtúq ‘óT‡íÒTdÇ…0a4ÑrøS¾Br¦¡¬JPs¡æ·‚çæ\t8âîöùÇ{cF.j_ùiȲf]·9CÎý §e¾ædŸ='§‡!#¨Í|p2[Ú¤Ö[rÊÒ¥6OZ\zìÉ>¯^Š\&.ZZ~[‡Œ°ïu¼—¨>£˜3ä/Ճ➮ù½î»ì¬q‘þ˜ 7(S€mæùÇGá‰Ê\²‚Ÿ{Š'Úµ.Ë’ŽÛLÜ_Öº—çÆí`î,)¶«ø€Ò¸ž}|ºŠïÅ•<Ñ_)>b=„º}k¨‰V?{ø9«õLøq‚Kú¯'ƒƒ×3mq!4ìcbq,lùürPo·|µ¥sN³Šcã3žIKÔ7µŠDjpØåú˜Jš–¸\ä%ªüÐtG2Ã_ [ÿ}kÛÝòöÄMá†ÈÃà©pCÚ?§pï× +þÆ=X±w¼+3 +—ÂÝ<ý`e}uc7X§ð5XùLù¹@ë=X–{°ÅÝË)l° ×`刴k°žqÒÙêÑ_¯~áW éž°@s¿t.Çãš°ºdÂM',‡ùš°|#÷„u·ç&¬»i7aÙí¸ÕîŒèxª]FË5gg`®9{†KGíi«£–ÑšŽ9ë ìiË(_еW¼G-ßB>çì‹‹y¢ŸÍY͆ß\:ôÁ/Fünœ|ôhe6i·]¬5 wª,QG壪ٰq‹]?æ_Œ7ód‰û%ÁÊA»nþˆ@zòØÆÍ 0è¯õ×x™§gA½šqàn8Oß*7kÏÍŠ‰m¨¢Ô¦Éù¿†A]ýý÷‰”éÏ™,€[ÿÌñÑW Ï»ýÍS³èÅ–ßs)ü‹ò»ô×ûja5G“aóFkÞ2“öîÍ’Áä|%=x~B¯6ÖFžœ=¯ð)äh:jó„ kÅýŒž&Zgù˜heevÕÖ;9n€2ò­/CS§0Jq>Çö™á²d)kï.í¢çç‹vœ +Ew-à¤QJ†}o3kÒÓG.ë±uIy/(„h’/zÃ̬œé-x£ïX×’'™>[èXæÞƒ0Î*;Ä+ì[¯cÝ-1Ýîe‰ûº¼O·¯OšoÀ3öÝ«e†…o7:IdYu;-‰_ô¢(;`Ã(Û£FàJôôÆ{ /Ž~4¬³Ý\BÂåÖØå¨ä ‘ç·fe[†TmŸ4­6xIBîAsJB‘Ð…j“ª‹–=%±Ìs_½\…À+m˸kûl­LIv2Jî3ýJ)„ó™r8×þõ¬‰~Ķm?T~¡èêvŒ£«'6\EXª&²Âø +R¨]ÔÆ)'mÍCvÖiÛY¦‹P-|3ªkC¦Ô^@;Þ½&¨›ž¶ +OÑ»aj$â ½Ö¦a0wûºBev Ô(ÁpôÉ`Ë;N™ß=ÿئ÷¤hTP¿ý@ߥ½!!+&¾zâ©ÂWóÃïòLd[Éè*ÃÉŸý@ß1© ²àÆÄ¥ ÑH]ãz©–Z樂Êó›ÑÜò¸e¨6„§°Vf#YyLíÌ ÐέE·™Ó|eÁEh¯ÁvѺJhMÁïJK<䦹% +¹k$›Ýĵ_Mü&Š@Óji=l‹VÌöJ“Þ«¤ðy…þ8Ójéª? 4Ûqžœqpu%áÃìº0xà hy3 µ“c˜ŠgmžÃŒÐç0#¿\'Ç0Š?–¡2Ìâ|–ùe}né·IýY.$¼>Æ|µ°C.ÛÆ%¾¡¡‘ù;‚uj4®i ŠAâí³ û*ë>^cÖ}ºÆùp Y×ÑS¾GkLù­1å{´Æ”ïÑSN£5&{Ö˜l­sž¬1Ó1$ý9W?Ë÷¶òp²~ !ñ.¹×èzâ)\õ™õ×ûdÕ7?YUY\€Ó'š¨dü',ê¯É,ôØÿÍêøwð}yù󃓕΋¦ÀYWY§@R¡!`#DbK8›Â¼}Ø/yÅc£¶±È.Z:AÉ[d'™»Q{Ÿ7jÌþ:ur²'À™ÀmädC»å°—ÏØŒdsûÁFŽN6ÛÈ‹\`3²ïopª€ø>/iùi`æØIî0u°HL·CLáψAÍúš•Jœ|¶‘#¤A"y~Ʀ$m——„ü4prì¤u˜:Xìq2‡h¼»Œþúß??PD‡Ðƒ¶´"AùåÿÃ-†QM²Ôì¤19J­åIºÙ +˜¯Ð‘æ`;jî-eh-š]_YtÌR§LŠŒG Þœ‹Õç7ƒ2‘¾@£néȳØh[öÉ4%0m…(ÔÀ±Å ÌR€ËÖ4yxáã)mŸ2Iæµ-eœ~%ÉY ò4¥÷2ÐTî•-põ–íÒŸƒO¾EúU€i·à²=B\ÂÚRnBDZ×ÈÄF5¬¾¤Ð’ˆþ"Ùbë0DÁTl¯3CİmCõxýâÑHHi`v$`š5—#}´FñNG¿í{M%UC .–쵸x#X†-z0ÀâP¬s3ÊkÕz„–¢ÁëÐͲ_{"ù4‡ƒ7,ÿ´‚9ŽÅ²e¯Ï’9ñàm?mu6N|ÏöÍ3Ê®"|“ã©réÈñ^M—ê"?þŽ`Œ?ñ"úE1·ð‘<¥¿øF +äÆ"+£"\xGgì·¬Žé¼$•@ûeh5• ´ñçm½Š¨Ìü>4L!“¡(d Ë29…œÁ]]²Š6[¬¯ÍmM!ÍâM]iN1Yf7.ûþ¦O}Ïéñ« +ªÑÉ&“ Ú|ÞD· }rpéx‚šŸ*ïÙ` —ÁcL¶ÜàGŒÉïòhZŒÊ«qÄhonk1ªEãŒ[¦gœ–gœögœ8y¨z‹öWl,x*B㿪 ¶î±žhRºsÂŒÆó6x×ÊCŸÀ’µ‡ðáµÐ{Œf£‚—'› @Ç5òaÖùñ»»k¥q'©(ÏB¥"ï¶sê#ü¢öû¶x)«\7o¿³_­Y~ó%/~´NC\[§ÕÈ"Lx’…ÀÛv¯v}€Å[+W@*Ùí7kû*‡F°Û+Læš%´¥¯Ás…P‘Wª¶+!V­L±“×ãõ‘()Cên2WÈð +ÁÛ:óêûø[ÀJo0\Këõ¬Z 3­l`º4-MmX–P€Ú^ׯҥî0ˆŠ:À‘-p +¾»^²”JÓrOT°tŸžïFã~Ëë]¹EùB³.{”s]êêZöü1,ݱjKöT§$É@…”íaÛ¶Üj5¿ÈŒ6DmÕžõêÝ„bs´—RÚ<‚9~kmz=â)Ëò+Á…ˆM-h–:ûcëZRyul[ù}ß²Ëq<#vºMHñ“B.Vmas¿Ø¿ Íôö‹Á]¬lî‰YpOÚ¶ ¶ˆÅÐGÎåQ8·û@n¬ÅkÄk­±–êê(5·ÒXK¶‡­3®Kw‡Cg-OT¶‡CgÊrýЄž:ƒ|òòpè  ²=Dqp7™á·tI¤ßDF óg —ŠÊÊcѵêÕú¡¡Qù;‚ˆã·Tþ·† ~>“=¯íš'&Ú%O –+žè­wb®·Þ‰¹Þz'æzë˜ë­wb®·Þ‰ùÞz'æÛõÎq“;1ß1<ý)v>Ëú¶øpr !ý.°#íE@¡+§ÏOº‹ØO…‰³nk…EôX(Ê••›—¥#^˜æçò|É(©E^ÑÒ©y¼";ØàËÅ+è±F~ì"î…&_;ù¦†Ò}&%ÿŽTøDk°[èì4r£b>„cIXkCÖ¼G‰¯¸%ÎižfÓÜÇ<) ñ0³~ŸçÛÜ h¤ÿ3^ÝØ•A,×)öäkoN \{%ü‰î(Óf¸änFbúWW—äyøñÚ„ºw`‚Mð¤4Ñ¢^¶–cèmhÄŽƒ†Ùq8¤ÌGÂ}lw ¸b]o¬½bv=Z„n“œóywOsä§“ÊÏùóh(—{3äÑÊö¥ÄÁûH¼2©!º3žFïõY*Z=½hðÑÓ¡ËÞ‚ :©ß³?Æ>[g=:qŒ®ý²A$u¦O¿…¹0¬u¶Íï)z¤\i§]ÎáSœ¡ø7Ü#S¹N‹kÀf[Ò¾.ÈåѶÅýO¡"—Ok7ã†nPª«tì%(H‹ë,ׯ¡`ž ¹—tØS§tT“å¥Ý€æéŠÎµ› µ[9ìͨ«2EA¤M$w(÷` +d¹¹ÏFÈ>®‡cd†6–ã•“ßÕblïÐ+6½whQ:]è(¾7j/AC«ôñ‡_:4Okê]’@DBq4 l'Óîhj·¾OŸ*@ÛP»ñ5æ´? ›’¡Y«Œ:#­hXþf võ«¥ºûý½÷W_üñפ6r:‘í’Å!ýñß¿¿ vĈi=J°³[úÏßâoRÁªz Ý¢ž“Æ´®™DË +4µ£Ç¬éÛ€b¤7oYèqv}ñiwç- rcî‡V܇™Ý¬ë´'T+òÚÙ¼:ÉJò§MgÂ@stÇz+¡Ÿ!Æý3ZaŸKî3Zªûš°{ÝhS—03ƒÿ|D?ÛÌ–WXB¯^Jq —½”ž©y¢àücS&¯î¤r3“ ëÛȳ›õP¼ùv=€; Z΃¯ ›»ÑèpYÇ\aIEG3}ò‹/û…_míšaŒï#Û¼åË‘yu'øÄd>ÙÑXÍIÉ=yÑYP²"0>:In»8RUê6{kúJF£ª¡n«Áô–¡å#:-»Y\1ëÈG<ìe=üâlkÑÎb(¯(à9éÎÉF· ŠÈeÀ¸ ÷uÛÝ9~Þ³l( Ýý,$oReŸ›µ÷z— _ÚzR0‘*²Þ€¶ö}•¬ê]ÊáfüÜæ5ȬYÉ¢`œÉk£ P¤þf‚3öB05ß©ÇÉRöI³‰•í-ÐKj‚´£/`&)XöÕ¥q%ñ·Y þyAjáfÊ»ÝJQÀpø^+ù'‚0ãö¨I½œšŠnJq?NÎÂ5G›Í5‘r®« Ì£6‚ÅYC¡'Ðòˆ9ÔÁ><wÌ;©’üí$¸r\ÏA€8‰³±XœX­ˆ“øÂ.a-Öóõº,Ús žÌGccA—' ÉŽžF‚õ¹5l{…$'{9ìE±6óõY…èÛru>Ár4¾Œ´ÇÉVÚmÑâY†~ó†¾V®hBÔõQQã§èsÔžEˆ$m/¤œ§‰^™žoØ èt*“±1 ø²L0%aÍòàê8j¡n +È‘4È6)“VàkHªÇ†Ãÿ]´ÜšÄ´¦"´LË/n0¯æ§•©º6{ØùðùK‡†îj0Ìåu̬RïUjS=é;G±b$«i‡fFqáî; +¨ƒÊžð»$³ÇIv™ƒoRu}{ˆ>¸pålßÉ%Öë~ãÄàëNø2Å·:¸À$”A+{rùIÂLd rC‘9G&ª^Y `/ƒüš@2‡Q…5Õzå `¯­kåbJ¨=€¹[Ð[Ù'Q΄·Í.ZÝP5‘ƒÌ«YÆ£­Š!VµmÒ§çód)ãi1ÏPvFŽ{ ùíÌÁôš…šƒO»Å›Œ~~Æ‹E'°)dl‰ }6Ä&óÚžjI©VÄC¦ å²ëÁo …¯Eœ¬ØÕƒ5ZYàhÓCÚ²¶c³y¢cºkûÀ×é7/¯áÙ<÷ñ׎FG3ÆÙ^X,±€~ü÷ï÷Açí¬Ñsnê/ÿù›Žë0ªÞXfÝØÔyÐû}JË•”WôAÔ²½u›ã'1)]1,“’°àTò¼3ˆE<»g¦û³99›Lñåý%t]FI—2õ1ºE®º3£–qD÷ލ#ì<†Û²‚i‰ÕdöäÚ€ b¶XR«ƒ vlt7]â“<ÄÔ‰ÕØ3Pe‘sOùg-†;ƒH±nÌÔû(®”ã±CЍ^£Áë¬eaÑÖÓ,MY ¤ÛeaØkÜyK"h š,‚¾X¿“„»­ŸÐ«žtµÁ“P`ÕÍ9ý¹ÎN ”ݘNÛrÛ÷°¤Äñʰ$‚ä9å3D—Kü’èúEra¹ØŠp~„O vا)´RZ¤²î8£ÀŒëòeh>äÈ/û|Yè໵=]²o¤×JÚN,¯­-âÉý÷ÁÿÐ3ËÊ +ЗE8“UǃA&¼þõµkga»½ïcŠyùqØ*Ôg& kEh¾6HϬՔ¥]Uik©©Rìfœè«:ì,Qn +;¬Zé¤ïØ" 2N€®ct4¾™—R¶”ë2LøÛ®ŒX©îH¥J,U»w9Œ~>^õñׇ6„Hlhûñ'e q”fþÔ½ëkî|ç놆ŸÚ˜p-àzcRqc\¿u˜']FݵÌsŸà«ÆÏ ’!\‰š©’ÞœŽ‹­ Àz]XŽCÏù€Ve¶ëF*ƒ…šÊÕ„1†ׯ¸ÌaÏ ÏÀÒ\Çê –VòºŽN9×·{æ2C ×î§A  ¹\‘8üØÐ×Kƒ…ø)’y÷K‹# .Ôf‘ì¶ýè¾Ër(t±-B$³ 'ŽlÚ`CÔê:gö™¨„*FÓ™jÈ’ò•*ôZäŒà›kWv[åƃt7¿´íÙPo¬-ËY#9À[ZÛž=9<Ï`"5i€s#´¨öÌ’«ÆœK1KJ§-*Tx” uúxè RKvÝq›FQ#îØ— ÅΉŸºk±½¿¾¾lÇ›VD$à\ˆÆ[À/äöûF²vÐ1Ò¡-X›÷'È[bïP¥©ŒyŒªÒ²Ñùÿ)¯r,Énèë}õ㾜`|éãT:sc"@Ö"=êŠÄ±€bXÒºæøweHG¾.>€}t=Uª¡Iª*㺰u†QÉ…`×åÎ î“ÖiÄ l&ˆ"àI“©œz¨–µXчYZ¹Å@ái¨X(æml1§›ä‰UуŸÖÁµŽ_:“®øFž}Äš&mœ#.Á->X=xËä´ö*Æ5Ip •OpdU}Ó•¢|ŸC›¿ î)C[’‚èÏ›¯ X‘f=b/Á¸1Šè@ú + ¤· +‡RZ Š+™5 +­Y3¦ r€h§Ä‰ž×רyèÍczÕà:Á¼¾ö]?s]Þ¥È}î »oŽ:‰V½9á±2V´áåXã`NSÕ©T“¦;ZY» À8Ë\ѳ}~$kª²Rg™ZO¹TY± .5ÒBÕÀåL¹Á¡E–õI§Õh(5)ÖòŠñ8M-pTO:Ï ÷V5–n’"`Ñ|,§Bû[ˆ.•©Ë¹y?žcØ=cFmáË› kC‹%È1ÄÜî¨'íò+?^ÒerÇèÊ9h0ågu<ÊèÙŠŸ‡:y|®+茇ølDˆU‰ëtm­·¤bç:3G¿ÛJ¾3·C)†·îû¢ÛRH Y¾— If¢óøJÏzÀ:²¶GQzž¶Ÿ¬ÇH^Ȉ£µçv¼Ä¢âZŽTúÞ˜ÊZ~¿ B£xmÿÄ.05zÿqLBî'0'_YÇ$°x­‘Ûe–kT¬ÏuMša¼4’‰6§ŒÞT'G"ÇQ_Ç$èŠå¸.8To¨[n®c’}ø'Ùº%ÙŒA-yÝ’Ö‹Þb®$˺ª§˜‹Dq÷悎_îQ0 IÖÜÙeÄ„sø‹pwà5²þ–¼2cöóúC¡_bË+ÿ¨_[Q0G½Þ>í×Vá¸Â¤^„:{Ç ±¬j“Þ‚Šå5ùMH1ý›6ýó3NyïT·{Z³^·Šuå-©ØÙRÆhmüÍFZËOÆôTCñ3®2eÔH½/‚HÙPêUâX*›Øs/À¼(þŒ­w¥øn`Ðñĵó€6¬K®%=ÁVï»ÏÏts!d³ê×iì nLš»ÌrL¯o3˜žcº=Uö=Õ{·zOk´Uã2™`k¼{.Vm—õÍH€Ã>O˜ÿå¬ôû¬3Çò÷°­ºÀ½&ÇÑUeâÓþV1hašwÌ^qJ>¢ °èFpÖ€µå¨ Ëp€-­…ØÖbrÔˆ3š›KpÇ©ÌÜŽŸïúýðfž²tú4¾N²¡‘ÖYæt¶ßà +Ø^÷ªmv6„xï¥æ‘—Ü®•.Fçñ+šÛÌ+îÏ 1ãHl"<‹vÁEÐcúuoM@QÃW@^bÆ`pÐ×ÁöÅR±Lœíùvz÷¿ÎÌÔÚ¦‚M„’,6Xìk¢.Ä»AQ ñ¡ª_e!7:8W†¨©¬"S¦äsµ.ÛC²÷ÚÊ*o˜Y½³uo¹Ù¤·¾Ñ0 ®JÓWòsç\ B9ÓÖDß¿¾æ&PЇܿõ´7&‡ýœïËŒ¶Í€ß yÓIºäuüNÞVÌÜÆÀØîEeïz;å·XA—‡:{=±— btÕ/^®6«4Ó‡+âN= ¦o¥Þm tc€`rcŽ%×]9´ÐÇuªXLßäŠ.ËU=ݱô%Ì:†»š>Ú¥eÝâGƒCJ×âGgg~ïKrÓ¬5rï}?á5rßè#r¦}ÃRpÑ7 ÖôÍé:¯¶Ö蛾ÅîéÛ j£ï4lb}Ké¾Ó>ˆ} ?è;{ÅèÛ-Fß·Ü¢oþèÙ;#ÌØÿXùTöÆÿýöfp‡§n‹¶£n‡ýÜÊW2ߨ›e”ÍÞi^õ)µè}Þìíc£­œ¦ïîÅÞ;4›¼Ó¹áŒ¼¥ ¬ÍtÚxUMçv³Nìêy ò¾åyßú‰ù:³W¾î¬oüÚÿFÞö«#o¿ÏoòæbÝäí°qoÆys—OòæØLcvî#obå&ï[l‘í­n‘²;!Œ¼Ý qäî‹yË?ž©‡MéAÞî®0ò¾åÙJnäí£îB5ºgnîÖýÁÜî®:Ý‚•½yæv·œ1·ËýfnwÊs»SNR/_{ÿÎ<  ×éÀJÒëãZ:¿–ßr»½.(“s©ÝƒUÞ¨õoÐÇOmßž#¸YD¸“=SèbXRÃp²Á·Â (eü‡÷:ÕA(€."´7¤œ¥ûg¶ •À $Z ¥ucš¬BÈ,¢ß9„©^ œ¥rså´u…Æøò [* +-ju«‰‘šuK©©àñ¶î2sÛö‡£à¬2ÿ Ò̆_ñ×ÿþûEŠ£’>ΰn)Þ‘\ßþõæ°¤PúºÖjÈ+Ù©„2ˆ¡ŽÅR`,/‘˳J1é`Û#bR Ó§qü –3¿62C°ë³µÉg)›ôàŸ +´˜õÚÍ„J)c• +J„H‘(I¹–¸„Š’ ʵ0š„tCÕaWl„Z܆øÞ4d2”€fßPìŒdOš¾Õ2 $ U ÇPâ~PÝ¿åýᙽ–í:Ü6äû^tÕºãùç©Vú.ÚxÀ§¯j5È¢©¸í¬ZÍŠ… Yo‰´¬Ö u´ŽªÊqŸ»–` ©FÙZ*Ö‰Zö +²©j `’ì„ÊÌU S?û"9XSíuŒº¤F{عºš?üÛ‘× îý6¢¼(ÏïVŸN¦‚Á„¾ ™½,®vXç¿VÔ—¿†Á9ScÿƬXP&ÏÁã~, gŠ3Ð+{°qmöF‹LÑ¿*BlF¸:ê׌¹ª0Tø¨ÍW!0 &+/©B`¥Ž<}k1ZµJÿ§¼Z²#Yuàü®¢7Ð>ÉÖÑÛ°÷?}€„H²ê•gv R’B׈¥>D`˜9˜‡H¨äí!Je{ˆtVÝÌC$–·‡hèö‡¨WZ¯„Îö ƒ¢Ç.9d–ãQÙz좨¯ÑÇ]Î$(ÍkP²+@hÛîÑ'†·¤ÜÁì¯`*ìA‹à‰M5ȯa‘Ly«{{ŽëUаŸ}í‰ûwÃsªiX7®úÝÑ+ìžßµ'~çfkÛ˜šs?FÕÏ œçß iù±OLÑùtÃæ÷Sš³$ø](÷7_ÙxŽùï㬥«·¢%pßÙž7Њŷì•à0“ýݶoD½k¹H)´á“,E­»±ét´ù(¶1)ŠY&:SJ¿p«ô’[4çÇBÄ×| öˆÃ%7Þª hªyÞm¡‹ÙGÏö’¾îÑæ#k½˜ôþãAú"(þõÄgš…lëÐ<^ÞBm£æ *¢LÔU¹¿Þ”®á×Ü4@Úxµ…Äp]QÉul?Dƒò½rbë4‹ë|){º· iº ºh}°¾Øú/‘„á>ŒI/¥Ar¶¦0zA•vÉj*—ËŒùüÈ‚mV +ÀÇcŒóaŠt¸›Ë•7…î[ºåØ«Òëïa¾|¯’p´³–ÄG‰>‡ÙüJ™£/ã•ÓžKs`‹•(ÉÝÖa@´‰²ÅóZPqBBÀ!ÔCHôĨÔ2H!I£â†è)QINczOÊ IÚùÿz½†év´ä¥¬]®­ëGVn°2¨­íÒ!Í/„„ÑDÓæOøš…Pxúqƒ!]_¥ÿhpÝ ôø§ƒµK+5Œ¯x7$‚W3Ò­Îðæ>á݂ϜôØrRÐpºAmÆÞÒÞbOb=ÚL9i±ôèIG/Å[´¤ün¶ls„}[¯í+9qðŠb¤TæPÝ(®é±D²ïÒYa‘þt°:#€¥¿óï¶Ä‰J.QÀ„ÆÏžb „vÍÃÒ_^Æm ì¯s^?…í`¬L¦ÃµÀP8Kº$¥ÆQŠ»ÕÔFoZäÑ9“|]¯‰ºëçûDµ™0”lz^EOÛe®[t¥·ó¸èLߥ[é X«Ô載Ÿ×KxŽ•r ¯×èÜ)úcž7±–9Š¥ñYê¼ ?îPf65Àr¤ê·Ió|eP1~j>ÀÁQöãnQj…¶3 ÷ËDªëo׹Šs~‹-i:ÒnçXØex”ÌòêÙ 1®:¡ì‰ü|Á8¼Ê ØªDbKäw]#d¾ÑM˜²Ë<Ê~sndÿ†Ù¿á*û]`¿Ù4? lX‚ÿ‰#˜åøŠ v 2Ô¨¼|ž9ب½n7þ0‚ÏÊ“W-‡òtÜ2U¥‹fc¤â¡rsG_©Ï7 â±þ–öDa» %§…4¸cdk¸ÄV q5 [‹ôPZê½TÖ"›K”ªÓZôé«fµ•ZZÜQ‹@£;j¨ŸIµ·ˆ¬q)<)Ç-­E~Wˆò«wUbxV÷å(ÔúÌ´– Ãp”#æ*dt=‘‰ˆúÖÔëJš©E“`S‹tÛ¤6L-ú´W!n^ªÜJ«ñ(Çæ·¢¤%¸j ú.ðî%Ø?mŠArå(> ¡kƒŽâ{HÉýMñê!Ôퟂš(ùÕâg¬Æšð³ƒCú•ÁÀcM -’Hž;æÚÀ†Ï·ƒz¹e*rñûœgׯ1Ö¤!j›ZÆC*pXgúHÅwKd ¦¹‰ +?4ÝæÕ06”(ÁQæ&âüuÈ)W¹IЗÑ¿) ”lš` ã;?«KA]¥ˆaðóã‹:4¤ç¯åŽßÿmqq½c¡×ë{ ÅŸ.Ž}ÇX§dR9.l ½:5ýfª b<&›8DÎ>#ÝœdÄôÔSl'¶™*ˆ-1}d¼~ލtUŸOÂÖž/m»£KÞî¸*ÜËqÜîuMÚŸ)\ãûYáÂ_;+¾íÎÁJFסpO;X顎nlëÅ'| VÞ)"h>+ÐtV Èý¼…V ×1X‘r Ö=N2[-ú«ñjøn‚a8',ÐXËx–¡ó*ÜdÂ2ÌÇ„eFÎ k²g&¬É´™°tÛNµÛ#Úîj—h:ælÌ1g÷pɨÝmeÔÍ~›³–Àš¶D™;j.wŽZf!îsö!1wôÕœ•×ð×<‡Ú¸1âïÂÇn­L'í²«µfb§ÚÀädTn0ªš†…-vüûÝÿÅxSOúpßÌ ÚApñGüÀÒN^€AGy•—zºÔÓ,p ¹á;ý“Ù¬-7-&Ú„ŒRë&?ýÿ0 òèïÿ:’º?c2¶þþf¦:b¸çö¯¥¦Ñs%~Å”øWˆ_³¿ž©…UMÓ/aÌ›‰t†Àf{·fÍÁd|y¹x¾ — µ‘%§ëŽ®˜®Ð•¾áƒ9#?­úŽæÞG¾;ZZ`ê]u€9º 7@ï­ÃкN!ܸ,|¶åÓa¿HYN}c'ƒ AE.ÛPÆEBQ*×°K†§°lôóû립qHƒŽVl+–R4oà¹Ë—¨#úQ˜s#6ÔÈ€ àJžšÅÊW°„ýF æü+–óÌ0TİSL™Õ§Ú‹èCB벺„,A´†è¢íÐ%=D‡.13º¤{8t Ñê‡~Xº¤ùÐ%D¡çÅvê¢áÐ%D/ð›.áÝ«SÈÞ"âºd‹“êƒþN—˜¾Ñ%äí]BÔº¤Çã®Kzè]ÒÃ|×%=#w—+uK”Ø4/QÒ}>‰†ó%@CÉ3¢„Q9EÉ+%›­Š΀›(1Œ(ZvQB¨¢¤§`%OY¹£¯DÉëžð\~K‘ ¨ÛQ‡µ/O÷:Ú²¨p­Ãz«@ZÍ÷b*h©÷Í ý’ZÓ +ý}3 êë^~TJSËh)GùEYßËOc¤¥7‘ß•ÝüÑ»’}—äejÉñRQP­àÒêšu0U}FRrŒk~0m×}‰2õfÒiê©Oõ6DÞVl€B<6Æ" F¦Ø4BZh›}©*­5ù¸)4f9hùI­ñE¤£Öp§K{…–ÛCFîès¹=*X>wœ?Õ½Rˆ|UF]JÐxÕÍ~&Fç¿~~áÛxðsfo e÷u—éh6Ø Y£‰„¹N=þ°)îÐÐâb6ØÙX£‰@E–›‚¨¹#”Ü}ëPGãÈpÀÎÉM$Ì…Cý»q¼eõè>ÒSÃI±ÖÍt‚a®iêpÈíˆ7Eé#1=5ÄÛ‰ÝL'dû‡á˽g1ï($þüåÎ"Ì’®?Ðú‰íÇ>ÍÕg,@B[»KºØ~þrÇYà ¨®X9Ji˜×6Ó*[]ÆmëâüZP Q$ÙÃÄ,œÉÉxãw ÆÖFKægû(ÀPׄq»Cta%˜r,ín‰év÷8–¸¿—Ö‰ùöõIñ œ±Ïú*ð̰öÛ•L‰ÕgC¢Ô^¹„öh¶RÕ‚J_ÚãØ¶òšL´öq°¢útH ˜“Oè$IÄ~“6ª ©.[îKAó´Ó¤Íí+^dxší-ëo:R0rcA•¤ÔU£´cú‚äf+ï7<ÓÊáâ¨ÊJa# ³]<7^³Édx'™œÞIn4áj$w’[:ém,¯ô­ÁNßÁCrǓۃ›E¯C/ ¿ùñö¶wKÀ´A2s1½bšò—:ëk»zÊÖruY×ÕêS¾W«Où^­>å{µú”ïÕêSN«Õ'{¯VŸìµZÈy³úL{JÚ}¯¾–ïmÿœr÷Ýeý@]â\r¯ì®Ä]åžõç÷dÑ7 n~FUäᜎ¨¢’ñŸDQÞG¡Ÿ×¿IÿrÒz¼|?p’†óÐøÖTÖ)%(×°‘@|K,Ð7…y{±%ãòŸ-´ùè¼å +Pò棓Ì]Bû:oÔ˜í9uòÉeO€3Ûh! õ’Ö_‹¦GÛÛ·hä“‹F€3šm´cÎEÓÓz¿½SÄ÷y k}u‘-ì î0]`N·Clá׃>å9*ùäBàŒg-„4ˆ@¯E“£¶Ëc@ë«‹iagX‡é³ 'sˆöH»ûÑÿùMˆèhS+Á(¿üù7·V5ÉR³“nÄæÈ´v”‘t±0בæ`=jîË¡µhw½%ýѱKWȤÈxÕ`æVŸŸ ÊFzCeKGÞ¥ÀzݲO¶)q+DY¦ö-e—œöL#—qû”M +0Ím)ëô-®IΕ·)ÍK¦ÆN¬l«·LÐh‡”^üñ¤ ÓOÓÛ‚Ëö 8»gK‰¸ R›2 /ªÁ`Yz$¢ƒßH¶Øs X`0f{×™!8¬ÛP=†w^„äŠÈޤŒ£¤|¤žQü¦£ß¶ýL%UC +\,Ú´8ùE0w{èÁ‡L`;¢4g)µÄ?‡.–-4¼ɧ9ìüÂZG+˜bf.¦=öÚȉ¸í§µŒÊ‰oÉÎ<3 ÑPáÁ/rÔM!“¡(d Ó29…œ7º:+:äQD(ÚHlñ|­ËÖ2Ð$>ÑÔY‘º'Óìz°ówøÔ÷œžuUA•d2Ù Ïìæ®#÷7ç†t#hº TæÙA0аNX“-7øÁ1ù‹Mã¨Lƒc ­.[㨱緌wžæ;Ï@Û烧EµC/l¿ùÆZ„Ç<0*ÿUL°µÅõ@“Ò#v4Æ[ç·P^úæ¤=„ƒçDï1š,t¸ü8Ú^ÚCO‡YãáwuWsÉâN*RQÞ„JE^mÇÐ!íü¢ö۶혔E®›¶ßÑB­FÂ/¾dà¡uâênMœ 4a$K½oÛM^i:€Ŭ•+  5Øí7iûj •:`³)LDsÍZãæ«ó^!Tä@µÂvÙqUó;™ßÔG¤¤t©¸I\!}UfëH³íÏŸšaÀp-­×€]ѵ@FœÉÀ”‡¶ ,K(@m¯ðž›ÔQV˜ɈSð«ë`’Ř«–{¤‚¥û 7¾+­ûýY¦wáå 2m(§2ÕU˜6þ1–FÕ1J2P!y{ض5ÕRÌ/2£ Qj±±^V7¡ØÚrÎõ†v^ÁÌßܧUeÉ@ž\x.°¡ÍRg6ÔÊ+}Û*c´æ÷}ó.Ç~gìt‘â{)[e¸h3ëœëÅþ„š±ÚÏ“;YÙ\!²àš´mëlŒÅÐzJùV8—{AnÌÉψg­1§êj/5Ž›Ò˜S^[g„ o‡CgÍwT^‡Î ”åú¡3=uùäÇá3€ÊëÁëŒ#v“ë–KRi‘á‚ù^ÂŬ²òxèÚÇ¢Õúé¡®¬|x<~.Båk8çç5Ùó”è¥y|¢—äñd-Åã½õŽÏõÖ;>×[ïø\o½ãs½õŽÏõÖ;>ß[ïø|/½s\ÁäŽÏ·§§ÝÅÎkYßöωwß]îÔ¥ÿÀ¥6Ó«ˆº|ú|¥Ûñû]aâ[³g…Yô˜+Ê™4¶U– Y…i~^,ËLjüg jc>.o¹B[|ùèc—†\A·‡¡]øw¡É×…ñ¦ tOÈå3jð_Å>Ðì:;Ž›Ü(Øî³$¬Ö.–´WÉzâf¿§y›Œcot^ó¤€úÍ‘µë>XÇFäëáÇkÊÞ½€‰6^ÒDeºl-ÇÐÛÆœa†#0;\@¢|˜n·Ý…"hźîX{Åìº*C§KšózvOsäk¢.×y Ñr2C­œ´'¼”hð^¤–G&…¢3ãiô^¯µq©"ëi”o©?0‡;D êòßþŠ%Wîîð£ó^FCp!§8´Þ©Hÿ“ü÷?µRož~þýW,h¾Ä?Äà³sÿ—ñÞ.î¸ÃJÕ~Ùø§GS[ýä={ï¡"hÝý´2’쑳#HöœS#÷ÂijZðp&±‡+ý:‚Üè*4üŽQ¦KÊ×ÛcÑ®ˆü}èñrø¿~ÈCéNÞF½[’Ñ塎ÛIëT# u{3a‰EîÅ*©w­šŠ=xõÜHîêzßi€Åup‰Nòq8!Ôùp.ÌêŒ4s d¬ä– ©]¡Iõ¼2N•Írp1Ï“UJBˆˆ©Š–!N?7BH6i"€¢wÎ,Æ$Üf©/ !(G‘zíL9ý}µš*­ÓÖ6”Ssç +‹ñ²y$íweÐ\˜pQ&9°Ç¼¢¸w˜·>ýôèq£ô8hGÒnün +ÖN4‚¨ÛÇZ–ü[ž;ÍJ ˜òBßÖ`P3 5#C«t÷l•zB !™ +mW”3ìÇh‰…¡U){dà +ÈŒ¢põ€VÎ5 Ú,ÆjE 2cµ9€q¦Õv]­™¡‘÷9Q ±¬7C@››ªRL§­t8åiyœ<´èÎ(I]®ógl´t!sMÚƒõbEydhÛ®T +AGÂÏ£,.õ#vè]TÔi—ŸR›]ˆdîbãå¤VþVá}f»ëf-}§ +Ñq%{:Ìpñ¿÷OP>£€4Q>ó@罜67G9ž‡r†Žr‚Ìš÷b–íwÔ­‹K=ýÿ§¼J®+Éq཭ªn iG»Qòÿ:Kæš™:©"ñA¬ >Ši­ïWØö;7‡\$qGçL5žõ䬉gåÄÀžMÂB°Lkl†Kn.¦¦‡Ö͈˜Þ‚kè’R†£k@Ã#¬²½cœ´á¯ÉŽÍ†¯ß^…±ÞIäÅ`h¢waè0¹ª^ö„Ho¥Ì 4—F<‘fŒ¯tËRŒqÓ«-z:Š™W#ë˜zþóìýçÎäGQà$X½8êÐ#fÿÚõðÈ,6‘òÎ,zdÐxgµ¶;­€Æ;­¹ì¸>Ð#¹[Ù\êL‚l=ïÌÊ>ýÈ,¼”%ò’ªQ©—Æ x¦U®”qçt ž9…R/µË˺ÊÿH«›iiÍ|'ζwR?†ë_Ý|’®°¡3 IÌïÜÐbŒŠZzâE?ŒmÄFâÉ®Ëd'–ËÓXE3ö~{Èö[# ¥êÔæO¯ªþ{ÚxëögU5\hó-˜mU:5fÙ+Îgt>ŒÃÿw—Ó±P†Ôá®i;ÃâOžñÛ¶þßPéë;ý™¨Åñ"Ó_b픪€•¸å–».§)öÒý ,æ×φ "Ñ}…^à¬3kÞ¨eÌn–­Ó­[¶ÉÚüj$ +9_]ÆIH&Õøö£éy.i+ÒäÝ{‰´.†¥K/½ßm’¼ß6å09Ó¶QÔ‡ääGQ¢9 ]Õä8EõØR+Ê ·E9lÔ2 6ÁÕ= f„•MçÜ:Kãa~ô­³tÎâÆoÛ¢)o_63Ü ÒÉäÚ2s_ä¬òç·£U¾{CeôÄÎÀaÑÊÉ«E9P›\PwhQ:zÚI*oÿ´@¦lƒmÍ*h¡Î@­$æšFÐ)U +Š_µE8lz1Dp‰9a1U½`ÊŽör´QÈŽÉ9;Z¬ÊDC—HJËÞÒ:™½ ñ6l/0#jØkÿýç’Od›ä1ö‹ô÷`cWÜ“»x°i¤4|è±ÔÎÔ=ê˜Ì¦ÑÝ·:¤æÍÜRŠ˜±ù4óäˆo]è!k„~ëÝy#4@áñÈ1¡.¹† ³„ ¼Š«zKEš×˜ —›»6ÓH̓YRÖ¹údñ`áý™¼°OÁŠ%)9Z[ØšGm¡”Í$p&ÅÏm_R”g‰°PYa¡Þ¢”Ò +@©9E)=SóD¹ŽÁQ)ês¥¯9^” +À¬‘¿Èƒ-õP£ùv=”?R-§àÏ…&?ÍCMl›¸H™éDÍÀ·]âÙ»xÍQ¡dL2oÅsdÞÌ¡5/‘ÏÁÅÐ=j%÷4›¢yMø$¤ð’:Gâ‡^H TÍ„¶¤Îl^r‹à­=&öÖŠœÏ-J$å#h*ÇŠ2›ñЇ{Öéƒ,srÙuLj Ï|çäcèäÔdH\ÆÞ.B'vŽãç81šE«‡u’Éá¯%7[ïí.ñ”{60‘ª:Þ€2ÿ^%«zgvµ'™Éç>À_³øöä%‹‚Qpæ¨Mü>_E> 8–^€™c¦’{É]:1²£zͬ}5ÙÀºŸ®,#I~[ÖêyAja¦Ýf{-”¤ÃöÖZ­„™¶E¬õ²"ãfjq?$g•1':95QXö©#`8–ÖØˆº\Ž@Ìaö¸sàÖi•àe‚+Çí$ÄIMuŸ"0)©mëN\Åzz¿¶æ3N‹D²]wœ€d@>z 6wm} …¤’½ú’j›ôlý©7¨a«ó¬Gã+¥=$¹ò­1ñ,Ãx¹Þg¹óîKP×øë[vÕWô… Z/M>gk/¤; RâÐv túwÞܱ˜`i0cK˜ÁÕqXÑGG9ŠÆ@òmHZm€¯$‡g„2ü_,&mØ#!–– yTw€e5¿h‘º0Â.~`ߘOÉ^½4&©o($¿zއ7ôKÔe±¬wÌù܇u/•Ä%÷?¾VIql–a'Â& ¦­>Ƶ©+ÏåÂü#7à|J–*©œè~Ãz=°ªöêÁçéÁ3EK£äjƒÑowαãYôÏâ€;UŽÂKŽ£šUrM+ šP „Ò–Üq£­³·2,Í1*·Né”#˜ZÃÒ;D¤ç„dµíp¤Þ¤ìÎìOYÅ"òkÆcDœ´Nlyý­(°æ£ã­ê¡"YYôE„Œgå¬XŸÄÒh¿)cØ1#`·&ÃIb'’%UØM‚ƒõ€Db­¨°1gÇÚEbs_ã)©Ö´S=^ÛÖp‚»l¡ðë­ø†åúk@¡ò@–Ãt¨S4¾¿ôß7¸Lžšd)e9<â‡p—z +]Ätä@gN—5PCqûÿmÏ·é!Õ}¹6u½˜`÷ô¯š2ý‘±+‰e­@]8ÐW_%W:÷ÞÉ,‹¥  ò5È ›r k¦í.›öfâ´èöç‡Ð +Щ®Ó|?>áçÃJ”1¿=ú?’Ó;žìß±G±Ü :ä"“;>g¾Žú®³‚tñâ¤_“²"Ñ|‡Œdî>CÖ&M )m´< (ÏÎZçC°ßºà.Õðb½ wB»Ý@xÑãq7±ÄùñÄZÞŠ²“Ûý(V«vá?¹½L‘³,–®3ûÝ«xŸùH‚f¦a£0ntßç[“ÍcC¶=gß¾.Qø%pJO¾Xdö$ðÍ!s\‚ÿ¾$dvCÕ›?`û[>še¶äðÍØîÞÔÉ7s|‡ÇäHÀìÚØ!9•¤ÉgySÆÿƒ7_¬eöŠt}°Å!9k¸à›*®*‘²óIc€H¢¹ÆuK¢œ-5mr^Y7ø€9DìOÁúg3É/?€¹·4Ÿ’µŽ§Æ2©îŒïæréüB>¸™&â™5ðy·8+ùÉgx¬+Š4Å”HÈ™šW»…G2Lõ¼fªÞmE"kb:Iõ¬T\ ·®¿B$…oEœ lzƒ7Z]ààa?åbíÈÎ'vö˜Ñ<ãåe5ˤÚÎýýgG££Ól+<–ÿ£c ä.5zò&-NïN†)Én,ef››ñrì¥ @mcÁJkù©‘9TÚÇI[‚n•šB,j™w ~ôÈL7&Ç@³5C¼K¹b¬ê0ʰº*H4F÷ȵ0f´:ŽhâÝ‘ŒÂN©–û"c{…úÑ[îk»$wp‹'µ…XÆäb£‡Â š÷ØÊ¡1@x=ðQí=Äè¨*}- +Eõ%m8úåU®#IrCýþŠ6µF5â>ÌhŒÐÖÐ']ÿïêñ#³z0‹¶ú“Á›Ai…ï£c^(Jø ^§Z&°o²y-Å0ì5Úy®€4^>®@õÛhblÍ>¡W‘E_`Ÿ±Ëã9l‘“Ï!ü‘wW tê–Û¶#¥Õ^_^jØç”}ˆ“6(ÁvKÂvˆ0јwaYž(á§RfúÓ“€I +0®JÊœŒ €F^—"lµA/ûÜ4ôùA#åb’þ6 IH›Ç°ž´¶<ÊçÝ r£ÿ1‡FϘ ЗE8“V‡7‡[ŠV£ýúܵcØnïSŒ€²ï,ÓUˆzû ­=Ž å„Ýþ^1&µï ,/´(\Á¯“™,ïöVˆ;Uô$A¨ +¡"KQLÓ啺îLL=T)°jP¹žõÛ–gS}3.¬w”ƒÿ e +†)o€„„!X-l2l™½ª\¯úî27oU¿§rt ¬è’l›ò+%‡v¯õ2i¨V˜vá×V*ÎR®¦Ìí +¬r[sM•¢r˜qQï6ª:ì¬GQ€Ù° ÕJOúŽËÔ»0ð86ºŒÑÑÈgz”N©–’`‡ }Û…+uRq‘–ª¾k£ŸWŸo>m0‘ØÐ¶ãWÊÇQšùÖ½ökîäçóÀ††?´QÂ¥€ë‰qÅqhüɨÃ<é<êtË\÷ ~•ØÃÀ“ ™®¤Ç¢ãŸ„ÅV`½–ã¹5à€Už-„u%•ACý ó@;aj<£©ÃžAž¥ibuÐ-¬d{†N–ëÛ<5™B Ïn×p * ¹´H8;6ôõÒ B¼E2ï~i±`$Á„Ú4’]·™¿ÎâPè6ÂrÔ™9ápd½ LQ«&§ú™(UŒ&Ÿº!KÊGªÐk‘f}ØÖíJÝViÃ!ÙÍOi{j¨Õ–fX#q€G²mO=ixú`"5I€Ü-Š>U†äвEK1sJ§.*Txä uâ<îRKúÜqFQ"¾°/Šï µƒµèÞ·_ŸÛñ&-|$@.Då-àüºÃ~r²vÐ1¢Cû`m«?AÞõ]irÆ< Œr¥e¥óŸ„þ$¹æèÿJ!ù¸øöÑõ T©†&¹¨ªWÁä0` «’#À®äÎ ®“ÖiÄl&ˆ" I&S9õP-B¬È‡YZ9Å0ÂÓP±PÌÛ¨9Øœn’;VEo ú|Pý(tüЙ”â3éì#¬ia’sD¬ÑâêA·LN«(®‰ƒ©¼ƒÃTõMWŠvð½.†6? +îÉC[â‚è×›¯ X‘fÝbOƈ1Ñä+0 =) JI %™5^ +Y#3&/r€h§Ø‰žåkpÞ0jó˜^5¸NðÝ_{‡®Ÿ¹Šw)_ ÷†Ý7[9‰V½9á'aeH´áåõ0§©jW*ƒISŽV„›Œ³L)ˆžíó-YSeRH:ËÔzÊ¥2ÅjD$ˆÔp U{ä3å‡YÖ'œV£¡Ô¤XËã± šZਞ´ŸAïI5–n’"`Ñ|,»Bû-D‡ÊÔùÜ<Ï1¬ž1#‹¶ðáÍ߆µ¡ÅÃ1ÄÜΨ'íò#?^ÒerÅèÈ9Æ`Ê×긔ѵ_­‡:éø”+h¯‡xmDˆUŽëÜ{Ø$®°1z¨°ÖSR±}m™V¿c%?3·C)–±îó¢ËRH &ß"ƒE’)ÑyôJÏzÀ:²¶[Qºž¶/è1’—r‡ÁÑÚ•¯A´Crì Ò7v`*B~? O‚FñÚ~Å.Ljôþ嘄&ÜO˜´ùŠ“ÀZ kf;³a~±FÅú”kÒ £K#™X¡¦ -£w©ã#‘ÖQ—c’èŠå(ª7Ô%7嘤¾ ôm2¹%©ƒZ<²Ü’Ö‹Þb¢$b]ÕSÌE¢Æ¸zS mÇ—< +FƒÐÑ5gv)bª”pžâjIÚ>…²ŽNp¡EOZ÷y•¡g/Kr#ySÚG]fwН$dùg¡A³]$ˆKß´Õô‘ûùlMRãË2ü?ÃÍ~‡:_×·.(ë:gŠ‹±šìrqMg²$Û‰í«/*¿dWæÏýÿ+u&³uínËMÍ1w+ï=š -i¡k:ÚnÓÙ˺ÞÚB¥3ÿ|ÌhâëáKȵ¾—ã¬Ù“šÐy›Ôàe [kX®aíe÷°öþìyý*z§±ÇÈNÃ&ËÊ  h9‘à +œHgä¥z‹r¢¬Œôe+Ð1o¶:Ù¤[æÔ S42Ë€@æ×Èж4Ð)"®:—\Ò´5æds@¸O¥€êù2½*ÍJ £Þ£¿e÷ªÓ×¢>ìù-ôq¿$H²–Ü,µÆtèªÑ8­D\9%”À …Ú¨4aE:#–D¿…-¢ç-ı‚¦ßeÁãËÊ&È ¢í#Ì›aDªÇ9âäûº×ôrï4t™B1Ü" +ãÙ û½Þ¦xQ—,ã•X¿@­ßÆ,䲆‡ØðŹì¨Q_¸ tÅO##ï°ö¼Ê¯”šK´ÖP-[QæÉè(çH +¨F[ð¶B¿Îñ°c/iÔ-ù}Ù°SûÙM€Vw;.Úå˜ +”6›î¶ ƒxØVãÀÀÜφƒ'+:^°ZÝ{um¯¤óMk¸9¬âv¿9Pç´!gÚ›²ZB´‘åZè‹}ELjÍ+.PôÐΡã7ÃöJ}ø£›™6ô–™AßáËNü‹8px +ÕÁ‘R„'ÚÝy†l°ðºP¦ëc:t 7ÃýÂÀáðêÀèÍzSW›C¶Òî4¥'+æíP›Ò0Þ`!®ôx}òš/ÚÛæcjX+·kåó­µ|-ÄÚízÜxùî}ÕqóöÝ/9P_rßÚÛß~¼=PhHêxøÃ?Òçµ|Ì™‰Nƒe$ËùþãùöùÛÿ½}ÿñ†Ÿ{É(i!!e6²£PqŽÌ .‹B6,µ"}[ƒ™fòE0¶Î*±Êº²Æ`Ì™ßÁ˜Ìµ¤+aQ=?§1kàzˆÒ^õë„ü Vº –Ø«|]¶éµZ©§d-^Uö–C½ÛÇ#Ä\ÙÈícÄzJ&Ø"|u±Ö”DÔ®Föyj… 0ÕRÔï2ƒ|ž·å÷°I]àè =wÖN§Üû­.bÐÂ((­KÌžfÄìŒ.À‚˜I [’Ô¬ sGÄðB,Å,Q+]Âxü±3š›CpÅ©D'¥Ûã«~?½™»,C»~ ÝåRÀûñ-§NÌ1+`{àÿ)¯–¹n¸ŸSôÆÖÿ³`°à…`zãû/REIõÚ3ãÀ O×£(~K$V©‹œñSϧGVr¹¾UšíËh.3¸_3ÄŒ'²^0^"m ¥îÃáù7¢¨á# w n¥ªr7€T Êß~þx²Ì£†!ZÊÎû6L +lÖ×8ûõóäjFîN°ó´Åd·˜ï”]`Ÿ/Õ‹ÕŠÉÝ/0Ú¿it½r¦Ñ^F-J׋úÊ™@º£DGòX瘰–T§uIÁî›Ï§ÉX˜<O,ŒIXH™­°”y`“FàÑ6Xb*£Sзš†N?ç/\Ž…Vlo…ël™e;^—å}ó£eï°—0eoü1ò9ÙÿÛg@Ø›Ám–º5Ú†º ö~+É| n^ì&£,öý¨O©Eëóbo›ÙÊ¡Ûîì½B³È;ìNÉXXÀ˜L»>¯“FÃÞÝ´ƒ»úBÞÄÜ…¼O¹AÞ§¾Ab¶ÎôÖ÷·;í;ö?·~5ämçùEެ논 ö·f<7gùp!o`†ÍfÌö äM,ä}Š ²=Õ R6+„’·Y!¶\À~q!oùãšzØ.ämö +%ïSn­äöBÞ6ê&T­Zææl]/ÌmöªÝ-Ù‹en³Ë)s›Ü/æ6«œ2·Yå$õ’ñ1÷¯Ìrs;mIj¾lKûkú »Ûý€"9—Ú-˜çÀëgý+ôòtÕöæ:‚E„+Ù3¸*†…iV6ø–¸…ˆ¸¯ 3P„èÂC{AÊYØzYPrlB¢•P; Îª!„Ì"ú•0Õ „µTv®–.W_®anIy¡%@%/õ q'R=/©i*x¼Œ½LBã–u°%¬U꿱aC3³îæo?¼’b?IkXÕ¯H޳_?3‡)¸TǶ–]ÉÉ¥F u,–cy‰\ôx«&&½lyDL + àõ)|þ‹‘gµÈÆ,û‰Õ^Ú€JçµóEzð™ .½ ÖC–£Ø/Ó4%àÕK‹iî j²G6¦yÃ5Á4*ÅIZÚ–Hxý +ï«…Ší¶Æ¹Ùàú\æ’÷Vr´˜õZÍ„JIm” +J„H’(I¹&?„Ò$A”kb4 Íù U‡Y±*~tð¾®Hg(õº _ÉfúFË0€F5¼lCIˆëÂéø-®ƒ­EöZÔípÙÏ}ÑTëŠçó®Vú.Ú¸Á§×jÕÉ ©è8íŒZ +²ÞiXÎnÖÑXª2ŸûXg F±Xëó —©%cœˆ®$a/'“*¡(ȬA(õ˜Rõ½’C•©=·–‡T+[=GWõ‡¿5¡pü1жà,Ð7#Êé°ü®õid2Lè[‘^ÓàjƒUþ5¢>üU ΩÍøfù„2¹><æc +XSŒA€ZñøfÁ±ÙZ¤-REÿ«1aëȯ3æ¨ÂPá-[…Àð0iyIK¹ÅnËXñ^«UÊXs#–ZˆÀðf”h +‘P-G!Êõ(D*kÞESˆ´£—£¹RˆêÒ®:@tŽB4|{úë˧ÛÓÇ>Ý>~ù”nü‰_þÆ +C¨Üí_üñ÷Áã‚$ùô’ñ{ýz?Ýú㻼ýô|\ +¿s Ù¤þõ÷Ë“aë»d¼ö5š[«ó°Z ÿát +endstream endobj 1556 0 obj <> endobj 1557 0 obj <>/Border[0 0 0]/OC 1559 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1558 0 obj <> endobj 1559 0 obj <> endobj 25 0 obj <>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 2/Type/Page>> endobj 1560 0 obj [1563 0 R] endobj 1561 0 obj <>stream +H‰|WËŽ\¹ Ý×WÜe²hYï0 cOŒ âðô>‹Jâ``g‘˜ßÏу•ª.O‘<$EQÒ¯·w}½ûôÞ^?|xÝìÕÿþóåöîõÕ^îzýç-™\kãúnɸðáS5Ù÷¯×o·ßýáóëõÇŸþüéz¹¾ú¿}ù÷ßÿú \¾¤`bŒ©^¯ÞPúñÈäh܊Ɣج»¬IÙ–Šx>„¿_¯ÛK3´ËEgb½¾ Â_o=ºŸ Ëêëáçëí_·ŸoL¶s“ZÿõW¿àÿO×Ígkr´ˆÊ%;©ä“ñäEàWVÎBès™a…n¥è¡Dò¦óâœIäkª 45…Ž®Íq +Òy¬óTå! +:Ì¡ðäXñµÜ~.÷»¿üã×wßøéÕìõý÷¿Ñ&•4VæöîãÏöúòß›ËÍ4…bl™Ä®$gp&!w)™º½Ö~°_ª(Z¨®ØLôeªžöK;$;Ó•ú^É]W ‚¢¦Ø³3u$¡=?:ø­(NS»o‹†µ½aQ×Ëã]D¯Eģ˸°y«€ +òXɾ×ÉŽä;ì‚É-÷%†ÄÕÎwï=¼0(GŠ!š!d‹Žäû°sej%†Ä•æ»Ímg ©î¦O³:Z¦šŽòÍ$‰Ý”ï0òpÖzÖ Y99ÈF01 QŠa‚ +²ÆÏY#¦õH0jmÿVz ‰·ƒµót£IçaLØÑm½ó¢ñØÍE@"fÀ6«c‡ŒØ0­’üû””ƒƒèþØùÅ0¥ 27ÈÅk³ƒ|FÖFõû’ÄÁÑ}ßÑ]”B\»´¡£Š€ +Ê#)”K™„(º»V”Yé1¤½=°Þyhê1I‡µô{a ½ªÝ2$äÃLˆMí{ó*†´'¿ÇP²ŽˆµÌ&¸A67 €Ä@sÞz­£ ñ¤Ä7ªSå¡ó‚Or>7Pþ içÄ^ÀüÆDîm¡N“oÆKC¯–GÍÓœnVn6ÇØV¾Ô”Â] §“Õ€ahÍ ¶ã)…i9 SŠeåä »ïù¨)•³)mŸRñôS5¥ÀŒÃb›R‰·ƒõí)%K&ísöögHï½a¨7rOqß i_ãÜ Ê&ˆ¸!»}(ˆœ eàäŒyß +_ãó€‹# ê6ßgÁhܶVÔ‡<®hE@0µó8E–Ë8‹±Š8wmÐJ)W;߸0ÖO£C2) E @ÌÁëHî1¸5¢”AÊÕÎ÷F±‹x‚Š Ø)A &™‚®ýÌÕ +{X,«Òà”Œå±4 +Ú¾<,ëÒ(%®–¸Úùž—¦x. ®úswêòn !Yv†¤9ØT7‘Ëk)=‚ÄÛÉ:ï• +æ¥òvM#Y†¤K$ÕM`žÓHé$ÞNÖ7ªæÎªéž’qG0´š†í¸­¸8¤Áõ G|{g ¬šK*ÃÁô„Ѷ•[£»©•[õco'ë»jÅO+*êã®™ßnÍX”»D@AÌ©dÄv™©6 +0Eöp°hêÒÐU®zPWãü1€woqx2°÷[Äݹ +Äy9˜ž7A–I…¯Ë¡™\l>÷hvÌŠ¢P…9ÔÔ7§ß´d›¢Æq_ó›câís<Þ–·f¢_qÔFoQF5†€uã8Hîq$ãëxØ*-ÁÄÛÎùÆýÑr­4ÃØª^Þ¢]¿- +ª0©„Xëš5D˜g\¢É˜Z“{ÔMy•ÚyëÖ~Tc\e­ê×J-Zm\¹'¬o\(åöÁTBŨÄlžc}òâჵ  +„!Ü/ml7eLA ÀšðG,+'Ù˜Ââ«­gc# æQ@åþ0SvCî1àF( iˆ,N²7jÄï:Ću·}ý :áúü±Çwegb?ÌV¸5÷MΠ‚úý¤×ÌÓ'BÅAäB¶^~e@yaVjÎ ièG“€ +B¸‰Iûç$Í.#þ•åA&ÅêÇ#Söäûs§‘°e+ )?"(j_| TÇù¢¨§°å, )?"5®kºÔ3E„0K½>uÆü+ʃLp|<æËàQS­O+ÿªö  ɸy7¬8ã5nQÖ÷S—AÜjúgà ô Ø/öu?ßF¶F´ë5fpƒlð»?(ŒR²h°(>¸f8Èü^†fZ]d>C”â´’TãÓV´Í´³KöQö!{ÍÜÈŠR¯˜o‹l*(@œh¦ÉîûÄLý®Rླ¢"PA½€nøšv$÷\¯6])1$®v¾=[%†ÞsM@¥~›Ûb˜ò}xZ%×J W;ŸŽA¯B8W!ÜúgOSÚj@ + ˆ“ig÷QØWº*ˆŒØ©ýczé@r²3Mö<Že —,ó縳}Û3¨ DÓ\L“L}l³PÆô=†ÄÛÁzÃ'ÀxÜ™K ‚Íw Ÿ±¿;²ÖZ€öôÀHû2Ö­$¸C„¸¢ £‹!IuÚézTšÆ¢ÄÔcçÛcJ4:}$~†$GŠAÊ€çT[1ˆÒ‚´+ͧz3àJe'ƒ +*ûîdYï¥Ä¸Úùöô”š›Aá +Zö¦¬÷Ȧ´ ºO)–u z‹pÒ²ˆ ÉRO;Ýœ´(1$®v¾=éNZ‘!YjŠAú“ÖJ W;ßxä\v]…±‘ln¾lö†wJR׆è…@vò†ð¯I~d¨\TtwXžÔ Û¹ÕñÈâË¿@ë}Àvü‚ã×Xƒeqr=A¸J/Ü<} ù*8’KÌÑeœ9àe˜ ¸¥r6#à~KØ—6ä ˜ ìè‘­‡Ç Î#ع®f6àÆ˜ ÑIJ…@Àý†§èàV”aGlÏ+äU¨bøp¤áª–Sˆˆ¯ÖML‹ ™@ v„ÜoÕ㳇#ZŒ°§ƒ¯G¨Q ËУ(8!{M7ú¼GA¢c]œÒb„=|otR¤:Å>¬ú…j"š¯Ï@ä Ÿ +ä°­Ç¡&¦ ÝoýfœvP öö„µª<6“ƒ¹7˜ T®{é!‚ BðZiÉäç ßózåFõ²¦Ä†I†ç.nYu ,çMjú½1rLnŒ ‡iY*LTÃ<ÂÃIY.ä>¼9WKØ´"®Ê1¸4œ¬[‘àÅXóŒd‚Ô‡Ïîp 3’ÿó]&9²Ü8Þ¿SÔœÐ<œÀ€·}„\t£a¯¼èë÷OR""Ó‹R_Q$Å (²æ$vMʈ«º™dO ¢?»yç "ƒŽÁ€ÊkÓIÏ.YÁƒTÏÓa¢’h)Z¯8¥[—ÔàqSm»N× c2ê˜@®$Zúœ@+i•2Ϩ˜±s¨weñÓ: æ)úa¯øˆw¥p³åRN\×Ó*ÇéÂkQoÐFqóé42z*îÞ̮ޠÝ2ºŽzîÅ“B"r¨ŽÓ‰•zZ`ƒeÜ$n²Î>]“ù´ÀAÈ«ºÚ»ú´#‘Ø`@ùÕêÕY¿yŸ´À¡ƒ¢ªhïsîÌí¹Óµ"Ô+Ním§ï¾ ß±•Z ¡è¢(¬$—`0àJ®–®ÖãgÚíXÐBÎFë´zóžgª1cAÝͪ<®GÅ¢®ŒS2F†_ؾÝÒÌBß*Š9su7«äÊ—‡îãJ“:šøÁËxqŽî0 ÄÝ5=d¶U=xè WK;Êrm«òúŒ;gΤZÒpPâ®è挠7ë+£¥u•;ȵ=¬~I°ù|}3:Py-Ùrã¯yI6gžE¾;æ[Â+–䃚¤³ ñi[¢èZCÖaHíû–uY:…Ý!ñÒæ|ÏQ20×ø´ý¹‡Gq uÉK\öÖ¥1P¦¦üؾ³~³¦º¨Ñ2‡¸¢›9 –ArŇÜÏp ð‚ÒØ%*ãµøÐç‹&cDÝÌ}δRž/F/‰ìF_ÆõÅ7 ¾>„`WãÎVE(¾‰¾E’µëyØã7Àq{5}R?}—Á€ò«ô›FEäF~ás!Y»ž‡=rÝ4&¬ßöS"AçàSs‚³î³I—ï_ 92Âÿe© +n6.f׳ ¯(ŸÒ˜š½è‡™Í§5]HèB÷ÆEŒ˜š«¥/ýl²4éû<Ê="é‘uŸÇ$£‹Aѵ)¹Yâ¤0¦qÉ#ßÛ­kh2ÚÃ[l2U7{ìCÆêq?²ö/ž×Ž,õ}k¼ó5ûírm«7gÂ-åt»%ŽìøÖxKÞøxKdízö¾–®³…0Äjï“ÆœhÎ&Ò®”þYš‚« ré Ê^'+Œ9ÑãžMÈJJ¸ˆSsµô%ÃnšœÐg­lZM† +‹|¸WXE^a]ˆ×QÑÓ䵯R5"ë4TÙ…‘ëæŠ"¯².Äë¨èiòšÈ—¨Ø +‡ñ{eö¬ŒQ±KäQÕ= ß +±±{ŽäwËŽíÅØÈ]òØð:*zšôTŽq± ãÐïžöä¥Gä\û?/ƒ†›™hÚ#`—Æ¡ß#=Ú1íg÷[c"J‚ž›±/ͱݤ/½^}­FÏÚ¤<;MòLUHÁæ,?ºKVÔc•×FÏ™]À€+¹Z’.OYKn½”c]`@·*Z§Õ›µ´~¬«À®äjI­Oa¯.¬¡I^×õ ëbmgèu+j^!£AêWõ0ùðÄûÝöJ™&“K›jèô²a§u¼8~k—Ž7Uõ0ù9úxö¼£›×P\´ø ©ᣊî+qúÚVCoî‰OQANQÐö°Ê•'⬅gÈ[0”ô.ùVEâÌæñ)Èrm«ŸÃ—­Ä0¸hŒ¥¡·ç¼*}c|—Å©­ÌÈÄ<×™è>#pr½JjpȘ×ô°Ç©fÚ0%î¼ +y (æd¾Ê̸9¾O ¼Ø/ÄÁ‰®MËÖzÀ‘›øŒK‚Ð9©ø2½’(q^ÊÙ} ¾”ÝWíwƒÒ•È‘;}5cN¨P’ÂhY¹øZV¦áaçËx`Ѧ¾î C^½‘k=±'3ÐÈ2:§ÕqƒÃne¸ü ‰É'J:3ls°.<íãS“÷rYA¼û¤Œ|ê(ú° éÌ5>m“O_® ó‰_fÉäõ ¶ù¡Rædàš–ß%k|Ѷ02Ñc¡ºŽ:®–¸îš‹ÛoEì sBõj¿wµ?ºØ ]GWKl_«qÙ'íú²î½–Óôs‚‡Û~ß§_jœŽÏ¥Œ¨¦§=Σ¨ùÓ¼NϘ“vFß×lz)“:=‘¥êxZºØ¯ÅF';³1#Ðy³o$DÁ¥”˜¦§½«9~ 9³1#eié0/–•9¶‹ðÒt<-‘}n µ®¢çSâ¨]ÔWM<•Z#/¨¶âmAc4 uw¥_Jž­‘jI+(J‘/y¡[¯º¿<§ÕC<;4 «8CA–*i4²†ë#=ôÙª€¦ ¤R"ƒ˜3Sw·*ƒáøD'õrÚÚ)¬ W–>1ëPWTÌ™«»YýZ*©‘a‰ÄCÖPr´üÊÜgs’èµ>]‘ìS‚\Ù§µ6æÄ4=ì‘kN32ùx‘Î`a,’ܯ^(a/6 gJ|mZn¶¾4·ÞSU–Þkš2Áí­9Å, M©g—®yz¤¶$€TÓÕØ!³|å•Õ¾ c4;ÍìËšGÈ"´ 9RMWc_h¿ª ªgPõ¢¡l:sÒQjp\Ý$Ë÷/z.†.ÏB7?,p,¦&fÑH¶cU΃g0*£é¢9T—gá{oú?'‰ @ÐBwžG¦¹õ¢§óÛàŸ|…©–- +/–oDAp%#•F$•]æ©R©£^{'•¬} n¼W­»H™Ô Ή¢x."£œ«±Ý:÷è£7lØÛX‹!´¬ÉŸB°ãÓ¨í1ÒfÿU/'>t&ØúV´Ff[¦›(pÑA°®:ó»$j/j‡•Vt•+Fס¨II®=³3eá×%m Y»«$F˜Ò>â(ã +­~`«u•ÍPOK⃷¨)ƒÍc§9pô‰¨°Gy«G³¦ÆŸ¦ Æ+•"',­*›'âµi +à¥m¨™´tì´WBYÞ>”ÍÜÎWh«HžÐž[åàØêò]ÛT9|L6ÒwO*X¤¬@››"$©òBáîUàÀôy`«³òiV™æ$,ŠÎµK;¬§]ù0ÑUA4ZpîrgÇ…µ[ƒ «ós‚ÜY(T?ãnÇ "‰æ¹’Ø»µU1H«ÀvÚ)‚p áËXêwÍý°Õ‘Ìfó@Üò#LÂåS˜Ûl [õÀAÅŽáØ§0à“ŒN‰OPžëÀ¶Veè"zSˆB“ò…Xé#üŸòrÙ‘ì¶Á𾟢^`Žu¿†¶ƒ œM¡Ä0¦W à×ÏO‰")ªÁdÑ@ë+Þ¤C‘¾æò2£˜–ªו4{\t-RÞôœ€.—)éêÜ`ÁI´>ŽÜµÖq¿æ^Šg†ù¼ ‹ɼ«kóƒÁtè Kl9ƒ,Q®ž …Ân|Xóeœñ Q•çG†›ùÙ¿RùžCüÎøiUøéi*úò¾¾(ý_?~§Ñ/`ÀoBxÏ9©†÷¢7…­רêÌ;ÒS‚·r‚ÔÚÍëó Æw ÆWfBƒPÁÂIRä8 –൹9=›îɬsܱÄh ¦}–UæâIr.˜Ÿy-vÆ-R³ˆÛH_Q™%T(D…Ã-jíP~–5Ø}·˜€Û¹ÛÅ” f©Û¹°»•Ÿy-v›[ÎÝ.¦Ãe6niaw+?óZ ì>Ômó([Çn…)qÔßéU0•ÖÒìØŠ03»§ÍyhÇž…)ÁLæ7çsiömE˜ˆ™ÝÓp¾J‡Ý<*FØ7/Dv&zfÿ(SC`)!béæïŒBN#|â(8|!²E… +ZÝBˆXºùÛ¢°i¿v®Y+„óZ´$ó×®—„¬ÅÆÍÓé_òíYÓW'¸ñÏW`íW%x-6nžvÿ¦ÈÉn¥F á*&ZRçd¿,!k±qó´û7ÕNv+ÅÊØwÿ\ðd¿"!k¶qó4ºÌÃÍWaËÜ2»ç>ùùÑè,;½ÇÒ0tz~Šž<ÓðXÀÛ4©EÔÒÍ…£”™£¨cNlÊ„àŸ–Î(&A˜ÝËøQ¤QK7[¸NÍËYðËp1!•¾ŽššËq +ô€›?ŽÿUõæàtëºlxÞÿÉ„À2&Xë˱íÖãU½9 ·Øyê8Œã˜ÆÚL n$‰ù +(Ĉ…&ñèÇ´ÀÌUJ‘Ø:=a¤(að'Ð l!aLð$[)¬0Dj!±uz¤0¾xN~zä–’ñªüüø‚ÙïE ŠÎè-ôüø‚iºàÁh剭»Ç[ Ñq ¨)¾$ GÉÈD#?æ#§ÈØ:=R ùí—ÇÇÿø×?þøÃo¿üí×Ôúéç_ƒ“êѤÍ×y“ ª£ÅÊ6¸:U$x©6n¾Æ=²xuZò7·'Р::éÂl¶„è8ÄXª›¯N9YÇP’½à QtJf*S÷RzkÞ·w9Fbìty $âª@ТZ™ f¥q>™h½›¨#clw9? +R¹»V¥_.­BÏÀ„ò-РŠ.NG.ŠÐGA¸¡´®2ÔÎÍßFC1Ô0\>ÜîÈcS$ð¶¢+­YËÎÍß네â$sJN˜³Çí‹4”!Ð\/ÚI[Ĭ=jêÃhŒõó#£÷DCÌzZ8|Pp†eŒv³;炤¢qH¡ATì­±†÷pùuþ/Êw'o&¯ƒI(Çy¸+lç¡ë±[£Áç‘ðYíy˜õ°pú ˜ ÓóHi?]-hÐØ±ÑãóHY~ËVñîàõY¤ºÎâå$ƒͽ?±ü‡ú_ÿéÿþÏÇ4PèúèÙ´&7g J_?~§ž‹©¥e7ªdH(ëŸ7ÕC°`® ÝO“‡òMô0ͧòÏÊ,¹Rßa{p¼oö€é>øe§]qœ—@ƒpóÓ²ÞZcÀ܃ g$æZìžÆ4ÂŒ¦úÈä½ò¦™$-XUM«Æ@†nd„æZìÜý}Ç•F.×ÚcÚ®´À 9¼±êcSÈ^éMNвvóúæJ§Ûd$C.±?*æµîêÈ4ÞzФU°žé'©^Ѿõx­FvOO³ÓC2jËÑCI{`=Ó@fÖã­§HMíþ¾ÑCäsF õ‰ÇBœlÊ4.hþé©äÇ–7=ÇWÌm<³TNµvx}Õ¹ßzom+—òÙL•3l–Â¥·jåülë×µRýÃùŒ[}”fŠ›a³ü©ïYå‹-ÔÊáìõ…¤ÿž¡¶Ì·‚™4}¿\ eFCÃd„4ÚfØômî6 S‹wߣûn\FNÐœŽ‘Ó0ž'·ˆxê„ïZ‹‘Ykkçô¸HDw:K¹ü1t*’û¯ª¦HäŽZzTAjíæuD¥ØŒªæ–+’Z ª¦fàõÒíÐÉkµsó÷‚¯°œ˜Ö*é˜Ñ 5H²š›UÞ¹`e RKa4•˜cæÒhÑ7\´Ìå  ûà‚•1H-™åÀ£f Y‘Jß•>]¡P¢ +4³N¤éG'@¸þy¼ŽDF€Ú¹ù;ÂÀñ”zçx- +ÜÚåcSô}†ðëÊP;‡¿íµŒ +Q°‘\)ÎFÒÆÉæªLæ*f ÑòüháJ)B\¥QK7ŽZëW…¦§(P™RÌM™T÷xF1 ¢@¹q•"–nþÞŒgA™\¶­…I]1-Ȱ٤ŒêêbRT¤Í)PCw—{Ù:šTÓ‹ › k e6µYUD€Wjâîì{ž¶Ø.aÞŸ¶ nÈ÷¸?mÚž¶VNвvó:+ŽÁµt †*vU¸!¸8ƒ™hSRšžUNвvóú:µ0bqjºêC¥a䱌®Š*„›0CÜxÿàµªŠ =‡µ0h“c$ÆN—³ÁQ+87Ng1Ch«ù d¢HÂá„]Ž‘;]îý½¦‘À48Ü“ +}DT]ÄÜ‹¡†ù|µÐñ1ÚÂð+y¢~e%…‹wß#8cµ_)¬˜ÊUª¡– D=ô-¦Å(¦`É%©L-Þ}¿™/%»ÂhêºáJ¥}cJ"WÕ‹R{à3¼7O#©„ÒtÇþñªƒ¶0%‰ç.ÕK2žá;äÿñ]íÈÙä60×)öV|‚'p•SáìríF|}7žä|£Ý@*M @²4ëebŸéãI¯ cFAò±þÇW×½®Ðçw…0%þùëëo$MÑ?í#×¾ü?‚×Á|5Ýà:Pp»û#¨|"hñ‰àH~§‡W”Ÿ©@/*@0…X΋O,‘º>¯"‘ Böy|¼"=¨ íP!±Dä‘2žñ9űÝý1ÑÏããé¾¼3Pð*$”Ʋ»XbŸAÿôXûòÿ:1·èA…„À Ö>}…5à¢Cb ?¯X2zæ_¿={ùf²´ïíµvú^E9—èÉqã6b¡}â’òÒ×e˜\ÈqôO¹rÀYNµF†>±Òêí­è ÐG„ “ƒ„£x6)ZJÕ—‰MÄêå–à‘ +ñk!¹X¯„ªÍÓ&ãçï•F<]$f™ž†„©>>Òà—úªÛÓŽŸW¼gx~žF‚ݱî4¸O#m8~^ñ^iÔòy ^î´}¤1Ûó4.ŽŸW¼§FÙ;«z‚xtI„o®Q½1éKŒÕ½:0é®S*RzY,<þ[“{àeGNP9¦G½1éÕŸ9&9-é±·™á맨š<ܧC»è«b=ör°Ü³¯¼N†»ª¢ú°:XzûˆùÌ#N„x«jä{–[õ•×ià YÙnãXìx{Æü“޼þº#‘}…— +¤LŸêîs­[F»-Ⱦ ûâÙ“fšmª…ðhZ.m1dõ±4x ‰7JÑRÍ¥ IuCAi%_voï¨Öf†>tKƒE»[‚‘PýH& _Ú¶ ÿ/#ý>~Þñ$;Éu¯ÍÛiŠSŸÂÉ/HêN xS¢M^ Mæåe—ÐñöŠªuÃ4#ê0pt OgŒÚ´0s”î`ݼÌå§2Œ‚,o”›‚hu &Ýc'ÊÅèšyÇ_»¶Quqo¼ÄhB}´û®85Ý'¦q€(RÇÌÔK™h”Z$´5µ‘jjsê&dMp,>F¿,ëÖë授-Í!…(§|Ñ÷VÚéZì¿%Ôšaýœ$šXS‡sö$^]Ÿ,—àÐ[œ{ÓÊm£õ¸P^3Á­\(ó<4Z¶zuð?Ï|jÞkö´kÓö¼ÖNVU´2ä÷aU7 + ›žDEéhìͳ$¸Ë¢M Wì½iª°!°3|‚¤ 45EJ}t!Žkl¼ÏÚN‰Ø[Üw_½š2jT2ÐZØÀQøØ‘Š¥±™rñTª2ªelPTÀÕWÉØ8#Mˆ%ÍÜÏjÉ;ù'ô®‚íÙ’-8¢¥" +kwZÖaªï.Î’à÷ҙ湊>H Q/<’BoåÑæ^›º-£ÄQ–=EÜcDB¥Su½iqäþÈ,û®•¬Åâ@Óv-ñ³o-Þ][êW€ ¥êéÙ‹76pyiCç\f ÛÈÛ{“ÔõÐ|ê<’Ä5Ûá›"N‹šì÷ˆG-®JÓ\­•Xˆ·50‚K‹S׈ØÍÁ\ŠÈWP5žmr¡ý&HeÚιûåÎoˆA»³9é%'¬¬uçÀ"´Õs«#,a°58.g…Kì‘ôΆ”°ceû•1èä è2ìrÁ»ˆ#3ÆhÀÃY Pä’‚­ìXŽXUÌ£“x/8JQËŠ!>+^»FVÔY,§EUïPž¦׉Ã%žZR ŽW.d ·eu¶¸Äq€/V¦\ä¥ë`_Uûn2\AWÏ<ÊR™µ Žö"à´î4NŒêo.ˆò‘î¤ËM±%×â$4ÜBÉdpMå},y[H×¼üTíC¥Ghê8hm k¸ÌÖþ»K48º·ö_î­ÆòŠ¶ØžíàŠÞ?kÏ›ÅÛäè39ë.d££äu7LT›'Ô))„˱Y¶×¡µîº)YÙÈ7„öš7 idRaöNt¬&©p›õ9XÍÌ&0ù<«j<—Nè>m¨7®'ÇÑ}üÓ>»¦ ˆùÚ· áqU +b¹ø8WÁ«°Ë”äN}“ šqÝI¾.j*ëi.×H-¯¢Ë@*+W˹™ê:çQ‰m—-G®Tc·Ãk÷¡Ñvq8ûŠår=ÕÅáH¥åÚrµCM*Ýg¢ÚËpišõƒ&è +8ú·€zS‰8ýÁÅn­‘fÍÓ„€Î¢Ò‰óÚ åPØ7(ÍÂN®AÆ8\Ö`zŽ´lÍ$#3TL£gønJ©µCñ+Øxéa¬][sÃÕ®áJDAw©¡“Ò°87ö3 ÇXÖL "¨Ù­2åæÔdN/•Ô¢¤š´r“SkQâT­ß##Ž¢ânMcY"gÓN„F[¤ªÓHÞ +Þ Úix˜Ý¯Òª–µÆÙ\Ï,¦ºZlŸ›rÝ‚1 ·¹“ƒöæ’æ[ÈUiÅ U7œ^ÈUÁ´\#HoÅsïÃÌ&Ëo`,;X™L¯ q##‘(¶=0x:HmÛV*|æ:(áDJÍ:?w»ÂD3MJ£—ÀØ:Àâ­X–:øÏ®U­[a´÷`tþÇM8¶9Œz‹½‘j -@3V-jÒ¿sàt—èO½Øš?MʬáS¦»5Uü“ì̽Z¯ã›ÄLÞVñi9«ùÄ€ñ9G‹»Ö]9A)€(¯‡"9±”VhÏÝÿ¼1Pkoóhtº1¿]Ÿ_À¸P3ÍTI›€bm“L[û±bÓÖö¡ãE ÔƒAÖ"š&\!bfD@ÓV3(-•‚aóÃÔ[+;°íŠ®q˜aƘò- aêYì:õÉŒ!·c}Û]›Ž`ÿ§¼JRí:’èü­âm@_Ù7 4°dŒ ò ´„‡±1ÖÈo¿N4‘÷¦MQƒ]FsbaÐxÍu-90½äg',%e«i.ƒÁ%„բ뭫•YÑù^Ö†°lô¼¢j‘·YT4¼.aè"à¹Q°Á«aq(÷퉫Œ°\“˜Ü›¸Aˆ–ZÆfYH. 1,y(ô ÎR Hª¢X`jEêP5ÈêDXiYlj 6°Ò‹&o„¬^´¸0„@°:ÕÙ¢\}(–†.H¥”uÃ_‚—õ¹©W¯€¦*) ¬G¹KQ­èò¡êÞ`*&óUJU’-HZô¦ZeÆrFI‘ê+O†&Ú4œX2_M%u ¶.yl‘z ½¡ +áIO¡è÷:$àèR²˜Ò‘AyzËÜ{;±Á +’‹±–:“B`HËÎ}¿"8ÚP ¢KïÐs॓›1ø:ϹQ¡WgFY&W’¢#}‹JŒ/èDÌ`€Ù`Êx ½ —Z”q˜Yâ4©É’õs™ãÔŽ¦XIY˜4¦`uê@Cõ–e|ÐÆW›¨¾ÚJ’÷ÁŠ:¨B(zIH:0P³Á֡ȘêêÅS¦  fÁ*Ú§ÞLʛغ¤E,©&Àt¦ì‚mèÍ™ OÖ<`ÆW’Z¬%ñ¼´óP!qå !LI +W +MF2Z@zö€Ü Òw)® Ï„¡«ÞDštÆhQÕ»0²qõ!XÍ7a¨ã®òžH`‰Š†žÞ#¯}ëî$ÿa­Ísaä0èÏ}ÝÍøw§Š/‰ ¬£ó-Œ—L`3šÉ³ìÙÁfª;¼'CÈ ±"€:¯„F”»Q!ª²«‰Èa )+ÆHb”J§>äÉõ^CDiyÅA‰Ú©¡ÕªÏß©’J2"c2†¶#3°3=eià®]¥åŠ$ )”4;Á$ɉLéÜU^¨´Iuêijí ž&A3'éí(€4Á(z!ç@m,”°&¢ |,®šCµÐgÑ C+õÂÐ×µÐaS¥¯Bg¬‹>#;²îÓ9× Ãԡ܆wÚˆh °µ˜ÀMVá¼VÒj€HÒÆÃr×´±p:FñX|Ì«pàRÑ>`1¿¨ÒÔ9-1o謊 ô^”.‚ñU>‡N:(@˜#cèõE +8Sç÷Š8Ø÷éA 6Û:'C†0ŒÞ5ÇfœÄ(°¾Ô ùEØß°ÉÝRÖl ¦„ ®qW(ë;S•¾°Dñ&,æeI"–ÁÙ_—cqRéĆ´±ëmaqèXÄnøîÚìÈoÚKcÉK´c2¦JŽ=€Ÿ©;a¤·…Ô¹N)Ç¢‚LIÌ[_Ä&•¡*‹Ý ½‹¼1ƒrÑ9Ãy³(c¥ñŸ´öç:VÑöÓ®›x=ÑÀµ±î¦.­i¢)¥D\女¾4)›ëµúâ§—C;\Ü™ZA´·(Ôr”W´Ê +V“ ±‹³–$Í +=Ðx2ç>Ï\dOߤ¥iŸ'&ŽaÅXKa ‹Y +"ôÑ–4ÌM®/,~Ž•Áò°ÒÍepHRqa¡)ˆÔÙ1kµ Vty‘㟽ÚÎòÛãë#ÒÆ¯¿Ÿñù;þ~z>Þÿð5<ý“ë +|†I›úü¶µ*Œ©¡2nà7žÒH”ÌU¯ã—.‰†ÿßÍ5ÿ`ô~xxàAP"y€BÁ¸"9`x ¢Ûß ( ›ÔáݱHŒd}¿½°d"¡ 4ûIÇLâ?è~Áâ+Î%6åÉïÓ7tÇq—›M #›*-Hˆý¤c.ñÔÍ6Ũñ¾Ä)"}ê-NfÞo··8…AÙzÓ†¹ÄS÷i“Å)fö`ì^m˜y¿ÝÞâ&ØÀ-NæOÝlSÂ*P®AJ}{8uiÃÌõuu‹~“æ|9昋»i½™b±Ißæ› 3×Õ-0ø½Ø¥-©—¸›V2tM[ʘØ;šfô†îØòx¿í±‰DyÛ5{vÌ%žºO›V„0uiÊ^ªlÇ–ëûmRÄœù¸dÏŽ¹ÄS7Ù˜&£c[Ç8å¾…ÞŽñF¬¼%=Œ²3GÚa“„-`Û®.èÅò0„¡ærN!—vhå¨ípÈÍŒIœÍn +¬¾\HŒi¥ˆ1~N!—vhecððƒêš×?°š‘“2“ænPW9ÛÕÁ˜ˆ2î§pI‡Æ›!h_Í Á¾@Zx@¯†,èÅòˆ¼\N)°$_û°óñ*Mo„ËXû¤iYžv\>_Dj[ÿäßzï*÷u™Ä̽ðƒ‡1Tap‚‚Àµ¶)äϳ´þÉ¿ýê¡€Ô2cRK„ |{€¹€á {ÌHŽ\…vÏ×£ZT)ãìÔB\Ò¡ïjR,ª…È¢0_Á üQîV+"øÙv„?]Æ¡‰ô£Ò +\60¨o÷r펂÷ £âøºfÀëQ'Nç–3Äݵ]L@5í-ä:3„Ò5ÜLàõhÝ;#­üÐB\Ð]™ðý—O t?ÿò×óÇ÷_>ýøùÙŸ?~÷h¤TunR +Ôϧ°v RÆï—¢DDFôºA; RnšdÊ8X­7 ‡¦k5ÅÆEv­&ê†Ä²×’2du¨¼–R¥auÉœZßò­Ž²ŒÐ{[Ú”IdÀOè· ¹jb3 ³T©E©‹?±C–¦Ýò¤¥EÛ!ƒ\ÔUŸ¬ ýʧ„£|2ýê‡\ŽòqȤZc,&Ð|/‡ÌÝÝ ÆÌ¥|ôÛäœúdY¼fEjoõ–™£zo‹F"z´ŸorÕtÕnÀ +ÚnpÈœ3íæ>V|Ë +‡\ÔUÛ¦ÖÍ„ˆ=ó–™‹~u‹C–¿Ë!“vj=Œ±˜D¬¯™º”;â¹»ca ˜{Vè·É9õ±h!·^çÑ+2GõÞ˜¯½B¿]H;{…aqô +‡Ì9ÓnîÇrô +‡\T;zÅ·` ¼ùïÈrN/¹÷½_œ×O× ²Ý5Ýwd¹dj—Û}ܽvÄÄ„Ãg[ê6·1¼ouàˆ¹•Ï*»#&éÐw·bEÓîVŽ˜‹ùL™=ûõÓdšþ•Pd›ÜhÇUcSêâ:”úÛdªàW z=ÒXDÂ@‡LÚ?h% Îã­µ)ùŠøwšô½ÙÀ߯GŽ·ñ*ᮃõró̪2ò8éòm_ 9lŸpŒþ%Ç a›tW58ßyîßòõnÑ!UæŒ QÝù´ËѤìû/Ÿž÷?ÿò×óÇ÷_>ýø=?~üî3`Š<òöù72áwüý„“?| Ï_ÿç„gê«QÈË”­ˆHyþñøZ¹»^ÔcðªŽÐò³¢·Å‰éùí~wDžÑ‚p9y^×Ó‹8àDP'¢8a&g¥=d`gÓttO3Õ®D»Mz žu;· MÚ¡U­ N}ÓØûîà…·ÿR^%9’ÜHð^¯ÈÈ®/h@ÇÑê APtÐ÷ÇIߌdeO„†Š–¾iî4¦°cÓËðngG;²¾ZàÖ×ÚŸ4·ž.xjüêà…ÜŸúZ\bÙ[å¸@mËú=oã­ ê³{\ý÷`ï( ›G€¢Žu:è§‹ò"O[™u+ ,æ£lÉXæ ¯¢-É! u¬3V ëÏ)ù*#…0Ö–’Õ•ªóø”«Ü£Ž ²X hDÐÖƒÓ†ª¢¨É d%þ[Ž=qvU3ÄXT±®‚Ì1zl–%ÞFzúƒ¹¬6x 3åÊÜFÙ´;ù›Õ™b(`C&Ûl^KìW^ÿ–9Bgyëþ8G EŒFŃÍòà ð([2–Qг#f»ùtàÃ'cG£ßØ!+ñßrì‰C¨îìŒO\ýöð"ûaOõ=+2°‚ïKÛ{ êGÀ߬º#ü´_e%Î…Ë^Ø>0þVõÓ°÷Ÿ8×áºñ±€C“D˜\^>î ó‘hÎ87íF°³õpß$Þ ‚JɃ<ëlîæãÑ ‚1J\o4škôMÊ7LyŒ)îƒ#Ä÷ÍG€c2$ÜÕ¦ˆoÚà¾I¹íNß1Ÿ€ñÀW*²;j + ñM2."\ÇÇP +(9å?ÜàdýSI‚xÿÈJü·{bè"jƒ¶w`Ü$àjÔ®|{ÉÊCœÉÞ0%S†Û4 i/™"Þ†yÛ°'öVªcž¸¯1Ê–ln‘‚ÐOùÖ‰âm`˜·ŠTÍ”š 72cm)7¢G¼9䌎l"eéµÙ„È‘iOLñžðcL˜â®Êé 5•3åLö=SJØ™‚Å™âsÀ1âgÓDX!¿Ê +ü·4Èœ ÎoÀx@¨ŸŽ'ƒàQ¶d³‚´ ¯,®ìp€O>m"eT°É$Ê–iOì¨×ýŒÇ²Ã1>|pUvÐS¶;;tå!ÎdoæHsvÜSÈÙæä¬ÒT> þpõ°éSê¶ÈJœ1:3BØœT‘ú§Æ«~ºtØqÑ&x”-Ù¬ <ºK8&½ §% f€Ñ\c 3å›9)Ä÷ÍGc2,ÜÕ¦‰oŽ ЙrÛ1œ,¾c>ãÁ®:\dwÔ@VâLÆL/÷¦êÎ髪ÏU½®¤sú®êÎ)ñTõ€IcôUÕ纩z¼sú©êOvÜÆŽpÕÔ)D e*y¾þóãcœZ¿k쯯DýÜä)R{ŒÕA€¨‰S•W…>g¼Pž{5cÄc9ùMph^Ê¥¢O m-d\FN\†šðÚ£Ùf¯ÀSózw|}Ô¾^°žìaO%Ý™ìgY°ï}¤ÌùSéÞ‹+}šä?áO}.ÿ•ÿ6ç3ÉÞÔÿÁ›z¥›ºæ7Eäl£æ{bs pµ;Þ/w`V¡Ðù¾ÁÈ´'dÎ(Ij¤ÀhÓ»ƒ ÛR†ü )Sà‘!iM¸°¦=W\YÓÊuWP2°ž´aMc j¬9–c˜s§>Y¹Ðdø wš †Óæ›oxÓ~ÊZ Áþú—–Ñ¿ßÈýÇïáõÇ?ã–aåL4(ã¯q˜’Pxýýñç7ÐçùÜ8?׿Of|tœ-p^ù™˜«AÔÍD÷0¥Ø)ÑŽ¬³§¦[Dõk¡wB—Ê @$#¸˜®-§vy´#ëû×oýPHE?=öH-Uʹ”ôZN¡Ï9ª{k\¡Ú„Ѷ¬ßÓþéNû÷ §§ÈlüôÈq›€_¸ÛâÜ侚.¾jYè…9¼ÊþÆw5 òþü:œÕ.K›êy5Ug1­AÞ‘¹L5õöƒF3Íû 7_µ¤º3õ••ŸD§òuº»íÝn2Yl`M|¶GÎCô}}boôÝz ñKî{n¯RoMƒ¼ÍÝ^¥`§D;²®Ult{•zk:d ì®Ðèö*;ƒ<Ú‘õ}£;ûUTÝØÃ2Dº Þ¯…¹Ï|óÄ–DášgË÷¹öA¿îäe°Â7 qWle”ªe”,e°gË÷¹±ÇqËàØ3pbžúZ\±vy´-ëQL-ÝŠ©9sfˆRìÅ0ô9]c œÙí òh[Ö73¸üÊ nuh…TdL~áI?ã'ƒÓŽXf‹lnǤ.W¶xà©vaµ8Üt¢jŸÔ8äÇ×êéz…iÉWÖaò4± öº-)©öñ–»ÍómÒÍóÿ›r£ýáÒâ‘f ¾~–ƒÅFšÛ)ÑŽ¬ë”#¹:Ò „)×igŽbZ:¦œÛ)ÑŽ¬¿2åáÇ”S º×ñÂÀ2åÔæ¿¤—M–e© +…§#È¥ ¨ã©ö›÷m@Ôsî­ZY•½¸_àÏAØÀ÷>¯ó^*×V}¨\ 1æ ×5”_*—6Üû¼Î a¹xRN´(o(·ýÀ Õ8â,¬y F¿Ì]\Ølpöù8ïãûQçà˜'—3Âà1_×0ð—/£ª·…ÿ¼÷xõ7ª6~GÕLþGQ#•Lîæ5àQCÕÓà}®_¦ÒÑéÃöµ:Õ Eny/MÃlúÜ<—þ»éé–›=*8ÕüXæc`Y£Ò¼–@×n§>§§[nö¨tâLO[FîËl¹9£Ò±KtíöqêïLOdõõ==%| TM‹Ês +ô˜žŽÝF÷n¯Sÿ&ÆûoÅ8Û$ë£ÿ—Ž‘»sϱÁ#Ás]¦„¨?Íž 3þí~0ÿì±éµò[¤ùm÷Zù.¶£®J{/ £ï?Ë:Wøh$àl&ˆ^ˆBÿÎBÚR=]Ò"Þ{¼Îò8¿ñÖGÀÐä /D¡~÷–>âLº-òç½Ç묿nU¸É¿jJÓn.6¼ZñQâ7ºûË.ѵÛÇ©Ï~cÐÕüds±áÕ‚X‡õºL¢»ß¸ì]»}œúàIÀXÐVò£Hw›Ä6¼JÒlžÔ+Åâ§%>´†\'ÍF÷N×ÏïI_vÎï7]_ñ%ùɤ ÅO­˜3yXÆ +{”ÐZiy"èÛÌóÃÀ«¢ *öWÚïÝó¶ýºã2/èZæë¯¿lþå?fÏ¿†~½ûÙýºûlÿ¼;!´½ÎãòÔLù>¶~c³T´_¯}m|Ýû?íü¸qȱ÷±(“æµõ·ÿ`÷/™$¾¯}ï~®ýÛ?ïŽÑ‘–¦‹ü5fÿÙöå’ámý¸ÝÝnLÙ~þºìÐ¬Ú +éù«Ðí…µaâ¿a^%Ë"z-y¦HíÍÅò‹S¿üÇì3ÊWWݯ7ûƒí_†† ¾îõ:Ÿ¦×M¾Ú~oUqŠü ·¸§·ùÆzipˆõî…f@4ôÉXdã. ñ”°ÏmYªÆ9ÌT 6ô*CjíO¨³Æ9höZBa ( õnA8'N×V%!µÂ{£½¼Šå8q,8f/ÓáÔ™§Ñp(à„c(aç¸ç$yù¡Ôü ÉÚ÷žB–R=6Ö°TDiB–цÙt nÜ9àWš}¶4lZÉ ~^·DË'y™[r9:wzgž²ØÄ3í\Üí˜@ñÎÕÝ®D®]™›º¥IüXy\ý­ {áâ±%Œœ^® Ø$¼a3âÈa+ƒD)qŒ–– 2–¾ ·¸&ºãÅ0¬Šš[ή݇óTx¸‹ç2–råøJÈÑú ”ˆ˜»x" eA¥aJŒšÛ°w1öômAİùoNMvèx­þæM–fBNÈ-º·äÞ.„xci¹Ú +YDæÐÑ„$ÃoÃm¹ -ÒÏ•QhAUFãeiÑ52Ï?= íyŸ>º8뤔ÇXéð¤šEë†ÚñÈÃ22LÑki ëó{f!F0HŸ´!tØ 6ÚË)ö„‡Àì*‚¤)•·wÜÄr{ŠŽ¼¼;ÎÒϼ¿–1æÍ´Ô}ýñŒUNK¤tñ=ô(ý.¨É>\áé¸VcJ"/ë}ðüÓg%ûË¡´o@©ÇÅE­PZÆ +ªNF ÒÏéƒf†Ôª›žË4iùAv•ºdØ¢uø[ ‰iG0fgÌ=c­z ÃÖZžƒ?Q.Zv AØ¡fJZãTì–ÍUöò25öœÒòt„kXb®cÃÒ|O 3“Ї+6`+’ „Tš±\T÷ž|ÿtB[°Kl9æÜ§rCÆãísDãää>FZõ/çVçffr®(á +î½ÒY +D©çŒîûµJgC-Å-¡(íÀµ‰+ºá ¦Ìû[ºÆ· 6l}ááÁ8å>ãû 3´ƒ½‹¯Ò-c­"n¶í†^Èo.ç ·î€¯:ÂeŒÅ(H;þ7a9Ëh;×j©m õ|k­ ¥Xoép¦ƒÅ2õ¾NG¨'ySoƒÈ‹¼„d”í ”‘Q޹ÓÉÛƒRuC¢u6b!/¤+ïT²˜Y{ë}É;C ­uP”#ˇÈV&w(f´ªsL'(\€¨3-ÑQ[Š¢š\Ú‚h{À¶Ê3 ržý hφH»áQ_Õ¬ ²Ýj“AYâˆO£0//&TYÖ»­ò ˆ°‰=—BÚÆŒÓWyÆdm«÷\õIÜsb`X°Y›gŸ®«’_ñ}ÁÑÝ©;÷žZ›!>W‡´ùr¼Hôi=: j¬V›õ6ëî"dÀ¸ ãÃ!ùeh"èÒ·Ï)Iµžµ8ÐÏÝãœ2[;© Ö¢ÇÍ¡ý8Îâ #åq{åì÷~ ŒLQ`Ï£A…R›çy#:°?ˆ¬ñ1Øf=ÐÆS‡+­ VïL¹Ó¾gQ‘€uÇ‘L ½1Lô ëº<ÆÇ¼'Z²îîä:z¾¥x«eL(_RÛâ+³”¨¦CÓ¹¡€ÃóQÏŒébÓ°µZv ’’Œgëhª2­Ü hE»ŽÌʦ³FõÃKgòcŒk5 +„ÕCÅë×Ö“‰þ,J:¨¶`—ÖyU ’–r®Qm¤¤ò Tf” ÑzZ"yA޶…‡b¹IØRHûœŽ±‘DM(±.î)Åh}xäˆíIÅ—·í$´>uFUDÌDME!˜RW»#ƒê‚}x!°¾*za0ìÞ¢§ÃçÎíBÞN¥š«™mØèÙ£R0éZëXG..ÝfMkÅãqÃDèšvVTŽG~2ȇC¤‘¥£-²¿ˆag±Ä¸çíR®ƒÍâËõíËéê¦q:Ž!å#í[´°&î&D Aq&lhIþqÓ™à¡T ¢g\mK6¼’L÷c¼«—¦m}¶ÛÐ÷}`œ¾Þ–7Bºß>"ÊvÞ¯Ù}ú~öÞgœw€N»Cö{(Ñ¥SÞAAëye‡)ï4ÎÚ‹.3ÄlŸ š6¶Š·i×»RCõŸ¨•W*4ƒw>&Ay‰Õk:E4™LÌK†`î‚!bœ•pÅŠsCÃgÂ1þ傠ɱѪƒO`º_‡Tëðrf+òtš³2Ø©Qõ\Ðįëè?g,4 [~_G–ú;D× n»ŠŽ ©º©Êéc©ñ Aî½ ,…bÿ( Zǯë¾epSîälbi{ª¯Bƒï‹¡t{pr¿‹ +Aè,? QLÍžoÔLJ W§9DüCkWz„È÷ …”NN»mÖybâZƒ£eñÄp D\ çN»1£êÃ(’3êÆ-ÓGž@Öï§hGìý%„ü°×•PœÏé4 M7×§“ì Ýúùñ©"¸ïfŵöŠÀ}äKŒë¥úsaÓÚúÌÀTOYuwÃzŽkÏñ[¡]çg Q±dñW±\ã¼Ê’¢ÄVæç0Eå•·ÒÙ•4OOÀ‹6O6}4ç’ÌÏ&¶ 9/ˆ­v¸i¨y:t.ãÜ{&¨»5·=ÏnÅm]á…9U*÷á‹…0ÔNXÇIÊ)?6K— æG2+ë2Æ×)&A~ÖŽWÚÈ;Ûé‘‹Ù›%7AﻉfX:à•b®•±”ë8ìXÓ»Ã:à܈=n ¹ A¢õÄØ®tC£§P ýåâNûHÚ©!…§ƒãX]‰btϹɦqNSwr¡lò݃ÕLpâ5u'ÆŠ'$û <ên¢‚ôè6'%A‚'R6ekŸ!ÄbúIÜ2Æ Nüë`Ž?5ž‰§}»s5æSûf(jåòDé89O +ÆÇÍ1–½µÀ&nGLªàÛ ’½§ê®£H¬>T|é ÜýÇ“qz€ ²Š;T¬ƒ¨¢'pcwÏPßOÍ Q[]í)´…GrfÁÖ¢ ôŸ’ƒZqßû¸k€×«D}t©\ e§KOjî(9 +ÉîJzC`$fH€huã‚àéæ Ò’‡JMu· n¦l.}½ù¥@…îû¾‡K¤Œ³˜zApkÝ E–wBr‡†TŽMÖØ–ëä +M¹8 ûàÜXW®ó¼3sû¸Àñoà_?~ÏøÌœ¯µ¹/µÿ¹àD»ËÅh#(¢ÔF‚,Åí ÝýÂAD‚àßçK,i"Ð=AÌÿî \C F€ý +r‚ºQµå¬]_b¦ ÁÅõ%Ö4qPµ°‘§‘Å• ÇÁq9AÊ!E­|oÜx"êy'Õ°ÇÊoh`E‚è„™¨Ðw¨»´#S0M B¦ä{`³Å—#ÁvÜ Ä[Ùî‡à:1…b{ÕWKãØÛPZï(Ûûe뙵.rwÖ—¨º“`®mæ%@)®‡ï`ä¼³4ãøå|“ˆ[‡-¬í‚îŠÓÜuú½R×*Ð8-=F=„ x?ìØm.‚“RÛãnb ¢TÂw,+u¼Sùz*¯‚¾@EŒ‘¨[†'.!X=]Ÿ´8>»å’Ä¢äV«ã˜ðµY‡±ÜN1<7ž}«ºjFà¨òf‚pÎÍ`±:Ž©t{-‹ `ƒˆ®¼ôç \pßÅePé{Öw¶Fp‚ÎY Õ¿³Ç°ç8_GðÌÉÏFi#=“Aé/Âo'‡9iÓµO¾Zˆáä{Lf¼ÜtÔ…[0¼¦ê@m\PÅ +œ#‚‰É¥é9Ïòâ8kV@dÆqP]Ú¢í@§ØìV^ ÒCß4mu<Ð ö¾*–P[Ç)šÛœ”G²ý¸´VùÁ•¡IÒºnŠn‚¨Ñ:Vv— ¬êNcMÛ£*§»Gsô„ä@ÌžGb‰h13dËù 4=ö>‰³ÖÛâ¿íåÉÓ)å¹9ǿ޸A¿EÅô-“7nÇÔ+Â$g½sq;‘4m?Û·†ŽôT+’À ç¦ÛȉU¬øŽ"àÔÂ0lüʾwµ¤b,;(ãy7?B ­ +zßÝMƒž”!€Ú*l)®8kÙcG5·2MWoŸiO¶ br>-¾({^0´ò'¸µžX_Úxº§î<]ãÔcýå$4¸Í÷k°Ç¡|7UÆøŒPç®ö„7b ‹éúŒyç¼ýÌÀý°èMcç>ú™p€¨àõYš`ío¥.%½Žc~¨ƒGê¸ +‚ÔxU“F š•A«o´¸òŸí²o§› „’œ¿®Ëåç9³¾k};·`YMf ¬w=>ìjjcf.nØæ~æ†\Çxj«W÷gÏškŽ.ó|‡.´©®Ê@Ac^4VµÛO}‚©u/2‹òvƽ‘M¿óvæŽÝ~Þ¯JÆR‰pzvWóTº4îA~v£Ù¥”gÅÎm$½À†sA-%3#;’ hmvy6>ŒÁ°g~oêÚ~‘Q’0“LÛ—˜ÀÓüšyZ|~Z«~rÉÃkú¹wï’+Ÿ¨6¿|?\gõk’g'xjíž £Å+Ȱ„®Ý×@³‚bXͽú$_‡€ O{Øäéîıyõ+×Ü#îEûåÔ€$7‡=KÁz‡2eÅdåAB=ý Á=Î3 É«q9rhZ,¡A'|[« +ΘÁˆ1•® +’y 7ç^Å2Ùd‡ÉÕË´G6et%°ËË “[—z¹f†h¯ê^òGJrßüÝ3©5{Ú¬­ˆ¿ÙÛ¼z å¥Û]«dõô›G”)+7=—–î+'Én~N`"gå.…®ÚÇÅ,¹}ß!çl¿½öøœáWü= ø|(]tßGÞnªC1ã¼]_£VÝâî—ˆª¾]ó²ÓàdRyjW¾†Ñæ•Á»Â ÐæûO©ít}7ÉbŠkèf·XOœCÖz[éù@æk÷ª\ë¸?ƒ†BzjåÎ@i·TiË~ÁÊj»Õ_îVàÝuÒ@šÔrûñ¹âPŽƒõrŸfð&£GãcrpnƒÇLTgؼ³ Qëó +]Ž3oî-ëÔ!Ý玦~ÂñѺ—4}±ÂÉÁïwÜ Ð7wúJŒ±>A{Ï‹¶ÒPµýŽ;@æ”?²µ'¥Æ´¬eÆí˜÷ÝLÅÖx&«½ûâÙ1 ÙFÛ7GÉ‹°d|ÇÌÌL²ù>5£„x¸6Û“s¡Ï|E•Óg‚Ë×ëi+Mòwß™²ÓKH“d³<àYâ{¸¶°8ËÝ„»õ•X¿&ËSneh_/u€µ9ÿ˜§?`kŽõ#ùu—n»UýI ì`;j"Ym_Ü Œ®B”éa´‰S'L&8¬ŸG "@ÊÞ‰Û™Y„×ùT“žELé9ÑaD I›s››hÚ,b%˜v²ÖµOúÙ,DxöÔäïN:[yPŠNV8+¼ì‰ÑhÎn1Ù2˜µ;7ž!\4ìu™ ØÄjg‚DœY«M°ùÉUz}@†°±u¸¤¼íöÉFz’®iU¾8OɸðAád<äìb1€VM°Ù|a…«µ 8ê 6Ù®?¤de/éæ§”ÐbÚAË£Ä*ȼaßÖ€ÄåEc[<]’MɘòƒC‰w4ºj#û̬3ÎråÔOÜ=X~ym-Җ埗:ÂM&B5ßû©™ x„©?³:Ø[Ï4k£Zˆú\™5h£¸E’ñnÀN}zSG±1(kŽ„ÎÝnsÄöÓé¾Å±ù,VK¿`HÎp¬·8ÈÈ,þu_Ë +×ñ“í™økûësÙà•ÝË3©7/ކ.Âr6­a Ó30sD1¸Å³fm u­Ç†W¡X%TAvÝAº&×><ÍLÂ{j,ieÏ–\¦°Ä†_Íâ}ÂÉ©sÚ@4c˜DáœîAàqt‚lóä!uÒ!€ŒöœCØ'ÍÀ±{‚[uª‚ü™ Þ¤à"Íá[šÀ*¨‹:Ù:TÁ9ª&C_¤ ©JP§˜dÿèA•7 +B¯%Á2ìk6b÷õ°Ï #±5ÌË!+ýÑ’2¬Ÿ•dØÚÊç4ZÞÀ’§À§ÝÒSV(¨}¨àêI<…6³¯al+ê`œQì9ŒÞp’½ãAïm˜v?ûË%ê&aÂqÏ{™GP懶v]ì +®•)¨{¤*ˆx¤’#‹%tF½1Cìò6ÖŒ¯é9K#Ói&¹fÅ[<‘ðvÿÊ—£ÐÜI|È“°›¬+L{Ðc,ÁåñmªÝ’¦€œ‹%‘¦=êºàŒgãe:XjœD[VÿœúJõÂJ1‡àª)ÛX±vî\Bšž!žFÒ‘´m€+H-¦œ"9vyUu .»ÍÔ$ªÐJ7ßi¨‘`/ÍNV[\4ri©ƒ89µ#_²ñw¦M6¼Æp¶ªKÇÁ¤„€r´÷76h|M‡ÓÚŠ‘ž<Ȥ‹Ô”¶{ØÝÔÍŽG¢ üàª+eè0VÈòÉ{LŒ)Ö¤&ÖšØÝtÔÊkêh椴³BîÒeÇ@Vòd +NÍ9`÷±ñçÛ÷7åx‡$ü󪯿øÿ÷×Û¯¿}/¯?þ~«ETžÒ~(W.Gâ½~€.Zí…ÆQ’bcÅì|„õäÑ–¥"k%kçÝ¥åüå‹–Ó3?|XJ=\–Šhàø™¬3 Ë²ÇÑ(çö›êÕÞ½ôOVó‡¯XM—üèœÌåBÕÂ8Mɧ'µ!šÛø;Ž~@¼-c½8‚D¥zOù«ñ׬†K~TE‡çGÙ‡FâÇ›-?ýú4}–5²ý„s¿ 0bp†Æe~´zѯ §î³úýgÓ i0å~ų Yiö3ÎÙåÎ8•‘OVÿšÙpÊOvŠcY¶ªè´³å~U놶=vÿãN3z·å¬)Ñ}*á±?|Ývºç§ÑÙLð_ÔP²µÐ)ªùnAãÜOKõ³ÕX`£~2—øÿ3—^ä1!¬C&÷˜w1èt¦²·ù—ð7ò‹¦2aÉrìòÑhâ_1š}0ÚÛpýäiSEÖ?Mø1ÚÖ·¢|ù“ÑÀ¿d4<ò“…QX守j+B{¥'/Ý‚Clà± ÊPÁ½‡ï} [û àܾÉÊTòRÅ% ª±Z§ñ—'džÓ/m'09ÊùOW€ b&aìæ¿‚[ +Bº\ÎÑÑ¥h…ê )k\°ªÒU×9OÔÞçAò2eИ³ÚÇ]9þgWý¢ò±Ï0¸‹Ö¨j\ÄÖ¹àYGýœ»ûIn›0ƒM·]ÍMÇ1=y1i*9„eÌ Â»º« pœƒ®§N´·?{žíŠªSOM–'á&Cüòê”5›{Y{œÜ,ûœzwbx6ï°hœåÚ‰õT¥VÛØë°Ôa±u^ŒÂ9†q¬ÇA8èðä qJˆØëžÆÞ¯C&§ôN^¡çÒú‘iÏv.T™ub%„ÅuÁv¦¯)—ÌŽ¢4ß8þiã‚zÀꪞz½\J'§•e¡âs +âiüWõ…ƒ(&èµÒÒ=è)¸­6”X€Tɱ>ëí´ø|+ïUµp3¹TÒ6]=ÜâêfeΪ˜ö¨ :Tóë^DAç‹\*^ÿôˆÛD#¬|ÐAŽô¢œ39»sGûh8ô#@Ù#îrÐ: +v4nFÓ³VHÕœ+“aÅ^¾J'<‚hQ¥¬Ø=¯øÒãÊR¡’6yíHÇ­•%£R7´ôÓ³¸¶˜M2u/¢ üUAæÔ΂ݼOÁJí·¨l“M…IÛQ°uòæWCn 5£WȆ(¶§¬wÕUX´lªÙU.6%o¾­QE“õ/Ûev,É AWÖ/ððß1%ΞUèGñ”Ë’ P((ì­å×hë´Ÿ¤¤G?¹y ’Ž©¤ϦP–·ª'üûrx㘔7g aÈ…df³…8É…DÙÙ|ñh”âÕ¡H!N%¼6Õê%ù™ž:ºú0H~Gn¡¸‡ÑÅb©m-•™±Öž—Zé¹²Ë&4úȽ”Ú«üêK¶)Ù¸°;Å1ªQ1a^ûZ4õî›S©!2Ú“ö4O‡žì\IBYj!ñ_—;ü¢¦ðÜ!2Úo·¼¦ŸµìSL H{‰4Z`Q@ø8_Y—RC í!¹gêXÁ©Š²ú#ªgÍ¿!~¤Í˜d65“"ã”ëpE?5¨¯¦pGn)Dø†Á£}#á<¾ò­Y¿¹J ªüjQ6±Ïɱ^Qv¾òwwúŸ1¹­ÎN32ƒ…iØ›þ­ð†"¨~?ÝSá‹ê5«¡’y³Vn±½iUu )}Y8Ö”–7Ÿs_‹æbúª¯‡Ê‘B¬MOØ6 îŠÛ¸ÚƒŒU0(ÞØæÈ͇lfÈ“K!ÙáÛ\éyñ2-‡·)ì[¿ŠZ¿ªÍÆúËmШ. óÉ0CÏDSª• yu8W^§wâ7W¥AGMÊ®•&íOËßl:Ö9|½ FÒv§ázMÒõhU¾Ñÿ@F…ÙnŠÿ³Xy‡¯Äßr üÂŽŒXáð9}ÖoôÁnMÀÊD!+¡4O¢¦Ö¸xˆÄão lŒ„Cšý VÛUwUT¶Ã):™2¾ +Ž«¥ÍüÍ‚Mº­¼ØL ˆV)zc®B”Ö4È#åyo… t;oCÄÐK“½ësQ# $Áî,x—÷ߨßÜšýª‡}¯Ú]+oh™¸º){Û¡ ˆu~Ñc…¯Ý\‰uyõ¼yÌs„w•í .=ÐôŽÍNî|×Å¥‹J~ÿžsh'B±#ÎnTeWïBê9E9Æ(’ŸB +Ã}n„¥RxC®º:‡ëpÌVÉ7®zc…Çgns+£mÝ„”!Dñ%¢¹ú:ZUBvVÞ1{@L4æGá‹Þ ¤Z¶mþIæ=îuÚ!×hµ7ƒÔZWœ¼W5evM®\ÿI½kÀ;šCư‹Üá'šîx&qxVO¦Óª"in±`ØÐãwõ-fÛ㌧¯äPZÜ{¤+Ü'Þ¡O—TàçÙ!û~/O®ÝeœŒ“ùKP8-¿æ^ÍV¶…¼xmË¿‡ÛΣۜ 9iù匶ìlF‰(ÛkX‰œÓFnCOü6<Í^Ü×ñı®ëp»¼¾6M!¡ê…Uâ}±5ðbL b0nB¢k+éG^‰ÀN(í7ÇÞl%Ä­¥Á±­œpÅÞ–í7MÑ›ŸßÄч2í#µû cuÎE 2äÕoWÔ#Ý5ÚBÄéMRïè`âê°¯zñ§NÑ™^’+/ÚbšŠvTºÝ©{*ê'ãÉï¸ÞN(¿%‡)“v6æ!RˆO¿L{¼"ߎæFC¡Ž[L‘@|s³•øˆxa ½¡ÁæmTáìšÂ¢¥Öêð¬úɽ´7jûº;7xõçp®ÚçÝX)Œ35óåøJÙn¶ZR\ßJ¦gù“°­3—CaR~=¾~ù“š‡~Éh£Ê˜í§l'Ù<Ï?ÞÒ 2ìøBÆÛ‚òrxF²»ŸïrW®# –- €B ßô×’·Ax·CR£àRƒm»âqU—HSOƒÝróq0èÉÂðvš”Â=F^œ1~)ϰ!Eþ5^*bº‘²¥ƒÔ^Rðb&–Mª£¾ÂW +ç•Üœt~ÆDBF•¡.OŠŒÂ7|%Õ[›¯Ù rˆ›S#ï’-¨ÕCÝz†h>Õ†¥mñ¼<H/®S\E M!¿˜ÁäïgŸ‹¼<ºL5L°Íe R§¶póæ µEƒ:©Íq9Ç6ÇcVª«E³“ƒ3ïsH#;ÑÓ)/ eqC•òDÚ~‘²¶V›îðôUßnµÏÉ](âgס.¿Ï1¾ÍëRû\5¡Ãx|Ú§šåF}΄až#\×!n´ù韕o;$ª  mÛ +_eëÓ”2¸ÎEû)Ð&‚Ï!lÜü”³šü¬\ï¨ëoú¸ûw¤yì7ñŠãçœ÷9ü È£ð RÜý»»Øá1Kûƒ³Û‘pØç ç°x`åƒ6ªïA(+Ö²³S~¯žˆ¢µácJ2 —Ø…hõìÌÚêÔú´N ­˜õé»rstÛHÎÞ$ëñxÔ¸Öµ8Ð6¬†ã¶VÇ!¾¶Ž&ù +ò;øc)8Ôwiïj䮿M–ʬø2šMë§ý´ÊêGl@«¤ìvyí±ý ÐeœïÆG¾ÄÖî¦}{…ÁÕ¯[7ÆO¶Jjߌƒêó•‹#O‡j¢FÂFÇA_¼¾–˜:‘±g®ìÖ„mf›¡ ½ïËÍMßáõ¿:20òóy;ýÄlP?y$†VÌw=¡Pj¶ $óž×\ QkŠO‚z ‡Gg 5fMæ F×?fö¨þ]þ¸Æ +¤Ý0:¥ü£•öâóxu¡˜Æ:±Q4EÑ>;}`}iå… Ùü£g_!Ïb-Ƚ"Sï +¸ÌY<–äo.4wyä–b·—[ͬiàO¬o·í³Îά驰qĹÑ8.ƒsÖ×¢ÝÁòP>xÔÍ™¥½¹÷Ee‚¼ R×ðDoüämŒÐ[68*LÑ­€­åÞ”š_‡øI}þÂ˳2.¾yÿx4~348î¼±{Dc«Áß7†I¸ÇöÝûµëfþ…(l/"ìc·\Ù‘ÒÁ|™_â òHHu<¥Œxô­#ªçŒ¼QLj×ÿ:©UÿM|eA²ÏVBwŽBsú¼y$ÄÙs“ìªkÒacºYsä‘aX>òÜè  +C(Ï[+Ùb ÕJÑ%Ä…ž]­ ©£œÃ9²ÒQØ<ú$´® §å-Kõ0g¹2…[ò°a®CDòsYÍuböž§ûz2äûlk)6¦f|0íÃÎHá¿ü?m”0f¥MMé£(¤ïäË µ}¹ð!ß¶ )µrHÌéûì²7‡Ìµ"Có%J ˆo4%Ý»¾ê0Ý,€ƒ”Ѿ“+WW®ðÍ–?‰ÿ_þyŽ~‡Eø×Rû ¢ÇáIy4DÓÎ… +Þñü'W\=:`u_ÙO2ZÌñX¢+ùµšIK4)LéŹá¶Nä™Ìâ‹iAàjØ!éB=ÙÛì§JZÂÇÿœ!EûÏ it3[€š¶ǬmÖ¼Íöé;Ç/àñ_lhþ¦jìy>Wý$ñ‹žB»Ì¯1NÞN±/ïÒ¹”àÎN®Ü£¹èÐFž1!\ƒuõ€K›‰Îܽà¾.d¼¨$”éžeë šPå3d´¿Q ûœG“úüЕ žY7BÇüšÌE­vgs¸¤çáI#?<j¹;…æáÍ÷I8·‹#ΪåFGþåºÌ’,8a xŸÀÁޏÿÅœ%!úçk"Í"P©äIŽ ã±¿Ï1Ó%½ð7ÒJ”cîêm~«' +X¼þ¸úÌk7½‡”ú =e7µV3>G0sKÄã\·˜Îx,Gö“9Õ‡ïŠ)v?ï+«Œsç|// ío¤­v7_ïœGò››ÏTâEfœ}$ì«ÇBËnˆSÀE¸ö +hׯõN÷6ß“{]q™cçŽ*’r¯}Ý*l=lå¤~ù6»:·JA·îèƒè¢ÍþÁ­]¤ Ûƒ&?¤ >¸‹ÞpíXÝaßqãÁ1|N*T³ÿCÞÞÓ) Ú‰_¨ÂT¥5)ÏÌ&¡:zIYÕ&ÚÎVÏoÇ‘ñÃyg™åN|líù.09ŸcÒC‰g?Ó1š㨩{µª-pf=·ˆÍQ=r'¯po—gÁÙsmiÝ‘û»\v@{»ìáS}ä~ q)÷ó5ž—°Qã­Ÿ,ÝÅïçÏ6àâäô`çA"g”æg‚2æ§?³âAy,W}îð"êhKBlÒ½ûFzÚø=n{fmèÀ‚cÍ7²ç]ü¼[bõV÷[(/Có¢IyUúÝÊ‹&Rº}uÎóYZS&¸ºåÙé4{|>ì½#Â~a¯oŸ…;ð}¶Ú×3þÈ™o s9²½8¼k‡2Ù¯a¨G©´V³52®‹xJ­ú묬ɰdƒÀÜËÇ©KÉSZËZÙt¬v¶¼iO^[†mY뙹uÌ[ó‘Üš½VËh‡½n ¥•µ3uA+a;nÎ(Ú8ð×SrmÃ! æ–gß&[oyFÂ>ñ>–÷µ§;7A:_êI,ó^Ç +eÞ‘é}‡7’±Îè·,KíwñÑräj[i\'º_öÓ”ûІ´{Xœ{ܨë‹Pž{ðxöòs/w0%Ó-¢ÞoØ€õ %rç†xd1ç¦Õ³„4s~»ÃÞŽ¨Ý/Ò饪ã%‹z/¥LHÉ÷L%Wá€TO 4ºî ©Í‘+DjçH£tx®à³rJyÁm×ù VhGþÔžSnÚ¯H~ÄLˆK™°yM-”"oÎróSqkoÿ÷*ûfëý¡^}™½î&›*ù…V× —]Ye+æj$c•g‚Qz½èªw°NÚõ`4W¼±s/¹!>Ž[i÷ÛÝæpÆîÖa§^tšK¢!§Eœ©wéñ|Pè¢j+†g¶`¨îðí-ú’Œ®ªÄ8tÇÙ)3†mÏUS¥¼³Msnr¥Ç0ÄsC7(+Ú9ØZjý%µ¼;ˆÃRA=䃋…Öd£í:þmCÜZ0JÕC¬Üù¶T?öWB3@HAó{ÄÏEž‘#(~÷»:Öµã"™¾‚á*&ÿꩬ00‚¸œ‘ùûŽë³ÅSi·4Âè†Ï§N¬£³þËŽ«1½yÁa\¡aˆÜò´À Ý/U²ñbîF4m÷$[a ņ< Êç!ŒJfb4¡ãNg^`Ó¢ã`0§Ãîû§˜»>s ×vfÍqUÒ$í)ÕÞŽI*ר¾Ó¶Bòÿ~¬¬Ð7¬ÍÝ +‚Nì`¼€¸21ßÙ.£%« +ÁÖœÇä^ÅhLûcÓ÷×kïÑŒtô­`Yó‚ÈŸéÇ%WòÁ#~=Æ­‘"W VÞ{D:£îÍ‘ „m1Ž}Þo±w#ƕÆÞQŸ÷¸g•q?­çnålëÉâÉ“8E•÷‡qëünÔ®ËäëUÒX-EfE¹AÁ†?eÑ¢ö|ªîáë Åj>?ð˜ê“…`3kêg„}½…«$€ßÿ@5e~t¤]Øjžåª`^#÷{IÈcl^Å·œoÂæ©©W6ÆI8höñœs»1 (µpkQÁºK.JÄŒ9˱üœë*!Gå93ÔõøŽÖQwua·0*¤e˽/Vïk}p÷˜;Q“u άæ:[OøÂf Û*ý~=“ñ¾æ]æ[W ×>‡èÓ…iÏ2e~ÂùbD¶ :s¥ÖxJˆÜÚô¶GNisïø¼/{snâw¶ë›S&Ä/×Z†’óV€Òrñ+±6ãr VbÄŒ®Àö^ÂõÕ²2¾ÜÉö9 Åx#g°Y¼ô`§ÇÀ¹nÇ ¤Jûíp{Vœãø‹xëP)}$ÕqfˆŽ•é!:ai‚õækÓD}‡¤Cò)¹ûàŠó0÷> ¿Ìž}Éiž¦ªÄál¢}Rå\íõ:gö#·:¡ —±àQõ¾pcEWY¯L¨µ·´îß’'§ðEÈ‚]#2%K +t;”p®Iå«2“©OÊÇ/£ª®A[Ü?xb$Y¿>h~lì~ÿF–жҿ©)HÖp,ߦ\ð;7~HCLÛƒ#$çøEH½ ŽùB©œ´þ”sxbÜD9¾yLóxŸÏa?ߌèrŒ£ÒÔ÷ +¸*‡S]Â…ª®—ÕiÚ¦Ã/hr‚ì(?7²8Ö>?#q1óŸƒeTù½µ™XGÊ}'š +œ[o,ããðG³_ˆ=Â{qü/IO=>&aeB"dpo«™f¨>ò<=§DX©²Œ”Ã.í)}UžɈýŠOÓWÀÑΓ"ÖämI·ž á¶;pŸò„ 1þùA¶Vº2ûç4™Þ';´ìØW¾ÂæÛ‚^1.“)õ'iïv›txú«=¼~^£<‹µ‘/ i›‹QK¾@4¶úÈ>‹å ä]M‡C6÷Â9©‘‚Ôžš¹‡M(>'B¾¿L!·ª\jæª +Ú¬– +ÅÛˆ-ñl-u‡æÆ×áU?-b¯ìТºÇh]Z$ˆÕ‰Å91p9Ü™?œ¸+}ÔàŽ>.Cýv|mºæ€KöZŒ6/#@3`Oð$޼FÁR®¶.õª=Ž3έgKWDÃl_Kµ(/ÃJÎ\ˆŸÞölYrûH‚q#,·>æl—Y®D9C·Ò+he„dÿëî+©ÿJ®Ü ¶‰\<²·yen?…œ¹Ž)ËYÊ)§û@ë2_Ù¿¯Eqƒ^0í>·ù °ž5èÚÈâØÚ“×CN&ôˆ¸Ê|`'ÂC#AHC}K5V‚×îÒöÌ•ÐÃñÞ;š&x‰›2îÊÓyw´ó"’¹r‰Q3ã. ºŽ"W³VžÇ§hP½6Ì’ÎQ+·¹3@>¨g2+5§'fˆç¹'YÝB*ÏZ»ÉY¯pl{›ñå=õÈŽälwWI°aü°ö»É †|eGà3“f~ƒÉäδY'9Ù"\9ŸÞ|ÈB['s¾po®>ÚžYF.Ö¦4¶`g¥ï9“M¨K(È•¦ÃëY먺•5ÊÇ…²+ðýMBÇÍZÇa¶¢Ý›„+ÌÁî3;¹\Ï…Ì' +ÀÙu%qà¹Ñ±¸œñ *îþn´ÞhÃÖˆöéÙû÷óÿ¥[ikú*Úeý#Í hqN˜œ7 ª ¡uP÷/úê˜ú¿Ê˜#gIe؆ ÇIÖ"q +¬•ŠO÷2»µ“ >Û/Élò”^¡ÄÅAj#/)Ö¾šxå}ä˜nØÏÍ›ë4 +(©îû¥Ê0*G‹[§,­×³Q’屨7 àb{¹Q­„|K&Ô +̲ý=pQÒ:ÉA9ù5»·Ø’¢Ï¯Iø¯1‰M£cÇÚ¨…4Hl9“ZM²ˆw=Ý‹KΜL5ð +ü4Ezàžµ;xß9/á&O}½«·[+©F 0§6±ž‹ìîÍÿÙ)ݦ“†ñ¼q:ÓaîÙ_Ynu÷¾Op”¹£ x¤sÒÃŽŒHîÔ:ÅjTÁ–¼$š±Æ\9b¿$q..a:YÞLI'ÏAúúÌj«=wTÈù³rßx¸¶^Á"ûFëÉ ã—Ç'ï^ ŽËbŠÉ×=ѧ¤œwH€Vx‰™!ñžš£q$ªÕL•þ€Ç¬÷{Ð4+g:jГ8]T˜¢!ç2q·½vî ÍkÏB¨NóÃd:XÕ°±ÃÏþ| šGýŒ<ƒ¦ïþ¹¶ÙsKQ+5SR,„ÔÊaòjîSB÷ì f㦩3úW§Ï’.L¥»b›„ä×g67‡¼å1çjw»Ü˜£ÎÉuø’1Ç{¤1mxíà?€.îH6Ñ>+;|7]}f¨!áæ›³b–Ä˪»ZHIrG®Õ´Y!ϵˆ¹e›LîÉÐÙÄÞ†YÖ +2s·C]¦×Óô-eŸð€’8œr ªĆ„¥¶/rËÓŸå+5˜ˆ5¡âÆn›;Ìàö µi6²ÙJ##-®Zဵ÷Ü“ÈHøô3Ã’¯ù‹árÔìÅÏ×X$¹Ï»×9:2ƒðs£Ã‹Ýåÿ½ûA{ÿ}䥾ýœ¿áÀ ðœó¸kžOô7Ä׿ŽðÅ•‹k’¨÷7i8–}æOv&ˆ{èOB™ãþT  9×þS[€‹aÿTá2~UØæo½¶_U/ã31Qû§@Lƒ¯Ã^µÜ6:~ †=ˆÒ@òöŒº Ip˜Í0PG}=¥ù@@Ñ~[bªÅA|xnïZ3Øe¹YÞÝÑÏ€Ü"oÄðzýšýé¿aÇ —™Á¸TFŒçö<l7À‘™ h¢Íä-/ƒ’Ær™“^3>ÖG–Óå¼ìt›÷ÿ|nîäKäg~.µÒÜÇ;(,( EoÄåBDbk€Ï¸ÜäÛWŒºâyˆÚ®-õa˜‡[{^s–`©»œFd²oɧÂ9Û7_އì/»¦äQ0˜È¼&ŸץK­ÔvV”Ö3NžþŠƒLÖA×,»—ë<µç½‘ KJ®Ä±ÄÓ¹[Es2%D `ý3Hs´{¢3·À=ütlˆ®OtÚlýf.añlÐü1]98ýëIo×ð9ãèý lÒ^ëû7` ãÞßs†ƒ«ÍñçFŽí§qõ uÝïêÍHðös¿p,_IüÃæDàlÜ$û ±_H×WGã¶8\qc_Òz,DHî—ÞàY[¾B0¾¤ + \r|å¡ +½ ­~¡3Æž_víW_·íOuF½p!)z§(û*p‰À©Œú|¾¯áÉbá +:²PDÚVdG°JAÎÝ̵GiÝï™»çç¤`Äž#Î%äEÏkò•Fy¿—*EûkK¾VT°)­q³lÅŠ‚Š(®q + í´úמÇ`dÕã¶ÇÖ¼Ð6×nàÜ¥ pÞôKâJk£‚!­SV`t#RµìöܲùPˆ7‘rsûBoÜÓ㔩ÿ®{wš ¯e;ˆZ:‚®«ö¸êšãÛ@tôøA d'­º ¾§¥9½–Qƒ[ÂK ¤Ûbsp0fêæµŽD¬òshg¹O¤4÷JŸhg¦{¤ËŒIËÁ— ³ž;¼£5€< 2ÝŽ^|vî/Oÿúî%é/ÌäD×{l½­Ç#e‡á1/ ŽÉé$©fàÔÒ7ÊŸ‡çý3íðõ9‚zãJÛ†°í1,ÝœíðrÝb­•8[ñë’úê[^ +|? ÅV£ 4‹!Ýñ 2>”QÖ«p™iy nÖË•ª–ú®´ =ìYŽwÎj@V‹5Z›O¯Ùì4Ò6Z’?'ž³}èØfˆúFK1r¼6c†}ó)òšLa³ï»@ÓúÞ¬=îÉA)wi(…=kâ„ÄÑEwÖÈ9n,¯ûªxCaüyëQ² uç¶rä=x3u”ˆj˜ˆ©ƒDYs|$&~XÇ­_ÉÂX±rÅÌ’0C8ˆôh%ô0ï+!ùfM¸ÁQ¦Ù›¨¾@1Ð-÷UÊ,v`ÂÉ*ƒëúqhݬR’$ÝQužxMF…ÔçÊÚ_Ɔ^œA®•±-9rk-Ûv’í(¯›yTuc-îï:Yká7©©S _ k¿¤ÓKÍ̺£{hvÿbÉOB«Ý· k¢[=0 ÚwmJyö‡^­µ¨¡zž5òiÆùŽÞ7òjæÁQ›w [<—É·.KO­8 ïWìñ®Ëx$Åt25›>>=”áâ­ei¡‡ˆzûÌGl÷ý†.›* +ÅÍ:²Í`Ÿ6_xÎ(ô¼üâÝ4ï+®ËŽÒœ·Ð=#dëöñ¡Úc-2øíÛõD~aÜõí«ï4ÌD«›Q.ñŠm? }‡m½M +l/Û©°–¶ýbÎG³‚~N¥tG¡6,:ºä[kèóHž 9o[Õ*=Â4"?’tn –Óçú¼ö‹¸â¬jé´ÓQÔÓ£8 m¨‚ ôa ³‹¡ÃÔQkD17ÐÝ>÷9*#ÔÔÐ3æ[«=&CÅ[ÝÑ{ +%=У£öå¾èZûF&¥m6kJó¬||×ô¡¡ŠÇÁÛò +”Ý+üÇuyI²ä@P•'ÁYr¢¿bç’Õ³c6?Þ•.B”Ó¶®›ôM‹QÏ ”áÉiwËÝVÊ_î âN”¸©y†w ´¥+îæŽ™ÛÅ&Õ8ï9ýÍ[kIZKÒr-ívÛ{µrÔ×ùûôùèš'f 0rgìëÆ«pÈÍíe쬇˜‹’_1CE—“âñâÛ}ž(§÷yÉ)ï{v㎈Â<ö»Í›û øŠˆ'RÍ"Cÿâ½bSø÷â'¦q‹ˆDby,ƒhÌ[ŒÆÐ£(*…ƒryÕ çœX2#wÅèy›ÅÈ,ƒ ËO§«9”„iyiË +ø¾3i«wùF]ž•PU·n´gAi“{Þ¤PŒûºl¢íºlÇØÅ7K•‰sɨ•0ÌV“…IOèsÃÃ×*=2 +ÃÃãÆ¾H¨ü–’¶ƒÒå·M"á'CYFP*VõÕf‰~¶u‰ÎÏé>^¡›þíZaŠ›¸Ç=’E­åu—ï—»¿9o“èùóÞ + —°Šç*ç÷êÕÈÅ¥fË¢fu¯^M±=ªG#±ZOPúƒÐ&ªfdp“Äg<·°ûP¬÷X‘ÁõüÁ%Ù-ïËCá#mÂ|À:VR°Êð%Ty2¸oˆòÕM‡œþ}‰üMƒtŽ5!¢}RbW¸~AJT®Žÿ®þe_'÷Î5ßî°>†8ÆZÐ+¥h¾vû™ñ¶íËpÞá¼Tñ kö¯°&õq8N¡Ââ£=#©W>¼µö¾Ä•9›ÑÅÀ®Ì†AY$‡®ïvš1rqþ¯Å­† ć].mŽ» ]Ü›\²§K!x¥öhãæœ m÷…NCANìðîñ¾ìþ?×Ö†J‡X{gÄøqZÏ-Òx´(Wߨ­ ›ó bjp×õ†X>ã ݼÝ÷ÝÀö L>«wr8^Â#+­H¤Š]P¯ëÍÙ+5Ë`ïØ—.šâèsŽòö‰Èú­‘Ñe=ˆs6ø]oGÚí*ɬöMyªïˆ×9ô õ}Ëäßœ0£ÔÞ\8¹Ò¿Õéðüì½]»xœñ{"NéùÃ3 ÕB®h—„w5ˆ¾ávßïwEA.ˆ„ïßmìwÅlý˜î̺ë{õÉK Z?Ñj7¼J4¯ëÇŽCø¿ÁôN.xÙ—(+Ÿ8/¥‡W‚˜É7]³Î¨õ-3ЧÔáſܧP9hê²1'ަà@á‡j}Bu2‚’·÷©>È<ï.)£XðàªÞ)é^¥y/¯ÐVN”œ—íN`ïŸôÆV8KÀª§è²ëû½.vÝå+ÿÕ–Ö¬ÜÇמí)&N~;›»ä&¹t?Î<'È]ø -â*—–EÙG›œG5[Ç–Ãñc”lÁ³ž®-s ܨyι›#D2¿Û»øCìh]`ªÛÙ}ñÂÜÍî‡è½ù¶”¸XeœwD"b‡ßp¢ÑŽˆ•ØoôÆ(;œïˆ*]¾øÌŠTé@Í‚Šõ„m_|S8ŽV†ÃsZ¹§ÏyvœhM… Yö¾<òðË:¡ÈÜŠS’ÓÄ Ü„*ÖIì‘>ÄNt0ío8bgOŽ—©¹ùÊ…9Üá1Š>üŒo!´ÛàEÞÞpž×bëÖUßpº,Û§ÊF{Ðãí~W¯‰ l­ò–¹sùŒ˜¡ùà¡„/kßm¶beXÏø †Ï`_eÿ kŸOóN³{§+4wö ÷Póåy1äj ®kâq4ÔhL‚8Z çPuÎ{s0--¿Ã¶%v@^õ +Þu\v€}Ò‘üwe.ÎÊ/qžìøª¤U7,@Êðµ/çXþ‚¼YÜ£õ÷e0×91 %SJÞf‹Ó¯UAzÕýªdWj2FÇX£ZWé;ß—c¨'º +Ž·6þC£u—þfbO!¢ÒƒUWI¸ A&9áöK§·c–\ú\j£àÞ½ù¹é$(UíAlžÎ¨v/îCOYßb-àÀœ,Aä4NsÔ[:H}N©ŽÉ†sêxÝ£°GÖj&}΋ó”+n{{‡TbÃÏ8Ñl\TX/d¯ï@•—Üýäœ‡Š ¤¥D4mø”kÆ‰Íæ¡5Uhh· î8%1j>š‚º.µëÎá¼UXpíf/9%{²À‚£xVLK¿å !;`ç}íè”U×B j2ì’Î-ù!ªzíäZ;×¹ø®cGäë X`›rõˆ£)˺[<_΀8§nÃ1[±#Räìno‰‰ÝùåÆ}ŠÕLT9wíJ˜™2d¥‚ Ca0I›*ª(ä¡O@êá“!¿ÁXäˆaÝÜ%NUõHŠšj/¸©–)5ì(p ò5ak^é9põ;sÕ;k^Ùƒ±¡ÊL$’˜ñº@L–e9mèÉ…èõ¸„«(oŸkkì·>“M¤EM«oqZŠ+Øö(oï§WÓÔúíˆ U°W¥ñxG_~CòHdå c»@éè·u²Co.NËÔL\+©Ÿ£‘›bÒL]pÕC. à•hñhr—e¤p÷ ­Í%LÁIa¾ETî+8òâtØ‚j[20‡ªÖ• ù]‘…«´ 3c½¨Ò©hëeE#€ÏýŸ^9“‚8 wR¶K&_Ÿ)2 ™gÕž\p7ž$´îÌ®·) (8©&*úË oŸ"û»û_¨ôú;…ÂërE¿ Û^ÿ»% Wxÿl^Rˆk8Ž)Ñ$¹—_H–ã‹¶ïæ·´hĬpëÔnóÒa‘,*;­?8–ÃÕë÷¥t\pÌ0aÀ¥ò'He¹ÊÐ +Öú}x}JŒf? yõmpï°ÃR£Þm±ê};BýmA9Ïá¬M† +Òï=ˆöØâ‡¾6YMÁUQ°÷c«£È5W_œÜæ¤ú» Nõƒ‚ÿ§ºÌ²,KA(:•A­kƒèü'Vû€ø2ßW¬zE¤9,½Õ…È +h¶Þö½-ŒŒgåxÒÅsû¨¡¡KÙ߃ªv Jà$TÎ_h½'D@Ö5é=™tÛe›’ðóYŽßßÈc>üYŒ„}—AÈÇ3/|‘@¤™_¸ÊÊM¯ºÛç3h3ئ;(ýå÷Cù¿f–‹)>Ýø;Ü¡-ž“ÑE>µé¼så¼ ØÑÛy£Ù¯š‘ñúƒ…½à¹Bâ˦gp 2ð\F@{øþ÷Î^Í[ܼ3–ÕJmq6¢}t›yN§ëí w— r«oR F|9= žiùßù®™ñ#£ƒ!éšDt¡æÉꓽF´[ á×—S☴RåïÄœ$F@„q}Qšõ²ù¼•Ø+I×/ä©h]‚}¶Úγœ8‚á» ŠNl¢%Ë"d‰æ^•°6ÊtzÈsx³;ðŸìkÔîÙ¯Amo·Ç ƒ4ÝßJ‹Ã‘Øã·’)*`CZüVÊLä)%Ò¤d"ý­ô“ñíAÊÈ (Eþ ù°ûï›H®°]a(hšÑ€¤œ¿oR‚G@?ß»{èÁ5^ àì§oUÓ‚[RK‚T&Ù÷0 ‘ñLÒ4—ß Ýxa×hä¶½Þ’ÆJG$ç¤g$ô_Ì™–ç§ct²oÖá É–çØx¡@¥ÿF~^HâQ ™Ê· ÍùAÿÖLh¿Í;Œ®œeŽ+V1›Ò6.£ßHÙ„Õ{aè¹Ü}®^æ oÖ1 `—»];6Óˆ'§ß~–5å¡&‰ð4e·Vn'O/ŒR¹I¿ Šž¶oÉí– àªF¯ùg +W• k‰¹§L†!5¤÷(“´I»ÐçÈ•‡~z.D®„çdáq¦Þ±ýÙv65ט£Pì–¯ dä$y¶ìÇÀ¥‘S¬nÛö¸E"Ÿ×ðÄiæ¼½-w õÆ{¡Å%½%ß)h¦Â$SRŸÑÖH¿#ɽú›~cCV(wzÄøb÷ÜëzØÑý R…í2r!Öut{¿l.µh 13h'ŽŽándƒ% +¾Qº"¡*‘C©¹ð„zâµë·Í 4PzÙ +äª 2†m©‘_­TÇ$F£5k!/.·µÿTs +` +b¥µ‚]º 8*Ë"‚hÆJò!kV@¾ÈL0÷yhHw} {›±² ¢¾ZÙ÷”—¤\)}gSÀHجëÐÊF@´a ‚]c¦û,1rÑÔXæjÇ#U^D@t÷)·óú+Gˆíûj¬<‚½­YÁ %hi‰$PA&I¢”)_«¾ÉEèE®zB‚]HüД€(½÷è-¤ÐV[ØÇv ˆ_fåŸjbc}7QÅe/ˆVûjáÔSË/HÂJ'éû­G[•*-:šœUŽD=CÒIpø-Sù¥ä +R†÷…ˆ\Énܺ+La*]¤ô¾zB¿¾Ð[­$ðW°sK»«´ÛÊsoÛ…<€%d2ªbÆ@sÒö³[•½¾=·£[Möô¸zïWn¹ +Ž Š°O)óCÁ3ZÕá…gãyQÊý2æ®/ž‚QjÕî¡_<ù«™T‡£å’s$MÓÔBKƒ(|?B³1sµ .f²ùn×´ãBd¡Ï‹Ö´Ü,©[›™B3®‘ö^Ç̨o®¹wÞçéWfS+ÇŽÂí)5 K#ÑQ]©ñöä¡f}“9AÍæãIÛ©•*{çM£ÝŸDƒÊIì¨Oªv«ðìÙæ;\êE%jù;G9¶£´V]}NFä;µ’Qˆªös’æRÚF¾È¾(ãsìL iõ›¨w2Y $':÷_pªÓ©‘º.´R¿ NªK@÷õ #V®\c¿íŒ­-à<ã­DvX@½@ÁO}X—*è1˜<í±¶c÷‡‹ê“Œ½+vÂÙ—ö‘’î‚~òMWo»+ô’žG°5bœ|Z"áŒA œY•»W®\?ÇqÎŽéäÌÆž+û_ßÜò¬õgå7Ž!·Î»!“#³ç¶c+qcóù×rÀÝs¿—˜¸PpŒöœ>f©ôXïu-\6ïÍÌwä§¿ëlÔtB?¿'WWQŸÜ³|¾ã?IÜ]FrÛ %# vtAÀšÝçH# ¬>IKjá!ôoV-A—lûw—1ú%D«µïäööe $¹sûíIbóÞð³óÖ-‰Š„W 7ÔlËÈøAú‡Ë×jÓyÐTì§šSÎN‚;Úijío;¦ÿ ;ÞvJˆŠ˜ß%C ú­ÕÄÔ[Á£æ(È‹Õ9Ö爕„ˆÕ9¨î<ÇÆ—¢È§ y*+8O˜¾¬¿Ý‹èèß©ÍôÐ×Á_-ÜŸ·XHU˜eú^v☽®Ì4-B=ýu2"b&›=« ñ<æyo:Ræ(°uõ©t¾< =Ò}å( d,<¹ÒnÇü˜%}ey Ox¾UßD©dÇ/²¨‡óÎe„Ã_}µy”=¾¥îò”¯ìÙ«?{ZÃ",§ôd0ø¼'¼_i€L_P7/l!"‡²ÎÃ^vK÷^¹.¨A5ß¡Ý@×TºQubßëH7†=zÚv-gÖ°ÖWÁ7k%2}%üÖªošõK|­2“,üâqmŸÚ/WFª_A÷92¦{¯•Ž@mýÖêŸ_fD__yÍÕ63Ÿ¬¿…[ÓedÞx÷Ù_?qI*Jö-Á6w&³Ùc½Ëò©ÒåýÁéY ¶­ù[©H¶+&ã“@4ø[þ·/V.âzfªÕ5¾›¯Óã kwLŠ›O¹ýÉïÁWŸªS­Œ_ûš4¸òÝnÅÊ>û(;yU‹•ÍÏ|/$õzžÛù8ž~Dp{ÑÝy*4GÝ’²-ÛѹH³Z‰8“;ßö:(&<óáKæPEö_¤x¨ÜJ&o«›ó!™ Ô0P°É‰‚èñJÔC¡ìQ-•ùÛÇ‚KÙYðûZ˜´(s•½Dé +Ûy6¯ +¥êvªW™Àqã$¼]Ût”û³¤…+W¦bãJ21—$ìW’ 2û®"3)²¥ùò*2 Î[úUd‚(épõ°‚’d‚Œc«`W* ö+÷ò[ïï›íäAhý¶7 l‚~5Y@i2Ad©ÿàLH˜ÌßövÒÛÌ~í8]s«”L=VR¹ýg]‚A‹ Âßà’ç«Nãð߬·@•¡qøÌN+׉T·4±¡’gîHÇÚ×­ßó}è¾ qvÈ÷¾ç®yö‘< +;Ç»ÏÀå`GrK¬Àq­j#o„s°ß<æ—Þ>÷_ çpõ“ûÀ'÷Y(»+Ýàf-Á·ÑvžC…Ú-Ç˜í»ºG)oÞ|«ê –÷5½ó…­»"3Aow—øµ2n._€£~©è&€sî\‰p‡ã¡•FÈ­D«#µÔqƒ;Z|®QÆn™3îév}ÕysÙœÅ.‰™¼5,_’B.qÉY£X±gäõ¢yòa´pµ‹óq‰;öaãªF­¹ã5]fνÚ‘‰6÷t›ˆ™Ãyì³ÂëfÆëiîñ%N¯*°VÁcV0ÏLëfeÕRùdˆýåtûzÔ/ã¹ìëq[¶YY6“È(ïlR"¦Bîÿižù¿Ïi„¿ÀwÐAxû?7’½¿¯.¡¥ýz¤,Á3p ÷ÿ„M.£gÊ_€±Èçw*0.Tëú4,›îßéÜ<ýw!`› áú»b¶*8ôjK¶¸&½½*”-&0Q¯hŽ´k¾œ_‹½R({Š•Ó@H6?] +¾åLo>ýâ†íð3žo¸§ŸsÖVVýƒùÂþ@LÁ² ;^*ïîöt¢ùªTŸÐ@ÄöDn9ö†S°!žö-e¥x—Çz« ÉŽ]3ú¢ªúÞ{Ôö-Ûìqu±.ÑšñH$Í˃æ#oU‡ ”|¨ÐZ‚NTWc|¸Ý>_˜†à]Ç@8æ5`Sm6/†™õÀVÚ°\öìÎâÅÉÃæðÃVÔ5ôXÆMpôbooŠg€Sr.p×XMFÅÃÙV-q¥¾·…xâîý–ë_?³†å?7újˆ6[àZí=Wöááh̹d+ë7Î0ƒgÇÍ)ÂRûâF„šwzL@«SQ#l³+qÚq b?·ƒ³Ä-§rí`¿yÎ-ÛÏÉÍÛßÇ5vÄIï8&6\cx,ª||€ §ò.ž¥Á·ý=±>n–sO{,N¾y¶~çŒ4ò°Þ=¾£ÇÍ¡i8†;´!¡æ);¿ÞÍI³Qÿ‘m¤jUpÞÊ®” ÛÍäzÐnŠÐ^Þ‘è\ ìhÔ6s»»¼Nï9ì$vø/Í+I±Jí ‘ëÑ @zÛÀÖw‚h7[44¶Ä7Æ…f/Û÷Ük|`Û¾ç 9ØU-çO­!súéU­— !lœïì+ +ãý¹c³èžñ×-Ë6°aˆs%ÿ6ßr%Š´ ìÁàŠ¦ °@¾É¨ßâ£J—ÀÎP¹þ§ŸX‰öÅÓ)ûiw7D²C·ëˆ›OÖ8÷í)Ë‘¥nLrP…ždm½–I&Ól)4~Iï]ÉŒ÷ ñÉÕúVã(ÉÔÿ%ÏÓãÛÚºa˜‰$UÖ‰üïŸÛúH•AfæÏÁôºChž)Úú*M·•cÞG|h)@ `|~dŠž¶×’ÉŸSe BÏ’³8Òî³¾-Ñj6òp5àÄ×çÝih[¹5-Ä+ù[/!â[…òsšl\Éu|‘@f¬H#%N‡éÅÞ‘2üÏÆÙ‚GÕPx”dÇú(õV¥GýÚf€*±Ïa÷šmÚÕ^€»$…ÒeÇnåähݱ… oÔþÎ!ü¯V /ŽȰ+y›2 ÈÂó@F$å°Oîšú ­¿kŽ?x•à#މYQþíóöü“†Wu§ô,„†½ÒüB«Æ#»_ˆ;ù9+ìA$µàâvT÷¥Õñ}¾leAÿçw=&pí’OGÕìEØ¿oÏæ!.½%Ô©Ãê¼ùž~IÚëÞ™àP*ÀNÿŽžxJ×)ùœ%Ó-3[ã˜@¢þ¥Ý4™2?g5 ~×`ð¦0{ÆWìðƒ°Ä-{‡{ %9ÒW"&¹rÅÊèÔiD~Žƒ5_>ЏÔl¬¸Ò°QJ`îH ä+ûsΧ ­¥Ý¡!ÿ¼í™ày¯lóFŒ&í[è*?5íÑxž¡AågCÏôW¡SÈÖ/°©5åiʽiyl*ÝæBg˜‘6O·…û¶´<šØ<Ʊ±4vY¨ùÍ«„@ê&'ÛÓ9‰ó +ktˆ™­œ +ñ9E ó."F¼rŸ!p³gØ ÊB_jÌic”Ó"Y=V¢zŸd%4à<ËC(¼''º«Á¬®²ÂÜp¹e …–…§²NQÀsRÎy›´á3’úç=‹ðÈu¨©˜ãtfQe–›;½Sˆ.Ú¹£sT‡! +6N¿EÆ⸟½6œJú(ÈÙ@ {¸(&Ÿ]äf3d6‘ø¼å–V€³Ót@jýBÅÝ´AÔ+2 %V覟… ZÑIJÔÅôÕ•Qoâdø›éxªätË]x[ìIØÊHçÌHÇE1"+Œ7ÞM¾î,'Œ —;¦ÑrQ™4Õ2AÜc –µ™t.VFeòžn ý±c¥˜Í„û?²Ë#Gr‚?ZЛÿl#ËP3˜S7’HËd"Áö3 8/ûæPf®~lF·ýJõÈѸº©Y€Sv2#ß®´÷Ð1#4%¨?%}+JmèÖvsxZö#6¹\ÜìgÀ:}†ˆz^‹Öá" +ãrÓk¡$»k°“¼k¾¹’ §–ž­tir(Få3¤ãJZ žl=tú.±¯S²;ù¾ÕBÌ®Ï϶sí”Çê8†Ã™ËRýø†ÃÖJ‚XË™³…Œ,–^(´-\ï¶œaäLÃh {™XFwfÐ]u&஽çHl$´%öf\å˜ò—i¨ï‹¤†?¸ë·“&°Só¹rVñ—o9¹tÙ–B‚ç}±`Q·j¼”•Û¡ï[Óà»-CVˆìq¸ûtk‡ÔÓ}rcÿ"A> —:„ÁÞ«ZÁN‡;*B²×øæzŸ$jñÉ Tå‹oS*=á){ø6ï{ÊŽóÌú êëú¹£ê«ÄÙ†LKXU„µOgmâê÷pô™€ê~9{äë{Ýãež í¹"1æ<)Óxçú“T KLUŒ®|Ýò¹)(i(6ÓÁ†4µàHG¤–vœµ4D0Vñ/Ö4D‚µAfÃ~°jòžæ-X°l9"àZõ-^ô€àHGDÀ«ú“=‘àŒ…j:"AyIu훎HPªMpßý‡+‘½¾lŸk¤#²…޳¥#”†u²¿ÍÇë|üc·Ø:Dÿöé¢ÃÎ/rô ƒ£¿ÅIqß;¦£¼[’‚5=‘®RRMRêžwJ"{mï#•žeBw¶Û;ÏB<úÛóž\Ün3rß„Úv8ú~™±Û9[Ú¡£qR|zß=€0íz¶´ª`/W1Ûâƒy»a:ïêP2( ¥Ý¦:rVÝ’ˆ¤®ê«÷“~¸‡Q’Ò uô_д݉þ=ªÇ8‰—ùòò‘ÞêXjm•H›þ¡®=æ¤sœwÌdÝ\EQ\F~’Köæx•aiêÓtŸ¼Ø|pHºU¾SK.Þ¥ö$™Ê¹sV&’’t­÷  ò­Þ'ãæhV®¤†0«WÝßQDíEƒcî7ëYœÖáO´óö2*Ö£þ[nInWFA@=‡0/+JB\MRIøZ|ˆK¹ãnÜ Žëy`f±»ÖË"@ìAB™ÏQ[n5 +[@fªÛÃÓº‹Ns…Å—¹5”ŠÌM‘´?Ã'€lÐÖE ¾§¨Ý™K<þOę۩Í€ÿh–â®oÄðâÿ9ªMÁ^·Gw#˜¹Š¿C·…§¤£µí°|ruEÁœà}ŸT;÷eHÁ„÷.å°…ÛK‡¼¾õS]‚lÉàÖÝïR+ †v{8ælùäº:›¢¹W²C6 ;óÐßÞ’ÝÜÇåò–“k×]=nS@!ZnLFÊ8èLn¹Èé[Ìpvª½ÄÏn{²ªéĉLK„RËÊoÞâ6ÓŒDWZù}³z×ãuBìãØ‡Ëß:¶Õ›Ïl ¢Û“õDᚯöÅ¢Œ†þéV£­¸®ö&© DŸD +ñ~U¬õÁiŽ¬Ú‘hW“•5}—ô®–±»,oG2X×!&!ÊÈWê?­íÜ;÷‰KŠ…ÌçlõúBkÔ<&ÑÜ}çBm–a}kõÕ¹–\½û.Û +È6Ïá¶Zr²IÏöÕ_àæ~òÎ|È­3)š—Z›/p¤D³…Ƹ7×Þ²bÈ ¥Ðlq4ë‹ÆU¯4xÃ&]¹°â¹5‘ +!7ÙNoì@”‰/4KÛù¤Íuû¤æ·³^î‰ÅûÊuÔ,Æ +Ç +Ä }øP1Ê›ï²UºàÆÓoÌ$ ®ÃwIÚ–ÜÐfoÞZÔ© ÂÖ"ÜhV# j¾:ì=ÏHEºÒ5sëw)ͼ~âàôyô·m“éäÞGpï[…Bok±¶Ç„ž«>ˆˆÝ‚´"àªÁ>ÈPC2ñž>‚ û\ç[¨Y“érF>;Ŷ®È=Þ9æëæ{QöÀ{^*Ƕ·;¹¼>HÑNIè +}Dü·ñÖ‘ñ–ïí¶­mÁ(η!³p]Jñ¾ãt5‡i +¶<ˆÚ=KŒT‹›•¸ïñ ýf +.TÊyw@£ƒåÉ öÒ àASlñqxÿ%‚Í )þ¥Ì=¶#úFÿr«ëÎån/ 5´Ç™¯ï^4/äêú2{úÑÉád?Ÿ|›và'g»%‹ûYüÉ:^¶w“‚ÀfRŒ®j»¤°K’†ÞmmDÅÍ'i•~Aeî]âúÛóC £`«gÓ»ßÛÊf¤éØ}íþÚý&aì8|º|Mï?#4ܲ./Øû[©Ñby^weÙ–Há“«é9 pÑ­&Ž„°›Dgî[õ;§ösG1`è®7Aø¦CdJ¾Í̬þö¹oÒ5ü«¨ÓÄ¿ùÅ8±Ü" oÒõdAn2"MŠ?I1d<ød=¿iCl|¡¡BNHãûzj€” +(ý‘="‡0þôÀêQ}½ •aíÙ^ÿÔDÛ7ê¹ÏRß7#a¥Z4™|ó9­ŽüÌ^qÌþž\2¶~Ÿè# ãþA,–GÞŽ°öãwtäVS±]2üVGËx”8åzºÒòbºéxjq•áOŽ^ŸZ4“êõ¿ßëÌ@_½f¥U½,»q²zýè艧+kU#Wr–òÖ.ÓSð©ìë)‡¤m /ŒÖJû”wñI|˧𣟠>+°¢Ÿ¬ó4vX¹‡O;Kâ'”æ’§Aæ_‹4ÓõÁè®aN€¼Üé÷û=‰º]‚K +λ‡ŽsäÒéO×_§ >8jñ'1ùÙœ³Á#!l“Ù,W´ýb;Å>Ÿ£'ô„7¹g\"ðmg3ÏU‡õióÆöEö[òض™‚Á9SÙO¦¼Mm1N +Òx}X\þç"G}?µ>3ZN¨ ïˬ~·4…<^úЙ~cý}zn«MºÛú^g›~·ësjádê>ïƒ&eÀBïü)erͲó„Cʾ¶>¯»”6û%eA`JÙÑlö[ÊŽ¹c~(¤ì #£ç‡ÂÊ€åΧjne‡µíšVvH¾=ÒWBË€½Ìg`®e‡?_繚k°­™¦Z¶É¹û*´ ˆäë¡e›Ù5Å(´ ¸¾´ ¨¼ú©eÀÒŸS†–mâ¾>Õ -Û¸ŸR_R&˜úI°I™Á´‹p2{{¥‡˜“ÙWn–ïp2[ÍÉêïR¦e·š.¤Lü’2E«Ï¿\Êth}>Ss)ÓñÞòÚžK™."{BJŒÁêuR—2Ýí—”) +>ÌLáòådÀ[zþe8!ÈT–û '#XkÛé%ád +ëýÄ•Lñÿ±P2e +CÀO%SN})™²oÝ]ÉÈÓžþ”L=>NåJ¦÷¶œ¾vÒ¬<Í”Œ¶ÙîxЕŒ†VF¢åJd‚|žæJfê·’©fŽñÖéJ¼s|ÄÕö~ÿŽõåd÷//k ’KpÒ’[@\‚ò ¤xx$ ²ã#H<»Gm%)±ª‡»°×Ö¸•ow’Ô rßÛƒÍ!¸l×ÿ³‘ ïuúÞ$ž¼–jEôd6TH3¿ÞT/a›9ñä&)¬K€ñÐÛcÑÓò4J%J—îÇKŽ’¯L1dà/NéçzòlS+Xô.ÐÂ[—ÐܽçR‚–_-®Ÿ(Ÿj‚½œ›ÿX/‰*(±ðe°ìãmË('MrRxp©o’=@ZuË'çâ ÅJ4*·}ìíM9†„¡EoÊw©×ËGì[¤å¯R ò±¢wãogÞíùêpû ißÈÁëÑÀS¦-|Ž˜°¶egøÞ’©Li¢¯Ç8œøÌöuÆd ¤ºÄ†ð²}T{}‹ TWÚà ռú’¨­G©'HjùëÄâ&ÀÿLæ, åѬÚû/Ø4çÁ*¿4ؼŒA´ îëv!¸g¼n±=_‡å1öqŒ-?b14ÕçR“U‰àˆf®d¿ÔƒdÎHxjñ¯´{ZB‚Èÿ“È|OÎQü4ÊnïIB†'e–‘á‚N8Ò“Dž!¶öÌ“@V•OÀS‰AÔÒ ÓI.¼1z]ƒ-dIP¦%F„åÓ¬ÁóÙ5’ÁÄpó\a#‹l‘TOoùuO°ŸrœÅVyZŒ«%U‚œÚúÀibá}|^?öú^{ž<Ý–¹géõ­³úƒ½—þzg°¾wO%;hŸ³à“O{÷Åʪ}…ìI²ì|IàUßíŒê¯sñ/ZÌ<[{ŒÎî/1µYìm‹œ7ò¡§E’«4ƒQèQð|’z¦¥Ó£çxOÞ1ìm*mq&ÿ°ÐWߎú°$²ÝŸä¼,¹ÂZö—tæØÎPÓ™KÐÁ¥ßkÛ’ÊqejâMí^°Æ×5>l©pÌȼ©,»þ!ŒàœW“Öy¢.ÍHUu HÎ'ÉÕ[­­xÃ]ðζ¯Sw[0B}Ù2©WeDU}C›OÀU¬ +r0б€Û5Iå0f±¥Ž2lA|Ù»ãÚ*Šé87…«É^»W[ IE.¹‹žOvìèR(b“tCæûÏžŽ¤R)ººP$êVD*à:…¬·|U7l*бuà¾Õ D'ò¢(T)žùt`…hŸ¹I ¶buÞ•ë¹jDsp¬þàÚ'K «¥$­:ç÷ÜÙKEÉ©˜À1Ô:œ¾êût©×>Ã,9r‘o2»<;+gqdËÓ,Ç…U¤3‹Öøã([ßöz_ç&D»¦i,Ç»ò?éýÛmyfóØzàØ¤pË}Ûd˜«núee¼ÜÉ€`ƒB¿Q–F>(&qãK™æO¢¶+Ú «Úw¨J#ãC±ï4:J†5'4lJ©u¾àzlL(=KŒ*wõQŽ;‹J&1‘Ï +¢7™»´Ü;}”Û™º¤aõñnL—¼D>+ØÆÌsGñqWº°nº†¿^Ãñ€¼lçée¶,PGÙ#˜ +lšº Þð`iš#´ô~jBæÙeÿy‰¼p)¡í8¥7‹kÙ>³1NDptI9Q¨îý½NêM{²÷–¬ødHÙ^ÙøÎ•Òên_Á$á¦J–¢àŒ×ãÐ0k)ƒ¯E΢0Q`}Ú³´Ã)êæëq×#•½¼ÎUä³@Ô¦f›©d’ÿm;?RrÜkÄÝhT‘ѯ¼7!S¥e.õµ?X¤´JÒ{}`ÒPƒ¡X’*/ó?ϼê3$>™¹Óþ“æûytïª/Äêøü§*°µ᢯kšÒ+߇.ÍËžD^.żid½oïKJ ÔÖòŒºŒ–Z åç:UF«b»cVÔ ´4vNi÷p#,sü†Ð¡F³K*M¹Ùö¿Ä÷npI%)? ZãÁ£ª\ÃÓTÑÈŸD¿úƒ­ú“Ôƒ÷z­Æè"ñVA|›ƒ½ÛF^l©¤µþWVGYƸl¼ƒ²ò/ñ¸±#8½#7¯\;_>4'/×e¾Ï ¡uz ¿Þ†Ý Ç;mÞÿ‘ŒdHjïÝÛ»à¾rnÏ›°Îí{\õ Ø:³¤Aôàd›öœÖG +ÁS×pØV>É©í€ÅÓrÈߪgDÄÁ–Mrúv/ùÜúêr9°$…à}¬X@üíX'ö²þ_'RBT÷m&šG R©uÚŽ(W pÐHÃÜØª¸"¼yžgy¯¨'?tk?9ªêÞB'°#ÉöÚe's!ƒHlÙö}‰ð÷ÁOè à8~ŒjËÓ*Žßõv#Ž=üy˜(K~» ˆv(Ø-.t¸y $HoœgßþÞ»ÍY5KI+RsÎzK&Ž hÈ;dfk ù¢w]$ºæJžl\ao3’Ϊì2>ÔwtëÍ¿­Ù蘒î(}ð*WX~Á&ÃF=¶®1Zýº[ »´„rUpØ!*¤€4ãËhÍ=ùɸp«¹‹ÍÙ²°ðU6@pß·Ö#i®ý ÆõÚ†h]è}\?>·Ç-Mjú» óY.…EÔ ûÔ¤ˆÞ“ïªZ²î`«W«ølA|‡åSbÁ“£³š+;³Xü+! +Ï}©ç“N=_) uYáUŒuÑ{”à hbJf;ÓÓ‡ÉÞîPQ ²Ä¯ëª ™-«Øîs&c4l¾PbšµR4š:lë^ÇzNÿÎ$ÊuáDF—Ã%MßsŽu²øQêÏa;3å„ÎçbŸè>ˆ­«yœ“Y¯^¸hcþsà>J@ø×iŒ¡®@^|O Ð|òXh*bsæ ¹i~E½„’àN\ªß0jQ/\‹äoé™úô©7Ã&ÄV‡Ø¨°@s¿©'§€r%Ú:<ÆC·äV +E [v€Õ¤ÒmžhhÀµ·D‚nh5špr¿^+u{¿ÀÒ»—íäžÃ–„T6ÀÂw»{YО1Ë –´ç-æ^j©PKgôLˆ?òÚ74ÃD¶ÂÞ3 Šî8¤«®ñà¡;³@¿^¡gÎÛÌ}¥Äˆ±vµІë×0(ò*×ÌÏøŽ3ÕM¤„ÔTF9¼ËqÓÓÞ–³R\ +¡æ Mìœë5úâ:ÏpÎÔ}4ýACÄSü†²ˆt[M¤NG†²Òa;ém†A7M)Ëâã.ùö¹V²Ô'[ƺ*x8s¤·fˆÛΈ筷O—ÒÞ“.…¾âXéÖ±ÆÅ£D ú¾pr þí^OÍÏ̆gvHª÷ Çê±ç¨ßžC'v8íÞIQW\ǃ ‰Aš·ªv®ç\˜1ARô[9¤©‚u~°ËNvMÑ•ÄHÃîð¦°XmÛ綞ΈÿXñëQ{®¤m[üz¬õàì-¾­ "!V,ö”<&´³cÏU2H²4Ö-‹Î ëøðZÌ–Òð…®&¾îÏ£ÒÝ1ÆgÞµÑö{¬D”ÞžÔR4-Í]Ëšû-#jØô{e?ˆiŽ•½µŒ¨u»·ÞFy+mÝ[·21L~DÉdš·N[D‰|%Û²>ž–S°'Ø:Ñ»§¬àœ/5Þ± k‘¹~—­­w—Fó ™SòÖŒVïA2û½,@ö›ÇHË÷ñ*éäJóŒx¿áÇQA¾Ÿ—¶ü;†0¿•©©ämdóSÒÃÚc{ùÇé=}ÿ†’²O‹0¡Ã-áȱb"©>¡ü€ÿýù÷ÂsàèþÁ÷ÒoñVÿlj"fô5§kt„*8E.Ç݈ӥÚsº‹ß Ó­´uÊ{Û¥øDúè¾Ø);àÊzBºä ócôíáÖÌuoòNgÔwÐuwÝá*²7è‰Öô̈–IËý‚Ó©’pÚÊ‹‹jméÞߘˆîRœá‹kɽ9ݶÖGÖß¶ò]ë.ß¶2NñÓí;à°ýnfª­9e«ï`£× ¸Ÿ·A—ª‹Vëw‹õ~Œ&ø]·oA[?š¦\§£|áÒãke~ûû]»v˵T÷¾ûbnúK¦cq ÔÏ]‘xñ{úWÏT¢ØKЬ¾¥ðânù_ɧÜ-nŒ°ËÛµÌ}¿5òû• +ЍRLŒâ;®“¢½ok—’íý8•!¿œºW@U´\JJìvQXvi£IÇeÊheþ¼8u\˹´9QÃ7ÌKižæ°M<‡äÚh6dÎ.Õpœrêûº*NuÑ͵㢠I¥övé\q7K!XMÚ4ŒˆRò'c˜%ª—ñi…e°ôC0iÉ7$]$žÓÓm¯G—¿¯ßý­=ÕϦٕʯUå¶(#e›IGäæ—s³œ³HtcÏól0áhr˜;ïÌÎìN™¤v~íP¾æ”d{_cnò‡Ç6¶™o©!6¶è|¾¥fºít÷,?uÐéiÎHcƒy÷oª_Ãù›•ÌGüY(j=&ÑEB›S 㙥["#Š>-­©" ÜóÌ:)Cs‘Ó#I¾”˵8EËJ)nçâž=mÇänÏJcÄ™8íeþ¨5]Žèè##«êñAçI±Ð[ß v··-ÚtC@ñRn¤á®J>:céj?ª]‰”#¼¥L¶q»t¶±UvºÛ;o]:(¢ÝßÚUo4´×(¡÷Õ6‚öÂ%ö¸±¸½µS’ÓU×™7$Ñ}žê2zŒØ—o½†RG;Ã1{ïNŒîAß¶M¦ÕéeNxgÊq?Í/‡¡vÏ«”%~+☵\‹\AQŽ2Ï•­Ø÷ð¬Vf¶ª}xÛx*ͧS³þDz4‹¥š‡r)¾je"-O¤e"yåÉ1‰ãPMõ)·¹g1æÇ£:H-Ý~7 ¥kŸÔG¿¿OÓ°³ÞZäz9Å$Û~ôÜ­ï'ògº\t^ý<)é(§ûzÒD¶ÝçzÓØ :f{w€g9Êz÷%/,ˆ&¿WžjÜüš#•”`\Iå ÖÊüà­jÐö<žVXpOëeŽc9¥³÷|ó¾Kºps_ Kwzú×ÚÉ×evy†+ïÝ)?:_îou/¨Íõê×¼‹ÒÛž£l4ÞØ—‘lfMÑy‹9¯J0ù÷[õ/(/꺂7 5ÅÉE]äzD1ØçR“P:$À˺lDÀ]o.ô3/Í6·Hñ(y±nuÝçšÃƹÔj¨ Ô®m£ñŸu·k^û»ù÷¸qazz®EֽȦºIqž3v YÅèûXÓ8ƒýåºìž„³@÷׈›aøw€Ðÿ‰g¤§f ²h7òóÂü>µÑŒîôO÷xÜ1‚ReÑë@¡ÇGZÌX·Í³Üò¤¯v;çJ_•j®h[îOÉ «66®ºäÕÚqN ãÎñ­mñµ^ï€p iöZ9û Ïyd×Ò)aÁ¸ùù +}aÁN³N¶dE]£nAF8Æóã`âM®¾yÔÊÏåŸýjHÿ­.úµpù0aíà½tîsêÞÓºz¢ØÞ·tž¸Zùñ80]t‚ÜSÄœÝü3ÀÐùÌŽ_øÂå×ðöÍëbSê!ñbÝQüqB%ÅïÖ¼¹öª]öl†¹IVj½‰'6¤¿Ø†h©æA3w–¼6ð™a½è05Ývž„¯ØSg?ÉkKZÅñö\)z‰šdq<ÉJh×ó|ËÛìd0®NtmIª‚STŠÇíEÖX_‰W,a!“é–ÃTÂoÞkàÒŠŸyvPÄB‰¬ÇÐ)ß·¤ë0rÐÒ*1´ÁY{¦Y¯o=ìÈcM<Ì4tË-¶ž¶ý;b©¾‰8ØätEÕØ”áËáÀ=ÿ\QÌu®™ŽŽŒëG ‰ªMWc÷ª3¥‹v&¨>@–¦GŠḚ̂‹½à®¡ Æý†ÖÌ(g–t-ô ZUÐ °`Ç»JÉJ+6ßOY ï¿@È -’¼Zíļz}߈\Q2íMãvžô@™ÃÜ7…ÇO¢g ?W¯ÊÆü }®žÖŒ §ë˜ŠãGÃ@­ª€ëõS4¸¹¾6c»mgÔUpXÊô×Ç bß>ô;h?_…a·4éÖÛZÞïã©X)¸×¬ ›je ]©ŒŠÊеj? }7ʘUáH §* ÞÃQ„¥.Œaòº7³”Þ¸ +Õ¹×ëœîcZ÷žØòPW˶biËl¡mÓÄwpÞÈãÞa‰VÁó^¡sïç(sQ¨h_jÉ2ÛYâc„—ºFêãè,'Ñ][7'õ’QŸ~\õ̹vžî Nø¥°áC»W…DË‹@tÛÖÏ,Á%O¨mŸÞBÝ6:S_ì}œr­§ÆØòªÍ·5!×[äßxa(ÊZf™íä2Ë“îÄÑ®Q+ÑõmMæç`·IÕàÉû§4Ý€>Úë+Èsœ]àV§ :Ó/[Œãe¹™ÏD“¯¼[¸‰jpÔ +X੃(; ݧö5ºI3 ôYtÝ··XVIh{Æ ]íøÊݶ1§À~ùj5uKØFyh⓵-‰‡N'¡LÓ Eà ÝK=R·Hq*øm´ÆÁ·üM7}íÀÜW/ži¦ŽÙûŒÏõ +ЧRkSÓ±‹UØ®Ž)èÍàŠcS¯ª(}—£§lGÏ7¦Ø‹éüGŽÌûv™„ß^±ð +‡?U"Pyj†E•ãcä—po˜™z4Cgè&Ê +}gÝÑpõk˜¯¬K¿†M)_»-I +…Ü@¡\U=0ƒxE»ïkEÆtSd½2ɳmKS§]:S™kûxb\eT¸ÞÒ®>&yçÊ,wïœQ¤-ªÑ:(jx1÷ëí°Öh;PͫާDè|kú×ö{AÅ(4¤êkï¼½Ð>¶÷4a±ê2Kf ºæ»'¶„†Í›%еòP!Aù}X éœi J.‰Ò"±ôÍï£Ò4LŽ`†wÂF™4]狱U•`‘5ÃisÜ­U‡SC‘¶žƒHƒóÐÀÚî-èñ¥(‹:Á@i›[赜¤\L?&ÚiÝk¨líø¸q¬‹W h½\;gºªm¹v ÚE⦱P_(Ï ïÛò%·øÑ–ÊØÈçAª—ëÔ”Ô™º ¡G!ªêbWÈ”ìuª¡!G¹åhRÌq·ÁþDõ¿_~ìÈëãûÿe.íîöÜ#ô'sêc§¿0-XÝúØMspÜÅ­8JÒ=‰>÷¯ÚÝäBý5Õ¤…g…o[ ³­Ï|áýNA°>Qzn ¯’F“Äs>ô…«m?ÊBaTÙî÷±—¦VäC×ía€ÇÝ…¶=Ó,¿ïdnJuö­+çÓƒÏñÝc¯uKyçóôôö¯PÚÓóEçÃßS®÷úzJŠ0Š2ÏQöu[7½ðö8l·Öy»EðAr³›èâæ÷8çê]J s·¼sÌ߈<µ¤e]‚¯Iî ÃÜdÄnaŸ§ÕBÞº§†ú0ŸKQ‰<î—)Rž¹TSßÖáêG Œ‰a¯“¿Ÿm/0ö{¸½å^,O¢n-<(¬< ä|žCdý|NM4m×>¶ï{âqÕÆA †^6QæÛÞáž}ÍD»ßÌÑ-¸ÃjùlxÕ¼—[ØË§÷¨n¿Z:ü G³ÁÊaºW`4] =¦HݾßZBÞ6§*y4èïˆèºµWðy×᫘¡—gX} C¯Ü'»t°Þ³ìxÝ>Ó8¾¶oÝcxsMkÖCÌDeî|É>½™Õ¥Íž/Iæµ÷Uך³Ç«o§Ñ§Žde{¼©Ã;0'x»ìEžZ)lxNÈÓ¶¯Ù;J1ŠjIª€Ât@…™3¢bêàSBŽqhæy@wÓèP—m(¾¸PsË +޳rÆÈ=´«¡Œñ)±ÊÈ}!%q2¢e27¢À]£Ê^Mq†¾ð™Š¾¶¼,ÍÚF¡[›\Ñù :ºUQ(TŽo×&§Ð«–EQ‚OUèÆ¸ 0öªµÝt]ÑþÉ$hM-ô«ºÏ·€áµTM‘§Ÿo_+ç^|K^ß_*-¼Ÿï/^Þ¯ —¢óõº›c¼¤¨H“Bûôfz§Õɘÿu±ÕµVzî­ºê@Io}ŽÚïP=Tphx°‹ÄRí8q~ÉÃýŠ¡ØŠ Ư-ñíÝ^®åÇËžÝnò{?6&Ƴ/'!ÖœgÿšRü|¶­¥ÔXI+ÒžN‚m.Uãï(ªÔŠžE)BQè®%»â75>êУ§Im°ŠMªŽ·ì"Çym(é«s_’ãfWLÝÓs?‹¯ýKu™[WÃ@xÿGAä)’`Cþ[>çBUÆWÇÖÐÝÂdŽ[è³éÁO¹ÅðÓŸ&Tý‘î=­ÍEE}Ôu‡5)ö—»œzÚ´6W§;+ é2­9•±«ŽHÑÇåÞ>Jð¿Ã*“DÚÖ ”môdƒt[`‡®eé降/š §“­ ^cЦK‰:Sé(k[‰²ÊÑ2B-YGc”à‡Êz«C5Œtqóû¾¯÷¯š«¡«ì©§[?o]ÊM +|äq±Y;gjwÕ EWMɹ7~¯KONe²—á Ú—‰šºá¿Çȵ蜒¨>ÑAFkF&î +m¼DSåÔs;+lµ qY­”¿Ø^c½@Dz}NÑŽ ÷5Ïó×®³ÃúRs…†ò•¦ìz+ò¯$6!;²·[,r k†I«ôZˆïÑ äú<Ñ3#0†Ý’äÑÝ–xXŠtó(ÿý¨2ÑHtéQPü¼ÚÚœ–¼Qà H›ªÎʵ^žÚ3A +íhUÉÌ»¸ïÊ+àÍoðå­{ owÆÕö K¯«qUò—ÔJ¡ªíŒ}f˜Q>íü“àªçZÄæµókm¶ã²sMT¢èæf!»dÛu¦†2 7Q¶Êæ +5_Ф·w3§kE Xúá +…Ãi‰Ò̺ÇýO$ií+;d:½‰žzØRJÈ:=VE[whzk…²W„ÒCvRs6Â\!§/Ÿ†3:aLpW5“m·ro§Ð¡[aÄ`½•qYƒv Ú­ Žëró½õ0Ü£z ’î*5]Ñt“¬ +’kûºñd-yuBŽ£øƒñmaåzÕS¦þpÛ:Šðœ³vEÃw®;_¡/®À:3ëexHÿ¼²+ WÄýyØ{‘¯ýF§žžýïTqÎö¨ gq>®Eè°zizß"Õ +«§ÕUœÎ2kÅûŽžãïZ?µí¢=Ö=9G7ÿ®0Êé+2#£üØšÒ<V¥ê¸šB[£Æ÷Ê©ož}ËìÛ'‰©a˜—orýÛ j të#eImcÙj£ "_Èt]ì‚ôW’¾ S¶Ÿ$6yúÛP›ô< +3ê6ËÆ•¼Äô?1”âìä0v2iPÙ«Xtuí/Àq{1¶yU™¶’¸]ÁÃ4•<HÀ3VË»n ©·kuÿE2·¡s}_Z¶òÐ’m:ÚÌ2:mßë[Ÿ:Š˜—’‹¢{݇'­~yÑn´­¼T¯':ÎDQÝ&³ÔtÅ1°™lD[@Qúy¤z¯z&7 LLµæZ¶B‚jþ3.ý®[(í¸²ÝÐju…]Õ¬ù”ˆÀ£WY—9Õ¯vµF’;L`é%[×áRp®ÉÿŠ“#У†ËÐ"Iµ+oŠ£m–uB)Ôׂ²×Þ4o0v÷»êôæ½.›Mœe•8‰¢ržƒ^«h[ñ®>¥§ý#ß/"ô[¯ MŽ×ýPn¡syIò˯ÑSâqu…*5J¥ëk§GÛ”zUM”ý®"lÝ’ºè¾[Å´^½ß¶µ’º/™½>e‹­¢’Ò¨è²Ë‚ª-ôYÊE­‚TØkªÐÕO¯S^¿ž7+aL“ƒ¹Oi +qAU^ž(ŽÎÙFÒö)Eû­:N­ˆ-ͪvM[þ„óFµlàQyË+ôlѼ­B­­ ]§ÊˆE¹•EdíznÏüœ„ŒxíF»S.ѪéÏÅCí<+”Õ¯ l‡)lËXP"•Ù + +‘”à2ÛâWhŸÞªa×÷N­ØûHåZÏ`wÏ,·ÚØØž¡{Ü¢HÞªËjwnYþk ŽfÎS=tƺ¡vþö€·ü÷­­ùYØm¢Â"*½¾…I“g(jXÊÖÐE«Î.a0TåôÛ0ÐCIM™`H>Îr‡[(®@sƒ Æ:]?ý[Ñ}êb( ]Üg¶L?ŠB•ˆb®Œ³ämÛF² ÅÃ}[Öõ®Á¶Q.ú’±n(r9ÓK(ÕˆˆÈŠ{ý¨u¦¤ïrv–Y:Àó)<ýç°SqÊØ­ùQÖ5IþiÏZQôÁ#C)aƒ"ëëJî<KX˜7&Ž5n:Cu˜¸±ó÷}gT„H“¨ßÂzeÔöæñ›H~–Ùšm +Ü@U„¯?ëÝ0»ÇE&BŽ™­¥¼cùZù2¦K?ç g"ólß+Ê‹ «mغ«…äW~_¦ sïgG1öP–ë^tä4Œ3‡no&ÁϪ۪£ì;Q™2Ýï-0‰ÓZJ5¶ßU±âbQ[Ì Ï\‰¶žqe&ÈÈh3€ŠdºÊ]Ø O‚ôÏ4{Â*tö8J¥¢>]qvg…wÂD¶iºÅ½·j`¢k;ªÎ¯œã´[+€´æÔÆ"Ðëcgáq™¸îî5¦z¬ Ç¡F0(“¾¹‰2G;ˆ˜†Lt´ÞŠ×î; Œ}~—5ëåÙyz4Úxó¬ì·=…ìÙ ë¬0 ÄoYÊýðÀ®GÒFÖç¸J͵3=xB愦òÌ#qtm9Ù»£¯æg÷Jå û×ëãWSÿùó÷Ÿ¡Mûlàóük kˆ”.K°¢pCèòºR¨Ì(/ډ›~·s›ßBÑíþßlĉ^Û"Ýr¸v ù¸Ù×±iÞþfdN~Œº¿4=wçÇ7œÌ–~ =ñ­Û|ª õR×ŶQ(Ô- ƒ¢"-|Ûlu/òÃøz¢…I\½îE¿HØÉq·†'ní'ì{a~;×ý>öfÚµ>TÒûŽ[™‘¶Gúä÷=lIXê}ë÷ÃùFí÷_{|K½Kå¡ië_¡MVDX­}uy±.È× eëû ç§èqŸ«kH0·õÒ~–Šºã°¾óoÑïR4G‹åfì*¹ô#žZÔ±e™¹Œ*«eÔIF]ùýþv÷[ÁïuWVÈXxH¼/R.ÛñÚ2¥â4oìg ÅÌ£‹‚øe±÷>  xŸçèÿŠ ‹‹Vß°‡; ÐÁäMCù/7B ] ËЉ÷”@U$ |à_»të~–g{yAùÓâLGö ŒP]f gynÔÀÅf (ýñ ¼FÝׇ÷@ˆãåYüÕq”Í@òk*á±ÓBOÓ_}äw¦Ý†bÀV> &6;wÕι±×›Mï;ýÕó.WôꋽænãÅâ^ùÙâx3eí™7 ýèk%2œ9¥:2³í¸û|º|d-»}XAذW-ïµ +ÓBã§ÝжQ¦åî,åR³ýWtæ>gê–¶v¡¢x“•»¶)Š“Þ+ÐPöÑlI²@¶t"@×9;ç„ WeW”ŽÌ™B¤t™ÝM·À@ñ´ÛQ\q¡G…×P6Μ4Ö‰³¼ògÖ49Š.eGÉôðû²[æ2øqÝ}edXš;¯ðÂj* +UûuÏT—É­^7 …÷®Âš)Õ‘&²IÿÛ|ïs€Çúu%ŠGöQ‡λŽÔŦu¹zÝY5ØÞÎê]¯T½Æ¶¾[JÕ/Ÿ—P¡¯Á—4SGº¡¼dƒhpt¦ÇÓçå }´Iª°b(-¼JÛN‡¢D·Rf•¤e(¥´™1ÂQmoÕbÏ ¢ÌÆûšÿªÅGj€g7ù%3”£Ä%._Kú;9TäÝ6 Ý5&W¢c§û ˆw­Ýæ¿çõƒ¶ ˜¯ ÿ=n®½@½Ñ=w¸·¹}oß¹-¡å%š>Ó²äŒ è\?,1­/ñƒqìýÏ"¢#ŒÉKÄúŽ;È ÿKÆÚ{ù¶¸ž•kñ<*ìZœH¢ÈÅñƒ!W~‡Iñ§Í)Û½èDweüO€‹1‹w¤©f QŽ¿9ïñ%F7òžAxL µõµ2–wM׉F ôÝÍ7#I޳}‡…'–@±§ÍwàI½÷5IÆ®ü¿[0f Â(ÇŸ¨×vž€_ùRºcæè¾Ufér%étÅDo¹µT5Ó§M‰>¿Ý{æ ¤ E`Þ)tX×M¢Ç«µçúʃ§FáHYY–3öy΀´g—sX9j4¸S0^¦ç¶Ú³Î¶‹Âõ¬ëyA¬øp·£ú’(,R; VDZß“_C–BnSIñ>@ºKÜÁGeÓ!×¥ˆY¸‰â‡š \:²my…§á"Û­rêçµD)˜Œ¿ERQàYèô&Ú[Èa %Ñá¾/tzì\Š¿ë±t@%‰ÊLMoÇÉMÙÅ _^ wÃkÜY¹¦zÒ?€âêÃk uµí¸a~1Ú8vØ4¯Û¦ÍE1§uÚ>M Õ[…¢Ú–{T²Âªƒµð@è«¥M$–Ž;Ç·´¥¬gèÍ¥¨©ÖõZJ( ß)ûÔÚNptßù +}W¹öY7cèÝÞA*§ª0Á@\lz—«wµòsúB¿×ÛÈñß3qE`ˆG §Ö ä¥{'¸TmñšaßG=Îh«ØÞøºÎL#È÷8p]t¾RÔœÝü3ÄÀÍô¥W|a‹òkäÍæ;`Uê!¥ïî_Ã×%HgQxóæZ’åó€÷08ÉK͸Ӳ\—¢^§{p$Ód¶5öàïÜëiKʇ6¶oÐ%™mÏ›âz{®¤ úšgñöILÌËó”Ëëœ$±ƒcX†®³‹F_Ÿ¾Á¸=/€]ÛÛ@c‰ 4­}Ûå1Qþ~*7 +i¨hX_lóÈ…±P ûûÔ6ëÈMKFp{sÚ Ü‡ .£½ë(jv«ÕÕ9Ü»UÙyPqù¯'—+²n¢ÔÊô+c|i›RÔuùŽŽ’?åý衹ddª5÷ÛV€mõÏmyèíèž™xic +p ]Ѭ]öVÓ™5´ Õ®‚fŠÛÞVûO9 À¥tcàÜb$â×#r€¢]™ÜÐbÉ¡Wœþ}5ìe§®×z«9¼éݘÉî'à Ožëž5b-IB%åNG3I(ºj‡¹zº¿‹êGû­[`é$P2RíÀ=ýíîW_ëwùÛÉÀ«(ÁÃQ濾Ö{Ô±ÍõÝr +´Ë·ƒ…$Ú‡ÔQh z¿;´§r¥àY³*ÖÕκR5 «¨ZÐBŸÕ|éK­Úi†¤v˜ý*oVŘ&ß÷F¢²’‹ê»‚ćºâêcZ]÷`úí·j+PliVµoÚö¥HA^Ó7ü +hä+´µjŠbÕ +-® [ê!ßÚñ1Y·ÊˆŸ5îÑTøy Ä?vp9©˜ˆàô 6¾9×Òv®¶_Jz×ÅPH´ÜR¹öŽP†Ìò«4Ò1ðŒ[ôß±ÃP´µ ÿ0ãcwYeã‡:Án‚|Ö—Þö¥£|öX õí{}‹Þ0ýÁËÇŸÐÇ0©’SàQaäÁ/^ C)L™`,êñ8Â-Tœºö¤ÔÁø{z¤Î5Þvlãøò÷c)ë(:÷* íbª‰õU–êm %ó| k˜wëXBrFi;3—Ÿi$”gº¡Hx¡èÎ5p=ž1{£9ã.°/•!_‹Ç¯<ÈeÄOÀH¢øc<tžØô<¿±‹tú)Já´j·Ao%?‚³‚ô\Ž [éˆÊ7¢˜ í9@L^ÊT¥u™äCí—o«ÖÍw ×™*ºl(†P»jKéôèâ:=6è'·O)Ã>†óÊmûœª„ŠÎô¥A¡Í@å„kʶ;î ?J g(#E5Ö45ÖŠí¼šÚC Vr2×â G¦Œ~¥ŽA OÜC)º¬I@q(«ºƒBÖtkfˆ8xZû6¸Ö¼:G<ÂêÁp6Ž¢·ÐÜøBµìå(}s =–’t–iÈDï{ ÝGÇ+bôç;³^®eiì{aÒ\»óìqÃTh3ôý\K0¾-ŸR¦_ÍÈoäóhËúÚ¹On@b—C´(•Þ¤¹]f7f´:zïæk… zuî?õß_ÿü¨"õñýÊEˆ²h} åö!Õû®DÕEzžu¤¡(Š_Cn³SŠhJz‰"4/ý†i‡¡4Ô kbVßÀ3B«¡`©‰»úe ¯>vÓ`X{÷F%¯±Z€o…¹¬Qè‹;¤l~Ä[¯ í¿ +”ùÂöI]Y<±ôìžç"Á¤í»CäCŸ›j†îÛöE0iã~{ég÷þÐuÃïqO¡íÌôÉï»ÙN÷Œï¯Š_gõßB{|„ZU2¥§¯…žµÃÁïÖ¾—´fÒ¸°¾VXiëU k)ãÛ>§no&'S‹,f9¼ñ4Àz¼!{d“¾Ñükq®Ö:ÚÑyZÖ¼#îÖn¹/´yãkÛO Å"Æ@ñqZ¡‰5¬ZÀ[wÌ@¹äòsmW*U“ ;ÇÓ¨‚s'ª\?aÞ˜õsœíò0‹!¯áÁx‹’çªËäX’¢÷±B&pI;ä„.òÿª‡µZE|å°Q\€\¸ ÷GŠÞk”+ØÂqW€áÁw%ê@qä^–#ÇÛŠ*»j-(¡a$ºåY:t]_3ÑnF”-Œ(ldÊÉ›¹”Pº¡”}µvÐK† V~mõeTÌÕ¯qO¡§éy$ŽVkg·³é¹ºÍ;^õs3ï°EGÞ#ð¦¡w_É£!C]ñ,6ÞDC9P‹&·.r¹/WÙ^õ5¬p {Jž?1¼,Á#Hᘕ½†"Õ#QHÔ¸’½8Ô‡üEÎäFË^ä–Ô©‚bMvöÍ>‰regßÓuPM!( ÍŠKV¸oùÒý”cÜó€ŠÀ@‡zlCqÅ…N•]CéÖl},Àе«ÉϘÅp ;7†¤ß—Ÿç}g(pWÍÞSYpô¹Ñ4ôµåeOÇÞªR­àÌA¿o—XÊF¡[MQ¢Ö)ô? VÕtV …±W­í=Î –J‚ÆÉÔB¿ª«¼¦ ´VKÝÇ(zúù6¶Z|ì¾ê…÷Þö²|ªÕåÒy¾…ÇÈÕåÞ8ÿÚëjλâ&v¡}úðèëÔëôe±Õµv÷íÇf¤ê®¦&qÝúµÝ¡ IÁ¡á!ÀnnNQ,d•%æEº<Ûñ¢éÛQiuÞìgÐë&;wS#P8¿Æoö œ¿Üí4‹¡(®Bòc£­íÛ%¸½\Ûî<¾±#í&…<µ¬ +¾pŽÆ +b6jà”eî"è#¶§r© ï°¡6µ?ï(t×òcä#PÕÓÜÁ@½ÕP«¼¥Èq^exÐqîKr$¾¨ž€’N­íkCñ˜ãú4•‚’çn1üÔˆKdâÕ_)Õ¬—9ÈÚîx×@ÝË©£Mër5º³n¡Ã®r–S7v·ƒ!Ê#ÀfFbØ‚L ˪'8u0Ú¹;:Ëßñ¼Ç‚&(Zq²Ôkˆ¡ˆzQÛÍF}3êgeß©yµtv5ºQ]oÕbLºíW€û¾Þ÷³¡örÊû¶£>IQòB¹ÉC±Y’î +ŸmÓ£÷œtµïßkæI¿tä6ÿ=ݼÒ=ž§;ºÈM†>5€Ã«2$;@”mFÛcP5-5ꆦʩ:+€Òº=PxéøÆdí«ámm +f€¼_”Ýl\]æ + e¤rí¾ÏAúw$Hž¿Z´jˆÞußvy{ƒK®ùK}ˆ-À1—ú}Fzj:¯æX{òó<‰B:¶-Úc;Ý)*\­7ÍkeÝsŒÁèºë/¦à½ÚÊ2°óJ¾k^gôücCí½aü·ÃCÅà=iã… ÅÑóÚ–@ &Þ„Éμ&*~3KwKIE+æyŸ›K™}ñT"‰n?<ÁÛç—àœr¬O¦‘Soî[»4):g¼íP+¹¼ñcÜí5¦‚iÏÜ#xƒ-om gÝ|)äÒ³*ÆVßÐöÖódzÇÕ_͵ó¾á4çvX¤iµ篽$;é’ã\®IJ<¹yYULT.ÝêK en¢èWs)›Ï%Òº®¹t=NÏöèjß íòZ¢°Ïéÿ“Hk|—@$ø&x¼™Uyk˜0š;$UKÙXà s‡tÃt«†l„‡BKã!ø»‡ |8«šÇ6O âæAQø1 ¬³³,HÂi«&8Ò“ôU4q‰†áÌÔö:W+×sGÓHR~åÆ.}†míWkaãX‹¿ßÚ&áã|á.Ùm­Ä;øÎÙRKÏž~n~¾B_x°ýÔÉ®[¦œ"u ˆV|íç`ïÅ}Éõ6ŸË?òN½Í¯Š-ï½ÞÑçQýü©»Õ¬ãßâºFuÂÎç¥@}Œ`{ßÒsü¶öÏÛ@uq³›ë(bŽ^þâ‹õ=“ã»]˜¢¤P8£ù‹aSVNýÓ¥)or0WÞ\{æTÑd†o»9Ò[©ÓR\ÿv†Qí‰s#y•ÃÑÍ’×óå‰þZÉ@cl_ÚO²ÚÀî;†ãí¹rÚɱD­ä$Í›žnyIþZãè<ƒB»E Û>฽È—ê+1‹¥,4/ÛÕ¨·U?ŸÚ†]æn¹Sò¬¶è^­öe)¥Îý} ?ì - $G›>r¢ØsÝ–èaGѲ۬®®á&¨äf˜§R{#mŨRäËÌjg‚2{ÅÈtÅ1°™hD[ ó}ëìœj¡§ZÈÀÔûó3 ÕȲØju2 {®Ý†ˆŠWXÈÃ7³+*Ì™¯¥¹uv¯0Šø¸jÆK¡ƒÞu¶œ;AŒR|Ÿî’Bò¸¡?)ÐÚv¢ÏïËR¿§hWªHtîî{å ‹u„P³%E$—¨ÄÅÚõ ½4ÂѹzrÜ&ZÄ×êÜvîø}uÒ-tÆ;pÉÅ\Û$_AyE³û¬á櫯>† ûå´ùQç†íç«à·4éÖÛÚ(‚Þïò“5{}ÊL¹¢ëÓE„UÉ¢ê> }vãKrUÙ»§ï@Ű*¼~½êPšÀÇROR~߯² +bcëu9ârtÎ6ê-J)Úo=£[,[úTmš¶}ç•\‹X¢UðÀãÕuâ¿Ç¾ï­© åÜù­ƒ)‰µëÖ%r‡7Ðù¹ˆ5â°œ°¥ÿn·M¿CìS™1”L5ûÒ•3mÝ˵/å»4¥(ÚÁœ\¦×Ж£&Žáœú`ïc”k-ƒÑ=s¥T‘³Ä@wOáy»¡Èjy}¿n¼/CžÊÑÖØ¾²‹¬/()ÚÚžŸyÓ©ÁG{ÉLg¯ÏP9y†ÈÔ‘EMfWÅiïKC…¹ë_Ÿ&þ‰W` ·Ð飯>øbj¸t*§ö¥6ô³”V¡ÖÝD#˜N¿2Ë£èõé°o_¸ÂØi#¨ÑeŸ… 놢••®”fEÀ ]Ì€ ªÔ'®ëx‹³¿„¸æôµÒË^ä]Œ½—¤ ²LÏõ +êÊèÒt\ySÇ!E)lW½6è­ØÇ”óéî¨æ”@§Ù9Àó )Öb:7£4iÍ«’ÓÌHpÊ.ª™Š"+Ð3^÷oí§>ØQ¢­­º6Ë퉶=Ä÷KJŒºB“©C³I™øºD[ŒÏ€¼ëjÎ]+H õ„ñIÆñ©&$ìB§ûÏï#štÚtêÏÉ6¯£pÔê…nq”9šUàùêW`5Ûí` §×ÇèGáÓÚÂí[s€²ãsE6TNp&}sE‡ÅIÆ TiïÎÅÞñ¢ùÎÅd¬—kÔ`hrÂ͵Cžx²g3(w¸šP¿åS®×ZèÑjcg“øZÜ]@Oš¬[¸gÅÒ-ëd÷·¸„rËÊYCûøÕÔþüý륚Ôû÷ÿ:ø×e–#IÃÐly¿ÿÅúiDÐÃr:d-$5æÜ©ËǬè|! (Ê,gù(íí±ÁÌ…¢×Í¿¹ˆc¯»[Ó.7‡©‡¡ÝÈÌ̉9}^ÜÇœèèo…ç¹^7Eg‹Ý=½w =‘ÊË’{]3œÌ…ê,”¿Ã¡¹c0”å6ÐÑ*°}Æ ãw¾7ìº`¯^ÑGa2Ùv·†%F ¿kß CÛ ÷ûØ“0´k}èLï+·R³Û–ôÉï{Ø +ó̲Z¿ŸN8꾇|Yì/\}_È~OWÿ +•¹ÂÕ¯öEÛg€l™umKSß;?ëln, /˜Ûzé…«ga1Ïá}çÁ +j+‰-iþ0í“êPd&б}üE-=¢nukSÍùÖ0ÅXÃb ‚ß+VœkìL¡äïg›Q…2uW +’îŒÛWQEÉg¬0‡¹ò'hK<ÞŒø½öïž±´ê¦(¼f{ä&-n¥ Ì_m¼‹Ü(Áˆß°ðù-œ–øÙ}OÔvª®/Gq¦R¨<+ãÑi›#PÁW‰¡Ä =Q·Gß}/CÀæm?ºÔeJ½£ì3?ÖÏ´Gµý÷zL`3^Vg!¶e(.uåÓ¤ý\us#sƒXÓÝ? Ìã AÅЋ¹Í—Ñ)&ëÏ–Æ›C7¦¡ˆïÍA¸V_<Ñ™õ5¶³e F>aûƦmô ëjå}º5TXø‡íè»;[Û¯›¤`LDZ¶"¨&[²²ëXô¶ŸÅFï• z•]Õ$éO­ý!º•ž7 Ù~-ömä4m÷;¢«¦®^õ׆∠}#ŽÚ¦ãÙnG!ÒŸ!“8‹1͸ŽìxÙÞ/ŸK«æÑ;kòøÀˆk_xLEqÇhRèÖWtü̹Û\EyBÝëxHZ%kª}«(+OÝpÚö³õ¬³§G Œf)$¨ø êž+^‚wV«£xO…‚3 +yï«VÀi,¿•/µŠka …ôêÚy¢™ð¸½îFKŠ®ÕV¡}Ľ§}/“~=çl £ÎÂ_qö½]÷Bùв·qU¯¾Qö7Æ.ô¬gÇ•U'-ÐùVõ#}<Ý­^œ ÝUW{¾#f­§+\걪‚&Ñm¯W¸º-,C±5ÿLÿò±µ½œÆÖZDr»É ¤ìøÒ6*@}z->yUô<¶Å'Ë,v†³‡ƒ6Žë-&êQ[±s¿%®ä»­[ ¢ª¦ÅÙȆ¦F}òÚÉV*FÛP9÷% a:Ôª€²:{tBÅ`Ê-ôÙøàˆÇ¼EðÏŸ6)û«<"BÏQi%G̺5¿>reÒxÊú¢.wTèÒe ¶«´“íVyôµWo@&Uþ…š2ËyõSÖ-ÿ©—ÑÐÝÀQÞN­¦m™ ì0§Z¯q EÓ‹ÜnwÊÎ6³ïT<6“²TJ^Ü¥e?¯Þ-Ü_ºïëý«Ö +”¢Ö3;q–eᔳAtý^Ö¾6 æhÝÐUö’:Ão[xÒ®jpAéæx™.hÍø +t²4zɢߪˆC8fód)»Êžoš2Ç´œ@iÝ(•>þ°½dåYRH6 îлàdO á¬é·âwâ „ùœXWWq´l€[3ëé~+Lþ`J$†áÏOi²¯WñÍî·¾¿>i6¯øyáz1 '›î®d»÷7ɬŸ=2£gÔ5¨Õ³®»Y1|ÃÜk:±Â'гzô"Æèå×¢æÝÌ¿ŠÆ¶„)™5ßâ^ïíy^sùUt¿ëE{Œ(#nÉ™CíŒVLô:·ŽâÒýh;ÓùTô°3Åk#CYíŠÂ¼]¨ˆ3„ýmמ6p9^^ýØ• °¾B£…«‚éÐ ØDB˜·âj­Ó0†¿J «m?:©T ѵCÙg„¥/ÑÎyšþ\Œú#Yà׎뜱òì<¶áªÂì>ó,_¸.\ŒÃM²j®F°©d m{Cwm·ØpiÓþÄÏbrZ¢XšÓÿ“IPº0Põ&:Ú ¡5R’uC©eÕѶú +Uo-QÜàr™lmÇj¢£&'Ý‚¼µ}¼ûÕoÜQc‰ºÓC€ê*æè<«îE·ÕvMP–4±Ø‚[Ó 1­.­•+U]Ñ6áí¬;¨„b/yuTND{åù޶ps½ê€ò…ƒ:{EÖ=‚ƒc­³d1 éº>”†¾S7êeØÿÔ²+ HWÜûó°õ"_ûI„ÀÃÖãL+È%ëUÒÀˆU ?¦TƒôûäDZåfñ¾£ø0Ïâú)Œ¹]÷Ag;ÿ®1´~ +„˜L +[7¿AU0‡GÆŠí›t“‹uò·wožj›}CÃãÜv\™ï}*W9ª§_õºù‘³¼÷â7…úvÞ𚪀­“se¸:à¾yö“ÔÖ–>ÇvÔ6ýaJx:ʾÏâ|V¢‹3”ê¸Îežã¨éJÒ³y}@¹½8›Ìlqï:µo;:ÜÛ¬ßãÉ ï<ûN÷['Œ“ÜÑ|‹§Æ¼ëÆ¢h?c”XȘAËŽA+ðÁЂ½S3frÚ&¬g(^¡`S1u-ã?­¿±ÁŒyê2lùÆ㾿mà-ÿ=^|6v›Z ïŸØ0p×Ð}>esèÏPêqv¡¸2C‚úm˜CIÍg¥»y2Pb¸‰ê©¹Á²ŸèzÆ¡]cÈÀØÐ,|pÅ×g{àƒñ×%Ä0«_À8×Zµ…ñ7”åç[¶pZu|![n <)놢˜µl)Õˆ¡y¡2ûõ³üùÔ(.ð˜ \L~­5æ×P¼~MïÅéx â$zLle-«éá.¥Æ¦Öc«¯önӲ΢0Q]2°K OŸ]­éîƒzÔc ÿ=^/â:kSÕPtÍ0JGM÷Œ³(DÞ0ïÃ*º ‚¼«î°É†ƒCÛ×Т:Bw6!캠Çô í]‰Ã>†{¢€Ç“°Çyv²R +‡Ü@!Üå1àI¢hÈ;–Ác`ÉEFß»)²flåÓÐwÖ¿…ŠÖ[z[+¶Åon/Ú?²ËK¢Ü†¡ù,ÆGRëð&œxÿéüU©+è­Ò“(¼Äú@ttò½º¯eÚ›ýÑaŠ +PØ“a­ÑN¨œZ·©"fì6kº +Øk` ¸±¯Ní¥2#=Ñ5÷¥UîæEÑ'ð.Tªx±¡…ÍR›¶c*Ð/^ŠiÖw8( ‘9ÓDAº¤Š$5 +é4”x Å¹wv·†+’CHÕ c ùz©;ldÍà3n âäkn° ‹¦bèù1´Éí*Ð©Ž°%l£ÁÌoÃ6‘7ZªÚ°D3FB¦ +—ènÇû°¼"ä«»›cغ¹ßm¡Ï\@›:Ç»„&W~vж‘‘¬ç7CKZ-, Ù„^íjî“À Ä»*RtÕÍy,–nðh%4üÀ×"È•¤·[]ºêÿþùï?oÉÙ{±çÿ]‹©æÃžÛ_ö„²ÜýeOª(*}Ù“*€e¿ìIu9é±'ÕùÞT‡÷™/ö¤Úט/{R²Œ—=¡Î{îyÙ“ª^‘—=Mq‹bOªÇ-ô4q }ÑÓÔž™èIõü §©:_òtqí‡<ý÷Ò_ô´oý §©{õ—=M½º_ö´ëî9_ö´€ý°§©wö>-â"ç…O{ø´—”8X§=ºîý§¥MÛãOŠgŽõ§åÝ9úÂ'UË«>-w|¬à“êø Ÿñ¸áªj›ç…Oaëù ŸI™òÂ'TØÑ/|BE‹¢Nø„¿´Òù‚O¨{«®>¡")ÎËž¥ûƒ}Ø“¢úûŸP9ßýOªzÓ[>¡¢Å… |RÝ?ðIUÚxÙÓDï³_ìiêó²§mûÞT§Wÿ{ò¸×ïÞ÷{Rm-(³Ø“±™G_ôdhcßzòô=ùdê´þ…ž|]õâýBOf‚ÚlòEžLšsìb_äÉüZN¿_ä)t÷)ò’'óVDçKžÂ®qXßäiF~ñŠêuÇLõÙö^ Åq?»3Ðuﺒr‡žÛ™IÄ÷s1'OÂóÑ +¸º­´çøD±ß@õ~+¸®ÀßR‘ƒ±ƧÏC®sÁúdš¹T’ð ¢hý`¨¬UÞÝ1m6Ñòòæ¿誕·w4¿î@·©¼‰ŒyªÊ0bÆX0@±Y$ôøÖÎþ (z¿,\|f‘aê~VÛÈ߯Å;RÝÙŒXЃŠbæÒŽŽéÓŠ ®ò +mL½cβ|„–‡=¬Iò"¢:Z‚ŒMÕE¬~l|Žcê ”c7µÊ=©T#€÷nW•~*ú¬y‚ð•VšóìáFzà@z\SÁT7Ï€ñtS±mùåXm*&€•_ztߥYoÀ%2ýOúY;»ÝMqšYÝÀrI n3ƒÚ¾ö zH ¡kšªàؼ:ŒáÚˆ˜ÍdÁÉ—©è²Z‘\Žà—ãf}íÌT1Nä%è³¾-0§W3Yj/ 4Y³†¦a4Ñ“ùð`ù0È-óÙL^ +ÂØ™zS8þPœì%˜¤š¯åÄ‘´qd²" n ‹¹Ã±žiê¥#GM4c¨§qÚ Ðu\ÿ–:­×SÅdY|µ6ûÕÕÎW­18T7Í$YìП©ž›LŒØ@W Ü$poµ_¹æŽP¥Ÿ6J=¾¯j‡ÏžXŠ+ŒR·xÄp–Š.† ñèâ³u_í¼Uìµj-ß÷…£÷AW#*ßÚ÷^¦ÄQk› Uù†z?¢ª·²A.=Sñ­VÑ:ú@ÝõîH?.Á²b#0-W7°¬Ô>ý˜ëj¢Ô_¿™µv÷<ií»š¥Æ4lUÇœ(Ú”b'[š:µ8“j‹ ÖÝ™ð/;.ÔÓê¾™ÑPÏZ$eiБ²-£~q¦rª)B›6‰@Yœü¾°ý¼Ònz€êWå4MAÈÄ÷½_”È<æ¾$ù˥…CÕ1Vn»î¾tb†Í¥œ\EwjeÒ[C…åµüØ$6SdSÍs ‡±18åS-6 bÑ›6›±÷ŸÄ.óè-¦'‡–z]ÄàVÆkv±ØÌËJÇñt\lì£;BÄQÊ4'‡?S÷™ƒ>É}ƒìªRñÒ½MÄ\W7ÀTE‡@Œ,¹ÁÙל”d u/”/çJ½ÿ=°¼÷zGmAù**•æMrG¨L@’ºzÁb»Ÿ¥¸»q=;F•1G60›Lª„$Jí“íË£¥U¾CvwY©éÁë_®«%Ù®†Í³˜Ø€a½‰žôþ§-ùw’7HU¢øú°%yܼPá­Ø­úb¹{07·†z_0¥פâ©h¸óáÎ*/Ø_ëÊðÖZ±ó¡ÁVqpC!8­xmÀîÇÏáGgENÿ16YìZ»0LVì·x›ÔW²¥q ®³›B÷¤”;›¬áQ#^ñ5±Ú†i¦±úçpšìQ•ŠºgºñÆÍ˸Ls¶µ¿5½eâ­!pr4“d‰Düïë·ŒG[PÆ5 +!ihÄmVؽê…É0­n:ìB¢û’³gȯã©%úN˜¶Ef é`Ÿcì‡Vúª£©ßØÓD_BÏtEb_íÓ¨ñSÖï졊åÒmÁÔŽ}GRÙï–*LFI0ÆçÖ°âÉ$ÍÍ\¯òŠ„«gÇw¡¤aYÇV£'CJ• ä¿tR±ðºÓ@gò½iSQÜé Já¯p¡³c!œåñžÝ•ÌðG]ö4~w½]–~_FÑÑ5Ò¼ÂtkŸì¥«Æ­æo~_ûٱȭôÄïvZLT¦­[£äÊpàó;x!Òê<Ãú)g–« ÍÕÏ>4ÑUn“S߾ܻ6´v§]± r ý0Ž7ïÚç­†®=æ/ŠæÞ´{"’¡§Ï‘öL¡ãd¶©ù+†ÞœˆÎ }¨LVãW ÍKz©”CSpÊ( qBˆÆnyí£¦dh(VÃF“¡¹ÛÂzý`hc 20´áßkÎL†¶ßHû*¶Ú –áCCùWÙð¡/OùÅ&CÃQLÝu¶bè /kZ*†–ˆ=ðUÅüEÑp5e¸ÿ h8 åÞû7Gsy8·oòÓË,­·(ކäcR~Pô£„¶°æ«AÚ—6Á’¢Ÿ£ïžzÊdhqeo6O†Šßõ­dh hóSÞ (,çφÊ[&Іl6Š +‡,=AÑDACEôE]ãtlP4Q¬@M-AÑDÏkÖ †&x—47C‹/·I$¨Dšã¡ j.3CÅ:4šè9»+š($­3C%Åwl04ÑùÆùP‰ Å|ÌïMÞúÓ§h¢V|ÑMô¾ñI’S´p9ã“$§h¢àåÎëM†áÓ?§h¢{·YMŠ& +ãÛG Š& +û÷Û™åBWô³;E =¡J+¾S4A9³Á h¢ú™ð¤h¢èóîÇ h¢gôy«£bÁ¨¡ÄÞCŠõüaá¹ÏQøôÓnÈÔ"vÝsŠä×Z;ê=ó½ŠUQ ÔθÅò¸2‹¼ð=mÈàÖI8"tŸž¾›…eofQõæªOûÏ{|óеc´3~r¢`¼Ñl¼,À‡í®‰;ÜŸÀ«¾ý™h»~7 +c|Ûœ?ÑuÔ:vûêô¬'·Ñà… hŽ·ãtWÊ}§KpM*£% V6A½ëXL½Ëá?öìhg²úµ¾/ÙÞw4šïÕóŽAꙂ¿Ùù.â4ÅÛY5l +1*Vñ†‘a¯iÝ +*ÃE ¯zô}8D±s´2ŸçZ ô­OÚ¡2N8ÔöÑ-öøVŽÎsß×ü—–¨ëÖ9ýl‡§íÔ²·"vé·šž çèî1Á“¿G\V•‡xÅïñúy2ÃTû.BtÕiÔ<º¢ÜfÜûi&€3¯´¶Ö+´„"¯A @ѹQì¥ïµ( eçšv „=K\² ñfÞw8ƒAé=õH ׳*öÂ|¼¸‘B!' +ÓZ$._}Nqáo§µ€ÄCwÅøŸÆ,ßñQ E‰t,|s¼ÇKÔöËnÄ{&áAùq·khdÏ»&Fœ@ÐU7ßlSúÏŽ KoôPìP#2àI£÷jfÅŸUØŘÁ „['Šr,&ê]ì•¡è­Ð}¿™Å*ò¬½r¢·Ý¥fÆôCS¥Ð'Pž[«‚Øp‰B`ÞiT¼ëô7»cÏHÍÁ#£pœ;Ѝìó‚ÑžU\Î bµÛU!ÿ +†—™•–=l»pq³î•3èÚ4Ü(ßÀ +‹tˆ€_"d¾§¾YJq¸ƒ’}é>!q>ªšxCŠ0 ·Pø¡Â.•j[¼ÂI‰ãnQmû| :Ï…âÂL~ˆä£e tz #åp”’`FpÞ—:-»Báïf† +¨¤PÓÒôqr9á”Iú(Tøêhðw7½ÆÕÈ¥–è)ÿT·¥×€ÖuÚÿ©.s+HnˆúІàÍ8”„åïê(ô¬¼y5dóêèwë³$–ìKÆ6­ãZÐt¸(úôÛ­E4 oUŠî(•™èÖ³;ÚäÐ÷ mçhh¿£ÿ†¶²‚ß3XK)j®uö %“Èwžµ¿±¶†ÐuÇûÐwœ«ïd4}Ú;He·0’Á¼µ~YåÞ›ýùsú‡zÿÞæìœOÇ}†x49}¸ðÛÁyåÞ#|UÕXÙ÷þ=No³ l¯ÿª. Ì#Èïqà:UÂºç£æªæ?CÌ›éd¨¾ž¬¸™N¶öÕRq3={÷w7ÅÍí×?nö|æ7ònåÆZ± ¸ÙcŸyµþÁÍ`„^¬ nö„)Cþ£fóµ^Hj&·R÷Vß5ƒ²þøø6¹tÝ»¿±ÉÍ Â/u7ƒöþ}VÔ Ø0?Âj¶ƒ”}ÌÌ Ä·Û·~R3(eŸ6$5ƒö§¢ûQ3¨•Áþq³m÷O·øVÜ zˆEÅ·âfs÷2íÓÇS(<þ}AÜ Ú±”µq3(ìò1«¸ÙÜ¡ýêVÜl¡çÿˆ›Íõü~­#n¥Æo5¯¸t¾_‰g1;…:úÏ_ÿõp¾$5ß2×=lþàšqÁ€£E19¸ÿÌ›tðfÙ…J.aÏóM`„š‘ Õ;4NÙ£þ$ˆjúóô ³ý8ó²-“–ƒüZ Žfµ5› u=Äy˜@¬æLðÜV#ÏÛšþfxsqÖ¹ùÛÒØã ÍU'âð9÷®-½vs¡±g·Ôæ1‰¿o¾—gçŠço¡7äâÞú¶”‹Ï´,5)ÇVŠ}œgåÒs§¨Çmø~¼ó|÷fZe5/WݰžbɯÅSÌ•³Zø=ÚœyÁK¢Ï;–¦/ï–¹ÁÜ%ŽùÞ*™§B úû©ÚÒ2/m¸C§·<Άp«×™y“dޥ뽳÷\{÷=kzßWàXu½›”:D)í’ÐÄâomhà¥s—o¬ª7¤ÃC¢aIç;éqtdm o€‚g6Ow€sÎÈ€tªgÀ•œKZÎ&õgòv=gc{V—G§c‹Ž¦‹žðpzÖ†f²Ç¤ O‚öò2–¯½—@ª ? /-ŽûÙ9:jd ûLw¯w;’ôÇ+ð´äÚ%îòé†ÇHª}iÙ;)õž[kŸ,¬ãA÷èÚЗ™òÑá8§c#R@èP@¿ ¾š€~u-3{´#±r--#z!SÚ ‚öDZ×{=l-}<#IäfíçB;À±ÏÕô‡½Oål£z×S"‰ˆMe…n᡼ô£Zsµœ~wÖZY÷z¦ê§#ò‹¬wkà ûå [Sãí–•á¡um¤ip©PE£®3ý‚ÐjàØ]#‡ZŒ^‹ÆBªÅÖêé8¨©ê&èqè‹×†Ž½O8bß©¶ÅY¬é½Wk_ÛG+~ “ôK˜ÍfÞ“[²½F­Nyk$ýR#1ò¹O¤g}˜Ô©‚^Ÿ|ÏôJ†h ûö3ãÁ9X}ñ¼¥/Þ3ë8g¼\z¨UöÉÉn±ë‹+™1yâ¤fë0ø’¼ßÁ‡j$~N#¯›H½m«éoîÚ%n>ˆ‘^×[šNKïW…Õ›@w¿÷Ñ>ñGuȪU7©uEýUaAÔ¥˜˜‰›K!×6)UÝ0nºzù’2´–QÅûq#ã2»L ªC—êG\¯eú€€_ñêÚTäd4 ÛÊO¶5r´¦œƒA™b186@‹,XÌOí þØv†…Do¬8ðÎL»¿9ŠWÛÍOògÿhÕI°wš¯ôgq°Ûîµ¶åy:Oiuq6½•\wÖ!½ÄÌ[ ÅNÕ€HYÃɱ‡o,…4ºHKÕÞç 2ê~¯§®x̨I¨z i 3§ÆÇlˆ™èõæ¸?9%±g”SãФ'3¤c†ò\õ’°s6JZ Måι`æ*×{W~’NÓ@ Fœ†_³>{ZúÚIÞ@}_ë>F^ùe?9›Ü‘k#¿PUNgãy}oä¾¥mD…º%ˆ·×7ß gí OrùEŽ@)ò{¢Ï\rëÈïšÑ+€c6õF‰2RëÐ -Ë¥Î]®Ñ?î1T×(k_;§Û)èúÇ£¥ÞÉ»Dñ¼„Póà®kfGbÀ‡FÒÐ;GBUIz.ƒ{%Øeiº ¤IwÏÂzO2yÐJ t§ AìÔÈÖ£°Í­~êJJø õ´8Uç¶u’–<ú‚«òŠHHI™³¤÷¹ÍóA0.ÇÕ{ñ¼p3W¨éÐÅKýKeàÕ¬‰Úí’4ôæ/"£+ŽY#û&`„†<8S  “J“SÕ¨8âGŽä¡32 +úõt Þ@]UL‘ÛÿT $ õÕ콚}vÝ1 U*M´Ùê“}Ù’øÚ·Ž5¤Ý73€·P—¹ЬV_/J;üÀ;:=[à”ʲ¸Écܧo6¶¾IYÌ»V' ˆV”x³àìŽ)'´¥¾–±óU[šr( 5)ÔÀöÎþ¶ü$]eµ£âà™«F.»òuë|»\Cš7 +ä…ìý;¸3u`pKʜދ¯^ %Ó‘?¾+ÂaËæ¢©µ8‡ÐtbR•G»²L­¿QÏ[µÅ“Ÿzs^@ŸlßSì9›,ÿkßHžòÉóOAay~,k-®zý#1PÙ4Fv®¾hdÎ>ýUWZ:@:ñ£Ü~ƒÛÁx¦^ôÊ]ç*cŽ!FXìƒ.ÒZ†ÜaùÉÆÛ«÷GÆ6öš‰5¯—Nf4R‘ ú¨0Ç¥xš%8®ä¯ú8Åy@l +§þ|®F%±…§xïD£nqŽ4Ù„SœêÇ¥cebeë³è/ibƒî7}Ü̱ÔÖ²"rÿ"ÞI¯µ!Ï\’VÑëH:Y^¶cÔ!ßXâDLZõ,SÕòCî¢×ôAæÿ–îˆ\é~Ëé³êâP¿hhdÚv=-™×]ý<‰X½éJ'ùĈº+4wY­*& .\}}²´5ãÚÕi§ä Š\'AÄJÝKkmL…zb¬¾rñõvC…sm·ÍZ{ô¼ßádÑE­Xmh­ïˆî4ÿ¡uúûÀñõs¿„ºmÕê=lR€ŸÕ: Lצ‡öíÕ[‹%¸Zñ­/ HÖ"Ëti0Amœt# +ý¦Ï«éÃügnil5~L?¹:Úp¾ÕÃ";Øo®¼ Dù}ØÓýzì¨mR«¹£Nxªm†õ ð·uú$¡Š/~»'²$ Ÿ¬³G¤…w½Ø™ú¢'ÌzÛHæ‰IÞÑK£©„ìŒUÅ6GÏ…Ìõ» +kï¼7ÃBxš¶s~¥ºjþ‰áĵ]òZî’Ǻ—¥m ö +ð’F4ýzs9v~‡rá2é­ê[˜ÄôŒ °Ï1säì§8˜7ýë2ɲã†à^‡Ñ# Žçð%¼ñý· +ŒÕr¯úågqñÅÙ„œ4ˆk•x÷3Yxœ³ñº1碃ѓÓÝîÖÓ‰¶“ @ +²Çç–]ªé† +Äßò¯µÛ( ÜËGâ¬ï¦ ŠÕN}>#GbƒúM+MÞGLcÁ~¼é¹Ž¢YqTGéJSìžÏÅ1ÝØ&Nå#ɾ¼8€È%ÐY|&¸îk€HL_ß}kÇ€¸HµôejŠidq–]Â~›6pýùgùÇì,»µ5'Dâ@gä ‡v/‚cš‰6-É? Š<Óö,‚áIÔŒšÖyý$¹Ds·i@œÂNM‰¦²Öm‘Ùtk»Ì¨kž6†™8¾}q<ÿfwÚ†ø×œæeK®±Äç" 4}NeªëâlJ+M¹¿µøzLM +Õöq¢Ú†{#D¯âTï¦ÏdÚw«Þ#D­É..0×ÏMÐyJ-\¶‰ßØ(ÃE sÅÛ¾±PcJ‰®½„Šó÷«šzmÇ¡zsþBžÅÈMÉñ‘ÔÅüœîuÇûP¥ÄEz ;‘æfîTcï~™–ß.âKïýw“iÍ _0Am[׊>ÕŠ4Ún—o6#ÁÚ}BJ:ÅÔ£Ÿò1Ÿ‹$sóH§6Iˆ«v +í™W¤HëñÏ~üŒÔ±óâsðßqêCkBö¹suŽÝ<É¡ 5­xCÕB\8\„5%EË]´IúÅ:Ø_xÞVH‰KjÞ“à˜¯8%±cÎÞy éq £½†»ðkŸÃËEN›Gç·W rÅ›7€&jÀ»ñæTó{t÷©øÅ‚¸÷{7\´ž„¢4׋ϱÔùæî¯Ï^B×äd‚9½ÿUýþýõÏ/ Õ#=Ðjâlÿ¹Èƒ„*Ë®ÔTr.Ènx3k*Hĵ-ÈLìcy­›Ö •²8ŸWkS¯F‚Ó˜^f¨'IŽ@±Û6㌱jG!Âc^âåÑÔ¹âÈÔ•—»êê®â 5v$’·ýSe9òò»ÔžH(ËÒUjD Ú8µo“¬¶¾C´—j;ß -±¶óSƒ í[ÿfðÁ}­†ò´Á\r,ê\]±ÝÁÏõýÅ&£î|$* Õ ’t¨ázJ >Ôùk_3±Sâk˜dFð©“çS&"b1ó{ödÄöyÃd—‚KºylÝ÷ÐNÛ¥=1Q (W£GˆC4â­Ât&)Òâµ øõÒfUäœ;žžÚ„˜°Øz¼0n+<Ïkœ`„Úq‚¢áí†Ê¬ww©³%1Šœ¸ß§É”ÈØ$îõ%3’Ú½Ø;YóÜÃð­êYIàÌyïXnw; 1,tI™°ÐA1,u'7v‚)·¥É~ÝÁùÝ¢T9®'9ž÷æ)5ÙcùÄdǹåΚöÆP¶°òÆßIzìÚ-¦*Ikl¡KžŒÚà%ðZc*—ïc©ø’·xN–Kb°îö´dH€®çÝî‘É…¿|É5#itZΠŽãÅž¤Ê¡2úu€8÷Î<†²ùËÅ ñ|’Áÿ–W±¿•A +M +E;ýbŸÄIêgeÄHœ!ON+'y²IÀÉ“ ȥث¥"áõÏù·9Pò¦¼CÕv/†â’©²•À õPg ¨¼åÄP. ¡ÎØ—rîÎïGˆ›'#´µâçJóWêÒÇM€ Ç5Ò]7´Ä±’,iw%'hX«¿"5!‚c)Ä{Amc…z[Á¥¥¶«úÎA—$•ßcµUž½´@_n–“PÇMÀ„ Os;aæªïÝ¢›õËÁ ßPuZçLÊQÌ‹Ú49ðα‡ÂíôyVË¡û&i²±ðKTIÔd'©63›¿‘*ŤÝìwŠkÆhGyg©3i›ï³ÔÄÍ3f«i×9=:Zà2Uúw¶FG–w³¡Wɼˆ†©¸ÝÝ0Ú–«–Ð `­\ óMêdT‹ÀNš“œVx>-l³ó[ïË«FŸq K ip'os+zgCU$Ñ“ÒøR%=§—(êÿË莗³£f*E=Æ^ÑŒhˆä“žËÖƾ’J¦0ÃÊò;_ªÃú+Õ¯—:eì,ëqŠ­±cìé£æÝ–k† >ºµ… +Dãšb¿š­C\åí#×67iqnÈ2gºðoY¶µìD¡:›Ö®—Ôts¿]f K¿g¼RýÝ”Æf—ÓB=Š—ª'ö˾秾=“_ílµ+²>ñÅPÞd|¼àWàçSÏÁ¯{|ê¼Á¯S 9Õ¶}1ÙmGKüÔRÛ­'æÛwe=V£Ñhue]NrüÚµZ›+8ž¨–zÌ™ÝÁõìIñDt«g?=Î0oÚÈ6b¼Ñ ÌU3w‹n¨H©Êh3Ÿ!}æÌé Ó6ÆÉ~ê¤ù2÷þè½"­ÞŽÆgOiUäDÏÀó¿Tçõ¤sf²Q—ßã[Y×0Xw6•¡+]›±2MgOöœÚL{N:œ²èK5©<~˜ÁªùÉúÜ\†±T×ôþFKË­z@4¥.‹µœvÆCr–&/˜ø0•`}éÒ-¸"*Ke[Û‡‹;ýÍΠOz{na¡×T€bÝRáSAêo,.³MÝmVID}°­e‘ñ¸Ûœ·*£Þn]ÏÑŒ“<1lP|´OœYPVó¤Þ©"±®ñ$*T]o¥.ï85dá¬0&/·@5·ç½êF-ƒ†j°]Ÿz:±ôµîòTEÙ×\L¨–"9»}è¦ÇȨ£—²,¹Öo$ˆ°ÀðÅH`mTìÄÅ+• <ÔuQa>URÄ¿‡XvæÓqgT¦¾=œ~R)SUéRP~cì\#«ßUzu•ž*oºÉ±›M•`‰y_6Ÿ¨d¬nìé}Ö}]Ùä¨CFîj¿Cåùk,Ý–¸º¾ ¦z²‰PUma¹ã>-b½A ÷-€ç}êð±½Dç}¾,ýÕЩ°¯â³@•®ßq½ÔŽX.Užï`a5-ñã‹ñnáBwWBåà5æå»¯¾“á;ÛÕ³Ë×àÔØ/RÏÞÄUQ¶¨¸¹>­ô]|ÓÄ6×´s´PI’ +Ñqb»Óþ?œŸ–¾›ê4*RuÉÊ ¤7¿„ ±V–‰+?ç”3ÃFþù#³>F€„G_iwW/IEL~gžŸÆÍ˜J 9tÓ¾øXâä•Õ`Ùb*.úÒ²©{ÛUÂç¤ÕuK·ŒqÔIr˜:tg©R›©‚.ªŒ®*ÝÞÉýŽm´‚z¸¸´Ñ¡¸n*ùÿ>õiî ðà)>~¶¡×\.¨àcqÜ÷íwh¢n¼õ;›–\U±žcávu×aô:« ±r7uÐÞVÐ †bÐùný)/ªŠ—Ìê›Z÷ ƓӾnM%*%·²Gi㘊 õÌÊNÒË™äú­<Ñr4MÄnΠ4yL•ÕËsÍÎ2ur¥Ðó.W׺µpqú¼ðÁ,¶9êëªr\Ik(3©ª}@¨“Ãû Õàh%µ–PÅ÷ +¯Îƒ™L¥LæZœ}ø¬tà>•Ôê©gHª¸.s+ÊrˆúÅ„@ @Ä¡$ä(W…õõo÷®X ‡½X'm©>ìœ:òŠ‹b”Ñ|—ñ™ºn݆٠öð_µüïCä¼¢ˆÎs¡yJ± inK¨7 ÑZ$‹©Ox{<”O¸¯‡]ô–½Ë6<Å-š€¾t%:ÅRÍs·V[÷2eõ.b™¥8lç± cä+ +uå#‹Gžv-6÷ê=A1°¬^‹]ñ=[ÁJ…¼ÌÐÛòk„Jå(åÒGßuÕäIƒYRÔ$×åH@«œÄ€E™•xÂÙMQ3ƒ!-eÖªH®EÓMåçÔä&…4È”…8]YÌü1M÷Î:„¥s,””}×<2`&êc7æ”*…ˆÒÛ?Óh^6Õ¬†]+Ë1üûz-_—¯ zHÛk(y*Yº…ÇkO›rôÇòîР0ÓŽè +ã4î[í/Û*5İUÍö‘Ü>sÛÊN…ÑÅú2âˆhïtR%Úe‘íì_¨,Ú…?¦¹?[%èféf{g)­êŠPÒÐÈó¤Ën}:M òHª±#ššb¶(M~ZCèëÑôFì‡â°ÕïRÆÔšô¶€…°/Åq^Yñù(TØÛ+xÓÝoXwª…©¥ÑÞÓy/ÔRk,ºãÀ±¡·Äóû¤[¾Á›Ó¬õ†»æ¹XÁ¥–íóå‰0wŠz2/‹Ù,¨è€‚Tx_¾Uàc]ÍÈóòÉЉ-ãéóÏ[>÷æ$±Mè©Ô$òÅ(2ÑêçõŽç?'—ù™<þîŽr÷*¯<¦¥Nžƒ +œ•øöZæWÿ=˜÷z-&ËÛÐ_¥«.Ö»µtëíNUE!=9ü¹Êêj‹çü‰ÁS·Ñ–5gÊ#ÔÕ cÍÍ¡ŸÔ©XgQN¥ÐBYoœ>]9•âÔ¥ÓŽùZqÿd·ª©‘Øhò¿Md‚_’uÝE»¾y¤î¡œ"ƒ¦Dã ŠÈÓ)Æ‘ª>”Ïzáž !ó¦è’qB4ÊùÖ iA.ª¨ßM[ÿµî´–ª‹\C¼7–¥0 d_»މ@銋ìÝ”G°˜ 4—1 ˜N¾ð-ŠDçn¨“’',YdY®N8¡oî›Á¼§æÂT7ñ—½%Bu·¦}Œj=jØÿùÏ?˜ø<6±õù„éõïÿ²W‡›#î¢KB[ñO )v®\xrÎ ñ÷œÈò`!öñ¾½༛Y"a)¡§DA̵£^C±S+5¦ „ ö+È 1&ÕEJ³’¡(ê¢5ðÀõ¤˜(¢lh=~ÏJòÁ*)m#xð”9xÞ¾<ní_bÝÍ{`Õ6zåÊQ@õÚ1^+ˆ6+ñŸ“Û·+gŠ•ð»ì†{¡è:Ür¹ t$ŇPdÉÂ×±Uz%./èu©!Œ$ Ý‚HÎ<±s¨áQ çÞMx!Qrå}ó¤ËëäE1Ü&DWK{ºfìw2{ËÛö™ð‡=Wþ†­¹Ò D.ÎPâ(ð !s;fém’²gŠPgpúNÃ?º}/ÿ}É!”Üɘ;oV®$]í5¸'SH²`lrÙK™jðèÒ†â*Á!Š›4DÉ‹÷ 6W¶B:Ä‘ŠÀ>QP%î~´ÖPükùí¾Ýg—ø÷Cajv¼ô¯=»÷N«Ùˉ+ ¡#üû §Ñ!fårGPhšyº#9DzTªÌ•èV´Z,ÜæD +óBVÌnðì«2Oÿ8 ¤àl‡0•ü‡Ýž'¾Í <+}‹7ÄxÞÏ<ŽÈuÖ9î“|³N)7 ¯5'ºù‚éý˜YX‡œñ,E9IæP$.‡ä¹ßJŸÈší/®ð‡ïÉ1ô¬|‘éi”„æwÇa€ùLÅÌú‹)T¿}'Z<ò’¾•;M‰&úþôÍ í~ÿ±•+/dà÷É\(ò¡³ã‹(ôòYíæ:´Ï÷™÷äo ¾çôõ“PÕþvâPf;b1¡êûÆ—£DéÄ>HÜn蟔~"ò‚“'$Í3Ìë¿ÎïýÅÑ0>ˆ&'a 9ÑÅ‹3ÓïH¨Â8ÒG¶ ýå3¦Ccû²Iýå^Ïýî‰TöBJö½hݸ׿ã!Øâ?mLDÓ‰3/êÄl—DP¼SƒˆÃ±1n\ж¡?§ØaŒ[0MÎÃÆ@´Ì™(íµò}ÝdQšÒ5T~ü%ïŒyÝaà”»Ÿíf´xÞ;7w‡ qIì3o—ó½T"o» ï[»í͑ۢqÓa*¯ò'*e7heˆ‡lÓñà©\ˆ0½ñ¹q¨kM=ËÓÄáÕþø¹+àë…Œ^Sƒ­¾ŽëH~½[!%/óG$‚G5àµÑÏ#'^Ž=Í`¶¼¹:B…B¹5Zd¹]/sÚíX_î6¼iàÕ²JòF`!­EV©$?[ϧ§tçJˆµOy¹hv¸”FJb2¤„çÓ‚´ò¢gÆ2ðUh!Ç?ˆ’˜ð|¢óDouˆàiõr.Õèn ú Yz¹ò½Ù Ù°›}и6ï¹™FuÍ™Ošè­X_#àñǼm ºÉ÷I}zi¢}ÎP‚ÊnoàÉkð—ÕB¾[Bý^óȯ϶YV’/ÏŽgŠÑož¢Šþ•h*7¤ÏŸ‰¨ç½ßDÃt´Ý2&2@~ ³Ý«¿‰v¼ÿvþt¢a6à° ,$ýŸyv\Ϩþæ šÝùÍ3L†h¿ü›g€˜Êì7ÑÍÎožaÚÄXõ›f`P¨ç7Í0¬ª”ê4ƒZ¢ß4cíþN3öð•—êÀç5Ë£@ÊìseÇP öШXkÌ•Pí1@¨ÙŽ_fygNÿqÃÖ·Râô÷“ UäΙÿxKI¨¯„ áÔv­™6¢Ú>Ï„¼y•¦}æÁþÊ(šÝÜÅŽ´5â²³lŒ }ÇU5l˜®Œr}QP‰ +¶htø¤²lŒîã‡üí3(¹•ž«}ä…"MˆbÐFUî(Z··ß2 ¢®?Žz(•Q̽R kr;ò¤¡žu²}ˆÌ/UÑÉ3+Žöíoû¤P¥Ó†ÖÊÏ(~•ùÑÅ +*b!!•X¹xó*(­Y¯gÝ΄Fè‚©S…¢¡!Ô\¹ÉúL/£ù$ÌsÒ_Ûsõ‘ÛVú‘WråzÈ$ÛoCdsçEï†*Oé‡ò_R£éž}úAˆ­ŒW5Y}æ]Ù|`¿7ìPêtÃÒå€W2P÷@Èç¸fÛ}Ï5K]t‘ý"!è‹€Þ튡ÇE¦²ÉëÝÂUO¼=Ìî[yŽ‘Sfå•ìÐJSB­DÊÉÀ÷B¢ØxSüÁ÷ã^aË_ιWæA¥´‘`„ü:,=_:Yf 6mÌíÔÇ‹ž?Üp¬1aÁ¿|ÇÄ5T<ÏšbûæÂ™Ð»Ùzü˜™Äá®9ÇDúr(rË9¥G¯Î‰‡­|¥b`™#5DŒX÷Û­=ßyoè1S[7Y‡5´AžÍ‘b/'ÆÓÕ9àÉ•hòAÎ{þÏu™\Ùrä0t/+dAŸ˜;ä„6òÛdY¿vUx‘1pÀú¥—-‹ƒe̯°k=>®Î ;7:o° –ˆ…0Vœß+÷KûW®¾ZùÀ±ìô5GÍWŠþ + ÅË –Ÿ¿³¶˜—²×Æ/©Ìl îaï™5K˜_»åŒwí¬V\ƒÇh0\æl¶²Ÿú5üiÇ ÈË DOî9=‘­¢†]¨bQ¿ž¼ÝÁQÇ·r7Ëdq%Øš]³Œ|÷C9+˜ŽïæH3lœ› ]í˜"ƒT¶0‚U 2³U »i`­tzÜ"JijÖ¾6+ÆY…jÉëŒm¾³(NÉC,j`UÑ=°:†ªÎ8¸oÅT d i-ñ2`M™i÷,{à8«¦xL›ùq8)Õ¾…² +bi§Íä«Ú†?z”’E%µ4PWH‰Cuí‰Ì(7ÞyøÊµzX”Gš °¬X +8Hߥ>÷ExÒ”¡#žZì^ê3¼p‡ƒûÄAë¶:ýJ»$8ú០òuý‘Ñ‹€Sò-!þ<ÌõºÀUŽ8qP+À3]Ä`äóÏ9'›%åìîÏjmü\ÂO¢Ï/åí®ô~ð‡e’«}ŸÏQ|Ïl{Á”ù¹Ä=üëÑk\³7‘Š3-³‹× ¼™Â¾¯÷g‹¹x'-]»£´Ó]ŸÙf|ž†}ËføA™4鼃fK{=íî%­=Ùx+KÏÓ‡y2 GK#ÞGÄ-ÍlÃûÍáïkºÝGzs\ð±äϬUr¾ÿl5ÀÖ·šf¢è´ø{ú»Ó4b•߈ëlvZ7Cÿ«Ó vû³Ó4 +¯¯Ó˜gõrý: üÕi]üý»Óu£í<¿; °Ö?;­—ñ»ÓëýÝiÌêüì4ÀÞ~wZ§ÞªÓÿ×iÝF¼ý3gÿþõÏ_­ãåÄü{ˆØ×ßÿ9Äìa˜ÜŽ• `3©xÞ#P4càV?àL×Iã2¹ÄÄœ;““}ø¬$°½…\ô&Vx’À2\9ÖVíš š[¹æQ¬LXÝÀéã a”aýޏe•û7°5÷E®cÄÙŸ› ­ƒVú·ŽÄ¸î^8ì˜9[ßÇÇn>!¦o¥ÜÀº½ì–L‘ ßù®.¿/ðG( Ð0l­òœnà¸_Θ¨|K3ÁC¨Wdz¨JË£ K$(°Ÿj` cÔùÊ`/»%ûƒ±wp–oå}UÔ¤â𔋑#FQ¬¸Ä-'nÒÇø•ÈãÀ°-‹8õg5Âî²;3y¯¥’Ž_¢Ta¤áuõö@Åè +Ä¿¾j¥î\ þȽ#àh «+ÃÕ~ Ó °uâ-±çÜ@Àó,~rÛÂÅìçPã*¦áE“+7ƒˆŸn‚¦ädkž*¯87 ú{k"šÎš‰o¨Npk¾Ù²ÌÏO +\öœ*ž¹g—“¤=JÄ:XèÓ¸Ò¢Ð8ïÈŒ+aUC@"4ã Y Rˆ&æË‡å°×–îò묱e듯+ÛÛb!~ <.^Éí @/Kól4U Cá‰âÒxeŸú#J†©sÛç”fT&Ѻ¶ªê?8“íaª™- Xd©…‘(ƒtKº&H‘" Vð‘óM‘ÛØö«a(‡¾Ü§¼2bÈ Û@¦¹óÀ²h[yE^L£–íªˆÓÍÁycå,œo`¯­È [¹ûy`íçøÊõæFbmÝ].úa\™L +äãö@N©2%”ñÀ!chÃoÇ–”„çØóµRrwJÇW²Õª”¤2t§3qÓMÄ\Ê/ã^¬„¸¸²*¡wŸ±dÕ>ÇÜzyަ Q\e´À:ï±üÞù| ²DU¨^Y[Ң݊¸ÑòçP“ZHâ\ÿÚÖVÛ@œù®< ‘öùFêv€²ùd¸¯n¢^íä%À)MPW×'¾» %uϹ j\TdMpTãF…oå8zQû=}sO65JbìÃO¥ŽÄf”á v˜Æ{¸´¸ºô¯ +ÔˆÕ<ËY“a6£Y–ÌŠHoÑ$½R&ÈaŸLz›k=>Ü(mkãS¢;0^ÃNÒ†ö¦TUG%—ÏB½HuSä¤DÒé€múI¢Ë}µYúóQE”»—éO]SeW˹T±gc¤NwlÅ ÆX.ª«'8´%¿çd·¬ê¦‡K®Üm¹ü¾”SJÙÇÎoõ[¨+w¼×Ïø×þ@F’ãn«{Bß®òCE– Œåþ¦œ\Ùp¬æ„Ê)5Áé^‘¹)‰úº—Á˜ßoå>Û}X™¶ükê ¯Iß¹ »s'Ö¯›Ê½/° ÷½ŒÜ²N7ªK’œ ¬À5ZF£·©ef€M¢Þ7ÇXÔéd·¾5_Ãcšûn U®äOwè$(÷$+Îg’ŽñÀµg‚Ô™„˜äžæüÌõ׬LÞ¬HD>2ËÕf†Ç®ý9bz3{Š<È¡LXïM©êŸYl@þy »¶‚(âdz¬dðSLêà¹q5ï9ÕödŸ=ÉÙÓö„ˆo2)nç¼´v¬¤UÙKT¸‚•Ñ"Um—á(@ß‘e¸˜ð’^&ä›äL Ÿ«v‚3·²¾%-1”GX¿Ï(ˆ;l3·´÷lÍUI…Èg7ðB#Ùõ +$.mÕ”‹uUĨç íåV¯¢º’¹$ìª.¥ªŽÈeÙíóSw†¸ndH?†-„Û£Là¨XHÔDšªqº;’Îx²Rc'žZç3\ª£m¢v%@©½(ƒb$ñm5êÍ;¶’îYÙMbtŠ’ŸM‰5ë†ÝÓ¢×(¢c +Ž(šeÛõŽàÂK ísâç‡ãyŠÍz)ÂðQÍdI 5Ú8ç*ÛqG8®®Y@ ÿÅž\ŽÓÀ§KrqE.°ÎRÒáWºÌkìp­ŸŽÄÛûžôl,Dem 'ž0›·L<¦â!Å5i§/b¿hH³.C©J„úêmÇõ#.`alí‘f¯.ÎlÛW+Ò0A¤½Jjšž,æ³_1ŠçqŒá¢i²ÑØ„# sK?ä‹g@ó¾ëw]ýŒ\fý5Ϫ욾eqßuŒ‚ŽXž“§Yï1UöÀTv‚ùoµ™¡¼%‘ÐuS©3ŠçF<Ç&3®%† vŒÙlô-†b–½oå·ð†al1ú »&Ÿˆ‚"ô=0”ª[«ùàç´!lX¨c$FXÛ¯Õ¹´ÈŸBÝÌžŽ…"NL¦BœN€HâÈÍè„ +l®V÷ÂoNAT}¿•*àÏÆÂ¼ù2ÏIìŽS鼌©¾É‹;ÈÆCÂŒw¯'æ-as‡ÒÓ2ž aĹò—{•-/·Wž=Ñe‘¥“ž*jh˜»Þ^y->¥,¢Bé.,Ù6\ƒà B*Âì¹æ‚á§o7fÜ‚:÷ÑEÐ3·Cƒw,ĬM˜=>¥.…©¦ñ«qDˆ»¡Å±7¨s1‹í4‡®À&í£-O`8áˆ}Œ&h¢¡çáöt&»àÇn¹íÀ¨óä˜#€îzR.£Cn§VòecmÇËGMQ>:‚Á‡Ók€Žvº4ìF¼{ýôë +krgrÀ`ø,7_`hˆùº ÷Àö<æ5ŠY‰ñdÛ×1px,`ŠÀÛE˜y.UAøÛ_Ëu >Ë›sgB]s"EÛòˆ¡iÆ{t„< +Û.SÜ‘JÊo™˜Ìéûv­ëÓ©abO3È‚k€~$Ï@“ºÓ.mU,ó]<ޏ‰] ÚëñàºÙZNfèÐÉSM¦DØÚãfÄö|¦¢¶f«h™ ù'·;ª8Ñ/òXïƒÚ»`ÞªTdã¬?4P¦»:xϲ8ðŸ‹C³½³¤ºÓ¯ìRŒ[©î€Ñò71Tïž PÓT›2uWA!’³0»Â(øøôô–z2¸{C/AnJÏUœ÷BCqk{V«¤œ=j2kûzùºœ·™—E$âT˜äetwºy"µVß"/,ÃÝՎˆû­5~ë^ø2 hhH“¯MlµºÙuåfǾuÞ +oÞí[wc]>·ca%;3ì÷i8Ä>¾gıìpeL“·01¼°RÝVê.ïÞ:uz¥€áÞ¾LÍ0\£÷ïÛ.A6¶Õ·Í§9Ó^LÃÀç³ýê%g˜µc•?wÿzG}h/?„+jÕ²öšú¬²˜}…½î»ÿ»Ë™G›;?Æ“Fª’óÓÝOņŋŸ5NÑÖíþô¢ÞDNzÑZû%C¡zKK2ÎWf“Õß®>îï\aë¶‘}ls_;`²Yĸ½P4vœ^ÄHqùïV,ƒàûl$“Qd t„ñã)Æ»£ù´EÕ·Tª¼šè»ö1cLe$lFT>¶ðBNŒï8Ä ‹Žð…æÙ®«aÂÍgÄÍØÛAxÛ‡ÉÛßÇŒ´ƒOˆc\zÝèšY»Kl¦O$&uΫ̤côàÍT]¹ £×£á,¦0B¯‚Ç„Bu`8.˂畩+M¬âž®À`øƒÌ¹å‘<îâ<{²>`‹ñò«eY0è Î%i’$sÜth{óýö£‚Sß aÔ^K×€ùŠo©Œ“Žƒ´ls—„bJ +ÛÖz®Ã$6–Ý0:pÂóo±J;½Ô”… ,eY˜Þ¸úö•åêpfqw.{È£A¿Ô@…0¿Ú£\".­ÅÕxœž¸Úu¨Ï™Ð¦æ={á(rî’9UFáË<¾ ,R–ƶÙ%½P>¾v¬éÛa-—Í=#ø­§wV)y1*FÐ]:ò¿½§??¸/*|ÇJŸLN¶k«·ÜïyŽÝýYÙ}øÇ—1ÏXŽMú-¬ákTÀfto—3¾q§y¶ŽÝ5ž¬×¼ÕÂRäÈÒ†¯›Îì9ÚhòëpŒv·3.§}#Ý`”*×Ñ‘Ø ±£lÞƒQ¡ù·´Õ¹ã g%ò½sô®IH¸¤ëg`Èq–ƒGk4´9œ\Qèš‚ŽÌ!Éïg–±ÛÉuƒ+ïm¾ÝÀ¼|µ³ôjTÃNoÏ6©$¯Kh¡4Û©»Ÿ + +‰°T!èݼ§xtä°„º_—Hº>: µ0y¿Tè¿ÿüçŸa²>(êõÿýù_`èóqŒwÐbÁ–Àæa$ˆ~wq?»@ºß·lû¯•Ί×u†ˆ ¯Ø“ ®>Gÿ_ìÙÍæÊÜŠ2^ gɨ@&Õ÷Æßé£ßʹceºåM(·ßÅ!ï·r)x&.ç‹cÓ¤ë~Ÿ#†û/xXÀAìí÷9|àhg|ài±g›ï|©[×÷<7¬A$yFðr+ß¹9hjÈz¸ÕýF¸ˆ:‡€"IgÄ÷W)öUØs1¥ÛìuI …Â,ª˜¼ç‹dÀ·hb#iÄé»°+;$Œ ö®4–Î; [¤RØàƒoá‘aÔ¬ú¢U|ýú1}¬L|ÞNóÀ›õiºDIðÎ~uÐ@Ä[¿Äý g~+exrpßžÏ÷ß{Êw;ØÆ©úõjo¢L°,°¿Ž<á™8¥Aú»¿¯ïã—¨ µ³–Ÿƒ¾ÿÀ)Û&ëÀ\SE„Qˆˆ:V5ø|’ñÀd|õòd«¶3³¡<Ù›µoãѶùëTŒìˆdß÷Öä¶tþ@Œ³ïI{íÚÓ&¯é ¨ +nñ§{«k¢i¯(Ò· 3í`;=VŽ—aÒaSŽÂ#š¯@„+2·÷° 6ŒØa”]`E†¥+Á¥±MØZ™8úIî „R­áQB<­>Æþ,O;„_§ðóóxho-¤ÚÍ#Gší%ØÞŒâ‚²w­lr¤B2ŽÑbO¯«*ä¡f&ZÈ‹¯‡l*< 2ôn§ ¦)Ià˦ÔäzWQ½Àî +Fÿ-Õm€HùệvðFGßÛ+Hˆãyägïh +×üè;oÿ-<Ž=îø-Ä ø–ïï-ŸÆVQÔ˾ [=¬õæw—Y=É—5Ê!ùñ¼ñKŠ@DŠc~•Jè1(7YX)·ã§@ÖþÇIñ¦Úù^qÄŽç°ï½UB)‚ýUF?ö/ù3æ7ÇfoUÒHJ(ßYµa÷AÀ…ëíoÃ{BSHóûV>qðU.”–CšmT7bºFHñX¿:Çù‡À®þ]gPkÚ=_õ{IÝ·}ç ¹t÷k$ îرÿ@óÃÞà·Òèw!÷ë!s~E²Za¾òwK´®n‰ê[Ù^xµÖïפÐÏ +³5σm‹¯ ÁüRl¹å>ß–ýÈA ¼ã~àvA”ýÃÁ~Ï;ƒ ãþ»ÒQfÁ\™haw¯Fpx1À±bú‹"T¾4óç®wýœ¹Ë®xuß3üþÏu™Ù‘1ô.+Ú‚ î‹rb.òÿ:¹°sëÆ'‹d.H û –ìp¤ÇÊ•gj° „/ßʶ´F¯d ÌJÎòQ„eÈ”éJ~Ú§¹n†0Ëã½üJx×{8$‡™Ë5%”À­’:±„œÍ’(èe½Ó¯[ÏÚK˜è@Î×w8#æ;ß#™Y[ؘý‘0³ÃöbÚãà&Zxî2 l7†£dÉ”bÔ3©«¿üâ|í’[ œ…PÐIþ×ÔÓZµ‹Ë¿Ê.WÚÔ×ã„×°íRüo ¡é &§­¼òC×7ŒÇRq ÝâÕ+ÂËÖ‘ˆñìe–Uå-×®ê~ÀSfvƒµÛÙ•®|ãrµo6DlbW#BXKU¦öÖ6p–”+\MÄ>̘¦ªÈ™áŸtËià•L1°Ô\IXWÜh•ÔEtƒâ6Dªã‰¥ZK¼rŒT6CÃÆ@ PŠ¥9¸½Mþ¤Ûš¤7½Á¢1ìžÒÍÏÖ jÁ²¶×s¦äš*/å4åJ0ÓÔ\hÈj‹ô\ɬšV… Öš +¹P[vÌF^=á WZ-¤Çs&ûk*Oÿ GïÞµ•ç#FóÒD·ìOŸïeÛ;‡Jþ4Û½3W6’i§·WšrÓߎð|Ûi»b—/{¿Ó)‹á4!&ÿV6ãçÛÖ~æ¢.ç8xí¼ƒJ)Ä2Ÿ‡¢Õ7IoYïE„܈¯×÷ a§LˆÿEC2^ì +Ϧ+"æË)·õûR¡p93=ûËO»ÎíwÞú2¹H[Ÿ»¿œ_bEu}Õqœ]c†üûë÷¯³h¬"Ù{—ae•¼‰ f¯ %‡ÐF†íRf¾õªð¤\]ZLP}Âúì7â©ïÏ÷ /ž˜Æ-LÒcDÜ‹´£4Õ.'sÆ›ÂÈlÍÜ2¤š°‰><2‡(<*ï3¨òm{{sÝ¡’Zâ!0*/뇨¶®¸ô&6®]>šoÑÂŽAì͆õûõhð>åãÀöL~«"ƒJó|y2ÜÁ„°£ÞéaÈ¢î7î¶w^…‘—³ÇçÚ„Æ+ÎôÍ&ᾕ"l emìˆê7¦q,õ†'h(§v(óÍÔ  OšõˆQýÂ’EšÓzY+04âµÛ1ØMZdÈJ(va:ÀÖ‘ÎUÜ—i££9( <™s¨)ðcË#->GùV+(e_Ç$Cl/•ç|Ùd€Ž %·áÐÙzy´cð†WÔ¥A«cpø´J®içØ„|ªU7߃@ »÷8ƒ°mï{ÆÞAX†5U3IqlÆWï<âËP÷×:¾:UÈ»ÙâÝgãMÛ9+×Õn¼À´Èuh}=B’ç®<ÙÝ\·¼‰¢(ás§gG¬1Õ=¸ wIÜ¡SeaÊŽSçìNxšqãÕÉ™0Ÿ'ìÖ•Eiæ¶ã{ï2ReJ·À®¬И7ë1v [D`ÈñmŸC$Ô¨F™QþYÓÒ‘S3êâÏ5¶JèÚýÆõaö¦Ü—%VC*fhÿk†²0öBBwù ¬%˽Ï‚ Ÿ—ŠÏuýAcåUëÇg#˜Ø°iFŠ£´Qp~½ÎDŠçžµüXr|ãÊ ©b×ëP^îeÆ_— "ˆÀfóu˜Ñ·N/vš.ïåC™â}O»Ã¥8ß: +Â0qß[w|o&\XŸ.‡ltV«c(é|ÛÙ.i¦ ñÀºKIÄXÍXIû¸Î;'ÏÝ®çl/R݃£æ+äÌ £Zr'Õ²\˜Öñ24ývŒ°•‘jÝ CÌœùN9ÜZVÊ å‹ÚË*;Ó¥Fsͬ2ÙSÜ«þ¿]™{%ßëR=Õ’±}v,\™—ku«º9¥í8ƒiªŽ_Tèã™KF½ß ²£fÆT»AhßmßC=­èå5EÎSz¯dßνT¶[\Ö“‹•ÊV·Ö¤F"4…õÙJœA8U¶[r}&5ZÏ#ÐjÝIR­ÛªrË­*Gœp¦IŽ’1³ç÷ŠñÊ¡C[ˆï6l¡°“D‡±þ!£’:%vyZÙñ=æ¤*ôò´ûèñZ5^ååäÄ@ÀTaMu2|µØ^Ÿ!eŒ[w(åãŽZ^ÌÇ¢xÚ¦ÌX;+žK1zÁPr!9‹AÔ^–7–AÆ´HÀ`t²4 WòÑ(¶ŽÊ«æ†~£ óX®Rì*â¡6Y‹…¬Cïǘ)ò¹ RôtH„±›öVãñPËüXkÃTn“D…»BÔTñ„0ö„ø)’ÝÂî^¡¥D Û±%bµ®í½±Œ|÷îGœËîQë+}ŒD¢}ŽÂH_Ä—‹}f‘§1K,0Ñ‚…ïR"éL +«¸c×xAa®s…²­U‚Ié £CQ7ÓiJ¥êÁ±©±tpêy>[Gî½ PÔ¸ÅkÕRjï!‰ªíE'Tã{,«fžXâ{×FŽ À™‚oZh¦1hê°(LìöaÎDy†g˜@¿úÈJctL²™ªû\PgШ™t2CW›¨Ç™˜28µ¡–ç‚æ±u•®ÌuZ‚G ‘Ï l‹a[ÜW¡?¯ÑÒ+̳gÍÐWÁSÈõ’–vÓÞîÌW˜9!OH´éF¯’l uôœ+ÓE…„Ñ7òÃ<2b-´=—Â-V#õ“K-u¶È„|„g»!˜†Z8J¸ù0¹³…[‚«MIÚ¾¦ ºÅç¢ýþE)s·¤I¤üqpõên£S¢Ín Ä>ÓdÖg0&w‚dž)7lªjȃ•`¥L $Êo{áżýašü€è,ëE>IÜêç¶í4|ùV¢ >pl6wFn{zçßJÆ£@”ß\Þ޶¨ò]éúJîþ]~L;ˆ7ž÷ʪVØÊn¤ ,ýÎ ?ööJàØãEu×û¶îáé|yžÌ +wÕ5…Q*ïFY +Sx\]ãd¨³{ͧ# ßq`Á9ò“»¡' ì>4 4>"º„0 ƒ@z5ƒ„‚¦™ñý­ä½@‹õùF”lµc.3Á+n5°›¹¸Òâñ:=¯Ž+ØJ-eˆî» +|Cûuƒøç|ëÔm€ÿq]&IÝ Ýç0)ÏÃ9r‰lrÿmžÀð;Ùu©ýmŒA•‡Ê•}xàLR·çÙÒ øª ¨Xµ‹-cÏ] iñºŒ Ü pŸµ3ÌÇ@´6B´`uÇÎIÎÀ)ç6Äw3»êi¶’NÌ®$³þ9­š=°*en ”/+;!°ÏžÍF«¶\ÙÌšuØçÌG™ºN7u«ŒÀYa Y²²Û¼Õ>¯ýæžD´,gFðØa×,§æžé°8Ë3G<ÙŸòsv:á¾¢™’Ãew/í”ûÀÓ¬i«ñ@hùÇ˧Ùü½œ=öÄÜl?¥[Äx×ãà=±’úò7bˆ½õ]#¨«eœb"‰«Çž­?󪎙w‹eË…¼Ðtð”X'Oi÷{8Èsžô| °I§õÀJü5hYè¬[ÕîÕE‚W,Ükø¹•z`½ž ²öÊËhs@|P‚8 s!éq~¨-ÏçÞ^œ ±d·•°HmöêW‡ÒG®Di®ukí’¼³ ó} ·\#$ŒBž8L#ž¤Öoå6°[^bÇîL¡­yL}\:V3£,ÇI®Ï›¡OÓZè?oÞ|^ ©®}9šÅv3#ÎÕEõbÝê³£ç}n;H·ùBÖ0ùåä[¶b2Rhº‘¯®9Jàªó+ê’ñé îÜ”­RIqúÖ]ÄÆ¸¹òî·c{^ +ÖÁX—[ +Øád·'Œ’Õ,cˆÝe¹Í ”¥ˆ‰É=©9çÙ;ÁR¿²:õìÛM(8Àµle¯m~Ø´Ã{/óÛr¶ãŽäÌ›`s÷Ð×wó~]Ó©Ì–—ä+÷MðM^üºÎ㳈ѡÑÜ`ͯ©« œ@Y¾Hð|;®0zŠåo>О)£|àY»û›Oøèü¿Ü[>#jͳ2Ì=eË!Œ,XÆ$Oðf[.:Ðö$Êž s€íÉx¤P­Äóòâ×Üáݵ%8dËf‘s 6F7 u%[²­ž0Æj릡ˆ8K<UJH€½ï_ªX¶rÔ0S¥æÏùBÒ4&pþìI¶}Î(Û>BýL›*G²ÂœÇNÇÒå³Ó€Ã®ÉæA‹&&Ãòñ®ø] f+JŽtk6ªñ2´/ôXqü±roÑ@¸)I¡ÉÕ25fmS5šhÏúzµ]M•Ì­¬¯KIÛç2‡¡ê°œÆ¿Ê0B4E:ÝN§ëRO±'%šŽQ´eˆu½Þi’¾::w rž2ãk¨ûÊ{Fê<ÁÙž$õ„¡  ®.þŒ•ëHŒ ŒâÂe`ÚªƒcÅʃ[¾çÝé\è1_YKÆI_X I]ûÜмž7r( +~×#ü]+õ% «-^Ã’‰K×Öõ[ '…íÌ=vú ÁrDBˆ,NÈá3ª?$”Þr‹AU; ãjËK‹çOŠ\M+B:ºÆÑ›Ò²S£Q«f×áÅG‚÷ë¼NN‘¼Y÷ÀO&ÈñBº;"G®–·~.ì*ÒÓ \Ü;Vbñò©Ìœº¤Z==ëÉ™`ôbŒ2•~†á?ãçcôÝBÇèß q;àýÏÊmܳ·•;vg¸Êž=Ï×ÈL³C®d’s±Ï•Û¤Ú[™7,åãGJèKÑ,²Ë¼"›Fps¯Lºq3š—OÖ­üavškç;¶b„-k’UЭ„–Úh~¥Qý⟂2ŒØžTìã{ê +gäòGÅÇCòµ¯¼õ®ˆ“‰Î…’¸q·)®t–«¨ÕÐÄõÕÁÑlé:;¾R§R\»Ñ§Ü“‚sǸìîú›… “…6;0Æ·p-ÿz·q?pºÀ©¬ïsÚÁÌÈù°vÝß¼Ñ΂¼ÏÑFyöÇÁUóèqݯ‘¾,`h4÷VßÉ}¸ãA3Ä6}ÃÖöúBó@)o>™)¢à=·o©Ïûß2Wù@XÀ×ÇçôI±\ð6Y¬ ?e§3Ö ¾;vÉë ¼¶'}r³°{ äAÖÇõš-Ü|‘¶¶ï YçCⶪ}~öÌrepp_E&¿!ñòKG„YrO¦x÷½ Že+‘øú­Üê C’ÏKLQz–+¶pÛç˜Â–!¹í80CÉ‚ÛzíàrËYª$þ`0úǽÚÇôv6?b<-tTîc* <˜àh*&¦m+ñò=ßòâyjJ‹Ï÷(çx¿ÊÞ×õ¢à«}Ý{ånï±’ÑP‚xé/qŽšžUSç ”r†ÈÖRlË[„HV™4a·Ž”Ø®&ÄF掣cQöQRwûyÇtÚ&vµ=±>'œÄìR 'ŒN¢œâ+᥈’vµ +öä!›Ÿ¾ïNË‚úJRqÞ²Ö i•÷õÄõ¾G¦YË»¦”ùY«V_’ƒÒoÛìó†ÃO»Æïf ôvñÃãÄ·Ýøœ+O‹“ýÝv¤jzÊkæS˜I°â‚±s†B­¦•!BWc墸¬Ú-‘ãM‰¯ñɱ®Âa÷oäèÝ{`·ò6–ß^ö²Ï©¬“¾½f Ä5vK:õ_®Ëä +‚¢w¢ žåÝqò¿ò%Yê1s¬±Û›T ¥«£6ÇA‘ÌK±½W“Üõ¶•'¦ìõ¬¶%äbe<Óy¢ü~³_6…”G& +ÝIŽëÊ‘d^‰ÙÎL¹\¸õÝQ7Ö„ˆóÑÖé¤Ë›e¸@oŒ³aìõeBkˆœ¨ù’Ë©”žË‘ÃGAz fuØS~2òÏ{¿éöÿ¬¸Qgù¯ƒJ÷¶ìkÖ¥ŒƒÔ?;Þ||˜OS ÄF·u"¢ºÑX¸èãŸ<óºZe…Ú€4`Åi¼fÓ§Œš¤2ðÖ–«̆O‡óó›ÕÇEVÓt Sͱ͠^—G00®P{Þ°Üj8Hkñõã $Õª%å`žQ­wk3lß ­ŒUl ]20 —Æ•:ü.xõø¤´±–ƒíÄâ8“{•5#ε‹„‚ï m>šŽµÕoû3Dû€ Oö`ì"À>|ä€lj™¬22N–ZnñKóú#›„~ü*G]éÂÎV^ËJ wÕüš«œ’t‡…í–ªûeÞ­Z¢·I<ªÔüdG§uúÅÐìa-u86ÈþŒˆr» /ï—‰ø;›/×*ÑÊÀÙ(B¼ÕÂAykì9Ë›™‡qÑÖ$¶a-<†»c›4®¼ÇÑH¦Pp‰¸šj`¬õX‡oLƺ –2צ¡èö„æR6²¬uçtDJ¤ž—˜ŽCVÊR'_<»iÔ=¥Ø71Ê5¾IÞ8LÿJpP§Uߤ{P†l +¶v›\*jN•ðrKMµpžKd +neÙª&wå7‰@¼Ef^èÞG%-Ç“ØR3†DμMø½)8f“X{ÃO6k_b$Û퓈é:÷}yµoEIiEÁqÙši:·±¡<+·¹.ØWSSF#‹S‘V!ÕºC¡F”&acØ:ì²ÄìÓ´—k™%}? M1FûÔ¹Žƒ4GöT¯êØáŸ~\^-ŽuâÆm¨kÃÍHº‰ég·é#לAd;M½¢Õ>ltùQPÊ(Á´¬”R]Ï”y ònÓ Ž¢"·3!·MŠuV!k?ÐZ; Ò˜ð RYR‹³^}(vë”ò +¦•Ô]3e(ÆVöfwÙ Æ-þ Ú¼ ¬e¶ñ%?òžaôpNU4­¢Ã×/¸4’i½i¾ ¥%”ð¹+Â[Êœ+ÚAÞgz ^ЧsmÈ U«ë)_þá +U9•ã×§awñy9ݸì¨!ûT{ŽyûGF X§`õòƒxŒnXo+@AX­u)‘ܸT  +Ö¦NœÛÁ:¾ØX†oHV:%YkùâDÅy†¯#Ÿ™«R§,{¤ukÔ£ƒ+·IÝíqGfš«– <éñ ¾Kä==gÑ\hàH_ÓáàI[„²ï㇠¢î´ø›19½T.xòŽpÉÃúqÖüßï[¬ßD©îmΑ—Þ«÷yO…x¬»Ð‘|Kø¼zi•^ŒÇ ½Ò˜/ñB€µV\ñM +oµNuÞ¿Ü +†µiýáV@Ìóª·’J¼Ö¹Z_ç—[Á°;}>ܪ™ÝnÕœT?ܪ! o2nDïê|¸µw­ëÞndmJë—[ûTûñË­€“„$·nlÕx¸µc§ñùp+`Å¡‡[Û1¥ùáV@¼~›/·btÈ…çáV,܇[Õ³û—\±4äú’«Ú‹îï󑫆íK®SuNÎK®(omN¹¢¼\<äjÂë,ü‘+Â[ µ/¹"¼]­ñC®øœ±×|É9¦oþW®€äªÎêxÈU½e  rœ§÷—\ÕðÏØeë¶®[/¹" í%WÀÌžä +84÷<äºUüÖË­[á½ÊäVµemŒ—[ñÅD¶ör+ lùq+`¼Dr«ºj÷­µ‚aãÇ[«[“KÍQ޹ iÐmk?%fyRö¬qnøéX?7=fï^œ1iëÇ…loݾ=ãõ£ºí^kr킸Vw¸«{ꣵ«1ÌÆ­Ž ÒáÅ÷¨·sàM~¦$‹v·£âcë[a¹`ÃÚ;»¡–í‚Ú4>ò‰é«ªÊ9·ºÒ ¥:ç sɰIó~ÒVI†¾ô¼HçM| / žßÍéœ`Á¶l÷‡ä +¯È¡ï»ZÑ;qàiÆô«%gy8æ+–ç“cIÅÞ‚Ûû‚³2ÔÞ°/çJ@Ò .õÈ÷Y.š„g¦äÖ+¹%rÓPÉ-Ε(B“ R7LÍ=b$ýíT;åÆ]@ªiÙôqÆöxWwÉÕ‡÷"Dë"D­¨§¡©Ô˜<÷î7‰'&3Š…Èj¤`ß–6ÛFÃdÙ'+ (gO£ªÜ1Jì|‘A!UãÌ™Óé¼£àì£ÆŽ–Ö XåÐ]BSAüc~Òm$¤ú]nIlÅ»^¯mJ? +²ßÛl uPp®=žb)5Muu'ÖÛÅ>Y÷÷¸x+û¢´KW”iDDÁR¢ª©¢Y"pVÒ¢Ù»‚Ȇ3 $Ôl$V¯g¹ÎNauG¬e¨L ¶ÙNL‡ Uô02ýD«,sœx¤FOAÙ6®Ê×hCMAjiG§á8·¤ƒãŽ ¤•[ž_ÅwN©÷dõ7Ž»!Ú –òc­Ø©o;Má.ö‰|IAlAp vmhk å^ÅnHv½®‘¦Ñ·CRÉrAäÑî“3ƒhÉ\¶¡vJ ö•#>#~]ÎAóºßÐÍ¡s|7s ‰ Vº­²ËjÂ4Ûæ¢Úº©P9Z-sŸˆ†Òm«5‘#Yë +ØfùÔÍ•lªÑø´±©)ØzÌì©ÍþÕeËa€tD‚¥øäÕvê²Æ ¹úX›£Õu['׿ŒËúi–O êf}QÔœN—ÙBŒËÅ ºnÍ3Ûç‘”N}:y.0 +ËÂgaœPº:+ýâ¹Üéî¬æ#GIw‡;_ÃAùŒeÐ/XÓâ=—ó¤k³ø.;, kûuô^>èVÄÎsF~çä‹Óͱ8·ü”5ϳV]~ú$AuÃJK KTõ‘Ev~ò5ùü3ÅŸ·¤;\ð‚œi#µF½`ø%H { v‚E€H”»M—ïá·ZIÅ$å#VÍ"ôáëZ¦îã—W)uÙ¯j"È̇Wᡲ^ÕluÔðÿòj×®™õåUÀ¶¤^Z½n• õ£—X¤¬åáUb!k·—W9ΔàÕzA®‚rü%VͤEÊyˆµë¬1÷/±ö®j'¯‚­®òûË«€ô»³eò* bWçË«]½Œ3ýÇ«]MÍž/¯þÇvÙdI®ê@x^«È ´ù±u¼%ääNjÿÓ'ŠP“>_!…,@IÎ(i­¬:Xä!ÄÊš´×­²J#~¥Z¹Ê*]¸‹¥²JË-ÆRY{Ë5˜•U[n]œ•5ª«¶Ö¨oqYX£†V—£úßÏÿ~d:M:aê¬RdÞøüþ<:µH ‹u0úÀÈÀ÷çß$‘˜ŸC뻄ôý%Ç®‡ UD‚^¹+02 !h*“‚‘˜ŸCk AgëØ–€ èé}tH5#üZkoÐ9óNn#€ <úŸê6ÀmüZ#™ë§äKÛ¿ê™Vzì` oÓIRÜmðëû£Zræˆ ÀǪ2”ÿÉT¥×òS¢Öý®nQá3t¬Öw¬@äó³fuYeŽN5|¿ä¥~ªLˆÚ’f +´ˆ½ÅÒî>fгðÜúц ÀÍ¡µ%¢Ê;anƒ Ù¾'ûD€ôD<ÚkÜ*stª(t|TܤñTœqEŒ$ëT&03ðýÑæ¬»`n­™‰º ž¥&'iU¿š ¯Ûê Cj¥·:SCýfjï ~¼ª#œ(XÚx°Ôª³¨ÐwV0 Ù¢Ÿ ;ïÔž|kÀ@èéЛqȳ`#É_ãafçâÐ6t÷Ôa•ÆqèmùHrçÁ׃1C2—¬ùqù¡§Coˇ‹_Æ !|ãà×c•ÆqèmùЪþnç DÚø“°qù¡§Coˇ‹_Â8ÌÎůç*#ŒãÐÛóÑt ZϘÏPÝÂ}W›-Åý`$ðtèíù`̇1Ÿ¡‡û.‹Ãý\‚8½Ç=¹k¯1K̪ +Âîiv®Å†"Goé± ôtè1íý¾Ç©ªt´@Âþev®É©ª45×ø@èéЛӎ¼^¤¸†[GTìû6çGË1 Céjá•ñ†$™äKÕzÊUDðµ+â Þzr>a à=”˜ô©¨õÐ!ìq¦†¾šàœ²*s¼ª#œ$ÜëY–Ô=Ú§À@P©`çêYÒÃRÏ@X½-×g¨j v®Ï@•«:Ö¡·Åáî/TÁHìfÒŽ÷ª\‚Jpèíq°®zÕÁ@P1açê*T¹ÊE6+ô¡7âÈ·¼Eû¸$qŒ* +F"ÃjPÚ‘8êÍÁHàéЛq›'ä½çAÕXÇØH$U-štš}r²Y„ë€àíU¤eŽYQ§Ò2ò’çs‰H+ÄGf¦)¤æ•9PçuB"z;UG8%ÍÝ“¥Ž®¥Ì£aàŸœ‚¨Ÿ+ïÏ[çÉ£]l>fäù×wNš[ãI¥ ãÕ§H¬WëÏ%ØHAò®ßÎUFèéЛqhЫã8%¯nðN#IR¶õ N#ûùýy^«!ÆHàfUÚ¶BaºÇ…‘Ô‡0ßµƒHvc¿’°ùjúîܯ1z:ôFROÊxçåÅåc–#ÞÙ);Šiís!–­Ñ‘ðJ «¥Ä´½×ÑS:»]Hå¼×9î÷„þaèãHi¿ØDpvHZ2ðü|¯GÞ†¹'¤êÿõ½kÐ!™vŸª§—¦†$˜(Ý%U}àr½ª{fôúŸ¹!õL^ˆã>9kc>?~%Y9RDfIz´O,ç7¶Ù„Ü‘ãù–þ>É{ö^O/‘÷µIù‘1³Ö1-¸\€úüT©­{~Œ­ùáJ0züC{͉ù¡2 +MSÓá–9w›ê F&öõzë“d½Þ ¼1ÃÊ_«ç9®7<­bAÜf=åk ÎyÜg˜\ˆžâ3L~Î&·}†qþŸ?f˜|3 í’ŠÌ6©÷¸ëžÏ¬ }ÿ-½NF"µ¢?žhgD)³Îs•x:ôf²ç¹s9J5”È+u¨z"£a’©ãýÐèÛYi·žG¬rÎM &Ï«”óU¬¤¼ò¾ë#> Q’É*õbS ç•íèS¾[gÈy;T™›ûa$i{q„©Ÿ¨ž:O×9o‡êÎÒ îJ¶c(íÎÚ5軕ŽWví#*ßk·ÏÜ,ñþ[Ñ +|Næ:†äÜÂVhîþ†òY’¶[ö,9ÆoŸ¦.EùµG—9Fw›êŒO…ù5`î£ïíIY.b$Î×ýç’ ó‰;ÅâÎZ;®)¹³‚•dÎ㩽æÇ‡ÄüÐÛ, +ÍŒ»xÜÆ`™s·©Î`j°0+ÏN“"œº´A"æº,H0%ȧ‰À*º:%g,%Óp©û4 Â&C߬ÞvLÃ@t¶KÚÉyç£Á‡rÏW ­8 3\B‰³9¹u†8‹ì’–•çJaoÅ:6‹:K?L}‹‰um@ÎÛ¡º‡#ç³¾{8€.B¹a ȇãÖrÞÕýü¶Âë„à +HT“ \ëò'˜ë€èíTá´x=­ÿázJ™ÑÈmÌM£™Œ$_Ꭺ;#J•žÿèU ô´ë1Ž8y®Ù¡izØõ¸:ô^!åÊ45ôí7Ç­¢·CÕvIƒþAî›'5Ý@"©ÇÏ)¦FŽCÔâÖ¢·SÕ²Óæ8&ƒPË#œxëžvmƒÉmmã«ajH³Sfýwë€ÌÛª#œ(mëmw•¯‘ú-ý©Ø`$å +½Î;CC_1Œ×ý¼íñë€èìÐÜ·J.@ºíBÙ¾ºÝ+W|Ö­ò[åÖ¢·SÕr“åHiœUZʼߚ‰úæÒ +WëUÍ™Ùyš¦Â­¢·C•á„øiR„"c™cŒA‡â•ŠÅ¢vö{’{‘s‹€èjÕ›Q„¤½<Å«Ýó´„ç +ã}`Ð!éüO˜vö[¢o¾¸ˆ®V=‹¢òa/º#ß.IùÃШ|»ÜÁbÉ|»ØºÌ·Ëôvªîá< }’Ú€.Â2ûŸóYÐ'6×¢·SÕ ³gÙ«1’È´Ü:åFöëJSCÎ}Ý#®¢·CuGâÄfAÐ!)ïa ȇãÖÑÛ¡jáäK*…кA ÒXÚ,¿ÏÌ-PœMÇì":S ²£p]­z3Š(ÛÓñB®à¸Ðñ‘Ó§tH­š’Xb -ún½ªV\d ëÍ\ª!÷H.æ\² +ôZîiúrnioŸe¸ÞNUV™š?2s¤Ì*“{?tH +ð<–ÃÎ~=ï·ˆ®V=‹B^—¹êB­“%==&b$2 C§ì|.š}û“²_gÈù:-”&Ñ÷®ÐæQûí{þhW#‘¬×ô–34ôíõ*JS~ý: 8;5íìj³Ð1ÀÈÓîÿlWK–-7 +ÜŠWà#i=žvïÚ”ׯGUEâäÀoðKLê»Ñì…yÜ©öjè©úµW^`ññaÕåØèÃÎnýúþø'ûpÅâ{}}•(è „­Ë½…¼¦ÓB¿ßKãû5÷Iâí~oÖäÞÆ?m¿]tÿƒ½J—Ey.¯~0h[Zëè~ÝXïõà#ÙØG㟶¯Wrbƒ‡ÉT*ŽPàÂá—ôñ~WìĻªŸPC­ê_öÊ‹u„¯#þuÜ!Ÿ¯z6úÓ¯/rï\COÛV¯;DX~( $V~¤£¡GMò»/áSV[¨¡ª_{?^|™K›|\ã9ÖŒäjûЖg²…ú¨úµ÷ +lSqKV?c»'•mðÙß#—Üý®þÎI*ûj¨UýË^ÅÂîMû3Y„þœ,9AιÑ7ôODWWë+WÐGÝÿ1\+AhµI;=òfÊü@øeãá}>-ÈÚ8>β܃ž¶?¬>w°) ÇA' +–s?ô‹qgá~Ê/WóÜUüû`OÝ¿¬VºÈ“ø3èp)d‰|ÆÒÃÞøºŸ~§Ÿ[%±‡}ÔýËêuFs\ÔY„Ïiðñ½Gã#î‹Õ ýr½ÌÊ:F:œHZIªî³pâÚqGÀb< ±t†¢0ÜÑ_Ö¹ä3[—pWÂŒ2Âj`ÒWäo¯%rÁ£;t®ƒ=]µ5ŒCåzJ_§$Z®+i³ånAžOƒs°n®ª×¹\¯¶"ºnLŒÕBçÆŠjˆM‚´Íœ¡Ò§f7ËRx`øËjp­üÚ>—†í}†>AÅpx†Oô½‘ä÷p=¶ñƒÛ¶ÊNpQû(‡ÂŸc»;;HÂ6éëhŒZ fKÔAg݉aWµ?TÔàˆ­£pvv§%ˆµß:¸µ Ùˆ0/âvs©¯ õÓÆ:è`Īì9a¾&NxQ)DzÒ0$ANuEƒØ÷׆ž(¾$f¬.¸Gº‰P[¹´Ø·@°$­­5ãklé²mä[˜é~u°(ä6XC&é +vv´Ìväô >ÓW„ƒkt(œˆŸ]«¼v1ØþŠÛÌwiíbÔ¢Ïk€`œ ‹£õÚ¥8‰×)Á)¾!kÊ Y•ñú2Ž»ŸC°Ö.hß hsÙAø®à®à‚pP¬ÎÔ’DÓ¼*­ùÊb‘4.³xÀ™¾"ÂM¬Û"FÃWD< [ ùŠˆ§O.þ†¯ôdŒ„Š‘ú^wHÆnhûŒ¨ˆžø‚ˆü0—çdš™´Ö(‹²*Á¥µY&òwKcµë¸k³4lñ(/5x/0¡â µ'1L;AðÞpÈh7Æ–úÀzß­’.¢vÛÅ¥¾•2›d‡bB=r©˜½ûÃF0¹O–lpVª-ïu”?¦ùôÔh²o&Wü§À£Äìóƒî —üçàuÍØ»IlQ‚gô‘´ÄR¥Mík“^pŸÊ~;é6Py„càÜ9À§‰_%ó +WƘ•Ì•Ò ^°9ÓH]©hÑ´ŽñÉåÒIÚéE ÔŸËí¼$ZP¢9+ Ð +CßG~@nÒr¾GæeTÀæÎŒ£V J 1œ;¥’ÀÎ"šàsõ5鈥 Y~[Œo .ç÷ÞŒsÜ~xæÉ¶Å˜-•SvN,°ò»wM¶òsFNË!¿cL>T’:ÇŒnÆmÚÖÁûN€Ð3Ëô—2÷©—;±Op§¿X%& H—!ð¥|»RÝ +8t¬Ù-:—f>S›Pù9p1©ÃG}ø Nðz Þ¯¾ä—ª€÷£ÓÒ ¼ÕÏÎɈ=*eµN1Cs¬@lœx‚“°t.ŸûjM'õ1°Â#á%å&¼ÔŒû©rU_q’ *§œGŒ$%‰vY?ÈLíkɃ¹ž ­»åpdÔ±{¬¡cw¥ §Î $8+«I +éÌ » +Ä,Šº†ãw[΃¼ØñðU öòí»mŽS‚’©àº½©X¾6g +.P}«àÂ0.1Ê/¸GØsm¤>Èÿœ ÎÏá^\®r_nÉu²yqâÜ­ëIöþÀ­Ô’Hn°9hZýÈIA®Ðr“·&‰F=Xù‰õ}D4VG“bç;“d­ÏqãLJÎYD ˆyðmµÎ 2¸$8ô¬È¡£/¹]³»êl–ø;òžCÙ‰fl–ªì 0²þa—ÄP˜M§¯ŽÍs'.: lðÐî“áÓÜ)=¾,»_;ÔF[µ¸¨i°wD”Ë’Kù9¦[Ó âªb%É3ÎZguóÆÜpPºŸÇ–?¼fžJqò´ù׸Í¢_71Ï þ}ø‰ÊüûtŒQqBüæíæµ~# ÐéâOÈ1ÂUìüæàxÝþ$à¼_¿tclg?…pΩYBÖ;S0%u¾¹ÎxcXGsŒ^sÛ²®Ô3] ú8%QÖ¥t.³†ŸR.‘ß­Žaöµ ¯ŒöÐhAeÑà ½xÏó;F”8 ì™Úœu–*¦ö¨ô€¿f0±¼{ž”AO[%vð.ðp…µ9Ðù×årdÛnÃÐù <—þŸ8œ„vþS/Ôî×®žtáhKE‚À.Ù¹õG^Ê}eHã[ùj‹Ðë“eÈÍ’—Dp?fNÇèŸVC—9Ãç)À]Ì0sŸO…£‹®S¼nû‘zi`ùñ“”(›íÏ©²oeÍçí«|X1NÕNbtÀq@4ç'{ßJØô|+w1—0”¿lÊV—æ<ßç3ìฟöDWûŸä^ÃoÑïžàÆS¶úéÉ™ 3îxû1^\‚È’CǵËÇÕ€ ²8…rX/½H¿c-ïS½c2„l[9z‰Ç~ío%“†=×?5‘^”ƒkÔ÷ü,"q°¤‰û<3¤˜ÏN6`ëåû¼’°i?+ÛŠÓ¥3~@1ö’û +{Ð8-@Þ÷órU*G`ïåÔû ¬³ÿ?fœ¾™ßžDgð”Ï„ŒN G}qŽqbÏ=¾§Tdľ{ý +bs:iޯƎ²4c?¿€÷r’Ö9?‰w-,»Kÿþó¯?ÝuÜÿq«J–èþï5£åµk—Ô{u˜º'Ö˜aÂÒŒÍ% - ò¾‰ÁpKXEäº_06v?Æú‘ÎVVœ0ÜQVv™ rÃßbYj®«G5$Œq7£~‰¥@h’7Í”ÀÐ45þU„Ñ&Óe +>ˆÊ_Ap¹Œüû$Ì5´Ö*ÞíE×à·Ê$ŠÝV¼“0F‰OÀ vcTC1¶g”cªø ‰• +më¶Íb¬udt`pK3Vƒr„a6ó¶U-²ÌhÎýÈŠb[×Ù«„€ˆˆ—¬N|U×ùmnÂ}âKX%*]Xô‰°îˆß”vJŠ~Êe»?÷H ãßöŽé,ŒQß.täNLÝ-èÚÔIE$›ù‘#(o¬“Z=‰-ét0®ü¶c,´8ŽÍHH¢¢kš°óÃDÆ`ÔÆzÛõh ò_¬hc»Â‹ +;ýd:ç,;ÖQ<ý‹—3e¾;COA}”ï‹‘9ƒ:^z~‹UiùíZ üEϬhjGÈjô÷£ûSìÅ}MFx·ä%h¨—¸«¿¸!Ó÷ÒFõŒÜíBf-°×¡U¥ªS Þ’u\f\l’íS[¼E—dl ‡!l´™½¢ŽhÏõÚ¢5µ QäŒÑ†70L]n§©ëuã®×z,4ƤÍV‘¬‰k ’ßè +èô·`û>•!óv§ì(žvˆíæÎo)·ë𖵚øhÕáèìbE[×ö-vèNQ^‰ÇÐmë£Æ†Mɬ´9“.)žøj¾‰²Š*×Ã?ÖIáe(³µühãQ2µï¬2•çJa_A¯IçÐF +½S"5°B]evoÉu9n"gïhç(ø2  Sz‰ª=\'·C®ÝX'^ÊI ]×]ÝãM 3Q&.YŸ²õ²ÕÞn»ø”Ø›T·/±±™(4dîF­dt8™à ì<•Ê+^§Á—ƒÏûÕ[ß~‹1&åmŒ$jf éòÞòÓê%àQWÆÜSCpänõ})~3ÔËJlK;øP§N£¬œS''¢ —#O­´¡IâÎýPLÃgÐ3›ËÏH—‡çÍL²«Q®J–亓 µbêA£÷¼Ec^úb狸ažüå=/”y—z[¬9]Nãd"Ÿ¿ªY¥ T±u¹i‡úrD†ï3ãeü»C¡Ïšß"—KtO9Iy˜ÚvÝe<â»Ø Í.ŒÍ3¨"S#W,ùí® ++(ï¾¼o4j|ÛN}€§É'’ñÝ&Ù)¬÷ÐÞ}R=ÅË ÍžJ%¹ç”ÄÐI4;Cž$¹/Ó }4“!LÎkÇìv¼áå:¤¬™›w®›­%_®Zgb—?“Σ+±Ör;N˜ÎÔ]¦ÚùOÉige­š·=\í˜óêÎ#à÷m~»áãúRR®¯¸€¢U€Ê°Xpßò]Ë̉¶KÄA™¶ü²Q³QŸºr[kºÏz'ðPÉw9Ë€Æñ§[c=±Ó¢w35—ájÜ‹¨ž‘Á¹‰ç´Í°šYŒRo-1ø1Ž(½·Ubñ×ÍÍàn€FCž‡M«º´×‡j«ýíw­  „šYBÃ¥† +Û± ëO\ØyßâTC§á¢¾{Àv¡Þa€õîQÔ¿Òxb™ÌÓnþvAsyI±Ðx3æ’Ÿ"F„¤%I~OF‡Zn2Hò\dLjoQÑï xy„>´È6VÒ­¨A+£íˆ¥•’EŒò5*ò5› æ_Æät²b§ˆ.LÍÙ(êwKú1rÙ¦œí}ÒoªOƲ‘úv;Qÿö åuñ,è +{‹1MÃ/ ¿'EÒpøf_òÀÖm÷W’%4ߺ÷¤eœ_oÂ5è½mÜLü« á6Ö¯R ½Ü÷¯’útõOéýûÏ¿þü…./ð—æÚ¥®ÿûçû÷ûñ??X­LøíÜõ$&—àA]ÐLÈÿ™š”Áã<ù˜óÀÖ€SzÚ`· \šY.ƒG:Ò`_¹"¢rìzsƒu¯“`yQÅ-ÁVïûœÚkÛ%Þ@¶ˆë!ÅRcù'7¼]Á¿Fð\zj ¶·RD?ä×@†¤ ž +ã‘´Þ¢[P¬ÏÔvåþÐÎö@@MµˆŽª—>÷~ Õ4ˆ,#G"üjä LX\£YÄAæÈ½Ã +HÁÀV½ÀbI±¬0vŠçxCøçðìSîJeæß £”8Ã%(â ½$4ÇÇKÚgùØà Ç#±¢-ï«xäÙó×V_+$ŠH$*‰­ø7Q‚ÑCBÜÞ;J§½b·ˆ×½óó’×b÷½aëÍKjâ¹Î‘‹oá$–'G.Ö„¶9šßÐõ|žèy¾M6¸<ºç¤Xöòì³VÎ&_}ò#Š V_\¯Õ'ßgñÀöl¯Íóxü¸×›8þúy™ý¬âÊFÆõHäÉÚ]ž{XDˆóµ7nOŽ#òeâ­Mÿ&Ò²‹î!VAc\dñó­í%ƒˆµ•­†G{$¢“FO…µ´Æ‘€6ô| =ÿK“b‹‚¯U‰mó¨"ÇÚÑñ»z2šËH±ï÷ëÒ«?ŸJ€›´úþ昉äó¼#×IRÛ9°–f¤kc‡þŽlêiÄÄ“©ùëh%>·«”÷õ<á6 ®eõ¼ Ù" ,âNËU®—f;öï·w>ßíœ ôWÉø'÷ÈÓ@Ÿš^Ñ™yn­Í¥Ï ¾÷õ¢ã&ÐWN \+™@⮚‡éM¢Ån‹èë;¡À"³ÄV½Ÿ2Ü£!ö³ªÅžõŠÒ+Ãâª%=3¢µ•9Âf%ž¸‹Áv‹fq‰XgŠ»7‹cµüÍ¢¸F-Á,êQr?'V Égy?=NZUÚâ©óQì¥{•ͮǤ°ŠG2áY\µzA({¯Ö°óÒ1ëó,ßùi#ÅÒ]²Juº°æéÞam;‹/Æ»©ýW`í^cE¼³Xv(Î÷kðNŽ\³ÉòškŽÜ-˜4"þÌ‘¸©b /sä)N¢œÕÞÛíË d·™ ¯uW7gåD0ý§ÕÄë©n "âÌ¢y3‡D4‹¨åæ‘sÔ®Î{NW]6<Ï2\ "òÜÑÈ þ:ñhššlŸçxd+ÊZƒ0S={%jsÐßt猰3^9ÂÀ3¼¢U¼ÀÉUÏSf ÊìdÇ埄i E äªÜ<¤èó‚·Ù-®p²†P0—W‰.סpÞxí%`£] .ø æ1º@ƒ!M“è2Q;º@¬º@ìÌ ?¿Ùâø² 4Äßx² Äýa—Ùãt…)É.ËÅ.ëÅ.:…ê2Ùb¿Øâø² µó4½³„ˆó‚м@\¼Pü µ ^BDwøù /Ø÷Ïox¡x‘Á$¼pEîíÿà…âÿd—Yr-)C·âtɸÿµIe¿ª?[·¥N¬Cw3½ä.?ô’bœc|Ƀ¾Ðo/yÄ|ÉËÈÛøù‹/ym|Áà EãKð…-@ü’SÜ‘ÔS MàËüù‹/)~ð%ž¤øÁ—‡§_R¾ˆT„/)~ð%ž\ñ/W,2óKŠ~¹âÐ:Í/WìêÛæŠ/~áô¿ðCÿòË]Q ¿\qèŒÍ/wë/~¹Ú›_îÁ½ùåñ›_îe¼ùå^Û›_î¿øåV›_X2Uß¿¤øá—?ü’â‡_RœÓÙ\ü’âöo`RüLVö`RDw5`RüLŠ€¹¶ù˜|W€™óú]}‹ÈÂý÷7—ÄÆ8{¿>§DTœ§—gú8Å#냸ØÂîÞ‡´ÓŠ &nRœYËÒÆM)¶wâàù“Y넯h6‰°mÃÊb³Ëªø2n¶Jw´] ÿ‰S𮤩‘¦``Y’r®Mk­aêâcIñ¸¸ŠŠ8·»0»ðÈò½ƒÖÔ,3š˜N#aQ2{U¥úùvú¡wí1-l {?â¶yLŸpÖDØfæ#®3eH•}äÖÄ©¶®õ¬3ÉE&7=²?¹ÎsJH5BŽù»M¼z˪›Mf<|A°CËìþP:dÌqy bÝ +vÑH¬r,7½\Åȳv! æþì9e¹f'Õˆâ0 á›à;Á ÈJ/cŽ)×G¨ +‰°>‰ ›"&sE}D/i/öU4pÍlµª|ü,kï…#³§F–™Ç}‘–Ò%bGlàØ#_€ +=–pTV- SNGW_lNXÈš‚xOh$œµ3ÑŒ\Š ³Û×íFŸn‹Öaabì3È6Ã×ìJÌ}¨!=%MDÙ˜5S\Ü"à1ý^?©w‘¶ã+<ޱùñŽl¦édê§[„umêȦˆÏ,—´ +.ÅL¸T—.Mâ¾-s!gjˆî•¸k‡˜ù•åVˉJqÇfµ¡îŽf„rP væ­ÄCüÃr+íV5ĺ¸É–PrŸÙJˆåÁyÎ MGÙªõqÓ<4¼ÖJ<©u7Í·m]äÙ×ZS»QëH""9øöf[×tR t]¦ˆ KïìDŠ Z ºNõôE¿…m ò<’y öokÒº´yºà¥_ܰ1ý"Rý®Võƒ£E¡3)C{ìp¤yE¼Ü¢ÂåL¢Í@ i$X¶È‚‹2Å W¡|;Èl)(¡ªó-¥¶”´Ýx<ý¿íê2À;û Üõ‚­œ>Ú¼þŸ5¸¦Ú‡;RŠX¥zWâƒÄX³ªõ]‡¸<¶j3å¦X»¢@öEUp/]#2‰F¢•/wèâßÄÁ ¡:IàjÌZ—–n/Nqõ¢®½}§Y )hZ3PÂù‡FŽZš0  ß*·HDOòÈÞÏ ®BÏ1,e‘Ê\Çæ!!pN}Áׂ8¢Íêïd‰êýìGÛöõ©ŒúKE ®sg?ÓùÒ2¬ÐÎǤ=&¸våGBjÝF¥Ã’KHÝË"7u„>;ª{íúNÔÛySÄÖ4-ÄÓ×s˜ˆ;ZæÚÓ*=ô›Ö¤Š;1,V×Aå¡g›ÂVÄ‘®=¢y5‰Ú°µšžZ×*áŠf%4Qf²Yda£[K\IH÷]nŠ;ôTÏ®õŸ·o°xò-^±¯å%S„E!ËŽ SUüUË?¥KD Y8 +¯·Îg¤L +Yv<¿É&æƒxn±†œëæ-iµÊ³õ4ùîÍ»ÜAf¦–X‡ÜÙ¥…b.¦§VÂ'xâp:žÁq¥ÇªLì°>ûÓÁ+§ˆÌ6îià°òú~È/‹n’ÇÊ2@”ßûV`ï¡NÓ3ùÄÕ±–êBãZËÝ®œ)Ñ^áðˆ’ê¬l¨&œÄÖèÖ¨»2YP¢ŸÄ5.RžF Šè#Q%Þ$ŠNÃÝà(Ï ˆCk$˜5¯‘U«#"MŠkeé\ÑÞ˜Ž8Å‹9äöœC1 +-Ì¥ò;ðò³(Ž2×Þ—ê`eC34^º¹".Rš÷a_›,ºÝÂÃÜøvÕU n{w†Ý¢ÚX…µ¾ï tÎé:@É »¡Þ€Qšž‰ô˜£5&`¢+]Á54}s.<24÷´²ø|Š"&´s¿yfýjç¿L¼BŸ&Ë€ˆWHá¨i$ì¬ð•îrh$' ë6üŽ@7¸í“osÑ +ãÑhh ún¬‰}@»MbcdîI¡|ºXš)§ôd¯“ 8À‰mè|°´ ¯†óàN—#½ …YƒÑ VàtÛÖOÂ|9³9š—©ÂÚ™üD/ ÷­‘±çdó@Ý4}ŸQK@V€ßê«¡l{[Ô⸫º ’èÒt”Sj ÄkíXœpaU¼X‰¹NŠQŸ!4 @ú\:8àîT/EˆôÈ&˜[hçþžŒ,"s³XL/^z¥ BŒ²<¬æ±ŸÙHqšŽóˆG€¤q>¿9tˆå¹Šêö@8ÆXÇâøÅ—gdÔ&ú™Çû”‘™/m8Ï•êGšÏËô²ºïg†ùeàU®Pæ-]œ“×Û»òé|¶ƒ¼§€º¢ÍߊÑOîáÓ€G?ðâcâ—cð²kä¡‹)¸Gí±¢uiv/v¼ÂÑ$Ϊ‹DDï&²õñÖÙ}.»¸ZªùaÙÛö*Çv]fw7’SvA•½á%EÀ‹’ð’â^RüÀKŠx’†1 ÄSr!à%5¼hí\ð’"àÅÐGxI9A#/)^|„—?ð²Ñ/ Mü^RĈ?„/)"þþü¥—Ôb71‰è%Å~þ…—ÔÆC4‚—ç3[ð’â^öíê +ᆗ+¾áeßôð‚—+¾áeg(xÃËßðrÅ7¼pä>?áåŠÿ³]gI‚PE·â +:TDdÿëÌ78¼¬¿ŽÕU +ˆœŠ‹/vI/Ö*^ì.¯5œx±øÅ‹[Å‹pô%^l.Î}[Þz±I«z±é­z±uPõb+¦êÅž =.)õ‚xŠ^{Õ Ú!zAl‡©·^÷Ó_!^7Ñ £èq­za½Lz¨êQõ‚Ø}ßzé…Qô‚8|„¾ðÇ+_ØŽmú0ŒÞcç™ü ‘†ƒÉiy†Ã.€áü`8“Ä!€±m¯ÆW Ÿ•ëj~lNÀ ¶ƒ¿ù bÀ\|±Xùb—Tøb­ðÅn²òÅâ—/6lGX!ùb\ùbSQùbsÖg $øb³{$J‚/¶ öëXÞ|±å²~õbOÕ "îÕ'"ñ2ñ²¼ âŒvøK2ñ‚8/ˆç¹ÛìÁ "žÌcyÛ…mã!îmÄCì¸Ý· Z»0žb<õÛ9ð%& +o‘å+¦ÁSªˆið5³»1 ¾¨Vÿì#¦Á­®Š ñ‡˜XULƒÓ(bBý!&\Ø1¡þnxø¡è-¦Á·¦ˆið•!b€ÿ&燘0‘XÛ^SL¬›ÉH5“­¥unõýÄ~e“U¬°cy»É* ÿlÂÉ*ä¯î“Õžßt²*v²*x²ºÇ©&ñä±êÉëšþ >YÝFR)üäµÊë±ÇI%µ*¾!Æ< ¿–§0G”_XU”×Ê(…â(R>Œ=O’!)òJ)ŸßWKùTVLù´Mù +9øhp*WS-¶²ÏŠ­XÕV¬j+^6Ëåc+Ævƒn\ñ†W¬WFŇ\qÅé\q&{\Õƒ+Îú‘`ºqÅ¢¸âZR\ñAÛÿÙ®·ä +A(ˆ¢Sq)˜ÿÄÒ}(öýKí²rY!ÔWãïü«ñWWã¯üÀÕÀŠ««¸êXBŠ+Tìhe[qÕ1b‚+DÅU'ÙìcÿÆ*Vó½­¸Bý+ÖqøAæÁUçLqÕyÞ<ý47qÕ¹Ô¶Wë¨ø…®ð¬?p…ѪþI~ë +#ûCW˜<£_ûè +f±UW˜ÜJû¬º¤¤èŠû¥êŠËη÷·®ð:ñ ¿-º:v~B†ö§®P«ê +õì§Ÿê'®ï/®Ð°bâÊ©« Q]ü{\˜ÔꩺB½EW‡cÂY1u…НRdêêÀØ©®P«ê +õR]¡¶v7wÔÔêP]•ß°á5u…X¡+ÿ±©+ÔKu…Ê«ßÂÔjW]¡ây÷˜ôÐÕ7Cu…ZTW¨§ê +õª¾3¾t…z«®PñêÙaò¥+ÔþÑÒ]1û¡®ì#À•3jâŠUq…z(®Xqý芕«}[teUtŪºb…®bK]ñÎTW¬µù:qÅçU\¶E^Ûb+¡ÚŠÃ]züÛi+NÚŠÓ¨¶B­j+.±W’Ú +uW[±b}]Ûb+Vµ«ÚŠUmŪ¶bÅf_é´«ØÊâ'Ši+«qJ˜´bTZYZYZy­þ=ž´òÿð¥•ÿZ‚Vv_GHpÒÊê•§¸¤• ÂQÂfA+‹XbÛB+E¡•x½FI+›º‡’V6“5ŽÞ“V6ëgø!ie Dh‹éC«Ã>ãSVŒUÇÛÜi8 a•”+dNHY±Š¬UV\ù*+ÖZ’q)+V•«ÊÊ6ܯ¬øòíåH-…¡ +¿5"+ÖKdÅ;ÈKV¬8Ççµ!«ÂÏìñcùŠñ¼j BŠõX±6+Ž*9;«Âo o/X±Æ§à+ÖúÛy_Ûâ*Æ«—°RºŠõûØW±6qkW±q*–Ê×UVÅU¬èxùÒUVÇצ«X‹¸Êª¸Êê›ët•_ûu•Õzǵé*«¹¯LWÙå”®²XcMVÙó +«¬WÔ¹èêVÙˆ «lvîrl‹«l&qîÝWÙ¬Ÿ­o‹«lˆ«l)í}ýnÙ[ÆÛYX…ŠãCó›¬*8ÌNlMW¡¶æ›ÂËU¨wW¡b~]ź‹«PñÍØýS?]…Zû×UŒõë*F;Á.®B-vÚ]\ÅÚÄUVÇáÿaºŠu|]ų³ùÛUŒ÷ÇU|*[Ö‹«X›¸ŠãríÉ*lVq ' «8a™…U¨›¡Y'«Š‘áË*Û,…U¶êZ¦'«P/ûo «Poûå…U¨½ +« +~Þhq*Ž^««Ðê‚›¬B¼Naj³Ñ_X…ŠYþ²ª`ô1¥!¨`bµÉ_X…zÙBYX…Úaê°¸°ªðÛ/¬B-#e7Y…zva*†vøµÉ*ÄnoÖªrñ°ôe*¾§ª +á-žlª +õ²à­*D÷«*Ô¾ïcl‹ªP9âUͯÓþíKU¨¸ ¸Ÿ¦ªP ö8_¸SU¨ÕN ¬PÏsoþž%¬Êmgÿc[dÅŠÁ÷uÊ +õÆ&îuÊŠõY±¶òU± ¹ùN3aeU`Åz ¬Xñ¾+MX±î+>ÄÕ†oŒSV…ѪïÍSV¬ö±[hÅq<…Vó³7ÿ“VœŸShŹÄ*ôoɤç}Z¡òÀ¶ÒŠË©ä'n~¡‘ëž.š²â""+Ö.²bm"+Ö[dÅz]wÔ”ëù••Å3ÎSVV÷ø¦OZ±V¡•U¡•Õ³ÄY%i嵯i'iåÿáK+ÿµ¸ß¤•ÝØœ´²zŘOZÙ(`ÙÞ´²ØZĤ• £Ðʆ†ÙZÙôøÎò¢•Må<ú&­lÚÏHÒÊVˆÐÊÓ?–´bÅŠw¬L[±^wËyØŠ³ÜI[±ö»EM[q=ïù'®XÁk\±^å ‚$®XoÁk\Ù¾ûÅ#NÔÁ•ɨŽ“âªs“\¡þÀUç‰6‡lâªãx#¸BT\!WqW‡PÁê\¡âÀ×N\uœBW¨Å?o\u¾=ÛŠ+´óŽixt…Š“k,›©+Ô{Q§®Pè +õ‡®Pèªc•«®XUW¨éxÿ¦®X±ín«®PèŠUuŪº²kEW¬õÎ+uÅš[Ë£+ޙ花ž¡É+>°òŠõ¸bƒËîúÁ+¹òŠÓŸ®GWœIÕgýlc[uÅ¢ºâZÚóÚ믊c‘âëŽABêáUÇ*,>½®ÚV…½Ôo]5L‰êªaWP]¡þÐUãaÜÆö­«†]!ª®Í&ºj8¦V»ƒ·®PèŠUu…ªºÂáˆ~o‹®¿ÔÛª«Æu$ºBý¡+ŒËåŸä7¯0²?x…YRüÚ‡W˜°ÚN¯¯ºm‡þ^uZRxÅíRyÅe§¼ê˜ÇæyxÕñÞA€‡WƒRáÕÀ²;Ý®ðÕÕÀÐÖÓððjàÕR^ ͸B1É«ºc÷^¡âã¶I^!brÓ\É+Ô†•rl ¯P‡òŠ?èÄœ¼2 ¯øèÊ+ƒŽðŠ£oïË›Wœ(åI£¼âÀ+ëã8}EÒàõö›¾"ið|þhé+®AõEƒC]¬šô×¶úŠÐ¹|g|ùŠoÇ}—Ôôùƒ]ÎÕ5}Å÷+^‡ÄE\ùû˜¸â«éÇé—­1òu[lE;~:|ÙŠUmÅ¿[é\±WŽ ‰+«‚+VÅ«âÊ~Ypŧ¸šï ÓV¼õáÇ¢—­XÕVCµ‡Dme;—ØÊu?½N[qÎÕVÜÏÄVœ?‡?ß'VÅ•m}Gœ&®¸(W¬Š+Vū⊸ŠÏtâŠUpeñŒ#ÅÄ•Õ8&L[1ª­¬Š­¬ž%þCÚÊkõò´•ÿ‡¯­ü×>¶²û:‚‚ÓVV¯<Æ¥­lŽÿ leQle£(¶²¯wÈ(me³ƒ‡ß[ÙLÖ8{O[ù/ü¶²"¶ŠÅäGïi+Vµ«Úʶ±k¿?´ârÞ󘟲bTY±ª¬X¯’¿•²bUYÙY@de;îWVŒ*+¾ö*+VÈ*ÿmÈŠ•“¶-²bUYñHYÅí&­XKOŒ­A«…¤+¤¸KZ±âMk“V¬8¬äì­¸wíw>ZÒÊw´k!iÅZëF%®XÏûŠ’¸bU\±Þãc+Æ6Å•¶bí½„¸ÒV¬j+nµ°U¼~ópÅg±«ÚʪØÊâb+«b+?´Çî8må×ö±-¶²*¶²*¶²;Û½½meQleÜ÷c[leõc+F±• ùD¶²éùÚÊ&òŠ»š¶²I[Ù[Ùb[Ù›VâÆ¦­ˆµ•!çk+ÿšmEúØn±•¾¶2‰­P»ÚÊŽ_[1Š­±—m±þ¾ÕV¬j+«ãðcÌ´ëð!኿!¸b´³üÂ+>ØQ‹_:yÅjFXxÅçQ^ñÙM ¯8Ê+žòÊ[Â+¿òÊöLá•­<ßâ_¼âP^Ùì~ÚŸ¼âLyÅU(¼â Ìþí+;çÔ¸túÊöñ•mÖê«öWøªRws°L_5ίø +¢Åj©Ûê+ØÕVÖ꫎•¥¾‚R÷°ÍëŽ%–wðð +Hí©£‡WƒŸ€/¯`T¼]þ[¯†áÁ/}x5ø¡Œ¡yx58½Â«ÁMùësǯPËWhUq…z*®P/Åê­¸BmvFX|…Úá«¶½}…8ÄWŒê«“§¾b…¯¼N_±ª¯N›þ¯¯¬:c^¾bÅi¡m‹¯XO?•¿|źÏý.}ŧ_qF«®£é+Ör]ÛÂ+Ž"~[xůüßN^qv”WœIåg¯¿a&¯Pá—’òŠUyÅ +8\ÛÊ+¬Ð¼BýÁ+Ô¼BýÁ+Ô¼ÜlòT0}Ū¾b_!bâ¬1}Åze¾bU_YóÙã+û1?¯ì×ò$–¾â}©¯XÕWñ#àÛê+£úŠC®¾âôÔ=¿ÓWœJñ•Mû×W¶Bî3.M_ÅjúøŠK>޹é+Vø*Oåmn7;¾qA–ôk¿›ŸÊ'°¸ XŒ +,Öz]©«‹UÅÚ}ݼ€e{îXŒ¥!–¤Ô‰íÀ:µ*°X1¿ùX¬ +¬“Ò=bhÒWŒâ+Fõ«úŠU}ÅŠÓJÎNøê$tÅW¬ê+ÖúÏv½%É +BAŠ#è(Aæ?±Î<Ò¿;¼ÕPÀ*¿€PúоÚ&^1^CGÉ+Vá£òŠUyÅŠMÙw›Á«‚ 7¼@W^¬ +¯X•WV…W¬Ê+«e%yeUxåÏ®¼²*¼²*¼²7ËM(yeñŒý9ueß÷þ…£RWV]Ù(–|2ue#~ÅQ¸²É©G-ueó(º²9]Ùò]ÙR]ÙÏLt…ZUW¨EtUx%]¡ª+Ôw=?Ö‡®XUW¨?Õ.¾Ú&^±bÏökLòŠÑ.±¯Poå«]Ž'^Y^±âνo¯ø×ì~þæ£òªRV^±*¯86Ê+Ž®òŠ3¡¼â¤)¯P/å§Pòg¯lÇ$ª&^ÙÒ^aíïöi¯Pû˯PËékäÅ+Ô*¼BlÂ+Ä®¼*…Ûzs° ^¡žÊ+Ôë<]!6Ñb·0éªàk‹eÒꩺB½lNºBm¢«Â{¬èªT^V]¡¢+Ä¢ºB­ª«ÂýLtUx§]žbçÏ_aèªá öݿã«öWDW͆{ÕUÃVP~¾˜]³ºjØÒUW@nx¢+ÊWt…ˆ¡?¶YW7ÞQuu®¢«›Ûè +ºr=ºbuÛ¼uusÿ„GW¨ºBýÐÕÍŸìª+ ‡®nžœ«®O ÑUãý^t…Ù)<Þg]a&±ýÜyt…YÿÐUã¿ý,¸ÂJúÀ*pÕ¶W#ºâŠ ˜ðg®XW¬Š+Và)>!qŪ¸*vƒ\qeUpeuÅ£âʪàʪàÊkÜήüV\ù_[peï%¸²*¸²QXqe±µˆ‰+Æ+ï’‰+rÁ•Màʦò<ýöþàŠÓ^‚ W\!Š+_M+®P±âãê;p…ú+Tœp¡‚+Ô\a=+®«¨W¨¸BýÀjõÓì+Tà*ÅÔÆöZ0PñbCW¨º]?tÕ¹‘Š®P?tÕyÛ[uuѹ«®EWŒª+Vè*Ç1tÅÚ&SW¬ª«‹Ê]±ª®Xs…¥­ØÄVŒj+V±#îñhÚŠUmÅÚcg´B®WžþV{‹š´bUZYí¿øõ&­X?}_´²*´²zÅî:håÏÞ±Ù$­¬ž5žMZYÍ}eÐÊÞl¥•Å•Vö}ïØ0­¬îWԱ䰽ĻZÙ€_Ôa+›±•ÍãÕýS‡­lÎÅV¶<Ž»l“­l!ýîåàêqšiÕýæ4˪Ç%k¦U ÙL«—·™V=.z3­ºß gYõ¸>βêqÕœeÕãZ:ɪÇv–UËî,«ãYV=.ѳ¬ºß·gXõ¸šO°êq‰ŸaÕãÂ?êfXuwÄìªä˜]ÕC'³«zHfvUõÌ®ê!¤ÉU¶WŠ«lÙ‰«POujQW¡Vuª£ V¨]`uí1N¬PO…ÕµÇøO°Bm+Ä.°ºŽ˜ÿ V¨§Â +õRX¡6…jX]g¬ì V¨‡Â +µ¬ý·5Á +õVX¡v…ÕUì÷½M®ºJloW!rÓð‘®B­««Ð8Ú¾¼†«Pouj¯õð:\uá'-ε5\…º««PqÕEóò¿M°bUX¡–Ýï†/X±*¬XÛ±¸ŠQ]eÍ6¹ê²ï¸·ÉU¬ê*Vu¿ÄÕºoŒV…«u“¬8Žøö¾cYq̋ߊ^²âü@V~nYq.UVœwÈÊë*XóÓ,iÅÅtä —£ÊŠUeÅ%ª²b…¬ÂP)+Ö–Ÿ0dŪ²b…¬üè²bUYY-q§²²ú 5Z±*­¬^ñ¾ƒVVKÜ +­¼®´òOXiåm¡•½Ø´²zÙ.ø¢• Ã~Ä­,¶1ieã(´²1?kÛ&ZÙü­l.…V6ï+­l‰­|5…)­X•V¬ U8!iŪ´bUZqAÿòs‡­XÕV¬j+VØ*e¶bU[±Þ~þ¾leۮ؊Umuñ-[ +ä]a«|6lŪ¶bÅm>ŸM[‘¹b+*÷Î!K[¹j+Ô[¹j+Ô[¹5}8l…úa+*wµšÚŠðU[|}›q…ú+Tà*éÀ*¶eß]5¬rÕkðÑ*Ú÷GW¬ª+ÔãˆýæÑkÉ]hèŠUueÏŠ®XUW¬ª+¾™èŠQtÅ﫺b]uÅQ,˜GWqÕgGuÅ™T]qÖKxöÑÈqŸÛ¬+.¥UWö+;~þèÐÕÅ-ñˆÃoðêâ.¼ºøÕ…Wÿðf¼BŵÛà‹W¬øøq?|…ZÎöóã~ø +õ¼W^1žãƼbT^¡Ê+ÖæûÝ‹WV…W¬Â+þ1ácÜÚ®ø­W¬‚ßû®8.‚+ìÉëâ„«Ën+®8aŠ«‹&NÄm§Lòg\q³<{Ü”®¸ê|³{ãªaWí¯~àªáÍ|y¼qucÙ)®n"Ãÿذա=ý¿?´ºqYì-À56C£´º‰}µUÇ¿kÒ(mÕ9·b+pöÃV€+¾\<;lÕ±—‰­*ˆŠµ¯¸B=W¨åN \¡bh»?›¸B¼W¯s¤Î®PqBz¶ªæßlà +õ\!Vì>7W•ü<ƒWÕž°Á‹WO(¯Pñ€qãÅ+ÔCy…z*¯P‹ð +ñÂðïÛÄ+VåjU^±‚W^¯X…WŒÊ+«Â+Vå+¾„ïJƒW¬q{xñŠ_ByÅQP^±*¯8ŽÊ+޹òŠó^ùù0xŹT^qÞ•W¨¼°ùY’¼âr^1‚Wu›xÅ +6”mâ)4áÏ^±‚Wqx'¯X[~Âà+^@*yŪ¼b-=>6ueQteõ—6J]±ž-•º²*º²Zޏ«¤®¼®ºòOˆ!ºò¿²]Y]Ù(¬º²(º²a¼ò.™º²!]ÙôøÎòÒ•M¥èʦ}Õ•­ZâÑÔ•/¦=þXêŠUuŪºbU]±ÞµEM]q=«®X¡«¸ÿ§®XÏë +W¤®XUW¬ÕÏ´—®XUW¶ï–DÐ=–.VÐ\IFUl>Š+Vū⊗ù|…ÀU%tW\1 +®«xƒÄ«âŠUqÅŠ K<›¸ªd®àŠõðãà…+ÖWl¥Æ4 ]±âæË&uÅZû5uŪºbU]±ª®P«êʪèŠ#¿¿Ô•Ul»Û¤+VÕ•UÑ•UÑ•?»êÊêYsÇ +]YÍ­eèÊÞlՕų„’Wö……WV÷+6رì.å• ¹ðʦ'Ž®¡+›IÑ•Ízi}›te+Dteké—Ï^Ïx¸ù(^U^RƒW¨ŸÞ¡« +dàbÖ¶IW¨·ê +µ©®XUW¨¸ŒÛؾt…z‰®EWŒª+Ô‚KoÝ&]±ª®¬Š®XEWüc¸¢×í­+ÆUWüVª+VÕÇåò#ùÅ+ެòг¤ø³ƒWœ°³¯ƒW¨»ágâ§\yeÛ¥ðÊ–ð +µáÓœƒW¨7þ²`ðª^¾º9½ñÕ_©Ø ü« _ÝxõUç•ê«føªÛ¯¾êØy^_´µ.©ÇW«ø>]]¯Ýø9 \u\¢~ÍWý/®Óo[!bäÏm¶UÇØo‡o[uÂUlÕ¹ÕÝ+®:o»ÍôàŠUqÕ9‚+Ô\¡~à +ßâj¾ƒ>¶êvPøÎüتóØ[uþ[l…ñþ°ææÃV˜G¬¯­0綺ÿºÚ +K ×áõ|BýÀ*XÔ+¬Ð\¡~à +õW·áiÅ*pÇôÀÕÍÝfÅc‰+Ń+Ö¸&<¶Bü°«Úеñ ÃVVO?[Ù'ˆ­ì¯­¶â{íAÁÇV¬W^ㆭ8û¶bT[qÕVñ³†Œ†­8;øòÛl+ÎäwïÇVœõ~¶âQ[ùbò«÷c«›—?±ꇭP?l…zוVXο¼æYÝf‘ÕÍqYÝçü[CV7ÇYd…ú!+î¸"+D•Uã+²b…¬òcCV¬œ´m’«Êª¹{×MZ±wb4hÅZÅ($­X!…À]ÒŠ¿Ôx6iÅŠËJÎNЪѸ5¿ZÒŠõðÃàE+ÖóìÁ¨Äk©W¬Ä«âŠõŸí2·’$‡¨>V”Ý÷aÇšPÊ*뿺oŒVù‹I"Iˆ(ýñV„u9®é­H[ ÃqMoEj½UewÅ]ü\ÞJ¨ñV¤Ö[ 5ÞŠÔz+¡Æ[ Í£:.o¥c[ÿ\ÞJ¨ñVB·’Èp³?§·h¼•|psþsy+¡·’m4ÞJ¶<‹º¼•Ïë­ä óˆjy+9tã­$AŒ·’d2ÞJnZ-o𬷠Æ[zë­*õfHÚ«—·ªŽràõV¤Ö[6ë­@«ñV„Æ[¢‡Ïå­@‹õV¤Ö[ í^eÌòV¤]·ü0W\͘+BÑò—½â‡ùtè²W¤â.{Å­±öŠ›+Îã²W<k¯ªHñ×^UÚc¯xêÖ^IÍ4öJ2OKüa¯@»µWïaeUûË^k¯@“±W€Y>þôW€UöéòW Ýú«Š=µþ +4ZšåXOX­¿…Œñsù«Šl‘̺üUefšÝð6Ë^B»Œ–½mmº£e¯jf xì *£×µ–½Maú³e¯@³ÜÚË^Vk¯@»±W•ÛØ+Ððš+°hÍh²æ +4[sZ¬¹ª,³]òëðW••ÞI7Úþª²­¼þŠÐú«Ê.hü)ü•Òå¯H­¿"µþJ¨Ú˜Ã_Uiåò½‡¿"MªÊEêV½›þŠ_aü7¡×¨îhù«*í..{U¥1e-¸Ë^qÇa¯tÚe¯x:Ö^ñ$­½â©ãúk‡Yö +Ô{ÅT²öŠÔÚ+R‡ü¹ì3ÔÚ+Rk¯H­½"µöŠÔÚ+R(›A§¿jü•Ð×_b†Ö˜þJhžtú+¡Æ_)úlù+aœÏòWºÚTbÃ_I\Æ_ 5þJváõW!À?—¿’m4þJ¶Üø+9žè†øþJŽÒø+9ö×_I†”4†N5²éñW¤Hù!s§¿"…¿šª¼®rãÐã†e™þŠ´•ªª|,&´1X„Ö`‘Æœ§ ‹Ô,Rk°H›æÍa°¤æ¾‹0?Ë´Rmr”Ì“F*žA[UŠRõËŸ/Mã·fùKò¨É +3Ìÿüp;z`\ÉIÜõep}YÊÝ`ÁÍqÅ×Á\hc¾(• Gœ»°ÑµÉP׃2Ý:²ì»Ìç:ÿT†ÄOÊЗóì«d-Ju!C"6a5IÍŠÇI,NR”Ÿ®³¡ºöÁ ++îdŸd Yê]ߌ.ÍÙbs:ΫÂ&ÓïGÛÉ“x4enrM +¤«IXëTfd¹¥:RR á@éHr“QŸ“9Ì<ìŒ0̱ÆÑ¸Ci.“9EYï T³D AûË‚¯áyº¶=+T”½ôDB{Ûžˆkîý²ºön}õmmI£\ô㨑mN¶·G:,XÅ~;¿H@°(6,¶6†¥N üuU:ÔÅÅe­#KÀ•#szˆDI†AÁgŽ,ÒòüP3…™ìp¶\•V1öñnF‘ d16éÈ  )h±jœ'4 +2¶–qQ.M&s%õ1µ—‚㣟'–a `k’›QNåCýœË8jˆ!삺 iŒ†×ÕÅF·ƒoÏèAâÂáß@_¦YÓ cY=¡ê äø*R”â ‚Þù‰2P,AzP¦‡z†š,ˆ]ѵaðhxîý'Q_øØ•ˆ|sâ¶èT!¥;SP„ê„PÓ/Ä™ÈÊ3„+“»¢ˆâÔ‰ººJÆŠS*1J§¥âŒPD)‰h£ÕëÔ@¡%%(m‘ƒ2¶Ð+ÂŽGFŠí¥E¥ŽžË¨|÷ƒ‘ߘQ…Ï,N¿0µÒáâ¢bF.Šyq®(ýµŠØ 8ê†"…Î%G%ѳ‚bã½6íШ¤G¡PJ @“‡ˆª(Û„4@‹…×Ë’ 8'OâC*Æ{Êd\û(’7‹mž'·^R ö2FA&n‘òpôµÿáý ¢Ñe dý]ª;XnT`°5)Kµ Ô£ÓáÆ%Þ³éˆXû€Zñ“`o2omt.„‡áÒJXoF¦T>§§éH5_Q$nk«W´8îgã«P pMêùñ(dÑ©ÒBOXÕꉾ7N]nTÔXÒÜ\(ȤU6Æùj‹£BW—æÈ.­©mdÙhZ>„ôBt“7éßÖ +mt™ÜâW’ŽC3¨+×´CŰ¾D:™wë]VCixÕ¯¬)Mû'nä||ôÏ^æ«™¦AúlÖ§>õ²4EH;mÛ)O\Tæ›^Šã–‚Š?“íZTÄB,#O`ôå,­'ˆkõ}(:_Íô¢PriMáU´G^#?¢Î‡_#ÿ;ÒBßíÚ˜=íZT_’J«Í+†°†r‹#bÈ&Kh¥q„Ü‚º­Js ‚¼ §dê»G/þûçŸ?¥^•¨gÖwÌðߟÀ.‡ßõ 'à GŸ9^ðÅl‰6—–lŽÙ`Mô—%¿O(Q”®„‚V‡”e'=jo{BiMBA“iT‘kÌ{"»¤†‚F#R»‰RÄÿdF0V]ð@,Éás¼¨€D¶í=b<î9ÌZ&„\fì‰#…B£èOkã1Ï9žµ$ï§w9s¿Ñ9ïÜ8˜žûñêÌ âÎÜ8ÀžÈ.ù†rä~3ìvéÁôܯP47\‡Æ=sã{"»¤„(+î-AÉ™ù¸¾ä`ú¹ó½¹ÁËšqØ`Ïò,vEpì{W~vâ`ú•;݆ŽÛ*6س<‹éqÔáOkÅ¥Éé‘á…™¸àØ‚‘zûEˆÂ³˜–=b<î9ÌZ&„vèˆrÁš˜;‚¯Ì•|9GÈãžÃ¬%! kP†Ñá3„@€hg€½9´Ž±ð ŸãÕ‰ô†@ý Oã:g{V}‚Ihb;˜Œ²ß6¼ìÕŒ" è¶ÉžëYSó“} +ûÅêêº!Enå‚BÞ£'õÏzqæ(5A@J£Ús=+^aªü!r ¹z…1ÁWæ‚®F¸F-4çzVÔDí¿hx£P¤Í@på/Æ‚¢ÿ%ö«}%Ç!°î1n¡5›]Õ“æ®BÄã÷‚‚î­&˜Vw0 Zû5À9Ó³¢’YV +ÔHôãî¢\9YrÂ%ÙØù–>}¥A‰#Ö€ö$÷Jçê×{uÇ87¼ï{u}úÊ,!mŸ˜“Ü+ÝW5¡ÐÀ4ô«n,x ÊÂv^¸IΪ±G-rNõ,i"qé- I_ÞH„%cšàœèYP¯ªZ¤þ‰í7µ¨G"~ŒbÁUTõö9^Tð•îÈ \#ÆãžÃ¬eBða‡ wrÁ¡Á§'-Z1–s„<î9ÌZ ä7E£·ì.þ*§,8˜h‡óÕ¡/ÐrSäȘ æD[ò åP΋N¼´øÁDDܡȑøŽ{ÀxšSüm1ÍNŒÖ€®ÒˆaèÝ ÜE´åzu¢¯Ìç<¯ç5n =›YÕÓ&¨1UL0Š4ñç({&³â:"ìm‹×®,x ~cmé˜q¡sW®qíÙ̪O0î·çŒnÁ‚ŠÕ£hïÊ5j€9“YQ²1|òR£Ì²*ºo²M’(ÍñJ:”.³uì¿õyOp­q-;(‰Ž7z²M’¨Ëµ¬jO¹•‘{½ÿÖç=Áµ†n»Mu0k‚¦É6Ñ/ÚoÍoæfªp˜#æóžã]é]io0• “m¢Ÿv®?„7Åyþ¯Oçû÷*÷ÚPb­®©_:Ù&ÒÝ_³Mr~ÿ5Éžé],ÔUõ{';‰Ïw“ì]Øcæóžå^ëH½½ ;¿'Ûd~ÞxiïÀÎòsˆ’=͵ұøþöå“D¿k½4?|çú9d’9͵’î}¾ïzpå¹ë›ÌÄÎç]çãy×÷óž ¿w}¡ñÿ³]æX¶¬JÕï(Î*t1ž”ßüÕoxTJÉ>àf8ýØëN4£[Üë«÷º·=@»÷zÛ¿³ÏÍS´ßYÅLoÇwvâaÚùÅïÇwŽDó·íßÙç»ìßùPâ$+Šu>ß÷Iž5*S†1'‹Ê§©6?DNôÅ¥—tê.ÊPëéÅ.ŠRJà&í.”¬„O¢î½”x¤S\Œªg@¨ ó@‘{Ô†‘q݆jm¸.ñ¾æn}x [ò´âµa¨‹Ú02.ý6+\”²EËTêãÀÝ’deާì+‚õLƒ%½ÈuƳ•aº³’¢¯FäŠòaæG‹?£ùÀx†&Ï+0ñjœqð »ÉW^^”Bà õ°*Tö) Gû‹0>LTh~TòiçÒ;là¨îjy¥‚OᆨŠ¥ƒêÝ{XÓcZl¡É ¢ãËu¹’*LÃa@/R‚nªhÙÀn†nè%À#]Š—‘”ÔH{f# z1à2ˆ×‡ôÞ‹@Œt(’‘†wÅÊÔ_[«Æ¥½OG*‡á)Zaµa¡e$eµß¥å.¡K? ×ϯè3 h>m—o¤ŽÓ Wÿ•>úRá¯ðÑ6Áš”§$ÉÈ–¤3Þyå› d°¾À|&íëcÀâÜz‡ ,Zu™vÁ •±Ù`ðG±¸. } Hœ[lPòPËuäX6:vÝe.¹l·aK€ŠaLÒCÛ!È%vxHrO.¨sèz0è(_:x öòŸõL’Ÿ©†_2¤þ¢¦é³jŒï­K°ÕÆ™ÇpC©}ïømCÁà ÙIu›÷ È£ªlæÅIŽ|ýð_##Ø‚t§ÜPþ^aÜü#ÿ\¿„>y¤ÐÜ Œþ™J%ŸÁ !t4ÀM6€ ‘JìG +M6€#«—jï…,ÔgfÙ “¬ôõ¹u ‚?ò>[…bèe(ÆÚ7Ø×©˜^²7TGÚm0ø£ˆÌ6¼—!µ)îɉÃ#Ï$F4 ”Äí-d˜¡˜œ¡Ÿ¡íP½Ì¤·›™·½l†a@xábšu7È͌1ù[h?C1Ú¡Jf +Ò–/{¤‚^¦o’›Ó`@/v=]“>TÑÅK\ÒÄ~‚,Ú­z™©Õͼ\Ò( i8.3s¸™UQl½X¤[ñøDqÿ„äМ7ä;ÆÆdÉáýB +y´Cõ0w‘%‡g~@º?ÂPßG–Þ/ v¨Ç|<]íL÷31 ?9m¨Ÿ°v¦{¿€<Ú¡z™ñ“V—!œù)jCý´Õeýòh‡*'o[×eÜFÅx’ÌÕÄ7äÛƒÇÅ=TWEÍÐɇÚõv¶{ ¸Þ%_ÌyC¾/Ôƒo»Á€FtóØ@1B/CëPe ƒ?:÷&®)ë!Mqi]Ru 9‰†­§Åa¡òíô¾=ö ¦Ç¸´öŒ¬Ã«[ÛêØÕyK.Cqs„~†<Ú¥z™IÓÍð^0P×J>š±ŠßvÄÖOG»Tùãt óÍ{~ {)_ü¶†ôëÛ@Ïö|o}_ïcÀã\z— Ï‘ñd+ñó*ÑïLh† tB%ZbæRãƒJEY÷ »¬rqÝíÚ1TŸï[;‘Gqk}Žút.¶µƒ²+Eu,YQuüÏ5µÂ é­ãü"o¨$H0v2ä¡¢{Èú|‰‹Pô­åþ ém ¯CÒBOûð8—Þa#®FÖºÖ§N4 õÉü‹½x¤CQ+=0çŽdn¦.S÷„÷<È®´Ôç\‰‘KÇeŒ»êó“lwP}F¯uþtœ¶ÿþÍ!9:9²P‡^ôО‘ÄÔœw¸!HÚþ[ã8ó·NŽ,Ô¦=¬\Oµïë 0 üdLÑci{[ëäÈBz»‡œÄƒOZa@Hæm´½­Cè¤(„Úô‚<æ•èâoèh(ÃêOÆYûï߇'UM)BGêÐÛ=äjpI½ËÐ¥GÚ†‡ú””è^´N†<Ô¡'Ýö2üo±9¶7¥ÒÈ(nÃöc¥ô°vˆq(íúX™Ïô_z‹äÅÒæ_Ç„<ôBšÖ+‹tè‘ ÔÔhóéòŒ@ÏBïcNÆób%}·é;4ºµ‡µ-Æ¥têy?€)úÌœ`Ÿ]¿Óó$eÑ—Ò1%ÒÇ]²žÛü±‘Þ¶Þ³æÝˆÌÎFÙüQI%_iÙøKåÔ¶¹Ã~kÛÜÈÌ‚¶Ì9:ýwi…ñ‡ÊÒîwéZŒÒµ¯ˆô#ÐFb×_Aí¿½­KW–=£ŠÍ~¤çË´Ç „b¢ÇXÔ†.bò—ÞÖ ÿØò€ÔÿJ‡Ï‰„êømYxñ¦L0iÌIņ4þù8%+úô¶õb‘.½Óöªºx³¸`æ¤>³œ.˜‹VÅ…õb‘.½å¢}²Dت}¬ÿï_Çz¾ëØ7æ$=ù÷¯­l[¾ünM pËìâïƒãųt0æ$?)†¢&ÄÇ3ëúðò»55À-C™ˆ'C¦Zù}æ+â“N‡îÌHùPhül7ÿh­HM~צ¸dNñœE|<•Ù˜“DjÑ”ÀÂ+‰ï½ŒX¤KOÖÝ­ßïÿÒ“ètøo±žÆœ îÇ— •qJð´îð^FB¤CïtQ_sÁ˜1'øÊétÁ„\ô&.¤—‘éÐÛ\¼øŽƒ>ˆM\‘ò”=”‚°ÖGAˆ²+ò¹›<ÏX‘ìm¼¿‚x£šMU~×f¿kP&â˜Ëû¼;nm¤ê0d@çdƒ|ÞÈü‰*ÓzpÓ"œ*‡´ÎJ9±4#<§ Ìsxßî¿þï²YÑå6Âð~®¢—ÉÂíÖo·Àxáã`pɹƒã2'ÛÏ[RýIšñ£ç+Õ[R—J%èÜÕÿ$êr^ק̈d³Í³œçEš Õ˦µF ù®ËTfD2ÙG ùÎ+ö6}¬^6-Š ¦ [¥§X®¼beF(‘°ÂÃæ y½åÜ×l6àCu6ö^™‘€²Û³Mç yÑÞ½"˜•õ´éÍQP«­§³õŠ Ì“qóúyrƒQz«—E«W©¼w¥¬„í‡óÞA”4w2V/›ÖvÌeí Œh/œ÷lê d¬^6­)×-—¥kT pÞºF^¯Z¤©kÜTi½©ÊÒ5*àN8/]#/Rõ]ãæŸDqYr€º!É‹¼öT7èPæÄvS³æ@~BÓY O(.ͨ†ží'42gš*ɘC­ O(R Uƒ¼ãì<)Þn‘<$:D—ö2OƯ·XHñŠÞȺZô| ¨!‘c¨}ÿ›ƒ +ÙÇ ãÃÓoeg䑺šôøƒ\Ú…ê­Fh|)t¨œñއ›8@Ï +ª?j!CçcÕÚBˆ—†0ê°A‡ð%Ó]‹j!CçcÕr_"PL±NÙ Ð!Ô;l²î¨Ž}6˜‘!uµèÍ1ćcÐO¯Ð!|ÅËeƒŽ}6˜‘!çjÒëËu¶ÑIaÿøK ]žÑ) +3‚Òâa³ÆøE~®Æ3[ðX}lJ«~̪ŸF(ÌHÆk`Ö¯7ëêõ÷>Òù›Ê¬g³®]˜ô­9m»µ›¯]}lJ³>þˆëÚ…y’J„[?o[¿³á1{Ù´z$*Þ&G˺û‘Ò#<Á˜‘'ñ°Ycü¢z^JzŠZèX}lJ³>îQþ`ÏžhÌÊ-?kdȕғ…ŽÕÇ¢ÔõÏ€pï~&—Bôn¸d‹cFBÏ.›8ûð‰ û(±±øØ•V}9}¸ãoÑÌ“+ÅÉ×5ŠàùÑ#âÇâcU"ý†²}7|ئ àÎáiÆŒÜ=½uÒÍù×AH- С8ØT&éGs/ˆšœvS$í¹D1 r@œ,:$ŽÖp´Lè“C¿°pünã>ª¸Ïâ¡ÆcøzûI†³tËï2ÔÉ»ûY¹X†(c½Æ«b pÝò$!¤ã‰»Å€—¡ÎßEú…‹N¸»A¯ð”ÒŸ ½Iº (Ÿ=­Ì‘1Äû¦ÈxŒtú&1颯CÇ/u]Aà÷©³n¿hãFí¤@lB^×øÕÒ´jE +ppJ2u˪eÌ#™¾ILºõLwšV­HAŸžÃ÷s¢´¾;‚+áßoÿ¤Óû¥p¢¦Æj™É¦k yÓ}>[£…Ͻ\VºYrÍd½»Öpa/ ÐbHgƆã¨D¹a2_© + +£Æò¬À6RÝ t©«s2+NüÈýBä©,Å—ƒGT½lVjC=qKá ˜¯Ô3[Ñ?°ûf‰wš>Ð}Òg¯ á›=™*ÑôÂ…ƒÏqá_ôv‚œ·MµGe8rúR0•¢BCh¬J]‚4‚á2jv‚œ·M•‚ùð<¸´£†"מ÷€ ­ËmÐ!\Ò ¥ç˜2v D˜òÙž‡êºÙ)òÞÕOóå4ëFOuÖqsEº¯ÛxOjÄh:†7Ó=l¶2d]ÆŽõ/ê-•™Ç´{î;¯xÉEŽ)ã#õK˨gx(ÂC›bF1•óŸØY3»ö§Ÿ;f*€¸Ä©; ÉÑã¤Úz£¤*t(žOAéf2Aˆ©á Öj0+#æj“[¦8!÷%*û]Và„b˜#aòêѸ‘®³Rb®ÉIDŽ“†ÚŒ­|úÛ€º÷þèŠõ‡›*±à+½^:;EæmS]‚¡ô“`o¯š +'ÓŒ L/rf¥À<-ŠŸÅö³˜îžÍÔ:ã)Èý%í3=|nG5Ia›¬ˆR +}J¤Sçì9w÷í3Ÿ­÷ª=$e ][ CwÉŽ +§œµÿíì™·Mõw +.îß”Òøfïè ô-N(´”îÃM€Š-¬d쌳rÈ|MŠýf2xצaԆ怂û9ŒFÍ¿ršf¥È|MŠŸTüò{Yæ+¾e™«ÏʬŽÛl_ñ-©œ¥2óøöœhSÅ×´rõÙ1­ãn¶«øšYÞÒ˜yܵ?¯øè÷žŠÆ' Š0Ú²‚°à£ +s>2éÐi^£™|è›NVŒÔÕ,7:Ce …ŽC%:sõgh +a€B¹Ÿ‚Y1RW³Ü'ÕlÏ3<ö¸”àõ¸˜…Œ–¾_Ø +‚Òèÿlª œ \¢ããì™·MµPy=à®ý5¥Ð!\¯©w>˜(˜Hï9g4ÆægÓûxã‚]Wà>Óï×…noÙ/Cº6Õö«=½#ẅùÚ4ûny¬»Ý+q(¼JCº>Ù-ÔñÛmÍ˦öéùÃù£‹âË/ÑE¡÷î=o„õ´é}rŒâ^®›61 Ï W‹7¥p¸úsòvÔ1”ÿû¡kB¦*xõìÏü¦13eænUç‰!zÇC¹W=£ž!ë/Š +÷K•‹UÌŒ™»E•BAã8Þ®ôNu‚ÎÜí !¬õyž48ÎxdÙŠg<%²nÃð°ÈxéÔ› +–åàC׉^1D7Fh¿ûŸÎȺZôz ™_w®Æ¶û¼ÛÄŒhéÔy®ÀâðTg2†êcSZõ¥°"Îg®«F´d:}­ªxùª:†êcSú´¨–›oÑ+2æîQ•}\êi!Ð!º‚ÐÚÄ^äëê…ÄÙP?»ÅæpÁeªa¤^J N(•ßÓÔz(害•ö´+. ¿¨Û~tixOû1À´j#@ýìz[õÚöCà„®gÜ^¨… ÙÇ®E!ÔtRa¦Ö8êNT´ˆO_¶B‡B_¥›x'*úص¶d*UW aÀ ѧ‰c€RªÞB†ìc×êå[®¼FS‡-Ï\>ñF%N™<»;›'äE·æØq³R"žv½~+E™âJŠWÑh[•Á·IsBz3BgTMÆP}lJ“>.çF Ó5+SïU_‰Û³¢žv½9Š ßB׬LI|ÎXæ(„È.˜IšMI{шüíË.$½ÿøá+çËo¿¾¥ãëoô÷Ùúùü&ðµrïŒQžé~ºžˆÔ×÷·?¤?þŸòªÉŽ­µó· +oÀ>€ø]@&™~YEŽßþ§)nwì™]¨u I¥ÿü÷Ï¿ØÅáâßBÌË.P7, Ïöo3 ØJï㻣˜t%õÞë\ôi¢ÈüD1½/[´Á,¬–ß4õy§@¨Úiê…BÊhžÓ­ Ã-Š‹!,¬¸+yù}Àž9îÀºÄ%Šƒä’o‚*ƒÌOñ²­ä)Ot ­Æâ'"ßÇ]«WŸ>g”4(Ù `#‹ᑔÌÁÍëãA8Nýxæ à]¥&´EÄ•Ÿ€ŸOÀžãzµ¶ÄaÛÐjOÜ?žSMú}Ñ~wÔÑîY™¾¬hÞ%ò~³15çè¬X$f~˜’‹úL³}˜'¦è|º´ùý)Í‚uŽ y™fPšxóÕ…ØÏsˆøkÔkxêh!¸ÝŸ7ÐZ¢+{%xèÔPb[ê*)…6<`@§¨uŠ¢ œ¥r“¢…Mt¦”ý­>R'·h>’×ì{ ÄÁIDÆ·jšjžw[èbö£ç û”V-ÚüÈZ/&½ÿx¡ŠÿF=ñ3Í‚b­ŠUÐ&<:„ÚFÍWªµLÔW¹¿Þ”9¸á×Ü”X·©­KÉOtE%W_ãDIùºœIl½fqÝ‚_Êžî-Hšnƒ.Z3ÔstüߘC>µ¼Í '2…é¥4H„%ÑèUÚ%WSq>K0æóÇç‹Øf¥¤<ÞÇ8_¦H‡?\®¼abÇÐÒ‘ã€êdý9Ð0_>ºD j´³)H—2Íæ‡ý¥L͆ú£Î9 Ùs¡1¶X‘s³õY[Ñ&Ê-ž¯Õh&~ð5Æž$~D¥–šI^HÒ¨ø<!§`D%yé™”¥$íܪˆçf§×òJWKöë-»ŒNß¶!ÒpŸ$“j³CšÒüâ@˜0šhÚü ßI²?Ãù«5çrüHØ;ûöGÜàAÿv°f¤à †ñOCFðjFºÕÞÜO8E?‡à3'=¶œ4œCFP›q㤷´7¤Æ.ÙeéP›;-.=ö¤Ç£—â-“-)¿Ãv‚mްoëµ}%/^QŒò—‡êFqM×øU÷]vV¸HÿvË Ê`éïü»ƒ-ñDe.QÀ„ÆÏ=Å횇epAÆm$î¯s^?…Û+ÀX ˜x˜$·@*äæD_©Ï7 â±þ–öDa{’’ÓBJþZ¹58±ÕB\ ÃÖ"{¨W- AªNk‘›K”ªÓZ é«fµ•ZZüU‹@£¿jh˜Iµ·ˆ\ãRxRŽ+ZZ‹ý®åWïªÄð¬Îå(ÔúÌ´– ‡á*-ŽX¸ª£{퉜ˆ¨oM½®¤™Z4 6µÈn›Ô†©Åö*ÄÍK•[ir<ʵù­(i n†Z‚¡ ¼³û§Mñ!H¾\Ŕڵöqðé*¾‡”œèoŠX¡n? +j¢äW‹Ÿ±kÂßÒ¬ kÛ"! Tì»c¾ lø|;¨—[NE.aŸÓÄã,ãÚ8Æš4D-qSËxHëLS ݈in¢ÂM·5Œ %Ê`‚(ó¤8M9å*7Ɇ2ñ7„’M¬4¾ñ³:±DBÈ•"†æÇuhÈÀ¿–;~ÿÙââ ½c¡×ë÷]_û"Ž3±Ny5–ÊqacèÕ©é7Sã1ÙÄ!rö3bÑÏIöHLO 1Åvb›©‚hÑÐGÆëçˆJWõù$líùÒ¶;ºä펫Âuž‡Á©p›´¦pïg… í¬ø¶¿+3r—Â]<í`eutc3X?ák°òâ%ræ{°M÷`ŠÜÏ[è`ê®ÁÊ)×`Ýã$³Õ¢¿¯ö‡ï&,Ò=aÆzé\ŽÇ5a9tA…›LXó5a9#÷„5Ù3ÖdÚLXvÛnµÛ#ÚNµËhºælÌ5g÷pɨÝmeÔ2šÃ6g-5m夨Q‹pù{Ôrâ>gs¢¯æ¬¼†Oójã~|t´2´Ë®:Öš‰;Õ&/£rƒQÕlX¸ÅŽ¿û¿oêIî[‚™ƒv\üpòXÚÍ 0è(¯ñ¯òROgA=Íß~§™›µå¦ÅÄ6”QjÝäoÿ¿†AýýŸŽ¤îϘ €[3ÓG1Üsûi©iô|‰_1%þ‹â×ì¯wjaÕGÓ4ÂÇ y3‘ÎØlïÖL 9˜Œ¯ wÏôramdÉéz…#“£î¨ô=Ìùi5t4÷>òÝÑÒÒSïªÌÑW2ÜE¼·: ©uÂ(ùqYølËg(\„ý"e9 ; *rÙR¡.:£TܰK†§°'nôóû립qHƒŽVl+–R4oà¹Ë—¨#úQ˜s#6ÔÈ€ àKžšÅÊ_°„ýF æÂ+–óÌ0TİSL™ÕƒSíEôCB벺„/XH´†èFÛ¥Kzˆ.]bgtI÷péFkúaé’äK—0 +=/¶S—0J—.aÔoÜt ß½ú1…ì-"ñ¥K¶8©.1èït‰ùá]¼ý¥K —.éñ8uIÝ¥Kz˜O]Ò3rº\©[¢Ä¦y‰’îóI”p8oQ”êHž%•[”l±RQ²Ùª(ápˆCÀˆ e% µK”ôì¢ä)+'úJ”¼î Ïå· Šº]uXûòtÖ!ЖE…kÖ£Ùj¾S@K=7ƒþu'µ¦4†s3`4Ô½üXi(M-? ¥\åe}–ŸÆHKo"¿+»ù£w%ú>ÉËÔ’ãKEAµ>8N«kÖÀTõIÉq\óƒisç*0eêͤÓÔ§>=ÔÛy[±¢xm ŒL±i„´Ð6;-4öY¤ª´Öäã¦Ð8ˤå'µÆ/"]µ†;9íZn9Ñçr{T°\ø¼ã|TÿJ!bXðû¨2êR‚Æ«~ö30z<ÿ ó ߯C˜ë”0{K(û¯K¸LGãȰÀNÈM„æ +`8õøÿ€Mñ—†ãȰÀÎÆM*²l +¢æ¡äÏ­C#Ãi;'k4š ‡ú!»q¼eõè>ÒSÃI±Öa:Aškš:rûÄÈOQúHLO 1Åvb‡éI¶qH_þ=3ˆyÏBâã“wa–týÖOÜ.pÒ\}Æ’„ÚÚ]’ãöóÉ;ÎEu=ÀÊ£” óÚfZåÖÇ.ã¶uña-(„(’Oîab– §@r2Þø» ÆÖFKæÏ÷Q€Tׄq»Cta%˜r,í´Ät;=Ž%îÓi˜o»ŸzÀû¬¯Ï a¿]É,‘Ǫ›yIüäŽ2Ù+BYšƒÍsëµ÷À;t=úÖ0btÔô?Ê«;²æ>Å\@zÜ—8÷‰:™û.l$ø«ÕΤ"š,l…Ë•p©V¾²ò†Èó[£²-]¨ö4­6$.öpsH \’ЃJ•¬ó–-F±Lc?½f<…À·å&.ì;kÍC‚Í¥ugüŒÑÑz¢޹=J¤_#°uâJ?—ôt;ƺã(´È†3‹—ª‰,1>œªÊ8¦¨¥yÈÎ2l;KôÊ…£º6$ +mà‘Khf+Y-¨Ô%¡=Žm+Ûd¢±+ª«CÁ|B'I"¾7i¡ +šê²åº4Oû𔹠}ù‹O³¢eý+@G +vƒ¼XP%)uÕ(mŸ^Ülä}Ã3ìa.žª¬ô6²0ÛÅsã1{L†w’éÒ;É:üBd ãNrK'½Eâ•^ 5Ø×·óÜñäöàfÑëРþ½}ìÙÐmÌ\L¯˜¦‡¯Ð3m"—Bùf á°óØöó à¸3€³©k˜…€Á{f@ó}˜-…<9†¡hkãf„Þ‡ÝËyr 3 øc*ÃÌ?aͲõØ5·€´Ë$sý,"úÀckµ°CNÛÊ)¾¡®Ìüö`åU %*$·½7aŸE}Wõ5]=ek¸º¨ëhõ!ߣՇ|Vò=Z}È÷hõ!§ÑꃽG«ö­‡çWß‹÷¶rwî¢~ .ð.±WvWà‰®rúó}²èNƒ—Ÿ^Y\€Ó'ª¨dü'^”ÏÁ^èñú7éÅ_–—ŸNRwžΚÊ:²8å +6âˆ/‰ú¢°ÛÞ,‰§~ùcsmcÞ;o¹”¸yï$r×^Ç +³=¹è pp-²¡^bØò{Þôhsûæ9o8½ÙF 1æœ7=­ýí Ÿ + ~ÏS·Ö©óla§s‡é³pº/Ä~Ï1è£Qž{%GÎ%N¶ÑBHƒxg¤ñž79j¹ÂGkïtôÛ¶×TR5´PàaѺ ÀÉ ÀÜmу‡L`Û£4g)µÄ¯CËöDºÓ.ì¼a­O+˜bf.¦-{mäćßöÓZFåÀ·dß<# ÞPáÁ1*—ŽïÕtª.ZÇzþq/¢ĹÑGò”þvà )*‹¬„ŒXB`UtÂ~Ëê˜ÎsT)´C‹©L •?GhmEDeâþHP7…L†¢NSÈt©(ä¿QÕYÑ!K¡(#±ÅúZ—­)d IîDQgEêrœL³ëÁ¾¿Ý§ºç𬧠+ªì$“Ém^°›»¶ÜoÎ -èF0Ðt'¨ô³ƒ` a}aqL¶\àÇtï\lÇ@¥kmuÙÇ@5‰=Ïxe¼ó 4ßyÚî<<-ªzaûÃÖ"<æ†Pù¯b‚­-®Š”Þ1£ÑÞ:ïz@y蘓Ö><'jÑd® ÂåÇÑæÐz:Ì7¿ëu5—,×IF*ÊóƒPÉÈ«íڤݽÈý¶m;:e‘ç¦}ïh¡V#ዸi†x:š[“K‹9 šÐ’ÅÞ·í&¯4m@„¢×ʆêì¾7iùª•*`³.LDsÎZãæ«ó\!Tä@¹ÂvÙqUó;é?äG¤ tÉ\“8CúÊôÖ‘fÛÇ õ0`x–ækÀ¬èš #Îd` ÊFCË€– –WøÌMòƒ(ëèɈSðÕsÐÉbÌUÓ=RÂÒ{†kß•Æý>–î]¸DùA£LkÊ©L½*LkðKuÌR£µê%ȼoض5ÕRì^DF ¢Ôbm½¬jB²-´åœë í<‚™¿¹¿6V>¢•%¹Kpâ9dž&4Ký±¦d^éÛV£1¿ß›w:ö;cçµ!¾»²e†ó6³Î¹>ìÿP3Vùyr'+›k D\ƒ¶m}€±3ZO)ßç’coÈ9yx®5æT]í¥ÀqSsÊö°uFº;:h¾ë  ²=:ƒP–ë‡Î ôÔt'/‡Î*ۃׇï&3Ö+—¤Ò."Ã9󳄋Yeå±èÚaÑl}x¨++¿=‹Pùß +ÎÝóžìyè¥y| —äñd-Åã½õŽõÖ;>Ö[ïøXo½ãc½õŽõÖ;>Þ[ïøx/½s<Á䎷§§ÝÅÎ{QßöÏïÎ]ìÔ…ÿÀ%6Ó+ ˆº|ÞùNµcû.1qÖl­ ‹sI9“ú¶Òr!+1íž7Óò©Gþ؜ژ÷Ë[.×_Þ»ÅØÅÁ§‹!gÐm1ôþñ~/4ùº°Ó¿Ãtn…\wFuþ•Pá¥Á×BgÇq“óÁKÀjíâaI{”¬7û9ÍÓ `{¢ó˜'Ôo†ð¬]ç9À:67"??^“PæîL,° ô’&*;Ðek8†Þ†0æ 3.³Ã9$ʇévÓ](‚V¬ëµWô®‹¡2t^IÝb^¿ÝÓùê¤è…ËsÞgC´Ü…ÌG+'í ›5ÞK€Ôòˆ¤PtF<Þë57.Y´jzÉ`WÓ¡óÜ‚:©Ÿ³cŸ­S>„+â]êeƒ;‰ó6Lë~ …sahéì;_KôHëJóûèrGq†bgøfŒÊeÍ®›uî•öq@¶í»¨Dð)T„àðiÍf¡é‘º"ÇŒB´Øžeûk(è'ì)¿ºªÉ„òÚÝ€æiínŒÖ6ÎÍ‘ÀÞTºŠ BZ÷‚dåtYnnç³ +²¯ã¡E™¢M€óhÅä§\ŒíûŠvïM-R§³Åyã¦ö`Ô(Z¹Ž¿$ù +Ë yjQ°$C‹ Ag2Ý;šÜ[?§u mȽüªòZƒÙbÁMIÑ,YF7tbZаüÍhìâ/FK5ö+úg-毼øë/GR9yd»¤ƒÒ_þýìˆÓzd²³’-?ýçoö7É¡ªz ]YÏIx€¬kû¡e°šZÑ8kò6 héÍø- u¶sÈ‹ý½;nÛ¸Ä}?´b>Ìl>`\§Ý¡Zá׆LÅ+¬${Ú4% 4Gs¬·º§ߟQÛ–ÜgT´Tó5aöÚ¥M\BÏ öóÍ0¶™–-¡WK¥¸È%EK¥kh®(4ÿØ’ÉòfR9•Iàñ­âYȦ|(V|ÿQ^娕ä8ÐïSÔ¤Ç \N0þÔ!ÆÑwúþÆDà–ZºÚ“"ùAkÄ®pTËyðu¡qs7íS@J߃+,©8QçLŸüâ˾ð«®@:Œñ½gŸ·|92oî„91™ÏNöE4Š;©¹'ï!š" êCW†Â§³@ Àm'Pªæ‚l±Õj¯4aô8jê¶\o9X>ªÓò4‹+†ô|ÄÃ_ÖÂgk~CyEÏIwNî0N› ˆ\ŒKŸ¾n› ;ÇÏ[Ö ´M? É›DÙ熴&w™ð¥µ%Ó©¢ë h­?WɪޥÎaÆÏ­cþQƒtÍš—, +FÁ‘fmâoôŠt¾™àˆ­LuîÔãd)û¤ÛÄÊž-ÐJªŠÔ£/`&XöÕ¥r%ñ·Ù þVyAjáfÊ»ÝJQÁpø.Bþ‰ Œ¸=ªZ/§¦¢›ZÜ“£pÍÑfšH9×Õæ.•`™¬!€Ð¨ùÄèæ`ë3wÜ;­’üÇIpåXÎA€8©³±xœX­ˆ“úÂ.a+Öóõ¶,Ús žÌGccA—' ÉŽžF‚í¹¶½ˆBÒ“­ö¢ZáÙú¬Bôm¹:Ÿ`9_GÚãd-õ¶8âY†óæ }¯\Ñ„¨ë¡¢Bâ§èsHË*D’µRÎSU¯Œ™oØ èt*“¾1 ø²L0%aÍòàê8j¡æ +h"©“mR&­6À×Lõi ÿ7ÕrkÓš‰Ð2<¼T¹À¼šŸV†éÚ<ÃÎw€oŒçIÁ\½,FÖ· Óý4½xC?DIJÜ1¯'V^ªr’¹9­bqSxÖé8˜€iÙéÆ@òÙ¡×Æ;5àxžÌ…™è~ÃZ9°¢þªàót̃gŠ–Eæjƒ Ñ—;çàxý³8ðœBQxÄÃQÍzrm+†M¨â>¹ã¶Í&¹[šçªÜ6Ù)G0µ†Ù;DAå³*;± ËîÌþ i¤GÁÕŒÇ(Ô¨ubäõ§¢ÍGÇ[ÕÃD´²hkV\KY±>¿i´ßäÞMÌlÖd$&‘(J +§ƒzPDb­¨À˜“c2hˆ>·ùk(K9ÁïåÞ€§Øú òoç#¢?bÁ@Í|ÁDÐÁÚïãTðÅ8Úû8‘"¨³mÉýy;#û6] Ù”lS«ž$bP,Ê3flde)z² Lž9€)²è‚¢é(ˆÁOÒ›ëFœL,‘yrÚDÍ×õŒÒÙPæè4¬ ù±¸®î©‹5ͅʰôD.šÉuÌqðuT6_}kl1ëñü²Ü‘C‹‰9Ø•ëßÇÐ½Ý †±¼Ž¹‘UÚ½†@mš'mç( +F"1I;4#ªƒwÛQxäÀ4ö|€?%™=öHò”9ø†!%ëÛëDfàî|‚ïû>¸Äš\àNt¾þáÄ\¦ø& LC¬²;Ù!—Ÿ&ÌEF'7T™sd é••°öÒɯ $wU(IäÊÀ&µYåbJ˜=€¹yÐkÙ'Q΄·Í¦ZÝ –ÈNæU=ãÑWE×?ÅlFŸÁôIâxž,¥?-æÊÎÈq¯#ÿ8s0½F¡æ`àÓnñª£ŸŸñbÕ l +]çkb'XŸõ b“ÍÚfI/â® S‡r Ùµ0o …oEœ ìj„Á­,°×1Ã~Z³µcõybcºYûÀ×1o^^óq<î㯆fŒ²½ðXbýúû?œ·±FϹi¿üïè¸ C¥ê•e¦ÑÕœ½—8 ¶1±,¤¼ `¢–mµù ì_œÄ¤œŠa™ÔÔ€§’ÇA,âÑffÚ¼cÔIÎSüËx Í–QRÂeL½÷æ‘“éL—ÒhâÞm„§Àpk60-‘¢šÜž^TÌOªÌc¢Áõ6 B—ÌIâŠêÄk와h²hr™òÏZ w•b1þÜ™é죸RŽÇv](ªx¯±–•E{O³4u-n—…a¯qç-‰`1¨º|ÎÀú­œ˜$Üuý¼‡&vrª ž„4Däìç6;-üQwW`:}ËmßÃ’Ç+Ã’šç”Ï].mð[¢×å=ªäÂrñ1ù>0ØîŸ^†ÒJhɺãŒ#®Ë—¡ñ#_öù²ÐÀw¥>]òo¤×FÚN,•Y['ZÔ1’ÿïƒÿ¡g–• o‹p$¯ŽƒL&xç××®…íö¾(îåÇa«PœAš1z»‚”vû/Át,ê³7°¼Ð¢x +¾e²ºÛk!w’þŽ’ê¶ãDBE–â˜îp#5ß™˜z¨R¡R¤öR¬eÿ-„Bu{#N¬5”‹b°2 À´;@BB7LŠº _F?¹d÷N—5áïÎÑÏX`E—|aÛ•?)9´»ÈcÒ°V”vák…ôÌVMYÛ˜h[kM•âç0ãT—xÕag©r3@Ù°àÕ +Ì&}ÃFPѨXÐq¬7£½òͼ”ª°¦dXÓaÂß6cÀŠLG„*M±$~ïrý|¼êã¯3µ+‘ØÐöãOÊâ(ü©{××ÜøÎ×…u' ¿/´2áVÀrcZq½_u˜'MGݵÌsŸà«ÅÏ š!\‰š©’Þ&ÿ kA€5YXŽÝÎÍLt¶kN*ƒ‡šÊÕ…1†ׯ¸ÌaÏ ÏÀÒXǤSK+y]G‡žkÛ=w™!°k÷Ó P°\®H~lèû¥ÁBüɼû¥Æ‚‘¤z$›o?º?å 9ºXŽ!’Y Gvm°Î!j²Î¹=d&¡ŠÑt¦€²¤|¥ +½9#øÃ:µ+»M¸‡ñ ÛÍ/k{6Ôk˳@ÖHð–Ö¶gGÏ3˜$ ðq®‡ÍžCrÍØ$ÄRÌšÒá‹ +5HM‡„=z@ƒT“_wGܧQ´ˆOìÛ„bçÄÏ ]‚µøÞ___¶ãM+*p.Dç-àzûý YèéЬuö'È[bïP¥™ŒyŒ¦Ò²Óùb ?ÉÔÿ†´çKñl½¹ ôSMò0%Œ«a& ê$a؜ܧ¤=,bÖuE@ɦer¸P-F¬ø†Qj¹a„§îÇBY¯ÍÍ¡î´urǪ¸ÆàÏ;ë ÑñËfrН`¤ì#V½0éãèÑJ\ñõ –ÉÉxãš488•wp”*¨½q”â|_Cïúcèƒa-iA´§æ«^¤!ûØK12BÈ·Ãг€PJÁ¡hÉ”ØuzcÓ‡.r€h§ô-Û¯ÁyC—zb®j Np5À÷¯C×,öºÉø¼¾ôͶÁG¢Õc«Çá±Ò-Úxe·õ0§áfƒVª‚ÉSŽVŒ›Œ£ +ˆ–×Ï÷II¢¤6ËðzÊE”bU ’m!Y`‹*Sn°{‘e¿RÁ±j4IŽÕl1îÛ¡áŽêIûôžUci뤇X\o,»BÛ§]&SS¹y_žc˜=³œ,ÞÂ×kþE0V®Xb8†˜ëõä]~åçMíõŸˆc¢q{Oä +ã…@µÞ'Ûh[Ì\ý+ùÉÝ£X +dÝ·¢ÓSœèJ¾í If¢óxKË.`3ä%m·¡ô”¶_Ðc$/u䃣Ö';žA´C4r|@¥Mn|€©5®ø~A„z9­ý‰_˜Ôèý‡˜„%è'Ln¾bbX TkœíʆõF‰Žµajr9F¥‘ֱ¦à–qÝAs*¹Žš‰I> 9–£)8Toyn˜˜dß^ÁMfZ’ÍÜãžMK®^<=þ?åUŽ-GŽý>….Ðz$¸Ÿ`üÖ!ÆQ9sc A0ë/ê'C¿"‘H¬€Wµ®Ù)"ÑrÞ½©Ð±ãÓ= +Fc¡c5wv9bÂ9üD¸;ñ5¢¿%¯œ1¬?,ö&¶¼úGýÚ«%Ûõöa¿öÏÀ.õbhpï8$–5kÒ[а¢“ß•éß´éßqÊ{§†ÝÓ›õºU¼+oIÃΖz4foã/6Ò†X~0¦—ŠÇ¸ÊŒQSbê}1ˆ”M£^#~€µqGîX”â/ÁÜÇ0Š&O¼vЇu-­ÒÌI{?¼~¦[øB¶š½Msop{`²éyØÀ¬Çôö6ƒÙsL·§Ê±§úþòDïÙ`Íþ² b\’ öÎwïÃÅf£ ã²½ púë„ù_¯ÁÊ~ŸuæXþ6­ Ükr]uQ^ou‘“FåCóŽÙ‹Aœ’謶œu`ë%[Â’°“.ľŽ0&G8c¹¹w,‚ÊÂÛñóã»~G3OY‡NýLß ÙÑHz–ýçôö¯Ì{Õv;;B¼÷R÷(Jn×Ê£óñ+šÛÌ+îÏ qÆ‘Ø$Ex튋`dúqoM@QÃW@^IÔâb0©ã0š£lIOÿx›œ[ŒÐMû¬{†O·&îbE0eÞW×±lÝ\Ž]ÆVôAçáëÄÃ1ÖΑo¢¤c˜òÍÍU…õ¾¾4(¬qoi¦lA i–ÒfJ¸ÓLéä`»Årå‘fV·NN9¶€h<Ò ¬žÔkšµõH3ñ½úH3|Ìé‘f`5=Ò챦PXV¿å&ŒÒìCšé0LHs”tì´®+œXZ¾Ý19nôc`Ê”Œ $ZÆ‘<÷üéë/d¨g^Icí$ßzJ†P™äÑ»W>Íç¶µ&ëúÓ0aÛAfùAnÊÐߌÐ_IN—`ÿ2g ¤ùÖše€E¸ýh¸<¤Ö_ŒõÑa°lÅ ïJÇ-›) ¡`«tá8˜‰áÿ ™6^Ý˜è¥Øj˜ê‚íIˆìÌòb³Qò‹Qì¬ØG`œ:øb,ã’­ìbÊÖ‰—&v¬óÃmÊìX'"ép +2·–9ßXÓÜ*½ÕóQÅ(WÁ:À„ßÕzu.Žnøàqu?ó°OJجßÚvB±Ø!>bÆäà ¯‚#ì‹¥B$žíåvz÷ Ω´M›%yl°Ø7b]ˆ vƒjâ%BÍÞ*BnìàÒ ±¦ªEfLÉŸkMmOäßëš3TÞt³ÆàÖ½åVæ&½õÍŽqUš}õ ßwε ÔÓ9]'ú~ú +X˜üÉ(r›×ioLû>ß—}›¿Aó2¦Iºäuü–NÞ4facàØîEeïz;å·XEׇ:[?±— Æ0èZ\6¢\ë^i®WÄzv2¹>M}Ø@Ø ‚}ÈÍ5Un„rèiÌ+ê!T¹º¾Å+º,Wít‡ê;K˜w ïjöÑ!-?68]‹;»hƽä¦Ñ5rï}ßá5rßè#rу¾a)¸èPúæéºœ¯¶Ö蛾åé; j§oš>1œ¾½Ñ7íƒ(зpñƒ¾éÜ+Nßa™pú¾å”¾ùado:G˜³7þÐ|{ãÿ8„½9¸3R·G;PwÀ¾oå+™oÔÍNÆ(›½i]õ)µ}Þìcc­L+v·²÷Í&o:7œ“70Ú€n¦ËÇ«Ñ(ÛÍ;˜¸«äÍXz÷-§ä}ëS‹uæ_ýþºó¾‰kÿyûÓ@ÞqŸßäÍ‹õxwÀþ ãÑŒ7òæ]žä ,°™ÅìÜNތ՛¼o1%Û[’r8!œ¼Ã qä÷Ѽågêa=È;ÜNÞ·œ’­äöAÞ1ê!TsDææÝz<˜;ÜU§[°²÷ÈÜá–sæ¹ßÌN9gîpÊIê%ãº÷ïÌJvN¬$£=®¥ó´þ”ÛíuA…9—µG°Ù›­þúý×SÛ—çnÌž”†FfN6øVù¢‚ø^Gg :J ‹ í)çÒÀý³ú†jâ`H´2DzcZ\5 !³ˆþà!ÌêÂY*7W¡­+uŽ/ŸaiKe¡%@½mõ ñ$R«m)3<Þõ.s‡Ð¸}¿8+Î*÷?Øp Ëlú‘ü￟¤8éã žâI}÷Ÿÿp+¥:ôZk©h²©¦:C‹¥À¸¼D®dÌ*äW€m“è˜>ÇŸ`¥ð»ÀfáÆ¬eÃÆêS¡¾ø³,–»ôàß|ಌ-jò*îËj¦¦^U¬T»AÝäŒl˜yêš`•ž$-K$¼y‡÷ÓBÅu;Š]E1¸y—sÉßx)±Å\¯ƒØ<@¨”:µTP"ŒT‰’”kÍ*TQ®•£Éío¨:슡ž÷‹iÀþÞrdq(­±¡<8’ƒ,}Ú2H@Z ¿¡Lˆûƒæø­ìç,ÜkůÃmC¹ïÅP­;žŸjeßåÂCOøôY­&Y4 Uo;Z«Å0 p!×1-k-YéQÕxÜ—a%XÄB`sÙ‹Y¶–†u¢¤^…½’lª u°@$»Cu•&«_CIÖM{›³©Ôì[3¯®îÿö@Pçõ'@Ç‚»@¿Œ(_HGäw¯Ï ÓÀ`Bߎ¬Q•«6ø/ºúëœs5žñ/ÌÊeò<áa%œ)Á @sj<~E°óÚ-rŒ-rEÿª±áêhŸ3¦V!UTøl=V!0 &//©B`µÍ²bë9{µJ›Icé… 3£—Pˆ ~"Cm\…ÈÊfN%"Û±úUˆÁ\)DwéT ,:W! þ  ·¤®Y™ÏˆÉÔE¯FªÝö@Kæ;ƒ½lp%#£ºYejÍÍP’{QЪóšÑœßeÏ'³êèm¶d‰ E"!¢y›Ð:mB"U[~Za²¯%ï÷ ©P–ß­ ´œI ^“MAK:Sïhõ1Öz“ã–n¨"8QG6d¾Îì:sUÏvPyPz;€ØmE#¼Iy‚R öÁ.‚³m¿†C²õ«ïãs¸7y {=ÐJS÷ë÷6›J/> .ô· ©Üš¿¢§þœÚ.KÃsÒQõz€6q~=`MË+–˜£VºåÒû§fÌ’B÷¢,5?™ø9æ?Uë¥$TÃè(|ï\å tâðw'dÌdÒa ²rq0Jyõ±[a©L²V½ïôÒtQݲµ9ŠYY µ”²^¨õ"MÛ‹•I"®æ¤6D/‡´#¢_Ý´Ín¾ôXöGå y¬’4ïhs‘-i&÷_ ’ÆFñKû‰Ë´ok›¬€¡xÙS0„ËV϶ˆahžÛ÷”mHª7xZ°ÚËbÅȆž¨ô©×£ÅíM½—-›=‹Ç ®”;ÝW<Ý=fýÁù_¤Ÿ{%,ÏaÌæµ¦Fc­(ÌM—ÜM#徃aåŸ÷zÃà²NXºÖǸ¿‰"ù¡òä°¡Ój“ozRVùä+¡ÒÙj[Ǩԋ‘ߨš9ÞÀ‡V9P›†¬yW¬ö&yËf ˆe(S<»…Í¢´ ø?åU“^A +÷sŠ\ ùÚ=Ç\#¹ÿvªTÛ~o’]RÍà +‡P!Ñ?¢RËP ý…$Š §`D%9é=)w4$içÿ/ ôz ÓíhÉK?X»\[׬Ü`eP[Û1¤Cš'„„ÑDÓæOøš…Pxúqƒ!]_¥ÿhpÝ ôóOk—V +j_ñnH¯f¤[áÍý†Sts>sÒÏ–“‚†ÓÍj3nœ€ô–ö†{³èÑfÊI‹¥GOúyôR¼å`ÀAKÊïf;Á6GØ·õÚ¾’¯(FJeÕâš®K$û.éO«ã0Xú;ÿî`Kœ¨äLhüì)– @h×<,ýåeÜÆÀþ +0çõóXØ^ÆjÀÄa +0\ …³ Kr(5ŽRÜ­¦6zÓ"Ιät½&ê>®ŸgìÕfÂP²éy]ßêå–©ÈÅïs:pœe\Ÿ±& QØÔ2RÃ:ÓG*¾["1ÍMTø¡é6¯†±¡D &ˆ27Áç¯CN¹ÊM²€¾Œx¦€P²i‚5Œs"~V'–‚ºJÃàçá‹:4¤ç¯åŽßÿlqq½c¡×ë{ ÅGÇǾˆÏX_9È¥r\ØzujúÍTAÄxL6qˆœýŽXts’=Ó¯†˜b;±ÍTA´Àh‰è#ãõsD¥«ú|¶öûÒ¶;ºä펫½‡Á]á^פý;…k|?+\økç`ÅÙî¬dt +wñ´ƒ•êèÆf°^|ÂÇ`åâ!ræs°Mç`ŠÜÏ[è`zƒ•)Ç`Ýã$³Õ¢¯ö‡ï&,†sÂõйŒÇ1a:¯ÂM&,Ã|LXf䜰&{fšL› K·íT»=¢í®v‰¦cÎöÀsv—ŒÚÝVF-Ñì·9k ¬iK”I±£árç¨eâ>gsG_ÍYy Ÿæ9ÔÆ>¾pke:i—]½¨5;Õ&'£rƒQÕ4,l±ãßïþ/Æ›zÒ‡û–`fЂ‹?"àï¼–vò :Êkü«¼ÔÓ½ žfkÈ ßéGf³¶Ü´˜h2J­›üôÿkÀ0È£¿ÿÛ‘Ôý“°õ÷73}ÔÃ=·Ÿ–šFÏ•øSâ_!~Íþz¦V}4M#^˜7é ÍönÍšƒÉøòr7ð|A/j#KN×+|ºbºBwTú„sF~Zõͽ|w´´4ÀÔ»êst5n€"Þ[†¡uB4¸qYøl˧/,Â~‘²œúÆNAƒŠ\¶¡Œ‹„.:£T®a— OaØèçù립qHƒŽVl+–R4oà¹Ë—¨#úQ˜ïFl¨‘.2À•<5‹•®` û‹ @ÍùW,ç7ÃPÃN1eVoœj/¢_Z—}Ô%¼` ¢5D—m‡.é!:t‰ œÑ%ÝáKˆV?ôÃÒ%=ȇ.! +=/¶S— ‡.!zoÜt ï^ݘBöøÐ%[œT—ôoºÄüð.!owè¢þÐ%=w]ÒCwè’æ».é¹»\©[¢Ä¦y‰’îóI”0œ§(êHž%ŒÊ)J¶X©(ÙlU”pÜD‰!`D в‹Bí%=»(yÊÊ}%J^÷„çò[ŠEÝŽ:¬}yº×!ЖE…kÖ[Òj¾S@K½oýôKjM+hô÷Í€¨¯{ùQi(M-? ¥åe}/?‘–ÞDþVvóGïJô]’—©%ÇKEAµ>€K«kÖÀTõIÉ1®ùÁ´]÷U`$ÊÔ›I§©7¦>=ÔÛy[± +ñØ‹0™bÓi¡mvZhôY¤ª´ÖäpShÌrÐò“Zã‹HG­áN—ö +-·‡ŒÜÑçr{T°,|î8Õ½Rˆ|UF]JÐxÕÍ~&F?Ïý<áÛxðsfo e÷u—éh|2l°²F s0œzüÁ¦¸CC‹‹ñɰÀÎÆM*²ÜØDÍý:BÉÝ·u4>NØ9Y£‰„¹p¨Ÿ`7Ž·l" ÝGBúÕpRl§u3`˜kš:rûÄ‚›¢ô‘˜~5ÄÛ‰ÝL'dû‡á˽g1ï($>>¹³³¤ë´~b»ÀgŸæê3– ¡­Ý%]l?ŸÜq8(ªëVŽRæµÍ´ÊÖG—qÛ:€8¿HBÉ'{˜˜å€¯@r2Þx.ÁØÚhÉ<6° uíAg±;DV‚)ÇÒî–˜nwc‰û¼´NÌÙ×oŠ=àŒ}ÖWg†…°ß®dJä±êf.‰Ÿì(“°"”¥©lŽ­×ÞïðêÑ·†££¦›KH8ŸRwY¢û†Øç÷Ìʲ4©Z>9­x˜Üƒf90„Ši¼:k™–¾®«§€«¼Ü²\»–Ï”BÉvBI}º/çL8¯â™ÃÚÖ¯ktü5›–!üðù™'À«CØu¬˜]ÙuÃË©‰äa|)”.–±ón–æ&;c•íÌó"| ?kƒgj¯>r‰'¶ãUtÔ%Ñâê²Û¤çØÇÁ«ƒG€{ò‰6J¢î×ÏB¨OjÛër ¡Éi£ÌZ”/2ÜĶ -kopøK<ŒtÉ—©QZœÞ9ËÈ{gŽì* 5Î@§¬´ 3-ÄVãœû˜Ý‚LÃ3Ètz9³Ã+*AZÏ g¿‡7w‘x/ÐtÉé‹<$·Ûc»ÅFÃkÐ[„?m{û\³åB·A2C½"šò—î0¢‚gD:ê;-¢~ +Q¸ˆÑ~^-3+Ã,´eÚÅ‹šŠW Ï:{`ˆŽ© ÕÌçGC·Ž/‘žhžîߎ·>ŽÈ Ãað/=¼² ³MÍè{i".Vhm+< +}ŠÞ ]¢ˆ'zµEÿÂ`Îrú„BÍ#P%Ã’k“_qò½ïõð—ezOÊŒ +ÞoÞÐwiOHB³‰šx¾ð–ôãÏi&¼¬d¼J‘@ö#JÞÐwLb‚,¸1Qiƒ(¤<ãzM-4Ô:¶˜ïŽúäË-3@gAh +cÄ£Àì舟¼H¦´ghî¥ÅÛÔ*>vÁE4GcÛ¸®Îøm® >ÍÜ’‚Ïó8™Ý䚯4ü:Š@]K®¶a¾˜å•“ýj%É?¡ÿi oéŠ/>–>¶í<Xq°åIB‡Ù”W;’\9ôçuîàÿão„œ5F‡GåÌýMćK–ZùP ˜D¼·a4߇ÐR(’c˜ж6ÎaFè}˜‘ßU'Ç0Š?¦ <Ìüt–éeuni—Iæú^.DôcºZÈÇU¶u•¸A}3óÓƒeìl^ÚDeØÛ{öUÖu¼ú¬ëtõ”épuYߣէÜF«O¹VŸr­>å6Z}Êi´údÛhõÉÖÑzD¾&«Ï´§¤Ýçê{ù6û×)wß]ÖÔ%þÀ9÷›]M<ÑUîY½O–½ÓàægT…àtDe•Œÿqås¬(ögýoÚŽ9I——ïNÚá¼xøÖ¶¬Û@æ Üƒ€ ⟄‚þQˆ·7ŸÄ˸üg Í0·Ô9o>:ÎÜ%´¯óF³½NrÙcàL )ÙP/9lù½hz”¹}‹†?¹h8£1#E„9MOº¿½S´îó2,ýê"Sì î0U03§æSø½À Fyr!1pÆcFŠñÁHã½hrÜÏåe@úÕŤØÖaª`–æ$ñ<’½>Dôø÷Ÿß„ˆB mîJðò/ÿþ±žF5ÉR±ã׈ɑ(Ï‘[ÒÅ–ÁÜ‹¯ëQs_† ­E³ë#í³TC&E¶F zNXêó¹@žH£˜t\³X¯&ûxšM!ò0%°›äY +pÊšFà^89í7„ƒçÄÛ[h’PðÂùÇQæÐz:ÌÚj~Ww5—Ìî¸"7ºæ¡\‘WÛ1v“v~QûÍl;:eáë&ó;Z¨UHøµ.VÓ: qu4·ÆN‹ šÐ’9€ÞÍÖÈ+m7 BÑkù +(ìùMûùî*½€Mº0½j–Я¾æ +¡,¯ˆª•e—W5¶ãîñM}DJJçú€›´*¤k… ·Ž4›}~2X¨‡õv½Ìо dÄ™Œa³QãØÏ€–$à~^á37®; ¢¼ G$!nƒ_],Æ\w¹G*XºÏpí»Ò¸·ÏܽËz¢ëB£LiÊ©Ìí*Liˆó똥FiÕ1r2P!Ù<˜mMµñ‹ÌìQj‘¶^ô5¡Øm9çzCûÁ‹¿i§ ­G´²$àê«ð\`cô’:vØ “+¯t³ÝŒÑ˜·ûf+Ç~gìt‘â{)Ke¸hóÒ9׋ý 5CŸŸ'w.esMË‚kÒÌÖ'X;‹¡õ”ò­p.5ö†Ü˜s­¯µÆœ[W{©pܔƜ¼=˜Îaï‡Îšï:(o‡Î tÉõCgzê ò¹–‡CgåíÁëŒ#v‘zK•@ÚEd¸`¾—p1oYy,ºò±ìj}z¨oV~z<>•Pþ¿<8çç=Ùó*Ѫy|¢Uòx²Tñ¸D›Þñ¹6½ãsmzÇçÚôŽÏµéŸkÓ;>ߦw|¾UïW¹ãóíéiw±ó^ÖÍþuâÝw—ûué?p®cZ‹€¨Ë§Ïw^;±ß&¾5Y+ȬÇ\QδcÓ²TD Sü¼Y–/#òŸ%(Ã|\ÞRCS¾|tÊØ%À—‹áª Ûbèã[.ü^(òU±3¾ÃTA·BªÏ¸ƒÿ*>¨ð§±ÜBgÇq“óÁ}æ„ÕÚ9Â’l”芛ýœ^Ó `6Ñט'Ôo†ˆ¬]ç9À: Dq]?ÖIÈs÷¦%° ô’&nv Ët8†Þ3æ 3Ùábå³èvÓ)‚V¬zÇÚ+z×Åp3tº¤n1¯g÷4G¾Ézár÷Ù`-w!3äÑÊI{¦D÷’ myd’):3žFïõZ—*’’|Ÿþͺæñï?EÄ’ëzÞáÑ×`Æ‹X•œâØOUúßôøñ¿ÿH©Þ\ýýã¯XÊç˜ç/ŸMMß–©Ï~A:âTíqš•ŠF&[KÁ’-ô:{ÙhoŒ’ΚÌб=È&ä ‘ð~wJ£nom@¤ñƒ•ÖE +(åã:zí_/ÉÖÂí ÉЃ$§^Ü2ä¬È'ê%º[’ÃBkÕqqÑŒ—¶v\ºLeêiûÖ1ʲ˜nÁ`ß/ AkÔœÊÊítù›’Û¦h,+ò˜Îÿ³?èÒíq¥aù2ÊĤ ÖÏ[Gh»¸ç†öÖ$?R0`3÷åªé‰ÁBÌõ%×Í ¿†%‡;)î¢ð6:°±ÜÎ'Æëí|*Óq»j$ùw£èèBa_MˆÑªÄ¦U×Mµ³¸Ìí«ÒU…´ׇàB:ŸG˜ûŠvÙ§GI²}øàV÷ˆßµ·°Tõ¶€"Ãz~»úY‚‚h:<ýâÍŠ›þ HëÐŽ- ÁíìE¢&Ü ûÑã¨âC·2ÀÑ™ WÈòØcy¢$ª’@,¤RÊat×V$%n¶5/hd;g—(µþ¨ m®“×y·e’§ˆïròg}DIÊër?c£¥ ™U +ê`]{ö‘!³ÕT2AG±+ÕKY\ê‡{õÔ|kQQ/»üåz@\Ébã/Êi[ù[…Ï™å®Æzêª<¹’=„b¨ü籇ߑ( ¡´å3tÞËɸ9Ê ô¼('fè('ôùy/æHSä¬'—zú:Ê¥˜t18hÚÏÜ8;I¢±ãScC¹u™kåp9!¹u9D„‚Ï5تڡss¿Æ`ÛäÝFU6†:ýÃj-ŸAŸ†MV¡Û  N6Ã=/Ne›6lÂà©ì«ÂÆ÷ahÚÃ; Òyªf3±€Ú€dqg¶¸BÉvÚz¢þ¢*~€Fц;ÒÐ÷eÒ¥(0iõ-zÕpáì'ï%—Ì&R·„aÒ‡KfIÜ3‹‰Zê™V@ãžÖÔ]wÔ ;Ô%×<øäî£|HÒÜ3K2å’YÒ(íbU¤RY: O+í?ãÌ©úœÂé.µã–EËߥu‡ÉiMíL*.[ïI}I×O/ÜtäyˆUæ‘› ÃPrn£ø¹ÐcÜÐ@ô½“èR.UÊSäãÖåJÑ ¤Î¶Ÿh(»µí£µªù}±Ú}´ªq…:¥’÷˜HWøc쥃Ãÿí•'(ÅÊ]—½yZö‘ž?‹Íý")[¡†ÇÄ4jq<"‰ï%Q#U,:5ÕÔ—8¢Kí#,æ×Ó ¸ˆcô-¡œe¦qègC9c,ìÍçŽNc#Ùü!.&r{ì~uG”ÌPäÛs1ÒÓTk.Ò¸_ïa&,ªæ Y*ßÄDy?cJJXÅL¯P kw”“çBC˜ƒQ®–3T5J±¢Ì°[d š0êëAc­}Nó™k|n>so‰n‡ñ[Í´ åõÁ3c”{`»ªaZðAŽ·‹ú¾$І7apiN¾«E¬o£ÒuR‹ÒY»,}o…Î~r ¨‚‚¦!Ýjum‡h¨SP.I ©Ä!í!¬VI(~Uµá4ö‹!oÂtùE§ìx^­AlÇl)môÿŒWÉud7 ¼O€ô¸ ãpRþW6.¿ey|±¦> [¡Z–‰¦ MËßJœÌ_4q +ö+0#Zøk/þúsÔG-'²]rŽ}#ýlhÕÑ9+ÙÕÉNk!MÇŽ4–Æ=±³Ž‰ <`6ô4Øßֆ䜠¥SÎÁY··-}öà·-ô8k ý¶»ã–PµGŒò²·ðaÖð°ìÕ›¾6U)^ëdØÜüi3LNfÍá÷æ“ÅÉÂý3{bŸDRv´QøZF£0ÚÍ%ôÌ?7½¤hŸ5hIuÑ’˜"•ò" ¶’#•ž¡y¢½Ñ#räæR_c¼ZZfü•œlɇÅ·ó¡~J¶œ¿/4ûøùR´ ugiìÆ•´3¨9øî—¼ì¿úšbB›q’ÉèýV^ŽÈ›;iÍKÄsôjèµû4IѲ&|–¦ðvè¹?ìâRÕ\ m sïöÊN¡ Ž£cbo«ˆùÜGS’ô4×C¢L’f¼øð—qúálïÙÏ®eRSx–;&7a³g’a ¼Œ­.Â&4Çñs¬dlqøÙf²søk›ÄLwšÈK;ËÁTÓñ´÷ß³deï,nölfò™úßkVWOž²Hg‰ÜÄߨ£ñšHÒx³€3Cô,=fêqr‹Üe#;J€[éŠô£.`¦ØöÕ­ËH’ßÖ%Ý#.-Ü´}Ã|o5eÓá;µ&$̼=êš/‹wS“ûqr6sb³G¡–*ë^u¬ËÀª!%V ×ƒˆ9ÌAAÄ÷N³äÿ·\1¦³€'u6·½ŠÀ¥¬¾­=q%ëùú¥šOžV“õ(l è¶yRœ€rÔ4lÏ¥´íe$’žävØËjm¦géOÝAm [•/`; +_[Úãdoý¶ ñLø¹Ýk©yw…åOä5þú­úƾ4âJò¹Xy!„Ð<]‹®t‡„Jÿ(»w¬N°, X ’0fåàª8HôÁHG±H¢6äUøš¤â yFÿñÈêÄb :¸´HÈ¥ª ÖUübEòVÀ ]Þ½1Ÿ' }õ²˜%¿a0ùÖs\¼¡_XaÙnÎû©‡U—ÊbÒ%öß.«$¹RÏ ‰ ÔµUÇØ6Uò\O˜Ÿ²ÎçÉÚ¤â/“Õo·kê¯.|Ž8x†hY”Xm°€}ºcgìŸÉç4Y +¯“x8²YO®i%¡5ARÞ'7oiÛdªÃ£rÛ”J9ÈÔ–zÜ%]'$ª´éÈL’vgô§ˆFñ(ù6㥞5OL¼þ–ù¨xËz˜È–¼aǵ²V¬Ïß +B4Úoê¶ÌÈVdXIlE’¥¤Iwr ºƒ¬%sqŒ¦Ÿ9~ ¤æÖN0¤§t¼$ÿ¯h Me(ž}+ƒº~ XÔFPd3úª4>^úßGâ-E¦D–v¨Þyüø[!üQ’,uú.Qľ™ „(%ûáØé éY˜5 Xäü 2c7ÐÞýïÅÌîù>*Î$5h‰@)Û¯Ó‰4Ñ£Íy£uª?K‹Š­ã ß¶.Ö½‰$×mÅpÁ‡ög¡òïòøŽš¬ï†Š×Å})¦2‡_øG¡7×ãÈñÆmë$cß{'Þ]ôæg¼ OáÜ`—‚D2´6d«øà¾Žâý£Ý¨œžÝrÍsoòJ* WG pzßšÃ8&a_ÿÙVÄZºÏ°/vjŠyF 9ØEÇ:«Ñâ\Éì}$<Àä7ýc¥bÈ'œÌåI>@¦(„ˆ€sr`J™_G%§±!=ÿy-ÞYnïÍÿíÍAÉoü…º˜†¿ƒ±OEÌ#g\iåÉ‘g–HÚŒùlc<û÷61ø‡.ðÑ$€¼÷ˆ8Æ—£X÷G]»cGý»óñ𙮝3ýÐfú¡7̼[þ~ï qàˆ}ú¡/ìÏdJ7™ó½)ØxzeIÉ´‹Ìܘ·é…°el§¥|ÊŒ–±”÷,Âï0ölUäcš4£Kø©ä›œ¥õF4­Áó¶ä~œRà#|C©d™d¯\›<ìÜz¥> +AO劲×zäG6°¸Ô²Ì¢’é?´0îøž«6áè;q²ìHo›h™}W'J»+hù!©&rHåuõ(ƒ ìeµSÐ2JoêRÇGgH1yi®«)p®úD<¿-w¨%áÐ81¼}ƒÜf0Íåu®\{ÜkHî ïe‚†ŒÊ¦ffutï†÷Œ98Gîø[E>‚Ü"ÈIz­oß'Ä£4ýõ ¼ +Á¦× þâÄ×?œˆíßhÈÆ¥T&odíY¶5 yËÀƒ«ìg$Z]¯€ L鉭@q‡‘…Tˆ®xdêl™ YköVvÒ{Û'‘ÎFBËÛ¦(s«p'¥îÏÑ7ôO2›Ù—€…)ÏçÉÖÆÓb©íˆ÷–`þ·æ¹=ÁgQâË.ñ®ÍO>ãÅ*Q¤(tÿ°—DžíFjùA‘ÛÓL#(äIí…sùc °äèÙ7ÓêéìÍ«úš¤™)»nÎ'Hµ PËX°J4¼7Q²D+eï㇓&‚n“š.Zw±ÿLŽÈpÜ1{ 4“òº\ƪ£¯›‚)ÁÎ…3ƒÚ8ØÄ½#[ ;OQÝ…L™áre*¼Ô …Ñ[<¨Ç +T Ú¼s`’C9@žxŽ=ð‘ô>Ä3ÚQÓöµZ(²/kÁ¥ä²â¬£kŒ()Ë2ŠkŒ<–\·Ø®:€¶0Ì5™yÆ]‡€1$»tL€½¯ŸÄd'!Ñä™Ù.¯iƒ`Î~¾4èÏ:»’„Ó§Üö!¥u{¼2IÁî8—zRt¹´A#ûkF@‹Œy™Ê:…>µ6iø§o¦v@Å0¹(;θÄkÂTã|8ôc/ \ŠÅº÷M{„ }/‹;©Û*ía8$»ù!mO õFµ¥Y ÖHà-Ù¶§Žž4<}0‚š$ÀNn„EŸ*CrEÙ"„¥˜9¥S*9Y;èÑ¡}°¶ÕŸ o‰z‡®49cF¹Ò²ÒùÂ@’\sôw¥Ž|\|ûèzªTC“\TUŠ«`r0†UI„`Wrç×Ië4b6D‰$“©œz¨!VäÃ,­œbái¨X(æmÔlN7É«¢7}>¨þ:~èLJñŒtöÖ´0ÉÆ9¢Öhñõ [&'áU×ÄÁTÞÁaªÀú¦+E;øžC›ï÷Çd‡¡-qAôëÍ׬H³n±cÄŠè@ò†ž¥$ Š’Ì/€•¬‘‚“9@´SHìDÏò58oµyL¯\'xƒn€ï{‡®Ÿ¹Šw)_ ÷†Ý7[9‰V½9áaeH´áåõ0§©jW*ƒISŽV„›Œ³L)ˆžíó-YSeRH:ËÔzÊ¥2ÅjD$ˆÔp U{ä3å‡YÖ'œV£¡Ô¤XËã± šZਞ´ŸAïI5–n’"`Ñ|,»Bû-D‡ÊÔùÜ<Ï1¬ž1#‹¶ðáÍ߆µ¡ÅÃ1ÄÜΨ'íò#?^ÒerÅèÈ9Æ`Ê×긔ѵŸ­‡:éø”+h¯‡xmDˆUŽëÜ{Ø$®°1z¨°ÖSR±}m™V¿c%Ÿ™Û¡KX÷yÑÆe)$“o‘Á"É”è¼z¥g=`ŒÙNÛ­(]OÛ'ôÉK¹ÃàhíÊŽ× Ú! +9vPé‹;0¡Æ ¿ÐA£xm?b&5zÿrLBî'LÚ|EŽI`-еF³Ù0¿X£b}Ê5i†Ñ¥‘L¬PSЖѻƒÔñ‘Hë¨Ë1ItÅr” Õê’›rLRßz‚6™Ü’ÔŒA-YnIëEo1Q±®ê)æ"Qc\½)жã»< +FƒÐÑ5gv)bÆ&˜wdðQŸÔ[ôîr±ÆÞ廉òU3[ŸuO,hß}è^%’ÌOÔª^¡bÇå ôÕùªB뉥Íþ&Ò±K„þîGùǪtñ‘Ö«ƒXo‰ºšþ±íÙ쮘üÍù »±Ô³¯S'⸤Ž(ÔpÚÊ¢ „&Í¡1-´iqàx¯RÂynˆ«%iûÊr8:Á…=iÝçU†ž½@.ÉäMiïmlt™Ý)¾’埅Ív‘ .}ÓVÓ{îç³5I/Ëð÷ 7ûê|]ߺ ¬\èœ).Æj²ËÅ5iœÉ’Tl'´¯>©ü’]™?ößÏÔ™ÌÖµ»-7]<~4ÇÜ­¼÷h&´¤…®éLh»Mg/ëz hh •Ìüó1£‰¯‡ïB®ðí¼ŒgÍžÔ„ÎÛ¤/ÙZÃr k/»‡µ÷gÏëgÑ;=Fv6YVNEˉ6PàD:#(Õ[”`e¤/[Žy³ÕÉ&Ý2§^𘢑Y2¿F†¶¥Nqչ䒦­1'›Â}*TÏ—ìUiVõý-ë¼W¾õaÎm¡û%A’µäf©5¦CWÆi%âÊ)¡n(ÔF¥ +б$ú-l8o!Ž4ý. _V6AmïaÞ #R=η ·èܷн¦—{§¡ËŠáQÌn¸Øïõ4Å‹ºd¯Äújý6~œ`!—5<Ć/ÎeGúªÀe +6x’y‡µçU~¥ìÐ\¢…´†jÙŠÚ0FG9GR@5Ú‚·µúuŽÇ€{I3 nÉïËî€ÚÏn´ºÛ9tÑ.ÇT ´Ùt·]Äöæ~6VA¬§d‚­!ÂWkMI@Díj$ÀaŸ§V8ÀS-Eý.3Èçy[~›ÔŽÚsg]àtʽßê"-Œ‚ÒºÄìA`FÌÎè,ˆ™²%I-ÀÚ0w$aA /ÄQ̵ÂÑ%ŒÇ;£¹9W,œJtRº=¾ê÷Û¹ËÒ9´ë·Ð}Q.\°ßrêij¶×┺ØI¿Ìzzä%—ë[¥‹Ñ~üˆæ2óˆû5C”ñBS/9/‘¶RéðüWBQÃG@ÜJMån®,*¨øú×/~òXDsÙÅ8t‚qi}É·¿üër '÷ pÒ×d“Ú|§ì§nª¯Ì=.0:~jt×^9Njt4£Q‹Üõ¬¾'àîh9ÐðØ•&ì­tµ®8ãˆõ4S¤Ä–„éK¥R«lM¿8¸è‚l¹‹Ê Œ£Ñ•áq´lû *ܵe–íØ.U_ß^Ž÷\ìóÒ[?SãLòù’­T±™Ù“¡!A¸nšk3uok™’QYò ú*ú!KX칄}¹ À“‘0u7Óq›:ç6){ÖG–o1)ØYÂjâjUu€ÚH¬®gƒ!H…Q%K +æô+Ç[åÌb„nè³æb<ìÛ¨‹-Δ ýÿXÖ¦.û.#+ZOûÇÇŽ‡a¤"ÇÞxIð嫙+ +‹’°1-­CìišSÔ ¹4 áLsâ‘p¦˜å`¹Erù’fR7wN)¶€R¿¤XÙ©—4[ŒÒÒ l†Kšá#î¤3ÍÀJ¸¤ÙbáLÙÐÄr Œgi¶]šÓž0.Í^Ұݺ¦pØÍñ Ǥ¸¥×Ž-“#ˆ·Œ"ßiïÙ¯d¨E¢¤†‘vÊ%½u‘TŒNF‘Üa÷\_jNVˆ§«aÌhÛ ø ™—k:I•¼^~ WÞ4f®c`lw£²{½òsY‹Ëm;[ØÍ1\tÕ7~]mÆ4ÛSÄ™z:l?M½ë@èÆ€ÀÞÖ9t]wth¡#ê.T±Ø~“-º4WõªÝïj¬bØ«­C»”¬kühpHéhüèìLÃ÷}Ifm#wß÷9 +÷|㊜é&ßÀÐò ¨õ›|óv¦W{ÚèS¾ÅîåÛ]Ô&ßiØaò ,¥7òö@ää[´ø&ßéšWL¾]3aò}®SùæK¯ÞéÂL½ñCó¹Ôÿý5 êÍà/Ým'Ýû¼”d¾‘n–¢lõNóà§pÑû¼ÕÛÇf•rš¾ºU½wh¶x§k†3ñ–6 é´ëuÉhºf7«àξ‰7±pïsŠ÷¹ŸŠ˜ç™úùtguãÛþ7âmoxû~~‹7ë~o‡ý‡Œ{3Þˆ7{ùto`NÍVÌ®9ÀÄ›X9Åû\¦b{n§¢ìFo7B\ëæ‹›xË{êaSº‰·›+L¼Ïu*¶’Û›xû¨»Pî•›½u¿)·›«®jAËÞ¼r»YΔÛå~+·åL¹Ý('©—Œkß¿3(¬ét %éõ6-]oËO2»½P¦ærwÖÕðÆÅƒ~<ÝwûpÁÌ"‹;Õ3….†¥eF6øV8¥Œ?œ×P`¡¹ˆØ½!夿ŸÙ6T €ìJ(éŒh’5„YD¿óæöa,•™+§½WhŒ/ǰ°WE‘%@­îí!âAVͺW-S¡ãMç2s…Ûö‡£`¬2ÿ ´2ññÏ_ï¤8.ÑÇÖ-Å;’ú퟿1‡%…ÒuZ«!k²S eÅR`¤—¬ËwÕ¤V€mˆ nŸÆëO°œù-°‘Y‚Õ¸°>ÛP¨MËe±I >sÀ¥Äfªò)æË²LI¸õŠb¹¬ÔLŽÈÆ2O]Ì¢Ò‚¤Å Ë oÜá}—¨˜n{^S‘nÜÁe.ynÇG“¯=Ñ<@`JJP„H‘( ]KÔEe‰ èZMB«ëÐ+6B-îC‡-²áÇe(q¸Ü¾åýᙵ–m:Ü6äs^tlÝñ|¾ØJßeÂCøôWƒ4X•»åj^P´|K”E`µ†Å#ª*¯ûܳXlÌõa”®¥¢È¡Q¯ *¡(I¯A¨Ì\²ígW‘ÁÚÚ½ŽQuÕh7[#[Wó‡ÏˆÔØþ8è²à$è‡åDtx}7~º5 +&òmÈìEµÚa¿4êê¯apζ±Œ`V, Éýâq/K˜â 4†Æã›Ûfo‘a´È6ú_$Dg„©£¾¯˜ÊÂTÀðQ›g!0\LF/a!°RGžž†ÀZŒÆV¡!°4–FD`¸3ZvD$ÔÛADBµDäf#†ìˆH;f;ˆèÌ"šKë¡Ñ9ˆè,øöôë×—ÇÓ—?^_¾¾”ÇÏ¿à)>È0„*<þÆß $Ég”ìèó~zÖǰ|‘÷¯žÏ÷†ßÙ†\äþû÷'§Ö¯’ñ>wkî­®jµ@ÿ +0é¡<ä +endstream endobj 1562 0 obj <> endobj 1563 0 obj <>/Border[0 0 0]/OC 1565 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1564 0 obj <> endobj 1565 0 obj <> endobj 1530 0 obj (1903.53 MIL) endobj 459 0 obj <>]>>/K 233/P 460 0 R/Pg 24 0 R/S/l1_primary>> endobj 761 0 obj <>]>>/K 49/P 460 0 R/Pg 25 0 R/S/l2_gnd>> endobj 837 0 obj <>]>>/K 40/P 460 0 R/Pg 26 0 R/S/l3_pwr>> endobj 915 0 obj <>]>>/K 33/P 460 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1073 0 obj <>]>>/K 61/P 460 0 R/Pg 29 0 R/S/mask_prm>> endobj 1165 0 obj <>]>>/K 33/P 460 0 R/Pg 30 0 R/S/mask_sec>> endobj 1267 0 obj <>]>>/K 53/P 460 0 R/Pg 31 0 R/S/paste_prm>> endobj 1529 0 obj (115.34 MIL) endobj 491 0 obj <>]>>/K 265/P 492 0 R/Pg 24 0 R/S/l1_primary>> endobj 1089 0 obj <>]>>/K 77/P 492 0 R/Pg 29 0 R/S/mask_prm>> endobj 1285 0 obj <>]>>/K 71/P 492 0 R/Pg 31 0 R/S/paste_prm>> endobj 1528 0 obj (124.99 MIL) endobj 465 0 obj <>]>>/K 239/P 466 0 R/Pg 24 0 R/S/l1_primary>> endobj 760 0 obj <>]>>/K 48/P 466 0 R/Pg 25 0 R/S/l2_gnd>> endobj 836 0 obj <>]>>/K 39/P 466 0 R/Pg 26 0 R/S/l3_pwr>> endobj 923 0 obj <>]>>/K 41/P 466 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1076 0 obj <>]>>/K 64/P 466 0 R/Pg 29 0 R/S/mask_prm>> endobj 1167 0 obj <>]>>/K 35/P 466 0 R/Pg 30 0 R/S/mask_sec>> endobj 1270 0 obj <>]>>/K 56/P 466 0 R/Pg 31 0 R/S/paste_prm>> endobj 1527 0 obj (732.27 MIL) endobj 463 0 obj <>]>>/K 237/P 464 0 R/Pg 24 0 R/S/l1_primary>> endobj 1075 0 obj <>]>>/K 63/P 464 0 R/Pg 29 0 R/S/mask_prm>> endobj 1269 0 obj <>]>>/K 55/P 464 0 R/Pg 31 0 R/S/paste_prm>> endobj 1526 0 obj (205.32 MIL) endobj 1525 0 obj (VBIAS_CAP) endobj 561 0 obj <>]>>/K 335/P 562 0 R/Pg 24 0 R/S/l1_primary>> endobj 795 0 obj <>]>>/K 83/P 562 0 R/Pg 25 0 R/S/l2_gnd>> endobj 880 0 obj <>]>>/K 83/P 562 0 R/Pg 26 0 R/S/l3_pwr>> endobj 1003 0 obj <>]>>/K 121/P 562 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1104 0 obj <>]>>/K 92/P 562 0 R/Pg 29 0 R/S/mask_prm>> endobj 1209 0 obj <>]>>/K 77/P 562 0 R/Pg 30 0 R/S/mask_sec>> endobj 1292 0 obj <>]>>/K 78/P 562 0 R/Pg 31 0 R/S/paste_prm>> endobj 1524 0 obj (927.41 MIL) endobj 588 0 obj <>]>>/K 362/P 589 0 R/Pg 24 0 R/S/l1_primary>> endobj 784 0 obj <>]>>/K 72/P 589 0 R/Pg 25 0 R/S/l2_gnd>> endobj 869 0 obj <>]>>/K 72/P 589 0 R/Pg 26 0 R/S/l3_pwr>> endobj 978 0 obj <>]>>/K 96/P 589 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1109 0 obj <>]>>/K 97/P 589 0 R/Pg 29 0 R/S/mask_prm>> endobj 1200 0 obj <>]>>/K 68/P 589 0 R/Pg 30 0 R/S/mask_sec>> endobj 1297 0 obj <>]>>/K 83/P 589 0 R/Pg 31 0 R/S/paste_prm>> endobj 1523 0 obj (809.64 MIL) endobj 557 0 obj <>]>>/K 331/P 558 0 R/Pg 24 0 R/S/l1_primary>> endobj 783 0 obj <>]>>/K 71/P 558 0 R/Pg 25 0 R/S/l2_gnd>> endobj 868 0 obj <>]>>/K 71/P 558 0 R/Pg 26 0 R/S/l3_pwr>> endobj 975 0 obj <>]>>/K 93/P 558 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1103 0 obj <>]>>/K 91/P 558 0 R/Pg 29 0 R/S/mask_prm>> endobj 1199 0 obj <>]>>/K 67/P 558 0 R/Pg 30 0 R/S/mask_sec>> endobj 1291 0 obj <>]>>/K 77/P 558 0 R/Pg 31 0 R/S/paste_prm>> endobj 1522 0 obj (947.92 MIL) endobj 292 0 obj <>]>>/K 66/P 293 0 R/Pg 24 0 R/S/l1_primary>> endobj 1028 0 obj <>]>>/K 16/P 293 0 R/Pg 29 0 R/S/mask_prm>> endobj 1226 0 obj <>]>>/K 12/P 293 0 R/Pg 31 0 R/S/paste_prm>> endobj 1521 0 obj (172.12 MIL) endobj 1520 0 obj (UNNAMED_4_FERRITE_I81_N2) endobj 255 0 obj <>]>>/K 29/P 256 0 R/Pg 24 0 R/S/l1_primary>> endobj 720 0 obj <>]>>/K 8/P 256 0 R/Pg 25 0 R/S/l2_gnd>> endobj 805 0 obj <>]>>/K 8/P 256 0 R/Pg 26 0 R/S/l3_pwr>> endobj 890 0 obj <>]>>/K 8/P 256 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1021 0 obj <>]>>/K 9/P 256 0 R/Pg 29 0 R/S/mask_prm>> endobj 1138 0 obj <>]>>/K 6/P 256 0 R/Pg 30 0 R/S/mask_sec>> endobj 1228 0 obj <>]>>/K 14/P 256 0 R/Pg 31 0 R/S/paste_prm>> endobj 1519 0 obj (470.24 MIL) endobj 1518 0 obj (UNNAMED_4_CN6PJMPRSHRT_I82_S2) endobj 258 0 obj <>]>>/K 32/P 259 0 R/Pg 24 0 R/S/l1_primary>> endobj 721 0 obj <>]>>/K 9/P 259 0 R/Pg 25 0 R/S/l2_gnd>> endobj 806 0 obj <>]>>/K 9/P 259 0 R/Pg 26 0 R/S/l3_pwr>> endobj 891 0 obj <>]>>/K 9/P 259 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1022 0 obj <>]>>/K 10/P 259 0 R/Pg 29 0 R/S/mask_prm>> endobj 1139 0 obj <>]>>/K 7/P 259 0 R/Pg 30 0 R/S/mask_sec>> endobj 1230 0 obj <>]>>/K 16/P 259 0 R/Pg 31 0 R/S/paste_prm>> endobj 1517 0 obj (628.81 MIL) endobj 1516 0 obj (UNNAMED_4_CN6PJMPRSHRT_I44_S2) endobj 397 0 obj <>]>>/K 171/P 398 0 R/Pg 24 0 R/S/l1_primary>> endobj 1053 0 obj <>]>>/K 41/P 398 0 R/Pg 29 0 R/S/mask_prm>> endobj 1248 0 obj <>]>>/K 34/P 398 0 R/Pg 31 0 R/S/paste_prm>> endobj 1515 0 obj (147.54 MIL) endobj 1514 0 obj (UNNAMED_4_CAP_I42_N1) endobj 392 0 obj <>]>>/K 166/P 393 0 R/Pg 24 0 R/S/l1_primary>> endobj 1052 0 obj <>]>>/K 40/P 393 0 R/Pg 29 0 R/S/mask_prm>> endobj 1247 0 obj <>]>>/K 33/P 393 0 R/Pg 31 0 R/S/paste_prm>> endobj 1513 0 obj (258.59 MIL) endobj 1512 0 obj (UNNAMED_4_CAP_I39_N1) endobj 239 0 obj <>]>>/K 13/P 240 0 R/Pg 24 0 R/S/l1_primary>> endobj 716 0 obj <>]>>/K 4/P 240 0 R/Pg 25 0 R/S/l2_gnd>> endobj 801 0 obj <>]>>/K 4/P 240 0 R/Pg 26 0 R/S/l3_pwr>> endobj 887 0 obj <>]>>/K 5/P 240 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1017 0 obj <>]>>/K 5/P 240 0 R/Pg 29 0 R/S/mask_prm>> endobj 1137 0 obj <>]>>/K 5/P 240 0 R/Pg 30 0 R/S/mask_sec>> endobj 1217 0 obj <>]>>/K 3/P 240 0 R/Pg 31 0 R/S/paste_prm>> endobj 1511 0 obj (250.14 MIL) endobj 1510 0 obj (UNNAMED_4_ADP160V2_I15_NC) endobj 262 0 obj <>]>>/K 36/P 263 0 R/Pg 24 0 R/S/l1_primary>> endobj 1023 0 obj <>]>>/K 11/P 263 0 R/Pg 29 0 R/S/mask_prm>> endobj 1221 0 obj <>]>>/K 7/P 263 0 R/Pg 31 0 R/S/paste_prm>> endobj 1509 0 obj (103.22 MIL) endobj 1508 0 obj (UNNAMED_4_ADM7155_I65_VREG) endobj 313 0 obj <>]>>/K 87/P 314 0 R/Pg 24 0 R/S/l1_primary>> endobj 1034 0 obj <>]>>/K 22/P 314 0 R/Pg 29 0 R/S/mask_prm>> endobj 1233 0 obj <>]>>/K 19/P 314 0 R/Pg 31 0 R/S/paste_prm>> endobj 1507 0 obj (116.31 MIL) endobj 1506 0 obj (UNNAMED_4_ADM7155_I65_REF) endobj 318 0 obj <>]>>/K 92/P 319 0 R/Pg 24 0 R/S/l1_primary>> endobj 1036 0 obj <>]>>/K 24/P 319 0 R/Pg 29 0 R/S/mask_prm>> endobj 1235 0 obj <>]>>/K 21/P 319 0 R/Pg 31 0 R/S/paste_prm>> endobj 1505 0 obj (106.7 MIL) endobj 1504 0 obj (UNNAMED_4_ADM7155_I65_REFSENSE) endobj 305 0 obj <>]>>/K 79/P 306 0 R/Pg 24 0 R/S/l1_primary>> endobj 1032 0 obj <>]>>/K 20/P 306 0 R/Pg 29 0 R/S/mask_prm>> endobj 1231 0 obj <>]>>/K 17/P 306 0 R/Pg 31 0 R/S/paste_prm>> endobj 1503 0 obj (135.8 MIL) endobj 1502 0 obj (UNNAMED_4_ADM7155_I65_BYP) endobj 672 0 obj <>]>>/K 446/P 673 0 R/Pg 24 0 R/S/l1_primary>> endobj 1128 0 obj <>]>>/K 116/P 673 0 R/Pg 29 0 R/S/mask_prm>> endobj 1318 0 obj <>]>>/K 104/P 673 0 R/Pg 31 0 R/S/paste_prm>> endobj 1501 0 obj (182.97 MIL) endobj 1500 0 obj (UNNAMED_2_RES_I84_N2) endobj 986 0 obj <>]>>/K 104/P 987 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1203 0 obj <>]>>/K 71/P 987 0 R/Pg 30 0 R/S/mask_sec>> endobj 1499 0 obj (75.43 MIL) endobj 1498 0 obj (UNNAMED_2_DIOTVS6PV2_I172_I) endobj 973 0 obj <>]>>/K 91/P 974 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1198 0 obj <>]>>/K 66/P 974 0 R/Pg 30 0 R/S/mask_sec>> endobj 1497 0 obj (160.6 MIL) endobj 1496 0 obj (UNNAMED_2_DIOTVS6PV2_I172_I_3) endobj 984 0 obj <>]>>/K 102/P 985 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1202 0 obj <>]>>/K 70/P 985 0 R/Pg 30 0 R/S/mask_sec>> endobj 1495 0 obj (135.5 MIL) endobj 1494 0 obj (UNNAMED_2_DIOTVS6PV2_I172_I_2) endobj 979 0 obj <>]>>/K 97/P 980 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1201 0 obj <>]>>/K 69/P 980 0 R/Pg 30 0 R/S/mask_sec>> endobj 1493 0 obj (71.95 MIL) endobj 1492 0 obj (UNNAMED_2_DIOTVS6PV2_I172_I_1) endobj 370 0 obj <>]>>/K 144/P 371 0 R/Pg 24 0 R/S/l1_primary>> endobj 1046 0 obj <>]>>/K 34/P 371 0 R/Pg 29 0 R/S/mask_prm>> endobj 1243 0 obj <>]>>/K 29/P 371 0 R/Pg 31 0 R/S/paste_prm>> endobj 1491 0 obj (58.67 MIL) endobj 1490 0 obj (UNNAMED_2_DIOLED_I151_P) endobj 345 0 obj <>]>>/K 119/P 346 0 R/Pg 24 0 R/S/l1_primary>> endobj 1041 0 obj <>]>>/K 29/P 346 0 R/Pg 29 0 R/S/mask_prm>> endobj 1236 0 obj <>]>>/K 22/P 346 0 R/Pg 31 0 R/S/paste_prm>> endobj 1489 0 obj (72.44 MIL) endobj 1488 0 obj (UNNAMED_2_DIOLED_I147_P) endobj 545 0 obj <>]>>/K 319/P 546 0 R/Pg 24 0 R/S/l1_primary>> endobj 776 0 obj <>]>>/K 64/P 546 0 R/Pg 25 0 R/S/l2_gnd>> endobj 861 0 obj <>]>>/K 64/P 546 0 R/Pg 26 0 R/S/l3_pwr>> endobj 964 0 obj <>]>>/K 82/P 546 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1100 0 obj <>]>>/K 88/P 546 0 R/Pg 29 0 R/S/mask_prm>> endobj 1193 0 obj <>]>>/K 61/P 546 0 R/Pg 30 0 R/S/mask_sec>> endobj 1304 0 obj <>]>>/K 90/P 546 0 R/Pg 31 0 R/S/paste_prm>> endobj 1487 0 obj (80.39 MIL) endobj 1486 0 obj (UNNAMED_2_CN3P_I140_N2) endobj 626 0 obj <>]>>/K 400/P 627 0 R/Pg 24 0 R/S/l1_primary>> endobj 782 0 obj <>]>>/K 70/P 627 0 R/Pg 25 0 R/S/l2_gnd>> endobj 867 0 obj <>]>>/K 70/P 627 0 R/Pg 26 0 R/S/l3_pwr>> endobj 970 0 obj <>]>>/K 88/P 627 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1115 0 obj <>]>>/K 103/P 627 0 R/Pg 29 0 R/S/mask_prm>> endobj 1197 0 obj <>]>>/K 65/P 627 0 R/Pg 30 0 R/S/mask_sec>> endobj 1303 0 obj <>]>>/K 89/P 627 0 R/Pg 31 0 R/S/paste_prm>> endobj 1485 0 obj (85.39 MIL) endobj 1484 0 obj (UNNAMED_2_CN3P_I139_N2) endobj 696 0 obj <>]>>/K 470/P 697 0 R/Pg 24 0 R/S/l1_primary>> endobj 793 0 obj <>]>>/K 81/P 697 0 R/Pg 25 0 R/S/l2_gnd>> endobj 878 0 obj <>]>>/K 81/P 697 0 R/Pg 26 0 R/S/l3_pwr>> endobj 999 0 obj <>]>>/K 117/P 697 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1130 0 obj <>]>>/K 118/P 697 0 R/Pg 29 0 R/S/mask_prm>> endobj 1207 0 obj <>]>>/K 75/P 697 0 R/Pg 30 0 R/S/mask_sec>> endobj 1483 0 obj (221.11 MIL) endobj 1482 0 obj (UNNAMED_2_CN3P_I118_N3) endobj 698 0 obj <>]>>/K 472/P 699 0 R/Pg 24 0 R/S/l1_primary>> endobj 794 0 obj <>]>>/K 82/P 699 0 R/Pg 25 0 R/S/l2_gnd>> endobj 879 0 obj <>]>>/K 82/P 699 0 R/Pg 26 0 R/S/l3_pwr>> endobj 1000 0 obj <>]>>/K 118/P 699 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1131 0 obj <>]>>/K 119/P 699 0 R/Pg 29 0 R/S/mask_prm>> endobj 1208 0 obj <>]>>/K 76/P 699 0 R/Pg 30 0 R/S/mask_sec>> endobj 1320 0 obj <>]>>/K 106/P 699 0 R/Pg 31 0 R/S/paste_prm>> endobj 1481 0 obj (893.97 MIL) endobj 1480 0 obj (UNNAMED_2_CN3P_I118_N2) endobj 340 0 obj <>]>>/K 114/P 341 0 R/Pg 24 0 R/S/l1_primary>> endobj 730 0 obj <>]>>/K 18/P 341 0 R/Pg 25 0 R/S/l2_gnd>> endobj 815 0 obj <>]>>/K 18/P 341 0 R/Pg 26 0 R/S/l3_pwr>> endobj 900 0 obj <>]>>/K 18/P 341 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1040 0 obj <>]>>/K 28/P 341 0 R/Pg 29 0 R/S/mask_prm>> endobj 1146 0 obj <>]>>/K 14/P 341 0 R/Pg 30 0 R/S/mask_sec>> endobj 1237 0 obj <>]>>/K 23/P 341 0 R/Pg 31 0 R/S/paste_prm>> endobj 1479 0 obj (85.74 MIL) endobj 1478 0 obj (UNNAMED_2_CN2P_I150_N2) endobj 366 0 obj <>]>>/K 140/P 367 0 R/Pg 24 0 R/S/l1_primary>> endobj 735 0 obj <>]>>/K 23/P 367 0 R/Pg 25 0 R/S/l2_gnd>> endobj 820 0 obj <>]>>/K 23/P 367 0 R/Pg 26 0 R/S/l3_pwr>> endobj 905 0 obj <>]>>/K 23/P 367 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1045 0 obj <>]>>/K 33/P 367 0 R/Pg 29 0 R/S/mask_prm>> endobj 1151 0 obj <>]>>/K 19/P 367 0 R/Pg 30 0 R/S/mask_sec>> endobj 1244 0 obj <>]>>/K 30/P 367 0 R/Pg 31 0 R/S/paste_prm>> endobj 1477 0 obj (167.61 MIL) endobj 1476 0 obj (UNNAMED_2_CN2P_I148_N1) endobj 586 0 obj <>]>>/K 360/P 587 0 R/Pg 24 0 R/S/l1_primary>> endobj 1108 0 obj <>]>>/K 96/P 587 0 R/Pg 29 0 R/S/mask_prm>> endobj 1296 0 obj <>]>>/K 82/P 587 0 R/Pg 31 0 R/S/paste_prm>> endobj 1466 0 obj (60.04 MIL) endobj 1475 0 obj (UNNAMED_2_CAP_I99_N2) endobj 566 0 obj <>]>>/K 340/P 567 0 R/Pg 24 0 R/S/l1_primary>> endobj 1106 0 obj <>]>>/K 94/P 567 0 R/Pg 29 0 R/S/mask_prm>> endobj 1294 0 obj <>]>>/K 80/P 567 0 R/Pg 31 0 R/S/paste_prm>> endobj 1474 0 obj (49.04 MIL) endobj 1473 0 obj (UNNAMED_2_CAP_I96_N2) endobj 689 0 obj <>]>>/K 463/P 690 0 R/Pg 24 0 R/S/l1_primary>> endobj 1129 0 obj <>]>>/K 117/P 690 0 R/Pg 29 0 R/S/mask_prm>> endobj 1319 0 obj <>]>>/K 105/P 690 0 R/Pg 31 0 R/S/paste_prm>> endobj 1472 0 obj (113.89 MIL) endobj 1471 0 obj (UNNAMED_2_CAP_I82_N1) endobj 615 0 obj <>]>>/K 389/P 616 0 R/Pg 24 0 R/S/l1_primary>> endobj 1114 0 obj <>]>>/K 102/P 616 0 R/Pg 29 0 R/S/mask_prm>> endobj 1302 0 obj <>]>>/K 88/P 616 0 R/Pg 31 0 R/S/paste_prm>> endobj 1470 0 obj (70.81 MIL) endobj 1469 0 obj (UNNAMED_2_CAP_I75_N1) endobj 553 0 obj <>]>>/K 327/P 554 0 R/Pg 24 0 R/S/l1_primary>> endobj 1102 0 obj <>]>>/K 90/P 554 0 R/Pg 29 0 R/S/mask_prm>> endobj 1290 0 obj <>]>>/K 76/P 554 0 R/Pg 31 0 R/S/paste_prm>> endobj 1468 0 obj (238.76 MIL) endobj 1467 0 obj (UNNAMED_2_CAP_I107_N2) endobj 563 0 obj <>]>>/K 337/P 564 0 R/Pg 24 0 R/S/l1_primary>> endobj 1105 0 obj <>]>>/K 93/P 564 0 R/Pg 29 0 R/S/mask_prm>> endobj 1293 0 obj <>]>>/K 79/P 564 0 R/Pg 31 0 R/S/paste_prm>> endobj 1465 0 obj (UNNAMED_2_CAP_I105_N2) endobj 329 0 obj <>]>>/K 103/P 330 0 R/Pg 24 0 R/S/l1_primary>> endobj 726 0 obj <>]>>/K 14/P 330 0 R/Pg 25 0 R/S/l2_gnd>> endobj 811 0 obj <>]>>/K 14/P 330 0 R/Pg 26 0 R/S/l3_pwr>> endobj 896 0 obj <>]>>/K 14/P 330 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1037 0 obj <>]>>/K 25/P 330 0 R/Pg 29 0 R/S/mask_prm>> endobj 1142 0 obj <>]>>/K 10/P 330 0 R/Pg 30 0 R/S/mask_sec>> endobj 1238 0 obj <>]>>/K 24/P 330 0 R/Pg 31 0 R/S/paste_prm>> endobj 1464 0 obj (309.96 MIL) endobj 1463 0 obj (UNNAMED_2_AT24C32_I19_WP) endobj 352 0 obj <>]>>/K 126/P 353 0 R/Pg 24 0 R/S/l1_primary>> endobj 1042 0 obj <>]>>/K 30/P 353 0 R/Pg 29 0 R/S/mask_prm>> endobj 1240 0 obj <>]>>/K 26/P 353 0 R/Pg 31 0 R/S/paste_prm>> endobj 1462 0 obj (148.45 MIL) endobj 1461 0 obj (UNNAMED_2_AT24C32_I19_A0) endobj 613 0 obj <>]>>/K 387/P 614 0 R/Pg 24 0 R/S/l1_primary>> endobj 781 0 obj <>]>>/K 69/P 614 0 R/Pg 25 0 R/S/l2_gnd>> endobj 866 0 obj <>]>>/K 69/P 614 0 R/Pg 26 0 R/S/l3_pwr>> endobj 969 0 obj <>]>>/K 87/P 614 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1113 0 obj <>]>>/K 101/P 614 0 R/Pg 29 0 R/S/mask_prm>> endobj 1301 0 obj <>]>>/K 87/P 614 0 R/Pg 31 0 R/S/paste_prm>> endobj 1460 0 obj (329.18 MIL) endobj 1459 0 obj (UNNAMED_2_AD8233_I74_RLDFB) endobj 639 0 obj <>]>>/K 413/P 640 0 R/Pg 24 0 R/S/l1_primary>> endobj 1117 0 obj <>]>>/K 105/P 640 0 R/Pg 29 0 R/S/mask_prm>> endobj 1307 0 obj <>]>>/K 93/P 640 0 R/Pg 31 0 R/S/paste_prm>> endobj 1458 0 obj (271.51 MIL) endobj 1457 0 obj (UNNAMED_2_AD8233_I74_REFIN) endobj 658 0 obj <>]>>/K 432/P 659 0 R/Pg 24 0 R/S/l1_primary>> endobj 792 0 obj <>]>>/K 80/P 659 0 R/Pg 25 0 R/S/l2_gnd>> endobj 877 0 obj <>]>>/K 80/P 659 0 R/Pg 26 0 R/S/l3_pwr>> endobj 995 0 obj <>]>>/K 113/P 659 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1124 0 obj <>]>>/K 112/P 659 0 R/Pg 29 0 R/S/mask_prm>> endobj 1314 0 obj <>]>>/K 100/P 659 0 R/Pg 31 0 R/S/paste_prm>> endobj 1456 0 obj (591.7 MIL) endobj 1455 0 obj (UNNAMED_2_AD8233_I74_OUT) endobj 660 0 obj <>]>>/K 434/P 661 0 R/Pg 24 0 R/S/l1_primary>> endobj 1125 0 obj <>]>>/K 113/P 661 0 R/Pg 29 0 R/S/mask_prm>> endobj 1315 0 obj <>]>>/K 101/P 661 0 R/Pg 31 0 R/S/paste_prm>> endobj 1454 0 obj (195.13 MIL) endobj 1453 0 obj (UNNAMED_2_AD8233_I74_OPAMP) endobj 662 0 obj <>]>>/K 436/P 663 0 R/Pg 24 0 R/S/l1_primary>> endobj 791 0 obj <>]>>/K 79/P 663 0 R/Pg 25 0 R/S/l2_gnd>> endobj 876 0 obj <>]>>/K 79/P 663 0 R/Pg 26 0 R/S/l3_pwr>> endobj 994 0 obj <>]>>/K 112/P 663 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1126 0 obj <>]>>/K 114/P 663 0 R/Pg 29 0 R/S/mask_prm>> endobj 1316 0 obj <>]>>/K 102/P 663 0 R/Pg 31 0 R/S/paste_prm>> endobj 1452 0 obj (422.93 MIL) endobj 1451 0 obj (UNNAMED_2_AD8233_I74_OPAMP_1) endobj 643 0 obj <>]>>/K 417/P 644 0 R/Pg 24 0 R/S/l1_primary>> endobj 785 0 obj <>]>>/K 73/P 644 0 R/Pg 25 0 R/S/l2_gnd>> endobj 870 0 obj <>]>>/K 73/P 644 0 R/Pg 26 0 R/S/l3_pwr>> endobj 988 0 obj <>]>>/K 106/P 644 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1119 0 obj <>]>>/K 107/P 644 0 R/Pg 29 0 R/S/mask_prm>> endobj 1204 0 obj <>]>>/K 72/P 644 0 R/Pg 30 0 R/S/mask_sec>> endobj 1311 0 obj <>]>>/K 97/P 644 0 R/Pg 31 0 R/S/paste_prm>> endobj 1450 0 obj (237.41 MIL) endobj 1449 0 obj (UNNAMED_2_AD8233_I74_LOD) endobj 641 0 obj <>]>>/K 415/P 642 0 R/Pg 24 0 R/S/l1_primary>> endobj 1118 0 obj <>]>>/K 106/P 642 0 R/Pg 29 0 R/S/mask_prm>> endobj 1308 0 obj <>]>>/K 94/P 642 0 R/Pg 31 0 R/S/paste_prm>> endobj 1448 0 obj (173.05 MIL) endobj 1447 0 obj (UNNAMED_2_AD8233_I74_HPSENSE) endobj 664 0 obj <>]>>/K 438/P 665 0 R/Pg 24 0 R/S/l1_primary>> endobj 1127 0 obj <>]>>/K 115/P 665 0 R/Pg 29 0 R/S/mask_prm>> endobj 1317 0 obj <>]>>/K 103/P 665 0 R/Pg 31 0 R/S/paste_prm>> endobj 1446 0 obj (107.83 MIL) endobj 424 0 obj <>]>>/K 198/P 425 0 R/Pg 24 0 R/S/l1_primary>> endobj 745 0 obj <>]>>/K 33/P 425 0 R/Pg 25 0 R/S/l2_gnd>> endobj 830 0 obj <>]>>/K 33/P 425 0 R/Pg 26 0 R/S/l3_pwr>> endobj 924 0 obj <>]>>/K 42/P 425 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1060 0 obj <>]>>/K 48/P 425 0 R/Pg 29 0 R/S/mask_prm>> endobj 1252 0 obj <>]>>/K 38/P 425 0 R/Pg 31 0 R/S/paste_prm>> endobj 1445 0 obj (275.01 MIL) endobj 1444 0 obj (SPI_BOARD_CS) endobj 489 0 obj <>]>>/K 263/P 490 0 R/Pg 24 0 R/S/l1_primary>> endobj 775 0 obj <>]>>/K 63/P 490 0 R/Pg 25 0 R/S/l2_gnd>> endobj 859 0 obj <>]>>/K 62/P 490 0 R/Pg 26 0 R/S/l3_pwr>> endobj 962 0 obj <>]>>/K 80/P 490 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1088 0 obj <>]>>/K 76/P 490 0 R/Pg 29 0 R/S/mask_prm>> endobj 1190 0 obj <>]>>/K 58/P 490 0 R/Pg 30 0 R/S/mask_sec>> endobj 1284 0 obj <>]>>/K 70/P 490 0 R/Pg 31 0 R/S/paste_prm>> endobj 1443 0 obj (1030.52 MIL) endobj 650 0 obj <>]>>/K 424/P 651 0 R/Pg 24 0 R/S/l1_primary>> endobj 790 0 obj <>]>>/K 78/P 651 0 R/Pg 25 0 R/S/l2_gnd>> endobj 875 0 obj <>]>>/K 78/P 651 0 R/Pg 26 0 R/S/l3_pwr>> endobj 993 0 obj <>]>>/K 111/P 651 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1120 0 obj <>]>>/K 108/P 651 0 R/Pg 29 0 R/S/mask_prm>> endobj 1205 0 obj <>]>>/K 73/P 651 0 R/Pg 30 0 R/S/mask_sec>> endobj 1309 0 obj <>]>>/K 95/P 651 0 R/Pg 31 0 R/S/paste_prm>> endobj 1442 0 obj (675.09 MIL) endobj 654 0 obj <>]>>/K 428/P 655 0 R/Pg 24 0 R/S/l1_primary>> endobj 789 0 obj <>]>>/K 77/P 655 0 R/Pg 25 0 R/S/l2_gnd>> endobj 874 0 obj <>]>>/K 77/P 655 0 R/Pg 26 0 R/S/l3_pwr>> endobj 992 0 obj <>]>>/K 110/P 655 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1122 0 obj <>]>>/K 110/P 655 0 R/Pg 29 0 R/S/mask_prm>> endobj 1206 0 obj <>]>>/K 74/P 655 0 R/Pg 30 0 R/S/mask_sec>> endobj 1312 0 obj <>]>>/K 98/P 655 0 R/Pg 31 0 R/S/paste_prm>> endobj 1441 0 obj (612.79 MIL) endobj 377 0 obj <>]>>/K 151/P 378 0 R/Pg 24 0 R/S/l1_primary>> endobj 738 0 obj <>]>>/K 26/P 378 0 R/Pg 25 0 R/S/l2_gnd>> endobj 823 0 obj <>]>>/K 26/P 378 0 R/Pg 26 0 R/S/l3_pwr>> endobj 908 0 obj <>]>>/K 26/P 378 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1047 0 obj <>]>>/K 35/P 378 0 R/Pg 29 0 R/S/mask_prm>> endobj 1155 0 obj <>]>>/K 23/P 378 0 R/Pg 30 0 R/S/mask_sec>> endobj 1262 0 obj <>]>>/K 48/P 378 0 R/Pg 31 0 R/S/paste_prm>> endobj 1440 0 obj (859.35 MIL) endobj 282 0 obj <>]>>/K 56/P 283 0 R/Pg 24 0 R/S/l1_primary>> endobj 734 0 obj <>]>>/K 22/P 283 0 R/Pg 25 0 R/S/l2_gnd>> endobj 819 0 obj <>]>>/K 22/P 283 0 R/Pg 26 0 R/S/l3_pwr>> endobj 904 0 obj <>]>>/K 22/P 283 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1027 0 obj <>]>>/K 15/P 283 0 R/Pg 29 0 R/S/mask_prm>> endobj 1150 0 obj <>]>>/K 18/P 283 0 R/Pg 30 0 R/S/mask_sec>> endobj 1225 0 obj <>]>>/K 11/P 283 0 R/Pg 31 0 R/S/paste_prm>> endobj 1439 0 obj (3040.29 MIL) endobj 1438 0 obj (RESET_SHIELD) endobj 409 0 obj <>]>>/K 183/P 410 0 R/Pg 24 0 R/S/l1_primary>> endobj 742 0 obj <>]>>/K 30/P 410 0 R/Pg 25 0 R/S/l2_gnd>> endobj 827 0 obj <>]>>/K 30/P 410 0 R/Pg 26 0 R/S/l3_pwr>> endobj 912 0 obj <>]>>/K 30/P 410 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1054 0 obj <>]>>/K 42/P 410 0 R/Pg 29 0 R/S/mask_prm>> endobj 1161 0 obj <>]>>/K 29/P 410 0 R/Pg 30 0 R/S/mask_sec>> endobj 1437 0 obj (1850.36 MIL) endobj 1436 0 obj (RESET_GPIO) endobj 275 0 obj <>]>>/K 49/P 276 0 R/Pg 24 0 R/S/l1_primary>> endobj 737 0 obj <>]>>/K 25/P 276 0 R/Pg 25 0 R/S/l2_gnd>> endobj 822 0 obj <>]>>/K 25/P 276 0 R/Pg 26 0 R/S/l3_pwr>> endobj 907 0 obj <>]>>/K 25/P 276 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1026 0 obj <>]>>/K 14/P 276 0 R/Pg 29 0 R/S/mask_prm>> endobj 1153 0 obj <>]>>/K 21/P 276 0 R/Pg 30 0 R/S/mask_sec>> endobj 1224 0 obj <>]>>/K 10/P 276 0 R/Pg 31 0 R/S/paste_prm>> endobj 1435 0 obj (1202.48 MIL) endobj 1434 0 obj (RESET_BUTTON) endobj 656 0 obj <>]>>/K 430/P 657 0 R/Pg 24 0 R/S/l1_primary>> endobj 788 0 obj <>]>>/K 76/P 657 0 R/Pg 25 0 R/S/l2_gnd>> endobj 873 0 obj <>]>>/K 76/P 657 0 R/Pg 26 0 R/S/l3_pwr>> endobj 991 0 obj <>]>>/K 109/P 657 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1123 0 obj <>]>>/K 111/P 657 0 R/Pg 29 0 R/S/mask_prm>> endobj 1313 0 obj <>]>>/K 99/P 657 0 R/Pg 31 0 R/S/paste_prm>> endobj 1433 0 obj (955.19 MIL) endobj 485 0 obj <>]>>/K 259/P 486 0 R/Pg 24 0 R/S/l1_primary>> endobj 768 0 obj <>]>>/K 56/P 486 0 R/Pg 25 0 R/S/l2_gnd>> endobj 847 0 obj <>]>>/K 50/P 486 0 R/Pg 26 0 R/S/l3_pwr>> endobj 946 0 obj <>]>>/K 64/P 486 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1086 0 obj <>]>>/K 74/P 486 0 R/Pg 29 0 R/S/mask_prm>> endobj 1180 0 obj <>]>>/K 48/P 486 0 R/Pg 30 0 R/S/mask_sec>> endobj 1282 0 obj <>]>>/K 68/P 486 0 R/Pg 31 0 R/S/paste_prm>> endobj 1432 0 obj (1017.91 MIL) endobj 483 0 obj <>]>>/K 257/P 484 0 R/Pg 24 0 R/S/l1_primary>> endobj 1085 0 obj <>]>>/K 73/P 484 0 R/Pg 29 0 R/S/mask_prm>> endobj 1281 0 obj <>]>>/K 67/P 484 0 R/Pg 31 0 R/S/paste_prm>> endobj 1431 0 obj (179.69 MIL) endobj 471 0 obj <>]>>/K 245/P 472 0 R/Pg 24 0 R/S/l1_primary>> endobj 1079 0 obj <>]>>/K 67/P 472 0 R/Pg 29 0 R/S/mask_prm>> endobj 1274 0 obj <>]>>/K 60/P 472 0 R/Pg 31 0 R/S/paste_prm>> endobj 1430 0 obj (138.78 MIL) endobj 467 0 obj <>]>>/K 241/P 468 0 R/Pg 24 0 R/S/l1_primary>> endobj 1077 0 obj <>]>>/K 65/P 468 0 R/Pg 29 0 R/S/mask_prm>> endobj 1271 0 obj <>]>>/K 57/P 468 0 R/Pg 31 0 R/S/paste_prm>> endobj 420 0 obj <>]>>/K 194/P 421 0 R/Pg 24 0 R/S/l1_primary>> endobj 1058 0 obj <>]>>/K 46/P 421 0 R/Pg 29 0 R/S/mask_prm>> endobj 1250 0 obj <>]>>/K 36/P 421 0 R/Pg 31 0 R/S/paste_prm>> endobj 1429 0 obj (200.14 MIL) endobj 422 0 obj <>]>>/K 196/P 423 0 R/Pg 24 0 R/S/l1_primary>> endobj 1059 0 obj <>]>>/K 47/P 423 0 R/Pg 29 0 R/S/mask_prm>> endobj 1251 0 obj <>]>>/K 37/P 423 0 R/Pg 31 0 R/S/paste_prm>> endobj 1428 0 obj (182.44 MIL) endobj 236 0 obj <>]>>/K 10/P 237 0 R/Pg 24 0 R/S/l1_primary>> endobj 715 0 obj <>]>>/K 3/P 237 0 R/Pg 25 0 R/S/l2_gnd>> endobj 800 0 obj <>]>>/K 3/P 237 0 R/Pg 26 0 R/S/l3_pwr>> endobj 886 0 obj <>]>>/K 4/P 237 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1016 0 obj <>]>>/K 4/P 237 0 R/Pg 29 0 R/S/mask_prm>> endobj 1136 0 obj <>]>>/K 4/P 237 0 R/Pg 30 0 R/S/mask_sec>> endobj 1215 0 obj <>]>>/K 1/P 237 0 R/Pg 31 0 R/S/paste_prm>> endobj 1427 0 obj (5861.71 MIL) endobj 309 0 obj <>]>>/K 83/P 310 0 R/Pg 24 0 R/S/l1_primary>> endobj 1033 0 obj <>]>>/K 21/P 310 0 R/Pg 29 0 R/S/mask_prm>> endobj 1232 0 obj <>]>>/K 18/P 310 0 R/Pg 31 0 R/S/paste_prm>> endobj 1426 0 obj (LDO_OUT_MAIN) endobj 264 0 obj <>]>>/K 38/P 265 0 R/Pg 24 0 R/S/l1_primary>> endobj 722 0 obj <>]>>/K 10/P 265 0 R/Pg 25 0 R/S/l2_gnd>> endobj 807 0 obj <>]>>/K 10/P 265 0 R/Pg 26 0 R/S/l3_pwr>> endobj 892 0 obj <>]>>/K 10/P 265 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1024 0 obj <>]>>/K 12/P 265 0 R/Pg 29 0 R/S/mask_prm>> endobj 1140 0 obj <>]>>/K 8/P 265 0 R/Pg 30 0 R/S/mask_sec>> endobj 1222 0 obj <>]>>/K 8/P 265 0 R/Pg 31 0 R/S/paste_prm>> endobj 1425 0 obj (393.89 MIL) endobj 1424 0 obj (LDO_OUT_AUX) endobj 316 0 obj <>]>>/K 90/P 317 0 R/Pg 24 0 R/S/l1_primary>> endobj 725 0 obj <>]>>/K 13/P 317 0 R/Pg 25 0 R/S/l2_gnd>> endobj 810 0 obj <>]>>/K 13/P 317 0 R/Pg 26 0 R/S/l3_pwr>> endobj 895 0 obj <>]>>/K 13/P 317 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1035 0 obj <>]>>/K 23/P 317 0 R/Pg 29 0 R/S/mask_prm>> endobj 1162 0 obj <>]>>/K 30/P 317 0 R/Pg 30 0 R/S/mask_sec>> endobj 1234 0 obj <>]>>/K 20/P 317 0 R/Pg 31 0 R/S/paste_prm>> endobj 1423 0 obj (1137.09 MIL) endobj 241 0 obj <>]>>/K 15/P 242 0 R/Pg 24 0 R/S/l1_primary>> endobj 717 0 obj <>]>>/K 5/P 242 0 R/Pg 25 0 R/S/l2_gnd>> endobj 802 0 obj <>]>>/K 5/P 242 0 R/Pg 26 0 R/S/l3_pwr>> endobj 888 0 obj <>]>>/K 6/P 242 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1018 0 obj <>]>>/K 6/P 242 0 R/Pg 29 0 R/S/mask_prm>> endobj 1156 0 obj <>]>>/K 24/P 242 0 R/Pg 30 0 R/S/mask_sec>> endobj 1218 0 obj <>]>>/K 4/P 242 0 R/Pg 31 0 R/S/paste_prm>> endobj 1422 0 obj (1376.31 MIL) endobj 1421 0 obj (LDO_AUX_EN) endobj 251 0 obj <>]>>/K 25/P 252 0 R/Pg 24 0 R/S/l1_primary>> endobj 718 0 obj <>]>>/K 6/P 252 0 R/Pg 25 0 R/S/l2_gnd>> endobj 803 0 obj <>]>>/K 6/P 252 0 R/Pg 26 0 R/S/l3_pwr>> endobj 889 0 obj <>]>>/K 7/P 252 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1020 0 obj <>]>>/K 8/P 252 0 R/Pg 29 0 R/S/mask_prm>> endobj 1154 0 obj <>]>>/K 22/P 252 0 R/Pg 30 0 R/S/mask_sec>> endobj 1220 0 obj <>]>>/K 6/P 252 0 R/Pg 31 0 R/S/paste_prm>> endobj 1420 0 obj (983.29 MIL) endobj 602 0 obj <>]>>/K 376/P 603 0 R/Pg 24 0 R/S/l1_primary>> endobj 780 0 obj <>]>>/K 68/P 603 0 R/Pg 25 0 R/S/l2_gnd>> endobj 865 0 obj <>]>>/K 68/P 603 0 R/Pg 26 0 R/S/l3_pwr>> endobj 968 0 obj <>]>>/K 86/P 603 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1111 0 obj <>]>>/K 99/P 603 0 R/Pg 29 0 R/S/mask_prm>> endobj 1299 0 obj <>]>>/K 85/P 603 0 R/Pg 31 0 R/S/paste_prm>> endobj 1419 0 obj (453.63 MIL) endobj 334 0 obj <>]>>/K 108/P 335 0 R/Pg 24 0 R/S/l1_primary>> endobj 728 0 obj <>]>>/K 16/P 335 0 R/Pg 25 0 R/S/l2_gnd>> endobj 813 0 obj <>]>>/K 16/P 335 0 R/Pg 26 0 R/S/l3_pwr>> endobj 898 0 obj <>]>>/K 16/P 335 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1039 0 obj <>]>>/K 27/P 335 0 R/Pg 29 0 R/S/mask_prm>> endobj 1144 0 obj <>]>>/K 12/P 335 0 R/Pg 30 0 R/S/mask_sec>> endobj 1241 0 obj <>]>>/K 27/P 335 0 R/Pg 31 0 R/S/paste_prm>> endobj 1418 0 obj (283.63 MIL) endobj 332 0 obj <>]>>/K 106/P 333 0 R/Pg 24 0 R/S/l1_primary>> endobj 727 0 obj <>]>>/K 15/P 333 0 R/Pg 25 0 R/S/l2_gnd>> endobj 812 0 obj <>]>>/K 15/P 333 0 R/Pg 26 0 R/S/l3_pwr>> endobj 897 0 obj <>]>>/K 15/P 333 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1038 0 obj <>]>>/K 26/P 333 0 R/Pg 29 0 R/S/mask_prm>> endobj 1143 0 obj <>]>>/K 11/P 333 0 R/Pg 30 0 R/S/mask_sec>> endobj 1242 0 obj <>]>>/K 28/P 333 0 R/Pg 31 0 R/S/paste_prm>> endobj 1417 0 obj (412.93 MIL) endobj 594 0 obj <>]>>/K 368/P 595 0 R/Pg 24 0 R/S/l1_primary>> endobj 1110 0 obj <>]>>/K 98/P 595 0 R/Pg 29 0 R/S/mask_prm>> endobj 1298 0 obj <>]>>/K 84/P 595 0 R/Pg 31 0 R/S/paste_prm>> endobj 1416 0 obj (140.98 MIL) endobj 1415 0 obj (HPDRIVE_SP) endobj 447 0 obj <>]>>/K 221/P 448 0 R/Pg 24 0 R/S/l1_primary>> endobj 759 0 obj <>]>>/K 47/P 448 0 R/Pg 25 0 R/S/l2_gnd>> endobj 835 0 obj <>]>>/K 38/P 448 0 R/Pg 26 0 R/S/l3_pwr>> endobj 937 0 obj <>]>>/K 55/P 448 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1067 0 obj <>]>>/K 55/P 448 0 R/Pg 29 0 R/S/mask_prm>> endobj 1172 0 obj <>]>>/K 40/P 448 0 R/Pg 30 0 R/S/mask_sec>> endobj 1257 0 obj <>]>>/K 43/P 448 0 R/Pg 31 0 R/S/paste_prm>> endobj 1414 0 obj (547.46 MIL) endobj 453 0 obj <>]>>/K 227/P 454 0 R/Pg 24 0 R/S/l1_primary>> endobj 758 0 obj <>]>>/K 46/P 454 0 R/Pg 25 0 R/S/l2_gnd>> endobj 841 0 obj <>]>>/K 44/P 454 0 R/Pg 26 0 R/S/l3_pwr>> endobj 941 0 obj <>]>>/K 59/P 454 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1070 0 obj <>]>>/K 58/P 454 0 R/Pg 29 0 R/S/mask_prm>> endobj 1175 0 obj <>]>>/K 43/P 454 0 R/Pg 30 0 R/S/mask_sec>> endobj 1261 0 obj <>]>>/K 47/P 454 0 R/Pg 31 0 R/S/paste_prm>> endobj 1413 0 obj (1013.62 MIL) endobj 449 0 obj <>]>>/K 223/P 450 0 R/Pg 24 0 R/S/l1_primary>> endobj 757 0 obj <>]>>/K 45/P 450 0 R/Pg 25 0 R/S/l2_gnd>> endobj 839 0 obj <>]>>/K 42/P 450 0 R/Pg 26 0 R/S/l3_pwr>> endobj 939 0 obj <>]>>/K 57/P 450 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1068 0 obj <>]>>/K 56/P 450 0 R/Pg 29 0 R/S/mask_prm>> endobj 1171 0 obj <>]>>/K 39/P 450 0 R/Pg 30 0 R/S/mask_sec>> endobj 1259 0 obj <>]>>/K 45/P 450 0 R/Pg 31 0 R/S/paste_prm>> endobj 1412 0 obj (2404.44 MIL) endobj 441 0 obj <>]>>/K 215/P 442 0 R/Pg 24 0 R/S/l1_primary>> endobj 756 0 obj <>]>>/K 44/P 442 0 R/Pg 25 0 R/S/l2_gnd>> endobj 834 0 obj <>]>>/K 37/P 442 0 R/Pg 26 0 R/S/l3_pwr>> endobj 936 0 obj <>]>>/K 54/P 442 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1064 0 obj <>]>>/K 52/P 442 0 R/Pg 29 0 R/S/mask_prm>> endobj 1173 0 obj <>]>>/K 41/P 442 0 R/Pg 30 0 R/S/mask_sec>> endobj 1254 0 obj <>]>>/K 40/P 442 0 R/Pg 31 0 R/S/paste_prm>> endobj 1411 0 obj (3570.63 MIL) endobj 455 0 obj <>]>>/K 229/P 456 0 R/Pg 24 0 R/S/l1_primary>> endobj 755 0 obj <>]>>/K 43/P 456 0 R/Pg 25 0 R/S/l2_gnd>> endobj 852 0 obj <>]>>/K 55/P 456 0 R/Pg 26 0 R/S/l3_pwr>> endobj 955 0 obj <>]>>/K 73/P 456 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1071 0 obj <>]>>/K 59/P 456 0 R/Pg 29 0 R/S/mask_prm>> endobj 1183 0 obj <>]>>/K 51/P 456 0 R/Pg 30 0 R/S/mask_sec>> endobj 1265 0 obj <>]>>/K 51/P 456 0 R/Pg 31 0 R/S/paste_prm>> endobj 1410 0 obj (525.91 MIL) endobj 457 0 obj <>]>>/K 231/P 458 0 R/Pg 24 0 R/S/l1_primary>> endobj 771 0 obj <>]>>/K 59/P 458 0 R/Pg 25 0 R/S/l2_gnd>> endobj 855 0 obj <>]>>/K 58/P 458 0 R/Pg 26 0 R/S/l3_pwr>> endobj 958 0 obj <>]>>/K 76/P 458 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1072 0 obj <>]>>/K 60/P 458 0 R/Pg 29 0 R/S/mask_prm>> endobj 1186 0 obj <>]>>/K 54/P 458 0 R/Pg 30 0 R/S/mask_sec>> endobj 1266 0 obj <>]>>/K 52/P 458 0 R/Pg 31 0 R/S/paste_prm>> endobj 1409 0 obj (1565.4 MIL) endobj 249 0 obj <>]>>/K 23/P 250 0 R/Pg 24 0 R/S/l1_primary>> endobj 736 0 obj <>]>>/K 24/P 250 0 R/Pg 25 0 R/S/l2_gnd>> endobj 821 0 obj <>]>>/K 24/P 250 0 R/Pg 26 0 R/S/l3_pwr>> endobj 906 0 obj <>]>>/K 24/P 250 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1019 0 obj <>]>>/K 7/P 250 0 R/Pg 29 0 R/S/mask_prm>> endobj 1152 0 obj <>]>>/K 20/P 250 0 R/Pg 30 0 R/S/mask_sec>> endobj 1219 0 obj <>]>>/K 5/P 250 0 R/Pg 31 0 R/S/paste_prm>> endobj 1408 0 obj (5155.79 MIL) endobj 451 0 obj <>]>>/K 225/P 452 0 R/Pg 24 0 R/S/l1_primary>> endobj 754 0 obj <>]>>/K 42/P 452 0 R/Pg 25 0 R/S/l2_gnd>> endobj 833 0 obj <>]>>/K 36/P 452 0 R/Pg 26 0 R/S/l3_pwr>> endobj 935 0 obj <>]>>/K 53/P 452 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1069 0 obj <>]>>/K 57/P 452 0 R/Pg 29 0 R/S/mask_prm>> endobj 1184 0 obj <>]>>/K 52/P 452 0 R/Pg 30 0 R/S/mask_sec>> endobj 1260 0 obj <>]>>/K 46/P 452 0 R/Pg 31 0 R/S/paste_prm>> endobj 1407 0 obj (1627.18 MIL) endobj 542 0 obj <>]>>/K 316/P 543 0 R/Pg 24 0 R/S/l1_primary>> endobj 777 0 obj <>]>>/K 65/P 543 0 R/Pg 25 0 R/S/l2_gnd>> endobj 862 0 obj <>]>>/K 65/P 543 0 R/Pg 26 0 R/S/l3_pwr>> endobj 965 0 obj <>]>>/K 83/P 543 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1099 0 obj <>]>>/K 87/P 543 0 R/Pg 29 0 R/S/mask_prm>> endobj 1194 0 obj <>]>>/K 62/P 543 0 R/Pg 30 0 R/S/mask_sec>> endobj 1289 0 obj <>]>>/K 75/P 543 0 R/Pg 31 0 R/S/paste_prm>> endobj 234 0 obj <>]>>/K 8/P 235 0 R/Pg 24 0 R/S/l1_primary>> endobj 714 0 obj <>]>>/K 2/P 235 0 R/Pg 25 0 R/S/l2_gnd>> endobj 799 0 obj <>]>>/K 2/P 235 0 R/Pg 26 0 R/S/l3_pwr>> endobj 885 0 obj <>]>>/K 3/P 235 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1015 0 obj <>]>>/K 3/P 235 0 R/Pg 29 0 R/S/mask_prm>> endobj 1135 0 obj <>]>>/K 3/P 235 0 R/Pg 30 0 R/S/mask_sec>> endobj 1406 0 obj (361.5 MIL) endobj 232 0 obj <>]>>/K 6/P 233 0 R/Pg 24 0 R/S/l1_primary>> endobj 713 0 obj <>]>>/K 1/P 233 0 R/Pg 25 0 R/S/l2_gnd>> endobj 798 0 obj <>]>>/K 1/P 233 0 R/Pg 26 0 R/S/l3_pwr>> endobj 884 0 obj <>]>>/K 2/P 233 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1014 0 obj <>]>>/K 2/P 233 0 R/Pg 29 0 R/S/mask_prm>> endobj 1134 0 obj <>]>>/K 2/P 233 0 R/Pg 30 0 R/S/mask_sec>> endobj 548 0 obj <>]>>/K 322/P 549 0 R/Pg 24 0 R/S/l1_primary>> endobj 778 0 obj <>]>>/K 66/P 549 0 R/Pg 25 0 R/S/l2_gnd>> endobj 863 0 obj <>]>>/K 66/P 549 0 R/Pg 26 0 R/S/l3_pwr>> endobj 966 0 obj <>]>>/K 84/P 549 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1101 0 obj <>]>>/K 89/P 549 0 R/Pg 29 0 R/S/mask_prm>> endobj 1195 0 obj <>]>>/K 63/P 549 0 R/Pg 30 0 R/S/mask_sec>> endobj 1305 0 obj <>]>>/K 91/P 549 0 R/Pg 31 0 R/S/paste_prm>> endobj 1405 0 obj (2441.21 MIL) endobj 1404 0 obj (ELECT_BIAS) endobj 608 0 obj <>]>>/K 382/P 609 0 R/Pg 24 0 R/S/l1_primary>> endobj 779 0 obj <>]>>/K 67/P 609 0 R/Pg 25 0 R/S/l2_gnd>> endobj 864 0 obj <>]>>/K 67/P 609 0 R/Pg 26 0 R/S/l3_pwr>> endobj 967 0 obj <>]>>/K 85/P 609 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1112 0 obj <>]>>/K 100/P 609 0 R/Pg 29 0 R/S/mask_prm>> endobj 1300 0 obj <>]>>/K 86/P 609 0 R/Pg 31 0 R/S/paste_prm>> endobj 1403 0 obj (1354.56 MIL) endobj 432 0 obj <>]>>/K 206/P 433 0 R/Pg 24 0 R/S/l1_primary>> endobj 746 0 obj <>]>>/K 34/P 433 0 R/Pg 25 0 R/S/l2_gnd>> endobj 848 0 obj <>]>>/K 51/P 433 0 R/Pg 26 0 R/S/l3_pwr>> endobj 947 0 obj <>]>>/K 65/P 433 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1061 0 obj <>]>>/K 49/P 433 0 R/Pg 29 0 R/S/mask_prm>> endobj 1168 0 obj <>]>>/K 36/P 433 0 R/Pg 30 0 R/S/mask_sec>> endobj 1273 0 obj <>]>>/K 59/P 433 0 R/Pg 31 0 R/S/paste_prm>> endobj 1402 0 obj (1922.2 MIL) endobj 493 0 obj <>]>>/K 267/P 494 0 R/Pg 24 0 R/S/l1_primary>> endobj 769 0 obj <>]>>/K 57/P 494 0 R/Pg 25 0 R/S/l2_gnd>> endobj 851 0 obj <>]>>/K 54/P 494 0 R/Pg 26 0 R/S/l3_pwr>> endobj 954 0 obj <>]>>/K 72/P 494 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1091 0 obj <>]>>/K 79/P 494 0 R/Pg 29 0 R/S/mask_prm>> endobj 1196 0 obj <>]>>/K 64/P 494 0 R/Pg 30 0 R/S/mask_sec>> endobj 1287 0 obj <>]>>/K 73/P 494 0 R/Pg 31 0 R/S/paste_prm>> endobj 1401 0 obj (1754.08 MIL) endobj 303 0 obj <>]>>/K 77/P 304 0 R/Pg 24 0 R/S/l1_primary>> endobj 731 0 obj <>]>>/K 19/P 304 0 R/Pg 25 0 R/S/l2_gnd>> endobj 816 0 obj <>]>>/K 19/P 304 0 R/Pg 26 0 R/S/l3_pwr>> endobj 901 0 obj <>]>>/K 19/P 304 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1031 0 obj <>]>>/K 19/P 304 0 R/Pg 29 0 R/S/mask_prm>> endobj 1147 0 obj <>]>>/K 15/P 304 0 R/Pg 30 0 R/S/mask_sec>> endobj 1229 0 obj <>]>>/K 15/P 304 0 R/Pg 31 0 R/S/paste_prm>> endobj 1400 0 obj (4212.37 MIL) endobj 436 0 obj <>]>>/K 210/P 437 0 R/Pg 24 0 R/S/l1_primary>> endobj 1063 0 obj <>]>>/K 51/P 437 0 R/Pg 29 0 R/S/mask_prm>> endobj 1253 0 obj <>]>>/K 39/P 437 0 R/Pg 31 0 R/S/paste_prm>> endobj 1399 0 obj (138.09 MIL) endobj 1398 0 obj (DVDD_REG1V8) endobj 228 0 obj <>]>>/K 2/P 229 0 R/Pg 24 0 R/S/l1_primary>> endobj 719 0 obj <>]>>/K 7/P 229 0 R/Pg 25 0 R/S/l2_gnd>> endobj 804 0 obj <>]>>/K 7/P 229 0 R/Pg 26 0 R/S/l3_pwr>> endobj 882 0 obj <>]>>/K 0/P 229 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1012 0 obj <>]>>/K 0/P 229 0 R/Pg 29 0 R/S/mask_prm>> endobj 1132 0 obj <>]>>/K 0/P 229 0 R/Pg 30 0 R/S/mask_sec>> endobj 1214 0 obj <>]>>/K 0/P 229 0 R/Pg 31 0 R/S/paste_prm>> endobj 475 0 obj <>]>>/K 249/P 476 0 R/Pg 24 0 R/S/l1_primary>> endobj 753 0 obj <>]>>/K 41/P 476 0 R/Pg 25 0 R/S/l2_gnd>> endobj 846 0 obj <>]>>/K 49/P 476 0 R/Pg 26 0 R/S/l3_pwr>> endobj 945 0 obj <>]>>/K 63/P 476 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1081 0 obj <>]>>/K 69/P 476 0 R/Pg 29 0 R/S/mask_prm>> endobj 1179 0 obj <>]>>/K 47/P 476 0 R/Pg 30 0 R/S/mask_sec>> endobj 1276 0 obj <>]>>/K 62/P 476 0 R/Pg 31 0 R/S/paste_prm>> endobj 1397 0 obj (1308.98 MIL) endobj 412 0 obj <>]>>/K 186/P 413 0 R/Pg 24 0 R/S/l1_primary>> endobj 743 0 obj <>]>>/K 31/P 413 0 R/Pg 25 0 R/S/l2_gnd>> endobj 828 0 obj <>]>>/K 31/P 413 0 R/Pg 26 0 R/S/l3_pwr>> endobj 913 0 obj <>]>>/K 31/P 413 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1055 0 obj <>]>>/K 43/P 413 0 R/Pg 29 0 R/S/mask_prm>> endobj 1163 0 obj <>]>>/K 31/P 413 0 R/Pg 30 0 R/S/mask_sec>> endobj 1396 0 obj (593.05 MIL) endobj 414 0 obj <>]>>/K 188/P 415 0 R/Pg 24 0 R/S/l1_primary>> endobj 744 0 obj <>]>>/K 32/P 415 0 R/Pg 25 0 R/S/l2_gnd>> endobj 829 0 obj <>]>>/K 32/P 415 0 R/Pg 26 0 R/S/l3_pwr>> endobj 914 0 obj <>]>>/K 32/P 415 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1056 0 obj <>]>>/K 44/P 415 0 R/Pg 29 0 R/S/mask_prm>> endobj 1164 0 obj <>]>>/K 32/P 415 0 R/Pg 30 0 R/S/mask_sec>> endobj 1395 0 obj (304.35 MIL) endobj 504 0 obj <>]>>/K 278/P 505 0 R/Pg 24 0 R/S/l1_primary>> endobj 764 0 obj <>]>>/K 52/P 505 0 R/Pg 25 0 R/S/l2_gnd>> endobj 840 0 obj <>]>>/K 43/P 505 0 R/Pg 26 0 R/S/l3_pwr>> endobj 940 0 obj <>]>>/K 58/P 505 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1093 0 obj <>]>>/K 81/P 505 0 R/Pg 29 0 R/S/mask_prm>> endobj 1174 0 obj <>]>>/K 42/P 505 0 R/Pg 30 0 R/S/mask_sec>> endobj 1394 0 obj (557.84 MIL) endobj 507 0 obj <>]>>/K 281/P 508 0 R/Pg 24 0 R/S/l1_primary>> endobj 765 0 obj <>]>>/K 53/P 508 0 R/Pg 25 0 R/S/l2_gnd>> endobj 842 0 obj <>]>>/K 45/P 508 0 R/Pg 26 0 R/S/l3_pwr>> endobj 942 0 obj <>]>>/K 60/P 508 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1094 0 obj <>]>>/K 82/P 508 0 R/Pg 29 0 R/S/mask_prm>> endobj 1176 0 obj <>]>>/K 44/P 508 0 R/Pg 30 0 R/S/mask_sec>> endobj 1393 0 obj (216.42 MIL) endobj 509 0 obj <>]>>/K 283/P 510 0 R/Pg 24 0 R/S/l1_primary>> endobj 766 0 obj <>]>>/K 54/P 510 0 R/Pg 25 0 R/S/l2_gnd>> endobj 843 0 obj <>]>>/K 46/P 510 0 R/Pg 26 0 R/S/l3_pwr>> endobj 943 0 obj <>]>>/K 61/P 510 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1095 0 obj <>]>>/K 83/P 510 0 R/Pg 29 0 R/S/mask_prm>> endobj 1177 0 obj <>]>>/K 45/P 510 0 R/Pg 30 0 R/S/mask_sec>> endobj 1392 0 obj (547.49 MIL) endobj 530 0 obj <>]>>/K 304/P 531 0 R/Pg 24 0 R/S/l1_primary>> endobj 772 0 obj <>]>>/K 60/P 531 0 R/Pg 25 0 R/S/l2_gnd>> endobj 856 0 obj <>]>>/K 59/P 531 0 R/Pg 26 0 R/S/l3_pwr>> endobj 959 0 obj <>]>>/K 77/P 531 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1097 0 obj <>]>>/K 85/P 531 0 R/Pg 29 0 R/S/mask_prm>> endobj 1187 0 obj <>]>>/K 55/P 531 0 R/Pg 30 0 R/S/mask_sec>> endobj 1391 0 obj (206.07 MIL) endobj 527 0 obj <>]>>/K 301/P 528 0 R/Pg 24 0 R/S/l1_primary>> endobj 770 0 obj <>]>>/K 58/P 528 0 R/Pg 25 0 R/S/l2_gnd>> endobj 854 0 obj <>]>>/K 57/P 528 0 R/Pg 26 0 R/S/l3_pwr>> endobj 957 0 obj <>]>>/K 75/P 528 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1096 0 obj <>]>>/K 84/P 528 0 R/Pg 29 0 R/S/mask_prm>> endobj 1185 0 obj <>]>>/K 53/P 528 0 R/Pg 30 0 R/S/mask_sec>> endobj 1390 0 obj (537.13 MIL) endobj 532 0 obj <>]>>/K 306/P 533 0 R/Pg 24 0 R/S/l1_primary>> endobj 773 0 obj <>]>>/K 61/P 533 0 R/Pg 25 0 R/S/l2_gnd>> endobj 857 0 obj <>]>>/K 60/P 533 0 R/Pg 26 0 R/S/l3_pwr>> endobj 960 0 obj <>]>>/K 78/P 533 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1098 0 obj <>]>>/K 86/P 533 0 R/Pg 29 0 R/S/mask_prm>> endobj 1188 0 obj <>]>>/K 56/P 533 0 R/Pg 30 0 R/S/mask_sec>> endobj 1389 0 obj (195.71 MIL) endobj 358 0 obj <>]>>/K 132/P 359 0 R/Pg 24 0 R/S/l1_primary>> endobj 733 0 obj <>]>>/K 21/P 359 0 R/Pg 25 0 R/S/l2_gnd>> endobj 818 0 obj <>]>>/K 21/P 359 0 R/Pg 26 0 R/S/l3_pwr>> endobj 903 0 obj <>]>>/K 21/P 359 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1044 0 obj <>]>>/K 32/P 359 0 R/Pg 29 0 R/S/mask_prm>> endobj 1149 0 obj <>]>>/K 17/P 359 0 R/Pg 30 0 R/S/mask_sec>> endobj 1258 0 obj <>]>>/K 44/P 359 0 R/Pg 31 0 R/S/paste_prm>> endobj 1388 0 obj (1995.16 MIL) endobj 380 0 obj <>]>>/K 154/P 381 0 R/Pg 24 0 R/S/l1_primary>> endobj 739 0 obj <>]>>/K 27/P 381 0 R/Pg 25 0 R/S/l2_gnd>> endobj 824 0 obj <>]>>/K 27/P 381 0 R/Pg 26 0 R/S/l3_pwr>> endobj 909 0 obj <>]>>/K 27/P 381 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1048 0 obj <>]>>/K 36/P 381 0 R/Pg 29 0 R/S/mask_prm>> endobj 1157 0 obj <>]>>/K 25/P 381 0 R/Pg 30 0 R/S/mask_sec>> endobj 1263 0 obj <>]>>/K 49/P 381 0 R/Pg 31 0 R/S/paste_prm>> endobj 1387 0 obj (1926.09 MIL) endobj 382 0 obj <>]>>/K 156/P 383 0 R/Pg 24 0 R/S/l1_primary>> endobj 740 0 obj <>]>>/K 28/P 383 0 R/Pg 25 0 R/S/l2_gnd>> endobj 825 0 obj <>]>>/K 28/P 383 0 R/Pg 26 0 R/S/l3_pwr>> endobj 910 0 obj <>]>>/K 28/P 383 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1049 0 obj <>]>>/K 37/P 383 0 R/Pg 29 0 R/S/mask_prm>> endobj 1158 0 obj <>]>>/K 26/P 383 0 R/Pg 30 0 R/S/mask_sec>> endobj 1264 0 obj <>]>>/K 50/P 383 0 R/Pg 31 0 R/S/paste_prm>> endobj 1386 0 obj (1903.36 MIL) endobj 384 0 obj <>]>>/K 158/P 385 0 R/Pg 24 0 R/S/l1_primary>> endobj 741 0 obj <>]>>/K 29/P 385 0 R/Pg 25 0 R/S/l2_gnd>> endobj 826 0 obj <>]>>/K 29/P 385 0 R/Pg 26 0 R/S/l3_pwr>> endobj 911 0 obj <>]>>/K 29/P 385 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1050 0 obj <>]>>/K 38/P 385 0 R/Pg 29 0 R/S/mask_prm>> endobj 1159 0 obj <>]>>/K 27/P 385 0 R/Pg 30 0 R/S/mask_sec>> endobj 1245 0 obj <>]>>/K 31/P 385 0 R/Pg 31 0 R/S/paste_prm>> endobj 1385 0 obj (1471.35 MIL) endobj 487 0 obj <>]>>/K 261/P 488 0 R/Pg 24 0 R/S/l1_primary>> endobj 774 0 obj <>]>>/K 62/P 488 0 R/Pg 25 0 R/S/l2_gnd>> endobj 858 0 obj <>]>>/K 61/P 488 0 R/Pg 26 0 R/S/l3_pwr>> endobj 961 0 obj <>]>>/K 79/P 488 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1087 0 obj <>]>>/K 75/P 488 0 R/Pg 29 0 R/S/mask_prm>> endobj 1189 0 obj <>]>>/K 57/P 488 0 R/Pg 30 0 R/S/mask_sec>> endobj 1283 0 obj <>]>>/K 69/P 488 0 R/Pg 31 0 R/S/paste_prm>> endobj 1384 0 obj (1694.6 MIL) endobj 299 0 obj <>]>>/K 73/P 300 0 R/Pg 24 0 R/S/l1_primary>> endobj 729 0 obj <>]>>/K 17/P 300 0 R/Pg 25 0 R/S/l2_gnd>> endobj 814 0 obj <>]>>/K 17/P 300 0 R/Pg 26 0 R/S/l3_pwr>> endobj 899 0 obj <>]>>/K 17/P 300 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1030 0 obj <>]>>/K 18/P 300 0 R/Pg 29 0 R/S/mask_prm>> endobj 1145 0 obj <>]>>/K 13/P 300 0 R/Pg 30 0 R/S/mask_sec>> endobj 1227 0 obj <>]>>/K 13/P 300 0 R/Pg 31 0 R/S/paste_prm>> endobj 1383 0 obj (1848.74 MIL) endobj 418 0 obj <>]>>/K 192/P 419 0 R/Pg 24 0 R/S/l1_primary>> endobj 1057 0 obj <>]>>/K 45/P 419 0 R/Pg 29 0 R/S/mask_prm>> endobj 1249 0 obj <>]>>/K 35/P 419 0 R/Pg 31 0 R/S/paste_prm>> endobj 1382 0 obj (139.09 MIL) endobj 356 0 obj <>]>>/K 130/P 357 0 R/Pg 24 0 R/S/l1_primary>> endobj 732 0 obj <>]>>/K 20/P 357 0 R/Pg 25 0 R/S/l2_gnd>> endobj 817 0 obj <>]>>/K 20/P 357 0 R/Pg 26 0 R/S/l3_pwr>> endobj 902 0 obj <>]>>/K 20/P 357 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1043 0 obj <>]>>/K 31/P 357 0 R/Pg 29 0 R/S/mask_prm>> endobj 1148 0 obj <>]>>/K 16/P 357 0 R/Pg 30 0 R/S/mask_sec>> endobj 479 0 obj <>]>>/K 253/P 480 0 R/Pg 24 0 R/S/l1_primary>> endobj 752 0 obj <>]>>/K 40/P 480 0 R/Pg 25 0 R/S/l2_gnd>> endobj 850 0 obj <>]>>/K 53/P 480 0 R/Pg 26 0 R/S/l3_pwr>> endobj 953 0 obj <>]>>/K 71/P 480 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1083 0 obj <>]>>/K 71/P 480 0 R/Pg 29 0 R/S/mask_prm>> endobj 1182 0 obj <>]>>/K 50/P 480 0 R/Pg 30 0 R/S/mask_sec>> endobj 1278 0 obj <>]>>/K 64/P 480 0 R/Pg 31 0 R/S/paste_prm>> endobj 1381 0 obj (542.11 MIL) endobj 477 0 obj <>]>>/K 251/P 478 0 R/Pg 24 0 R/S/l1_primary>> endobj 751 0 obj <>]>>/K 39/P 478 0 R/Pg 25 0 R/S/l2_gnd>> endobj 832 0 obj <>]>>/K 35/P 478 0 R/Pg 26 0 R/S/l3_pwr>> endobj 927 0 obj <>]>>/K 45/P 478 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1082 0 obj <>]>>/K 70/P 478 0 R/Pg 29 0 R/S/mask_prm>> endobj 1170 0 obj <>]>>/K 38/P 478 0 R/Pg 30 0 R/S/mask_sec>> endobj 1277 0 obj <>]>>/K 63/P 478 0 R/Pg 31 0 R/S/paste_prm>> endobj 1380 0 obj (1047.98 MIL) endobj 438 0 obj <>]>>/K 212/P 439 0 R/Pg 24 0 R/S/l1_primary>> endobj 748 0 obj <>]>>/K 36/P 439 0 R/Pg 25 0 R/S/l2_gnd>> endobj 831 0 obj <>]>>/K 34/P 439 0 R/Pg 26 0 R/S/l3_pwr>> endobj 928 0 obj <>]>>/K 46/P 439 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1090 0 obj <>]>>/K 78/P 439 0 R/Pg 29 0 R/S/mask_prm>> endobj 1191 0 obj <>]>>/K 59/P 439 0 R/Pg 30 0 R/S/mask_sec>> endobj 1286 0 obj <>]>>/K 72/P 439 0 R/Pg 31 0 R/S/paste_prm>> endobj 1379 0 obj (1110.98 MIL) endobj 481 0 obj <>]>>/K 255/P 482 0 R/Pg 24 0 R/S/l1_primary>> endobj 750 0 obj <>]>>/K 38/P 482 0 R/Pg 25 0 R/S/l2_gnd>> endobj 849 0 obj <>]>>/K 52/P 482 0 R/Pg 26 0 R/S/l3_pwr>> endobj 950 0 obj <>]>>/K 68/P 482 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1084 0 obj <>]>>/K 72/P 482 0 R/Pg 29 0 R/S/mask_prm>> endobj 1181 0 obj <>]>>/K 49/P 482 0 R/Pg 30 0 R/S/mask_sec>> endobj 1279 0 obj <>]>>/K 65/P 482 0 R/Pg 31 0 R/S/paste_prm>> endobj 1378 0 obj (1151.84 MIL) endobj 461 0 obj <>]>>/K 235/P 462 0 R/Pg 24 0 R/S/l1_primary>> endobj 749 0 obj <>]>>/K 37/P 462 0 R/Pg 25 0 R/S/l2_gnd>> endobj 860 0 obj <>]>>/K 63/P 462 0 R/Pg 26 0 R/S/l3_pwr>> endobj 963 0 obj <>]>>/K 81/P 462 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1074 0 obj <>]>>/K 62/P 462 0 R/Pg 29 0 R/S/mask_prm>> endobj 1192 0 obj <>]>>/K 60/P 462 0 R/Pg 30 0 R/S/mask_sec>> endobj 1268 0 obj <>]>>/K 54/P 462 0 R/Pg 31 0 R/S/paste_prm>> endobj 1377 0 obj (1500.64 MIL) endobj 230 0 obj <>]>>/K 4/P 231 0 R/Pg 24 0 R/S/l1_primary>> endobj 712 0 obj <>]>>/K 0/P 231 0 R/Pg 25 0 R/S/l2_gnd>> endobj 797 0 obj <>]>>/K 0/P 231 0 R/Pg 26 0 R/S/l3_pwr>> endobj 883 0 obj <>]>>/K 1/P 231 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1013 0 obj <>]>>/K 1/P 231 0 R/Pg 29 0 R/S/mask_prm>> endobj 1133 0 obj <>]>>/K 1/P 231 0 R/Pg 30 0 R/S/mask_sec>> endobj 1216 0 obj <>]>>/K 2/P 231 0 R/Pg 31 0 R/S/paste_prm>> endobj 1376 0 obj (10816.26 MIL) endobj 495 0 obj <>]>>/K 269/P 496 0 R/Pg 24 0 R/S/l1_primary>> endobj 1092 0 obj <>]>>/K 80/P 496 0 R/Pg 29 0 R/S/mask_prm>> endobj 1288 0 obj <>]>>/K 74/P 496 0 R/Pg 31 0 R/S/paste_prm>> endobj 434 0 obj <>]>>/K 208/P 435 0 R/Pg 24 0 R/S/l1_primary>> endobj 747 0 obj <>]>>/K 35/P 435 0 R/Pg 25 0 R/S/l2_gnd>> endobj 853 0 obj <>]>>/K 56/P 435 0 R/Pg 26 0 R/S/l3_pwr>> endobj 956 0 obj <>]>>/K 74/P 435 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1062 0 obj <>]>>/K 50/P 435 0 R/Pg 29 0 R/S/mask_prm>> endobj 1169 0 obj <>]>>/K 37/P 435 0 R/Pg 30 0 R/S/mask_sec>> endobj 1280 0 obj <>]>>/K 66/P 435 0 R/Pg 31 0 R/S/paste_prm>> endobj 1375 0 obj (1888.31 MIL) endobj 636 0 obj <>]>>/K 410/P 637 0 R/Pg 24 0 R/S/l1_primary>> endobj 786 0 obj <>]>>/K 74/P 637 0 R/Pg 25 0 R/S/l2_gnd>> endobj 871 0 obj <>]>>/K 74/P 637 0 R/Pg 26 0 R/S/l3_pwr>> endobj 989 0 obj <>]>>/K 107/P 637 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1116 0 obj <>]>>/K 104/P 637 0 R/Pg 29 0 R/S/mask_prm>> endobj 1213 0 obj <>]>>/K 81/P 637 0 R/Pg 30 0 R/S/mask_sec>> endobj 1306 0 obj <>]>>/K 92/P 637 0 R/Pg 31 0 R/S/paste_prm>> endobj 1374 0 obj (1070.06 MIL) endobj 1373 0 obj (AD8233_VDD) endobj 469 0 obj <>]>>/K 243/P 470 0 R/Pg 24 0 R/S/l1_primary>> endobj 763 0 obj <>]>>/K 51/P 470 0 R/Pg 25 0 R/S/l2_gnd>> endobj 838 0 obj <>]>>/K 41/P 470 0 R/Pg 26 0 R/S/l3_pwr>> endobj 938 0 obj <>]>>/K 56/P 470 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1078 0 obj <>]>>/K 66/P 470 0 R/Pg 29 0 R/S/mask_prm>> endobj 1211 0 obj <>]>>/K 79/P 470 0 R/Pg 30 0 R/S/mask_sec>> endobj 1272 0 obj <>]>>/K 58/P 470 0 R/Pg 31 0 R/S/paste_prm>> endobj 1372 0 obj (2821.74 MIL) endobj 1371 0 obj (AD8233_OUT) endobj 652 0 obj <>]>>/K 426/P 653 0 R/Pg 24 0 R/S/l1_primary>> endobj 787 0 obj <>]>>/K 75/P 653 0 R/Pg 25 0 R/S/l2_gnd>> endobj 872 0 obj <>]>>/K 75/P 653 0 R/Pg 26 0 R/S/l3_pwr>> endobj 990 0 obj <>]>>/K 108/P 653 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1121 0 obj <>]>>/K 109/P 653 0 R/Pg 29 0 R/S/mask_prm>> endobj 1212 0 obj <>]>>/K 80/P 653 0 R/Pg 30 0 R/S/mask_sec>> endobj 1310 0 obj <>]>>/K 96/P 653 0 R/Pg 31 0 R/S/paste_prm>> endobj 1370 0 obj (712.27 MIL) endobj 388 0 obj <>]>>/K 162/P 389 0 R/Pg 24 0 R/S/l1_primary>> endobj 767 0 obj <>]>>/K 55/P 389 0 R/Pg 25 0 R/S/l2_gnd>> endobj 844 0 obj <>]>>/K 47/P 389 0 R/Pg 26 0 R/S/l3_pwr>> endobj 944 0 obj <>]>>/K 62/P 389 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1051 0 obj <>]>>/K 39/P 389 0 R/Pg 29 0 R/S/mask_prm>> endobj 1178 0 obj <>]>>/K 46/P 389 0 R/Pg 30 0 R/S/mask_sec>> endobj 1246 0 obj <>]>>/K 32/P 389 0 R/Pg 31 0 R/S/paste_prm>> endobj 1369 0 obj (815.91 MIL) endobj 266 0 obj <>]>>/K 40/P 267 0 R/Pg 24 0 R/S/l1_primary>> endobj 723 0 obj <>]>>/K 11/P 267 0 R/Pg 25 0 R/S/l2_gnd>> endobj 808 0 obj <>]>>/K 11/P 267 0 R/Pg 26 0 R/S/l3_pwr>> endobj 893 0 obj <>]>>/K 11/P 267 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1025 0 obj <>]>>/K 13/P 267 0 R/Pg 29 0 R/S/mask_prm>> endobj 1160 0 obj <>]>>/K 28/P 267 0 R/Pg 30 0 R/S/mask_sec>> endobj 1223 0 obj <>]>>/K 9/P 267 0 R/Pg 31 0 R/S/paste_prm>> endobj 1368 0 obj (2111.56 MIL) endobj 1367 0 obj (5V_SHIELD) endobj 297 0 obj <>]>>/K 71/P 298 0 R/Pg 24 0 R/S/l1_primary>> endobj 724 0 obj <>]>>/K 12/P 298 0 R/Pg 25 0 R/S/l2_gnd>> endobj 809 0 obj <>]>>/K 12/P 298 0 R/Pg 26 0 R/S/l3_pwr>> endobj 894 0 obj <>]>>/K 12/P 298 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1029 0 obj <>]>>/K 17/P 298 0 R/Pg 29 0 R/S/mask_prm>> endobj 1141 0 obj <>]>>/K 9/P 298 0 R/Pg 30 0 R/S/mask_sec>> endobj 1239 0 obj <>]>>/K 25/P 298 0 R/Pg 31 0 R/S/paste_prm>> endobj 1366 0 obj (919.23 MIL) endobj 1365 0 obj (3V3_SHIELD) endobj 568 0 obj <>]>>/K 342/P 569 0 R/Pg 24 0 R/S/l1_primary>> endobj 796 0 obj <>]>>/K 84/P 569 0 R/Pg 25 0 R/S/l2_gnd>> endobj 881 0 obj <>]>>/K 84/P 569 0 R/Pg 26 0 R/S/l3_pwr>> endobj 1006 0 obj <>]>>/K 124/P 569 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1107 0 obj <>]>>/K 95/P 569 0 R/Pg 29 0 R/S/mask_prm>> endobj 1210 0 obj <>]>>/K 78/P 569 0 R/Pg 30 0 R/S/mask_sec>> endobj 1295 0 obj <>]>>/K 81/P 569 0 R/Pg 31 0 R/S/paste_prm>> endobj 1343 0 obj (916.56 MIL) endobj 1321 0 obj <>]>>/K 107/P 55 0 R/Pg 31 0 R/S/paste_prm>> endobj 1322 0 obj <>]>>/K 108/P 57 0 R/Pg 31 0 R/S/paste_prm>> endobj 1323 0 obj <>]>>/K 109/P 62 0 R/Pg 31 0 R/S/paste_prm>> endobj 62 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[17 1323 0 R 61 0 R]/P 54 0 R/Pg 23 0 R/S/R28>> endobj 54 0 obj <>]>>/K[9 62 0 R 57 0 R 55 0 R]/P 35 0 R/Pg 23 0 R/S/R0805_0603_TH200LD25>> endobj 35 0 obj <>]>>/K[0 1010 0 R 177 0 R 273 0 R 244 0 R 79 0 R 93 0 R 119 0 R 212 0 R 67 0 R 88 0 R 205 0 R 126 0 R 85 0 R 82 0 R 49 0 R 76 0 R 295 0 R 997 0 R 98 0 R 196 0 R 247 0 R 290 0 R 54 0 R 103 0 R 982 0 R 64 0 R 59 0 R 224 0 R 221 0 R 108 0 R]/P 33 0 R/Pg 23 0 R/S/Package>> endobj 1010 0 obj <>]>>/K[3 1011 0 R]/P 35 0 R/Pg 28 0 R/S/ADILOGOTAG_800X320>> endobj 177 0 obj <>]>>/K[132 192 0 R 190 0 R 178 0 R]/P 35 0 R/Pg 23 0 R/S/C0201>> endobj 273 0 obj <>]>>/K[47 274 0 R 599 0 R 516 0 R 281 0 R 934 0 R 618 0 R 926 0 R 706 0 R]/P 35 0 R/Pg 24 0 R/S/C0402>> endobj 244 0 obj <>]>>/K[18 922 0 R 920 0 R 269 0 R 323 0 R 288 0 R 932 0 R 591 0 R 321 0 R 427 0 R 520 0 R 400 0 R 918 0 R 500 0 R 245 0 R 930 0 R 271 0 R 373 0 R 404 0 R 402 0 R 395 0 R 308 0 R 261 0 R 573 0 R 597 0 R 571 0 R 552 0 R 612 0 R 593 0 R 688 0 R 667 0 R 949 0 R 518 0 R 429 0 R]/P 35 0 R/Pg 24 0 R/S/C0603>> endobj 79 0 obj <>]>>/K[34 155 0 R 149 0 R 157 0 R 151 0 R 133 0 R 129 0 R 135 0 R 131 0 R 113 0 R 80 0 R]/P 35 0 R/Pg 23 0 R/S/CNHARWIN-M20-9990246>> endobj 93 0 obj <>]>>/K[48 111 0 R 194 0 R 94 0 R]/P 35 0 R/Pg 23 0 R/S/CNHDR1X2H207>> endobj 119 0 obj <>]>>/K[74 219 0 R 173 0 R 203 0 R 120 0 R 171 0 R 184 0 R 201 0 R 199 0 R 217 0 R 122 0 R]/P 35 0 R/Pg 23 0 R/S/CNHDR1X3H207>> endobj 212 0 obj <>]>>/K[167 213 0 R]/P 35 0 R/Pg 23 0 R/S/CNHDR2X3H235>> endobj 67 0 obj <>]>>/K[22 70 0 R 68 0 R 115 0 R]/P 35 0 R/Pg 23 0 R/S/CNHDR2X3H346>> endobj 88 0 obj <>]>>/K[43 153 0 R 175 0 R 89 0 R 169 0 R 145 0 R 165 0 R 167 0 R 147 0 R 91 0 R 161 0 R 141 0 R 101 0 R 137 0 R 96 0 R 215 0 R 182 0 R 180 0 R 186 0 R 188 0 R 117 0 R 143 0 R 208 0 R 210 0 R 163 0 R 139 0 R 159 0 R]/P 35 0 R/Pg 23 0 R/S/CNKEY5001TP>> endobj 205 0 obj <>]>>/K[160 206 0 R]/P 35 0 R/Pg 23 0 R/S/CNMOLEX47346-0001>> endobj 126 0 obj <>]>>/K[81 127 0 R]/P 35 0 R/Pg 23 0 R/S/CNSAMTECSSQ-106-XX-X-S>> endobj 85 0 obj <>]>>/K[40 86 0 R 124 0 R]/P 35 0 R/Pg 23 0 R/S/CNSAMTECSSQ-108-XX-X-S>> endobj 82 0 obj <>]>>/K[37 83 0 R]/P 35 0 R/Pg 23 0 R/S/CNSAMTECSSQ-110-XX-X-S>> endobj 49 0 obj <>]>>/K[4 52 0 R 50 0 R]/P 35 0 R/Pg 23 0 R/S/CNWIELAND0253>> endobj 76 0 obj <>]>>/K[31 77 0 R]/P 35 0 R/Pg 23 0 R/S/DFN8_3X3_PAD2_44X1_6_A>> endobj 295 0 obj <>]>>/K[69 296 0 R]/P 35 0 R/Pg 24 0 R/S/L0603>> endobj 997 0 obj <>]>>/K[115 998 0 R]/P 35 0 R/Pg 27 0 R/S/L1806>> endobj 98 0 obj <>]>>/K[53 106 0 R 99 0 R]/P 35 0 R/Pg 23 0 R/S/LED0402>> endobj 196 0 obj <>]>>/K[151 197 0 R]/P 35 0 R/Pg 23 0 R/S/R0201>> endobj 247 0 obj <>]>>/K[21 248 0 R 355 0 R 325 0 R 351 0 R 278 0 R 285 0 R 625 0 R 575 0 R 669 0 R 327 0 R 577 0 R 629 0 R 1002 0 R 972 0 R 1005 0 R 361 0 R 977 0 R 363 0 R 556 0 R 344 0 R]/P 35 0 R/Pg 24 0 R/S/R0402>> endobj 290 0 obj <>]>>/K[64 312 0 R 675 0 R 622 0 R 579 0 R 605 0 R 387 0 R 692 0 R 620 0 R 291 0 R 302 0 R 406 0 R 408 0 R 671 0 R 677 0 R 684 0 R 541 0 R 709 0 R 694 0 R 646 0 R 648 0 R 607 0 R 560 0 R 679 0 R 581 0 R 681 0 R 583 0 R 585 0 R 369 0 R 391 0 R 632 0 R 601 0 R 498 0 R 952 0 R 431 0 R]/P 35 0 R/Pg 24 0 R/S/R0603>> endobj 103 0 obj <>]>>/K[58 104 0 R]/P 35 0 R/Pg 23 0 R/S/SO8>> endobj 982 0 obj <>]>>/K[100 983 0 R]/P 35 0 R/Pg 27 0 R/S/SOT-563>> endobj 64 0 obj <>]>>/K[19 72 0 R 65 0 R 74 0 R]/P 35 0 R/Pg 23 0 R/S/SWSML118W98H69>> endobj 59 0 obj <>]>>/K[14 60 0 R]/P 35 0 R/Pg 23 0 R/S/TSOT-5>> endobj 224 0 obj <>]>>/K[179 225 0 R]/P 35 0 R/Pg 23 0 R/S/WLCSP20_D>> endobj 221 0 obj <>]>>/K[176 222 0 R]/P 35 0 R/Pg 23 0 R/S/WLCSP56>> endobj 108 0 obj <>]>>/K[63 109 0 R]/P 35 0 R/Pg 23 0 R/S/YSML126W98H31>> endobj 109 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[64 396 0 R 107 0 R]/P 108 0 R/Pg 23 0 R/S/Y1>> endobj 396 0 obj <>]>>/K 170/P 109 0 R/Pg 24 0 R/S/l1_primary>> endobj 107 0 obj <>]>>/K 62/P 109 0 R/Pg 23 0 R/S/silk_prm>> endobj 1575 0 obj (Tolerance) endobj 1579 0 obj (YSML126W98H31) endobj 1574 0 obj (Symbol Name) endobj 1572 0 obj (Reference Designator) endobj 1577 0 obj (XTAL4PIN_V3_SM-16MEGHZ,E029612,YSML126W98H31-YSML126W98H31) endobj 1571 0 obj (Part Number) endobj 1578 0 obj (\(1440.00, 800.00\), 180.00) endobj 1568 0 obj (NOT_EMBEDDED) endobj 1569 0 obj (Embedded Status) endobj 1566 0 obj (Component Class) endobj 222 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[177 440 0 R 220 0 R]/P 221 0 R/Pg 23 0 R/S/U3>> endobj 440 0 obj <>]>>/K 214/P 222 0 R/Pg 24 0 R/S/l1_primary>> endobj 220 0 obj <>]>>/K 175/P 222 0 R/Pg 23 0 R/S/silk_prm>> endobj 1580 0 obj (AD5940_SM-AD5940,E027747,WLCSP56-WLCSP56) endobj 1581 0 obj (\(1850.00, 835.00\), 180.00) endobj 225 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[180 682 0 R 223 0 R]/P 224 0 R/Pg 23 0 R/S/U5>> endobj 682 0 obj <>]>>/K 456/P 225 0 R/Pg 24 0 R/S/l1_primary>> endobj 223 0 obj <>]>>/K 178/P 225 0 R/Pg 23 0 R/S/silk_prm>> endobj 1584 0 obj (WLCSP20_D) endobj 1582 0 obj (AD8233_SM-AD8233,E024534,WLCSP20_D-WLCSP20_D) endobj 1583 0 obj (\(2970.00, 1135.00\), 90.00) endobj 60 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[15 238 0 R 58 0 R]/P 59 0 R/Pg 23 0 R/S/U4>> endobj 238 0 obj <>]>>/K 12/P 60 0 R/Pg 24 0 R/S/l1_primary>> endobj 58 0 obj <>]>>/K 13/P 60 0 R/Pg 23 0 R/S/silk_prm>> endobj 1587 0 obj (ADP160AUJZ-3.3) endobj 1585 0 obj (ADP160_V2_SM-ADP160AUJZ-3.3,E020094,TSOT-5-TSOT-5) endobj 1586 0 obj (\(190.90, 1240.94\), 180.00) endobj 72 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[27 279 0 R 71 0 R]/P 64 0 R/Pg 23 0 R/S/ARST>> endobj 65 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[20 253 0 R 63 0 R]/P 64 0 R/Pg 23 0 R/S/PB1>> endobj 74 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[29 286 0 R 73 0 R]/P 64 0 R/Pg 23 0 R/S/URST>> endobj 286 0 obj <>]>>/K 60/P 74 0 R/Pg 24 0 R/S/l1_primary>> endobj 73 0 obj <>]>>/K 28/P 74 0 R/Pg 23 0 R/S/silk_prm>> endobj 1591 0 obj (B3U-1000P) endobj 1590 0 obj (SWSML118W98H69) endobj 1588 0 obj (SWSPST2PIN_V2_SM-B3U-1000P,E016303,SWSML118W98H69-SWSML118W98H69) endobj 1593 0 obj (\(365.00, 1805.00\), 90.00) endobj 253 0 obj <>]>>/K 27/P 65 0 R/Pg 24 0 R/S/l1_primary>> endobj 63 0 obj <>]>>/K 18/P 65 0 R/Pg 23 0 R/S/silk_prm>> endobj 1592 0 obj (\(30.49, 1535.00\), 90.00) endobj 279 0 obj <>]>>/K 53/P 72 0 R/Pg 24 0 R/S/l1_primary>> endobj 71 0 obj <>]>>/K 26/P 72 0 R/Pg 23 0 R/S/silk_prm>> endobj 1589 0 obj (\(365.00, 1535.00\), 90.00) endobj 983 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[101 981 0 R 1007 0 R]/P 982 0 R/Pg 27 0 R/S/D4>> endobj 981 0 obj <>]>>/K 99/P 983 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1007 0 obj <>]>>/K 0/P 983 0 R/Pg 28 0 R/S/silk_sec>> endobj 28 0 obj <>/ProcSet[/PDF/Text]/Properties<>>>/StructParents 5/Type/Page>> endobj 1597 0 obj [1599 0 R] endobj 1598 0 obj <>stream +H‰tW¹®]ÇÌßWÜÐtÔËÌtOhQ²aÀ„ùåïdbþ}W÷tŸw¹L.ëYz«ªùáõåû?¿{|ÿþ=~øñÝã…ñï¿ÿxùþõ•üxýû˼\yïüCÿÞ|™øC¦_KÀë§—ßüîç×Çïÿø§÷ï¿üëãþúËß>üöõߨò»©×cúãõÇ_ýì§÷8þ§û>\÷¹œÙ&nŸÿ€½þ÷xÁ.²S‡\ßž¾HãÇG€£~̵¿ÚíãË?_þò"„“jÏøñé œô´ã¾ûð^þñ[{žÃxSíÒÄ3c’k*¹½O +±Øõñ´´¡/ìimæ§ïÞ ·Ý¾:õCÅÎ×Ì?ˆ_Û? ü ϱ(]¢`/ü&ØkOÈ@9?åkÐØwÈ[ÑX7øIdtR„ÜKoèC¦pŒeòü]CO»}uê‡/¯ƒ&Ð™åæ­×^ö ¾AÆ–&t_§¡ª€ñgßÝÐÓn_Z×Ñ…ÿï\uiu«W"o¦ãBŽkñjHF36Iˆ.寖f¿‰¬½á—»óh·Gö.݋ԡ±|_›H¸@Ñ¥ã!8n»õ—´-Ð}›%È×Vö¾ÔxŒ [îGjë±›oì`2³õDˆ½Á¢/ÏF õ7 pš-î\ •÷Z–_¢köFC›ò£J[$ƃ+D/ZÃvTËÝèÄ-ȺÊLP¶jÃÎê9hxPp›š7‚Ô8ÜuÂØ<02‡i‡Ì;²)–ª•¡w1A§ÂC:µ07\ˆîQµ’5"p°­¬:Çcè@2Õäôs4 +:)¦Ü¬f$x’)ÕfrîŽÄ¦ªÆ‹ºŸÑΨV°‰Î·Æß´<@Lô¬±A†)%qN’·ƒIt4y¢Id;AVC;Ðh3AÙ«ÉA`ŠÎ9Ê7aL>P¯³,‹ñוf*õäÎä¯SÜH–ËϹÑãÚ"J™Åߊzq"hëˆ93 àcšD3@¨‡K 5Ë/±£ú­v*¾¨Nhžœh!§Š^gÍéEÝŠ/}$÷B_¦—Üa¸©&Þ¶¸09–Ó½¤D ÓϨu€˜žjì•JÀ':Ñâ¡/° B)ç‡B¬\‘8´Iè˜(5ˆ ¡f›§¨ÙÍè;Ÿ|T'džD1òÒ ~¡Õi +°ÝÎÿAõ>éÐ'èÔvIÂÿ Åû¤ã ²ÀéKƒPjêú§¶>Á¤Ì¸:/= +­µ‚{b:4Š@¬‰áC$VXÜRê×bnšNrôäà‚ø„ŒI©A±#ÿä°.…aÉ#{§ŽQýäÙH:Õ‡uÞh½¹u³ ‡>e÷H!e~ÀÖ)P¢úÀÖ"îÕøeIµÈÉî)Å䞊ÇhYwæ–áä–Vxu>L§Û +fåxôbIÄÑoù¥µCn§=ûš æm$ÜÌ…Ál-½ÒÚ!9á´GQœÒZÒ>.TIø„ƒ®¬´Iði؇ȥã…7”#)P|ký—ö$Êú{9rM¹¦©¥F!|š¸IÔ^â´†Ÿá‹+{tAôLha\žàdºÍ†'§LǬôrÈÌJÑÌqo„¾õ6$ ç“£‡äQ 5ãR(×½îà€/^-¡øl{Dïy´ôàŸR| oÐÑ£‰Í- Ÿ´Ë˜¡Q¡`|RñÍ%oØY ƨöÚÓ—û¸J`õpFB ƒ':™«Þ>È÷¡+™rHÀVÆÜQÜa¶â‰Gä±ò~d+^f42ºß–Cƒ¥Ñþpí}œ‹-ý!m'©ª[FíÆ +‘ôQÞÊœµ“06c¶\¯9âBAÔõ:ˆÒ@­ò˽*òìÏ5ô<¨æÄÔ%÷+žv÷d\zàµ!úYcó0I ÑuCØË˜ÓÁÖ#!éÄápÍ2y–o“¿³êâ·-p6Jý &¸(?îO¦&œ £Q_®¶ò>Ã7JºÁåÅaxeîŒ>ƒšìà%NàÞñ„>ñ Êænœ|²¶&5#ãržO•ºùŠ›k®¾ú’.%€[_ð$ð\ G·Z²íì§RÑx) ?z )Æple;[™,B‡i!ŠÂSf†‡l’§‡Ã-ÌáÙ’f!/6Ûú@ÛD÷ËýÆ£| —F³Õ?$„i«³Á N3GB¹‰äÄÙ:ʺÏC6m&äâ Œ(áÃA%;H’AQüÝŽ¡St{Ýé(?"‡DÏqG Qõq¼Ó¬Òž|{‚:ù®$šC–ÝeC]Ð[xXàõ¥mcA °ñΩ$ÁiŽmù%dÉ» É’_Ò*uDÀUˆ'@¨[§`~8š}Y{XW44ÇÀnmï³4 :À0 m~”‚ÈÞ39CqF~I©`„(Ã2Ń Ƶ= 4@ÏŽ:#6w&¿*m6F ‡oÖ2TqtZ€kÝÎEðó¥½ù +¼{,÷Yqû +±çr²šÍ¶†û{R·±„y°üFÒ› Ña/5|,÷³ ¼2v$¶Â„ºëÁÔùV|ÐïÈjàºÜäLCâîà#d¦•Á–žº!­e7ð$Ù ,†Ãù(Pð œ|¢zÙ4¼‚hbLÂО(ÃÃç—PÁÒD4¼Åˆ£6¬¿T‹ pd¸”ª÷Ûo5 ’ÞòØñXªîÁ ” ’”ÓÂ5Á¬3goùC?ìb0Ò$zsM†µ&¢OsðþºmâÆN9-cj§]¢£"ÓÚiÿ?ãe–jéqá÷»Š³µj@èÁ-cl6ö +Dc ¶î³¶ï/³2럎„èûÇ©1+3"‘P,g»¢p蘒Eªû0y½Z­ñuxÄ¢³ùÑ!xÄõ:un+ŠüåJÍ-0ózkdÛ´6yü¨¾ùHk„P_ #Z½ ‘uEÒ%z©”.t¿1ØWZq¼æñÄê„•ÒÂ,¾7èt Ý=@SAÜNw°·”Ìø­îÚG<§€©çæBÉ=ÊJ¡Q¼¿*A­h‰Øm}HÖÙc»u,L’R.|•\…燀y;æ.Zù64©‡ÊJã$àIسúS¢š·LŸ}¬ÙÛÝõzkŠÁ ÚR^ûÕ(LÒ£þa tŒš:ÓièÉD.=T¼¨c޽mÎRõ Ó°j‚«‘ê’¬Ü1˜%Z­&ÅrèKô>ÎY]`é4¾Z¨}4755ß6ÈAêQ³¨Ð8®}$‚Ò‰ÉEuÃ’X¢²°R2ôïª5‘³»µG6D©™’ÖKŠ»TϽØ1‡¶„:2¤éü"\ÁÁô›Úš2`¡mrº ªHÒ9BB,$Ó¢óÍDdkÄxw\l‘,ÛDyè®#s®ÞTR-E&‚ãD0°nSÀCõ6µqø€¡¸FH}‹,v\’vaJâÑAÎ!-—JÆ8”ö,*8cð‡êDƒ¨sÝ…Ç‘õHíàL©ëF¥†éõ å 7j¤P7tˆº&dL2Ä4/ïPܘ@‡98·øFShnêH,]p°Ò·F'M[:ú™©9€$F ]׸³Í¢o@ÖX~ƒ¶,HÕvu&Ü7¯éØ]²i, Ô£ƒt‹‚¥AHB~QS½—Y ›K^«ôU+ð™ºVqls¦(wˆÔG«ã,]FYR›7Ä=Óúj.U£Ö;‡­Gk¦†/×È,¤ñ’ž'Ðϸr|¬ÇΔËë»V®6 ­¡¿D˜».‚B›"fuß³”_¸V|ö0Œ°üi¨+ÍuGRâKimø›p"r‡.gæ´½3ˆåôŽùâ•`nÄÊ­oƒí”÷­Qc +§¯`Ü'¸ªèI¡4Ñý$޾ÊTôhË”DU0œjp‹ ¿…`^’h|×AÈÉt'(N0(¢º€7§l€au'WJ—sz”mÙðGñ¥:d …ÉØ †û6î”H|+šÆ*íu&ç…B‹3šȪQÅÁiWâ+A§Ý)Õè™ö¡Èã°Ä8d êÃÆèÛ’­ê±¤í «4TÄËâŸØ¬ZÅ(…v1ú"’ãbaWü4³r®TP4,´Ì=ÙæX¨iå=‡Y§óžÇò·{0žlõ/­W3˜I¢U´þ²s6`¬SN£îÀâ´’ª! ÕZ1Šnvmiÿzu°Þ„X4ÂHR-â£þ¤yJR¼cz€ع Å!B«ã +Ûìq¬þEÈŒÒj…¸ª]±ûQÌ”¼â+¼þú‡,-~ø'ÿÿéõ‘šða Óc•ãô'HüݰUø;׸¼Í¶/åJî ‡e™Î "ìß—1ßÕêk­a´F"$0É\nRkô‡‹5VÑÝÖ˜ö<´0L?67ÍÓFCwûó>® Øç»É>ºØ÷ÛѼ¾œá±Ä=ñc í¾¥H?ÏHþ¢ ¢ãÆÛŠœFD íçiÂc£Û ÿü?tZLõQI:-<1º:Ý~lJÄ]UÉ]ޭ鏩|ûo6ôüsœÁ|ù9}öQ¯Ö#BÍ&çY£QÝöèÒ¼©ù…¸ø‡”ÍUAFYJÀšqpòÈ⯠ÃHÁ3`bPÖ@ÌHžì­«ä +Xbò*ÛÔñ ˆF f€4t«…™“ºÂ XhJ‡pÄHSµ40tþÃdeC2kVt w_’˜j£UªbLç2ÜÀD&ioG6P4¥)Øç"ªÙ¤ÍK:2'³Ê€U‡e\~3Q_saô"×…–Rh×­¥õÀc^‰vWÎ~½æ§ÌÛ½ÑôJ„®ÝA!/‘Lò:ásH$èü:ò:X’Ó;Jv 1Ïç°qÇGj–Ö~Î!É 8ÏÙ&Y<è/4-[Õ®áošZK­0W)ÁJ +Ç·Ô˜Þ~,á˜F× ÈHu :¤R5ÌÚÅļÃ:x@%˜zS7ôíC²˼û>Öyî÷MîqÀCoªÇÀL‰ ô< ì­(Õž·¾¿}@;úJìÏc‰çV·4U±®èÉq€„‘o—è7! “ëöç±Äs«oÿCíåÞÚ¬²}QæC·%8AgKpÀgKp 'Kp 8+¾¸ëýïþúúøþÏ__ßÿü5½~÷“|ýå—oÿúåýðàz¥×?ê/wspNÊL+‚EH)˜%±£–=ÉKˆn49Þ†(fÈ&©+Î]‡“tËÒ¾L±ÏÁ ©•œY}W¦ÑhEæ¿}ò¯Ïõl› agÇðJ°ÀfÔ¡Žý*X™bT…BàÃns÷ÑCÒkIQþkM,/Í!W5=ñëªSªß3Ãjç;F(½?öugv…¿óKc^×{žÎœPÖ¸F‚lEö®‘`\å‰ç\[“¡׸D‚±³çK$€J­×Hо5hørkmn‘HÒh]#!5Æ!îXå*×¹ÓÙ©IÉx>áÊfF¤ó 7ÄÓ‹lßãŠ×;¦6m8Ò;è|>Ÿùc‡Ü»Öòù$ì<×ïõ;Ž¢!h_Â(ùúKrîr EíC‚BƒÞì tŠIÁZJ®þlßâ4÷q‹r;È{hßÕ.õºÞ>ãWȪc=®O÷ÕR¿ìêÐqW™8S¾A㹂ÄÓMâ^,,BÎb‡r]S§´|k9¼¢!¡¬™j·Qøô5³å0 ÊvŽ:zõaÑ аRó:\iÕW¢8•ùÄBõΩXˆc\ h „âòdÉç£x/;ߙʗ…U¤ŽkÜãš=M›yú¶#®Ún5ô}[{ÿêª Q1Ö¬u?v­WÓðçl 6j2ÈÙ¨ô½C/6S¬¢a×ıj¢ÓÉ—dü<°#õd6Á½Aô?qAñ¸Fµ’¥šG¥/Ž m'OîÂx‚áä s½ãÄ/(%‘Ò~Z„x¥ÙcÃb²ÂɃB>Օųù“…bIÑÆ~î°”ŒžÇ1¥cÁ¢ÍÒ9¬qµÙIÀF]¦9ñ:µÔ¾‡»Wf/DzéTâ‹ÙPß÷¸u±87 œ‹yQšcÜ 8ÇeuPö¥R_97‡vUzXK¦1¢C-/¶îù|oIé´§MÏÞîõ’I¹¨Û%Úšªãü&×ä }t¨!‡b6ÕäZþtt:kƒtäK)kXJíœT ´f;ù¦"æ½ØJR©‚#_w Öz;§¼@e'$¥rS³GQyW ´Õª–̧øÁìÅù«)•¥cܦy¨ÂSº—õ".@ÅÃRjóa$¨EÙX¨µøë óÉzSX7kÒ‚%e“fkÅjSZM1«†ïÚ•À%—Bô=z/Kª¦F°o”Û´l[×Ò¯˜úâ–=•€—/[Hm¥Eô@¼î‚FÝÔ¬¥,\Å}×µš„Õ‡¥’­¢Ëºº¸ËÜRÛkÙÄ3D*ñâbýq±ŒTÒÅ^b‰4‡ +rΕ²› +LîŸÐúØM´·K϶X–™j¬VÃÿ&[%×Bª©Æ"!Ð4RŒÖˆU¢ÂòÙ×&BóyS§‡Ç=¶©b‰mc=^£ˆD%¶ÜOÌ1ŸÑw9O²=§ºïà]ˆ ¤Ýv` Ýë9¦*ðr³RÃp]XŸZÍ[‡Ç9šØ¬ûYû¨ÄŒ¾ 5¨> Õ³ ±£@êKÍ ùÓU…N6,A—çËÌù’Nnk+J1rš=žå¼¬,ªÎ!ß‹÷¼ur(¶rdÄ܃æ=njŠIW·©ú8ô¤üeäÑ@lï¬ö”œç‹uS@?Ê!@®ÞëÊœõnÐ ÜYï­PÍHÎöÜj´£<_ÞA½PòÕZA¹fohlq£>\zK•¡Lwn +Eñäˆ1åf«F"°2"µC‰ùösOƲ7Û”c†QL7"ßX­|@æ¨îµ­ß^n³í©ÞmõO,·„}to 7’ ŒCarKÈ8líÐrÏõ-À +Á¹fI©)9gn”AônÀ ô#þýƧ¢£)åô!¤•Dn]Úz W¢}§òVê®"ïñ–cœ&åÈhÛÂÀ¹F–cœfÎŒ yû\ó#m͸à½qæc®"×c!ݭØ©¦³±¿†U­AbìB2»Ng<ñÓ7ý¢Ý¤ÿ$ï¯ëA¯¾È¾ÃÆnSAzI·Éb«&²݈ÔÂÖLeÕ Ö‰rë„>ÇÊYeÖTè$¤% ÑÕî÷‡¬b¾¯õ~ñK”‘Nwm¯ÔÏ?%²â>‘Ö?‹xz`ièþßìE_ÁûELèŸ îft¥´]ØõÇùWðº\ßI3èцt{µ*’’¨ÄΗ6ó«‡6úE^ôÐæº%hóûÞÈ»neN§C½ÜºûŽ_ð©ñ€ªFüñx‚³ëŸù(æÆ.ŠRÉ~cÒy~¤ów”›6]<ù`ƒ•?ZÎÎö÷Æð+¿ +WZ¼œ_Aбªô²ýï ´î9IÖ-_1ÔÁ ޲¯z_ øâçþ@×»ŒRHwЧýicXë<à g‡Žó…WOÄ÷`7©£sͺ3H&¾ÿ‡5Ÿ°Z?Ø<–ð©» ¹°ßQÇs ÂÖôûÏ?J36RÜHìyLþ +^§M2Áª®b°&ª9DÓ*¡s? ¿2–ä(‚ à/ OÀØ8`Ê&^-¸ãhY€1{óMFŽ« æ²ÄatÊŠÃÌyK«+ÁVò‹h•¼Ž©{T)ÁPÿ¢.Nfhúš.ôêÐê;HÙ@ñ¿)­;؛ۋZ[Ϲ5BgiÖº,úG%š†a}Í‹™¶%ocÃÜø2‡™/¶þ@ˬðš¯m=!‰ÏD6ˆOª§Ÿåµí@‘ø^›I‡jÒ¨N_ÂPã'IvÝÙ]©ìå¤YóÑå–»tÙîVÔÝ=ˆž~\Ù¾:}vÈöbDOqú9Ð%zú4c`¸·ÏÔ¥ÈñÅýf¿$Ÿ6»ƒclò×–ÇñÌød!Ÿ,M½=åPÃZ}æÐœØYÍÏP'Q¸J©-ÅÝ~UƒéXÕ™éFöÝðmج»“ÅÛ`iÞ‹uX¥€ñÖ 8€l#çÇa¢³íºoU§}¶X+…cZŽ•i`ÅoAš]•€•9£yµ¼¹ŒÝbÔêýG°•¶/.ÑM£È¾×–9¬uæßª3lÙJ‘˜˜¼"oå<ØT +X5c쎆é”lÝ%”êm瞢»\÷úšV`h´¬q)„>Œsóƒ_¿ý2z—ê•XÔáæìÄ·!ÓÁŒ]ªÎ ßØ9Êyú´/Ðý²<ù à ˜‚k}Dò »Ï滾a) µªd¥©†o „Ÿ´¡¿tÞª@x¾Cç ÖþºƒË(¾a稙Áy‰¬q=O;Ð>¬úðñ¬*â¤Øb÷?Xæý>û »©—ñ~ÃÞZè²`¤G„CÌHhÿPƒ¬Ô¯¶r â- +¿?›#Ú–rßAÅF7Œ°ë%&ž<ÆÚ0þåt,1¬ùb¤Iµx!äPÓ/+Ô§Ä瘧Î`5×"Ÿõ€0)"Qm·ÖZâk‹ÄÍ+©•¦5 S£^o'©Ïú Ä£%ÖÄß@h®nÎî9§³ÆÒ†€)q£HsqÓ[…<Þ“šl@Æÿ0³NÄ.–\ãõÃJsÞ>€qLJ At±¯~˜$U/øQLí¹¢”H&†¶÷z)Ÿ™À8;ÛÑphPzquDZ.6,¬e•ù‰AØó¤oX¤BžÌ ߌá+‘õ31ÕO6ÈZ XÖ~Æ6}ìØwO€H•€Vd/ •i"ÉœR¢†}¶H²Þ契]üÒƒ×úÄ( ˜bd3PíIÍ€× µ¥…rÌ—[ œs‰ékÄ–@˜†ùü1ýocìÔe‘«ûÖá^Hw–ÿë9+ûèô¦˜/¦Z1®UÊ£Äâàä° r;œtš"~×M±±Ø‡äBÒ B;ãeÀl¡P¬qblÖH±Z6cm=V7c™c,ÖäÎ&60·ùÊ["·½Šù®yÜœb£ùÿ¨µÝ;nß˶ꃊ¯&ñ°Ö‡ »Œ1÷áŸÒÑ[(µÙl›-­äßùöK9Àh¶à*4ÃÛtwÚIj›Õ£èeG1ÚôiÊ'å³EdS­ÞÃŒ"ùÎeB§X9Å7‰¼1d„ë@ÜAášoç£Î/ÅVMŒK‰ˆ[£œ¶CCÒi Ðj›À‰²õEݺ'ó½×¸u†•W¬Óëž OúŸ8¢Úàõ›§•Ò°a*nA˜‘áãˆd®œË…¢8(Må»G–PênO ¡Cœ\ wª E–lRº’Lö‡¢XñЉÏ!?>6t*F²¶à”ˆúÉHæ—h‹+µ9£œù-!}—J©IM8•pHeÓzæ6qŽ^FW¶ìÕaÌh•¸í·.Ä#Ö Ÿ¤š€±[µ¬XÐÙ™ ˜ž]2¬êÑ`ˆ ù»„º‡FšvŸL­ˆd¦¦Ë·ÊtWKv4­›ß½ä;< ÞS²ÿé/Û2EurgÝ:P€’¼÷H¨·–6óP£™ ªTÃüÜ͆y¬)¸-±nÁËy={XÊÆ:kǹh&Æ!ãô3™©ùÔeÎܤf27q˜¨p`Ëìà»ó­™kSÒZ’š6wj?¼QÊ]ÒqÂÑ*Ë¿Mjð¥ËÃIú]¤½ôŠ.i#‚ ÒÌ’>”6w ŒæðYdVG?>?.I®s¦ûžŸ³6{;&`³½yôö3xhÈlO=.ªÆÐh3Î^|TÌùš‡å÷¢=º0Ëel}¸ªô{dzxºÜc¼ìëQøë)h†µžjÞ3&r…uˆe³<òëjñýÈùž1¥@í„ež>úèd˜sßmû¬y¹ù4¦¦›7sš˜¬ù~˜ÑAfâ!µ’>õ +'ˆ1ö®­ŒS-,ˆL6ÜÛâÓúu6™Ýnócf¬0W}_Ø“´ž–þ•¬vÁ ÔXd'µ|WΧkúN·A5¦-Y#}’=f~lŸ*ÎxvHãd-“XV¶µLbq”R@µsL%ï&Êgt›,²&[%xÃ&Aöç…‘$€½¦ê ˆ,ZR ÕÄ5JüÙ[^¶¦ç”´”ž¿[¢âS yB¤JÞü¾Vzjy¢Á´ó†‹y/… |øÜRÊÏÍ” Nk÷ð«´XrÛTæn”õó`6ÐÑ„œÂy ¼#äàûº=b'|rÓs&YKR¼¯¯I°£)5>wF\`mFÍé:Õ4tEIؘXÌ.O?Vz”„ù'b]Ù${žšè›uÒ`a÷äÎÝ&oÜ' qé¹ Ö÷7ÅK.:œÐÿµ˜¢ªOv‰M6ŒüY×WtµÙÑÄZŸŸ½S÷šo¦&ŒTo›¯¨“íÙú ÔÁ®¦8[Q\’'dq?¯m¥²Jۯ˽ª›@)_È1ò”ò ž¥z‚×i:ÐìòÊ\ÍdZ+½JŽŸ€vº¡¡íU$×ô‰bšl²œ4Q‡µEǶ9ߌe˜íŸÓbÕ’Å_9ò§v¸Ï°šÁU÷̆|’Nš²:JÒr'ãœõâý_ØiÖï?øh‰øì +wþx&Ü<à÷AEjñúþÿ1œ©GŠxÌŸàuŒ]j™q¬¶Ødy9Û,ZcÃfµËG³Í0\'?UÞ°ÅI`QÑ Û 0K‚ â5n™|™Ñ—TÛôSÊ!æÃ!£úT›V;÷MÎ…›vưUw쌩Š=£é7§Ãt;¯lúâZÐr3»‡Ù{É–iø;C:‰Zyj¬CéÁ@¥÷\5y¤Qî ¶0‚Å:aí*ÇNÃV +O5§8ZC OÙ9,™ôt³³ßŠ‘g‚ÃÛÒd·Ïu '=›çJ3†yɵG‚ˆî"H)AB½_ý5›$d)-|²œ`Ó±œ9q!¯kð“£ñœ›°xÍžžy,ùœJ{‚<ÎÅ•qô®hgíœ2Ê*¬¤5Ê‘7å€cæö.r3—×jÎvæej}Õô!/ì:fí9’ÄÀºì/,Ç©E$»Kú>º°‘4ép¹»Ðg"³l:ëë­´‚(VM‹D;§(·-”»}nÛØ^V]ô×hî®Ð€íèEÑXÖjš+ŠZþ8µâE¬ •¡³\ù‘˜~¦| æ=U4·FÌ&$tÔPœ¹pæÊ­­Yý+:¹¬ .+…µ»ÅÙ´Ò²$ÄLÀ¡5Æ•în•Hz&†Jù·ätG4—a#{£ÖÚŠV5h²¡Ã×ÈÚ*ÿ +z.ŒÌ©›¨׊7"­à®¸=M«æ¬kãRIžZ‹¯–Ð~°™®ˆMeÕƒó:£ß¤’7cßIR–y·H)a»™õO¡²É²£qãÂÃHãê­iH’lÝîM<ø +ðÂy©VÃø='ÅМ+µ%+NðˆR…„ùÇ7é#•Æ\¤û׎hUCJtBÑ÷ÿJï˜s^(¿ÃÿaÁÏwD‡m“ÁIil í;Ö´˜]¶]44§){pÁfÆ¢>W¼Kh<‘ñ¨$|'$'fDú îgê´öÆ ;nP9w¡ÄªsâN#‘²dPj³x$xÖtm%ª@C¥W±”³­Ò£:-#1èL|m7MÝ3Qov°!¥w-훼\5/±ÞÇ¢WG«(ý °¾:‘#$¯åci,Œ ¢íž0™ +*Ëá•[-ær4°4¡ÐY˜.¢X˜õaªÆª+go/5jÊ Pb"AÝxN®#óéeÐÞG:‡„žZ¦$ï’Ê[¼¬~­}™b`Úø¹CŠ5t§Ð ;Ä¥úˆ1™vnŒ&.Þ´o.Dò…‘¬ÕE–bl Ik1©U6ÃGŒÊ®æbF¢ /x|¡Ò„õö؆ìxG“JW*§Z\˜þJ‡täs‚™"²M±:«á“Z´R1ÛÐZÑ …—&ì «¹h¨/“«RˆÕJ #dû\g90òèW5/ߣeÔ·ÒXšÕ¾ý'°ÉÙáR5¿¦â'œð|!ž·,b½Ž².küe5¡²ÃAÇÛIëâËdzåZ˜X×-¯Àð¾Øª›OżÏBñ ÉÏ)xl]rø{ß$–áɱµ'Ùç ‡ëÁ"ÂÃù‰Aûù\l55Œ¢2¬XÖ©>v¸^_g®41„bÇTÛªÛ5ŸSª‘·]öÊ'xÃRæR*™ äðyl‡¿²d ¸ví BÕ%Àƒ¢B¸#2¾‘èÀ„lmå‚dE•¬ªVˆÑµ}q‚[NénOû­â^ϹÝz‰ >É !·YåÍSï´HObmƒ{ìI0ˆËHm úˆC.¯£EO.%ï¢KçvLÜôÖØHÙÎn(š Ÿêʤ HWŠ…ŽøZê]õ‰+vª¦=N>Õj•²µfQél¶´@fªDÊݳ +ùc‘[d”n£2çB*êÒÚˆ¢ Ê)6Îæã!ó±lF¡£Î´.‹EÑð"Ò&£K k>Í’ò´½üÕ{z–¬ïb3——íñ'_Vé51-¹£ÄopLëv<À¦vïs7>z}YZ§p½‚h/›àS *t<%Kq–Íc„žÙ(W”JÓóeÞ?WŽ˜V¬eúà9Œ¾aª¼Ì8{pÌè¢f–/1í<¤Hg NôP4 +ÙàˆnCísÅà{k%CCÛúÄœë‡;.pzCîyŒ:0deF +--ßòAúñæ‡ôNþGê…^±9fÒl!WÊ>¢1!Íqö.‡ +!À\‰|b_A®`òñÝUrlIŽÃîmÅ8P"µÛ1NÌ¡Ëÿ뀨Ìü]}{§ÔJb¹_û\… û5,ø9bEM«u™žpmÖ^=!&Õ´o}Ü[¾ÿ]WXæ[(­‘pÎË£Ž;å2°úûŸ¹@‘AÔ.Â#ÁeõškšsÕÛ`tlê³òc\°(ý™0>µ.k¸šØ¶oÒܳŇ Ÿ³´…•–†joÍ×½‹Ö"·k™n>Ámײ^î<Š¬Ë©_MgÊ §É1û¸<]3…˜Õ,½eMg>µ9Ô‚[:ø–†ÓwÎV¥æøÕ2޹5.Q/#Æbr +1Iê@,}~æç¨p¤Z`ÍþÍ´!î¦ ã~uytoÉ{çÍ=JšFú-ÎØçbعÊN¥!4®Æ›Ö×ã@Ü:—hNµBcjTÄ/ŽÊ4 @äázÚˆÕŸ +ùx‹“uöV]@žb;†}„©šù¡WZ*%ÌÚ +çšë;l˜”/Z§í‡mëk©ÅlpXô¯Z1][¿–GqBeŽÔ#ÔFËΦm +¬$-t”]æ¸fœŽ ˜=¤0êäteÝqc†ÆE:ÓáƒzŠÿ0· €Ðö2ü9n¨kb¾UÚ×@ßuá³÷e­¾d´k²mÊ0w]¨³Y½³U× +¥×Zöb~¸ŽW<;îWåA™=àS§õ:Àúc.¹»H®G„ qØLÿ‹ÊÁ!Ït3e•Û,1oŸ2¹P¸ÏÊ”š“EuŸúºKÒ}a%aÝ6aO›\ÕâWx¾ƒÆíˆ{hšd鲨+qÑ–LYP:Æ,”žÐ°#?OéIŠ0?õŒê-¹ÓÖɨ(‚‘LlǰEýÒÓk^€|µ;7Eàý÷í=pæ–ó÷„Þ^CR©™g¶A™ÇÒªMþ\†´åï¢ +Ì÷Lm„ïÔÇ^n¯a F–'¢°Ö¬ŒO±)· H•8âI1òÖ1ŠùíHï€7ÜíX‚“[€mÜ‘o–®UÐóšœ%ãjòVÀLA¦Œ}HyàPÉ…©Êo,Uùõ)Ü–>Õ +Oj¤+ŒXaÂ|χ§Ÿ“ÅEw ôsñp‡qû(8ƒ:5²ÖA7y¯q3^²‹”GùÁ>ÕuÌ/DÊx‚‰š)\“z„S~‘ñ´Â¾ÂŠÊ=ã+¥8®º¢¾3^R|ãJå¸=Ì? +b^iÒD§§9Èíí+¢ÀJ¶ØÉ8¬#då¤Á›æVõ8cŸ,¬®Á{êëÜ ® GpÈOŸ˜Yy0`s¦(Û<îØz| “Ë.y¼µŽ [žââ¬çb¹90 58J«úÁÌÍÞªüÅài7!K¶eñŸÙ<š÷Ó‹ö ‡Øn´|`%ŸŸ¼xÎpU~jâ°ãö'œÕù¿ÖíOˆÂ‘iÌ‚ÖÖœ}Œ”?ñ……†dB“gööùâWÌÈ·¯7‹üÒÉtãk»A Å6Ž'þ@£µ¸ÈÓCõuR€%¯U“S*'Åqdït׳À"=‘×^éi»À¹3ã;ʧ@§®ózÛèîÈÌN¿é‚·@°^ӵЫšW9 Dëõ1'Lj8Ú}2)„E4»Vɱ!‚«÷Ô&4}ã:û!ôÕ82"àRÂ"ž3úÍAòåvo&½ÜÂD× N™Q&J‡ ¬Nv\cù Ã{UûÌÕÛƒÕbá+帻JÈš8ÂAˆV¤a¸Ïuˆ.N<É.“I..fŠæ•¨âÛìê‹›¶dÍêI°0׋‹\ŽÉñtK‹²÷‘ËÊÑ–¨™š£Ð|¢4èGì­bß.FÃÛ¬Uª4ä5îO“Ù‰»'Cyÿ2²fqñy—¥6˜â`ÈÅgÀöV¨«ˆ® +»P P<íåì#”ÅïóP!0£þ2áR¨VÏê ØÎðÖ<´J¨âf]_¦¥®çm?Z[ƒ¥Ü“iÄã%ܽ™ç ¯2ØuÎÍÊéU*Yæ³ã1+1Ô‡ECûf¹JsA¬“ün]j»HÈlh²&ëf‡›ˆ!UñËÂÎä³ÑO/VP@Þd¨kΔUY`ËüÝfJ±CðËÙŠgâ°“BXM*Èp°qczi¬vÛ±/ÁÙõõ\48.Î+p\7ÿ ‡_^„‰Y§_÷š‚‚ç˜Ojké@ͦý±ø°”¤šá}Th%TOÿO,-ÿßÊ ¨ÏÎ"AÅÕ¿ÿš‘jÒ‹:#Oû’.¶2$"´t™µŸ÷Fé m²Ü z–K4q›LÖv30!_ÙÔ·}ò½ÐŸ#—« óFv‰iÑÛV5n×ü¶“¥ÃÝÊ; R‘ ÃÝJrÀN†àˆ­’¾£ý-‘Ð<Ês } ®I[Ù2ÕØèœ‰ :ylªœ + hUq•ç +»×ýq·|V¹ÛÉ],ÆŽ}šH;«i#lèT³¦µ-9? +µ“n÷¾·´†Œ'|9×ltÔ‡ºsXEXÛç­q¼vNÆÃÉx/ËO±|ç[o²m¸½Æ®97˜ºb9n–œoëâf„6)DãMûãwgˆ¹D¯¬®OËLo›Îæ°qýŽCaYŠh.¢œ©T¹•Õº¶Œ>ÆcèhêŠ-Lut.š¾'…²ØUK´Y5nÌÃÎqñ¾…õ±…Y§ )Ì“=âGŽ« +/èµj§®e}™Ê¢¶ÜŠ·LA¦=Ü*ÙT)FÏìe…+8xŒÐP὇áþ»0ÞS4MÙ‚Š˜+6¼Õ‰ËîY¡Ćåí2\=«ll¼w‡›ÓtoAÇ’1Ô+^çòÓ”Â#ŽTë¡<:pؤÀä§(Š"ú¤„£tV“\7¹lÌá+e]¬ˆµV® òü'“£o%§ZEW:¿—¨>ÜËgQŸ[¤ ºÜwš®Ê!®HJ‰-g{·ÑÒ¨ÈVØk ëÃç—{PtT + [%ÔOoãæ9l«Q‚$šD1JU =¢B4nÌš +²rÜ’¯{”Ý`–[Èä'§¹ +ÈN]´WÚ¸FÉŽöšE”ßçÒ@ÜÞW výqJnr™µçÀj-í¨âÚYê§±bFrAXY n€º\“ß2‘¸5HlÜ“Õáî,O­hçšy=-{ݗȆ ß¾{°ñƒ¿žû/¦Éö½TSV³9û-bËaæC,ÜE}¡i9n\Õœ•ÔgX¿ȳx%þ'ôå·FŠl§7ÙL'ó]#RŽ +†-а´Õ-Ó¥Žƒ ÀnU*õFÀnýÓ¿¯qà€F9ð +ÄÞ•m¦ á­»œ–ñ„@hÄ•&dQi÷¡Ü¶Ô‚—è_9¼ÐËØðzù™bi\•›jè¨&ÌTÍ g+©Î-Ç5:¶—Ú7ÌâRû^s]/–ºV¦Æ¡UUg…I¤áà5 ¹“ˆ+ô÷Z›Y·Ø'¯¨ür¥ø`ì4@«K¯&LFyÊUQšÝžnÍ”Âb–Ò$»†ýVÊ0£¹ŽjÁ”sãSêPH½Z^SÒÜRIÝë JS Ükꇘñ:ãaÈ\v]…±¢a{§DÀË$@?ŒØ\?¤ Q5ÖLËq£X›tÓRƒš¥ ÒBˆFOátÑòx§"–®EÃh¤"æF\´€‹h)8™ÿ!}TÄ_5jÐç6#Ûï€P¨x¿„þ~Ah³z$öî³×øðÐó!^qÚw® E‚$·=»øv?=n0ƒ£<ëþ¥]>[ ×¹®ÓÙþŠ‹¯þ9Ãÿ鮲ìÐR¶¢ªƒ ì©ßþ[¶eà&¯¾’(—Ƀ$›9ÿ=7ÁʾÜî` +Œ <´¯Zü»ÍrVaò×Ã}a¶ür6ˆ~ çˆóÒ¿açÆŸ.ÓsÑFZ÷»DÖvöÝ€ ¸ÈÿÂz®ŒÝ#ß[üƒXÃÄ}RÓÐ÷?ªä@9ñÔˆsÈß!Ï É*8Y#HÃÕù]û »8ù;t’¯úö øDŒ'Ï—ŒÅºyøgqBwm®û<ËìHãõ¼ñ°©IœºÕ8£»¾ý1lèŸWZ'¬÷3Ǧ‹œaÙÌve¾‚œoÃfêIšŸí5ä›SóÎCX^À…n ½Mã„“)'&t„¶)v³„ýVeD–W‘<£¶)_É5åêQÆ%oþa±"“]†Fפ»ôiç<âizã^“Kƒ8t:Vƒ `Ñó³²ÈÙOxØ¢(ôç±êll¤ ß@¹‚‡I)ÄöyD¼‚ý™Ÿu·“Å›ÄGYÅem¿úk%±gÊv âµNlœÒA#ý°‚GôSv59öñKãEh>®ÈTH«è¾<¦"¢¤™~`eìo”Jj¬)Ã8X§lôAu& SËò,iMëeÿÄd>ßýTûrÝD–ÓŠ ØYÞáªû‹¥•}צO} SÄç&(ö䢓ù}…5Jçn¡ÓÖN {¡G2¨¶:w1Ö‰:Nè:YrÖsh„øíØrý©fØ3e/˜R’‹†ö$™ãQûI.1bpÍÏ¢ ¾üT'ŸÑû©”ÖɳpRÊ2þ’ç!Uí|qñuRg‚€ËÎ-["̬۵i÷Ë©øï} ¡ß9ÖúXsÊÊžzȲ̠cãÊÂÖå@å P[ÒqëÌ­h’žª°%Ü­¯ŸUº°Š ðQhݼ›–ŒBÕlb„0¤çäqé^•hݼšzqZd{VüšuGTuÖÄ>st;s™a+Z§V?±6”¯Ÿ1ÀÇè]šØ¬mü\J7þB[¥~.‚"½j21ž‘&òQä—z"”¬Ño4r¸µ®7²—¾‘“Ei9Ü +¬q÷•=žé|Ì1 Bú†bä£8 Ûmêžô#·Qj†­Î‹”* ®ˆ’¿ƒƒ5ø;m‹Ó“C&ç‹‹µ’ÛõšÝlžé³YÙµ}ÏD&öŠ`¢“ÍÎ ÂÛ–ÜÌœÀEÞòå%}1 ÖÈ‚ôÅ7Œ/¤‡ÜÔʰ4õÀ2Ü‹­hguɘNßhe&ÏŽÆâÐ}dëÌ6z(:L¬̥㞮?Ç/¬æÊ‚Ò ”;ªÔvå FåŠÌqø;ÝíƒÕ½Ög)úsÿB²cqh!Ãìµë{—¢sµäëÙ Ž^ éäÕr-}¿ZƒÍë‰ 'I#º~Sz¼>ùиLZ%ŸUô룮"çÐëì×õ+ÊË•ëœd¦f$Ó!ÒêH=bp èŸá£^íúß_ô,tn XÓÛ‡´?€†[ë˜~ÐœÑ£É Å8äí¾´é|Y‘î:?Ý®ÿ6(è¨k~kÐpÕ7¨Fg¨GˆÉS0·[²j& WøOã¨ÐE„<§±ýôTD3.§Ûi9 g8Cc'„„žRW¼ÐL3>$€¤Uî+Ž›h+6uëa(Ç [XbÙôk€\8Ms¶ò@ÙΖÅH#O¢‰Õ؈x€´ÂJ㔣š¡ÚÊuJ«¨H,»ñ«%”B°Š|blÍã\‰D›yTáºg˜‚­[}•VQìùUÍÚîY *º¢†tÈÇçq…Fz¤œí§V@u5ËqæE+ËãÔl1c_™4ÉxÌàG}ÇdjÖ:NËÑZnUKœWT>›•µˆ™–êÌÝ%lZޝ€’œäð÷&O¡òuþƒš{ ¦z,}Âd ÁìÜx”<~'í&/"/…7ê¡¶èÛšNb EY_îDŠ;½Ù…zN´×èäNÇÜO¿k¾%ý; ¸À¸h±nV^j̵ˆÐD¢^³8Ê!Pš~½%¼yÞ,’4á"hÐlb<ç*=Ôž5OƒŒE;J2Ÿ®òNs'™,&iˆ¶­9IhÍeµ—Æ'‡ºu¤”Ìœ~7÷€&a“,QÒÐãqq\é—x6ŒU9jœµdí|ðâdd N8Sä,}©]Z©3œ¥§\RPT9Œä8…blœ ¸Î*V„¸²ý'ÓPž£er¼’–mæШ|ü…=¯Ä‰SÒÏôƯ&Š?žÓ­ÿ‡œs.¹P9³ÅIÖv›ì{É'Y÷@HFÓ0Bœ5ŽüÞ»§öTŧdN¥ëœ±n”#.tÏ„hÐSµÉKÁ`ÿ’™´3+•­–ÍóÎ*t,®.©ä5¼ÑûšªvÓiš7z-'Äó +”ì; þòÒa±—QYì–P8»k±—÷º¼{y¯Ëc±—ñOzåê€îNÏÍJ^ÿîÑöÚ>ÄÕ×bÛÔ²¿Û´a~-öv+¯Å6 +Ü_‹m$Ø>Û8°E$è°3Êá°·™Z;Àlm8¶Ñäþ:l­û?ûÒaÛÂúuØ€’÷’›Lì÷Çaoo´×a›mØ_‡m.¬|6bàÖàqØÛYB^‡mViÙ§Ã>!>y(4¼é°M åë°h8ö2>ÝÓa/l:?%4æ×a/3ñQ:l@Ñ—×a/ÿM‡ äÿŒWÉŠ]GÝ×W¼e7Ê9`¼°,D7˜6*ý€FàÖÛhãß÷‰Œ!#ï+‰Fßw*2"2Æ“¡ž ÛJÖ6&‰P†=èo¼n”aJídØ€¢ìeØ +m†=–Òèö BËX6 ZÃÆïQò±«õ.›aQêÊ [Ãä6‚™+3e؈x'Ã+ÿÉq¶ÛN† h(3–â,¼ªXC†¬L„61¥ÓÖî\@ŽaãÉâ(3l"<â”0l )ž ÛAʰ5Ý.áQO†=רNža“Çñ`ØŽv2lº„ð#¥ÓøR^ì  Ô\6iDÃRõÉd]„ár2lªaæÊ°iRÉ£M²EU†=i; ›Ê¦ ›Ê¦Ÿ >2”aS•¤“a»p*Ã&¥ádØô…¸n¢ìªE 6j*Éí”`5žâqcŠmJ°Ç ÑìA$ú$Ø€4 J°uÓ9‚ݱ${J°;F³¾¥ø;QJO°;%ö$Ø}‘èè›>Ñ”`Âý’#Ø@b= 6 ÉHW‚­ªÜ,SƒŽ`ÃÏ û¢˜[Ci¸lÜ9Ë‚=Ö‹Ž`Óº^®[§’#؃J'åÐDÔXN‚­)Ý{mácJ°)8 ¶[*B°©àf½,Íœ…i1Á¶f[ÛlílG°çâ|ql'£´Îé.¶1s'Áv.)Á6ê²imQO/PvL/”ïNª‰“`bi'ÁFÙ-ˆÍàDX»'ÒfЗ‹l)Ï´cî¯ß²¤âIT.QS:mêoKž^Ž;Ùöp«.?œ¤ÿ¾½!;ù¶óóǧˆ4ÅÛ×ÏOùöñ+¾‹dúMBéÒG¸¥šŸé)…ؾ>ÞŸþñ[ ÿüøçÓ;Uòáýmªî¿ðóOü÷$ŸNè?dïÎX(X'„%ñ”Ð.RÖ+аØë°7†Jâ¢3.ØBC ÌuIPÉ"HýÖOAxQض׸æ}ʇm|Å*þl/±b’]æ*6R~Pˆ÷fž†ªq¼UÇ£—‰ž(vI½¾ÒãÕ½ì“×»ê}ðÁßþ^Óô…ÊL.1¿°ŸïÀP_'©’¥»]Í(ÊF}ÇáBãá°¢‡‡±b¶ï¢iµ +Ú{5@7:]DgfY Åu Ç¢<]$S[1ÊÛŽ0”Œ`Å•¢¢Û×j­×›)c–‚¢½ ÍD„›iJ3¥ n‡"«@KGæWoãé³V2Ìv²tÄ!¹ KÛ—C«2D–…^8Êù­Ù°–U²g9Ÿ‰2UAG[@ë,¥_PTBÕ/rvÚÖpw„j°_¹o”#BwõA–ˆæ–U½˜5#Š +—–.¦w1#ѱӛ %¼&«7FD0g‡Dgt¾1¾òŽÙHíÁ_*cŽnî;Ž`šrß +n0¾ÇŸËˆ]V»å]Qb`1W¤'t/iW]Šñ1ÍW´\ÈëS‡¢G–Pý!wCk-‚æ´s—b—ž¬%Ú½GVÙ³E¾Ô@ѸÈJäHo‹;Kqº}Øèö×:°¬}å;°`ŽD›# í«ÿº¶_¡G þ†÷[]˪ÀÃÆ~ã§s(O B{–¹SPŸ=‰ìÊ‹«‚BãjžÊR·Šs +$(t­ê O¡ûÓé½L&‡5Œœj*y:[6CjMÆþÍCÄG¦hÇÞJ—»œ’6£ò;žÞöFÕËïÍDÌðr›˜ÙCÉÅ»·ïm¢šn1Ù8wC¨’T@ÆÆ:‘°BKXV¯¨sQþ,u¯dzÚ®èÁFoùAs"(ºõÒ”Ž†’ý9e½0ÔVðvÝ*4+ë’ãt1„ç„È9° ŠÞq8 Í8Ì fh„vñ{Vñ2·!bL¯ËÒ‚#Hø Eh6µ±4V¢m}²–—CîNÀ˜Co'e&†ÔY/>L}_„IÀà¢3M¢Ù¨7d+¬} ¤‰ÓjuœdšìRgª4Ád±¶£å0Ž’¡´+"]¹Ï %´$ædhº•a E<}á +/ëŽè—ÐwÙ3˜á¾xÓU¨ß݃[v÷٩ƿץÈh@roE5&¢¶g +Ö¨&П|]ŽÕ›­ˆÅÌv4:JÚ°2P]‚É&¼½uŒ°PDRÛ²ƒ¬µi ns•Äð)b|ëÄži]qX§õÓée[­¤Rïs +Î2ù°5"­(¶ÑA%ÍK¤»ª÷¡x¸¹—´yLoÜE}»ù®ü¢‘ßÁG‡f­ƒ$C…Ü— ´vs™ŠRÔLîWóßs9üDX˼^h…Õ®gf0ôYWäP¬%ZäJ7Á Œ‰íô”£öâny$`ØÉp»ôâaz^N~Çú–èaŽDs좳E:ÞöE9òØ©.Åàtší.îIÒOɆª[A†ÊÜM²`döÓ¸ÛMnt̪H\ÿ¾~~z£mðÏZ?•";£4yQã(úbñZ>¼ç»®QŽƒ<¾¹¢xêä=&égÍùY7rF:„ù(êxÙ1Ȥ >ú Ëj¤õÞ® ÂoŽã(–4 CˆlÔ‡Ö² ËÚl 2U±ˆH6{ºÊµ˜h޼ä’HQÁˆ‡£qF¤0Z‚éZ[ö¸lj°Wä¨yPùêš'•Äņs ß»ß3QÞŒœ«»G\ +ñ­yM Èô|Y\4c]ÃN^twDT+‚ÄPF³– ñ–EÛ Å í Ž +@¼ØÃm·=ÇuEÒ•éD{z;Èõ®÷øâ=Üàj¹ˆÖÒfã·É¥Ù@\@ j"bA}öòFÚŒO®Ãô_l¨‚Íeâw—u9xå(pX·•' W:^)ʃ„P³ µ¹2O°>¸ïôfdr0Ï}<5q“Œk`ÁtÀ½áD*i¢ã~€)V.Yx™È1‰T\8@5¨ÝHÁœŽ$V"¨±«Å¸È Ž„€Î%átv{ÔÕƒt¬m7i΂G;ÑßÏ/=£øåùò/ãOÖáA{wàê!ëF”@âÞ£Ï^0ð,Lï×k Ìã,@dþ, Xk ˜_g½–À:Ò,Œ\¤|\K€>º/ò«'Ë%•yߎ $»ÁÄU@áÈgàÓtS pzŽp×ÀÊäY¤z¸øÿö+¥˜£Y´é?”þ­åŠîŽí¶Þ—Ó¸~]«•“A<XÖf8ìµCñ^ÙÈ»F\ ·KÒ¶fwø‘ÂùR„_iÖÃí(>VÕÐmJñݯà œ¢‡n—u(ph¢  ÇãšqQè~§&îYד‰1ÒöuV5&*„Gjm¶&37FÞÓézÏqø½F`@±HéR9¼‹6#ˆ¯Ð¡ˆzslïÕ[*em+ÛYËî­5ÛHç!Ó°ê†0pë;or4ŒA*V\C"¹]2È[¶£<÷äëÑ8QBä@$—cÆH]¯Ñ8¶e$òL/&4÷¨©“{‘ž‰­Œ…æÜ–¾Å(qsEÓ d èm MѾ5€èÓ…YŒëº :&|e(OV™Úc,ÐÖ°2Ù%´>N+Ú3»„îªs"š­ô…»Ô|.]¢IQ %Æ÷7åU®cÙqCsEçÆ4j_BÛ’• ‚øœ¼—øÿ.UdÕí<ê>Í˽I‘íÓd5¯;Y§,­wy[[z}²Ì"Ú¼£]þF:>±;ÇÎ '•æE|dŒŒÛU)"Àü¨ê)»:À'˺„œóFïÎâ÷`8´aIÜ·ÐA×*{KO.ðÛb£’ÜØÒ¡ùÖQ°ãPÒO =Jq + IZgQ4»b¦:«ÅÊ3ú’Äy—ò’M‡´º²Œø~y`¨yû1úq&´ˆ¬DH–¡ÎŸÊwiÊ:„°ñç(;´aKÍÃJ¼M ‚93«C2Ý êˆÎxuXÒÊÙ(ðtjV¥ÉFŽ›BrĬ}9².K€˜5:ÂqÙÀ>|[;“‰¡ë{¿¢½KÙ¦¿eU·¤‹)qh¨¯;vr_­<è×$7D×ñÀ[O kÎ…xì6R­ 0ñ>°–‹ºzTé’A$³n¨ IP ߟH¡«¹œ& X"@o¯ÐÊ(”ùån^‹)(ŠhºO±"-ç»Íð@„ëÝ\¥±0¶¤xëôiÙÖ}ú¶Ÿ>Í‚ñ¬í²¬WòfvTD4².™€2²@¹cCaE. ®Ðã €òÚ)AIØЛ>=•;=‘E}ä!Ç­±úrvk’îÖs¡ ”j»¥jWõ¦ K-2qdJmž©C<ëõ‰ooËJAÓõ +$9ªaox[ß ¶Æ®Àå é!äjnvÛgŸó–DÌQ{ \“áôþüŠåå½4ðÜí¾Ãä`‡Èg„]D ÿþûs¯ÃÑ&­ti};vM}NÒ¦9鉿j®wg-pÕe”us&jVÉxу«4g¢¥)“]7#-·Å_‘uìè+N‚ÿ¶h‘âàêT,2ýŽcƒg•nØ;Ž žq`åxÇÁŽø0øw~&ÂÚ„_Æw¦ó¦ºmx™!V’Û•ö“±‰²ÈVñè’±'8!/÷=MÒ!WÆ)‡‰…gÐ>ØÖ°s~ŽhEN¦ ̬pÆ´Gƒ¼EœâMº ǰ©2²ÈdsLæ +_I643+“ž²/IMŽ×¹ÆÀa«Xâð;wÏÍd‚¦ä‘FëcKøÃGa¶¤/áÎ/5­Qín ß9ÒÞ¸9øIín2Äe¯k®ê‡ió'xêÞñyêö†šáxÃ[ß uSEãMݾ¢f·kó^’¡ÞÔí+õŒÅS·ÔýÕ;§<±3ØeŽÐ;ÿ-–}Óº.Äv§ð¶ß‡ÍŸDggùÀFº·lƒ)ÈÈsNºŽou¤ÈD¤">>DèWgÐÔ5ÈWUß–}¸ÿ-’;ãÄ1I| PâÊpÀÂÖ JÚpìå‡$ÝzÚñ™††‚{÷1ÛxÁtp1¸½4PûcÕn× E™•N=>ë2ºƒÎ/)][¥›#uЉ—’¹¡ ‘*B(N>ñâÄ ¨ímòƒ ŽÃ›ÒãÕKRɦ¢¦›ÓXßçÏ–ª¢¸€6špzvA›irz² ŒR8¯—V¶ÂXî&‰sJý¿KQå+t¶¨¨#nûø75[¹o´uZ©-‡š—¹3Û-‡-ç‡^º‚fvUª¦f&Äl¨ÔhjU5ÔO,s+Ñê0“Ô¦MÁþðYˆÔ„„¿3FssKÏ1UÚ:k¡ÝHŠÖú•EtWãÔ±Ð#>V@Ž +)Ö@s¡n{½Æj±¼ç¹$[´¼‡ÈýtÈf,~IÑܬÊú& 5o¿ÿöRsO‰ù|{}-~ŸÅÕR_Ú‰Y• C"%´k‡DêAE±ÕõJ²ö#¡}wùêçÐê È@MMÒ|s=âQß#§ôêŸëò=yh¾uXx–uZ…ÍõîBC$rõ•'/Z¾»ÄåóÅŒ·åº„Їʚ†~Ñ%rÒ ôÆDŽUgëÏÿúå×ÅÐû'¯hÀÂÜ/U>ÛàËKÒcIJc*· zA‡ÙŒºL¾=˜tõ2¹.°ñ‰Ï'cáÀöt(ê‚zH†=NÌ›ñ°t>¾ØÏÄ›"~ÈË%úªª$ê®Ðœ*· x1Âý)üꎡȲ€Ûä L52tp Ƴý ®í@ )²?¥À \£ÿñv»¸2òrŒÏ1ò®·| HoPÑeòѧ—ã‹V°¸ïƒ^aÜ`mĽs70ŒAPR·W¶Å­.òajwý¼¶]i²;ÆÑä_9aÞôHÖãK\6®Áð“€#®e—4Õcy tòºÒ=ðö¦w¯KÐŒÓñ¢oÐ@“uø\Ÿÿ5'€…>‘™ãƒßÜÆ–ùúì ¶ ^ÓúëË~Ú(®…NgÈrˆü˜A«3È-3T´y¨TÖCŽnêEÒ8 ¬‰ºÖÙuxö‡LlNZ/ºô¿=ÖmE§íÀxrÜÊeuv¦Öï,Vý-AEïÐCëA7Pu£·e9¹Ñ*—9 ØVwS"Ë5—M—ižsüLj«³;Þ fG#Ö9ÜÑêÁmW\ØÞ¯[i°éAÚ ×ö4cÔä)Ÿý!p£#¢'%Ä·ÿœ#QHÔÖO?Á±Å‚´”~ô°_GžhtÔ× (pEµÝ;œ\Ù’Ùu€=\Å2]»¤`­½¸ié‰ÿÏA9ÝPåüü™ÛÚ+Q  5TPUü d#”#P ¼Äuy{°;0Ëmê}{Ðd7/\ÀÜïš9å[á”ü·I%ä‰Ý‹YWU¢•üòëOqóÊZâúáí(|ƒ‹83 +å%´ô¿¼FœM!»ä$tÊñ±Bþc¤:? Ä}åoz¢€0P!ÛQ5ÔP©~zÎq[DüÀ¤$`ët);r‘(éÖˆqžèÐs–1ösS}Û¿°úŽÃò÷H€d|?ú•~}@ÞRK¯sƒ&IZ§. ;HÒ:ˆý=øò`t9Vùex±Æ¸ü³j†0rK¿]šJmN2…ðëô ƒÎ2u¹Ócâ38¹`‹ìT˜¡O­ÖΈu…sÆ÷ÏÔâ¹.›ºðe˜º<_`ŒÜµu튡Û"™²‚Ã+3H/ü9uƒDºëQë7L”ãì¦W‹ú¦¢ ÄKÿýï¿û&gÀIe0¸¢†0¾…2'*ôûÏÿùø§’„×öû/â3[é ûX¡öÆÊ>€ûãñÐÔV@%8k(OÉÛÏ€A#µ«Ó‹ÈÊìø5XuÏx¹t_ ºD{GW?A_lpT|–åü–,:…ŽˆŠrúë«Ä~ˆ ’ ˆ2<õçÃw¼Õáã¦O“Ò>iì]¯©of3hIrÑ–B'çl,È%w}xÚÅäG«SÄmHWÊ5ž>“dÓÍü°¼AoHužPã'èû Húè³é4¸åæ§ÏúÊQ’;—wÎ@’’>>€!®èøå@A¢û¯-H{¹jW +X@Ƀ[lÆ^NI´XÕøRT“ÞO²=ÎhÉjm}Œ“QJt‰ÑkË›¤+$å°Jß°Ø*ÀÎ6@9(Q*¼–­PÓãê¿é9ä49^_ä]ð° h,>–/º<®0þßôÖŸ œã‘êÌkîQ’-ç‹·3ãËœívx4ŽôSÕëò觪+ù¡ _œ·©Â­ì=*º¬¾íx °è’¤vûMWkþì’+BÕ%â(Î ¹£¨UåQ|z’ýn¦ßL¸"ú£ívn¼ÎBÉ»[¹ðÞøˆDµ|¿ŒIÅäZõúØ2Žƒ«Æ»0[Ò—pgÈW¢éí;âÑ;ÒRó34íøYj)¬'«'[[®:Òê$»â!×Ñúª1÷&û@Ú_ü`Ô³6UiËõÕ›‚×Ǿ2ÛHÖ{– ù®õøü“ñjÙ±í¨¡óþŠ ­]ïÚîP$DPúŠA~ Ý=áÿ,?ËUçP”(½Ž·íòcÙ®íœýGýŽäÝî]ã­' + ªçƒ¶¡øÚ²$«þªsÝŸ7õ”ˆ{õô±ò'PÚZ7ž:r€þ—`!¥{¤‘‡§´$£ê*€=4C`)ý”cÊ -8gìÅžR€¾Zø›Rº>I53žù¾DôQâ)H_F±,¤¼”S·L0Ò‘I‘ +Y$=é>ß”ŒÉC—cžGz@?Ç=Ó–?Ïå÷¢D¹wìkêÁ¦çÖ–‚J?@Ò:VøY&¯[ §¯‘)ÒÉt@mcIJß¶[‘Y‘Q-`Îb!pkV·ß–W±ÝûXµÃšh—t~Z‡^Š›ín|²<ìÖpë }±Îz«ë‹qË1rc‘ÑŠñK.8E](„9¯K¶åJçªÖ—€"Yl”†ØmÿðPéÀèÛ ¨eÕ—”J×IÝFÏ’ … °–cë%P‡½½ŠvJ/P±O}ŒVê°t„—@!ç @uô-´•uo]q ]BqyY,.Qþß2½ì¡Ñ¿²ÆüzÉÿ„jŸ®øQ€_"ªÌûÒ¿äbæ421ðkã8VÂQ3RJÃ(ÀY”ÿ°!í6>ú¸.8^úàÌʉÞYKÒûoi }j–C?/CçÛKCÔ¾hcÉu[j–¾þQ¬u–ÝŽY±Ïh‚<{iɾø‹]cŒZŽ1ìßÙKΜP¢~úúFÎaûðÿD +úÈïvÐ~}Þþðå?þõ‡ÿÜîzýôó/¿ýñë¿Þ¾|}Ë,pÿ™,R}a~a75ä[º>†½P¥‚º¹P‚측cݾµÚ6§È1å}–Z¶—ˆý%ÚÀ2ëKÜû‚æ¬1}I –Ñ–Y-Ø—YW£hgÚÐîž ¥ûåÞu‹‰µ¼¿,F¥ñf¥ª®QñÖÜlV½2£oU9=¾Á°øVûvEDôǨ™1ºâ랃=W’Alü#œ|ŽrBY±n û¾Æ]’4®XB.%úX¼Z“e˜¬ÓˆÊ­/IxÕ-ÙîUcLbºÅ¥ +-^ŠA•µ/~h÷)M0´—¾"¡ðI ·vÄÄü7ewipV®å£¬üÈ\Y^²h\jËÞ˜åÕB(€u•­˜<ÐØ&1—qi˜q[ðPS,¶;+R9ÀË+“I<‘\ BZ«Ô¹ÛJT{jŸºè¬T[uуG³ziF¹”Ç¡ŒWdÆ–Qðíh›_…N‚躉¬ç™¢3#U xDϰK2°÷ݱHž€Åòš¸¼ÎªèŒ;9¡»b4ÆÒ<•ñÿwáÒ¹òv©ÒD:LÏÈK ;øBØUvr,ÔÛ®RûÌS\³6LY‘f\`ñ#óÁ¬ô®´Õ-¢Ù0]ˆt1³ò÷‚5e}ç—CË\K.ß³»¬pF?|ób¢`ïH„¯Hr¤qöê/?#D¬´xIÌù>|«Z'NÀ²1³±u.Ò7+©®v$µhy&¦WAR?:„°¼u.L ’tŒ‘Y$Ö0&ež)ÄnojÛh#Áuiù(…'¶S©¥#éfuk¤Œ-1 ŸÇ‘ø%V£¹#Ø tÔ;Û£‘ÚH½Ž¶–ÕÛUBŠ@!.•h7=´ÅX‹ÍÀYîòÖkð>æv³ÄáÖ£œ! +M½ñ/d +ì¤cxCN[ÉcscÓÜ—¾E~µüåEô--(û+?åÎÝö XxEiüöÝÊÜо¼û_ó6ß÷ñŠ›€½^ «íÚõ~ ~Õìíå~Õ¤³ÕYÅ„«DXN»G¶õ”©úº©\´ HðÕ¿‹6±½'¬íéýßÿ|û¡ðƾ­ñiLôe*]×*Zã“.îòá¯yKcÐþIâH!V¼P·ÚˆŒ‘\ÊQHÿ6íß6UM«Sn t0³ÈáæTÇħ²sÿ^ÍÑ­GòÔÎy"ꟑå B’Ö‰i &„¤úɯkèŽ]«b›N¬ñµ¾`:öŠŒIÁRe é¶LÐÕ‡ŠÉ\[‚èŸqË*Ïú’¼ñöaå–Ù°¼^Çöz¯vÞZ`‘Ù‰(ÝDý‰–•TÐÜT,º“–{î$eäAq˜xë=m #“lO’˜u0:JáN#´ç^;£ój.{§ú"KÜGœ¶ëu/i æÛes])fc噥T¢ùïÊ +¨é‹<hoòH_ªhí½NFÁF¢™Ðd.àßYLh0Ùqu}DÌZÄEx±Æ(z§âhOÈYÕÐÙ̇6oGÏ蕊’^xG¢& Cq[éëNé{ÞšüU4†JBqxnšOÚ£0G†n‰ÆNuñ, +:ò* ™8{@›Çˆ¶×ªzZ…y¡kæ!K{O¦(“ÞžÎØo>,tùk¤%£f'­ÙŽúÞgà¬þ[vÖêúCÊ7´ècN²Ì¼ï4Œò ê ª|’T5‚¨Ìö€ÆUT[Õɰb¡ë&ÇëT'².‰£±ƒ|™ãÕêµ\Sñša\å/kº®DËÛl‚ ”jAh{‰ ”²À%ù)4³ë›´ó÷Ã줅~įŸž²÷<Yån¹*·#6©KÑ#iÌâ +‰\Ó[bs²2³ÇWÏò1j9½ù¤\ß1Ûy­¾Ë«»9¦’üøðß•7l W¶êÅwÄuL«ºpYjк£µƒ‹¡e‚RÊpÅÐz0Öàe)ì³u8¤Úx ˆ6©â»êz´4w„ÝG<½(°[óñ¹Éa¹æÑ¾iÌšÖÍnÖõdó0립½Ä%׋]cŒ‹ÛŽt/÷8¯d„ÊŸç[”‰Pãɦ´…ÀÁ éKÞQ”aÏáí$|-²eÿþ‰È)¨J]Ð5.ÓÔ'׈!}¸Š¯ƒüÉX™åð¤ï)o¦våm®ü.ÿ^W}oS3§à{ øGŒ¶¡õò0H} ¨ŽÛKMªàÈ—gì¦$õ—níAëôÝYãä«J€Êeáž 8M_/i„}H­¶ÇqŠ3ÛÀêÏû¢L 9´3¯³7Mƒ†¯æ Q.Àq/ÓtCrrd‘¾9·^u» +bÕÔ¹ìâG!Z×u­”$à*Ö—øëȹÆ~ruá–p¯Gb;ª­œspIJeÊmUbÂÓQ>ÿ”•+¨à‰à.ëZwYÖºÛGÁWÍ"EP¿ÙŸ6>¤¬7‹$5¼›*—Óé‹®kþvLÝH_¥a²ÎøÓ—5Ÿdþ³ÜR‰ïµBÛaÍFz• (vk\ˆëË88"?)Âdð +´Jb¨¥À¾ª lѫ֦Zm¸ÔŸ«wˆ@YG¿‚.$ý»qÝB…3¶©C¹7³˜ð\˜›ƒØ*G:ßá’ñÅ®3ƭǺŸ1ÔGJ¤)Œ3 +Zš… +$隬4žÄcô9²Ì„wÛhdnyÀy^j¬9w¿A™%*A™éÅÎDG¨ÂÅ/¸5©XzæÇJg,Œ®±Ò§ýÝ4‡wYê&3@»²® úfÜB%‘Çòîš{éà"¥Ñƒ7Ì4i¯eI¼ÆŸM0È”ù*åô?¸rTêT:§þ Œ# +añŸŸÐJ^kå¡ãré½:Ù…Š#b¬ƾ Ä–y0ÇªŽ°~‹PÿÐ{iiÂÀ¨«yÙb§Ø­eLîQÞ²ac<™ÎÌûÃó¶î&­wåKÇ&cäà2>ß=ÀÀeˆp$\†]gªôGå½xµÂfïé4ŒÈœ_¢õ-àbAo´¦ùªáš’ Ô8 CcÒä\N°],jm5bï\ž¥e§¤Ž2X-37†$ ͱ"AL'¹¬-ðOØ-¬‡¼¬*V3„Ráþ¾ÞÁàØ ¼µ¯wÚ!d’ä‹W/jíüöå×_¼¹¡ä?ŒWIŽÉ Ýëu sƲínËÚ†ÊðzÓµéû/ü8™_Ê÷ ‡Gò­5¥‰ZíDô«a7ùNoT«ÅÁUñ¼·†2Üö¸Mþ%hŽâPï*7Ü]ùù7‚n´­…ãÇPI¿†F&žb£AôX »#™îðG>$ïžbX•B=w¦ëd ¦îQóCº†5=9ƒìšsÔèG»1 ·çm|ޔߨü  ÿ8¡|kE©Á&ßúV75‘9 b`ò™i“· ÜÕœ¶:Õ"]r5—Ó1äÜLöÉ@%×ÖF÷½|¼$‚ÁJyõ¼É5uqþˆÐ”¾é¾õMæ.xEnÄÞ#Ü4g“± õÛãã2ØïIj®hUáý.Q‘7¶ÜRoèãõÙÅ™£>›ï©Îg¨qIBˆË>÷ç3ZÏu‘¦@gÔ4âØË¡ÓÁuð¤Y$éC+ÜzÉÞÕË€sòfI”~ÉÓ l]IÚà ¥?)àYo® $gS!ùmŽîœ|Ϥé.ƒá8âʼnÊ„þâÝB5¢(îãÅ2<ýu €ýºÝpi`8;Oü$9Ž+*:iÜSÇpâ| /TþÎ- O{¡5ìA¹}2ãת©ÿú©L +ç^ò 5k @ï‹xª &- Ý£(Ú¬uÓ]T¹Wâl t‡³sq”F›Ìv´ñ@Äè.Ž^÷2tp¶LbkÒEX)U±6Íʶ »˜œ“åckW +Z*CëßÁ”÷#d[ÛÇ'󮚿}s ßq²6m8ï¯KçÚô~âÞÎÔ-ÛÞ?&µ™ØEt±fƒµ‹s?)Ú‘ü=_Tzf2ÔÞëïy: ̯‰7†ÑSN¿fÌ4ÐÛИ­[=:xQш_²YÛõâHÚnÕ¼¡“mÈ `Kä))#êtó(c¬ Ål0%Ü´†]–I­j:4å9m˜>­L³„n+k ÷qÒP-[†|C”ºÃÙz{¾Ÿ³v;ÐVJ33cÓ|W/ó×P™™Ù#Æš?ˆÈí:Z½‹õ±RÀ½"zòÈã‘ÒmèŒSsèxžÓØ3"$¼¿)–<‚(èy“D­]«êèlÔpXg¼Ÿ[ÈÃÒ–^ÓþjIК³ÅBÊ(©‡nõÐ+uñ“ pé9Ó¦7Èü]Æ¥àŸ“T-nÜõE­£$4ÄèT›: +ڧŪ˜;o¢Š6‹@ï:]Ú¥ãJ ̇<á–Ú’ÈóÞ•°ŽÎF¯:Ïý‡ìl©>?>éáY¡Y#FH|¶,¥ÑH¢|öõß—ÏS'=¢ÕÆàFÇ-„F^ M³þâÑN° 9?U²lò¯„ôª@ÕtUª»±M±¡ƒMÔ…8i¦Ÿ;ijÇjßr" ôA¶8#D­%1ªÝnXŸfbBðJ=*gZðwGÉ㟨óx2Þ¼m}pš¿·,ÍÐ(íhÒQÀ72ýÑmZ ñ¬4ÝrVÚù,š7—(c{û[{#MYRFXÖÙW.aõp÷ÁŽ•ïѯ\Êï‰È¶4iÒN"tÝ7˶¶y ºÉŸ Û[ƒ~m‡ËE#Èñ~ÜÚuÑöPxpZ,Ù¯m‚Wð‚ù+£KzÃ9î “îñ„9Yü:Ú(£çÜ/ùC>5®9¹tļ$¾!?6‹ŠöˆŸÐÌÆ‚X¦„±Iܽ7w¦ óÉu?r‚#ª7P3”¯R•ã°û¥ŒÎبÕðjò$ ýRÿ©'ZR k +êCJª€ôõ;¥{ºÕÁc_,n²í-ö³ÂxF>@Ê[@奠ñS‰º¬a -¯’åQ ÛŸn®´ )פq/¢¥/åè:h²Œ/:’ǨÆÛõðŠi;‡vât;âJ’ùnãÝ +ÅK†Æíq  ’qÙmtx+W9È’ˆ XéPÆlÏ×Üʲ)?‰86†ƒ²pÄ¿ýëD¼`Å";ð†bl4iRi”÷`ùaJI²Þgá9ZWÜlæPfH +Œ +%z¼ß¡#E¦—(Æ5^ÍGñ ]ÁÇžr;”t¦û)p˜'ˆ É-{ø°@"UpMO6âà¼ÚóÕ['‚dÐ_/H`Þ +Z"IĸžáõcZ(G!™W¥vûŒqLZŒZ%h. #}ž4šÏÃñGWpâø"·³AIgº_ãHàÎqT(Æ1ÚèqL¯¶8&ƒ$ŽS’GäMEíÖ†BQüþÛj”5ÿYªnqû(k€T,^Áµ +Xr…¸V}] [¢g@[!Z.½£­~viDçv ºk2ƒ;iH³Ûõ=õ»p‡KBËI×õeqèÒ­ð?Ê,Y¨•ç;T.¾×õ­”ñtmt [—]B" ×uÒh4aY[±²pPd›Ž4â…$è~qä\æ»A´Í‚×°yi«º)¯T¡´¤Öf¸T¿ã®)ƒ¥kj5o¡^ÖÉä.½sõëÈAu±hÚ<@~Yæý—Wüql<ÐOkic›oýŒøkª¥öñŸ?B6¼gWóP ÜŸÂb/›ÞT²µSKƒ£Ô‰ªA줾‚ ƒœ0JЇ™â²Œö›gð–Û8ƒ·ô-3¤9ò’Çʇ¸-©³œNæÀ`jªô —²Çº®è¹2úÎ-‹^~DÃÊh5óF1«Y04Yi”î„$=ãàˆÚg î/k®§V£tïþÚÄFO-ÃÁÁÃwr +†÷ٳ簮=,+W,– —¤ÊØYcŒ«ßÚ¤j:ôѨ¡ +)úh_v©t8Ò:ûÕ„h}ô/½½ÐÆ ^1}`m“µ7ˆ{2rH p|šÂÝwý ÖîÊ…?άb’U§¬C#UG½Ã!ãLHQ8M(Õ:,ƒÄl@—ÁwÔP/f‡,«&·¢D·!ý¦É-ÑOǔÌ4ö ²NÏøåBé|nzÐÁcDvpȰ‚;ÇIÈÆ“0l«žpâ'X4öY¥¼Üó°Õ3ïU=°ù ö*DV4}î\TyUY #~O½u¶"ûïß¾ýòn$Æçi2"£eð­b޽)±?¬<)l¡­m6 5ÃiGcw|B +¹níª¦fÛ1*éŠqè Hràè:oX -jQoœÒïVu…õ¼ÓT̯U¯(„Ð\É ’ÐÜÓnPw;ýûæÌq‡¦çg°ÙÝû>† ÓÄ(Ľ‡…Œ^~)…ΦTâ È"§ûZ–Kl;én,=ÿ£¼J’í8nàÞ§Ðô£æaé ol…é½/Àÿ­…±ºiÙÜ0þK¢«P‰=B>è³æ*þò€b ÿße»°s>#ø:ç¶:g­ ß]Õ[’xÁ‘@ ªPÉܒቘd†n + ¯?i½¿-5zç̾i(£‚Ü­gš”Ò¥óöˆ?Å‘N—ÒX2gŽå.—rŠ2ewX쵞Í7yÅiòŽÕ嘃ˆ+::õüÈÓ,(«Ø3ʽR²øõLˆ#p.–@›œ6Í”QÄ—¯ÿ¢ Fcý’‹¨½O‡Ž½0B»sR€è´ÝH@,öbwçFdk¼¦ÒK2 ^%9¿û~žUiß´/åV¨˜êœ"ÞYHÂô•ßß·þÛò±ÇÃ@º’Êuœ@bÂM·NÞìeÜN¹^à÷bPÍn`=÷¬5 ìêߨRkäËŸ!kÖe š=´u‰<_·cuS—z.Ò ÚÔ¢a€& ØõaH±_*Á 5CnõÚ”Nyø;ɸB,E-)Š öíôö+¿Úq[£#K{@½B[×—÷è~M¹¿s‰P½"²d€\u`–¡òýÌPù~{¨|õ1Ô½?$–Æ+º,!¬¨H†#:hwj§éâîÂÝ>6^ÀŒò×,| ÝÑÎ~AªH6(.Ÿ& +eÝ/ìŠîÚ›t&i?9‰?¬²e¢Ä‹~«ÖÀ|AáÛïj„z±xüÒ%9×òˆ¢_”Æ_Á ¨0zÿ?ÿöû¿þýõ¿ýÃÖGR‹dš®U·1€mµy¸Û¸I· +|¶-à¡å H]Æ\_ÓÔ4‹mëR;€ ‘è’Bfdª“ëct`K¿†–ÊÄ »ƒ7×r»­a°^v£Ü‡-ðu-1ÿºÝÛ¢i¯‡@m¥z?ø†$0ñc  _aaŽ®„„ Ý2yÓ}G`tö¹ø3‚ý̶´¸t齇e©VÀnO ø©vêºÜf¹2BгI\™õ®þ"´|e€6£W)EËNZr€¶K¶”زئ'8ÈKèhäbFªº¯˜nÍ/áåÈÞ9ål}{)MrZîùi¹®“3A±a¡”«‘ÿâ–3Å omxßËâÀ»ÀAÚ÷ùù íË.ùEC¸ûrI“HÎËF«©Æ#ßIÁÝÞÎXPènZ«´(æ.K×>ó½ºÎðBÝ}FˆV¬gc|¤ò,ZL©áÔmWÏf0Ðjc-\m¼Ci–êx´BN‡âã‰jæ¿ùLÏ¢ @@…ž®g¦üø!âþÆVòzäoqÕV6¡óçÙ?ù÷>,œ×KȬZ}ô¶¦áØ<ÔAœzÕÚÙÀ¹åœ ÙE«ƒ]MÍí°os¹ŠlÈVC6D‚ܘ¿[k ÿ'õ©uøþz#æÖ,™ô I·_© ËcÄAvrK"jH¸,Õ+çKRl¥’äÍ•§]Hy2VÒb_Hxžc+Ɍ”æDW´sИýb¢úý{µ\´Ú±Ø¥SÑ›„¡âX?Óí[-m•:úÐu„ ¡Lr„¶S—¹î£NɬÕ±Ä{ØñÎt&õ Õ:Ôv7Qà& &CL·¡*ЬÔür EW+Ê­=ôs!Ù« +êAE©?BߤUï4±'ÓCÓ^u¹JäQI?³ePTd}¢b©\¿ôÿ²gÔ!¢.CñqÛ}tÔr& í<’' 2÷+ºGu¡’§„Ù;ëµÓ5ÀVø~žv –=QÁYVtlmíj™†!ï§Ä3ÑþÁ ªg‘¯“êpË͹[гՒªç.KŽÚu*½]å€Ç¶Y < îÁ·dÁÈóÊR@'U´`™ÛØèþ2T$ù t…WpÍfÚ2º£B™@óCa´å‚Ÿêqïsj´”¼\g•x×ýãŒêÛS¿¿é[XÉ…&죌‡Ò.²ÐXû"K¦€Îybqe ÃEˆ(æ³ì›¿l½rýÜì¼E>¬yN Áä·å®UYô6òr´£ó‚-ÐÎçÒŽæÝSܶxŸiô/[Y €áLÁ„ é¯ÎUO–¿–:ÖcÈqÉC#»™‘€µ­qÕ³1qdhÛ™åî¦LrIaTõF†…¢!çC'—8¹aE5”•ˆw“@^v™'ãUžvËUÈöÈ«è=ÞI´úÝHHü³‘<íñLO{¼ŸRÉ'ú^noúA4þ´• +©çg+Mm% Ïd…Ųúš¡õ0¨IQé°‚b;Ûueü…ÌŠÎÞê"”8Ý—˜g÷ßò¬Ç„öÏe’tC¦Ç#Òg«•LyV0ð‘évåGqL3i½¥LÔÌ‚uX>puiË‹ôÿí¨?ÜŸôÆS¯R¾¹ÔI^c¥dUDùþúG{KVÔ!Ë¡’…¹«Î›óÅŠX»Î›Ñë6i-qúù±yJÅù±}wÑžAĈ€ôì (ñJú±‘ÙÎç¥Þ vIôä9±ùk/1áfÇÜÁoq^ÎëæyGD¶’«ŒkƒŒe šÉ9\f5ÐÖÕR£Õ?’}­vMâ}f£ÀÝ773Në™CÑdM¥÷m>ÏvÙ±í…#aƒê»ºS"©·Ã¢îŽæU)T))n"¦„xVuqž°ž•pÓ Å°F)üòoˆÓò£ò‹V~këÓø¨Ý-ª(â*Õ=µæé´šÅÖ4°ßþ(³FÏc½º(õ97»–Ú:“*[s 4©¶»†Wð²lrµkmÊ×2‰AOö‰þƒ“x>Û[-Œ”ðÓù¦XlÝØÐ½µ6¢@Ô.˜µ°‡Ý[XÉjiMŒ§,^<‚eEë6ilkb +DJ‚êíŽ]M |4ï`ÿ¹5óѾjôÕ¾žÞ¾-kÝ`Z7œ§½n Må¹´î£Wm5Láý©ˆÒGéê|¯·ë«MwÈsgír:8 ¡‰½ bÓE?ÓÄÌ„¸ÙOE¿QкŸ‡ç¦ô;Á¶u~BgÜüºIu¹ªb‚¸´øœ_ix—u……*ÐÄ÷ùA‡M›g;X±ÍÑX–NÍC¥æQèûèC… AÃh׬|fêqS ‹ß¹5ÿí×Å‘¼‘„{"â' Úœ™q  ýÈ{¢Ä|jÐDTn/£Nc:ÍæÝëNݵ8Šw•ÇÄi¼[Xít*Fв 0¿2Î\Qžo¹Èˆ3Zæ×DÞZÁ×í¤ +Ÿ#`~ÕjmÝa‹ãëCÈ×:/g$üÔ¯$WÙ6"2^yWÛuSüÚÿ9‰}\mWpA—("<‰Òæ(ÝÔœ@„ÒR +c¦¥%=iÖm)úH×™æèCƒjŸÚMèÊ àoZkÄdêv"‚¯§)lR´Å–幄öŽ6ÆA>(¨}×2+œm­48*-ùô¹Jæ@ËâÿØS j ²†Ç.‡ƒ¡-ö‘=L Df01 üaÓí²R!àüa¾î5ðâC$AIxfo°½˜Ãæ|dV½å–Zå—ˆê7‡–65›ßô€“„‡Ë!m›ëSÕ×%*.w,w9<Ë<"8^ZÀùÄÀÍ+‘ý§ûlþ¨'g³:ù-o¡“xÈÙkRBD°0qÎ3?82½}e)¶ïäà䒿즱ÿ¢…‚Àâ,ö¯§_ +ÝS #\â¨ãÎ Bß +XT Û×ôòD< gV˜µrzö·¥1Žž˜½ÎÌ9B± “¹žˆÁâs,=-ý8:9ˆaÄw×âÑéðÑGš¡GÐÐk† qR˜ ¯€} ÉšKïç *Éèw +¢0å´Oš0õQ£pà5`Zæ”ð$ñÊñüM–}ÄWÆ©;Ò:7kÀ­æá£‹ a÷n u{ü|iíDðAo!Iå€Êú¢L)ˆ»éËR Q04¼¼>ÿCy•ãr$A_¯àfP÷á.+ˆ3ãÈÙïodåYÝÜ…tÈ`vUVdäÅÀi¨1YÖ]XK2}ç‘1î!ù(¶tº…ñ²Ãn³³Tã¯K礚!ÔH¦ @\¥)wìÓ!¹¹²üɓ͕tC*4%2Ïü€¸ÀÆt7Ê®¤ –štvžsb÷z-3ÏŠoCñ ûì+¿ò|a.”#ç8TE:óÕ³ÛNbë¼ x)º”ÂõaÈ2'ª¼ +h|á XˆÔ3,–C&Näƒq£L‡Rä\Oìgöù> °TT“-‹pÃŒÖÖ&;S«B<#\N+]ö<¥€ÒüOw€Yáy7–>V(}N@(}äÒGßžãcñÈsz,~&À«T±øu™®â×Ï4J_“yê:¯Éäu¿&3ÚUü9±ð àE/|æE¯Ép= Æ?({u Éân>ëd-{uÉ UdÉpã`¹ZY°Ht²Ôóúq ~¦xŒÿ§µ®k*×ñ—)^c`¼HNäÏÑ'΂‹sx.ãÏy,¨ê¡œµµi§غ_Á±R0»<Ÿ€ÓeK/Òy-ÈàÔPÕyz# Vþ®GE„h9©´~ÔÍfÖÑ!ê.–~Ü8½Ð.ò7Ò +š!ï¦BÂåL{Bcúùö©Ïmƒ¶ñߦ÷SèEƒù?å†Í¡¬§ÖŠj–’MrnèFG¼5¥E5ˆä¢Á sN•l:þ¸ŽÐ–›åEq :¥[ö)‘g[ò}hœ‰_ªv úýLŸô K¿ñ‚H¿ØÚ…+›¸Ø´K‘g§P^~£œ‡Ù ä7ÐmÅ5Ðú °gI„,K"hY"ì‡!ÆÓ3EˆñF»\L£Rxà£B~bÉAŸÔgràÆ…j\®ä öO5Žj6ª-=ˆg4÷˜€¸KÆä rç¸K¢ +K ¨ëdfÉá¤YrDÈ’#~jÉA7œZìÉaÑþgÉQiy}$GéVˆU[M÷ÞJ¥ªÑHâ{bÉÊ+ªÑª¡g + %†«ðq} à’G–Us +`³u¿sbZʳðÇÙ¶=¼{TN™mõ«È C>öü¶´T÷3i¸Ó3¡«(â÷~Œ{&ßÊMª¢'PþRؽ‘É ÖtH$Fåd…æA}Qy©˜uÂwܽ þ¦4¬þ²9ŽPwØß +MÝâ‹}žéJJÓ赪D^#hÚžg ;ÄäŒõL}äÄÖ¨ˆ÷Å*ãÐÕÁLÜWOÐW#3¬3²œ®¾¨Ê¹ú"«û:Lí}Q…ú¢ñá}1@#nŸz_DžÍG_´8¹ ŸÄŠß*¿†¨Ú\ÝæOÌ-(eÒ;¹síó¾F;‚› ’d©lt +±Të¤Ãð]¨Œ+YÏaãr“EËÄ+êóGNKùIà|FSÛ{i +§ÿ| € y®˜Q7€ø’B#ÉÍü;ÐIŠñ’Ž_R×EfÉ¢WÒ€FÞ†§wH턇í@»+„2PØpQÓG}vpy >ÔÇ.%£¤-d´°O9IÏc´×­ê÷d1ÄÓÔÐ:¦:EØ·-“t +ÿ7/™n/©\<žókl °Üdöïé ÖI‚ï¹­…’ ºŽÙ¹?dñÐæÒxŠ +ëf~|Jcèã‚LæÁZ—ÞΊU|U’EïfÕ›ª³”< t©¡ño)yŠ3÷Š(-/Ef‘?›ÓK"ÎÍ%§$+à-'fè’õî·˜1¼—‡žNèéèh1Ñìý-^wl‚ÑÙ‰¡¦-°½ªÌS9,'·Ÿá!ZÔϳ…t³C—ºK 9úõYEóÛ&Fõ%CÐ&.½{'ï@ «Í¦>…ࢎ۷—0ìžœD ŒæôF9ªŽªÀ+ç +‚òûФ•¨/.ÉøÜÔŽz¾mñ„Vý¶“¢ñ¡—F]^>/’ò˜òEE/ÒVs‚œ!²¦ÈÌáïÈ–n¡ÑÈZïÈh±ßa´ÞaÅðäÕÑÐ\?!W®ŠA€OûY åY¼²‡US¥^'V­€1¬@OBLÝ0ƇŠÔ®W6“«¸Éa-ã*ÛßAý’.Ä5k!òàPä!#ˆå›dÃQ:6½Zñσ~ѶÁ 5ÄX;‰.ã2k±#Ï׫ÊUÑ,yãm;ï •RÚäjSõèc«¿ÇT'ôý6,<*Å ÍñZ sçð·g¹=!X…çòi‘¹2òç¾E¢¿ÊÿÛ+s£VE½È'}ôŠ: ±4˜fHï_ÞR~¯ÆÙ0ee ÌyÞÖ†Úu?âÉÔmøÝ¿2m`?ÿ… Y·s?}Ðç|% ¦szÀ¿m¨'üù{ —¶@Sì.´‹Q%NęЛf´ž-—ÑJ„ëu2š~Íl0ºW¥«ƒ%úᤕ윘=Ö ûè8>íÝ¿@Gu”7B› +oB‚X="¢×‚•M‘h.Ç!²œÝ,ÇhbÙ‹Z*£JÒe çsª¼¢Ït’ì~ ²à)Yîr?X9kë¯"”¥À\ÔKÛ'a"´Ô;œK üÅ”‰„˜íʵÈÔç…£ñço·R½ÙðÐQZ^ Ûµ?¹FÏ=š+ó‚ý¤:‡ë4FB›U-aÝØÎRQ¢%*KjòµŸIƒÎÔïÏÂæí«3_õæESýËܦ޷®ÄÞ’Ø™Êq¤#ÇŸm[EÒTŽ@yš't¶j¨ØRÖ×"Ø´¬-‹ÛúpV;s"Ÿæß¨þ¢ÈÙ±‘^©tï|ê£ßR—&˜U!¥ d¢zÎúžÀfª‚IVKÒ,PÅã1{=-ít¢F¹>î, Œ›Àå%ö¤TZ½:›>ÒJàÄ}^a Yäš°R((8:Z¼TI,µ*¹b +¦õ.`jLY^ÀûÕîô¡ o9ÒÍðá3}‚bãå˜<Û+}ÂÓã£Þ„HúdÊí‘Üô¯¹­ÝWLÄUúüï M§óýé ÙÄ…z=’úyÐ^™¢ätâÀ lI‘B¹°ÄWKù[Ï‹Óç¢/—™Nk/šDeÔî™êÚaó¶­uˆ­Ÿ;Iêr›·£É>Z!t+*õMÏ[,˜t†'Æ r±Ó– Ï7ËMYc”‡ðc)-ƒFTýZOD*íree!«Y¸ðvkêíUM +BÈ&eÉ«çRµœwÓ»ºNe.E¯›èmE}ŸœT¿ìžÖ³Éh”KY-çöøŽz",ŠË‰#ô"* ·;æ~~œ÷+Ú^ЍՑ­AãYö‚Êa… ™êS™J]Q¥dÚxËÂ2ÚÕ£§Ùîàw¶ïe¼äÌ£÷¥@)p lݨhÊ?7I]÷XøÝ!ªÄ87i7 +NëKg@{ ‘z‰ÅÖ¯KjXžgŒ¢f7dÀù®’Ër¸¯Sü d›š¥µaØËFç!zS ÞøúŽà =ýlj‘•‘zÅ!$ýžÚžì¨Ö"^}`7PÚGç.Á;”a–Xç-ü¨—jÞh^:sÖÞaÁÏ®ªØÀ÷µÙ½C¡x6ºPtCÑœÃ*ä“ÄÙܦŸÅ4—w~š}£«ˆ[ R-릭tˆ{Û$n{žÍM¶nWë 잘¢ïJ}G>|^ÑA+”¹ãh‡t4/>ßð2ÄOŸ5Ÿ»äËò» þÆœß6½ß¹›æFñ.µ¹üˆgçÞÈ¡–óÆJªþýZõ=×Yä®fGG=h]ÓÑãÁA·¿®øÖg5úªŒä#÷÷-`©…[w:³Áo«h·á‚§ytsKAơџ'Çîzá|W4(Ø··l“ôáXÞK/ö©Õ½Ÿ(èÚÑøÊÍ麶½á¢ýŠ'Å?ÏævΚՉv<{£ x½Û*RcÌ|<µayŸ=o…ÝqPÈúðà±ýq¨ß¾b¬š¨!ù”ˆßìÕc"-ý"~ŸWch|ý¸‹äŒ’ƒ‚f׉mn]±9Od 5Ô¯Ž¡t"C M,¹À@TZöv•GTâ{&"P>]žWô¸©µÿQTÃþíâçq“ƒÔÐFï[g2ºB*{Õä—U'sl¶¶7PÛNTL?÷G™Š%mÞŒËÛ¹b“÷² ÚVçõv­CYÑÄr ©qN‚.t_¹­âÙÚ»~?ÇŸ,ÎMÓD½ÒщwÚVÏÙD‰éèx•W!é°œ“»ž1±©KªvÃm±Q쯳º¶x£tÏš)¬$;"Ãsg¿UŽ]ž «m݈ºùü‹¡¿åÄâ =ëÇØe1^‹Ã¯j=„´'4¢§ïLû< ˆI$€‡@Q^~œ{¡|¼8VßnMVÉC /h™oúxƒ×§Ôpô‘9ÀáÇ [ßÃG#M€ù~ÉóThcÚ«{ÑP|Ý»ÁãáS¯ò[[ñš ÖGe†R}MÑLßä1lž]eð׳ö<ΤoúxE]\÷bÈÛv&ze-Ç+dOÈÄñõiÈãë’PÇ—;;ÅÙçÊtñ¶zû7y¼ÊÞM3‚u·ÖGvZ¿ÿþùã#æ&Ñ<½B:¹DûåïE¼_ž&þøç +¼¡|c‡‘f¬|R2A_Üu• ¶à®‘KÏå $@íÕtý´wÀƒh‡Bp;€Ú|¿¯MŸ‰?·_€$hy;ß†Ï «väÛɬµ{YÏÕónÄ}M¿{ûH\÷|Ç9÷|oX¼¢w_Ñ /¯8ßÉÐVÌèÀ9yK]4ø¥ÉB€¨J¿³œÓùœ ¦(õy=Öé@·ZÛúr—‹þ/I2:ù#ÆrºXÂß.vç§Â]#¸s¹rl””Óìs#,fJæöeÊ·œ"ñùódÆ cFcz’(œVâ!’Ü™´GïB¨R?¡*ï¥úzƒŒž _Œ Wë ×B¥­÷ƒz-!ÕîJó »\Ÿ‰*Û¯taÊEíœÄ—Í,ŠPÿ§=ŠÐO)‘]Ñ{¨ çú+ºÃ÷Š«³º¯ W¾ºOÚ7°FYç 1¬´Eœæ`i,¸É؆ÉRj t°/ÁÅÎoº°Ö}OI–¾'.º‚ùÈÒ(53;HnnHWXjÌê¢%[(je(©ŒÆÐ4ýk§ +'/+4‹& +N¢Oì]3Éë<³þŠ%\XW_ +výÅ¿ég‘£:5àcT¿™EÏ'ýVÚ³u‡ ŽxÇD'¼£Ï…Ÿ¬¶œ—¨„6CÓ·ÐçIßñ¹ßÍp,‹º€1Ì7¬¡Ø&}CoxÂPnIÁKÅAðó¬¦!CŸÖºŸp«iM¿FJæpp¬^,)y “~fÑœ%Qvp­ÌB² ‡à±hôÀ͵xålK½lZEHV.cƒu© í{ÙŸsh ÙïÉ,HRö¼ðMlmÇŽí{nSm‚H¼„K¢U;ºý9Š‹\ÃÛ¡+uâ& Þ"Áb•;zâU0Rçr.þÛ#¡Ô·ø#šUKmq¤b@¼ +æÃl‡¬â†¸3®8TÅ·Íþ*ƒ»âλþñhBVË ³Ç‹SôºÔ÷(G£œ«ºñö&H“¡á[('<ÜcÑè ñx²08&‚]tk'LD‚:=¦CP»E§.ÎN°Y7¥þà×±XI0/¹{‡UÖ6ªFí·tX*—‡!³Vêb^tr(?GÀšƒ£sDóe:Éq9A ,Ý¢´ÁaMp²Âõ$ÇØöÙâ¢V'/š$ÓÒn›X¿rß'Ä¢'g]Û&xDÔæ¢Êö%ÕÈŒ˜ XxßÞÁ6¤û|v /šcOðÔÐÛ! R0V$ìãd Bªø¦Ë|ý¶óÕ] 3ˆ£MÄNF¬åÞÏL$Üãs4vÚƒ~2¤o'7xÙ¼o÷‡°ÈÁg¯øùN Í—ýÄÙH˜ïÌêäP¸ËMYAŒ¥ª§/[7ÆÊÉØ­1)M¯äéžB@¨ + ÈÅŠê`i"ÃÁ®Š‹`µ‘D°â-ö9^š”e½Üærz§ë$N&WÆ?½f‚¨ °ruqlJIèFbXvrÜ“*)ƒáXAtÿg¼Jvl;ŠàÞ_Ñ?Эš‡½`±°h‰-b…^{ø}"r¨áܶ„7~·NVV‘‘ÒþQ¼çÔ¦Q ”ÂX%tš©7Ìk(äŠ-'F cn~¹ Yi¦ÓxÁú¦-ñ¦ƒÿwká}> ŠÅñ­+׿օ¬•ˆM¦t,ÍŠkK–QPy>Ðr‘á!8¢=‚™‹(?/)9ÂÔÏ!¬Œ93ÃL޽îö¸]ÃÌr"9ðªHüò„âñC-[Üã­ ˆÌ(4ÐPRƒLŒv<$ +¡Õ‚‘¦²Ú?ް·R¦È6§Š!3Xö™ÀÅŽ¯ˆA§Sš%-º ¶Göòc+ -S?ªÆãN¬`•u“ƒ¥&že“¤äÎ*SJ· § +æÒãé=HÑË "ËRŸ™ÂØ8ú B›K ×N€5ö…Mr0Ì¿êó¬ã9òõh:Lµ!j,SÞÞ¶V‹ÜŒÂ¼˜À]¢f*R`Of +¦ð #‚!‚5„† ±Ön—àDæé·«=˜”J&Í*Ø«L0Œ¿Åûá xò|è\XžòbN©Ê*F Ávå¸èk¢CZê=³s†ÙœÆ}-㜗å€tZnbÆa ¢Ÿ²bî¨üŽì}_ºW^ >ær‡Â’¸ügÅ%0Ï0YY Œ¸ +߆pD~S…µÜ9PàÓ¶˜Ò"›ð}œgo}»Z ×L'Åëj-™(½a³n¨’8˜.‚Ó×€„Æ).y×ç)l}:zâ•÷É^6ïÛcezË'õ©l̵V¶#fö§Ô¿ýýóOþÃ_~¶'¡Ä;çß`?ØÁÔ0ªmne?N°¤¸Á(¶E¼>#1 +`@=šzéƒrȉâ`nœ ­^\=F{ Á>ˆŸió>çöe•Þmž·‹d=}\¯>ßò +3ëÝ™ý2EÌì³^0¡c\P hܾ“ß¿NÍÓ÷eËD´½çºlŸ=ÜúŒkm:­FD õ‡ÕÈ=/¾<7ŽÇ©çï§­ýÑeËsëG«ûåB]”þzïyvÝîàã=nâòá¶+›I'å â²Ë‚ ƒÝõ sÓëë§Nÿ.Y"œö1ªçl-Ÿr+(Aý¡0ynÆu®Ë.%’+„BWçè«SB§`’9Ú Âb«çrÈë\ærœ~ª’W úšÛó¶¥&-ã*j×'àÏÏ\ÓÔÝtÜ©ý·% úœIÜpúGËòMŒÝ×bƒz}©v¤\u÷:Õ>êUÔ£ }s³/[¦˜‰ÜývOé³ÕM"› 2ƒ*-;ý´Ké·³ª„“©tÆæ#}˜“ º|”ˆgšíÊ#£BH/ÙMWr­>æ2ü0nÄn’IaùãÈÛ½Æ5VˆKÐ Æû›ü÷ª  ‡q°¢ŠáÖmæðÛµÄŤ%ÔDê4m7ðo§á"k",ˆbI¥y‰]'“áÏŽ7Ó*D¿ëöw¢]LÅj:F å$_sp!IíÕsÓºS}ŸÙÑ}¶ÄolvN!a×ÈMÑ,¬ûõÙ¢¸º@†/0ŽIšÎmBYc£žýþ:î’.h Í÷¥éŽ®qéûmë ì¾7pµ7¯é3v&ÓãwÔl~5”l$ß—’vÜ/ü‘ê‹ë~äLѲucß{ŽÞ]á}$A2)5ƒ;Ší²õVTa= %ÜòzïåF…öÚQô <Qðš÷ÎèÕº;h±´™üYVÆJ¸ÏtòŠ\SÝ"¿Û>ÌU¹9.ËÁ…T.²Ÿuu÷ÿÄ[W)†°NZÁØ«7‚gÀbr$`’„®#+$§1ÔÄ|¹¶+_ÞõÒ^ÞñÇ Å—øsôŠtù¨w2ö)Ïيș׺ê䨀vQãçOc>‰bŒ'Oy¥‰Ñ¿a‰ÑŸ$ä•#üX¿ìͺo<úÚ;úßœ÷×Ìpý:Ã7äð•fÜÔ€¿2ƒ8r¾á…}ãYLáæ|%Ù¨<«×FåZ/BÕ'™–?ÇðÝ&µæx, +ÐE$Ð8öê2ƒh¦P-}¡-VCGÚgmMÚe¥«ÒºfÐÜÆuÂkŠ–Ó(À¦bô¸Ÿ­êõÛU€¹Þ¯zœìžŽm“¶Ýw# éòÑJãñ=/¯Þ'w|–¹H¿ô¹{÷]zLªÚû° +ªjü:Áa +íóuãú:Í.Ô<•—l«ì—þbÂÑËßž +Ç" r”h9„©EhñYN@Çôx¥DÁ“Ûb=îR’žÚ'w:—Áôãf€5”ËÅãåû5ß„Ã%+;ïíßÿüé?H ©^W[UË\å.»ò×lM©ÿõ?l +Ÿ¹Ñ¥ê‹ *jÐõ&M¨Žä`¶1PF‚­ ¥Åó¤.V?›ð(Zl©˜mÓH$”zT-¶M Cïþ$ÌÍ‘®[eYlYUÍd@H}"ºçÈ=W;Vòº˜{Êã\\¥ß¥Åw¹ãNE¤~¥¾madbµÀ¶²Â¥û¥4M_×>S  nY'øÉ1TÇ8¼þZÐÁ_Ë*¹>Ãßlº3Qkb6PC7özR7,ótÇû(úD»û|µ;½!©àwŸ%WáFj‰Ü`IIÝþ² +š‡]…!›¦+&tW‡Ó°6–8d_™m¨ÊX§0ìjs̬ͣ1ÍmG)muFœü­Û'&~„Ǧœ*"7eÌ.1Dˆð?gÿ" $ª. ç¤ûJx¶»ÎAhäDû¡t?•¥íNE¢yÑ|°"!EluÝ$6É.;c,.¥hñtL•ÿ¬óôôë-f›7ed1&Ty©hRÑ·öþ8‡G̤  .” {‡ëÒýÊ÷ ò`oh¶•©%6º}ìÁ%Øüµ£½XžÉ"ˆÑ{+œ>Oƒ¨ODÎ~®Eñd-Yì– SrȰ™,\1¬Fù¿üWïP2y}Z<¿ˆé6§Í¦hk U$E†;T¬Œ !„Û÷©dÓý´åNkm(R„ÖämKG.°]oB§jÕuä_ºä‹ºT—I`Sä43†~›²Ñ• @mÂlÊä¡÷öÕºoëÕÊAÞ­¥’ºXtd 8*ÀG¾±"ÿÓݬˆVõ×h¶NgÀ‰IµÐލcb\'вu|šP?éúP‘39˜|ÊG+…m%'Èl6íyMê«›þºtöã:LÑÒœwèö} qŸŽ´£Žk\Ñt5Sš@Lpxdš¨²#£æú:Lƒ¾ ±z\U_\Ñ#ësêwÓFàÖÆ´AÍœÑä·Œ­ÙòhØÁD=7ü‚˜âØy[ˆ}¾zSK•NMkaÚö ÐXetû¾CýÆÈï*&±Œ¿ŠáЉL¬ä¬t R‚8ÄÒß(–Ø”Ät¬~Ëñ$®ÀòÈ¥«­–¬XíäÕÂÛ“}Ûgr¯‚GC³sÐnS±JU%WŒ1½ 5 gqR¬“š˜ƒ›­+Ö¢"xE¶S‘÷—N½ÒÆ’â¸JÐ{«¹ èX_ÂdÐ1íjgÐCˆM< ]Cî;êÖ>2í¦œ/b³MZ«Aé£#^!Xý v +C|jX±à¤áLlbÆYp8‚õœÕY£szoíöƆŸ!(äÞR‡aƒ ø7müc’¤¨þa°åiãÊ#þú%ÞP5ƒzæ¯Àj^Y*PêXièÅâlR;ve T`E±¦k«ª6‰=´*J…?óÞѦ/=6ÐòÄ}f4£ù|ÍÅ곎kþGw•äXvÁ½OQP™ó°4¤,X •aÀ+] kíë;rdò¿jô¢ëÅ'“9gäàc¿ÈbÔa{C±Î‰»›æ)U{£IÝò#ÄÞHõᦤƒVÓR¯œê…Øj÷ªk° š´<-vè_¢ÝÔÅ”‹xv¸¥H5¡:0^Ù×tÝfåËp5‡öøƒÚùÉ‹:±å.’K¯¿žµ«&r´Ïe´!®%¤,Ëža·§–÷½.ü†ŸÓ^gHÚ6ö§âBV¶DK©ê>O¡< +‹m˜ Sv¼)¥iå’Ec¡“C‰z¬šeOI9‰Ji$J4d*É£,òujb†Öm\ÏaÈ‘CÁÀ(t* %ë­Ò Ö7huX°Øì½+6:rŠ08qi†{:´X ÑI@+©zèÞ<5ðlÊþDž´4¢ÛÉæã¬r >LM_}ˆe¨Þ"ØL™¼’¨Ì»¾ŠšQ ƪJ¢nA·[Y GIìH þ‚cHÓÙ¹ˆDa³ú0=/»¾’Dµq_Ó‡0³« éSÒNX,0¤þÖT™~&,+ßÂÆ3h€ð¹9›`%–Á,7 2`¿VÅî¬6ÚhÓ€µD[l]´1XÊ¢xÈD³–ä)cEd‚JËãà…%,+i+î¨&f'…eë­r›éhçt”–"4­üÖ'±!êD«©Át„uè®Ùd ªËÝynÁ?6;eg§Šu¬sQtJ¿[jB¶¦k&mœ­è9NRZ½ut RÌ´UF-¸ Ô5ê:É¥”æn0ÔÏdeQ\ëŽ%¦¹àŒˆ€_|q®q‡ÿ þ0LìœëÈ»ïb+õå®aÑ¿…ˆ±û7{èÅ·ÒÂBLÁ}¹ÝÅ$M‘ÈO×!T  9dîÅÄž<ØQí«)½uÚ1‰TxhlMÇúŸúçÇßýöÛ/_¯JCžtÍ;/ËÐÏïúYa´1¡XyÛÛ:óÑ ©òHt7L˜0":Š¡¦©âó{nBi¤¦Pç˼Eú¡ +O{T”®2‡`þb¥Œ„Í̶£ý‹µäZµDœóù32,^\žXÐMj”öN“ç3 'H^=çw‰<ç—7ÎIU䨭[VÒ(ÊÂ|(+•©)>%õ£ ²ìž ² eÌÿ®F*Btª^’Î!{N‘Kw¿hïÝ’*å=e(r¡yH$ºÀ@î£ì¹1^œîÌV™r@WµaÛ]o“ÖЪ(ÏèÜÒE«¯&HÓLAŸ”ëôæÒÄÆpÆŒfÃäãÇ¡VÕS9ògnÞ©šÀ(ønåN¢—i?¨ÆmÉiY‚Í“Oõ,¯uJÖdÏ€B›Nߥ|ômJÇJ¦†JLªUêXþ†Ô8Z]w ‘!ß¿ÌÆë$±I4£ÝÄDË î«#«I¬lžÜ‘†€ž_$oྕCÚ,p@ØbÎ SOÊÈË*¢ÕNÈC›–Zm\ÔŽ ¨ž>­‰3Úð\‘Ú¡ÑÜïô1Ç^g€UàüRÍHVYùÀˆ5!¼;ÝÃLÒÀž¦ü.dÍÃe/„p…3›»éÚEB°Ê{m1VXN‚æÂl‰gÁíE¦¯ädõBÕF†Ú÷™Õ<:.è{.É[Õ… @›w¸ ïL#P(§—ؘ[/ˆv!׈ ‘¨H‰g^Óùoßþ}Ïç5t¬Wª×Fd…¯éçwûšxøfdjÖQê¿S§"ô{’‘Úʘ +O4ÆlL €# e Šò#qæ‰D p¢!¢ôA¤„Ìã –›æÊ¿K¾SûŠ6õÏp¨x£?Z§\›s!óÉ‘²=3?Âͬ)^'Eà·.Y` +Ò¨¢,0_¥ßf ²æãXñ.«Ç‚4»Dqˆˆ4µ’>«ÏE—â'ü)AnÍí¢¿uIh’43@jYVâ eÞ±¶{¹ì]äÜ4rq„£h哳]¦MÉEç–•§0‰ÒéFÁ–"Ì^¾À° Ò¹ä­Øj‘0@* újËãܹÝÑ î0^b@¦úF•¼* Æð*ªe{-L2ŧÖ"âÀwÈØ:мsc?ͰLí9¿žÙ¯©íØU,9sÈ>/$­—$Ð’rÄNéƒ/ŸÅù£ÍæTˆdÂrÖçr—3îð‹  ­Å :DÂè ]ÏœÚ#æÏ™Âž>xM²Âr4¡ï;uãàÜÁF°÷: ³ÄÌYP0‡<ÁdOõúv#-m`äyE²æðÂ~¥AàŸ{Ü!º¢8`gäýûk(Q–fSe’Ï«{šÇ4yŸ{ÇÌÔo/ȈÕkGç•2 öëyƒ<Ÿ#9Õn'ê> +<”‘˜2Èþ¡ñ¾õI-¥`K‘!MCùã×ßþññóß¾ýþöñíçþþËßþø¯çôö¿·¿ ŽZ•¥ ýë(5r@å=ËD2Ä…?e¢[+È‘{h<•!«çà{Yei|”õò„BA¤ Œ¼UºO‚&#ð\÷=¾ŠÑÁm‡@›JbúLH–– …!lŽø¤Ùðý(v 2kN–ÛY·!²ÁHÒAå4MÛ tº¸šÁB4Ñ\¾pÙ¬dA¼/H¼;±"½ ½BÞ.›>®¢Û&‚œÌm(ûÙíCÐJ´’ó–ÐáÞãáÒ,{ +MJT/0* VÏ·²@­ˆÔ¨àŒWW°{zjz¸ø —Säöêâ€Þi=ò#WŽÖ2%µ¨o´ +Ó½™õz7›»J•}”ÌÂÑÍ<'ÄõF‹2Þp½¾s¿÷@æÃU¥P™*ª:Ú]UQË¢kFy9R,s/Yhhó~Pzá{¦‡ö –ÚÝà{!8î¨=L +Ç8¼F‹CØaá& „½SŠ«aËò²Ó@¹=(¿”Y¯:·¯¢êh#•¡l=;+Z2(óHŸŠ~®bn’ÞŠKÉ}trDE%í;-/#”¤\ë ål)׬ñÇ|:ÓíĘïëÝ›xLmL[Çîîë6mÑ…EƒÃw·î³ÇP9½tU½ê뜎ª!GÂ]¶•F¤é·¸ÇArÅÈNS·uóë½äëÀžÖåÒn߯ j-1©–‚V‰.2PÚ)„nwZ±lš=9|DAÙôì 0¬I^aéAйvA@ÕËÙÓ(±‰˜Ìx䋯y<ò‚Žy×¹#½…ÒþÙ¥Åb{¬Ï.}Ð;Ü8Óži‡ÍDgwÈ9ŠÐ3çôh|Ën¥ÎÝ—çóWYŸö×Y>÷EÖŸÓQ‰ôdmߣ„[ÔBÊ8 KB×žÜì3¢ñ¹ öFmB…ÔÁcZ +‘\¨ +ž‰áT e8Ÿ¤ì £¾_šFj¶mó‰íüu—+E™Ñ¾Z´‡×k{ Kfåv– +i7Êéøû0EéùJ=ý~7¯´ÓÓðñfyôûÝ-¡eÃŽ—xÃÜühög}ÜUj~Z=lW›§]ôn­ ÉùÑYu +o®ý>Ú­E²i.\~J”}^½Çö2çY7eÿÚLñî¬WZA·ñè£ÿ§»ÚyóJnh¯_ñ•»…„y?J;v Ù`-¸H“2ÀBjÒøïçCr8÷Êp£ï˜—C¾‹–vR8K'šæîèn¿ÒØãÃܯY2¦òO€ϰð’š~k +â¥âê =ÆÕ+.ÝÏövÁlÛÍ>õp…„©dµ¬³a¯wËúþ‚Íû~BnÐE»üµÅ‘,äõöX6RÙ~ëqïü‰^/kz'°X×3wi‰ŽGþ5½Ç@Æ™¸-ê`_%£rg-À|f-xËZh뷬ţó¶ÀÚûa0ÝžN—¸¹7-€õ–¸x÷>‘…àÞ½%nÛû«ÏÝϯOáA\=ž“°všß©{}úåÓoÿüòëë_O_ñ ¬C ?ÎÌ"1Q±Õ•|ësCÞ AíMC"µóÈ µ%ƒ&µ›l2ØÇBÖt"d2cø_¿¥YèÂW Ä4Q6æ&šôA€•ö–Ã4çèvâï9ñ7 ¶YÕ&E‘ãë&u3µ‘oæî¯W2cTeËÙjQÛl *³Š\ã´]c”S9žÊ©-a EýtŠTªMXǯÌPäa +ˆ'@Gi§U¥¨QÕO]èõ—"Û —LI¬ÜL¦—Uxú?éGceuæjÈØsÜ(a9°ÊT ‚€è,9ä[ôQ?0ÏBo{êAyX™øóblUæ)Xq=þùõïRv±AždK¬3 ›¶u‰&ÝÆ húà3U»ñ°•6\Gõúµ¡xy©C“d­ [ʽý!¨ßÊÛ!GN† rê¡ [¬—‡Wà5¤º\5Lêb3"âÈü*–F­Ü"Ñ?ÜèÏÆ4’0Y>‡? +^=9@µ® pËÊ;Ú³Äç "ÜéY$I?»³ 3˜p>å&§ŒK9ÌŸ5¤cÄÌ­šr¿§¿ýçÛ—O’uµ¿ŒÕ"+廃ÒÀîM4S›œqy±ß€ì·$tv‹¨SPÑËûU‚olƒ-6—³ ¡ô™mlá5*ˆ6½«´?æõà+‘À¢#<ß”|çÁêäð¿¡È§¦Gޤ‰{¹K ·×Η;Ì´¶,Ù3ÚXÁPõ¦3Ó=rAzëW{–UœÑ°ºt³»Z!ding¶Bc1–dòî2ˆÚ‘a4¤ñÐ"ÖpËÝbÐC–‚áÉ€P­¹Á3+Zü0äÛ5È,ô™¬¿¦Èîûh,àã¦VYÃ\æÐÑh)JÑà4¡+­p ¢Ý>X¨ÐÅE’YY©, +aEºtÚ*íÌm@±”ƒ„H;„’5¸AêÑ8m2½°§7 Éê2 æ´¢Ù×6¨i”ºLÁC#Lhƒ!+Gü¹ÚÙ§ùaG~hYx°ÉÒu|neM‘ d¹ÂÞÁP¶©Mûw_’h™5jÛ€·R¥,b#·ÞX,½”ê"CÞ§@—#’±ú‘FBàŠÚHé*WÛbKE uµešw}rQl›Õaõì 0Ëýp€jŠï§èï#p²nÉÚ“¨4DéçI×äýÌþsÕ‰™1bâãÿ}zÖu'àŸÍŸ>¤ô)W Ÿ/ß¿èý±¾ÿó7ÚÀh—Ã]‹dä«Q‘i÷móኬ³ Xšu„Tw…òºýºØFæ }Æ…55‘›'¨ºŽìœ¢ÜDú>#MU§ebN÷ ÕèiT“^·MW÷Þn¡·ìÒ¾iØØv»G)ßËÜÀÂz” Z‹“g@çF¡LÅoåb m.DÓ&b?§Tl£6ÛøíúÝq¦‹ÏQ^÷#ÿ-ºü™'ørÈ8ðDæH£j¼c’eF#æ%—¯§±óaãyl²}4ÿã…Gr<Š*G¤=hDvÍ£ÑLwTÜÜ–2¥ê„ž£6G„zd"lÝÃ?vq"Ea×@:¯rÄ“u‡Ï‰‘+3X‹§‚ÁË@:ßzŒ¬upòýµŠ¡Ëe,ò帰ÜcÒ¢ëDàóSl¼”؃@𵞻qùa«¼šÎ¾½yG¥ “ªM«×oç)²¸Ì;–x +8ÿí +u ‹%õHÃ,pÞ’ÅÝV¶ˆó^Ô8ßí1ç½åü7ãÅåÓa)½â¢Í•·ŽýÃêH‡o”‘´¿(iHz.sú]ƲoÈö +ÌÊmÈn¬ó¸ty oÃòÈ`ïKÙ2 9©öª‰•d4íÀjM§ÀF SkÉ#¾ÝÞÔ`Ljn?§TèWm([ž–þÕ¶ÓÞ¬k6ªfw[ÝÌ?£Åv‘@ÝßµUJý|P÷–á÷ 7ûê|Õo)ú‚£Î™â8“],®AãH–$b;˜·õƒÌ/Ù¥ùûþý‘:“Ùºvµå&Óҷ昻¥÷nÍ„–¤¨vgBÛ­;{YW[@CSt`æÿ>ztƼ?…\9àÛyi1Κݩ ·N3–[k–Ú¬½ìnÖޟݯ?bï4öhÙiXgј¤aDƒš"iš: s€R½±œˆHW[Žy³ÕÉ&™2§^ŒÙÉÍ€@æ×Èж4¼duչ䂦1'›q±•S) z¾ dJ³è¨wö·¬ó^tú\”‡=ÛBÏû%@+jÉõR+L‡jŽÆi)âÒ)!n(ÔFY” èŒýF[DÎűbM¾ËV0©ÑÄ&h{ ófXl:™¬Å)äûºµ{¹wªL nŒÆrön¸Øïù4Å‹ºd¯´ /¨õ[ûq‚…\z2H¹8—ÝjÔ5Õ@—lð$12ò¦µgM¿R65¶ÖP-ZQ +æÑQΖ6àm,„~íã1`Æ^ ¨[ðõûXÏÏj¤Õíªk—ÛT ´Yw·Y–‡M æ~Ðæ#ÖK,¹°¢‡v6'¸7l¯ÔÓ]Ï´¦§f|‡/;ððÀôʃ#¤ 'ÚÝq†l0z•éÚäxº¿„›á~aàpøèÀÀ¹ÛÎÑæ­t„ûšÒ“%óvG)Œ÷Xȇ+=Ë>–òš/ÚÛÞÇİVn×ÊÛSk/ùšˆµÛõ¸/ ìå»vö TÇÍÛCv¿ä@yÉ}ko~}zFgB5ÍGÀ¿g ­Èô׃¦Úúìõýé—~}ýëéëë: æãÇã© IcÍý?ãU®cÙqCóùŠþj_BC c œ:t2/ñÿ>\‹uŸFPÒè{‹E²¸ÁAšh4%WcëÛÀP ÕVùAiߘzçXÂÙ9f QÇeÈH±Ka–¦uéÔJ+%ÜI¬¢1ÃmûX»‹!ê ës€j©ïr9M½Ä56”j}ÞŒòî]Aµd`ôãȹ¿®/FÅoŽñscœŸïAM‹P þá°=Í®þ™ÓŸOõð’éΆ¦’X¿Žæ(Tΰcñãÿ¥ôÚtâN¯úiI{;%Ö?Ê/ÿùü埞]GÇï¿R@ÒháÄË!ðåeö`nk0øÉáhl;ŽË•UcÜéé—ÄÄ»ÁIÝ€ŽfÍ×-ßu&Í×€i-щ&Ê*š£)`c$ó[0R†„AoÕ@U°õn†lü¾ÌCk` ÿKÐ3­È´iÇ`Á[­ïb–Öþ<Þ­oÒ5J öj`å%Í ]WoGnÊ`J¡Tª%Ž6¢x÷Ær[žPÖˆ…è¦5¯Kœkã$ÖÍ–m…J½p¸KiU)?€-k­æþNJŽ¨Ëø9ÉÅ(¿%—±B’”ÊŠ9A³wÄ´AZ»SKcpCù‘§ð§@çbßÍâ.±!¬ëY¶Ù+‡‚À¸È"®øžÿ5Ç"úžM§øH9D`këª @}—«*bñ·Â ¹>®²0m¡(èÖjï.Eƒ¹HNJá¹F®Îñ„èåSZW% š«X>z% m’¸Y”Ð*¶>¦Þ–SKny<§g¿³%†¿Í²Ä°,’<à¹J*“˜wÕ¦I–fñõ /mÔôâž’ž[+A½s‡ x+ècÎÕŽGAÁå ~{jo݈IÕU/C~¢ñT!Œ<Ÿ2æM&iC7ñAãL.î¢áôÛ÷¥ƒIÓHBm5™ùEßðE F‹@ëûY  R%€0i;ÜÐ]—€üì€@äè‘Âi3?[Îl5XižB¦JËHò7hûQp ¹¤|eæS±9d¤YÝhH”eb‰¨2 ¾ª©[Õä–5Ô˜&ûE… +÷’˜eIúc¼2YFFã²uÜèÃ_s.øQ\¡)òŒ1RªŽû-Ž\x3 Jx[Ü»û{<³E©IUÊ’è€@0ôÝHQ’Ö¾Nc’?›­¡FR·P_C—•¨F"Ï’ŒYšidÊØº¹LÍÿ"—e™6““Õºx Qã@=[L‚œr§¨nR|ýR²] +ójðlë¡t»Iéz˜ã"¨ö¿ýú¯oY«¿·Í¤x’˜¹™ç¨c:‰;'í-)ØQMƒƒ?ÑíäÔ0Æ“†]'Á@ë€< õÚ ÒY˜xeèY'u7Ë…€‘œO{+ÙclÑÿ„¡ ÙüS9šQûV¸yù‰÷î¥róà8ëÑ‹¾÷pƒ§ÝfŰ(rùO4/?Ôy` Y¸[6U‚Ÿ +`¾éàÅÞ9¼¦auéKc?ä`›mÞVŒª›[”«ZIQw*ÁüÞªïA×HØÖ‡IûÈÖê‘“³çQýŽøúnL̲ºµ+ŸàÜzKF +¦”æ Öl’ØKJÛ/ÙÙÞb(›‹¯kØ¥rè +p=T‚›Ù­ƒDw:/ZÑk0^t€œ®[VÌ•:ù.š<Ùý¶ìnVHw·?fÆ›óÚÒÚ/OoNéűrCŸà|]˜É÷n­ VÑûǬÊC=ðÙ´@™¬nb«„IC¬²Ú¦¬[xn¥^l÷bd¸~üc'áz_¤ —/ÇvS¹V¤Ì+gf¡æü¾!•£#`raö–±»Æ3~—kZG[ãÀmD#Õøõ"b7~ÇA=@^_b„—0[G2’Níšø7‘]èfRíc¢OÿÅÎÕY ä —ËÐKªLŽ¡JäŠ6o3ÈLòñÅÙt0ÜÄùT+q:J¿c|YŠ RázM”ÜL5 aé´/îv}.‡Ši*ý¤ú!séÖ‘•c09h‡pÄ“jVÆí"ø»÷CµÇïCucƒ¬—Ué$nžýxó•ß»S‘ÉI€cætã¶U)¢<§ד»Ã™“ë…ýXÒ•Bò„‹€<*š«Ý¬ª6¸Ñ6úe©¬€ù)·–|iCŸZóq§MAŠv÷Ž8^Çõ½¦Jø©ðŒ®=¼µÛr¶ò 8™cË Çyª} ð™tI XI-hN`§,°<»'‡È1ñi´øÒË£† ¡Êî$ÉÏkËÎå‡àòú÷7/¯,œ„°&… ~.Qn?‘Îú‰íZÉ'Þf +²Ú +žÈ¹lXà“ræBË>Pâg,IŽR4u÷C[¢(És˰~Z¡™eÀd„«õîá7Ÿµ­Ö#aXô¼j÷¼1é{1ØÕºúéñÀú±®`Á¨Ê8b8\.„C”…XØ1fÙ‰†Ùãñæ»5 .÷ôÅÓ±xzðü +ñø¤Â쉭#úÌÌWÚŸ"Zûq`Ôqcl·¾úe›äûPŠòËšh™J(ßû^4Ýf …m:‹’x$*å)ÛW&Þ$ؘBú€5h\G3cUIRE¡áÑì$ú¼hKÚ€ó%9®ÖBta¶¹Û”¡‹ß0–bƸÅèŒU0ö 4gJ×!Dò¡]f(ðù¥u¥Ð½œlÔ5ß°’Ô¥®ßY[i<”°Â>ö§6«©¶cTM–Ê«¢WÂë–$²nÚÁàÁÒÕ ž7~øae*–•6êääæÖ!ÔÝ”¡œ©|ø¶õLIv»M¬·>Ø '-•cጵ„ÍvŽœ?è ℚ®øûýºèp*i DpQÀò j&rŬ!yY.õir°G° ·¶žu}0 ™Ü[«cSÏî ]rØ=úÌõ¡ ´n:Œ`s¹Ít”±EE«~´§\‡>•k{†…•l.ç±ê”oŠÉ½à&#‹-®ÊVº"îMS±²˜{gÚª¼KÛ&…Ì [í­ÄÛ2ÛÓ£Bê«U,þ“ž…Ñ>peëÚ«²>¾— J™‰>2LŠGRJe„Rp ý$+Îñ¦Kßç' và|d­\9öE¹ŽãV½Ý•Û 0”Ël‚ ¥2®O¹êŠ´uÅš2ås_E°¥¦EƒáøåƒÙª}g‹MKR›DÛ̹’e“þi!P÷»Ì˜¨,k3Ö+¡Ì€Y™é¡¼1øfùiyºøQÞ¥œÔ¶ò.ÄtëˆÕ hÎGu_bRŒQ›-Ù^%µ­¸ ìQÜ…øðSèÇx70¬ŽwqéQÜQΊ‘ôåGq—›€Gª¦Gq£Zâ&Fuš£7°”®â¦Wâö— +ÅM\,?Š›´õPÜéêÛ+E^uOšh¤<ðéý/[3àoŒ›…ÉÍ#Hå1D¶  LøÆð#ˆ æŒÀ1Ô +"Ä@:VI•éMÏáŽZDjdVݾÎÄ×#½ã¹ªLðh¯ÊaÉ]_ÜU²”£|¤`Lš]¨Œ]äF!ÍÓ…þÒ·„Å5-8{\RîÆqq ^ËÉÑ4BÜŽ]¸zj´¤ðC‰GÒ þ(:Ÿ„¥EL}¡idjEðhn¶©©+yÞ–`2aNtŠöÆ$ÿ9¹+‘w`ÍlÛðv ¬w}%¤*é¯Ê[ÄÚ^©1Šº;nI>k‰QM±-çr…€‰`÷’ Ø4izW&^*”|Ü€Ôß&Êa¯zçkblòÍPFÜ0Æ+PÏæ±¬ ~åy±Kj·&'m@½[±cÛŸLí¼h~Èå¨ )ëeTöÃ÷©›Ä‹°ÿ3^%¹qÃ@ðîWÌ&&ÅMºf`$ˆŸà[à9çû©^Ùâ\æ`Cª¡šdõVݹ{–žÜU–˜À޶ñ€ÑN‘¹Ì—Ö6ÿRWí]¦K²U”G,7lð´lÓÑ#chÙ±R @JŠù¬q¬k˜†ŒrôÝVIŒÝI¦`ËÀZ­v%¡C¸b@ò¼H¸ˆÆQŽá›â羟FF†¬ò <sH#gè&òeàM–C'z ¬sO!ÑŸØeçìõ%:(Ò2b—r•œMúâNHK’PUF? X;ô´EuŠS[´ÖFjQŒn§¶pÂöl¦Šù|lðj4Ö]J,!UXJ~0:*u9êô:‘ âÌym=Å™ˆîZ ä;뉼|ûN½X¤iL3Ü3€Þ…ÖCÊYßÇÂïx|á>å‹ 1ojj¤5¢Žÿ:±gjË`±iª¡Ød@éÊ5~ ?¤´@cÚ;3ã!æ+ôÝ,~+hRI*6ü1ä’ñÂ= +4w¬A²òðX¡Z@ª:yŒIô–Õ@÷UІ¨-ëÍb€úr<Â\l+Ù#Œ[¾ÜkÚŠ%Í^ôæƒ/ÃiCÝzp=_¢Q°> 6ênñ™pieŒîÛ²¢¨ª KûEÕ‡ï'XV~’å G5ªArvH̱ Í’Vs‰©5ãc*¸³=ºÔÙþ(uK'Œ!ºÂc|£¼$ DzcÒP×z.„;=œ?æÂÄžÐuPjj*üÎy +h”ïîju ÒÐÊQ¦ÁïM£Ã :$¨Ú f•F÷ 9kýqÿ£e¢Y³2?Âu¤{„ï ¢¨rÉ’ÈžýÜ"F+*qQ1-õHN.wîs•‰]²e2 b‘“{îèÈ<—;Jv‰Žò⵩Mv”)"“ +MóÓÆtñHó@l?‘¦Zw9/™ lÌá#訄íSüöFqx^WX3=cG„4m™|•bhòxàH2…¹ .ûM%ik4*Ñ4©)u¥ZÐÅšÕ 0ÅÚ(‡aÊ–ÐW!ÐÍ¿n-0â»Â+£-g6½®wS?{{å #àV~q×´Ÿ¼Ð!øÚâ-_å> |¸ã»×Ð5>/Border[0 0 0]/OC 1601 0 R/Rect[-1.79999 -1.79999 1.79999 1.79999]/Subtype/Link/Type/Annot>> endobj 1600 0 obj <> endobj 1601 0 obj <> endobj 1596 0 obj (SP3004-04XTG) endobj 1594 0 obj (DIOTVS6P_V2_SM-SP3004-04XTG,6V,N/A,E026047,SOT-563-SOT-563) endobj 1595 0 obj (\(3135.00, 580.00\), 360.00) endobj 104 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[59 349 0 R 102 0 R]/P 103 0 R/Pg 23 0 R/S/U1>> endobj 349 0 obj <>]>>/K 123/P 104 0 R/Pg 24 0 R/S/l1_primary>> endobj 102 0 obj <>]>>/K 57/P 104 0 R/Pg 23 0 R/S/silk_prm>> endobj 1604 0 obj (AT24C32E-SSHM) endobj 1602 0 obj (AT24C32_SM-AT24C32E-SSHM,E021452,SO8-SO8) endobj 1603 0 obj (\(1064.00, 1666.84\), 90.00) endobj 312 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[86 311 0 R]/P 290 0 R/Pg 24 0 R/S/R13>> endobj 675 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[449 674 0 R]/P 290 0 R/Pg 24 0 R/S/R15>> endobj 622 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[396 621 0 R]/P 290 0 R/Pg 24 0 R/S/R17>> endobj 579 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[353 578 0 R]/P 290 0 R/Pg 24 0 R/S/R18>> endobj 605 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[379 604 0 R]/P 290 0 R/Pg 24 0 R/S/R19>> endobj 387 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[161 386 0 R]/P 290 0 R/Pg 24 0 R/S/R1>> endobj 692 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[466 691 0 R]/P 290 0 R/Pg 24 0 R/S/R20>> endobj 620 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[394 619 0 R]/P 290 0 R/Pg 24 0 R/S/R22>> endobj 291 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[65 289 0 R]/P 290 0 R/Pg 24 0 R/S/R24>> endobj 302 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[76 301 0 R]/P 290 0 R/Pg 24 0 R/S/R26>> endobj 406 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[180 405 0 R]/P 290 0 R/Pg 24 0 R/S/R27>> endobj 408 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[182 407 0 R]/P 290 0 R/Pg 24 0 R/S/R30>> endobj 671 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[445 670 0 R]/P 290 0 R/Pg 24 0 R/S/R32>> endobj 677 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[451 676 0 R]/P 290 0 R/Pg 24 0 R/S/R33>> endobj 684 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[458 683 0 R]/P 290 0 R/Pg 24 0 R/S/R34>> endobj 541 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[315 540 0 R]/P 290 0 R/Pg 24 0 R/S/R35>> endobj 709 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[483 708 0 R]/P 290 0 R/Pg 24 0 R/S/R36>> endobj 694 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[468 693 0 R]/P 290 0 R/Pg 24 0 R/S/R37>> endobj 646 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[420 645 0 R]/P 290 0 R/Pg 24 0 R/S/R38>> endobj 648 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[422 647 0 R]/P 290 0 R/Pg 24 0 R/S/R40>> endobj 607 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[381 606 0 R]/P 290 0 R/Pg 24 0 R/S/R41>> endobj 560 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[334 559 0 R]/P 290 0 R/Pg 24 0 R/S/R43>> endobj 679 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[453 678 0 R]/P 290 0 R/Pg 24 0 R/S/R44>> endobj 581 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[355 580 0 R]/P 290 0 R/Pg 24 0 R/S/R45>> endobj 681 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[455 680 0 R]/P 290 0 R/Pg 24 0 R/S/R51>> endobj 583 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[357 582 0 R]/P 290 0 R/Pg 24 0 R/S/R52>> endobj 585 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[359 584 0 R]/P 290 0 R/Pg 24 0 R/S/R53>> endobj 369 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[143 368 0 R]/P 290 0 R/Pg 24 0 R/S/R6>> endobj 391 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[165 390 0 R]/P 290 0 R/Pg 24 0 R/S/R7>> endobj 632 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[406 631 0 R]/P 290 0 R/Pg 24 0 R/S/R82>> endobj 601 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[375 600 0 R]/P 290 0 R/Pg 24 0 R/S/R8>> endobj 498 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[272 497 0 R]/P 290 0 R/Pg 24 0 R/S/RCAL>> endobj 952 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[70 951 0 R]/P 290 0 R/Pg 27 0 R/S/RHSTIA>> endobj 431 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[205 430 0 R]/P 290 0 R/Pg 24 0 R/S/RTIA>> endobj 430 0 obj <>]>>/K 204/P 431 0 R/Pg 24 0 R/S/l1_primary>> endobj 1654 0 obj (RES_SM-10,E003666,1/10W,1,R0603-R0603) endobj 1655 0 obj (\(1895.00, 660.00\), 0.00) endobj 951 0 obj <>]>>/K 69/P 952 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1625 0 obj (RES_SM-TBD0603,E004050,TBD0603,TBD0603,R0603-R0603) endobj 1653 0 obj (\(2205.00, 910.00\), 90.00) endobj 497 0 obj <>]>>/K 271/P 498 0 R/Pg 24 0 R/S/l1_primary>> endobj 1651 0 obj (RES_SM-10K,E029951,1/10W,0.1,R0603-R0603) endobj 1652 0 obj (\(1955.00, 1005.00\), 0.00) endobj 600 0 obj <>]>>/K 374/P 601 0 R/Pg 24 0 R/S/l1_primary>> endobj 1635 0 obj (RES_SM-10MEG,E005790,1/10W,5,R0603-R0603) endobj 1650 0 obj (\(2895.00, 950.00\), 0.00) endobj 631 0 obj <>]>>/K 405/P 632 0 R/Pg 24 0 R/S/l1_primary>> endobj 1632 0 obj (RES_SM-560K,E004244,1/16W,1,R0603-R0603) endobj 1649 0 obj (\(2925.00, 440.00\), 270.00) endobj 390 0 obj <>]>>/K 164/P 391 0 R/Pg 24 0 R/S/l1_primary>> endobj 1605 0 obj (RES_SM-0,E027148,1/4W,N/A,R0603-R0603) endobj 1648 0 obj (\(1660.00, 620.00\), 180.00) endobj 368 0 obj <>]>>/K 142/P 369 0 R/Pg 24 0 R/S/l1_primary>> endobj 1646 0 obj (RES_SM-560,E004245,1/16W,1,R0603-R0603) endobj 1647 0 obj (\(1150.00, 645.00\), 0.00) endobj 584 0 obj <>]>>/K 358/P 585 0 R/Pg 24 0 R/S/l1_primary>> endobj 1607 0 obj (RES_SM-0,E004207,1/16W,1,R0603-R0603) endobj 1645 0 obj (\(2640.00, 680.00\), 180.00) endobj 582 0 obj <>]>>/K 356/P 583 0 R/Pg 24 0 R/S/l1_primary>> endobj 1644 0 obj (\(2640.00, 610.00\), 180.00) endobj 680 0 obj <>]>>/K 454/P 681 0 R/Pg 24 0 R/S/l1_primary>> endobj 1643 0 obj (\(2900.00, 1290.00\), 90.00) endobj 580 0 obj <>]>>/K 354/P 581 0 R/Pg 24 0 R/S/l1_primary>> endobj 1611 0 obj (RES_SM-300K,E024299,1/10W,0.1,R0603-R0603) endobj 1642 0 obj (\(2715.00, 740.00\), 180.00) endobj 678 0 obj <>]>>/K 452/P 679 0 R/Pg 24 0 R/S/l1_primary>> endobj 1640 0 obj (RES_SM-510K,E026533,1/10W,1,R0603-R0603) endobj 1641 0 obj (\(3145.00, 1260.00\), 270.00) endobj 559 0 obj <>]>>/K 333/P 560 0 R/Pg 24 0 R/S/l1_primary>> endobj 1638 0 obj (RES_SM-1K,E015180,1/4W,1,R0603-R0603) endobj 1639 0 obj (\(2765.00, 410.00\), 180.00) endobj 606 0 obj <>]>>/K 380/P 607 0 R/Pg 24 0 R/S/l1_primary>> endobj 1637 0 obj (\(2840.00, 885.00\), 180.00) endobj 647 0 obj <>]>>/K 421/P 648 0 R/Pg 24 0 R/S/l1_primary>> endobj 1636 0 obj (\(3020.00, 1010.00\), 180.00) endobj 645 0 obj <>]>>/K 419/P 646 0 R/Pg 24 0 R/S/l1_primary>> endobj 1634 0 obj (\(3100.00, 920.00\), 90.00) endobj 693 0 obj <>]>>/K 467/P 694 0 R/Pg 24 0 R/S/l1_primary>> endobj 1633 0 obj (\(2930.00, 1385.00\), 0.00) endobj 708 0 obj <>]>>/K 482/P 709 0 R/Pg 24 0 R/S/l1_primary>> endobj 1631 0 obj (\(3210.00, 1665.00\), 270.00) endobj 540 0 obj <>]>>/K 314/P 541 0 R/Pg 24 0 R/S/l1_primary>> endobj 1630 0 obj (\(2505.00, 1605.00\), 90.00) endobj 683 0 obj <>]>>/K 457/P 684 0 R/Pg 24 0 R/S/l1_primary>> endobj 1629 0 obj (\(3030.00, 1665.00\), 270.00) endobj 676 0 obj <>]>>/K 450/P 677 0 R/Pg 24 0 R/S/l1_primary>> endobj 1627 0 obj (RES_SM-100K,E018430,1/16W,1,R0603-R0603) endobj 1628 0 obj (\(3020.00, 1290.00\), 270.00) endobj 670 0 obj <>]>>/K 444/P 671 0 R/Pg 24 0 R/S/l1_primary>> endobj 1626 0 obj (\(2960.00, 1290.00\), 90.00) endobj 407 0 obj <>]>>/K 181/P 408 0 R/Pg 24 0 R/S/l1_primary>> endobj 1624 0 obj (\(1660.00, 765.00\), 0.00) endobj 405 0 obj <>]>>/K 179/P 406 0 R/Pg 24 0 R/S/l1_primary>> endobj 1623 0 obj (\(1660.00, 840.00\), 180.00) endobj 301 0 obj <>]>>/K 75/P 302 0 R/Pg 24 0 R/S/l1_primary>> endobj 1620 0 obj (RES_SM-2.2,E017481,1/10W,1,R0603-R0603) endobj 1622 0 obj (\(585.00, 565.00\), 0.00) endobj 289 0 obj <>]>>/K 63/P 291 0 R/Pg 24 0 R/S/l1_primary>> endobj 1621 0 obj (\(655.00, 140.00\), 90.00) endobj 619 0 obj <>]>>/K 393/P 620 0 R/Pg 24 0 R/S/l1_primary>> endobj 1618 0 obj (RES_SM-150K,E003672,1/10W,1,R0603-R0603) endobj 1619 0 obj (\(2740.00, 1190.00\), 180.00) endobj 691 0 obj <>]>>/K 465/P 692 0 R/Pg 24 0 R/S/l1_primary>> endobj 1616 0 obj (RES_SM-1MEG,E003682,1/10W,1,R0603-R0603) endobj 1617 0 obj (\(3050.00, 1385.00\), 0.00) endobj 386 0 obj <>]>>/K 160/P 387 0 R/Pg 24 0 R/S/l1_primary>> endobj 1615 0 obj (\(1660.00, 680.00\), 180.00) endobj 604 0 obj <>]>>/K 378/P 605 0 R/Pg 24 0 R/S/l1_primary>> endobj 1613 0 obj (RES_SM-1K,E025456,1/10W,0.1,R0603-R0603) endobj 1614 0 obj (\(2715.00, 820.00\), 180.00) endobj 578 0 obj <>]>>/K 352/P 579 0 R/Pg 24 0 R/S/l1_primary>> endobj 1612 0 obj (\(2765.00, 545.00\), 180.00) endobj 621 0 obj <>]>>/K 395/P 622 0 R/Pg 24 0 R/S/l1_primary>> endobj 1609 0 obj (RES_SM-3MEG,E011856,1/10W,1,R0603-R0603) endobj 1610 0 obj (\(2835.00, 1225.00\), 90.00) endobj 674 0 obj <>]>>/K 448/P 675 0 R/Pg 24 0 R/S/l1_primary>> endobj 1608 0 obj (\(3175.00, 1170.00\), 0.00) endobj 311 0 obj <>]>>/K 85/P 312 0 R/Pg 24 0 R/S/l1_primary>> endobj 1606 0 obj (\(605.00, 940.00\), 0.00) endobj 248 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[22 246 0 R]/P 247 0 R/Pg 24 0 R/S/R100>> endobj 355 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[129 354 0 R]/P 247 0 R/Pg 24 0 R/S/R10>> endobj 325 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[99 324 0 R]/P 247 0 R/Pg 24 0 R/S/R11>> endobj 351 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[125 350 0 R]/P 247 0 R/Pg 24 0 R/S/R12>> endobj 278 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[52 277 0 R]/P 247 0 R/Pg 24 0 R/S/R16>> endobj 285 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[59 284 0 R]/P 247 0 R/Pg 24 0 R/S/R21>> endobj 625 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[399 624 0 R]/P 247 0 R/Pg 24 0 R/S/R23>> endobj 575 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[349 574 0 R]/P 247 0 R/Pg 24 0 R/S/R25>> endobj 669 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[443 668 0 R]/P 247 0 R/Pg 24 0 R/S/R39>> endobj 327 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[101 326 0 R]/P 247 0 R/Pg 24 0 R/S/R3>> endobj 577 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[351 576 0 R]/P 247 0 R/Pg 24 0 R/S/R42>> endobj 629 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[403 628 0 R]/P 247 0 R/Pg 24 0 R/S/R46>> endobj 1002 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[120 1001 0 R]/P 247 0 R/Pg 27 0 R/S/R47>> endobj 972 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[90 971 0 R]/P 247 0 R/Pg 27 0 R/S/R48>> endobj 1005 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[123 1004 0 R]/P 247 0 R/Pg 27 0 R/S/R49>> endobj 361 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[135 360 0 R]/P 247 0 R/Pg 24 0 R/S/R4>> endobj 977 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[95 976 0 R]/P 247 0 R/Pg 27 0 R/S/R50>> endobj 363 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[137 362 0 R]/P 247 0 R/Pg 24 0 R/S/R5>> endobj 556 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[330 555 0 R]/P 247 0 R/Pg 24 0 R/S/R81>> endobj 344 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[118 343 0 R]/P 247 0 R/Pg 24 0 R/S/R9>> endobj 343 0 obj <>]>>/K 117/P 344 0 R/Pg 24 0 R/S/l1_primary>> endobj 1661 0 obj (RES_SM-0,E010661,1/16W,1,R0402-R0402) endobj 1682 0 obj (\(885.00, 1140.00\), 0.00) endobj 555 0 obj <>]>>/K 329/P 556 0 R/Pg 24 0 R/S/l1_primary>> endobj 1680 0 obj (RES_SM-300K,E030120,1/10W,0.1,R0402-R0402) endobj 1681 0 obj (\(2754.71, 345.00\), 180.00) endobj 362 0 obj <>]>>/K 136/P 363 0 R/Pg 24 0 R/S/l1_primary>> endobj 1656 0 obj (RES_SM-10K,E019640,1/16W,5,R0402-R0402) endobj 1679 0 obj (\(855.00, 1745.00\), 0.00) endobj 976 0 obj <>]>>/K 94/P 977 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1673 0 obj (RES_SM-0,E003438,N/A,5,R0402-R0402) endobj 1678 0 obj (\(3050.00, 640.00\), 360.00) endobj 360 0 obj <>]>>/K 134/P 361 0 R/Pg 24 0 R/S/l1_primary>> endobj 1677 0 obj (\(855.00, 1685.00\), 0.00) endobj 1004 0 obj <>]>>/K 122/P 1005 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1676 0 obj (\(3225.00, 635.00\), 180.00) endobj 971 0 obj <>]>>/K 89/P 972 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1675 0 obj (\(3050.00, 515.00\), 180.00) endobj 1001 0 obj <>]>>/K 119/P 1002 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1674 0 obj (\(3225.00, 510.00\), 360.00) endobj 628 0 obj <>]>>/K 402/P 629 0 R/Pg 24 0 R/S/l1_primary>> endobj 1665 0 obj (RES_SM-10MEG,E020465,1/16W,1,R0402-R0402) endobj 1672 0 obj (\(2680.00, 1620.00\), 90.00) endobj 576 0 obj <>]>>/K 350/P 577 0 R/Pg 24 0 R/S/l1_primary>> endobj 1671 0 obj (\(2879.71, 610.00\), 180.00) endobj 326 0 obj <>]>>/K 100/P 327 0 R/Pg 24 0 R/S/l1_primary>> endobj 1670 0 obj (\(635.00, 1330.00\), 90.00) endobj 668 0 obj <>]>>/K 442/P 669 0 R/Pg 24 0 R/S/l1_primary>> endobj 1668 0 obj (RES_SM-1MEG,E003749,1/10W,1,R0402-R0402) endobj 1669 0 obj (\(3090.00, 1185.00\), 270.00) endobj 574 0 obj <>]>>/K 348/P 575 0 R/Pg 24 0 R/S/l1_primary>> endobj 1667 0 obj (\(2879.71, 720.00\), 180.00) endobj 624 0 obj <>]>>/K 398/P 625 0 R/Pg 24 0 R/S/l1_primary>> endobj 1666 0 obj (\(2855.00, 1620.00\), 90.00) endobj 284 0 obj <>]>>/K 58/P 285 0 R/Pg 24 0 R/S/l1_primary>> endobj 1664 0 obj (\(275.00, 1750.00\), 90.00) endobj 277 0 obj <>]>>/K 51/P 278 0 R/Pg 24 0 R/S/l1_primary>> endobj 1663 0 obj (\(265.00, 1480.00\), 90.00) endobj 350 0 obj <>]>>/K 124/P 351 0 R/Pg 24 0 R/S/l1_primary>> endobj 1662 0 obj (\(1054.31, 1526.95\), 0.00) endobj 324 0 obj <>]>>/K 98/P 325 0 R/Pg 24 0 R/S/l1_primary>> endobj 1659 0 obj (RES_SM-17.4K,E014042,1/16W,1,R0402-R0402) endobj 1660 0 obj (\(610.00, 1270.00\), 0.00) endobj 354 0 obj <>]>>/K 128/P 355 0 R/Pg 24 0 R/S/l1_primary>> endobj 1658 0 obj (\(885.00, 1610.00\), 90.00) endobj 246 0 obj <>]>>/K 20/P 248 0 R/Pg 24 0 R/S/l1_primary>> endobj 1657 0 obj (\(-60.00, 1550.00\), 270.00) endobj 197 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[152 649 0 R 195 0 R]/P 196 0 R/Pg 23 0 R/S/R14>> endobj 649 0 obj <>]>>/K 423/P 197 0 R/Pg 24 0 R/S/l1_primary>> endobj 195 0 obj <>]>>/K 150/P 197 0 R/Pg 23 0 R/S/silk_prm>> endobj 1683 0 obj (RES_SM-5.1MEG,E029463,1/20W,1,R0201-R0201) endobj 1684 0 obj (\(2995.00, 945.00\), 270.00) endobj 106 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[61 364 0 R 105 0 R]/P 98 0 R/Pg 23 0 R/S/DS1>> endobj 99 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[54 347 0 R 97 0 R]/P 98 0 R/Pg 23 0 R/S/DS3>> endobj 347 0 obj <>]>>/K 121/P 99 0 R/Pg 24 0 R/S/l1_primary>> endobj 97 0 obj <>]>>/K 52/P 99 0 R/Pg 23 0 R/S/silk_prm>> endobj 1687 0 obj (SML-P11MTT86) endobj 1685 0 obj (DIOLED_SM-SML-P11MTT86,N/A,N/A,E014445,LED0402-LED0402) endobj 1688 0 obj (\(995.00, 1140.00\), 180.00) endobj 364 0 obj <>]>>/K 138/P 106 0 R/Pg 24 0 R/S/l1_primary>> endobj 105 0 obj <>]>>/K 60/P 106 0 R/Pg 23 0 R/S/silk_prm>> endobj 1686 0 obj (\(1260.00, 645.00\), 180.00) endobj 998 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[116 996 0 R 1008 0 R]/P 997 0 R/Pg 27 0 R/S/E1>> endobj 996 0 obj <>]>>/K 114/P 998 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1008 0 obj <>]>>/K 1/P 998 0 R/Pg 28 0 R/S/silk_sec>> endobj 1691 0 obj (BLM41A800SPB-1806) endobj 1689 0 obj (FERRITE_SM-BLM41A800SPB-1806,N/A,E002349,L1806-L1806) endobj 1690 0 obj (\(3305.00, 270.00\), 180.00) endobj 296 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[70 294 0 R]/P 295 0 R/Pg 24 0 R/S/E4>> endobj 294 0 obj <>]>>/K 68/P 296 0 R/Pg 24 0 R/S/l1_primary>> endobj 1694 0 obj (600OHM AT 100MEGHZ) endobj 1692 0 obj (FERRITE_SM-600OHM AT 100MEGHZ,25,E028908,L0603-L0603) endobj 1693 0 obj (\(565.00, 140.00\), 270.00) endobj 77 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[32 315 0 R 75 0 R]/P 76 0 R/Pg 23 0 R/S/U2>> endobj 315 0 obj <>]>>/K 89/P 77 0 R/Pg 24 0 R/S/l1_primary>> endobj 75 0 obj <>]>>/K 30/P 77 0 R/Pg 23 0 R/S/silk_prm>> endobj 1698 0 obj (ADM7155ACPZ-04) endobj 1697 0 obj (DFN8_3X3_PAD2_44X1_6_A) endobj 1695 0 obj (ADM7155_SM-ADM7155ACPZ-04,E025515,DFN8_3X3_PAD2_44X1_6_A-DFN8_3X3_PAD2_44X1_6_A) endobj 1696 0 obj (\(585.00, 1155.00\), 0.00) endobj 52 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[7 227 0 R 51 0 R]/P 49 0 R/Pg 23 0 R/S/P11>> endobj 50 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[5 226 0 R 48 0 R]/P 49 0 R/Pg 23 0 R/S/P8>> endobj 226 0 obj <>]>>/K 0/P 50 0 R/Pg 24 0 R/S/l1_primary>> endobj 48 0 obj <>]>>/K 3/P 50 0 R/Pg 23 0 R/S/silk_prm>> endobj 1702 0 obj (25.195.0253.0) endobj 1701 0 obj (CNWIELAND0253) endobj 1699 0 obj (CN2P_TH-25.195.0253.0,E016527,CNWIELAND0253-CNWIELAND0253) endobj 1703 0 obj (\(20.00, 203.50\), 90.00) endobj 227 0 obj <>]>>/K 1/P 52 0 R/Pg 24 0 R/S/l1_primary>> endobj 51 0 obj <>]>>/K 6/P 52 0 R/Pg 23 0 R/S/silk_prm>> endobj 1700 0 obj (\(20.00, 677.00\), 90.00) endobj 83 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[38 331 0 R 81 0 R]/P 82 0 R/Pg 23 0 R/S/P3>> endobj 331 0 obj <>]>>/K 105/P 83 0 R/Pg 24 0 R/S/l1_primary>> endobj 81 0 obj <>]>>/K 36/P 83 0 R/Pg 23 0 R/S/silk_prm>> endobj 1707 0 obj (SSQ-110-03-G-S) endobj 1706 0 obj (CNSAMTECSSQ-110-XX-X-S) endobj 1704 0 obj (CN10P_TH-SSQ-110-03-G-S,E020479,CNSAMTECSSQ-110-XX-X-S-CNSAMTECSSQ-110-XX-X-S) endobj 1705 0 obj (\(1555.00, 1865.00\), 180.00) endobj 86 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[41 336 0 R 84 0 R]/P 85 0 R/Pg 23 0 R/S/P2>> endobj 124 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[79 416 0 R 123 0 R]/P 85 0 R/Pg 23 0 R/S/P4>> endobj 416 0 obj <>]>>/K 190/P 124 0 R/Pg 24 0 R/S/l1_primary>> endobj 123 0 obj <>]>>/K 78/P 124 0 R/Pg 23 0 R/S/silk_prm>> endobj 1711 0 obj (SSQ-108-03-G-S) endobj 1710 0 obj (CNSAMTECSSQ-108-XX-X-S) endobj 1708 0 obj (CN8P_A_TH-SSQ-108-03-G-S,E020478,CNSAMTECSSQ-108-XX-X-S-CNSAMTECSSQ-108-XX-X-S) endobj 1712 0 obj (\(2415.00, 1865.00\), 180.00) endobj 336 0 obj <>]>>/K 110/P 86 0 R/Pg 24 0 R/S/l1_primary>> endobj 84 0 obj <>]>>/K 39/P 86 0 R/Pg 23 0 R/S/silk_prm>> endobj 1709 0 obj (\(1015.00, -35.00\), 0.00) endobj 127 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[82 417 0 R 125 0 R]/P 126 0 R/Pg 23 0 R/S/P1>> endobj 417 0 obj <>]>>/K 191/P 127 0 R/Pg 24 0 R/S/l1_primary>> endobj 125 0 obj <>]>>/K 80/P 127 0 R/Pg 23 0 R/S/silk_prm>> endobj 1716 0 obj (SSQ-106-03-G-S) endobj 1715 0 obj (CNSAMTECSSQ-106-XX-X-S) endobj 1713 0 obj (CN6P_TH-SSQ-106-03-G-S,E020477,CNSAMTECSSQ-106-XX-X-S-CNSAMTECSSQ-106-XX-X-S) endobj 1714 0 obj (\(1915.00, -35.00\), 0.00) endobj 206 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[161 700 0 R 204 0 R]/P 205 0 R/Pg 23 0 R/S/P6>> endobj 700 0 obj <>]>>/K 474/P 206 0 R/Pg 24 0 R/S/l1_primary>> endobj 204 0 obj <>]>>/K 159/P 206 0 R/Pg 23 0 R/S/silk_prm>> endobj 1720 0 obj (47346-0001) endobj 1719 0 obj (CNMOLEX47346-0001) endobj 1717 0 obj (CN5P_6GND_SM-47346-0001,E023846,CNMOLEX47346-0001-CNMOLEX47346-0001) endobj 1718 0 obj (\(3524.00, 655.00\), 90.00) endobj 153 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[108 525 0 R 152 0 R]/P 88 0 R/Pg 23 0 R/S/AFE1>> endobj 175 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[130 550 0 R 174 0 R]/P 88 0 R/Pg 23 0 R/S/AGND1>> endobj 89 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[44 337 0 R 87 0 R]/P 88 0 R/Pg 23 0 R/S/AGND>> endobj 169 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[124 539 0 R 168 0 R]/P 88 0 R/Pg 23 0 R/S/AIN0>> endobj 145 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[100 521 0 R 144 0 R]/P 88 0 R/Pg 23 0 R/S/AIN1>> endobj 165 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[120 537 0 R 164 0 R]/P 88 0 R/Pg 23 0 R/S/AIN2>> endobj 167 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[122 538 0 R 166 0 R]/P 88 0 R/Pg 23 0 R/S/AIN3>> endobj 147 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[102 522 0 R 146 0 R]/P 88 0 R/Pg 23 0 R/S/AIN4>> endobj 91 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[46 338 0 R 90 0 R]/P 88 0 R/Pg 23 0 R/S/AVDD>> endobj 161 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[116 535 0 R 160 0 R]/P 88 0 R/Pg 23 0 R/S/CE0>> endobj 141 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[96 513 0 R 140 0 R]/P 88 0 R/Pg 23 0 R/S/DE0>> endobj 101 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[56 348 0 R 100 0 R]/P 88 0 R/Pg 23 0 R/S/DGND1>> endobj 137 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[92 511 0 R 136 0 R]/P 88 0 R/Pg 23 0 R/S/DGND>> endobj 96 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[51 342 0 R 95 0 R]/P 88 0 R/Pg 23 0 R/S/DVDD>> endobj 215 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[170 707 0 R 214 0 R]/P 88 0 R/Pg 23 0 R/S/ECG>> endobj 182 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[137 623 0 R 181 0 R]/P 88 0 R/Pg 23 0 R/S/ECGN>> endobj 180 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[135 610 0 R 179 0 R]/P 88 0 R/Pg 23 0 R/S/ECGP>> endobj 186 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[141 633 0 R 185 0 R]/P 88 0 R/Pg 23 0 R/S/F+>> endobj 188 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[143 634 0 R 187 0 R]/P 88 0 R/Pg 23 0 R/S/F->> endobj 117 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[72 376 0 R 116 0 R]/P 88 0 R/Pg 23 0 R/S/IOVDD>> endobj 143 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[98 514 0 R 142 0 R]/P 88 0 R/Pg 23 0 R/S/RE0>> endobj 208 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[163 701 0 R 207 0 R]/P 88 0 R/Pg 23 0 R/S/S+>> endobj 210 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[165 702 0 R 209 0 R]/P 88 0 R/Pg 23 0 R/S/S->> endobj 163 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[118 536 0 R 162 0 R]/P 88 0 R/Pg 23 0 R/S/SE0>> endobj 139 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[94 512 0 R 138 0 R]/P 88 0 R/Pg 23 0 R/S/VBIAS>> endobj 159 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[114 534 0 R 158 0 R]/P 88 0 R/Pg 23 0 R/S/VZERO>> endobj 534 0 obj <>]>>/K 308/P 159 0 R/Pg 24 0 R/S/l1_primary>> endobj 158 0 obj <>]>>/K 113/P 159 0 R/Pg 23 0 R/S/silk_prm>> endobj 1723 0 obj (CNKEY5001TP) endobj 1721 0 obj (CNTP1P_TH-RED,E019485,CNKEY5001TP-CNKEY5001TP) endobj 1750 0 obj (\(2435.00, 440.00\), 0.00) endobj 512 0 obj <>]>>/K 286/P 139 0 R/Pg 24 0 R/S/l1_primary>> endobj 138 0 obj <>]>>/K 93/P 139 0 R/Pg 23 0 R/S/silk_prm>> endobj 1749 0 obj (\(2290.00, 440.00\), 0.00) endobj 536 0 obj <>]>>/K 310/P 163 0 R/Pg 24 0 R/S/l1_primary>> endobj 162 0 obj <>]>>/K 117/P 163 0 R/Pg 23 0 R/S/silk_prm>> endobj 1748 0 obj (\(2435.00, 720.00\), 0.00) endobj 702 0 obj <>]>>/K 476/P 210 0 R/Pg 24 0 R/S/l1_primary>> endobj 209 0 obj <>]>>/K 164/P 210 0 R/Pg 23 0 R/S/silk_prm>> endobj 1747 0 obj (\(3245.00, 705.00\), 0.00) endobj 701 0 obj <>]>>/K 475/P 208 0 R/Pg 24 0 R/S/l1_primary>> endobj 207 0 obj <>]>>/K 162/P 208 0 R/Pg 23 0 R/S/silk_prm>> endobj 1746 0 obj (\(3245.00, 570.00\), 0.00) endobj 514 0 obj <>]>>/K 288/P 143 0 R/Pg 24 0 R/S/l1_primary>> endobj 142 0 obj <>]>>/K 97/P 143 0 R/Pg 23 0 R/S/silk_prm>> endobj 1745 0 obj (\(2290.00, 580.00\), 0.00) endobj 376 0 obj <>]>>/K 150/P 117 0 R/Pg 24 0 R/S/l1_primary>> endobj 116 0 obj <>]>>/K 71/P 117 0 R/Pg 23 0 R/S/silk_prm>> endobj 1744 0 obj (\(1190.00, 1240.00\), 0.00) endobj 634 0 obj <>]>>/K 408/P 188 0 R/Pg 24 0 R/S/l1_primary>> endobj 187 0 obj <>]>>/K 142/P 188 0 R/Pg 23 0 R/S/silk_prm>> endobj 1743 0 obj (\(3040.00, 705.00\), 0.00) endobj 633 0 obj <>]>>/K 407/P 186 0 R/Pg 24 0 R/S/l1_primary>> endobj 185 0 obj <>]>>/K 140/P 186 0 R/Pg 23 0 R/S/silk_prm>> endobj 1742 0 obj (\(3040.00, 570.00\), 0.00) endobj 610 0 obj <>]>>/K 384/P 180 0 R/Pg 24 0 R/S/l1_primary>> endobj 179 0 obj <>]>>/K 134/P 180 0 R/Pg 23 0 R/S/silk_prm>> endobj 1741 0 obj (\(2630.00, 980.00\), 90.00) endobj 623 0 obj <>]>>/K 397/P 182 0 R/Pg 24 0 R/S/l1_primary>> endobj 181 0 obj <>]>>/K 136/P 182 0 R/Pg 23 0 R/S/silk_prm>> endobj 1740 0 obj (\(2630.00, 1115.00\), 90.00) endobj 707 0 obj <>]>>/K 481/P 215 0 R/Pg 24 0 R/S/l1_primary>> endobj 214 0 obj <>]>>/K 169/P 215 0 R/Pg 23 0 R/S/silk_prm>> endobj 1739 0 obj (\(3300.00, 1360.00\), 90.00) endobj 342 0 obj <>]>>/K 116/P 96 0 R/Pg 24 0 R/S/l1_primary>> endobj 95 0 obj <>]>>/K 50/P 96 0 R/Pg 23 0 R/S/silk_prm>> endobj 1738 0 obj (\(1015.00, 990.00\), 0.00) endobj 511 0 obj <>]>>/K 285/P 137 0 R/Pg 24 0 R/S/l1_primary>> endobj 136 0 obj <>]>>/K 91/P 137 0 R/Pg 23 0 R/S/silk_prm>> endobj 1724 0 obj (CNTP1P_TH-BLK,E019484,CNKEY5001TP-CNKEY5001TP) endobj 1737 0 obj (\(2270.00, 265.00\), 0.00) endobj 348 0 obj <>]>>/K 122/P 101 0 R/Pg 24 0 R/S/l1_primary>> endobj 100 0 obj <>]>>/K 55/P 101 0 R/Pg 23 0 R/S/silk_prm>> endobj 1736 0 obj (\(830.00, 1285.00\), 0.00) endobj 513 0 obj <>]>>/K 287/P 141 0 R/Pg 24 0 R/S/l1_primary>> endobj 140 0 obj <>]>>/K 95/P 141 0 R/Pg 23 0 R/S/silk_prm>> endobj 1735 0 obj (\(2290.00, 720.00\), 0.00) endobj 535 0 obj <>]>>/K 309/P 161 0 R/Pg 24 0 R/S/l1_primary>> endobj 160 0 obj <>]>>/K 115/P 161 0 R/Pg 23 0 R/S/silk_prm>> endobj 1734 0 obj (\(2435.00, 580.00\), 0.00) endobj 338 0 obj <>]>>/K 112/P 91 0 R/Pg 24 0 R/S/l1_primary>> endobj 90 0 obj <>]>>/K 45/P 91 0 R/Pg 23 0 R/S/silk_prm>> endobj 1732 0 obj (CNTP1P_TH-GRN,E021979,CNKEY5001TP-CNKEY5001TP) endobj 1733 0 obj (\(845.00, 225.00\), 0.00) endobj 522 0 obj <>]>>/K 296/P 147 0 R/Pg 24 0 R/S/l1_primary>> endobj 146 0 obj <>]>>/K 101/P 147 0 R/Pg 23 0 R/S/silk_prm>> endobj 1731 0 obj (\(2290.00, 855.00\), 0.00) endobj 538 0 obj <>]>>/K 312/P 167 0 R/Pg 24 0 R/S/l1_primary>> endobj 166 0 obj <>]>>/K 121/P 167 0 R/Pg 23 0 R/S/silk_prm>> endobj 1730 0 obj (\(2435.00, 855.00\), 0.00) endobj 537 0 obj <>]>>/K 311/P 165 0 R/Pg 24 0 R/S/l1_primary>> endobj 164 0 obj <>]>>/K 119/P 165 0 R/Pg 23 0 R/S/silk_prm>> endobj 1729 0 obj (\(2435.00, 990.00\), 0.00) endobj 521 0 obj <>]>>/K 295/P 145 0 R/Pg 24 0 R/S/l1_primary>> endobj 144 0 obj <>]>>/K 99/P 145 0 R/Pg 23 0 R/S/silk_prm>> endobj 1728 0 obj (\(2290.00, 990.00\), 0.00) endobj 539 0 obj <>]>>/K 313/P 169 0 R/Pg 24 0 R/S/l1_primary>> endobj 168 0 obj <>]>>/K 123/P 169 0 R/Pg 23 0 R/S/silk_prm>> endobj 1727 0 obj (\(2435.00, 1125.00\), 0.00) endobj 337 0 obj <>]>>/K 111/P 89 0 R/Pg 24 0 R/S/l1_primary>> endobj 87 0 obj <>]>>/K 42/P 89 0 R/Pg 23 0 R/S/silk_prm>> endobj 1726 0 obj (\(910.00, 440.00\), 0.00) endobj 550 0 obj <>]>>/K 324/P 175 0 R/Pg 24 0 R/S/l1_primary>> endobj 174 0 obj <>]>>/K 129/P 175 0 R/Pg 23 0 R/S/silk_prm>> endobj 1725 0 obj (\(2675.00, 95.00\), 0.00) endobj 525 0 obj <>]>>/K 299/P 153 0 R/Pg 24 0 R/S/l1_primary>> endobj 152 0 obj <>]>>/K 107/P 153 0 R/Pg 23 0 R/S/silk_prm>> endobj 1722 0 obj (\(2290.00, 1125.00\), 0.00) endobj 70 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[25 257 0 R 69 0 R]/P 67 0 R/Pg 23 0 R/S/JP1>> endobj 68 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[23 254 0 R 66 0 R]/P 67 0 R/Pg 23 0 R/S/JP2>> endobj 115 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[70 375 0 R 114 0 R]/P 67 0 R/Pg 23 0 R/S/JP3>> endobj 375 0 obj <>]>>/K 149/P 115 0 R/Pg 24 0 R/S/l1_primary>> endobj 114 0 obj <>]>>/K 69/P 115 0 R/Pg 23 0 R/S/silk_prm>> endobj 1754 0 obj (61300621121) endobj 1753 0 obj (CNHDR2X3H346) endobj 1751 0 obj (CN6P_JMPRSHRT_TH-61300621121,E026603,CNHDR2X3H346-CNHDR2X3H346) endobj 1756 0 obj (\(1340.00, 1290.00\), 0.00) endobj 254 0 obj <>]>>/K 28/P 68 0 R/Pg 24 0 R/S/l1_primary>> endobj 66 0 obj <>]>>/K 21/P 68 0 R/Pg 23 0 R/S/silk_prm>> endobj 1755 0 obj (\(515.00, 415.00\), 180.00) endobj 257 0 obj <>]>>/K 31/P 70 0 R/Pg 24 0 R/S/l1_primary>> endobj 69 0 obj <>]>>/K 24/P 70 0 R/Pg 23 0 R/S/silk_prm>> endobj 1752 0 obj (\(515.00, 780.00\), 180.00) endobj 213 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[168 704 0 R 211 0 R]/P 212 0 R/Pg 23 0 R/S/JP7>> endobj 704 0 obj <>]>>/K 478/P 213 0 R/Pg 24 0 R/S/l1_primary>> endobj 211 0 obj <>]>>/K 166/P 213 0 R/Pg 23 0 R/S/silk_prm>> endobj 1760 0 obj (TMM-103-01-L-D-SM) endobj 1759 0 obj (CNHDR2X3H235) endobj 1757 0 obj (CN6P_JMPRSHRT_SM-TMM-103-01-L-D-SM,E018034,CNHDR2X3H235-CNHDR2X3H235) endobj 1758 0 obj (\(3420.00, 1130.00\), 180.00) endobj 219 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[174 711 0 R 218 0 R]/P 119 0 R/Pg 23 0 R/S/P10>> endobj 173 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[128 547 0 R 172 0 R]/P 119 0 R/Pg 23 0 R/S/P13>> endobj 203 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[158 695 0 R 202 0 R]/P 119 0 R/Pg 23 0 R/S/P14>> endobj 120 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[75 379 0 R 118 0 R]/P 119 0 R/Pg 23 0 R/S/P15>> endobj 171 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[126 544 0 R 170 0 R]/P 119 0 R/Pg 23 0 R/S/P16>> endobj 184 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[139 630 0 R 183 0 R]/P 119 0 R/Pg 23 0 R/S/P17>> endobj 201 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[156 686 0 R 200 0 R]/P 119 0 R/Pg 23 0 R/S/P18>> endobj 199 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[154 685 0 R 198 0 R]/P 119 0 R/Pg 23 0 R/S/P19>> endobj 217 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[172 710 0 R 216 0 R]/P 119 0 R/Pg 23 0 R/S/P7>> endobj 122 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[77 411 0 R 121 0 R]/P 119 0 R/Pg 23 0 R/S/P9>> endobj 411 0 obj <>]>>/K 185/P 122 0 R/Pg 24 0 R/S/l1_primary>> endobj 121 0 obj <>]>>/K 76/P 122 0 R/Pg 23 0 R/S/silk_prm>> endobj 1764 0 obj (M22F2010305) endobj 1763 0 obj (CNHDR1X3H207) endobj 1761 0 obj (CN3P_TH-M22F2010305,E017879,CNHDR1X3H207-CNHDR1X3H207) endobj 1773 0 obj (\(1490.00, 1693.74\), 270.00) endobj 710 0 obj <>]>>/K 484/P 217 0 R/Pg 24 0 R/S/l1_primary>> endobj 216 0 obj <>]>>/K 171/P 217 0 R/Pg 23 0 R/S/silk_prm>> endobj 1772 0 obj (\(3300.00, 1717.48\), 270.00) endobj 685 0 obj <>]>>/K 459/P 199 0 R/Pg 24 0 R/S/l1_primary>> endobj 198 0 obj <>]>>/K 153/P 199 0 R/Pg 23 0 R/S/silk_prm>> endobj 1771 0 obj (\(3120.00, 1717.48\), 270.00) endobj 686 0 obj <>]>>/K 460/P 201 0 R/Pg 24 0 R/S/l1_primary>> endobj 200 0 obj <>]>>/K 155/P 201 0 R/Pg 23 0 R/S/silk_prm>> endobj 1770 0 obj (\(2940.00, 1717.48\), 270.00) endobj 630 0 obj <>]>>/K 404/P 184 0 R/Pg 24 0 R/S/l1_primary>> endobj 183 0 obj <>]>>/K 138/P 184 0 R/Pg 23 0 R/S/silk_prm>> endobj 1769 0 obj (\(2770.00, 1717.48\), 270.00) endobj 544 0 obj <>]>>/K 318/P 171 0 R/Pg 24 0 R/S/l1_primary>> endobj 170 0 obj <>]>>/K 125/P 171 0 R/Pg 23 0 R/S/silk_prm>> endobj 1768 0 obj (\(2600.00, 1717.48\), 270.00) endobj 379 0 obj <>]>>/K 153/P 120 0 R/Pg 24 0 R/S/l1_primary>> endobj 118 0 obj <>]>>/K 73/P 120 0 R/Pg 23 0 R/S/silk_prm>> endobj 1767 0 obj (\(1335.00, 1695.00\), 270.00) endobj 695 0 obj <>]>>/K 469/P 203 0 R/Pg 24 0 R/S/l1_primary>> endobj 202 0 obj <>]>>/K 157/P 203 0 R/Pg 23 0 R/S/silk_prm>> endobj 1766 0 obj (\(3325.00, 390.00\), 0.00) endobj 547 0 obj <>]>>/K 321/P 173 0 R/Pg 24 0 R/S/l1_primary>> endobj 172 0 obj <>]>>/K 127/P 173 0 R/Pg 23 0 R/S/silk_prm>> endobj 1765 0 obj (\(2420.00, 1717.48\), 270.00) endobj 711 0 obj <>]>>/K 485/P 219 0 R/Pg 24 0 R/S/l1_primary>> endobj 218 0 obj <>]>>/K 173/P 219 0 R/Pg 23 0 R/S/silk_prm>> endobj 1762 0 obj (\(3440.00, 1560.00\), 90.00) endobj 111 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[66 365 0 R 110 0 R]/P 93 0 R/Pg 23 0 R/S/P12>> endobj 194 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[149 703 0 R 193 0 R]/P 93 0 R/Pg 23 0 R/S/P20>> endobj 94 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[49 339 0 R 92 0 R]/P 93 0 R/Pg 23 0 R/S/P5>> endobj 339 0 obj <>]>>/K 113/P 94 0 R/Pg 24 0 R/S/l1_primary>> endobj 92 0 obj <>]>>/K 47/P 94 0 R/Pg 23 0 R/S/silk_prm>> endobj 1777 0 obj (M22-2010205) endobj 1776 0 obj (CNHDR1X2H207) endobj 1774 0 obj (CN2P_TH-M22-2010205,E023091,CNHDR1X2H207-CNHDR1X2H207) endobj 1779 0 obj (\(865.05, 975.63\), 90.00) endobj 703 0 obj <>]>>/K 477/P 194 0 R/Pg 24 0 R/S/l1_primary>> endobj 193 0 obj <>]>>/K 148/P 194 0 R/Pg 23 0 R/S/silk_prm>> endobj 1778 0 obj (\(3204.95, 1075.00\), 270.00) endobj 365 0 obj <>]>>/K 139/P 111 0 R/Pg 24 0 R/S/l1_primary>> endobj 110 0 obj <>]>>/K 65/P 111 0 R/Pg 23 0 R/S/silk_prm>> endobj 1775 0 obj (\(1185.05, 730.63\), 90.00) endobj 155 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[110 526 0 R 154 0 R]/P 79 0 R/Pg 23 0 R/S/GP0>> endobj 149 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[104 523 0 R 148 0 R]/P 79 0 R/Pg 23 0 R/S/GP1>> endobj 157 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[112 529 0 R 156 0 R]/P 79 0 R/Pg 23 0 R/S/GP2>> endobj 151 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[106 524 0 R 150 0 R]/P 79 0 R/Pg 23 0 R/S/GP3>> endobj 133 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[88 503 0 R 132 0 R]/P 79 0 R/Pg 23 0 R/S/GP4>> endobj 129 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[84 501 0 R 128 0 R]/P 79 0 R/Pg 23 0 R/S/GP5>> endobj 135 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[90 506 0 R 134 0 R]/P 79 0 R/Pg 23 0 R/S/GP6>> endobj 131 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[86 502 0 R 130 0 R]/P 79 0 R/Pg 23 0 R/S/GP7>> endobj 113 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[68 374 0 R 112 0 R]/P 79 0 R/Pg 23 0 R/S/JP13>> endobj 80 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[35 328 0 R 78 0 R]/P 79 0 R/Pg 23 0 R/S/JP8>> endobj 328 0 obj <>]>>/K 102/P 80 0 R/Pg 24 0 R/S/l1_primary>> endobj 78 0 obj <>]>>/K 33/P 80 0 R/Pg 23 0 R/S/silk_prm>> endobj 1783 0 obj (M20-9990245) endobj 1782 0 obj (CNHARWIN-M20-9990246) endobj 1793 0 obj (CNJMPRSHRT_TH-M20-9990245,E019487,CNHARWIN-M20-9990246-CNHARWIN-M20-9990246) endobj 1794 0 obj (\(565.00, 1640.00\), 0.00) endobj 374 0 obj <>]>>/K 148/P 113 0 R/Pg 24 0 R/S/l1_primary>> endobj 112 0 obj <>]>>/K 67/P 113 0 R/Pg 23 0 R/S/silk_prm>> endobj 1791 0 obj (CNJMPRSHRT_TH-M20-9990245,E019487,CNHARWIN-M20-9990246-\(\),CNHARWIN-M20-9990246) endobj 1792 0 obj (\(1190.00, 1090.00\), 270.00) endobj 502 0 obj <>]>>/K 276/P 131 0 R/Pg 24 0 R/S/l1_primary>> endobj 130 0 obj <>]>>/K 85/P 131 0 R/Pg 23 0 R/S/silk_prm>> endobj 1780 0 obj (CN2P_TH-M20-9990245,E019487,CNHARWIN-M20-9990246-CNHARWIN-M20-9990246) endobj 1790 0 obj (\(1740.00, 1290.00\), 90.00) endobj 506 0 obj <>]>>/K 280/P 135 0 R/Pg 24 0 R/S/l1_primary>> endobj 134 0 obj <>]>>/K 89/P 135 0 R/Pg 23 0 R/S/silk_prm>> endobj 1789 0 obj (\(1740.00, 1590.00\), 90.00) endobj 501 0 obj <>]>>/K 275/P 129 0 R/Pg 24 0 R/S/l1_primary>> endobj 128 0 obj <>]>>/K 83/P 129 0 R/Pg 23 0 R/S/silk_prm>> endobj 1788 0 obj (\(1915.00, 1290.00\), 90.00) endobj 503 0 obj <>]>>/K 277/P 133 0 R/Pg 24 0 R/S/l1_primary>> endobj 132 0 obj <>]>>/K 87/P 133 0 R/Pg 23 0 R/S/silk_prm>> endobj 1787 0 obj (\(1915.00, 1590.00\), 90.00) endobj 524 0 obj <>]>>/K 298/P 151 0 R/Pg 24 0 R/S/l1_primary>> endobj 150 0 obj <>]>>/K 105/P 151 0 R/Pg 23 0 R/S/silk_prm>> endobj 1786 0 obj (\(2090.00, 1290.00\), 90.00) endobj 529 0 obj <>]>>/K 303/P 157 0 R/Pg 24 0 R/S/l1_primary>> endobj 156 0 obj <>]>>/K 111/P 157 0 R/Pg 23 0 R/S/silk_prm>> endobj 1785 0 obj (\(2090.00, 1590.00\), 90.00) endobj 523 0 obj <>]>>/K 297/P 149 0 R/Pg 24 0 R/S/l1_primary>> endobj 148 0 obj <>]>>/K 103/P 149 0 R/Pg 23 0 R/S/silk_prm>> endobj 1784 0 obj (\(2265.00, 1290.00\), 90.00) endobj 526 0 obj <>]>>/K 300/P 155 0 R/Pg 24 0 R/S/l1_primary>> endobj 154 0 obj <>]>>/K 109/P 155 0 R/Pg 23 0 R/S/silk_prm>> endobj 1781 0 obj (\(2265.00, 1590.00\), 90.00) endobj 922 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[40 921 0 R]/P 244 0 R/Pg 27 0 R/S/C11>> endobj 920 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[38 919 0 R]/P 244 0 R/Pg 27 0 R/S/C12>> endobj 269 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[43 268 0 R]/P 244 0 R/Pg 24 0 R/S/C13>> endobj 323 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[97 322 0 R]/P 244 0 R/Pg 24 0 R/S/C14>> endobj 288 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[62 287 0 R]/P 244 0 R/Pg 24 0 R/S/C16>> endobj 932 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[50 931 0 R]/P 244 0 R/Pg 27 0 R/S/C19>> endobj 591 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[365 590 0 R]/P 244 0 R/Pg 24 0 R/S/C1>> endobj 321 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[95 320 0 R]/P 244 0 R/Pg 24 0 R/S/C20>> endobj 427 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[201 426 0 R]/P 244 0 R/Pg 24 0 R/S/C21>> endobj 520 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[294 519 0 R]/P 244 0 R/Pg 24 0 R/S/C22>> endobj 400 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[174 399 0 R]/P 244 0 R/Pg 24 0 R/S/C23>> endobj 918 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[36 917 0 R]/P 244 0 R/Pg 27 0 R/S/C25>> endobj 500 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[274 499 0 R]/P 244 0 R/Pg 24 0 R/S/C26>> endobj 245 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[19 243 0 R]/P 244 0 R/Pg 24 0 R/S/C27>> endobj 930 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[48 929 0 R]/P 244 0 R/Pg 27 0 R/S/C28>> endobj 271 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[45 270 0 R]/P 244 0 R/Pg 24 0 R/S/C29>> endobj 373 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[147 372 0 R]/P 244 0 R/Pg 24 0 R/S/C31>> endobj 404 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[178 403 0 R]/P 244 0 R/Pg 24 0 R/S/C32>> endobj 402 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[176 401 0 R]/P 244 0 R/Pg 24 0 R/S/C33>> endobj 395 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[169 394 0 R]/P 244 0 R/Pg 24 0 R/S/C34>> endobj 308 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[82 307 0 R]/P 244 0 R/Pg 24 0 R/S/C35>> endobj 261 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[35 260 0 R]/P 244 0 R/Pg 24 0 R/S/C37>> endobj 573 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[347 572 0 R]/P 244 0 R/Pg 24 0 R/S/C38>> endobj 597 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[371 596 0 R]/P 244 0 R/Pg 24 0 R/S/C39>> endobj 571 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[345 570 0 R]/P 244 0 R/Pg 24 0 R/S/C5>> endobj 552 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[326 551 0 R]/P 244 0 R/Pg 24 0 R/S/C68>> endobj 612 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[386 611 0 R]/P 244 0 R/Pg 24 0 R/S/C6>> endobj 593 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[367 592 0 R]/P 244 0 R/Pg 24 0 R/S/C7>> endobj 688 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[462 687 0 R]/P 244 0 R/Pg 24 0 R/S/C8>> endobj 667 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[441 666 0 R]/P 244 0 R/Pg 24 0 R/S/C9>> endobj 949 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[67 948 0 R]/P 244 0 R/Pg 27 0 R/S/CHSTIA>> endobj 518 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[292 517 0 R]/P 244 0 R/Pg 24 0 R/S/CLPF>> endobj 429 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[203 428 0 R]/P 244 0 R/Pg 24 0 R/S/CTIA>> endobj 428 0 obj <>]>>/K 202/P 429 0 R/Pg 24 0 R/S/l1_primary>> endobj 1843 0 obj (CAP_SM-220PF,50V,5,E000417,C0603-C0603) endobj 1844 0 obj (\(1895.00, 600.00\), 0.00) endobj 517 0 obj <>]>>/K 291/P 518 0 R/Pg 24 0 R/S/l1_primary>> endobj 1836 0 obj (CAP_SM-4700PF,50V,1,E032601,C0603-C0603) endobj 1842 0 obj (\(2153.00, 855.00\), 180.00) endobj 948 0 obj <>]>>/K 66/P 949 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1840 0 obj (CAP_SM-47PF,100V,5,E007959,C0603-C0603) endobj 1841 0 obj (\(2140.00, 910.00\), 90.00) endobj 666 0 obj <>]>>/K 440/P 667 0 R/Pg 24 0 R/S/l1_primary>> endobj 1838 0 obj (CAP_SM-6800PF,25V,1,E030552,C0603-C0603) endobj 1839 0 obj (\(3080.00, 1290.00\), 270.00) endobj 687 0 obj <>]>>/K 461/P 688 0 R/Pg 24 0 R/S/l1_primary>> endobj 1837 0 obj (\(3050.00, 1445.00\), 0.00) endobj 592 0 obj <>]>>/K 366/P 593 0 R/Pg 24 0 R/S/l1_primary>> endobj 1834 0 obj (CAP_SM-4.7UF,10V,10,E030749,C0603-C0603) endobj 1835 0 obj (\(2895.00, 1010.00\), 180.00) endobj 611 0 obj <>]>>/K 385/P 612 0 R/Pg 24 0 R/S/l1_primary>> endobj 1832 0 obj (CAP_SM-0.001UF,50V,5,E007908,C0603-C0603) endobj 1833 0 obj (\(2740.00, 1260.00\), 0.00) endobj 551 0 obj <>]>>/K 325/P 552 0 R/Pg 24 0 R/S/l1_primary>> endobj 1830 0 obj (CAP_SM-0.015UF,25V,5,E023542,C0603-C0603) endobj 1831 0 obj (\(2865.00, 440.00\), 270.00) endobj 570 0 obj <>]>>/K 344/P 571 0 R/Pg 24 0 R/S/l1_primary>> endobj 1807 0 obj (CAP_SM-0.47UF,25V,10,E028775,C0603-C0603) endobj 1829 0 obj (\(2763.00, 480.00\), 180.00) endobj 596 0 obj <>]>>/K 370/P 597 0 R/Pg 24 0 R/S/l1_primary>> endobj 1827 0 obj (CAP_SM-470PF,25V,5,E017265,C0603-C0603) endobj 1828 0 obj (\(2740.00, 1065.00\), 90.00) endobj 572 0 obj <>]>>/K 346/P 573 0 R/Pg 24 0 R/S/l1_primary>> endobj 1826 0 obj (\(2765.00, 610.00\), 180.00) endobj 260 0 obj <>]>>/K 34/P 261 0 R/Pg 24 0 R/S/l1_primary>> endobj 1799 0 obj (CAP_SM-10UF,10V,20,E022682,C0603-C0603) endobj 1825 0 obj (\(443.50, 1053.50\), 180.00) endobj 307 0 obj <>]>>/K 81/P 308 0 R/Pg 24 0 R/S/l1_primary>> endobj 1824 0 obj (\(605.00, 1005.00\), 0.00) endobj 394 0 obj <>]>>/K 168/P 395 0 R/Pg 24 0 R/S/l1_primary>> endobj 1821 0 obj (CAP_SM-6.8PF,50V,5,E000408,C0603-C0603) endobj 1823 0 obj (\(1565.00, 740.00\), 270.00) endobj 401 0 obj <>]>>/K 175/P 402 0 R/Pg 24 0 R/S/l1_primary>> endobj 1822 0 obj (\(1565.00, 865.00\), 90.00) endobj 403 0 obj <>]>>/K 177/P 404 0 R/Pg 24 0 R/S/l1_primary>> endobj 1805 0 obj (CAP_SM-0.1UF,50V,5,E031299,C0603-C0603) endobj 1820 0 obj (\(1660.00, 990.00\), 180.00) endobj 372 0 obj <>]>>/K 146/P 373 0 R/Pg 24 0 R/S/l1_primary>> endobj 1803 0 obj (CAP_SM-10UF,35V,20,E026762,C0603-C0603) endobj 1819 0 obj (\(1290.00, 1040.00\), 270.00) endobj 270 0 obj <>]>>/K 44/P 271 0 R/Pg 24 0 R/S/l1_primary>> endobj 1818 0 obj (\(297.47, 1226.64\), 90.00) endobj 929 0 obj <>]>>/K 47/P 930 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1817 0 obj (\(1745.00, 960.00\), 90.00) endobj 243 0 obj <>]>>/K 17/P 245 0 R/Pg 24 0 R/S/l1_primary>> endobj 1816 0 obj (\(195.86, 1364.19\), 180.00) endobj 499 0 obj <>]>>/K 273/P 500 0 R/Pg 24 0 R/S/l1_primary>> endobj 1815 0 obj (\(1955.00, 1065.00\), 180.00) endobj 917 0 obj <>]>>/K 35/P 918 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1814 0 obj (\(1835.00, 655.00\), 90.00) endobj 399 0 obj <>]>>/K 173/P 400 0 R/Pg 24 0 R/S/l1_primary>> endobj 1813 0 obj (\(1660.00, 915.00\), 0.00) endobj 519 0 obj <>]>>/K 293/P 520 0 R/Pg 24 0 R/S/l1_primary>> endobj 1811 0 obj (CAP_SM-4.7UF,6.3V,10,E010382,C0603-C0603) endobj 1812 0 obj (\(2040.00, 795.00\), 180.00) endobj 426 0 obj <>]>>/K 200/P 427 0 R/Pg 24 0 R/S/l1_primary>> endobj 1810 0 obj (\(1800.00, 630.00\), 90.00) endobj 320 0 obj <>]>>/K 94/P 321 0 R/Pg 24 0 R/S/l1_primary>> endobj 1801 0 obj (CAP_SM-1UF,16V,10,E020596,C0603-C0603) endobj 1809 0 obj (\(583.00, 1355.00\), 90.00) endobj 590 0 obj <>]>>/K 364/P 591 0 R/Pg 24 0 R/S/l1_primary>> endobj 1808 0 obj (\(2840.00, 820.00\), 180.00) endobj 931 0 obj <>]>>/K 49/P 932 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1806 0 obj (\(1805.00, 960.00\), 90.00) endobj 287 0 obj <>]>>/K 61/P 288 0 R/Pg 24 0 R/S/l1_primary>> endobj 1804 0 obj (\(745.00, 140.00\), 270.00) endobj 322 0 obj <>]>>/K 96/P 323 0 R/Pg 24 0 R/S/l1_primary>> endobj 1802 0 obj (\(700.00, 1085.00\), 90.00) endobj 268 0 obj <>]>>/K 42/P 269 0 R/Pg 24 0 R/S/l1_primary>> endobj 1800 0 obj (\(475.00, 1210.00\), 270.00) endobj 919 0 obj <>]>>/K 37/P 920 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1797 0 obj (CAP_SM-1UF,25V,10,E026591,C0603-C0603) endobj 1798 0 obj (\(1955.00, 655.00\), 270.00) endobj 921 0 obj <>]>>/K 39/P 922 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1795 0 obj (CAP_SM-0.1UF,25V,10,E007204,C0603-C0603) endobj 1796 0 obj (\(1895.00, 655.00\), 270.00) endobj 274 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[48 272 0 R]/P 273 0 R/Pg 24 0 R/S/C10>> endobj 599 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[373 598 0 R]/P 273 0 R/Pg 24 0 R/S/C15>> endobj 516 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[290 515 0 R]/P 273 0 R/Pg 24 0 R/S/C17>> endobj 281 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[55 280 0 R]/P 273 0 R/Pg 24 0 R/S/C18>> endobj 934 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[52 933 0 R]/P 273 0 R/Pg 27 0 R/S/C24>> endobj 618 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[392 617 0 R]/P 273 0 R/Pg 24 0 R/S/C2>> endobj 926 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[44 925 0 R]/P 273 0 R/Pg 27 0 R/S/C30>> endobj 706 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[480 705 0 R]/P 273 0 R/Pg 24 0 R/S/C36>> endobj 705 0 obj <>]>>/K 479/P 706 0 R/Pg 24 0 R/S/l1_primary>> endobj 1847 0 obj (CAP_SM-TBD0402,TBD0402,TBD0402,E000381,C0402-C0402) endobj 1855 0 obj (\(3255.00, 1185.00\), 90.00) endobj 925 0 obj <>]>>/K 43/P 926 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1845 0 obj (CAP_SM-0.1UF,10V,10,E016510,C0402-C0402) endobj 1854 0 obj (\(1735.00, 870.00\), 360.00) endobj 617 0 obj <>]>>/K 391/P 618 0 R/Pg 24 0 R/S/l1_primary>> endobj 1853 0 obj (\(2790.00, 1105.00\), 90.00) endobj 933 0 obj <>]>>/K 51/P 934 0 R/Pg 27 0 R/S/l4_secondary>> endobj 1851 0 obj (CAP_SM-0.1UF,16V,10,E018707,C0402-\(\),C0402) endobj 1852 0 obj (\(1960.00, 825.00\), 360.00) endobj 280 0 obj <>]>>/K 54/P 281 0 R/Pg 24 0 R/S/l1_primary>> endobj 1850 0 obj (\(275.00, 1830.00\), 270.00) endobj 515 0 obj <>]>>/K 289/P 516 0 R/Pg 24 0 R/S/l1_primary>> endobj 1849 0 obj (\(2030.00, 855.00\), 0.00) endobj 598 0 obj <>]>>/K 372/P 599 0 R/Pg 24 0 R/S/l1_primary>> endobj 1848 0 obj (\(2790.00, 1030.00\), 270.00) endobj 272 0 obj <>]>>/K 46/P 274 0 R/Pg 24 0 R/S/l1_primary>> endobj 1846 0 obj (\(265.00, 1560.00\), 270.00) endobj 192 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[147 638 0 R 191 0 R]/P 177 0 R/Pg 23 0 R/S/C3>> endobj 190 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[145 635 0 R 189 0 R]/P 177 0 R/Pg 23 0 R/S/C4>> endobj 178 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[133 565 0 R 176 0 R]/P 177 0 R/Pg 23 0 R/S/C66>> endobj 565 0 obj <>]>>/K 339/P 178 0 R/Pg 24 0 R/S/l1_primary>> endobj 176 0 obj <>]>>/K 131/P 178 0 R/Pg 23 0 R/S/silk_prm>> endobj 1859 0 obj (CAP_SM-0.47UF,6.3V,20,E024105,C0201-C0201) endobj 1860 0 obj (\(2735.00, 680.00\), 180.00) endobj 635 0 obj <>]>>/K 409/P 190 0 R/Pg 24 0 R/S/l1_primary>> endobj 189 0 obj <>]>>/K 144/P 190 0 R/Pg 23 0 R/S/silk_prm>> endobj 1856 0 obj (CAP_SM-0.1UF,10V,10,E022722,C0201-C0201) endobj 1858 0 obj (\(3115.00, 1005.00\), 0.00) endobj 638 0 obj <>]>>/K 412/P 192 0 R/Pg 24 0 R/S/l1_primary>> endobj 191 0 obj <>]>>/K 146/P 192 0 R/Pg 23 0 R/S/silk_prm>> endobj 1857 0 obj (\(3045.00, 945.00\), 270.00) endobj 1011 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[4 1009 0 R]/P 1010 0 R/Pg 28 0 R/S/Mechaincal>> endobj 1009 0 obj <>]>>/K 2/P 1011 0 R/Pg 28 0 R/S/silk_sec>> endobj 1863 0 obj (ADILOGOTAG_800X320) endobj 1862 0 obj (Mechaincal) endobj 1861 0 obj (\(339.66, 1396.65\), 360.00) endobj 57 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[12 1322 0 R 56 0 R]/P 54 0 R/Pg 23 0 R/S/R29>> endobj 55 0 obj <>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>><>]>>]/K[10 1321 0 R 53 0 R]/P 54 0 R/Pg 23 0 R/S/R31>> endobj 53 0 obj <>]>>/K 8/P 55 0 R/Pg 23 0 R/S/silk_prm>> endobj 1576 0 obj (R0805_R0603_TH200LD25) endobj 1573 0 obj (R0805_0603_TH200LD25) endobj 1567 0 obj (RES_TH-R0805_R0603_TH200LD25,E028311,N/A,N/A,R0805_0603_TH200LD25-R0805_0603_TH200LD25) endobj 1865 0 obj (\(290.00, 1000.00\), 180.00) endobj 56 0 obj <>]>>/K 11/P 57 0 R/Pg 23 0 R/S/silk_prm>> endobj 1864 0 obj (\(-10.00, 1175.00\), 270.00) endobj 61 0 obj <>]>>/K 16/P 62 0 R/Pg 23 0 R/S/silk_prm>> endobj 1570 0 obj (\(289.50, 1090.72\), 180.00) endobj 37 0 obj <>]>>/K 2/P 33 0 R/Pg 23 0 R/S/Test#20Point>> endobj 22 0 obj <> endobj 1866 0 obj <> endobj 1867 0 obj <> endobj 1870 0 obj <> endobj 1871 0 obj <> endobj 1872 0 obj <> endobj 1873 0 obj <> endobj 1874 0 obj <> endobj 1875 0 obj <> endobj 1876 0 obj <> endobj 1877 0 obj <> endobj 1878 0 obj <> endobj 1879 0 obj <> endobj 1880 0 obj <> endobj 1881 0 obj <> endobj 1882 0 obj <> endobj 1883 0 obj <> endobj 1884 0 obj <> endobj 1869 0 obj <> endobj 1885 0 obj <> endobj 1868 0 obj <> endobj 10 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 21 0 obj <> endobj 1886 0 obj <> endobj 1887 0 obj (function F\(n\){app.popUpMenu\(n\);}) endobj 4 0 obj <> endobj xref +0 1888 +0000000000 65535 f +0000000016 00000 n +0000000471 00000 n +0000003997 00000 n +0001193290 00000 n +0000003890 00000 n +0000027407 00000 n +0000027473 00000 n +0000246294 00000 n +0000027534 00000 n +0001192763 00000 n +0000027586 00000 n +0001192823 00000 n +0001192884 00000 n +0001192947 00000 n +0001193010 00000 n +0001193075 00000 n +0000027639 00000 n +0000246352 00000 n +0000003928 00000 n +0000004113 00000 n +0001193136 00000 n +0001191337 00000 n +0000246769 00000 n +0000030496 00000 n +0000767393 00000 n +0000646300 00000 n +0000555959 00000 n +0001001955 00000 n +0000400590 00000 n +0000513059 00000 n +0000322319 00000 n +0000017327 00000 n +0000004202 00000 n +0000004260 00000 n +0000989870 00000 n +0000029414 00000 n +0001191239 00000 n +0000004377 00000 n +0000005788 00000 n +0000009694 00000 n +0000010392 00000 n +0000011090 00000 n +0000012115 00000 n +0000012178 00000 n +0000013276 00000 n +0000014032 00000 n +0000015040 00000 n +0001102916 00000 n +0000992447 00000 n +0001102221 00000 n +0001103298 00000 n +0001101621 00000 n +0001190621 00000 n +0000989742 00000 n +0001190013 00000 n +0001190953 00000 n +0001189405 00000 n +0000998215 00000 n +0000994046 00000 n +0000997520 00000 n +0001191096 00000 n +0000989134 00000 n +0001000773 00000 n +0000993923 00000 n +0000999071 00000 n +0001132819 00000 n +0000991545 00000 n +0001131125 00000 n +0001133059 00000 n +0001130524 00000 n +0001001012 00000 n +0000998463 00000 n +0001000383 00000 n +0000999677 00000 n +0001101302 00000 n +0000992561 00000 n +0001100606 00000 n +0001151669 00000 n +0000990944 00000 n +0001150969 00000 n +0001104135 00000 n +0000992330 00000 n +0001103437 00000 n +0001106177 00000 n +0000992205 00000 n +0001104455 00000 n +0001129896 00000 n +0000991667 00000 n +0001109549 00000 n +0001128371 00000 n +0001113158 00000 n +0001144765 00000 n +0000991131 00000 n +0001144067 00000 n +0001127092 00000 n +0001116160 00000 n +0001098291 00000 n +0000992883 00000 n +0001097593 00000 n +0001127642 00000 n +0001114956 00000 n +0001054344 00000 n +0000993718 00000 n +0001053647 00000 n +0001098642 00000 n +0001096992 00000 n +0000995172 00000 n +0000994359 00000 n +0000994469 00000 n +0001145392 00000 n +0001142860 00000 n +0001152079 00000 n +0001150364 00000 n +0001132429 00000 n +0001131726 00000 n +0001125624 00000 n +0001119759 00000 n +0001141977 00000 n +0000991254 00000 n +0001136028 00000 n +0001140357 00000 n +0001139655 00000 n +0001105755 00000 n +0001105054 00000 n +0001107020 00000 n +0000992086 00000 n +0001106318 00000 n +0001153006 00000 n +0001148555 00000 n +0001152426 00000 n +0001149761 00000 n +0001153251 00000 n +0001147952 00000 n +0001152761 00000 n +0001149158 00000 n +0001127333 00000 n +0001115559 00000 n +0001124406 00000 n +0001122757 00000 n +0001127885 00000 n +0001114357 00000 n +0001125381 00000 n +0001120362 00000 n +0001129409 00000 n +0001110750 00000 n +0001128677 00000 n +0001112556 00000 n +0001153988 00000 n +0001146140 00000 n +0001153496 00000 n +0001147348 00000 n +0001130379 00000 n +0001108343 00000 n +0001154234 00000 n +0001145536 00000 n +0001153742 00000 n +0001146744 00000 n +0001124064 00000 n +0001123360 00000 n +0001128128 00000 n +0001113757 00000 n +0001124649 00000 n +0001122157 00000 n +0001129165 00000 n +0001111352 00000 n +0001128921 00000 n +0001111954 00000 n +0001129652 00000 n +0001110148 00000 n +0001141730 00000 n +0001136632 00000 n +0001142467 00000 n +0001134818 00000 n +0001130136 00000 n +0001108945 00000 n +0001188015 00000 n +0000990309 00000 n +0001187309 00000 n +0001126356 00000 n +0001117961 00000 n +0001126601 00000 n +0001117359 00000 n +0001141483 00000 n +0001137237 00000 n +0001126112 00000 n +0001118563 00000 n +0001125868 00000 n +0001119161 00000 n +0001188323 00000 n +0001186706 00000 n +0001188628 00000 n +0001186103 00000 n +0001145145 00000 n +0001143463 00000 n +0001096784 00000 n +0000992993 00000 n +0001096079 00000 n +0001140989 00000 n +0001138447 00000 n +0001141236 00000 n +0001137842 00000 n +0001142223 00000 n +0001135423 00000 n +0001108041 00000 n +0000991971 00000 n +0001107338 00000 n +0001125137 00000 n +0001120961 00000 n +0001124893 00000 n +0001121559 00000 n +0001133906 00000 n +0000991435 00000 n +0001133201 00000 n +0001126847 00000 n +0001116759 00000 n +0001140742 00000 n +0001139052 00000 n +0001142714 00000 n +0001134213 00000 n +0000996371 00000 n +0000994254 00000 n +0000995670 00000 n +0000997279 00000 n +0000994147 00000 n +0000996578 00000 n +0001102819 00000 n +0001103201 00000 n +0000966814 00000 n +0000302674 00000 n +0000981964 00000 n +0000297885 00000 n +0000962352 00000 n +0000304116 00000 n +0000961742 00000 n +0000304326 00000 n +0000948949 00000 n +0000308329 00000 n +0000998117 00000 n +0000923832 00000 n +0000318609 00000 n +0000951452 00000 n +0000307482 00000 n +0001177632 00000 n +0000990586 00000 n +0001162127 00000 n +0001095932 00000 n +0000993096 00000 n +0001080836 00000 n +0000959623 00000 n +0000304957 00000 n +0000952195 00000 n +0000307268 00000 n +0001000675 00000 n +0001132721 00000 n +0000921571 00000 n +0000319483 00000 n +0001132961 00000 n +0000922332 00000 n +0000319243 00000 n +0001176218 00000 n +0001166891 00000 n +0000924588 00000 n +0000318405 00000 n +0000949989 00000 n +0000307919 00000 n +0000986626 00000 n +0000296408 00000 n +0001179370 00000 n +0001155570 00000 n +0001177338 00000 n +0001163317 00000 n +0001185956 00000 n +0000990428 00000 n +0001179933 00000 n +0000945251 00000 n +0000309876 00000 n +0001095286 00000 n +0001083212 00000 n +0001000914 00000 n +0001185514 00000 n +0001181730 00000 n +0000943851 00000 n +0000310312 00000 n +0001095140 00000 n +0001083805 00000 n +0001000285 00000 n +0001179078 00000 n +0001156759 00000 n +0001079272 00000 n +0000993352 00000 n +0001059338 00000 n +0000921199 00000 n +0000319723 00000 n +0001100348 00000 n +0000992678 00000 n +0001099752 00000 n +0000987372 00000 n +0000296187 00000 n +0000976743 00000 n +0000299578 00000 n +0001079069 00000 n +0001059931 00000 n +0000965737 00000 n +0000303033 00000 n +0000925711 00000 n +0000317791 00000 n +0001176424 00000 n +0001166296 00000 n +0000949660 00000 n +0000308141 00000 n +0001080692 00000 n +0001054584 00000 n +0000924961 00000 n +0000318202 00000 n +0001101204 00000 n +0000950735 00000 n +0000307703 00000 n +0000925334 00000 n +0000317994 00000 n +0001178578 00000 n +0001158545 00000 n +0001179224 00000 n +0001156165 00000 n +0001095579 00000 n +0001082025 00000 n +0001094488 00000 n +0001086185 00000 n +0001151570 00000 n +0000934962 00000 n +0000313523 00000 n +0001104036 00000 n +0000954242 00000 n +0000306622 00000 n +0000953525 00000 n +0000306841 00000 n +0001106078 00000 n +0001129797 00000 n +0001128272 00000 n +0001144666 00000 n +0000931258 00000 n +0000315189 00000 n +0001126993 00000 n +0001092710 00000 n +0001092120 00000 n +0000927941 00000 n +0000316360 00000 n +0001098192 00000 n +0001127542 00000 n +0001054244 00000 n +0001095432 00000 n +0001082620 00000 n +0000935724 00000 n +0000313320 00000 n +0001095785 00000 n +0001081431 00000 n +0000977788 00000 n +0000299188 00000 n +0000973154 00000 n +0000300643 00000 n +0001093532 00000 n +0001089748 00000 n +0001093123 00000 n +0001090931 00000 n +0001098542 00000 n +0001145292 00000 n +0000932017 00000 n +0000314955 00000 n +0001076051 00000 n +0001070624 00000 n +0000927570 00000 n +0000316562 00000 n +0001177130 00000 n +0001163912 00000 n +0001151979 00000 n +0001132329 00000 n +0001125524 00000 n +0000943134 00000 n +0000310535 00000 n +0001141877 00000 n +0000973872 00000 n +0000300432 00000 n +0000974590 00000 n +0000300221 00000 n +0000975308 00000 n +0000300010 00000 n +0001079833 00000 n +0001057556 00000 n +0000985909 00000 n +0000296628 00000 n +0001075845 00000 n +0001071216 00000 n +0000923463 00000 n +0000318845 00000 n +0001176569 00000 n +0001165700 00000 n +0000995072 00000 n +0000923094 00000 n +0000319044 00000 n +0001178076 00000 n +0001160334 00000 n +0001176776 00000 n +0001165104 00000 n +0001176923 00000 n +0001164508 00000 n +0001078921 00000 n +0001060524 00000 n +0001078775 00000 n +0001061116 00000 n +0000944601 00000 n +0000310099 00000 n +0001140257 00000 n +0000968210 00000 n +0000302254 00000 n +0000968828 00000 n +0000302054 00000 n +0001105655 00000 n +0001106920 00000 n +0000977460 00000 n +0000299390 00000 n +0000948293 00000 n +0000308729 00000 n +0000948621 00000 n +0000308547 00000 n +0000940326 00000 n +0000311389 00000 n +0001178431 00000 n +0001159139 00000 n +0001174052 00000 n +0001173454 00000 n +0001074799 00000 n +0001074204 00000 n +0000964302 00000 n +0000303469 00000 n +0000982972 00000 n +0000297494 00000 n +0000966454 00000 n +0000302843 00000 n +0000979810 00000 n +0000298540 00000 n +0000996271 00000 n +0000957471 00000 n +0000305589 00000 n +0000322022 00000 n +0000321840 00000 n +0000512045 00000 n +0000321658 00000 n +0000955318 00000 n +0000306222 00000 n +0000956753 00000 n +0000305800 00000 n +0000960338 00000 n +0000304746 00000 n +0000956035 00000 n +0000306011 00000 n +0000958189 00000 n +0000305378 00000 n +0000958906 00000 n +0000305167 00000 n +0000916926 00000 n +0000321204 00000 n +0000981246 00000 n +0000298105 00000 n +0000918688 00000 n +0000320604 00000 n +0000917971 00000 n +0000320792 00000 n +0000947996 00000 n +0000308911 00000 n +0000984441 00000 n +0000297050 00000 n +0000947668 00000 n +0000309091 00000 n +0000512373 00000 n +0000321434 00000 n +0000967492 00000 n +0000302454 00000 n +0000979092 00000 n +0000298753 00000 n +0000978375 00000 n +0000298975 00000 n +0000980528 00000 n +0000298318 00000 n +0000947340 00000 n +0000309273 00000 n +0000946622 00000 n +0000309455 00000 n +0000976026 00000 n +0000299799 00000 n +0000940978 00000 n +0000311178 00000 n +0000917643 00000 n +0000321016 00000 n +0000965019 00000 n +0000303254 00000 n +0000982675 00000 n +0000297707 00000 n +0001075222 00000 n +0001072997 00000 n +0001177779 00000 n +0001161529 00000 n +0001152906 00000 n +0001152326 00000 n +0001153151 00000 n +0000969446 00000 n +0000301854 00000 n +0001152661 00000 n +0000970064 00000 n +0000301654 00000 n +0000970682 00000 n +0000301454 00000 n +0001127233 00000 n +0001124306 00000 n +0001127785 00000 n +0001125281 00000 n +0001185661 00000 n +0001181133 00000 n +0001174257 00000 n +0001172855 00000 n +0001178222 00000 n +0001159737 00000 n +0001129309 00000 n +0001128577 00000 n +0001153888 00000 n +0001153396 00000 n +0001130279 00000 n +0001154134 00000 n +0000971918 00000 n +0000301054 00000 n +0001153642 00000 n +0000971300 00000 n +0000301254 00000 n +0000972536 00000 n +0000300854 00000 n +0001123964 00000 n +0001128028 00000 n +0001124549 00000 n +0001129065 00000 n +0001128821 00000 n +0001129552 00000 n +0001078121 00000 n +0001063499 00000 n +0000961056 00000 n +0000304536 00000 n +0001141630 00000 n +0000928312 00000 n +0000316126 00000 n +0001142367 00000 n +0000962932 00000 n +0000303894 00000 n +0001130036 00000 n +0001175445 00000 n +0001169276 00000 n +0000934253 00000 n +0000313959 00000 n +0001092913 00000 n +0001091523 00000 n +0000920482 00000 n +0000319925 00000 n +0001077176 00000 n +0001067063 00000 n +0000919046 00000 n +0000320377 00000 n +0000934623 00000 n +0000313759 00000 n +0001187915 00000 n +0000933145 00000 n +0000314557 00000 n +0000988118 00000 n +0000017100 00000 n +0001175654 00000 n +0001168680 00000 n +0001176070 00000 n +0001167486 00000 n +0001094844 00000 n +0001084994 00000 n +0001094340 00000 n +0001086777 00000 n +0001080189 00000 n +0001056364 00000 n +0001076757 00000 n +0001068251 00000 n +0001076461 00000 n +0001069440 00000 n +0001076256 00000 n +0001070032 00000 n +0000932777 00000 n +0000314756 00000 n +0000919765 00000 n +0000320151 00000 n +0001178782 00000 n +0001157949 00000 n +0001175028 00000 n +0001170470 00000 n +0000954959 00000 n +0000306433 00000 n +0001175863 00000 n +0001168084 00000 n +0001185807 00000 n +0001180529 00000 n +0001075430 00000 n +0001072403 00000 n +0000952906 00000 n +0000307060 00000 n +0001079981 00000 n +0001056961 00000 n +0001077381 00000 n +0001066466 00000 n +0000963681 00000 n +0000303684 00000 n +0001126256 00000 n +0001175237 00000 n +0001169874 00000 n +0000936097 00000 n +0000313091 00000 n +0000933884 00000 n +0000314159 00000 n +0001185152 00000 n +0001182922 00000 n +0001079417 00000 n +0001058743 00000 n +0001080337 00000 n +0001055769 00000 n +0001126501 00000 n +0001094992 00000 n +0001084398 00000 n +0000929071 00000 n +0000315892 00000 n +0001094131 00000 n +0001087373 00000 n +0001141383 00000 n +0001075637 00000 n +0001071808 00000 n +0001126012 00000 n +0001125768 00000 n +0001188223 00000 n +0000983690 00000 n +0000297272 00000 n +0001188528 00000 n +0000936764 00000 n +0000312886 00000 n +0000939618 00000 n +0000311780 00000 n +0000938854 00000 n +0000311987 00000 n +0001077678 00000 n +0001065278 00000 n +0001077529 00000 n +0001065870 00000 n +0001096684 00000 n +0000941696 00000 n +0000310967 00000 n +0000985190 00000 n +0000296837 00000 n +0000942415 00000 n +0000310750 00000 n +0000946001 00000 n +0000309666 00000 n +0000937140 00000 n +0000312659 00000 n +0000937806 00000 n +0000312454 00000 n +0000938183 00000 n +0000312223 00000 n +0000939996 00000 n +0000311604 00000 n +0001174672 00000 n +0001171660 00000 n +0001094635 00000 n +0001085590 00000 n +0001078627 00000 n +0001061708 00000 n +0000926083 00000 n +0000317592 00000 n +0001080545 00000 n +0001055177 00000 n +0001078418 00000 n +0001062312 00000 n +0001076967 00000 n +0001067656 00000 n +0001076609 00000 n +0001068848 00000 n +0000997179 00000 n +0001078269 00000 n +0001062907 00000 n +0001140889 00000 n +0001141136 00000 n +0001174881 00000 n +0001171065 00000 n +0000933513 00000 n +0000314358 00000 n +0001079626 00000 n +0001058148 00000 n +0001077825 00000 n +0001064683 00000 n +0001142123 00000 n +0000929831 00000 n +0000315658 00000 n +0000930494 00000 n +0000315423 00000 n +0001107941 00000 n +0001125037 00000 n +0001124793 00000 n +0001145045 00000 n +0001133806 00000 n +0001184724 00000 n +0001184120 00000 n +0001126747 00000 n +0001077972 00000 n +0001064091 00000 n +0001140642 00000 n +0001142614 00000 n +0000982062 00000 n +0000962450 00000 n +0000961840 00000 n +0000949048 00000 n +0000923931 00000 n +0000951551 00000 n +0000952294 00000 n +0000966912 00000 n +0000921670 00000 n +0000922431 00000 n +0000950088 00000 n +0000986725 00000 n +0000987471 00000 n +0000950834 00000 n +0000935062 00000 n +0000954342 00000 n +0000953625 00000 n +0000976842 00000 n +0000931358 00000 n +0000965836 00000 n +0000977888 00000 n +0000973254 00000 n +0000943950 00000 n +0000932117 00000 n +0000959722 00000 n +0000945350 00000 n +0000943234 00000 n +0000973972 00000 n +0000974690 00000 n +0000975408 00000 n +0000944701 00000 n +0000968310 00000 n +0000968928 00000 n +0000940426 00000 n +0000964402 00000 n +0000983072 00000 n +0000979910 00000 n +0000981346 00000 n +0000980628 00000 n +0000979192 00000 n +0000978475 00000 n +0000967592 00000 n +0000960438 00000 n +0000958289 00000 n +0000957571 00000 n +0000956853 00000 n +0000956135 00000 n +0000955418 00000 n +0000918071 00000 n +0000917026 00000 n +0000512473 00000 n +0000984541 00000 n +0000969546 00000 n +0000970164 00000 n +0000970782 00000 n +0000986009 00000 n +0000946722 00000 n +0000965119 00000 n +0000972018 00000 n +0000959006 00000 n +0000971400 00000 n +0000972636 00000 n +0000976126 00000 n +0000941078 00000 n +0000928412 00000 n +0000961156 00000 n +0000963032 00000 n +0000963781 00000 n +0000953006 00000 n +0000936197 00000 n +0000929171 00000 n +0000920582 00000 n +0000919865 00000 n +0000938954 00000 n +0000983790 00000 n +0000985290 00000 n +0000946101 00000 n +0000942515 00000 n +0000941796 00000 n +0000938283 00000 n +0000937240 00000 n +0000929931 00000 n +0000930594 00000 n +0000919146 00000 n +0000988218 00000 n +0000982156 00000 n +0000962544 00000 n +0000961934 00000 n +0000949142 00000 n +0000924025 00000 n +0000951645 00000 n +0000952388 00000 n +0000967006 00000 n +0000921764 00000 n +0000922525 00000 n +0000950183 00000 n +0000986820 00000 n +0000987566 00000 n +0000950929 00000 n +0000935157 00000 n +0000954437 00000 n +0000953720 00000 n +0000976937 00000 n +0000931453 00000 n +0000965931 00000 n +0000977983 00000 n +0000973349 00000 n +0000944045 00000 n +0000932212 00000 n +0000959817 00000 n +0000945445 00000 n +0000943329 00000 n +0000974067 00000 n +0000974785 00000 n +0000975503 00000 n +0000944796 00000 n +0000968405 00000 n +0000969023 00000 n +0000940521 00000 n +0000980005 00000 n +0000979287 00000 n +0000960533 00000 n +0000957666 00000 n +0000955513 00000 n +0000918166 00000 n +0000917121 00000 n +0000984636 00000 n +0000956948 00000 n +0000969641 00000 n +0000956230 00000 n +0000970259 00000 n +0000970877 00000 n +0000986104 00000 n +0000512568 00000 n +0000967687 00000 n +0000946817 00000 n +0000964497 00000 n +0000980723 00000 n +0000978570 00000 n +0000965214 00000 n +0000958384 00000 n +0000983167 00000 n +0000972113 00000 n +0000959101 00000 n +0000971495 00000 n +0000972731 00000 n +0000976221 00000 n +0000941173 00000 n +0000981441 00000 n +0000928507 00000 n +0000961251 00000 n +0000963127 00000 n +0000963876 00000 n +0000953101 00000 n +0000936292 00000 n +0000929266 00000 n +0000920677 00000 n +0000919960 00000 n +0000939049 00000 n +0000983885 00000 n +0000985385 00000 n +0000946196 00000 n +0000942610 00000 n +0000941891 00000 n +0000938378 00000 n +0000937335 00000 n +0000930026 00000 n +0000930689 00000 n +0000919241 00000 n +0000988313 00000 n +0000967100 00000 n +0000982250 00000 n +0000962638 00000 n +0000962028 00000 n +0000949236 00000 n +0000924119 00000 n +0000951739 00000 n +0000952482 00000 n +0000921858 00000 n +0000922619 00000 n +0000950278 00000 n +0000986915 00000 n +0000987661 00000 n +0000951024 00000 n +0000935252 00000 n +0000954532 00000 n +0000953815 00000 n +0000977032 00000 n +0000931548 00000 n +0000966026 00000 n +0000978078 00000 n +0000973444 00000 n +0000944140 00000 n +0000932307 00000 n +0000959912 00000 n +0000945540 00000 n +0000943424 00000 n +0000974162 00000 n +0000974880 00000 n +0000975598 00000 n +0000944891 00000 n +0000968500 00000 n +0000969118 00000 n +0000917216 00000 n +0000512663 00000 n +0001177928 00000 n +0001160932 00000 n +0001179517 00000 n +0001154976 00000 n +0001179724 00000 n +0001154380 00000 n +0000918261 00000 n +0000940616 00000 n +0001184943 00000 n +0001183524 00000 n +0000979382 00000 n +0000980100 00000 n +0001177484 00000 n +0001162722 00000 n +0001178930 00000 n +0001157354 00000 n +0001185300 00000 n +0001182326 00000 n +0000960628 00000 n +0000957761 00000 n +0000955608 00000 n +0000984731 00000 n +0000957043 00000 n +0000969736 00000 n +0000956325 00000 n +0000970354 00000 n +0000970972 00000 n +0000986199 00000 n +0000967782 00000 n +0000946912 00000 n +0000964592 00000 n +0001174465 00000 n +0001172255 00000 n +0000980818 00000 n +0001075003 00000 n +0001073595 00000 n +0000978665 00000 n +0000965309 00000 n +0000958479 00000 n +0000983262 00000 n +0000972208 00000 n +0000959196 00000 n +0000971590 00000 n +0000972826 00000 n +0000976316 00000 n +0000941268 00000 n +0000981536 00000 n +0000928602 00000 n +0000961346 00000 n +0000963222 00000 n +0000963971 00000 n +0000953196 00000 n +0000936387 00000 n +0000929361 00000 n +0001093830 00000 n +0001088563 00000 n +0000926732 00000 n +0000317179 00000 n +0000920772 00000 n +0001093328 00000 n +0001090340 00000 n +0000920055 00000 n +0000927291 00000 n +0000316764 00000 n +0001001757 00000 n +0000993818 00000 n +0001001154 00000 n +0000927011 00000 n +0000316971 00000 n +0000926454 00000 n +0000317386 00000 n +0000939144 00000 n +0000983980 00000 n +0000985480 00000 n +0000946291 00000 n +0000942705 00000 n +0000941986 00000 n +0000938473 00000 n +0000937430 00000 n +0001099394 00000 n +0000992780 00000 n +0001098787 00000 n +0000930121 00000 n +0000930784 00000 n +0001093979 00000 n +0001087969 00000 n +0000919336 00000 n +0001093678 00000 n +0001089154 00000 n +0000988408 00000 n +0001001858 00000 n +0001099496 00000 n +0001189189 00000 n +0000990193 00000 n +0001188774 00000 n +0000967200 00000 n +0000982350 00000 n +0000962738 00000 n +0000962128 00000 n +0000949336 00000 n +0000924219 00000 n +0000951839 00000 n +0000960013 00000 n +0000952582 00000 n +0000921958 00000 n +0000922719 00000 n +0000924687 00000 n +0000950379 00000 n +0000987016 00000 n +0000945641 00000 n +0000944241 00000 n +0000921298 00000 n +0000987762 00000 n +0000977133 00000 n +0000966127 00000 n +0000925810 00000 n +0000949759 00000 n +0000925060 00000 n +0000951125 00000 n +0000925433 00000 n +0000935353 00000 n +0000954633 00000 n +0000953916 00000 n +0000931649 00000 n +0000928041 00000 n +0000935824 00000 n +0000978179 00000 n +0000973545 00000 n +0000932408 00000 n +0000927670 00000 n +0000943525 00000 n +0000974263 00000 n +0000974981 00000 n +0000975699 00000 n +0000986300 00000 n +0000923563 00000 n +0000923194 00000 n +0000944992 00000 n +0000968601 00000 n +0000969219 00000 n +0000977560 00000 n +0000948393 00000 n +0000948721 00000 n +0000940717 00000 n +0000964693 00000 n +0000983363 00000 n +0000966554 00000 n +0000957862 00000 n +0000322122 00000 n +0000512145 00000 n +0000955709 00000 n +0000957144 00000 n +0000960729 00000 n +0000956426 00000 n +0000958580 00000 n +0000959297 00000 n +0000917317 00000 n +0000981637 00000 n +0000918788 00000 n +0000918362 00000 n +0000948096 00000 n +0000984832 00000 n +0000947768 00000 n +0000512764 00000 n +0000967883 00000 n +0000979483 00000 n +0000978766 00000 n +0000980919 00000 n +0000947440 00000 n +0000947013 00000 n +0000976417 00000 n +0000941369 00000 n +0000917743 00000 n +0000980201 00000 n +0000965410 00000 n +0000982775 00000 n +0000969837 00000 n +0000970455 00000 n +0000971073 00000 n +0000972309 00000 n +0000971691 00000 n +0000972927 00000 n +0000961447 00000 n +0000928703 00000 n +0000963323 00000 n +0000934353 00000 n +0000920873 00000 n +0000919439 00000 n +0000934723 00000 n +0000933245 00000 n +0000988511 00000 n +0000932877 00000 n +0000920156 00000 n +0000955059 00000 n +0000953297 00000 n +0000964072 00000 n +0000936488 00000 n +0000933984 00000 n +0000929462 00000 n +0000984082 00000 n +0000936864 00000 n +0000939718 00000 n +0000939246 00000 n +0000942088 00000 n +0000985582 00000 n +0000942807 00000 n +0000946393 00000 n +0000937532 00000 n +0000937906 00000 n +0000938575 00000 n +0000940096 00000 n +0000926183 00000 n +0000933613 00000 n +0000930223 00000 n +0000930887 00000 n +0000967297 00000 n +0000982447 00000 n +0000962835 00000 n +0000962225 00000 n +0000949433 00000 n +0000924316 00000 n +0000922055 00000 n +0000922817 00000 n +0000950477 00000 n +0000987860 00000 n +0000935451 00000 n +0000954731 00000 n +0000954014 00000 n +0000977231 00000 n +0000931747 00000 n +0000966225 00000 n +0000978277 00000 n +0000973643 00000 n +0000944339 00000 n +0000932506 00000 n +0000960110 00000 n +0000945739 00000 n +0000952679 00000 n +0000943623 00000 n +0000951936 00000 n +0000974361 00000 n +0000975079 00000 n +0000975797 00000 n +0000987114 00000 n +0000945090 00000 n +0000951223 00000 n +0000968699 00000 n +0000969317 00000 n +0000917415 00000 n +0000512862 00000 n +0000918460 00000 n +0000964791 00000 n +0000983461 00000 n +0000979581 00000 n +0000957242 00000 n +0000955807 00000 n +0000957960 00000 n +0000969935 00000 n +0000956524 00000 n +0000970553 00000 n +0000971171 00000 n +0000986398 00000 n +0000967981 00000 n +0000947111 00000 n +0000981017 00000 n +0000978864 00000 n +0000958678 00000 n +0000960827 00000 n +0000972407 00000 n +0000959395 00000 n +0000971789 00000 n +0000973025 00000 n +0000976515 00000 n +0000941467 00000 n +0000980299 00000 n +0000981735 00000 n +0000928801 00000 n +0000961545 00000 n +0000963421 00000 n +0000965508 00000 n +0000929561 00000 n +0000926833 00000 n +0000920971 00000 n +0000920254 00000 n +0000927392 00000 n +0000927113 00000 n +0000926556 00000 n +0000939345 00000 n +0000942187 00000 n +0000942906 00000 n +0000930322 00000 n +0000930986 00000 n +0000919537 00000 n +0000988609 00000 n +0000984930 00000 n +0000985681 00000 n +0000984181 00000 n +0000967394 00000 n +0000949530 00000 n +0000982544 00000 n +0000924413 00000 n +0000952034 00000 n +0000960208 00000 n +0000952777 00000 n +0000924785 00000 n +0000950574 00000 n +0000987212 00000 n +0000945837 00000 n +0000944437 00000 n +0000921396 00000 n +0000977329 00000 n +0000922152 00000 n +0000966323 00000 n +0000922914 00000 n +0000925908 00000 n +0000949857 00000 n +0000925158 00000 n +0000951321 00000 n +0000925531 00000 n +0000928139 00000 n +0000931845 00000 n +0000935549 00000 n +0000987957 00000 n +0000935922 00000 n +0000954112 00000 n +0000954829 00000 n +0000927768 00000 n +0000932604 00000 n +0000975895 00000 n +0000986496 00000 n +0000923661 00000 n +0000923292 00000 n +0000977658 00000 n +0000948491 00000 n +0000948819 00000 n +0000940815 00000 n +0000966652 00000 n +0000958058 00000 n +0000322220 00000 n +0000512243 00000 n +0000955905 00000 n +0000973741 00000 n +0000957340 00000 n +0000960925 00000 n +0000956622 00000 n +0000943721 00000 n +0000974459 00000 n +0000975177 00000 n +0000958776 00000 n +0000959493 00000 n +0000917513 00000 n +0000981833 00000 n +0000918886 00000 n +0000918558 00000 n +0000948194 00000 n +0000985028 00000 n +0000964889 00000 n +0000947866 00000 n +0000512960 00000 n +0000968079 00000 n +0000979679 00000 n +0000978962 00000 n +0000981115 00000 n +0000983559 00000 n +0000947538 00000 n +0000947209 00000 n +0000976613 00000 n +0000941565 00000 n +0000917841 00000 n +0000980397 00000 n +0000965606 00000 n +0000982873 00000 n +0000961643 00000 n +0000934451 00000 n +0000921069 00000 n +0000919635 00000 n +0000934821 00000 n +0000933343 00000 n +0000988707 00000 n +0000932975 00000 n +0000920352 00000 n +0000955157 00000 n +0000953395 00000 n +0000964171 00000 n +0000936587 00000 n +0000934083 00000 n +0000929659 00000 n +0000928899 00000 n +0000963519 00000 n +0000984279 00000 n +0000936963 00000 n +0000939817 00000 n +0000942285 00000 n +0000985779 00000 n +0000939443 00000 n +0000943004 00000 n +0000946492 00000 n +0000937631 00000 n +0000938005 00000 n +0000938674 00000 n +0000940195 00000 n +0000926282 00000 n +0000933712 00000 n +0000931084 00000 n +0000988837 00000 n +0000988936 00000 n +0000989035 00000 n +0000015229 00000 n +0000015327 00000 n +0000015425 00000 n +0000015523 00000 n +0000015621 00000 n +0000015719 00000 n +0000015817 00000 n +0000015915 00000 n +0000016013 00000 n +0000016111 00000 n +0000016209 00000 n +0000016308 00000 n +0000016407 00000 n +0000016506 00000 n +0000016605 00000 n +0000016704 00000 n +0000016803 00000 n +0000016902 00000 n +0000017001 00000 n +0000988806 00000 n +0000512007 00000 n +0000017581 00000 n +0000017610 00000 n +0000027702 00000 n +0000029119 00000 n +0000028882 00000 n +0000029270 00000 n +0000029318 00000 n +0000029363 00000 n +0000030813 00000 n +0000030842 00000 n +0000246411 00000 n +0000246473 00000 n +0000246525 00000 n +0000246676 00000 n +0000246724 00000 n +0000247034 00000 n +0000247063 00000 n +0000295943 00000 n +0000296094 00000 n +0000296142 00000 n +0000988087 00000 n +0000988056 00000 n +0000987342 00000 n +0000987310 00000 n +0000986595 00000 n +0000985878 00000 n +0000985159 00000 n +0000985127 00000 n +0000984410 00000 n +0000984378 00000 n +0000983658 00000 n +0000982642 00000 n +0000981932 00000 n +0000981214 00000 n +0000980496 00000 n +0000979778 00000 n +0000979061 00000 n +0000977757 00000 n +0000977428 00000 n +0000976712 00000 n +0000975994 00000 n +0000975276 00000 n +0000974558 00000 n +0000973840 00000 n +0000973123 00000 n +0000972505 00000 n +0000971887 00000 n +0000971269 00000 n +0000970651 00000 n +0000970033 00000 n +0000969415 00000 n +0000968797 00000 n +0000968178 00000 n +0000966782 00000 n +0000966751 00000 n +0000966422 00000 n +0000965705 00000 n +0000964988 00000 n +0000964270 00000 n +0000963650 00000 n +0000963618 00000 n +0000962322 00000 n +0000961024 00000 n +0000960306 00000 n +0000959592 00000 n +0000958875 00000 n +0000958157 00000 n +0000957439 00000 n +0000956721 00000 n +0000956004 00000 n +0000955287 00000 n +0000955256 00000 n +0000954928 00000 n +0000954211 00000 n +0000953494 00000 n +0000952875 00000 n +0000952164 00000 n +0000952132 00000 n +0000951420 00000 n +0000950703 00000 n +0000950672 00000 n +0000949956 00000 n +0000949628 00000 n +0000948918 00000 n +0000948590 00000 n +0000947965 00000 n +0000947637 00000 n +0000947308 00000 n +0000946591 00000 n +0000945968 00000 n +0000945936 00000 n +0000945220 00000 n +0000945188 00000 n +0000944568 00000 n +0000944536 00000 n +0000943820 00000 n +0000943103 00000 n +0000942384 00000 n +0000941664 00000 n +0000940945 00000 n +0000940914 00000 n +0000940295 00000 n +0000939947 00000 n +0000939916 00000 n +0000939573 00000 n +0000939542 00000 n +0000938805 00000 n +0000938774 00000 n +0000938136 00000 n +0000938105 00000 n +0000937761 00000 n +0000937731 00000 n +0000937093 00000 n +0000937062 00000 n +0000936717 00000 n +0000936686 00000 n +0000936052 00000 n +0000936021 00000 n +0000935679 00000 n +0000935648 00000 n +0000934920 00000 n +0000933074 00000 n +0000934581 00000 n +0000934550 00000 n +0000934212 00000 n +0000934182 00000 n +0000933843 00000 n +0000933812 00000 n +0000933472 00000 n +0000933442 00000 n +0000933104 00000 n +0000932734 00000 n +0000932703 00000 n +0000931974 00000 n +0000931944 00000 n +0000931215 00000 n +0000931184 00000 n +0000930451 00000 n +0000930420 00000 n +0000929788 00000 n +0000929758 00000 n +0000929028 00000 n +0000928998 00000 n +0000928268 00000 n +0000928238 00000 n +0000927897 00000 n +0000927867 00000 n +0000927520 00000 n +0000927490 00000 n +0000927241 00000 n +0000927211 00000 n +0000926961 00000 n +0000926931 00000 n +0000926684 00000 n +0000926654 00000 n +0000926413 00000 n +0000926382 00000 n +0000926037 00000 n +0000926007 00000 n +0000925660 00000 n +0000925630 00000 n +0000925288 00000 n +0000925257 00000 n +0000924914 00000 n +0000924883 00000 n +0000924542 00000 n +0000924511 00000 n +0000923791 00000 n +0000923760 00000 n +0000923422 00000 n +0000923391 00000 n +0000923044 00000 n +0000923013 00000 n +0000922282 00000 n +0000922251 00000 n +0000921526 00000 n +0000921495 00000 n +0000921168 00000 n +0000920451 00000 n +0000919734 00000 n +0000919016 00000 n +0000918985 00000 n +0000918657 00000 n +0000917940 00000 n +0000917612 00000 n +0000916894 00000 n +0000512342 00000 n +0000511976 00000 n +0000322594 00000 n +0000322623 00000 n +0000400346 00000 n +0000400497 00000 n +0000400545 00000 n +0000400855 00000 n +0000400884 00000 n +0000511732 00000 n +0000511883 00000 n +0000511931 00000 n +0000513313 00000 n +0000513342 00000 n +0000555715 00000 n +0000555866 00000 n +0000555914 00000 n +0000556274 00000 n +0000556303 00000 n +0000646004 00000 n +0000646056 00000 n +0000646207 00000 n +0000646255 00000 n +0000646605 00000 n +0000646634 00000 n +0000767097 00000 n +0000767149 00000 n +0000767300 00000 n +0000767348 00000 n +0000767698 00000 n +0000767727 00000 n +0000916598 00000 n +0000916650 00000 n +0000916801 00000 n +0000916849 00000 n +0000995634 00000 n +0001190798 00000 n +0000995565 00000 n +0000995598 00000 n +0001191191 00000 n +0000995485 00000 n +0000995365 00000 n +0001190757 00000 n +0000995333 00000 n +0000995269 00000 n +0001190715 00000 n +0000995406 00000 n +0000995517 00000 n +0000995299 00000 n +0000996469 00000 n +0000996530 00000 n +0000997407 00000 n +0000997472 00000 n +0000997377 00000 n +0000998345 00000 n +0000998415 00000 n +0000998310 00000 n +0001000543 00000 n +0001001107 00000 n +0001000508 00000 n +0001000478 00000 n +0001000868 00000 n +0001000628 00000 n +0001053520 00000 n +0001053599 00000 n +0001053487 00000 n +0001002220 00000 n +0001002249 00000 n +0001053243 00000 n +0001053394 00000 n +0001053442 00000 n +0001054475 00000 n +0001054536 00000 n +0001054441 00000 n +0001075945 00000 n +0001080791 00000 n +0001076356 00000 n +0001080645 00000 n +0001080437 00000 n +0001080497 00000 n +0001076857 00000 n +0001080289 00000 n +0001080081 00000 n +0001080141 00000 n +0001079933 00000 n +0001079726 00000 n +0001079786 00000 n +0001079517 00000 n +0001079577 00000 n +0001079168 00000 n +0001079371 00000 n +0001079227 00000 n +0001079021 00000 n +0001078875 00000 n +0001075104 00000 n +0001078727 00000 n +0001078518 00000 n +0001078578 00000 n +0001078369 00000 n +0001078221 00000 n +0001078072 00000 n +0001075737 00000 n +0001077925 00000 n +0001077778 00000 n +0001075530 00000 n +0001077629 00000 n +0001077481 00000 n +0001077276 00000 n +0001077333 00000 n +0001077067 00000 n +0001077127 00000 n +0001076919 00000 n +0001076709 00000 n +0001076561 00000 n +0001076413 00000 n +0001076151 00000 n +0001076210 00000 n +0001076003 00000 n +0001075797 00000 n +0001075591 00000 n +0001075322 00000 n +0001075383 00000 n +0001075175 00000 n +0001074899 00000 n +0001074957 00000 n +0001093223 00000 n +0001096031 00000 n +0001095885 00000 n +0001095678 00000 n +0001095739 00000 n +0001092810 00000 n +0001095532 00000 n +0001095385 00000 n +0001095239 00000 n +0001094231 00000 n +0001095092 00000 n +0001094944 00000 n +0001094735 00000 n +0001094795 00000 n +0001094588 00000 n +0001094440 00000 n +0001094292 00000 n +0001093429 00000 n +0001094083 00000 n +0001093931 00000 n +0001093782 00000 n +0001093632 00000 n +0001093484 00000 n +0001093282 00000 n +0001093013 00000 n +0001093075 00000 n +0001092867 00000 n +0001096882 00000 n +0001096944 00000 n +0001098419 00000 n +0001098739 00000 n +0001098386 00000 n +0001098494 00000 n +0001099631 00000 n +0001099704 00000 n +0001099593 00000 n +0001100486 00000 n +0001100559 00000 n +0001100447 00000 n +0001101475 00000 n +0001101575 00000 n +0001101432 00000 n +0001101397 00000 n +0001103078 00000 n +0001103392 00000 n +0001103044 00000 n +0001103010 00000 n +0001103156 00000 n +0001104308 00000 n +0001104406 00000 n +0001104265 00000 n +0001104230 00000 n +0001105930 00000 n +0001106272 00000 n +0001105887 00000 n +0001105852 00000 n +0001106029 00000 n +0001107195 00000 n +0001107292 00000 n +0001107152 00000 n +0001107117 00000 n +0001108208 00000 n +0001108296 00000 n +0001108170 00000 n +0001108139 00000 n +0001124194 00000 n +0001130477 00000 n +0001124162 00000 n +0001127430 00000 n +0001130234 00000 n +0001129991 00000 n +0001129750 00000 n +0001129506 00000 n +0001129263 00000 n +0001129019 00000 n +0001128775 00000 n +0001128466 00000 n +0001128532 00000 n +0001128226 00000 n +0001127982 00000 n +0001127739 00000 n +0001127496 00000 n +0001127187 00000 n +0001126945 00000 n +0001126699 00000 n +0001126454 00000 n +0001126210 00000 n +0001125966 00000 n +0001125721 00000 n +0001125478 00000 n +0001125235 00000 n +0001124991 00000 n +0001124747 00000 n +0001124503 00000 n +0001124260 00000 n +0001132591 00000 n +0001133154 00000 n +0001132558 00000 n +0001132526 00000 n +0001132914 00000 n +0001132674 00000 n +0001134075 00000 n +0001134164 00000 n +0001134042 00000 n +0001134004 00000 n +0001140519 00000 n +0001142812 00000 n +0001140486 00000 n +0001140454 00000 n +0001142565 00000 n +0001142321 00000 n +0001142074 00000 n +0001141828 00000 n +0001141581 00000 n +0001141334 00000 n +0001141087 00000 n +0001140840 00000 n +0001140593 00000 n +0001144925 00000 n +0001145489 00000 n +0001144892 00000 n +0001144860 00000 n +0001145243 00000 n +0001144999 00000 n +0001152523 00000 n +0001154332 00000 n +0001151796 00000 n +0001151764 00000 n +0001154086 00000 n +0001153840 00000 n +0001153594 00000 n +0001153348 00000 n +0001153103 00000 n +0001152858 00000 n +0001152613 00000 n +0001152176 00000 n +0001152277 00000 n +0001151837 00000 n +0001151933 00000 n +0001179825 00000 n +0001179885 00000 n +0001179618 00000 n +0001179676 00000 n +0001176317 00000 n +0001179469 00000 n +0001178677 00000 n +0001179323 00000 n +0001177230 00000 n +0001179177 00000 n +0001177023 00000 n +0001179031 00000 n +0001175754 00000 n +0001178882 00000 n +0001178735 00000 n +0001178531 00000 n +0001178322 00000 n +0001178383 00000 n +0001178176 00000 n +0001178029 00000 n +0001177879 00000 n +0001177731 00000 n +0001177585 00000 n +0001177437 00000 n +0001177289 00000 n +0001177082 00000 n +0001176669 00000 n +0001176876 00000 n +0001176728 00000 n +0001176523 00000 n +0001176376 00000 n +0001176170 00000 n +0001175963 00000 n +0001176022 00000 n +0001175815 00000 n +0001175545 00000 n +0001175606 00000 n +0001175337 00000 n +0001175398 00000 n +0001175128 00000 n +0001175188 00000 n +0001174357 00000 n +0001174981 00000 n +0001174772 00000 n +0001174832 00000 n +0001174566 00000 n +0001174625 00000 n +0001174417 00000 n +0001174152 00000 n +0001174211 00000 n +0001185044 00000 n +0001186055 00000 n +0001184824 00000 n +0001185907 00000 n +0001185761 00000 n +0001185613 00000 n +0001185401 00000 n +0001185466 00000 n +0001185252 00000 n +0001185104 00000 n +0001184895 00000 n +0001188421 00000 n +0001188726 00000 n +0001188481 00000 n +0001188113 00000 n +0001188175 00000 n +0001189357 00000 n +0001189326 00000 n +0001189287 00000 n +0001191048 00000 n +0001190905 00000 n +0001191427 00000 n +0001191505 00000 n +0001192719 00000 n +0001192581 00000 n +0001191584 00000 n +0001191628 00000 n +0001191721 00000 n +0001191765 00000 n +0001191857 00000 n +0001191901 00000 n +0001191993 00000 n +0001192037 00000 n +0001192129 00000 n +0001192173 00000 n +0001192269 00000 n +0001192313 00000 n +0001192403 00000 n +0001192447 00000 n +0001192537 00000 n +0001192675 00000 n +0001193185 00000 n +0001193233 00000 n +trailer +<]>> +startxref +1193436 +%%EOF diff --git a/doc/SensorPal Startup Rev 0.1.pdf b/doc/SensorPal Startup Rev 0.1.pdf new file mode 100644 index 0000000..b0cd65c Binary files /dev/null and b/doc/SensorPal Startup Rev 0.1.pdf differ diff --git a/examples/AD5940_ADC/AD5940_ADCMeanFIFO.c b/examples/AD5940_ADC/AD5940_ADCMeanFIFO.c new file mode 100644 index 0000000..ecff7bc --- /dev/null +++ b/examples/AD5940_ADC/AD5940_ADCMeanFIFO.c @@ -0,0 +1,103 @@ +/*! + ***************************************************************************** + @file: AD5940_ADCMeanFIFO.c + @author: $Author: nxu2 $ + @brief: Use FIFO to read statistic block mean result. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** @addtogroup AD5940_Standard_Examples + * @{ + @defgroup ADC_MEAN_FIFO_Example + @{ + */ + +#include "ad5940.h" +#include + +uint32_t ADCBuff[256]; +void AD5940_Main(void) +{ + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + StatCfg_Type stat_cfg; + FIFOCfg_Type fifo_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + /* Firstly call this function after reset to initialize AFE registers. */ + AD5940_Initialize(); + /* Configure AFE power mode and bandwidth */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + /* Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_AVDD_2; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = ADCPGA_1; + AD5940_ADCBaseCfgS(&adc_base); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH-->StatisticBlock */ + adc_filter.ADCSinc3Osr = ADCSINC3OSR_4; + adc_filter.ADCSinc2Osr = ADCSINC2OSR_1333; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + + /** + * Statistic block receive data from SINC2+Notch block. Note the diagram in datasheet page 51 PrM. + * The SINC3 can be bypassed optionally. SINC2 cannot be bypassed. + * */ + stat_cfg.StatDev = STATDEV_1; /* Not used. */ + stat_cfg.StatEnable = bTRUE; + stat_cfg.StatSample = STATSAMPLE_128; /* Sample 128 points and calculate mean. */ + AD5940_StatisticCfgS(&stat_cfg); + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; + fifo_cfg.FIFOSrc = FIFOSRC_MEAN; + fifo_cfg.FIFOThresh = 2; + AD5940_FIFOCfg(&fifo_cfg); + + /* Enable all interrupt at Interrupt Controller 1. So we can check the interrupt flag */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); + AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH, bTRUE); /* Enable FIFO threshold interrupt. */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + AD5940_ClrMCUIntFlag(); /* Clear the MCU interrupt flag which will be set in ISR. */ + + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); + while(1) + { + uint32_t FifoCnt; + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + FifoCnt = AD5940_FIFOGetCnt(); + AD5940_FIFORd((uint32_t *)ADCBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + printf("Get %d data, ADC Code[0]:%d\n",FifoCnt, ADCBuff[0]&0xffff); + /*!!!!!NOTE!!!!!*/ + /* The mean result already removed 32768. So to calculate the voltage, assume mean result is n, use below equation. + Voltage = n/32768*Vref + */ + } + } + } +} + +/** + * @} + * @} + * */ diff --git a/examples/AD5940_ADC/AD5940_ADCNotchTest.c b/examples/AD5940_ADC/AD5940_ADCNotchTest.c new file mode 100644 index 0000000..0140dae --- /dev/null +++ b/examples/AD5940_ADC/AD5940_ADCNotchTest.c @@ -0,0 +1,205 @@ +/*! + ***************************************************************************** + @file: AD5940_ADCNotchTest.c + @author: Neo Xu + @brief: Notch filter test. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** @addtogroup AD5940_Standard_Examples + * @{ + @defgroup ADC_Notch_Test_Example + @{ + */ + +#include "ad5940.h" +#include + +#ifdef ADI_DEBUG +#undef ADI_DEBUG +#endif + +void ad5940_sequencer_init(uint8_t adc_rate, uint8_t sinc3osr, uint8_t sinc2osr){ + FIFOCfg_Type fifo_cfg; + SEQCfg_Type seq_cfg; + /* Step2. Configure FIFO and Sequencer*/ + fifo_cfg.FIFOEn = bFALSE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC2NOTCH; + fifo_cfg.FIFOThresh = 1; + AD5940_FIFOCfg(&fifo_cfg); /* Disable to reset FIFO. */ + fifo_cfg.FIFOEn = bTRUE; + AD5940_FIFOCfg(&fifo_cfg); /* Enable FIFO here */ + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + uint32_t WaitClks; + uint8_t dl_60, dl_50, dl=0; + ADCFilterCfg_Type filter; + filter.ADCSinc3Osr = sinc3osr; + filter.ADCSinc2Osr = sinc2osr; + filter.ADCRate = adc_rate; + const uint32_t sinc2osr_table[] = {22,44,89,178,267,533,640,667,800,889,1067,1333,0}; + const uint32_t sinc3osr_table[] = {5,4,2,0}; + printf("SINC3:OSR%d, SINC2:OSR%d, ", sinc3osr_table[sinc3osr], sinc2osr_table[sinc2osr]); + if(AD5940_Notch50HzAvailable(&filter, &dl_50)){ + printf("NOTCH50: DL:%d, %dHz ", dl_50, (uint32_t)((adc_rate==ADCRATE_1P6MHZ?1.6e6:800000.0)/sinc3osr_table[sinc3osr]/sinc2osr_table[sinc2osr]/dl_50 + .5)); + dl += dl_50-1; + } + if(AD5940_Notch60HzAvailable(&filter, &dl_60)){ + printf("NOTCH60: DL:%d, %dHz ", dl_60, (uint32_t)((adc_rate==ADCRATE_1P6MHZ?1.6e6:800000.0)/sinc3osr_table[sinc3osr]/sinc2osr_table[sinc2osr]/dl_60 + .5)); + dl += dl_60-1; + } + ClksCalInfo_Type clks_cal; + clks_cal.DataType = DATATYPE_NOTCH; + clks_cal.ADCRate = adc_rate; + clks_cal.DataCount = 1; /* Sample one data when wakeup */ + clks_cal.ADCSinc2Osr = sinc2osr; + clks_cal.ADCSinc3Osr = sinc3osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = adc_rate==ADCRATE_1P6MHZ?.5:1; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + static uint32_t buff[128]; + AD5940_SEQGenInit(buff, 128); + AD5940_SEQGenCtrl(bTRUE); + + AD5940_SEQGpioCtrlS(AGPIO_Pin1); + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_SINC2NOTCH, bTRUE); /* Start ADC convert */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bFALSE); /* Stop ADC convert and DFT */ + AD5940_SEQGpioCtrlS(0); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + SEQInfo_Type seqinfo; + AD5940_SEQGenFetchSeq(&seqinfo.pSeqCmd, &seqinfo.SeqLen); + seqinfo.SeqId = SEQID_0; + seqinfo.SeqRamAddr = 0; + seqinfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo); + + AGPIOCfg_Type gpio_cfg; + gpio_cfg.FuncSet = GP6_SYNC|GP5_SYNC|GP2_TRIG|GP1_SYNC|GP0_INT; + gpio_cfg.InputEnSet = AGPIO_Pin2; + gpio_cfg.OutputEnSet = AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin5|AGPIO_Pin6; + gpio_cfg.OutVal = 0; + gpio_cfg.PullEnSet = AGPIO_Pin2; + AD5940_AGPIOCfg(&gpio_cfg); +} + +uint32_t ad5940_notch_test(uint8_t adc_rate, uint8_t sinc3osr, uint8_t sinc2osr){ + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + + /* Use hardware reset */ + AD5940_HWReset(); + + /* Firstly call this function after reset to initialize AFE registers. */ + AD5940_Initialize(); + + CLKCfg_Type clk_cfg; + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = adc_rate==ADCRATE_1P6MHZ?SYSCLKDIV_2:SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = adc_rate==ADCRATE_1P6MHZ?bTRUE:bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + + /* Configure AFE power mode and bandwidth */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + /* Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_VREF1P8DAC; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = ADCPGA_1P5; + AD5940_ADCBaseCfgS(&adc_base); + AD5940_AFECtrlS(AFECTRL_DACREFPWR|AFECTRL_HSDACPWR, bTRUE); + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + adc_filter.ADCSinc3Osr = sinc3osr; + adc_filter.ADCSinc2Osr = sinc2osr; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = adc_rate; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bFALSE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + + /* Enable all interrupt at Interrupt Controller 1. So we can check the interrupt flag */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); + AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH, bTRUE); + + ad5940_sequencer_init(adc_rate, sinc3osr, sinc2osr); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + AD5940_SEQCtrlS(bTRUE); + AD5940_ClrMCUIntFlag(); + AD5940_SEQMmrTrig(SEQID_0); + while(1) + { + {int32_t i = 1000000;while(i--);} + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + uint32_t fifo_count = AD5940_FIFOGetCnt(); + if(fifo_count == 1){ + int32_t rd; + AD5940_FIFORd((uint32_t*)&rd, 1); + rd &= 0xffff; + float volt = AD5940_ADCCode2Volt(rd, ADCPGA_1P5, 1.82)+1.11; + volt -= 1.82; + if(volt < 0) volt = -volt; + if(volt > 0.0005){ + printf("FAILED:CODE:rd:%d\n", rd); + return 1; + } + printf("PASS\n"); + return 0; + } + else{ + printf("FAILED:%d\n", fifo_count); + return 1; + } + } + } +} + +void AD5940_Main(void) +{ + uint32_t failed = 0; + uint8_t sinc3=0, sinc2=0; + uint8_t adc_rate=0; + for(;adc_rate<=1;adc_rate++){ + sinc3=0; + for(;sinc3<=ADCSINC3OSR_2;sinc3++){ + sinc2=0; + for(;sinc2<=ADCSINC2OSR_1333;sinc2++){ + failed |= ad5940_notch_test(adc_rate, sinc3, sinc2); + } + } + } + printf("Test Done with status: %s\n",failed?"FAILED":"SUCCEED"); + while(1); +} + +/** + * @} + * @} + * */ diff --git a/examples/AD5940_ADC/AD5940_ADCPolling.c b/examples/AD5940_ADC/AD5940_ADCPolling.c new file mode 100644 index 0000000..42def98 --- /dev/null +++ b/examples/AD5940_ADC/AD5940_ADCPolling.c @@ -0,0 +1,110 @@ +/*! + ***************************************************************************** + @file: AD5940_ADCPolling.c + @author: $Author: nxu2 $ + @brief: ADC Polling mode example + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** @addtogroup AD5940_Standard_Examples + * @{ + @defgroup ADC_Polling_Example + @{ + */ + +#include "ad5940.h" +#include + +#define ADCPGA_GAIN_SEL ADCPGA_1P5 +static void AD5940_PGA_Calibration(void){ + AD5940Err err; + ADCPGACal_Type pgacal; + pgacal.AdcClkFreq = 16e6; + pgacal.ADCSinc2Osr = ADCSINC2OSR_178; + pgacal.ADCSinc3Osr = ADCSINC3OSR_4; + pgacal.SysClkFreq = 16e6; + pgacal.TimeOut10us = 1000; + pgacal.VRef1p11 = 1.11f; + pgacal.VRef1p82 = 1.82f; + pgacal.PGACalType = PGACALTYPE_OFFSETGAIN; + pgacal.ADCPga = ADCPGA_GAIN_SEL; + err = AD5940_ADCPGACal(&pgacal); + if(err != AD5940ERR_OK){ + printf("AD5940 PGA calibration failed."); + } +} + +void AD5940_Main(void) +{ + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + + /* Use hardware reset */ + AD5940_HWReset(); + + /* Firstly call this function after reset to initialize AFE registers. */ + AD5940_Initialize(); + + AD5940_PGA_Calibration(); + /* Configure AFE power mode and bandwidth */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + /* Initialize ADC basic function */ + AD5940_AFECtrlS(AFECTRL_DACREFPWR|AFECTRL_HSDACPWR, bTRUE); //We are going to measure DAC 1.82V reference. + adc_base.ADCMuxP = ADCMUXP_VREF1P8DAC; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = ADCPGA_GAIN_SEL; + AD5940_ADCBaseCfgS(&adc_base); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + adc_filter.ADCSinc3Osr = ADCSINC3OSR_4; + adc_filter.ADCSinc2Osr = ADCSINC2OSR_1333; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + + //AD5940_ADCMuxCfgS(ADCMUXP_AIN2, ADCMUXN_VSET1P1); /* Optionally, you can change ADC MUX with this function */ + + /* Enable all interrupt at Interrupt Controller 1. So we can check the interrupt flag */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); + + //AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); + //AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); + AD5940_ADCPowerCtrlS(bTRUE); + AD5940_ADCConvtCtrlS(bTRUE); + + while(1) + { + uint32_t rd; + if(AD5940_INTCTestFlag(AFEINTC_1,AFEINTSRC_SINC2RDY)) + { + static uint32_t count; + AD5940_INTCClrFlag(AFEINTSRC_SINC2RDY); + rd = AD5940_ReadAfeResult(AFERESULT_SINC2); + count ++; + /* ADC Sample rate is 800kSPS. SINC3 OSR is 4, SINC2 OSR is 1333. So the final output data rate is 800kSPS/4/1333 = 150.0375Hz */ + if(count == 150) /* Print data @1Hz */ + { + count = 0; + float diff_volt = AD5940_ADCCode2Volt(rd, ADCPGA_GAIN_SEL, 1.82); + printf("ADC Code:%d, diff-volt: %.4f, volt:%.4f\n",rd, diff_volt, diff_volt+1.11); + } + } + } +} + +/** + * @} + * @} + * */ diff --git a/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewd b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewd new file mode 100644 index 0000000..c06a10c --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewp b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewp new file mode 100644 index 0000000..2b84415 --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_ADCPolling.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.6.0"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + <file category="header" condition="TrustZone" name="CMSIS/Core/Include/tz_context.h"/> + <file attr="template" category="sourceC" condition="TZ Secure" name="CMSIS/Core/Template/ARMv8-M/main_s.c" select="Secure mode 'main' module for ARMv8-M" version="1.1.1"/> + <file attr="template" category="sourceC" condition="TZ Secure" name="CMSIS/Core/Template/ARMv8-M/tz_context.c" select="RTOS Context Management (TrustZone for ARMv8-M)" version="1.1.1"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> + <packages useAllLatestPacks="1"/> +</configuration> + + + diff --git a/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.rteconfig b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.rteconfig new file mode 100644 index 0000000..48bddb8 --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.rteconfig @@ -0,0 +1,56 @@ + + + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvoptx b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvoptx new file mode 100644 index 0000000..10b4abf --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvoptx @@ -0,0 +1,282 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_ADCPolling.c + AD5940_ADCPolling.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + + diff --git a/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvprojx b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvprojx new file mode 100644 index 0000000..d72ebd1 --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/AD5940_ADC.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_ADCPolling.c + 1 + ..\AD5940_ADCPolling.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_ADC/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_ADC/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_ADC/ADICUP3029/main.c b/examples/AD5940_ADC/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_ADC/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvoptx b/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvoptx new file mode 100644 index 0000000..8cc987d --- /dev/null +++ b/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_ADCPolling.c + AD5940_ADCPolling.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvprojx b/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvprojx new file mode 100644 index 0000000..b82c0ff --- /dev/null +++ b/examples/AD5940_ADC/NUCLEO-F411/AD5940_ADC.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_ADCPolling.c + 1 + ..\AD5940_ADCPolling.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_ADC/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_ADC/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_ADC/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_ADC/NUCLEO-F411/main.c b/examples/AD5940_ADC/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_ADC/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Amperometric/AD5940Main.c b/examples/AD5940_Amperometric/AD5940Main.c new file mode 100644 index 0000000..6bc6c38 --- /dev/null +++ b/examples/AD5940_Amperometric/AD5940Main.c @@ -0,0 +1,143 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: $Author: nxu2 $ + @brief: Used to control specific application and further process data. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. +*****************************************************************************/ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "Amperometric.h" + +#define APPBUFF_SIZE 1000 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +int32_t AMPShowResult(float *pData, uint32_t DataCount) +{ + /* Print data*/ + for(int i=0;iWuptClkFreq = LFOSCFreq; + /* Configure general parameters */ + pAMPCfg->SeqStartAddr = 0; + pAMPCfg->MaxSeqLen = 512; /* @todo add checker in function */ + pAMPCfg->RcalVal = 10000.0; + pAMPCfg->NumOfData = -1; /* Never stop until you stop it manually by AppAMPCtrl() function */ + + + /* Configure measurement parameters */ + pAMPCfg->AmpODR = 1; /* Time between samples in seconds */ + pAMPCfg->FifoThresh = 4; /* Number of measurements before alerting host microcontroller */ + + pAMPCfg->SensorBias = 0; /* Sensor bias voltage between reference and sense electrodes*/ + pAMPCfg->LptiaRtiaSel = LPTIARTIA_1K; + pAMPCfg->LpTiaRl = LPTIARLOAD_10R; + pAMPCfg->Vzero = 1100; /* Vzero voltage. Voltage on Sense electrode. Unit is mV*/ + + pAMPCfg->ADCRefVolt = 1.82; /* Measure voltage on Vref_1V8 pin */ +} + +void AD5940_Main(void) +{ + uint32_t temp; + + AD5940PlatformCfg(); + AD5940AMPStructInit(); /* Configure your parameters in this function */ + AppAMPInit(AppBuff, APPBUFF_SIZE); /* Initialize AMP application. Provide a buffer, which is used to store sequencer commands */ + AppAMPCtrl(AMPCTRL_START, 0); /* Control AMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppAMPISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + AMPShowResult((float*)AppBuff, temp); /* Show the results to UART */ + } + } +} diff --git a/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewd b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewp b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewp new file mode 100644 index 0000000..7312c06 --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\Amperometric.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.rteconfig b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvoptx b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvoptx new file mode 100644 index 0000000..f46970b --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Amperometric.c + Amperometric.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvprojx b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvprojx new file mode 100644 index 0000000..b87af45 --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/AD5940_Amperometric.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Amperometric.c + 1 + ..\Amperometric.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Amperometric/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Amperometric/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Amperometric/ADICUP3029/main.c b/examples/AD5940_Amperometric/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Amperometric/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Amperometric/Amperometric.c b/examples/AD5940_Amperometric/Amperometric.c new file mode 100644 index 0000000..4f40a47 --- /dev/null +++ b/examples/AD5940_Amperometric/Amperometric.c @@ -0,0 +1,489 @@ +/*! + ***************************************************************************** + @file: Amperometric.c + @author: $Author: mlambe $ + @brief: Amperometric measurement. + @version: $Revision: 766 $ + @date: $Date: 2018-03-21 14:09:35 +0100 (Wed, 21 Mar 2018) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "Amperometric.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppAMPCfg_Type AppAMPCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + .FifoThresh = 5, /* Number of points for FIFO */ + + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .AmpODR = 1.0, /* Sample time in seconds. I.e. every 5 seconds make a measurement */ + .NumOfData = -1, + .RcalVal = 10000.0, /* RCAL = 10kOhm */ + .PwrMod = AFEPWR_LP, + .AMPInited = bFALSE, + .StopRequired = bFALSE, + + /* LPTIA Configure */ + .ExtRtia = bFALSE, /* Set to true if using external RTIA */ + .LptiaRtiaSel = LPTIARTIA_4K, /* COnfigure RTIA */ + .LpTiaRf = LPTIARF_1M, /* Configure LPF resistor */ + .LpTiaRl = LPTIARLOAD_100R, + .ReDoRtiaCal = bTRUE, + .RtiaCalValue = 0, + .ExtRtiaVal = 0, + +/*LPDAC Configure */ + .Vzero = 1100, /* Sets voltage on SE0 and LPTIA */ + .SensorBias = 500, /* Sets voltage between RE0 and SE0 */ + +/* ADC Configure*/ + .ADCPgaGain = ADCPGA_1P5, + .ADCSinc3Osr = ADCSINC3OSR_4, + .ADCSinc2Osr = ADCSINC2OSR_22, + .DataFifoSrc = FIFOSRC_SINC2NOTCH, + .ADCRefVolt = 1.8162, /* Measure voltage on ADCRefVolt pin and enter here*/ +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppAMPGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppAMPCfg_Type**)pCfg = &AppAMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +AD5940Err AppAMPCtrl(int32_t AmpCtrl, void *pPara) +{ + switch (AmpCtrl) + { + case AMPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + AD5940_ReadReg(REG_AFE_ADCDAT); /* Any SPI Operation can wakeup AFE */ + if(AppAMPCfg.AMPInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppAMPCfg.WuptClkFreq*AppAMPCfg.AmpODR)-4-1; + AD5940_WUPTCfg(&wupt_cfg); + + AppAMPCfg.FifoDataCount = 0; /* restart */ + break; + } + case AMPCTRL_STOPNOW: + { + AD5940_ReadReg(REG_AFE_ADCDAT); /* Any SPI Operation can wakeup AFE */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case AMPCTRL_STOPSYNC: + { + AppAMPCfg.StopRequired = bTRUE; + break; + } + case AMPCTRL_SHUTDOWN: + { + AppAMPCtrl(AMPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppAMPSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + SWMatrixCfg_Type sw_cfg; + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + //AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bTRUE; + aferef_cfg.Lp1V8BuffEn = bTRUE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData6Bit = (uint32_t)((AppAMPCfg.Vzero-200)/DAC6BITVOLT_1LSB); + lp_loop.LpDacCfg.DacData12Bit =(int32_t)((AppAMPCfg.SensorBias)/DAC12BITVOLT_1LSB) + lp_loop.LpDacCfg.DacData6Bit*64; + if(lp_loop.LpDacCfg.DacData12Bit>lp_loop.LpDacCfg.DacData6Bit*64) + lp_loop.LpDacCfg.DacData12Bit--; + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = AppAMPCfg.LpTiaRf; + lp_loop.LpAmpCfg.LpTiaRload = AppAMPCfg.LpTiaRl; + if(AppAMPCfg.ExtRtia == bTRUE) + { + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(9)|LPTIASW(2)|LPTIASW(4)|LPTIASW(5)|LPTIASW(12)|LPTIASW(13); + }else + { + lp_loop.LpAmpCfg.LpTiaRtia = AppAMPCfg.LptiaRtiaSel; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(2)|LPTIASW(4)|LPTIASW(12)|LPTIASW(13); + } + AD5940_LPLoopCfgS(&lp_loop); + + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_VZERO0; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_AIN4; + dsp_cfg.ADCBaseCfg.ADCPga = AppAMPCfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + memset(&dsp_cfg.DftCfg, 0, sizeof(dsp_cfg.DftCfg)); + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppAMPCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppAMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + sw_cfg.Dswitch = 0; + sw_cfg.Pswitch = 0; + sw_cfg.Nswitch = 0; + sw_cfg.Tswitch = 0; + AD5940_SWMatrixCfgS(&sw_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_AFECtrlS(AFECTRL_SINC2NOTCH, bFALSE); + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppAMPCfg.InitSeqInfo.SeqId = SEQID_1; + AppAMPCfg.InitSeqInfo.SeqRamAddr = AppAMPCfg.SeqStartAddr; + AppAMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppAMPCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppAMPCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppAMPSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_SINC2; + clks_cal.DataCount = 1; + clks_cal.ADCSinc2Osr = AppAMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppAMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppAMPCfg.SysClkFreq/AppAMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + WaitClks += 15; + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* wait 250us */ + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert*/ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV|AFECTRL_SINC2NOTCH, bFALSE); /* Stop ADC */ + AD5940_SEQGpioCtrlS(0); + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppAMPCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppAMPCfg.MeasureSeqInfo.SeqRamAddr = AppAMPCfg.InitSeqInfo.SeqRamAddr + AppAMPCfg.InitSeqInfo.SeqLen ; + AppAMPCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppAMPCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppAMPCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} +static AD5940Err AppAMPRtiaCal(void) +{ +fImpPol_Type RtiaCalValue; /* Calibration result */ + LPRTIACal_Type lprtia_cal; + AD5940_StructInit(&lprtia_cal, sizeof(lprtia_cal)); + + lprtia_cal.bPolarResult = bTRUE; /* Magnitude + Phase */ + lprtia_cal.AdcClkFreq = AppAMPCfg.AdcClkFreq; + lprtia_cal.SysClkFreq = AppAMPCfg.SysClkFreq; + lprtia_cal.ADCSinc3Osr = ADCSINC3OSR_4; + lprtia_cal.ADCSinc2Osr = ADCSINC2OSR_22; /* Use SINC2 data as DFT data source */ + lprtia_cal.DftCfg.DftNum = DFTNUM_2048; /* Maximum DFT number */ + lprtia_cal.DftCfg.DftSrc = DFTSRC_SINC2NOTCH; /* For frequency under 12Hz, need to optimize DFT source. Use SINC3 data as DFT source */ + lprtia_cal.DftCfg.HanWinEn = bTRUE; + lprtia_cal.fFreq = AppAMPCfg.AdcClkFreq/4/22/2048*3; /* Sample 3 period of signal, 13.317Hz here. Do not use DC method, because it needs ADC/PGA calibrated firstly(but it's faster) */ + lprtia_cal.fRcal = AppAMPCfg.RcalVal; + lprtia_cal.LpTiaRtia = AppAMPCfg.LptiaRtiaSel; + lprtia_cal.LpAmpPwrMod = LPAMPPWR_NORM; + lprtia_cal.bWithCtia = bFALSE; + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppAMPCfg.RtiaCalValue = RtiaCalValue; + + return AD5940ERR_OK; +} +/* This function provide application initialize. */ +AD5940Err AppAMPInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + if(((AppAMPCfg.ReDoRtiaCal == bTRUE) || \ + AppAMPCfg.AMPInited == bFALSE) && AppAMPCfg.ExtRtia == bFALSE) /* Do calibration on the first initializaion */ + { + AppAMPRtiaCal(); + AppAMPCfg.ReDoRtiaCal = bFALSE; + }else + AppAMPCfg.RtiaCalValue.Magnitude = AppAMPCfg.ExtRtiaVal; + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(DFTSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = AppAMPCfg.DataFifoSrc; + fifo_cfg.FIFOThresh = AppAMPCfg.FifoThresh; + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppAMPCfg.AMPInited == bFALSE)||\ + (AppAMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppAMPSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppAMPSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppAMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + /* Initialization sequencer */ + AppAMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppAMPCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppAMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppAMPCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppAMPCfg.MeasureSeqInfo); + +// seq_cfg.SeqEnable = bTRUE; +// AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger. It's disabled in initialization sequence */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppAMPCfg.PwrMod, AFEBW_250KHZ); + AppAMPCfg.AMPInited = bTRUE; /* AMP application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppAMPRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppAMPCfg.NumOfData > 0) + { + AppAMPCfg.FifoDataCount += *pDataCount/4; + if(AppAMPCfg.FifoDataCount >= AppAMPCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppAMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppAMPDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t i, datacount; + datacount = *pDataCount; + float *pOut = (float *)pData; + for(i=0;i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); + + *pCount = 0; + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + FifoCnt = AD5940_FIFOGetCnt(); + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppAMPRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + + /* Process data */ + AppAMPDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + +/* Calculate voltage */ +float AppAMPCalcVoltage(uint32_t ADCcode) +{ + float kFactor = 1.835/1.82; + float fVolt = 0.0; + int32_t tmp = 0; + tmp = ADCcode - 32768; + switch(AppAMPCfg.ADCPgaGain) + { + case ADCPGA_1: + fVolt = ((float)(tmp)/32768)*(AppAMPCfg.ADCRefVolt/1)*kFactor; + break; + case ADCPGA_1P5: + fVolt = ((float)(tmp)/32768)*(AppAMPCfg.ADCRefVolt/1.5f)*kFactor; + break; + case ADCPGA_2: + fVolt = ((float)(tmp)/32768)*(AppAMPCfg.ADCRefVolt/2)*kFactor; + break; + case ADCPGA_4: + fVolt = ((float)(tmp)/32768)*(AppAMPCfg.ADCRefVolt/4)*kFactor; + break; + case ADCPGA_9: + fVolt = ((float)(tmp)/32768)*(AppAMPCfg.ADCRefVolt/9)*kFactor; + break; + } + return fVolt; +} +/* Calculate current in uA */ +float AppAMPCalcCurrent(uint32_t ADCcode) +{ + float fCurrent, fVoltage = 0.0; + fVoltage = AppAMPCalcVoltage(ADCcode); + fCurrent = fVoltage/AppAMPCfg.RtiaCalValue.Magnitude; + + return -fCurrent*1000000; +} diff --git a/examples/AD5940_Amperometric/Amperometric.h b/examples/AD5940_Amperometric/Amperometric.h new file mode 100644 index 0000000..f8cf5d5 --- /dev/null +++ b/examples/AD5940_Amperometric/Amperometric.h @@ -0,0 +1,94 @@ +/*! + ***************************************************************************** + @file: Amperometric.h + @author: $Author: mlambe $ + @brief: Amperometric measurement header file. + @version: $Revision: 766 $ + @date: $Date: 2018-03-21 14:09:35 +0100 (Wed, 21 Mar 2018) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _AMPEROMETRIC_H_ +#define _AMPEROMETRIC_H_ +#include "AD5940.H" +#include "stdio.h" +#include "string.h" +#include "math.h" + +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration. +*/ + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppAMPInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; + +/* Application related parameters */ + BoolFlag ReDoRtiaCal; /* Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /* The real frequency of system clock */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + float AmpODR; /* in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically.*/ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float RcalVal; /* Rcal value in Ohm */ + float ADCRefVolt; /* Measured 1.82 V reference*/ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + uint32_t ADCPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /* SINC3 OSR selection. ADCSINC3OSR_2, ADCSINC3OSR_4 */ + uint8_t ADCSinc2Osr; /* SINC2 OSR selection. ADCSINC2OSR_22...ADCSINC2OSR_1333 */ + uint32_t DataFifoSrc; /* DataFIFO source. FIFOSRC_SINC3, FIFOSRC_DFT, FIFOSRC_SINC2NOTCH, FIFOSRC_VAR, FIFOSRC_MEAN*/ + uint32_t LptiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t LpTiaRf; /* Rfilter select */ + uint32_t LpTiaRl; /* SE0 Rload select */ + fImpPol_Type RtiaCalValue; /* Calibrated Rtia value */ + float Vzero; /* Voltage on SE0 pin and Vzero, optimumly 1100mV*/ + float SensorBias; /* Sensor bias voltage = VRE0 - VSE0 */ + BoolFlag ExtRtia; /* Use internal or external Rtia */ + float ExtRtiaVal; /* External Rtia value if using one */ + BoolFlag AMPInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +/* End */ +}AppAMPCfg_Type; + +/** + * int32_t type Impedance result in Cartesian coordinate +*/ +typedef struct +{ + float Current; + float Voltage; +}fAmpRes_Type; + + + +#define AMPCTRL_START 0 +#define AMPCTRL_STOPNOW 1 +#define AMPCTRL_STOPSYNC 2 +#define AMPCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppAMPGetCfg(void *pCfg); +AD5940Err AppAMPInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppAMPISR(void *pBuff, uint32_t *pCount); +AD5940Err AppAMPCtrl(int32_t AmpCtrl, void *pPara); +float AppAMPCalcVoltage(uint32_t ADCcode); +float AppAMPCalcCurrent(uint32_t ADCcode); + +#endif diff --git a/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvoptx b/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvoptx new file mode 100644 index 0000000..2ef9177 --- /dev/null +++ b/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Amperometric.c + Amperometric.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvprojx b/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvprojx new file mode 100644 index 0000000..06947bf --- /dev/null +++ b/examples/AD5940_Amperometric/NUCLEO-F411/AD5940_Amperometric.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Amperometric.c + 1 + ..\Amperometric.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Amperometric/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Amperometric/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Amperometric/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Amperometric/NUCLEO-F411/main.c b/examples/AD5940_Amperometric/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Amperometric/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BATImpedance/AD5940Main.c b/examples/AD5940_BATImpedance/AD5940Main.c new file mode 100644 index 0000000..eccc17f --- /dev/null +++ b/examples/AD5940_BATImpedance/AD5940Main.c @@ -0,0 +1,138 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup Battery_Example + * @{ + */ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "BATImpedance.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +int32_t BATShowResult(uint32_t *pData, uint32_t DataCount) +{ + fImpCar_Type *pImp = (fImpCar_Type*)pData; + float freq; + AppBATCtrl(BATCTRL_GETFREQ, &freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pBATCfg->MaxSeqLen = 512; + pBATCfg->RcalVal = 50.0; /* Value of RCAL on EVAL-AD5941BATZ board is 50mOhm */ + pBATCfg->ACVoltPP = 300.0f; /* Pk-pk amplitude is 300mV */ + pBATCfg->DCVolt = 1200.0f; /* Offset voltage of 1.2V*/ + pBATCfg->DftNum = DFTNUM_8192; + + pBATCfg->FifoThresh = 2; /* 2 results in FIFO, real and imaginary part. */ + + pBATCfg->SinFreq = 200; /* Sin wave frequency. THis value has no effect if sweep is enabled */ + + pBATCfg->SweepCfg.SweepEn = bTRUE; /* Set to bTRUE to enable sweep function */ + pBATCfg->SweepCfg.SweepStart = 1.0f; /* Start sweep at 1Hz */ + pBATCfg->SweepCfg.SweepStop = 50000.0f; /* Finish sweep at 1000Hz */ + pBATCfg->SweepCfg.SweepPoints = 50; /* 100 frequencies in the sweep */ + pBATCfg->SweepCfg.SweepLog = bTRUE; /* Set to bTRUE to use LOG scale. Set bFALSE to use linear scale */ + +} + +void AD5940_Main(void) +{ + uint32_t temp; + AD5940PlatformCfg(); + + AD5940BATStructInit(); /* Configure your parameters in this function */ + + AppBATInit(AppBuff, APPBUFF_SIZE); /* Initialize BAT application. Provide a buffer, which is used to store sequencer commands */ + AppBATCtrl(BATCTRL_MRCAL, 0); /* Measur RCAL each point in sweep */ + AppBATCtrl(BATCTRL_START, 0); + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppBATISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + AD5940_Delay10us(100000); + BATShowResult(AppBuff, temp); /* Print measurement results over UART */ + AD5940_SEQMmrTrig(SEQID_0); /* Trigger next measurement ussing MMR write*/ + } + } +} + +/** + * @} + * @} + * */ diff --git a/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewd b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewd new file mode 100644 index 0000000..d9e97ce --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewd @@ -0,0 +1,2834 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewp b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewp new file mode 100644 index 0000000..f358751 --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.ewp @@ -0,0 +1,2166 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + AD5940Lib + + $PROJ_DIR$\..\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\BATImpedance.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + $PROJ_DIR$\RTE\RTE_Components.h + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.rteconfig b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.rteconfig new file mode 100644 index 0000000..06593ae --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.rteconfig @@ -0,0 +1,56 @@ + + + + + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvoptx b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvoptx new file mode 100644 index 0000000..8b7311f --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvoptx @@ -0,0 +1,312 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + AppBATCfg + + + 1 + 1 + FifoCnt + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + System Viewer\GPIO0 + 35905 + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BATImpedance.c + BATImpedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvprojx b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvprojx new file mode 100644 index 0000000..5c876c5 --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/AD5940_BATImpedance.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BATImpedance.c + 1 + ..\BATImpedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_BATImpedance/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_BATImpedance/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..814d3bf --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,171 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* This function is used to set Dn on Arduino shield(and set it to output) */ +void Arduino_WriteDn(uint32_t Dn, BoolFlag bHigh) +{ + if(Dn&(1<<3)) //set D3, P0.13 + { + pADI_GPIO0->OEN |= 1<<13; + if(bHigh) + pADI_GPIO0->SET = 1<<13; + else + pADI_GPIO0->CLR = 1<<13; + } + if(Dn&(1<<4))//Set D4, P0.9 + { + pADI_GPIO0->OEN |= 1<<9; + if(bHigh) + pADI_GPIO0->SET = 1<<9; + else + pADI_GPIO0->CLR = 1<<9; + } +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_BATImpedance/ADICUP3029/main.c b/examples/AD5940_BATImpedance/ADICUP3029/main.c new file mode 100644 index 0000000..6fadc26 --- /dev/null +++ b/examples/AD5940_BATImpedance/ADICUP3029/main.c @@ -0,0 +1,141 @@ +/* +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_BATImpedance/BATImpedance.c b/examples/AD5940_BATImpedance/BATImpedance.c new file mode 100644 index 0000000..5187bc8 --- /dev/null +++ b/examples/AD5940_BATImpedance/BATImpedance.c @@ -0,0 +1,662 @@ +/*! + ***************************************************************************** + @file: BATImpedance.c + @author: Neo Xu + @brief: Battery impedance measurement sequences. + ----------------------------------------------------------------------------- +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "BATImpedance.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppBATCfg_Type AppBATCfg = +{ + .state = STATE_IDLE, + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .BatODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + + .PwrMod = AFEPWR_LP, + .ACVoltPP = 800.0, + .DCVolt = 1100.0f, + .SinFreq = 50000.0, /* 50kHz */ + .RcalVal = 50.0, /* 50mOhm */ + + .ADCSinc3Osr = ADCSINC3OSR_4, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .DftNum = DFTNUM_16384, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .FifoThresh = 4, + .BATInited = bFALSE, + .StopRequired = bFALSE, + .MeasSeqCycleCount = 0, + + .SweepCfg.SweepEn = bTRUE, + .SweepCfg.SweepStart = 1000, + .SweepCfg.SweepStop = 100000.0, + .SweepCfg.SweepPoints = 101, + .SweepCfg.SweepLog = bFALSE, + .SweepCfg.SweepIndex = 0, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppBATGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppBATCfg_Type**)pCfg = &AppBATCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + + +static void PreCharge(unsigned char channel) +{ + void Arduino_WriteDn(uint32_t Dn, BoolFlag bHigh); + switch(channel) + { + case PRECHARGE_CH1: //00 + Arduino_WriteDn(1<<3, bFALSE); //d3 + Arduino_WriteDn(1<<4, bFALSE); //d4 + break; + case PRECHARGE_CH2: //01 + Arduino_WriteDn(1<<3, bTRUE); + Arduino_WriteDn(1<<4, bFALSE); + break; + case PRECHARGE_CH3://10 + Arduino_WriteDn(1<<3, bFALSE); + Arduino_WriteDn(1<<4, bTRUE); + break; + default: + break; + } + AD5940_Delay10us(PRECHARGE_WAIT_MS*100); + Arduino_WriteDn(1<<3, bTRUE); //d3 + Arduino_WriteDn(1<<4, bTRUE); //d4 +} + +AD5940Err AppBATCtrl(int32_t BatCtrl, void *pPara) +{ + switch (BatCtrl) + { + case BATCTRL_START: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppBATCfg.BATInited == bFALSE) + return AD5940ERR_APPERROR; + AD5940_WriteReg(REG_AFE_SWMUX, 1<<0); /* control ADG636 to measure battery */ + AD5940_WriteReg(REG_AFE_SYNCEXTDEVICE, 0x0); + PreCharge(PRECHARGE_BAT); + PreCharge(PRECHARGE_AMP); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); + AD5940_FIFOThrshSet(AppBATCfg.FifoThresh); /* DFT result contains both real and image. */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); + AppBATCfg.state = STATE_BATTERY; + /* Trigger sequence using MMR write */ + AD5940_SEQMmrTrig(SEQID_0); + AppBATCfg.FifoDataCount = 0; /* restart */ + + break; + } + case BATCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case BATCTRL_STOPSYNC: + { + AppBATCfg.StopRequired = bTRUE; + break; + } + case BATCTRL_GETFREQ: + if(pPara) + { + if(AppBATCfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppBATCfg.FreqofData; + else + *(float*)pPara = AppBATCfg.SinFreq; + } + break; + case BATCTRL_SHUTDOWN: + { + AppBATCtrl(BATCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + case BATCTRL_MRCAL: + if(AD5940_WakeUp(10) > 10) + return AD5940ERR_WAKEUP; + //Settle input RC filter. + AD5940_WriteReg(REG_AFE_SWMUX, 0); //control ADG636 to measure rcal + AD5940_WriteReg(REG_AFE_SYNCEXTDEVICE, 0x4); + PreCharge(PRECHARGE_RCAL); + PreCharge(PRECHARGE_AMP); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); + AD5940_FIFOThrshSet(2); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); //enable FIFO + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_Delay10us(10000); + AppBATMeasureRCAL(); + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppBATSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Disable all firstly. */ + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control, Use LP loop to provide DC Bias voltage. */ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + /* Determine buffer gain according to ACVoltPP */ + hs_loop.HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + hs_loop.HsDacCfg.HsDacGain = HSDACGAIN_1; + hs_loop.HsDacCfg.HsDacUpdateRate = 0x1B; //the maximum update rate is 16MHz/7 + + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hs_loop.HsTiaCfg.HstiaCtia = 31; //HSTIA is not used. + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_10K; + + hs_loop.SWMatCfg.Dswitch = SWD_CE0; + hs_loop.SWMatCfg.Pswitch = SWP_AIN1; + hs_loop.SWMatCfg.Nswitch = SWN_AIN0; //AIN0 is connected to AIN4 externally by JP3. + hs_loop.SWMatCfg.Tswitch = 0; //T switch is not used. + + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; + hs_loop.WgCfg.OffsetCalEn = bFALSE; + if(AppBATCfg.SweepCfg.SweepEn == bTRUE) + { + AppBATCfg.FreqofData = AppBATCfg.SweepCfg.SweepStart; + AppBATCfg.SweepCurrFreq = AppBATCfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppBATCfg.SweepCfg, &AppBATCfg.SweepNextFreq); + sin_freq = AppBATCfg.SweepCurrFreq; + } + else + { + sin_freq = AppBATCfg.SinFreq; + AppBATCfg.FreqofData = sin_freq; + } + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppBATCfg.SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppBATCfg.ACVoltPP/800.0f*2047 + 0.5f); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + //Use LP loop to output bias voltage on AIN4 pin, which provides voltage on AIN0(N switch). + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_12BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_6BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData12Bit = (uint32_t)((AppBATCfg.DCVolt-200)/2200.0f*4095); + lp_loop.LpDacCfg.DacData6Bit = 31; //not used. Set it to middle value. + + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bFALSE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = LPTIARF_20K; //External cap is 1uF. + lp_loop.LpAmpCfg.LpTiaRload = LPTIARLOAD_SHORT; + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(7)|LPTIASW(5)|LPTIASW(9); + AD5940_LPLoopCfgS(&lp_loop); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_AIN2; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_AIN3; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1P5; + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBATCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBATCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppBATCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBATCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBATCfg.HanWinEn; + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one external command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppBATCfg.InitSeqInfo.SeqId = SEQID_1; + AppBATCfg.InitSeqInfo.SeqRamAddr = AppBATCfg.SeqStartAddr; + AppBATCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppBATCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBATCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +//the sequence used to measure battery response voltage. +static AD5940Err AppBATSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBATCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppBATCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBATCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBATCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBATCfg.SysClkFreq/AppBATCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* wait 250us for reference power up from hibernate mode. */ + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50000)); /* Wait for ADC ready. */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT/*|AFECTRL_WG*/|AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bFALSE); /* Stop ADC convert and DFT */ + //AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + AppBATCfg.MeasSeqCycleCount = AD5940_SEQCycleTime(); + AppBATCfg.MaxODR = 1/(((AppBATCfg.MeasSeqCycleCount + 10) / 16.0)* 1E-6) ; + if(AppBATCfg.BatODR > AppBATCfg.MaxODR) + { + /* We have requested a sampling rate that cannot be achieved with the time it + takes to acquire a sample. + */ + AppBATCfg.BatODR = AppBATCfg.MaxODR; + } + + if(error == AD5940ERR_OK) + { + AppBATCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppBATCfg.MeasureSeqInfo.SeqRamAddr = AppBATCfg.InitSeqInfo.SeqRamAddr + AppBATCfg.InitSeqInfo.SeqLen ; + AppBATCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppBATCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBATCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/* This function provide application initialize. */ +AD5940Err AppBATInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppBATCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppBATCfg.BATInited == bFALSE)||\ + (AppBATCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + /* Generate initialize sequence */ + error = AppBATSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + /* Generate measurement sequence */ + error = AppBATSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + AppBATCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + /* Initialization sequencer */ + AppBATCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBATCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppBATCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + if(AppBATCfg.SweepCfg.SweepEn == bTRUE) + AppBATCheckFreq(AppBATCfg.SweepCfg.SweepStart); + else + AppBATCheckFreq(AppBATCfg.SinFreq); + /* Measurement sequence */ + AppBATCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBATCfg.MeasureSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + AD5940_AFEPwrBW(AppBATCfg.PwrMod, AFEBW_250KHZ); + AD5940_WriteReg(REG_AFE_SWMUX, 1<<1); + AppBATCfg.BATInited = bTRUE; /* BAT application has been initialized. */ + return AD5940ERR_OK; +} + +/* Depending on frequency of Sin wave set optimum filter settings */ +AD5940Err AppBATCheckFreq(float freq) +{ + DSPCfg_Type dsp_cfg; + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + uint32_t SeqCmdBuff[2]; + uint32_t SRAMAddr = 0;; + /* Step 1: Check Frequency */ + if(freq < 0.51) + { + AppBATCfg.ADCSinc2Osr = ADCSINC2OSR_1067; + AppBATCfg.ADCSinc3Osr = ADCSINC3OSR_4; + AppBATCfg.DftSrc = DFTSRC_SINC2NOTCH; + }else if(freq < 5 ) + { + AppBATCfg.ADCSinc2Osr = ADCSINC2OSR_640; + AppBATCfg.ADCSinc3Osr= ADCSINC3OSR_4; + AppBATCfg.DftSrc = DFTSRC_SINC2NOTCH; + }else if(freq <450) + { + AppBATCfg.ADCSinc2Osr = ADCSINC2OSR_178; + AppBATCfg.ADCSinc3Osr = ADCSINC3OSR_4; + AppBATCfg.DftSrc = DFTSRC_SINC2NOTCH; + }else if(freq < 80000) + { + AppBATCfg.ADCSinc3Osr = ADCSINC3OSR_4; + AppBATCfg.ADCSinc2Osr = ADCSINC2OSR_178; + AppBATCfg.DftSrc = DFTSRC_SINC3; + } + /* Step 2: Adjust ADCFILTERCON */ + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_AIN2; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_AIN3; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1P5; + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBATCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBATCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppBATCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBATCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBATCfg.HanWinEn; + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Step 3: Calculate clocks needed to get result to FIFO and update sequencer wait command */ + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBATCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppBATCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBATCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBATCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBATCfg.SysClkFreq/AppBATCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Find start address of sequence in SRAM + Update WaitClks */ + SRAMAddr = AppBATCfg.MeasureSeqInfo.SeqRamAddr; + SeqCmdBuff[0] = SEQ_WAIT(WaitClks); + AD5940_SEQCmdWrite(SRAMAddr+4, SeqCmdBuff, 1); + + + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppBATRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppBATCfg.NumOfData > 0) + { + AppBATCfg.FifoDataCount += *pDataCount/4; + if(AppBATCfg.FifoDataCount >= AppBATCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppBATCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppBATCfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppBATCfg.SweepNextFreq, AppBATCfg.SysClkFreq); + AppBATCheckFreq(AppBATCfg.SweepNextFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppBATDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t DftResCount = DataCount/2; + + fImpCar_Type * const pOut = (fImpCar_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + DataCount = (DataCount/2)*2; /* We expect both Real and imaginary result. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal; + BatVolt.Image = pSrcData->Image; + pSrcData ++; + BatImp = AD5940_ComplexDivFloat(&BatVolt, &AppBATCfg.RcalVolt); //ratio measurement, Zbat = Vbat/Vrcal * Rcal; + BatImp.Image *= AppBATCfg.RcalVal; + BatImp.Real *= AppBATCfg.RcalVal; + pOut[i] = BatImp; + // printf("i: %d , %.2f , %.2f , %.2f , %.2f , %.2f , %.2f , %.2f\n",AppBATCfg.SweepCfg.SweepIndex, AppBATCfg.SweepCurrFreq, BatImp.Real, BatImp.Image, AppBATCfg.RcalVolt.Real, AppBATCfg.RcalVolt.Image, AppBATCfg.RcalVoltTable[AppBATCfg.SweepCfg.SweepIndex][0], AppBATCfg.RcalVoltTable[AppBATCfg.SweepCfg.SweepIndex][1]); + } + *pDataCount = DftResCount; + } + /* Calculate next frequency point */ + if(AppBATCfg.SweepCfg.SweepEn == bTRUE) + { + AppBATCfg.FreqofData = AppBATCfg.SweepCurrFreq; + AppBATCfg.SweepCurrFreq = AppBATCfg.SweepNextFreq; + if(AppBATCfg.state == STATE_BATTERY) + { + AppBATCfg.RcalVolt.Real = AppBATCfg.RcalVoltTable[AppBATCfg.SweepCfg.SweepIndex][0]; + AppBATCfg.RcalVolt.Image = AppBATCfg.RcalVoltTable[AppBATCfg.SweepCfg.SweepIndex][1]; + } + AD5940_SweepNext(&AppBATCfg.SweepCfg, &AppBATCfg.SweepNextFreq); + } + return AD5940ERR_OK; +} + +/** +*/ +AD5940Err AppBATISR(void *pBuff, uint32_t *pCount) +{ + uint32_t FifoCnt; + if(AppBATCfg.BATInited == bFALSE) + return AD5940ERR_APPERROR; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + *pCount = 0; + + if(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 2 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/2)*2; + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppBATRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter hibernate mode */ + /* Process data */ + AppBATDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + +AD5940Err AppBATMeasureRCAL(void) +{ + uint32_t buff[100]; + uint32_t temp; + AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH, bFALSE); /* Disable INT0 interrupt for RCAL measurement. */ + AppBATCfg.state = STATE_RCAL; + if(AppBATCfg.SweepCfg.SweepEn) + { + uint32_t i; + for(i=0;i + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BATImpedance.c + BATImpedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BATImpedance/NUCLEO-F411/AD5940_BATImpedance.uvprojx b/examples/AD5940_BATImpedance/NUCLEO-F411/AD5940_BATImpedance.uvprojx new file mode 100644 index 0000000..4309293 --- /dev/null +++ b/examples/AD5940_BATImpedance/NUCLEO-F411/AD5940_BATImpedance.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BATImpedance.c + 1 + ..\BATImpedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_BATImpedance/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_BATImpedance/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..2ba36d5 --- /dev/null +++ b/examples/AD5940_BATImpedance/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,230 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define ARDUINO_D3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define ARDUINO_D4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +#define ARDUINO_D3_PIN GPIO_PIN_3 +#define ARDUINO_D3_PORT GPIOB +#define ARDUINO_D4_PIN GPIO_PIN_5 +#define ARDUINO_D4_PORT GPIOB + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +/* This function is used to set Dn on Arduino shield(and set it to output) */ +void Arduino_WriteDn(uint32_t Dn, BoolFlag bHigh) +{ + if(Dn&(1<<3)) //set D3, P0.13 + { + if(bHigh) + HAL_GPIO_WritePin(ARDUINO_D3_PORT, ARDUINO_D3_PIN, GPIO_PIN_SET); + else + HAL_GPIO_WritePin(ARDUINO_D3_PORT, ARDUINO_D3_PIN, GPIO_PIN_RESET); + } + if(Dn&(1<<4))//Set D4, P0.9 + { + if(bHigh) + HAL_GPIO_WritePin(ARDUINO_D4_PORT, ARDUINO_D4_PIN, GPIO_PIN_SET); + else + HAL_GPIO_WritePin(ARDUINO_D4_PORT, ARDUINO_D4_PIN, GPIO_PIN_RESET); + } +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + + //D3 D4 GPIO + ARDUINO_D3_GPIO_CLK_ENABLE(); + ARDUINO_D4_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = ARDUINO_D3_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(ARDUINO_D3_PORT, &GPIO_InitStruct); + GPIO_InitStruct.Pin = ARDUINO_D4_PIN; + HAL_GPIO_Init(ARDUINO_D4_PORT, &GPIO_InitStruct); + + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_BATImpedance/NUCLEO-F411/main.c b/examples/AD5940_BATImpedance/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_BATImpedance/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BATImpedance/ad5940.c b/examples/AD5940_BATImpedance/ad5940.c new file mode 100644 index 0000000..65621a6 --- /dev/null +++ b/examples/AD5940_BATImpedance/ad5940.c @@ -0,0 +1,4392 @@ +/** + * @file ad5940.c + * @brief AD5940 library. This file contains all AD5940 library functions. + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" + +/*! \mainpage AD5940 Library Introduction + * + * ![AD5940 EVAL Board](https://www.analog.com/-/media/analog/en/evaluation-board-images/images/eval-ad5940elcztop-web.gif?h=500&thn=1&hash=1F38F7CC1002894616F74D316365C0A2631C432B "ADI logo") + * + * # Introduction + * + * The documentation is for AD594x library and examples. + * + * # Manual Structure + * + * @ref AD5940_Library + * - @ref AD5940_Functions + * - @ref TypeDefinitions + * @ref AD5940_Standard_Examples + * @ref AD5940_System_Examples + * + * # How to Use It + * We provide examples that can directly run out of box. + * The files can generally be separated to three parts: + * - AD5940 Library files. ad5940.c and ad5940.h specifically. These two files are shared among all examples. + * - AD5940 System Examples. The system examples mean system level application like measuring impedance. + * - Standard examples. These include basic block level examples like ADC. It shows how to setup and use one specific block. + * + * ## Requirements to run these examples + * ### Hardware + * - Use EVAL_AD5940 or EVAL_AD5941. The default MCU board we used is ADICUP3029. We also provide project for ST NUCLEO board. + * - Or use EVAL_ADuCM355 + * ### Software + * - Pull all the source file from [GitHub](https://github.com/analogdevicesinc/ad5940-examples.git) + * - CMSIS pack that related to specific MCU. This normally is done by IDE you use. + * + * ## Materials + * Please use this library together with following materials. + * - [AD5940 Data Sheet](https://www.analog.com/media/en/technical-documentation/data-sheets/AD5940.pdf) + * - [AD5940 Eval Board](https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/EVAL-AD5940.html) + * + */ + +/* Remove below variables after AD594x is released. */ +static BoolFlag bIsS2silicon = bFALSE; + +/* Declare of SPI functions used to read/write registers */ +#ifndef CHIPSEL_M355 +static uint32_t AD5940_SPIReadReg(uint16_t RegAddr); +static void AD5940_SPIWriteReg(uint16_t RegAddr, uint32_t RegData); +#else +static uint32_t AD5940_D2DReadReg(uint16_t RegAddr); +static void AD5940_D2DWriteReg(uint16_t RegAddr, uint32_t RegData); +#endif + +/** + * @addtogroup AD5940_Library + * The library functions, structures and constants. + * @{ + * @defgroup AD5940_Functions + * @{ + * @defgroup Function_Helpers + * @brief The functions with no hardware access. They are helpers. + * @{ + * @defgroup Sequencer_Generator_Functions + * @brief The set of function used to track all register read and write once it's enabled. It can translate register write operation to sequencer commands. + * @{ +*/ + +#define SEQUENCE_GENERATOR /*!< Build sequence generator part in to lib. Comment this line to remove this feature */ + +#ifdef SEQUENCE_GENERATOR +/** + * Structure used to store register information(address and its data) + * */ +typedef struct +{ + uint32_t RegAddr :8; /**< 8bit address is enough for sequencer */ + uint32_t RegValue :24; /**< Reg data is limited to 24bit by sequencer */ +}SEQGenRegInfo_Type; + +/** + * Sequencer generator data base. +*/ +struct +{ + BoolFlag EngineStart; /**< Flag to mark start of the generator */ + uint32_t BufferSize; /**< Total buffer size */ + + uint32_t *pSeqBuff; /**< The buffer for sequence generator(both sequences and RegInfo) */ + uint32_t SeqLen; /**< Generated sequence length till now */ + SEQGenRegInfo_Type *pRegInfo; /**< Pointer to buffer where stores register info */ + uint32_t RegCount; /**< The count of register info available in buffer *pRegInfo. */ + AD5940Err LastError; /**< The last error message. */ +}SeqGenDB; /* Data base of Seq Generator */ + +/** + * @brief Manually input a command to sequencer generator. + * @param CmdWord: The 32-bit width sequencer command word. @ref Sequencer_Helper can be used to generate commands. + * @return None; +*/ +void AD5940_SEQGenInsert(uint32_t CmdWord) +{ + uint32_t temp; + temp = SeqGenDB.RegCount + SeqGenDB.SeqLen; + /* Generate Sequence command */ + if(temp < SeqGenDB.BufferSize) + { + SeqGenDB.pSeqBuff[SeqGenDB.SeqLen] = CmdWord; + SeqGenDB.SeqLen ++; + } + else /* There is no buffer */ + SeqGenDB.LastError = AD5940ERR_BUFF; +} + +/** + * @brief Search data-base to get current register value. + * @param RegAddr: The register address. + * @param pIndex: Pointer to a variable that used to store index of found register-info. + * @return Return AD5940ERR_OK if register found in data-base. Otherwise return AD5940ERR_SEQREG. +*/ +static AD5940Err AD5940_SEQGenSearchReg(uint32_t RegAddr, uint32_t *pIndex) +{ + uint32_t i; + + RegAddr = (RegAddr>>2)&0xff; + for(i=0;i>2)&0xff; + SeqGenDB.pRegInfo[0].RegValue = RegData&0x00ffffff; + SeqGenDB.RegCount ++; + } + else /* There is no more buffer */ + { + SeqGenDB.LastError = AD5940ERR_BUFF; + } +} + +/** + * @brief Get current register value. If we have record in data-base, read it. Otherwise, return the register default value. + * @param RegAddr: The register address. + * @return Return register value. +*/ +static uint32_t AD5940_SEQReadReg(uint16_t RegAddr) +{ + uint32_t RegIndex, RegData; + + if(AD5940_SEQGenSearchReg(RegAddr, &RegIndex) != AD5940ERR_OK) + { + /* There is no record in data-base, read the default value. */ + AD5940_SEQGenGetRegDefault(RegAddr, &RegData); + AD5940_SEQRegInfoInsert(RegAddr, RegData); + } + else + { + /* return the current register value stored in data-base */ + RegData = SeqGenDB.pRegInfo[RegIndex].RegValue; + } + + return RegData; +} + +/** + * @brief Generate a sequencer command to write register. If the register address is out of range, it won't generate a command. + * This function will also update the register-info in data-base to record current register value. + * @param RegAddr: The register address. + * @param RegData: The register value. + * @return Return None. +*/ +static void AD5940_SEQWriteReg(uint16_t RegAddr, uint32_t RegData) +{ + uint32_t RegIndex; + + if(RegAddr > 0x21ff) + { + SeqGenDB.LastError = AD5940ERR_ADDROR; /* address out of range */ + return; + } + + if(AD5940_SEQGenSearchReg(RegAddr, &RegIndex) == AD5940ERR_OK) + { + /* Store register value */ + SeqGenDB.pRegInfo[RegIndex].RegValue = RegData; + /* Generate Sequence command */ + AD5940_SEQGenInsert(SEQ_WR(RegAddr, RegData)); + } + else + { + AD5940_SEQRegInfoInsert(RegAddr, RegData); + /* Generate Sequence command */ + AD5940_SEQGenInsert(SEQ_WR(RegAddr, RegData)); + } +} + +/** + * @brief Initialize sequencer generator with specified buffer. + * The buffer is used to store sequencer generated and record register value changes. + * The command is stored from start address of buffer while register value is stored from end of buffer. + * Buffer[0] : First sequencer command; + * Buffer[1] : Second Sequencer command; + * ... + * Buffer[Last-1]: The second register value record. + * Buffer[Last]: The first register value record. + * @param pBuffer: Pointer to the buffer. + * @param BufferSize: The buffer length. + * @return Return None. +*/ +void AD5940_SEQGenInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + if(BufferSize < 2) return; + SeqGenDB.BufferSize = BufferSize; + SeqGenDB.pSeqBuff = pBuffer; + SeqGenDB.pRegInfo = (SEQGenRegInfo_Type*)pBuffer + BufferSize - 1; /* Point to the last element in buffer */ + SeqGenDB.SeqLen = 0; + + SeqGenDB.RegCount = 0; + SeqGenDB.LastError = AD5940ERR_OK; + SeqGenDB.EngineStart = bFALSE; +} + +/** + * @brief Get sequencer command generated. + * @param ppSeqCmd: Pointer to a variable(pointer) used to store the pointer to generated sequencer command. + * @param pSeqLen: Pointer to a variable that used to store how many commands available in buffer. + * @return Return lasterror. +*/ +AD5940Err AD5940_SEQGenFetchSeq(const uint32_t **ppSeqCmd, uint32_t *pSeqLen) +{ + AD5940Err lasterror; + + if(ppSeqCmd) + *ppSeqCmd = SeqGenDB.pSeqBuff; + if(pSeqLen) + *pSeqLen = SeqGenDB.SeqLen; + + //SeqGenDB.SeqLen = 0; /* Start a new sequence */ + lasterror = SeqGenDB.LastError; + //SeqGenDB.LastError = AD5940ERR_OK; /* Clear error message */ + return lasterror; +} + +/** + * @brief Start or stop the sequencer generator. Once started, the register write will be recorded to sequencer generator. + * Once it's disabled, the register write is written to AD5940 directly by SPI bus. + * @param bFlag: Enable or disable sequencer generator. + * @return Return None. +*/ +void AD5940_SEQGenCtrl(BoolFlag bFlag) +{ + if(bFlag == bFALSE) /* Disable sequence generator */ + { + SeqGenDB.EngineStart = bFALSE; + } + else + { + SeqGenDB.SeqLen = 0; + SeqGenDB.LastError = AD5940ERR_OK; /* Clear error message */ + SeqGenDB.EngineStart = bTRUE; + } +} + +/** + * @brief Calculate the number of cycles in the sequence + * @return Return Number of ACLK Cycles that a generated sequence will take. +*/ +uint32_t AD5940_SEQCycleTime(void) +{ + uint32_t i, Cycles, Cmd; + Cycles = 0; + for(i=0;i> 30) & 0x3; + if (Cmd & 0x2) + { + /* A write command */ + Cycles += 1; + } + else + { + if (Cmd & 0x1) + { + /* Timeout Command */ + Cycles += 1; + } + else + { + /* Wait command */ + Cycles += SeqGenDB.pSeqBuff[i] & 0x3FFFFFFF; + } + } + } + return Cycles; +} +#endif +/** + * @} Sequencer_Generator_Functions +*/ + +/** + * Check if an uint8_t value exist in table. +*/ +static int32_t _is_value_in_table(uint8_t value, const uint8_t *table, uint8_t len, uint8_t *index) +{ + for(int i=0; iADCRate == ADCRATE_800KHZ && pFilterInfo->ADCSinc3Osr == ADCSINC3OSR_2)||\ + (pFilterInfo->ADCRate == ADCRATE_1P6MHZ && pFilterInfo->ADCSinc3Osr != ADCSINC3OSR_2)) + { + //this combination suits for filter: + //SINC3 OSR2, for 800kSPS + //and SINC3 OSR4 and OSR5 for 1.6MSPS, + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_533, ADCSINC2OSR_667,ADCSINC2OSR_800, ADCSINC2OSR_889, ADCSINC2OSR_1333}; + const uint8_t dl_50Hz[] = {15,12,10,9,6}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_50Hz[index]; + return bTRUE; + } + } + else if(pFilterInfo->ADCRate == ADCRATE_1P6MHZ && pFilterInfo->ADCSinc3Osr == ADCSINC3OSR_2) + { + //this combination suits for filter: + //SINC3 OSR2 for 1.6MSPS + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_889, ADCSINC2OSR_1067, ADCSINC2OSR_1333}; + const uint8_t dl_50Hz[] = {18,15,12}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_50Hz[index]; + return bTRUE; + } + } + else if(pFilterInfo->ADCRate == ADCRATE_800KHZ && pFilterInfo->ADCSinc3Osr != ADCSINC3OSR_2) + { + //this combination suits for filter: + //SINC3 OSR4 and OSR5 for 800kSPS, + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_178, ADCSINC2OSR_267, ADCSINC2OSR_533, ADCSINC2OSR_640,\ + ADCSINC2OSR_800, ADCSINC2OSR_1067}; + const uint8_t dl_50Hz[] = {18,12,6,5,4,3}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_50Hz[index]; + return bTRUE; + } + } + *dl = 0; + return bFALSE; +} + +/** + * @brief return if the SINC3/SINC2 combination is available for notch 60Hz filter. + * If it's not availabe, hardware automatically bypass Notch even if it's enabled. + * @param pFilterInfo the filter configuration, need sinc2/sinc3 osr and adc data rate information. + * @return return bTRUE if notch 60Hz filter is available. +*/ +BoolFlag AD5940_Notch60HzAvailable(ADCFilterCfg_Type *pFilterInfo, uint8_t *dl) +{ + if((pFilterInfo->ADCRate == ADCRATE_800KHZ && pFilterInfo->ADCSinc3Osr == ADCSINC3OSR_2)||\ + (pFilterInfo->ADCRate == ADCRATE_1P6MHZ && pFilterInfo->ADCSinc3Osr != ADCSINC3OSR_2)) + { + //this combination suits for filter: + //SINC3 OSR2, for 800kSPS + //and SINC3 OSR4 and OSR5 for 1.6MSPS, + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_667, ADCSINC2OSR_1333}; + const uint8_t dl_60Hz[] = {10,5}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_60Hz[index]; + return bTRUE; + } + } + else if(pFilterInfo->ADCRate == ADCRATE_1P6MHZ && pFilterInfo->ADCSinc3Osr == ADCSINC3OSR_2) + { + //this combination suits for filter: + //SINC3 OSR2 for 1.6MSPS + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_889, ADCSINC2OSR_1333}; + const uint8_t dl_60Hz[] = {15,10}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_60Hz[index]; + return bTRUE; + } + } + else if(pFilterInfo->ADCRate == ADCRATE_800KHZ && pFilterInfo->ADCSinc3Osr != ADCSINC3OSR_2) + { + //this combination suits for filter: + //SINC3 OSR4 and OSR5 for 800kSPS, + const uint8_t available_sinc2_osr[] = {ADCSINC2OSR_178, ADCSINC2OSR_267, ADCSINC2OSR_533, ADCSINC2OSR_667,\ + ADCSINC2OSR_889, ADCSINC2OSR_1333}; + const uint8_t dl_60Hz[] = {15,10,5,4,3,2}; + uint8_t index; + if(_is_value_in_table(pFilterInfo->ADCSinc2Osr, available_sinc2_osr, sizeof(available_sinc2_osr), &index)) + { + *dl = dl_60Hz[index]; + return bTRUE; + } + } + *dl = 0; + return bFALSE; +} + +/** + * @brief Calculate how many clocks are needed in sequencer wait command to generate required number of data from filter output. + * @note When measurement is done, it's recommend to disable blocks like ADCPWR, ADCCNV, SINC2, DFT etc. If blocks remain powered up, + * they may need less clocks to generate required number of output. Use function @ref AD5940_AFECtrlS to control these blocks. + * @param pFilterInfo: Pointer to configuration structure. + * @param pClocks: pointer used to store results. + * @return return none. +*/ +void AD5940_ClksCalculate(ClksCalInfo_Type *pFilterInfo, uint32_t *pClocks) +{ + uint32_t temp = 0; + const uint32_t sinc2osr_table[] = {22,44,89,178,267,533,640,667,800,889,1067,1333,0}; + const uint32_t sinc3osr_table[] = {5,4,2,0}; + + *pClocks = 0; + if(pFilterInfo == NULL) return; + if(pClocks == NULL) return; + if(pFilterInfo->ADCSinc2Osr > ADCSINC2OSR_1333) return; + if(pFilterInfo->ADCSinc3Osr > 2) return; /* 0: OSR5, 1:OSR4, 2:OSR2 */ + if(pFilterInfo->ADCAvgNum > ADCAVGNUM_16) return; /* Average number index:0,1,2,3 */ + switch(pFilterInfo->DataType) + { + case DATATYPE_ADCRAW: + temp = (uint32_t)(20*pFilterInfo->DataCount*pFilterInfo->RatioSys2AdcClk); + break; + case DATATYPE_SINC3: + temp = (uint32_t)(((pFilterInfo->DataCount+2)*sinc3osr_table[pFilterInfo->ADCSinc3Osr]+1)*20*pFilterInfo->RatioSys2AdcClk + 0.5f); + break; + case DATATYPE_SINC2: + temp = (pFilterInfo->DataCount+1)*sinc2osr_table[pFilterInfo->ADCSinc2Osr] + 1; + pFilterInfo->DataType = DATATYPE_SINC3; + pFilterInfo->DataCount = temp; + AD5940_ClksCalculate(pFilterInfo, &temp); + pFilterInfo->DataType = DATATYPE_SINC2; + temp += 15; /* Need extra 15 clocks for FIFO etc. Just to be safe. */ + break; + case DATATYPE_NOTCH: + { + ADCFilterCfg_Type filter; + filter.ADCRate = pFilterInfo->ADCRate; + filter.ADCSinc3Osr = pFilterInfo->ADCSinc3Osr; + filter.ADCSinc2Osr = pFilterInfo->ADCSinc2Osr; + uint8_t dl=0, dl_50, dl_60; + if(AD5940_Notch50HzAvailable(&filter, &dl_50)){ + dl += dl_50 - 1; + } + if(AD5940_Notch60HzAvailable(&filter, &dl_60)){ + dl += dl_60 - 1; + } + pFilterInfo->DataType = DATATYPE_SINC2; + pFilterInfo->DataCount += dl; //DL is the extra data input needed for filter to output first data. + AD5940_ClksCalculate(pFilterInfo,&temp); + //restore the filter info. + pFilterInfo->DataType = DATATYPE_NOTCH; + pFilterInfo->DataCount -= dl; + break; + } + case DATATYPE_DFT: + switch(pFilterInfo->DftSrc) + { + case DFTSRC_ADCRAW: + pFilterInfo->DataType = DATATYPE_ADCRAW; + AD5940_ClksCalculate(pFilterInfo, &temp); + break; + case DFTSRC_SINC3: + pFilterInfo->DataType = DATATYPE_SINC3; + AD5940_ClksCalculate(pFilterInfo, &temp); + break; + case DFTSRC_SINC2NOTCH: + if(pFilterInfo->BpNotch) + pFilterInfo->DataType = DATATYPE_SINC2; + else + pFilterInfo->DataType = DATATYPE_NOTCH; + AD5940_ClksCalculate(pFilterInfo, &temp); + break; + case DFTSRC_AVG: + pFilterInfo->DataType = DATATYPE_SINC3; + pFilterInfo->DataCount *= 1L<<(pFilterInfo->ADCAvgNum+1); /* 0: average2, 1: average4, 2: average8, 3: average16 */ + AD5940_ClksCalculate(pFilterInfo, &temp); + break; + default: + break; + } + pFilterInfo->DataType = DATATYPE_DFT; + temp += 25; /* add margin */ + break; + default: + break; + } + *pClocks = temp; +} + +/** + @brief void AD5940_SweepNext(SoftSweepCfg_Type *pSweepCfg, float *pNextFreq) + For sweep function, calculate next frequency point according to pSweepCfg info. + @return Return next frequency point in Hz. +*/ +void AD5940_SweepNext(SoftSweepCfg_Type *pSweepCfg, float *pNextFreq) +{ + float frequency; + + if(pSweepCfg->SweepLog)/* Log step */ + { + if(pSweepCfg->SweepStartSweepStop) /* Normal */ + { + if(++pSweepCfg->SweepIndex == pSweepCfg->SweepPoints) + pSweepCfg->SweepIndex = 0; + frequency = pSweepCfg->SweepStart*pow(10,pSweepCfg->SweepIndex*log10(pSweepCfg->SweepStop/pSweepCfg->SweepStart)/(pSweepCfg->SweepPoints-1)); + } + else + { + pSweepCfg->SweepIndex --; + if(pSweepCfg->SweepIndex >= pSweepCfg->SweepPoints) + pSweepCfg->SweepIndex = pSweepCfg->SweepPoints-1; + frequency = pSweepCfg->SweepStop*pow(10,pSweepCfg->SweepIndex* + (log10(pSweepCfg->SweepStart/pSweepCfg->SweepStop)/(pSweepCfg->SweepPoints-1))); + } + } + else/* Linear step */ + { + if(pSweepCfg->SweepStartSweepStop) /* Normal */ + { + if(++pSweepCfg->SweepIndex == pSweepCfg->SweepPoints) + pSweepCfg->SweepIndex = 0; + frequency = pSweepCfg->SweepStart + pSweepCfg->SweepIndex*(double)(pSweepCfg->SweepStop-pSweepCfg->SweepStart)/(pSweepCfg->SweepPoints-1); + } + else + { + pSweepCfg->SweepIndex --; + if(pSweepCfg->SweepIndex >= pSweepCfg->SweepPoints) + pSweepCfg->SweepIndex = pSweepCfg->SweepPoints-1; + frequency = pSweepCfg->SweepStop + pSweepCfg->SweepIndex*(double)(pSweepCfg->SweepStart - pSweepCfg->SweepStop)/(pSweepCfg->SweepPoints-1); + } + } + + *pNextFreq = frequency; +} + +/** + @brief Initialize Structure members to zero + @param pStruct: Pointer to the structure. + @param StructSize: The structure size in Byte. + @return Return None. +**/ +void AD5940_StructInit(void *pStruct, uint32_t StructSize) +{ + memset(pStruct, 0, StructSize); +} + +/** + @brief Convert ADC Code to voltage. + @param ADCPga: The ADC PGA used for this result. + @param code: ADC code. + @param VRef1p82: the actual 1.82V reference voltage. + @return Voltage in volt. +**/ +float AD5940_ADCCode2Volt(uint32_t code, uint32_t ADCPga, float VRef1p82) +{ + float kFactor = 1.835/1.82; + float fVolt = 0.0; + float tmp = 0; + tmp = (int32_t)code - 32768; + switch(ADCPga) + { + case ADCPGA_1: + break; + case ADCPGA_1P5: + tmp /= 1.5f; + break; + case ADCPGA_2: + tmp /= 2.0f; + break; + case ADCPGA_4: + tmp /= 4.0f; + break; + case ADCPGA_9: + tmp /= 9.0f; + break; + default:break; + } + fVolt = tmp*VRef1p82/32768*kFactor; + return fVolt; +} + +/** + * @brief Do complex number division. + * @param a: The dividend. + * @param b: The divisor. + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexDivFloat(fImpCar_Type *a, fImpCar_Type *b) +{ + fImpCar_Type res; + float temp; + temp = b->Real*b->Real + b->Image*b->Image; + res.Real = a->Real*b->Real + a->Image*b->Image; + res.Real /= temp; + res.Image = a->Image*b->Real - a->Real*b->Image; + res.Image /= temp; + return res; +} + +/** + * @brief Do complex number multiplication. + * @param a: The multiplicand. + * @param b: The multiplier . + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexMulFloat(fImpCar_Type *a, fImpCar_Type *b) +{ + fImpCar_Type res; + + res.Real = a->Real*b->Real - a->Image*b->Image; + res.Image = a->Image*b->Real + a->Real*b->Image; + + return res; +} +/** + * @brief Do complex number addition. + * @param a: The addend. + * @param b: The addend . + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexAddFloat(fImpCar_Type *a, fImpCar_Type *b) +{ + fImpCar_Type res; + + res.Real = a->Real + b->Real; + res.Image = a->Image + b->Image; + + return res; +} + +/** + * @brief Do complex number subtraction. + * @param a: The minuend. + * @param b: The subtrahend . + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexSubFloat(fImpCar_Type *a, fImpCar_Type *b) +{ + fImpCar_Type res; + + res.Real = a->Real - b->Real; + res.Image = a->Image - b->Image; + + return res; +} + +/** + * @brief Do complex number division. + * @param a: The dividend. + * @param b: The divisor. + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexDivInt(iImpCar_Type *a, iImpCar_Type *b) +{ + fImpCar_Type res; + float temp; + temp = (float)b->Real*b->Real + (float)b->Image*b->Image; + res.Real = (float)a->Real*b->Real + (float)a->Image*b->Image; + res.Real /= temp; + res.Image = (float)a->Image*b->Real - (float)a->Real*b->Image; + res.Image /= temp; + return res; +} + +/** + * @brief Do complex number multiplication. + * @param a: The multiplicand. + * @param b: The multiplier . + * @return Return result. +**/ +fImpCar_Type AD5940_ComplexMulInt(iImpCar_Type *a, iImpCar_Type *b) +{ + fImpCar_Type res; + + res.Real = (float)a->Real*b->Real - (float)a->Image*b->Image; + res.Image = (float)a->Image*b->Real + (float)a->Real*b->Image; + + return res; +} + +/** + * @brief Calculate the complex number magnitude. + * @param a: The complex number. + * @return Return magnitude. +**/ +float AD5940_ComplexMag(fImpCar_Type *a) +{ + return sqrt(a->Real*a->Real + a->Image*a->Image); +} + +/** + * @brief Calculate the complex number phase. + * @param a: The complex number. + * @return Return phase. +**/ +float AD5940_ComplexPhase(fImpCar_Type *a) +{ + return atan2(a->Image, a->Real); +} + +/** + * @brief Calculate the optimum filter settings based on signal frequency. + * @param freq: Frequency of signalr. + * @return Return FreqParams. +**/ +FreqParams_Type AD5940_GetFreqParameters(float freq) +{ + const uint32_t dft_table[] = {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}; + const uint32_t sinc2osr_table[] = {1, 22,44,89,178,267,533,640,667,800,889,1067,1333}; + const uint32_t sinc3osr_table[] = {2, 4, 5}; + float AdcRate = 800000; + uint32_t n1 = 0; // Sample rate after ADC filters + uint32_t n2 = 0; // Sample rate after DFT block + uint32_t iCycle = 0; + FreqParams_Type freq_params; + /* High power mode */ + if(freq >= 20000) + { + freq_params. DftSrc = DFTSRC_SINC3; + freq_params.ADCSinc2Osr = 0; + freq_params.ADCSinc3Osr = 2; + freq_params.DftNum = DFTNUM_8192; + freq_params.NumClks = 0; + freq_params.HighPwrMode = bTRUE; + return freq_params; + } + + if(freq < 0.51) + { + freq_params. DftSrc = DFTSRC_SINC2NOTCH; + freq_params.ADCSinc2Osr = 6; + freq_params.ADCSinc3Osr = 1; + freq_params.DftNum = DFTNUM_8192; + freq_params.NumClks = 0; + freq_params.HighPwrMode = bTRUE; + return freq_params; + } + + /* Start with SINC2 setting */ + for(uint8_t i = 0; i=0x1000)&&(RegAddr<=0x3014))) /* 32bit register */ + *(volatile uint32_t *)(RegAddr+0x400c0000) = RegData; + else /* 16bit register */ + *(volatile uint16_t *)(RegAddr+0x400c0000) = RegData; +} + +static uint32_t AD5940_D2DReadReg(uint16_t RegAddr) +{ + if(((RegAddr>=0x1000)&&(RegAddr<=0x3014))) /* 32bit register */ + return *(volatile uint32_t *)(RegAddr+0x400c0000); + else /* 16bit register */ + return *(volatile uint16_t *)(RegAddr+0x400c0000); +} + +void AD5940_FIFORd(uint32_t *pBuffer, uint32_t uiReadCount) +{ + while(uiReadCount--) + *pBuffer++ = *(volatile uint32_t *)(0x400c206C); +} +#else +/** + * @defgroup SPI_Block + * @brief Functions to communicate with AD5940 registers following AD5940 SPI protocols + * @{ + * + * @defgroup SPI_Block_Functions + * @brief The basic SPI protocols. All functions are basic on AD5940_ReadWriteNBytes which + * provided by user. + * + * ##SPI basic protocol + * All SPI protocol starts with one-byte command word. Following are data(16B or 32B) + * There are four SPI commands available @ref SPI_Block_Const. + * @{ +*/ + +/** + @brief Using SPI to transmit one byte and return the received byte. + @param data: The 8-bit data SPI will transmit. + @return received data. +**/ +static unsigned char AD5940_ReadWrite8B(unsigned char data) +{ + uint8_t tx[1], rx[1]; + tx[0] = data; + AD5940_ReadWriteNBytes(tx,rx,1); + return rx[0]; +} + +/** + @brief Using SPI to transmit two bytes and return the received bytes. + @param data: The 16-bit data SPI will transmit. + @return received data. +**/ +static uint16_t AD5940_ReadWrite16B(uint16_t data) +{ + uint8_t SendBuffer[2]; + uint8_t RecvBuffer[2]; + SendBuffer[0] = data>>8; + SendBuffer[1] = data&0xff; + AD5940_ReadWriteNBytes(SendBuffer,RecvBuffer,2); + return (((uint16_t)RecvBuffer[0])<<8)|RecvBuffer[1]; +} + +/** + * @brief Using SPI to transmit four bytes and return the received bytes. + * @param data: The 32-bit data SPI will transmit. + * @return received data. +**/ +static uint32_t AD5940_ReadWrite32B(uint32_t data) +{ + uint8_t SendBuffer[4]; + uint8_t RecvBuffer[4]; + + SendBuffer[0] = (data>>24)&0xff; + SendBuffer[1] = (data>>16)&0xff; + SendBuffer[2] = (data>> 8)&0xff; + SendBuffer[3] = (data )&0xff; + AD5940_ReadWriteNBytes(SendBuffer,RecvBuffer,4); + return (((uint32_t)RecvBuffer[0])<<24)|(((uint32_t)RecvBuffer[1])<<16)|(((uint32_t)RecvBuffer[2])<<8)|RecvBuffer[3]; +} + +/** + * @brief Write register through SPI. + * @param RegAddr: The register address. + * @param RegData: The register data. + * @return Return None. +**/ +static void AD5940_SPIWriteReg(uint16_t RegAddr, uint32_t RegData) +{ + /* Set register address */ + AD5940_CsClr(); + AD5940_ReadWrite8B(SPICMD_SETADDR); + AD5940_ReadWrite16B(RegAddr); + AD5940_CsSet(); + /* Add delay here to meet the SPI timing. */ + AD5940_CsClr(); + AD5940_ReadWrite8B(SPICMD_WRITEREG); + if(((RegAddr>=0x1000)&&(RegAddr<=0x3014))) + AD5940_ReadWrite32B(RegData); + else + AD5940_ReadWrite16B(RegData); + AD5940_CsSet(); +} + +/** + * @brief Read register through SPI. + * @param RegAddr: The register address. + * @return Return register data. +**/ +static uint32_t AD5940_SPIReadReg(uint16_t RegAddr) +{ + uint32_t Data = 0; + /* Set register address that we want to read */ + AD5940_CsClr(); + AD5940_ReadWrite8B(SPICMD_SETADDR); + AD5940_ReadWrite16B(RegAddr); + AD5940_CsSet(); + /* Read it */ + AD5940_CsClr(); + AD5940_ReadWrite8B(SPICMD_READREG); + AD5940_ReadWrite8B(0); //Dummy read + /* The real data is coming */ + if((RegAddr>=0x1000)&&(RegAddr<=0x3014)) + Data = AD5940_ReadWrite32B(0); + else + Data = AD5940_ReadWrite16B(0); + AD5940_CsSet(); + return Data; +} + +/** + @brief Read specific number of data from FIFO with optimized SPI access. + @param pBuffer: Pointer to a buffer that used to store data read back. + @param uiReadCount: How much data to be read. + @return none. +**/ +void AD5940_FIFORd(uint32_t *pBuffer, uint32_t uiReadCount) +{ + /* Use function AD5940_SPIReadReg to read REG_AFE_DATAFIFORD is also one method. */ + uint32_t i; + + if(uiReadCount < 3) + { + /* This method is more efficient when readcount < 3 */ + uint32_t i; + AD5940_CsClr(); + AD5940_ReadWrite8B(SPICMD_SETADDR); + AD5940_ReadWrite16B(REG_AFE_DATAFIFORD); + AD5940_CsSet(); + for(i=0;iHpBandgapEn == bFALSE) + tempreg |= BITM_AFE_AFECON_HPREFDIS; + AD5940_WriteReg(REG_AFE_AFECON, tempreg); + /* Reference buffer configure */ + tempreg = AD5940_ReadReg(REG_AFE_BUFSENCON); + if(pBufCfg->Hp1V8BuffEn == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P8HPADCEN; + if(pBufCfg->Hp1V1BuffEn == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P1HPADCEN; + if(pBufCfg->Lp1V8BuffEn == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P8LPADCEN; + if(pBufCfg->Lp1V1BuffEn == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P1LPADCEN; + if(pBufCfg->Hp1V8ThemBuff == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P8THERMSTEN; + if(pBufCfg->Hp1V8Ilimit == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P8HPADCILIMITEN; + if(pBufCfg->Disc1V8Cap == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P8HPADCCHGDIS; + if(pBufCfg->Disc1V1Cap == bTRUE) + tempreg |= BITM_AFE_BUFSENCON_V1P1LPADCCHGDIS; + AD5940_WriteReg(REG_AFE_BUFSENCON, tempreg); + + /* LPREFBUFCON */ + tempreg = 0; + if(pBufCfg->LpRefBufEn == bFALSE) + tempreg |= BITM_AFE_LPREFBUFCON_LPBUF2P5DIS; + if(pBufCfg->LpBandgapEn == bFALSE) + tempreg |= BITM_AFE_LPREFBUFCON_LPREFDIS; + if(pBufCfg->LpRefBoostEn == bTRUE) + tempreg |= BITM_AFE_LPREFBUFCON_BOOSTCURRENT; + AD5940_WriteReg(REG_AFE_LPREFBUFCON, tempreg); +} +/** + * @} End of AFE_Control_Functions + * @} End of AFE_Control + * */ + +/** + * @defgroup High_Speed_Loop + * @brief The high speed loop + * @{ + * @defgroup High_Speed_Loop_Functions + * @{ +*/ + +/** + @brief Configure High speed loop(high bandwidth loop or + called excitation loop). This configuration includes HSDAC, HSTIA and Switch matrix. + @param pHsLoopCfg : Pointer to configure structure; + @return return none. +*/ +void AD5940_HSLoopCfgS(HSLoopCfg_Type *pHsLoopCfg) +{ + AD5940_HSDacCfgS(&pHsLoopCfg->HsDacCfg); + AD5940_HSTIACfgS(&pHsLoopCfg->HsTiaCfg); + AD5940_SWMatrixCfgS(&pHsLoopCfg->SWMatCfg); + AD5940_WGCfgS(&pHsLoopCfg->WgCfg); +} + +/** + @brief Initialize switch matrix + @param pSwMatrix: Pointer to configuration structure + @return return none. +*/ +void AD5940_SWMatrixCfgS(SWMatrixCfg_Type *pSwMatrix) +{ + AD5940_WriteReg(REG_AFE_DSWFULLCON, pSwMatrix->Dswitch); + AD5940_WriteReg(REG_AFE_PSWFULLCON, pSwMatrix->Pswitch); + AD5940_WriteReg(REG_AFE_NSWFULLCON, pSwMatrix->Nswitch); + AD5940_WriteReg(REG_AFE_TSWFULLCON, pSwMatrix->Tswitch); + AD5940_WriteReg(REG_AFE_SWCON, BITM_AFE_SWCON_SWSOURCESEL); /* Update switch configuration */ +} + +/** + @brief Initialize HSDAC + @param pHsDacCfg: Pointer to configuration structure + @return return none. +*/ +void AD5940_HSDacCfgS(HSDACCfg_Type *pHsDacCfg) +{ + uint32_t tempreg; + //Check parameters + tempreg = 0; + if(pHsDacCfg->ExcitBufGain == EXCITBUFGAIN_0P25) + tempreg |= BITM_AFE_HSDACCON_INAMPGNMDE; /* Enable attenuator */ + if(pHsDacCfg->HsDacGain == HSDACGAIN_0P2) + tempreg |= BITM_AFE_HSDACCON_ATTENEN; /* Enable attenuator */ + tempreg |= (pHsDacCfg->HsDacUpdateRate&0xff)<= HSTIADERTIA_OPEN) + tempreg = 0x1f << 3; /* bit field HPTIRES03CON[7:3] */ + else if(DeRtia >= HSTIADERTIA_1K) + { + tempreg = (DeRtia - 3 + 11) << 3; + } + else /* DERTIA 50/100/200Ohm */ + { + const uint8_t DeRtiaTable[3][5] = + { +//Rload 0 10 30 50 100 + {0x00, 0x01, 0x02, 0x03, 0x06}, /* RTIA 50Ohm */ + {0x03, 0x04, 0x05, 0x06, 0x07}, /* RTIA 100Ohm */ + {0x07, 0x07, 0x09, 0x09, 0x0a}, /* RTIA 200Ohm */ + }; + if(DeRload < HSTIADERLOAD_OPEN) + tempreg = (uint32_t)(DeRtiaTable[DeRtia][DeRload])<<3; + else + tempreg = (0x1f)<<3; /* Set it to HSTIADERTIA_OPEN. This setting is illegal */ + } + /* deal with HSTIA Rload */ + tempreg |= DeRload; + if(DExPin) //DE1 + AD5940_WriteReg(REG_AFE_DE1RESCON, tempreg); + else //DE0 + AD5940_WriteReg(REG_AFE_DE0RESCON, tempreg); +} + +/** + @brief Initialize High speed TIA amplifier + @param pHsTiaCfg: Pointer to configuration structure + @return return none. +*/ +AD5940Err AD5940_HSTIACfgS(HSTIACfg_Type *pHsTiaCfg) +{ + uint32_t tempreg; + //Check parameters + if(pHsTiaCfg == NULL) return AD5940ERR_NULLP; + /* Available parameter is 1k, 5k,...,160k, short, OPEN */ + if(pHsTiaCfg->HstiaDeRtia < HSTIADERTIA_1K) + return AD5940ERR_PARA; + if(pHsTiaCfg->HstiaDeRtia > HSTIADERTIA_OPEN) + return AD5940ERR_PARA; /* Parameter is invalid */ + + if(pHsTiaCfg->HstiaDeRload > HSTIADERLOAD_OPEN) + return AD5940ERR_PARA; /* Available parameter is OPEN, 0R,..., 100R */ + + tempreg = 0; + tempreg |= pHsTiaCfg->HstiaBias; + AD5940_WriteReg(REG_AFE_HSTIACON, tempreg); + /* HSRTIACON */ + /* Calculate CTIA value */ + tempreg = pHsTiaCfg->HstiaCtia << BITP_AFE_HSRTIACON_CTIACON; + tempreg |= pHsTiaCfg->HstiaRtiaSel; + if(pHsTiaCfg->DiodeClose == bTRUE) + tempreg |= BITM_AFE_HSRTIACON_TIASW6CON; /* Close switch 6 */ + AD5940_WriteReg(REG_AFE_HSRTIACON, tempreg); + /* DExRESCON */ + __AD5940_SetDExRTIA(0, pHsTiaCfg->HstiaDeRtia, pHsTiaCfg->HstiaDeRload); +#ifdef CHIPSEL_M355 + __AD5940_SetDExRTIA(1, pHsTiaCfg->HstiaDe1Rtia, pHsTiaCfg->HstiaDe1Rload); +#endif + + /* Done */ + return AD5940ERR_OK; +} +/** + * @brief Configure HSTIA RTIA resistor and keep other parameters unchanged. + * @param HSTIARtia: The RTIA setting, select it from @ref HSTIARTIA_Const + * @return return none. +*/ +void AD5940_HSRTIACfgS(uint32_t HSTIARtia) +{ + uint32_t tempreg; + tempreg = AD5940_ReadReg(REG_AFE_HSRTIACON); + tempreg &= ~BITM_AFE_HSRTIACON_RTIACON; + HSTIARtia &= BITM_AFE_HSRTIACON_RTIACON; + tempreg |= HSTIARtia<WgType == WGTYPE_SIN) + { + /* Configure Sine wave Generator */ + AD5940_WriteReg(REG_AFE_WGFCW, pWGInit->SinCfg.SinFreqWord); + AD5940_WriteReg(REG_AFE_WGAMPLITUDE, pWGInit->SinCfg.SinAmplitudeWord); + AD5940_WriteReg(REG_AFE_WGOFFSET, pWGInit->SinCfg.SinOffsetWord); + AD5940_WriteReg(REG_AFE_WGPHASE, pWGInit->SinCfg.SinPhaseWord); + } + else if(pWGInit->WgType == WGTYPE_TRAPZ) + { + /* Configure Trapezoid Generator */ + AD5940_WriteReg(REG_AFE_WGDCLEVEL1, pWGInit->TrapzCfg.WGTrapzDCLevel1); + AD5940_WriteReg(REG_AFE_WGDCLEVEL2, pWGInit->TrapzCfg.WGTrapzDCLevel2); + AD5940_WriteReg(REG_AFE_WGDELAY1, pWGInit->TrapzCfg.WGTrapzDelay1); + AD5940_WriteReg(REG_AFE_WGDELAY2, pWGInit->TrapzCfg.WGTrapzDelay2); + AD5940_WriteReg(REG_AFE_WGSLOPE1, pWGInit->TrapzCfg.WGTrapzSlope1); + AD5940_WriteReg(REG_AFE_WGSLOPE2, pWGInit->TrapzCfg.WGTrapzSlope2); + } + else + { + /* Write DAC data. It's only have effect when WgType set to WGTYPE_MMR */ + AD5940_WriteReg(REG_AFE_HSDACDAT, pWGInit->WgCode); + } + tempreg = 0; + + if(pWGInit->GainCalEn == bTRUE) + tempreg |= BITM_AFE_WGCON_DACGAINCAL; + if(pWGInit->OffsetCalEn == bTRUE) + tempreg |= BITM_AFE_WGCON_DACOFFSETCAL; + tempreg |= (pWGInit->WgType) << BITP_AFE_WGCON_TYPESEL; + AD5940_WriteReg(REG_AFE_WGCON, tempreg); +} + +/** + * @brief Write HSDAC code directly when WG configured to MMR type + * @param code: The 12-bit HSDAC code. + * @return return none. +*/ +AD5940Err AD5940_WGDACCodeS(uint32_t code) +{ + code &= 0xfff; + AD5940_WriteReg(REG_AFE_HSDACDAT, code); + return AD5940ERR_OK; +} + +/** + * @brief Update WG SIN wave frequency in Hz. + * @param SinFreqHz: The desired frequency in Hz. + * @param WGClock: The clock for WG. It's same as system clock and the default value is internal 16MHz HSOSC. + * @return return none. +*/ +void AD5940_WGFreqCtrlS(float SinFreqHz, float WGClock) +{ + uint32_t freq_word; + freq_word = AD5940_WGFreqWordCal(SinFreqHz, WGClock); + AD5940_WriteReg(REG_AFE_WGFCW, freq_word); +} + +/** + @brief Calculate sine wave generator frequency word. The maxim frequency is 250kHz-1LSB + @param SinFreqHz : Target frequency in Hz unit. + @param WGClock: Waveform generator clock frequency in Hz unit. The clock is sourced from system clock, default value is 16MHz HFOSC. + @return return none. +*/ +uint32_t AD5940_WGFreqWordCal(float SinFreqHz, float WGClock) +{ + uint32_t temp; + uint32_t __BITWIDTH_WGFCW = 26; + if(bIsS2silicon == bTRUE) + __BITWIDTH_WGFCW = 30; + if(WGClock == 0) return 0; + temp = (uint32_t)(SinFreqHz*(1LL<<__BITWIDTH_WGFCW)/WGClock + 0.5f); + if(temp > ((__BITWIDTH_WGFCW == 26)?0xfffff:0xffffff)) + temp = (__BITWIDTH_WGFCW == 26)?0xfffff:0xffffff; + + return temp; +} + +/** + * @} Waveform_Generator_Functions + * @} High_Speed_Loop_Functions + * @} High_Speed_Loop +*/ + + +/** + * @defgroup Low_Power_Loop + * @brief The low power loop. + * @{ + * @defgroup Low_Power_Loop_Functions + * @{ +*/ + +/** + @brief Configure low power loop include LPDAC LPAmp(PA and TIA) + @param pLpLoopCfg: Pointer to configure structure; + @return return none. +*/ +void AD5940_LPLoopCfgS(LPLoopCfg_Type *pLpLoopCfg) +{ + AD5940_LPDACCfgS(&pLpLoopCfg->LpDacCfg); + AD5940_LPAMPCfgS(&pLpLoopCfg->LpAmpCfg); +} + +/** + @brief Initialize LPDAC + @param pLpDacCfg: Pointer to configuration structure + @return return none. +*/ +void AD5940_LPDACCfgS(LPDACCfg_Type *pLpDacCfg) +{ + uint32_t tempreg; + tempreg = 0; + tempreg = (pLpDacCfg->LpDacSrc)<LpDacVzeroMux)<LpDacVbiasMux)<LpDacRef)<DataRst == bFALSE) + tempreg |= BITM_AFE_LPDACCON0_RSTEN; + if(pLpDacCfg->PowerEn == bFALSE) + tempreg |= BITM_AFE_LPDACCON0_PWDEN; + if(pLpDacCfg->LpdacSel == LPDAC0) + { + AD5940_WriteReg(REG_AFE_LPDACCON0, tempreg); + AD5940_LPDAC0WriteS(pLpDacCfg->DacData12Bit, pLpDacCfg->DacData6Bit); + AD5940_WriteReg(REG_AFE_LPDACSW0, pLpDacCfg->LpDacSW|BITM_AFE_LPDACSW0_LPMODEDIS); /* Overwrite LPDACSW settings. On Si1, this register is not accessible. */ + } + else + { + AD5940_WriteReg(REG_AFE_LPDACCON1, tempreg); + AD5940_LPDAC1WriteS(pLpDacCfg->DacData12Bit, pLpDacCfg->DacData6Bit); + AD5940_WriteReg(REG_AFE_LPDACSW1, pLpDacCfg->LpDacSW|BITM_AFE_LPDACSW0_LPMODEDIS); /* Overwrite LPDACSW settings. On Si1, this register is not accessible. */ + } +} + +/** + @brief Write LPDAC data + @param Data12Bit: 12Bit DAC data + @param Data6Bit: 6Bit DAC data + @return return none. +*/ +void AD5940_LPDACWriteS(uint16_t Data12Bit, uint8_t Data6Bit) +{ + /* Check parameter */ + Data6Bit &= 0x3f; + Data12Bit &= 0xfff; + AD5940_WriteReg(REG_AFE_LPDACDAT0, ((uint32_t)Data6Bit<<12)|Data12Bit); +} + +/** + @brief Write LPDAC0 data + @param Data12Bit: 12Bit DAC data + @param Data6Bit: 6Bit DAC data + @return return none. +*/ +void AD5940_LPDAC0WriteS(uint16_t Data12Bit, uint8_t Data6Bit) +{ + /* Check parameter */ + Data6Bit &= 0x3f; + Data12Bit &= 0xfff; + AD5940_WriteReg(REG_AFE_LPDACDAT0, ((uint32_t)Data6Bit<<12)|Data12Bit); +} + +/** + @brief Write LPDAC1 data + @param Data12Bit: 12Bit DAC data + @param Data6Bit: 6Bit DAC data + @return return none. +*/ +void AD5940_LPDAC1WriteS(uint16_t Data12Bit, uint8_t Data6Bit) +{ + /* Check parameter */ + Data6Bit &= 0x3f; + Data12Bit &= 0xfff; + AD5940_WriteReg(REG_AFE_LPDACDAT1, ((uint32_t)Data6Bit<<12)|Data12Bit); +} + +/** + @brief Initialize LP TIA and PA + @param pLpAmpCfg: Pointer to configuration structure + @return return none. +*/ +void AD5940_LPAMPCfgS(LPAmpCfg_Type *pLpAmpCfg) +{ + //check parameters + uint32_t tempreg; + + tempreg = 0; + if(pLpAmpCfg->LpPaPwrEn == bFALSE) + tempreg |= BITM_AFE_LPTIACON0_PAPDEN; + if(pLpAmpCfg->LpTiaPwrEn == bFALSE) + tempreg |= BITM_AFE_LPTIACON0_TIAPDEN; + if(pLpAmpCfg->LpAmpPwrMod == LPAMPPWR_HALF) + tempreg |= BITM_AFE_LPTIACON0_HALFPWR; + else + { + tempreg |= pLpAmpCfg->LpAmpPwrMod<LpTiaRtia<LpTiaRload<LpTiaRf<LpAmpSel == LPAMP0) + { + AD5940_WriteReg(REG_AFE_LPTIACON0, tempreg); + AD5940_WriteReg(REG_AFE_LPTIASW0, pLpAmpCfg->LpTiaSW); + } + else + { + AD5940_WriteReg(REG_AFE_LPTIACON1, tempreg); + AD5940_WriteReg(REG_AFE_LPTIASW1, pLpAmpCfg->LpTiaSW); + } +} +/** + * @} Low_Power_Loop_Functions + * @} Low_Power_Loop +*/ + + +/** + * @defgroup DSP_Block + * @brief DSP block includes ADC, filters, DFT and statistic functions. + * @{ + * @defgroup DSP_Block_Functions + * @{ + * */ + +/** + @brief Configure low power loop include LPDAC LPAmp(PA and TIA) + @param pDSPCfg: Pointer to configure structure; + @return return none. +*/ +void AD5940_DSPCfgS(DSPCfg_Type *pDSPCfg) +{ + AD5940_ADCBaseCfgS(&pDSPCfg->ADCBaseCfg); + AD5940_ADCFilterCfgS(&pDSPCfg->ADCFilterCfg); + AD5940_ADCDigCompCfgS(&pDSPCfg->ADCDigCompCfg); + AD5940_DFTCfgS(&pDSPCfg->DftCfg); + AD5940_StatisticCfgS(&pDSPCfg->StatCfg); +} + +/** + @brief Read AD5940 generated data like ADC and DFT etc. + @param AfeResultSel: available parameters are @ref AFERESULT_Const + - AFERESULT_SINC3: Read SINC3 filter data result + - AFERESULT_SINC2: Read SINC2+NOTCH filter result, when Notch filter is bypassed, the result is SINC2 + - AFERESULT_STATSVAR: Statistic variance result + @return return data read back. +*/ +uint32_t AD5940_ReadAfeResult(uint32_t AfeResultSel) +{ + uint32_t rd = 0; + //PARA_CHECK((AfeResultSel)); + switch (AfeResultSel) + { + case AFERESULT_SINC3: + rd = AD5940_ReadReg(REG_AFE_ADCDAT); + break; + case AFERESULT_SINC2: + rd = AD5940_ReadReg(REG_AFE_SINC2DAT); + break; + case AFERESULT_TEMPSENSOR: + rd = AD5940_ReadReg(REG_AFE_TEMPSENSDAT); + break; + case AFERESULT_DFTREAL: + rd = AD5940_ReadReg(REG_AFE_DFTREAL); + break; + case AFERESULT_DFTIMAGE: + rd = AD5940_ReadReg(REG_AFE_DFTIMAG); + break; + case AFERESULT_STATSMEAN: + rd = AD5940_ReadReg(REG_AFE_STATSMEAN); + break; + case AFERESULT_STATSVAR: + rd = AD5940_ReadReg(REG_AFE_STATSVAR); + break; + } + + return rd; +} + +/** + * @defgroup ADC_Block_Functions + * @{ +*/ + +/** + @brief Initializes ADC peripheral according to the specified parameters in the pADCInit. + @param pADCInit: Pointer to ADC initialize structure. + @return return none. +*/ +void AD5940_ADCBaseCfgS(ADCBaseCfg_Type *pADCInit) +{ + uint32_t tempreg = 0; + //PARA_CHECK(IS_ADCMUXP(pADCInit->ADCMuxP)); + //PARA_CHECK(IS_ADCMUXN(pADCInit->ADCMuxN)); + PARA_CHECK(IS_ADCPGA(pADCInit->ADCPga)); + PARA_CHECK(IS_ADCAAF(pADCInit->ADCAAF)); + + tempreg = pADCInit->ADCMuxP; + tempreg |= (uint32_t)(pADCInit->ADCMuxN)<OffCancEnable == bTRUE) + // tempreg |= BITM_AFE_ADCCON_GNOFSELPGA; + tempreg |= (uint32_t)(pADCInit->ADCPga)<ADCSinc3Osr)); + PARA_CHECK(IS_ADCSINC2OSR(pFiltCfg->ADCSinc2Osr)); + PARA_CHECK(IS_ADCAVGNUM(pFiltCfg->ADCAvgNum)); + PARA_CHECK(IS_ADCRATE(pFiltCfg->ADCRate)); + + tempreg = AD5940_ReadReg(REG_AFE_ADCFILTERCON); + tempreg &= BITM_AFE_ADCFILTERCON_AVRGEN; /* Keep this bit setting. */ + + tempreg |= pFiltCfg->ADCRate; + if(pFiltCfg->BpNotch == bTRUE) + tempreg |= BITM_AFE_ADCFILTERCON_LPFBYPEN; + if(pFiltCfg->BpSinc3 == bTRUE) + tempreg |= BITM_AFE_ADCFILTERCON_SINC3BYP; + /** + * Average filter is enabled when DFT source is @ref DFTSRC_AVG in function @ref AD5940_DFTCfgS. + * Once average function is enabled, it's automatically set as DFT source, register DFTCON.DFTINSEL is ignored. + */ + //if(pFiltCfg->AverageEnable == bTRUE) + // tempreg |= BITM_AFE_ADCFILTERCON_AVRGEN; + tempreg |= (uint32_t)(pFiltCfg->ADCSinc2Osr)<ADCSinc3Osr)<ADCAvgNum)<Sinc2NotchEnable) + { + AD5940_AFECtrlS(AFECTRL_SINC2NOTCH,bTRUE); + } +} + +/** + @brief Power up or power down ADC block(including ADC PGA and FRONTBUF). + @param State : {bTRUE, bFALSE} + - bTRUE: Power up ADC + - bFALSE: Power down ADC + @return return none. +*/ +void AD5940_ADCPowerCtrlS(BoolFlag State) +{ + uint32_t tempreg; + tempreg = AD5940_ReadReg(REG_AFE_AFECON); + if(State == bTRUE) + { + tempreg |= BITM_AFE_AFECON_ADCEN; + } + else + { + tempreg &= ~BITM_AFE_AFECON_ADCEN; + } + AD5940_WriteReg(REG_AFE_AFECON,tempreg); +} + +/** + @brief Start or stop ADC convert. + @param State : {bTRUE, bFALSE} + - bTRUE: Start ADC convert + - bFALSE: Stop ADC convert + @return return none. +*/ +void AD5940_ADCConvtCtrlS(BoolFlag State) +{ + uint32_t tempreg; + tempreg = AD5940_ReadReg(REG_AFE_AFECON); + if(State == bTRUE) + { + tempreg |= BITM_AFE_AFECON_ADCCONVEN; + } + else + { + tempreg &= ~BITM_AFE_AFECON_ADCCONVEN; + } + AD5940_WriteReg(REG_AFE_AFECON,tempreg); +} + +/** + @brief Configure ADC input MUX + @param ADCMuxP : {ADCMUXP_FLOAT, ADCMUXP_HSTIA_P, ,,, ,ADCMUXP_P_NODE} + - ADCMUXP_FLOAT: float ADC MUX positive input + - ADCMUXP_HSTIA_P: High speed TIA output sense terminal + - ADCMUXP_P_NODE: Excitation loop P node + @param ADCMuxN : {ADCMUXP_FLOAT, ADCMUXP_HSTIA_P, ,,, ,ADCMUXP_P_NODE} + - ADCMUXP_FLOAT: float ADC MUX positive input + - ADCMUXP_HSTIA_P: High speed TIA output sense terminal + - ADCMUXP_P_NODE: Excitation loop P node + + @return return none. +*/ +void AD5940_ADCMuxCfgS(uint32_t ADCMuxP, uint32_t ADCMuxN) +{ + uint32_t tempreg; + //PARA_CHECK(IS_ADCMUXP(ADCMuxP)); + //PARA_CHECK(IS_ADCMUXN(ADCMuxN)); + + tempreg = AD5940_ReadReg(REG_AFE_ADCCON); + tempreg &= ~(BITM_AFE_ADCCON_MUXSELN|BITM_AFE_ADCCON_MUXSELP); + tempreg |= ADCMuxP<ADCMin); + AD5940_WriteReg(REG_AFE_ADCMINSM, pCompCfg->ADCMinHys); + AD5940_WriteReg(REG_AFE_ADCMAX, pCompCfg->ADCMax); + AD5940_WriteReg(REG_AFE_ADCMAXSMEN, pCompCfg->ADCMaxHys); +} +/** @} ADC_Block_Functions */ + +/** + @brief Configure statistic functions + @param pStatCfg: Pointer to configuration structure + @return return none. +*/ +void AD5940_StatisticCfgS(StatCfg_Type *pStatCfg) +{ + uint32_t tempreg; + //check parameters + tempreg = 0; + if(pStatCfg->StatEnable == bTRUE) + tempreg |= BITM_AFE_STATSCON_STATSEN; + tempreg |= (pStatCfg->StatSample) << BITP_AFE_STATSCON_SAMPLENUM; + tempreg |= (pStatCfg->StatDev) << BITP_AFE_STATSCON_STDDEV; + AD5940_WriteReg(REG_AFE_STATSCON, tempreg); +} + +/** + * @brief Set ADC Repeat convert function number. Turn off ADC automatically after Number samples of ADC raw data are ready + * @param Number: Specify after how much ADC raw data need to sample before shutdown ADC + * @return return none. +*/ +void AD5940_ADCRepeatCfgS(uint32_t Number) +{ + //check parameter if(number<255) + AD5940_WriteReg(REG_AFE_REPEATADCCNV, Number<DftSrc == DFTSRC_AVG) + { + reg_adcfilter |= BITM_AFE_ADCFILTERCON_AVRGEN; + AD5940_WriteReg(REG_AFE_ADCFILTERCON, reg_adcfilter); + } + else + { + /* Disable Average function and set correct DFT source */ + reg_adcfilter &= ~BITM_AFE_ADCFILTERCON_AVRGEN; + AD5940_WriteReg(REG_AFE_ADCFILTERCON, reg_adcfilter); + + /* Set new DFT source */ + reg_dftcon |= (pDftCfg->DftSrc) << BITP_AFE_DFTCON_DFTINSEL; + } + /* Set DFT number */ + reg_dftcon |= (pDftCfg->DftNum) << BITP_AFE_DFTCON_DFTNUM; + + if(pDftCfg->HanWinEn == bTRUE) + reg_dftcon |= BITM_AFE_DFTCON_HANNINGEN; + AD5940_WriteReg(REG_AFE_DFTCON, reg_dftcon); +} + +/** + * @} DSP_Block_Functions + * @} DSP_Block +*/ + +/** + * @defgroup Sequencer_FIFO + * @brief Sequencer and FIFO. + * @{ + * @defgroup Sequencer_FIFO_Functions + * @{ +*/ + +/** + @brief Configure AD5940 FIFO + @param pFifoCfg: Pointer to configuration structure. + @return return none. +*/ +void AD5940_FIFOCfg(FIFOCfg_Type *pFifoCfg) +{ + uint32_t tempreg; + //check parameters + AD5940_WriteReg(REG_AFE_FIFOCON, 0); /* Disable FIFO firstly! */ + /* CMDDATACON register. Configure this firstly */ + tempreg = AD5940_ReadReg(REG_AFE_CMDDATACON); + tempreg &= BITM_AFE_CMDDATACON_CMD_MEM_SEL|BITM_AFE_CMDDATACON_CMDMEMMDE; /* Keep sequencer memory settings */ + tempreg |= pFifoCfg->FIFOMode << BITP_AFE_CMDDATACON_DATAMEMMDE; /* Data FIFO mode: stream or FIFO */ + tempreg |= pFifoCfg->FIFOSize << BITP_AFE_CMDDATACON_DATA_MEM_SEL; /* Data FIFO memory size */ + /* The reset memory can be used for sequencer, configure it by function AD5940_SEQCfg() */ + AD5940_WriteReg(REG_AFE_CMDDATACON, tempreg); + + /* FIFO Threshold */ + AD5940_WriteReg(REG_AFE_DATAFIFOTHRES, pFifoCfg->FIFOThresh << BITP_AFE_DATAFIFOTHRES_HIGHTHRES); + /* FIFOCON register. Final step is to enable FIFO */ + tempreg = 0; + if(pFifoCfg->FIFOEn == bTRUE) + tempreg |= BITM_AFE_FIFOCON_DATAFIFOEN; /* Enable FIFO after everything set. */ + tempreg |= pFifoCfg->FIFOSrc << BITP_AFE_FIFOCON_DATAFIFOSRCSEL; + AD5940_WriteReg(REG_AFE_FIFOCON, tempreg); +} + +/** + @brief Read current FIFO configuration. + @param pFifoCfg: Pointer to a buffer that used to store FIFO configuration. + @return return AD5940ERR_OK if succeed. +*/ +AD5940Err AD5940_FIFOGetCfg(FIFOCfg_Type *pFifoCfg) +{ + uint32_t tempreg; + //check parameters + if(pFifoCfg == NULL) return AD5940ERR_NULLP; + /* CMDDATACON register. */ + tempreg = AD5940_ReadReg(REG_AFE_CMDDATACON); + pFifoCfg->FIFOMode = (tempreg&BITM_AFE_CMDDATACON_DATAMEMMDE)>>BITP_AFE_CMDDATACON_DATAMEMMDE; + pFifoCfg->FIFOSize = (tempreg&BITM_AFE_CMDDATACON_DATA_MEM_SEL)>>BITP_AFE_CMDDATACON_DATA_MEM_SEL; + + /* FIFO Threshold */ + tempreg = AD5940_ReadReg(REG_AFE_DATAFIFOTHRES); + pFifoCfg->FIFOThresh = (tempreg&BITM_AFE_DATAFIFOTHRES_HIGHTHRES)>>BITP_AFE_DATAFIFOTHRES_HIGHTHRES; + /* FIFOCON register. */ + tempreg = AD5940_ReadReg(REG_AFE_FIFOCON); + pFifoCfg->FIFOEn = (tempreg&BITM_AFE_FIFOCON_DATAFIFOEN)?bTRUE:bFALSE; + pFifoCfg->FIFOSrc = (tempreg&BITM_AFE_FIFOCON_DATAFIFOSRCSEL)>>BITP_AFE_FIFOCON_DATAFIFOSRCSEL; + + return AD5940ERR_OK; +} + +/** + * @brief Configure AD5940 FIFO Source and enable or disable FIFO. + * @param FifoSrc : available choices are @ref FIFOSRC_Const + * - FIFOSRC_SINC3 SINC3 data + * - FIFOSRC_DFT DFT real and imaginary part + * - FIFOSRC_SINC2NOTCH SINC2+NOTCH block. Notch can be bypassed, so SINC2 data can be feed to FIFO + * - FIFOSRC_VAR Statistic variance output + * - FIFOSRC_MEAN Statistic mean output + * @param FifoEn: enable or disable the FIFO. + * @return return none. +*/ +void AD5940_FIFOCtrlS(uint32_t FifoSrc, BoolFlag FifoEn) +{ + uint32_t tempreg; + + tempreg = 0; + if(FifoEn == bTRUE) + tempreg |= BITM_AFE_FIFOCON_DATAFIFOEN; + tempreg |= FifoSrc << BITP_AFE_FIFOCON_DATAFIFOSRCSEL; + AD5940_WriteReg(REG_AFE_FIFOCON, tempreg); +} + +/** + * @brief Configure AD5940 Data FIFO threshold value + @param FIFOThresh: FIFO threshold value + @return return none. +*/ +void AD5940_FIFOThrshSet(uint32_t FIFOThresh) +{ + /* FIFO Threshold */ + AD5940_WriteReg(REG_AFE_DATAFIFOTHRES, FIFOThresh << BITP_AFE_DATAFIFOTHRES_HIGHTHRES); +} + +/** + * @brief Get Data count in FIFO + * @return return none. +*/ +uint32_t AD5940_FIFOGetCnt(void) +{ + return AD5940_ReadReg(REG_AFE_FIFOCNTSTA) >> BITP_AFE_FIFOCNTSTA_DATAFIFOCNTSTA; +} + + +/* Sequencer */ +/** + * @brief Initialize Sequencer + * @param pSeqCfg: Pointer to configuration structure + @return return none. +*/ +void AD5940_SEQCfg(SEQCfg_Type *pSeqCfg) +{ + /* check parameters */ + uint32_t tempreg, fifocon; + + fifocon = AD5940_ReadReg(REG_AFE_FIFOCON); + AD5940_WriteReg(REG_AFE_FIFOCON, 0); /* Disable FIFO before changing memory configuration */ + /* Configure CMDDATACON register */ + tempreg = AD5940_ReadReg(REG_AFE_CMDDATACON); + tempreg &= ~(BITM_AFE_CMDDATACON_CMDMEMMDE|BITM_AFE_CMDDATACON_CMD_MEM_SEL); /* Clear settings for sequencer memory */ + tempreg |= (1L) << BITP_AFE_CMDDATACON_CMDMEMMDE; /* Sequencer is always in memory mode */ + tempreg |= (pSeqCfg->SeqMemSize) << BITP_AFE_CMDDATACON_CMD_MEM_SEL; + AD5940_WriteReg(REG_AFE_CMDDATACON, tempreg); + + if(pSeqCfg->SeqCntCRCClr) + { + AD5940_WriteReg(REG_AFE_SEQCON, 0); /* Disable sequencer firstly */ + AD5940_WriteReg(REG_AFE_SEQCNT, 0); /* When sequencer is disabled, any write to SEQCNT will clear CNT and CRC register */ + } + tempreg = 0; + if(pSeqCfg->SeqEnable == bTRUE) + tempreg |= BITM_AFE_SEQCON_SEQEN; + tempreg |= (pSeqCfg->SeqWrTimer) << BITP_AFE_SEQCON_SEQWRTMR; + AD5940_WriteReg(REG_AFE_SEQCON, tempreg); + AD5940_WriteReg(REG_AFE_FIFOCON, fifocon); /* restore FIFO configuration */ + + // tempreg = 0; + // if(pSeqCfg->SeqBreakEn) + // tempreg |= 0x01; // add register definition? bitm_afe_ + // if(pSeqCfg->SeqIgnoreEn) + // tempreg |= 0x02; + // AD5940_WriteReg(0x21dc, tempreg); +} +/** + * @brief Read back current sequencer configuration and store it to pSeqCfg + * @param pSeqCfg: Pointer to structure + * @return return AD5940ERR_OK if succeed. +*/ +AD5940Err AD5940_SEQGetCfg(SEQCfg_Type *pSeqCfg) +{ + /* check parameters */ + uint32_t tempreg; + if(pSeqCfg == NULL) + return AD5940ERR_NULLP; + /* Read CMDDATACON register */ + tempreg = AD5940_ReadReg(REG_AFE_CMDDATACON); + pSeqCfg->SeqMemSize = (tempreg&BITM_AFE_CMDDATACON_CMD_MEM_SEL) >> BITP_AFE_CMDDATACON_CMD_MEM_SEL; + pSeqCfg->SeqCntCRCClr = bFALSE; /* Has no meaning */ + /* SEQCON register */ + tempreg = AD5940_ReadReg(REG_AFE_SEQCON); + pSeqCfg->SeqEnable = (tempreg&BITM_AFE_SEQCON_SEQEN)?bTRUE:bFALSE; + pSeqCfg->SeqWrTimer = (tempreg&BITM_AFE_SEQCON_SEQWRTMR) >> BITP_AFE_SEQCON_SEQWRTMR; + return AD5940ERR_OK; +} + +/** + * @brief Enable or Disable sequencer. + * @note Only after valid trigger signal, sequencer can run. + * @return return none. +*/ +void AD5940_SEQCtrlS(BoolFlag SeqEn) +{ + uint32_t tempreg = AD5940_ReadReg(REG_AFE_SEQCON); + if(SeqEn == bTRUE) + tempreg |= BITM_AFE_SEQCON_SEQEN; + else + tempreg &= ~BITM_AFE_SEQCON_SEQEN; + + AD5940_WriteReg(REG_AFE_SEQCON, tempreg); +} + +/** + * @brief Halt sequencer immediately. Use this to debug. In normal application, there is no situation that can use this function. + * @return return none. +*/ +void AD5940_SEQHaltS(void) +{ + AD5940_WriteReg(REG_AFE_SEQCON, BITM_AFE_SEQCON_SEQHALT|BITM_AFE_SEQCON_SEQEN); +} + +/** + * @brief Trigger sequencer by register write. + * @return return none. +**/ +void AD5940_SEQMmrTrig(uint32_t SeqId) +{ + if(SeqId > SEQID_3) + return; + AD5940_WriteReg(REG_AFECON_TRIGSEQ, 1L<SeqId) + { + case SEQID_0: + /* Configure SEQINFO register */ + AD5940_WriteReg(REG_AFE_SEQ0INFO, (pSeq->SeqLen<< 16) | pSeq->SeqRamAddr); + break; + case SEQID_1: + AD5940_WriteReg(REG_AFE_SEQ1INFO, (pSeq->SeqLen<< 16) | pSeq->SeqRamAddr); + break; + case SEQID_2: + AD5940_WriteReg(REG_AFE_SEQ2INFO, (pSeq->SeqLen<< 16) | pSeq->SeqRamAddr); + break; + case SEQID_3: + AD5940_WriteReg(REG_AFE_SEQ3INFO, (pSeq->SeqLen<< 16) | pSeq->SeqRamAddr); + break; + default: + break; + } + if(pSeq->WriteSRAM == bTRUE) + { + AD5940_SEQCmdWrite(pSeq->SeqRamAddr, pSeq->pSeqCmd, pSeq->SeqLen); + } +} + +/** + * @brief Get sequence info: start address and sequence length. + * @param SeqId: Select from {SEQID_0, SEQID_1, SEQID_2, SEQID_3} + - Select which sequence we want to get the information. + @param pSeqInfo: Pointer to sequence info structure. + @return return AD5940ERR_OK when succeed. +*/ +AD5940Err AD5940_SEQInfoGet(uint32_t SeqId, SEQInfo_Type *pSeqInfo) +{ + uint32_t tempreg; + if(pSeqInfo == NULL) return AD5940ERR_NULLP; + switch(SeqId) + { + case SEQID_0: + tempreg = AD5940_ReadReg(REG_AFE_SEQ0INFO); + break; + case SEQID_1: + tempreg = AD5940_ReadReg(REG_AFE_SEQ1INFO); + break; + case SEQID_2: + tempreg = AD5940_ReadReg(REG_AFE_SEQ2INFO); + break; + case SEQID_3: + tempreg = AD5940_ReadReg(REG_AFE_SEQ3INFO); + break; + default: + return AD5940ERR_PARA; + } + pSeqInfo->pSeqCmd = 0; /* We don't know where you store the sequence in MCU SRAM */ + pSeqInfo->SeqId = SeqId; + pSeqInfo->SeqLen = (tempreg>>16)&0x7ff; + pSeqInfo->SeqRamAddr = tempreg&0x7ff; + pSeqInfo->WriteSRAM = bFALSE; /* Don't care */ + + return AD5940ERR_OK; +} + + +/** + @brief Control GPIO with register SYNCEXTDEVICE. Because sequencer have no ability to access register GPIOOUT, + so we use this register for sequencer. + @param Gpio : Select from {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + - The combination of GPIO pins. The selected pins will be set to High. Others will be pulled low. + @return return None. + +**/ +void AD5940_SEQGpioCtrlS(uint32_t Gpio) +{ + AD5940_WriteReg(REG_AFE_SYNCEXTDEVICE, Gpio); +} + +/** + * @brief Read back current count down timer value for Sequencer Timer Out command. + * @return return register value of Sequencer Timer out value. +**/ +uint32_t AD5940_SEQTimeOutRd(void) +{ + return AD5940_ReadReg(REG_AFE_SEQTIMEOUT); +} + +/** + * @brief Configure GPIO to allow it to trigger corresponding sequence(SEQ0/1/2/3). + * @details There are four sequences. We can use GPIO to trigger each sequence. For example, + * GP0 or GP4 can be used to trigger sequence0 and GP3 or GP7 to trigger sequence3. + * There are five mode available to detect pin action: Rising edge, falling edge, both rising and falling + * edge, low level or high level. + * Be careful to use level detection. The trigger signal is always available if the pin level is matched. + * Once the sequence is done, it will immediately run again if the pin level is still matched. + * @return return AD5940ERR_OK if succeed. +**/ +AD5940Err AD5940_SEQGpioTrigCfg(SeqGpioTrig_Cfg *pSeqGpioTrigCfg) +{ + uint32_t reg_ei0con, reg_ei1con; + uint32_t pin_count, pin_mask; + uint32_t mode, en; + if(pSeqGpioTrigCfg == NULL) + return AD5940ERR_NULLP; + reg_ei0con = AD5940_ReadReg(REG_ALLON_EI0CON); + reg_ei1con = AD5940_ReadReg(REG_ALLON_EI1CON); + + pin_count = 0; /* Start from pin0 */ + pin_mask = 0x01; /* start from pin0, mask 0x01 */ + pSeqGpioTrigCfg->SeqPinTrigMode &= 0x07; /* 3bit width */ + + mode = pSeqGpioTrigCfg->SeqPinTrigMode; + en = pSeqGpioTrigCfg->bEnable?1:0; + for(;;) + { + uint32_t bit_position; + if(pSeqGpioTrigCfg->PinSel&pin_mask) + { + if(pin_count < 4) /* EI0CON register */ + { + bit_position = pin_count*4; + reg_ei1con &= ~(0xfL<SeqxWakeupTime[0] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ0WUPH, (pWuptCfg->SeqxWakeupTime[0] & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ0SLEEPL, (pWuptCfg->SeqxSleepTime[0] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ0SLEEPH, (pWuptCfg->SeqxSleepTime[0] & 0xF0000)>>16); + + AD5940_WriteReg(REG_WUPTMR_SEQ1WUPL, (pWuptCfg->SeqxWakeupTime[1] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ1WUPH, (pWuptCfg->SeqxWakeupTime[1] & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ1SLEEPL, (pWuptCfg->SeqxSleepTime[1] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ1SLEEPH, (pWuptCfg->SeqxSleepTime[1] & 0xF0000)>>16); + + AD5940_WriteReg(REG_WUPTMR_SEQ2WUPL, (pWuptCfg->SeqxWakeupTime[2] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ2WUPH, (pWuptCfg->SeqxWakeupTime[2] & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ2SLEEPL, (pWuptCfg->SeqxSleepTime[2] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ2SLEEPH, (pWuptCfg->SeqxSleepTime[2] & 0xF0000)>>16); + + AD5940_WriteReg(REG_WUPTMR_SEQ3WUPL, (pWuptCfg->SeqxWakeupTime[3] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ3WUPH, (pWuptCfg->SeqxWakeupTime[3] & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ3SLEEPL, (pWuptCfg->SeqxSleepTime[3] & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ3SLEEPH, (pWuptCfg->SeqxSleepTime[3] & 0xF0000)>>16); + + /* TMRCON register */ + //if(pWuptCfg->WakeupEn == bTRUE) /* enable use Wupt to wakeup AFE */ + /* We always allow Wupt to wakeup AFE automatically. */ + AD5940_WriteReg(REG_ALLON_TMRCON, BITM_ALLON_TMRCON_TMRINTEN); + /* Wupt order */ + tempreg = 0; + tempreg |= (pWuptCfg->WuptOrder[0]&0x03) << BITP_WUPTMR_SEQORDER_SEQA; /* position A */ + tempreg |= (pWuptCfg->WuptOrder[1]&0x03) << BITP_WUPTMR_SEQORDER_SEQB; /* position B */ + tempreg |= (pWuptCfg->WuptOrder[2]&0x03) << BITP_WUPTMR_SEQORDER_SEQC; /* position C */ + tempreg |= (pWuptCfg->WuptOrder[3]&0x03) << BITP_WUPTMR_SEQORDER_SEQD; /* position D */ + tempreg |= (pWuptCfg->WuptOrder[4]&0x03) << BITP_WUPTMR_SEQORDER_SEQE; /* position E */ + tempreg |= (pWuptCfg->WuptOrder[5]&0x03) << BITP_WUPTMR_SEQORDER_SEQF; /* position F */ + tempreg |= (pWuptCfg->WuptOrder[6]&0x03) << BITP_WUPTMR_SEQORDER_SEQG; /* position G */ + tempreg |= (pWuptCfg->WuptOrder[7]&0x03) << BITP_WUPTMR_SEQORDER_SEQH; /* position H */ + AD5940_WriteReg(REG_WUPTMR_SEQORDER, tempreg); + + tempreg = 0; + if(pWuptCfg->WuptEn == bTRUE) + tempreg |= BITM_WUPTMR_CON_EN; + /* We always allow Wupt to trigger sequencer */ + tempreg |= pWuptCfg->WuptEndSeq << BITP_WUPTMR_CON_ENDSEQ; + //tempreg |= 1L<<4; + AD5940_WriteReg(REG_WUPTMR_CON, tempreg); +} + +/** + * @brief Enable or disable wakeup timer + * @param Enable : {bTRUE, bFALSE} + * - bTRUE: enable wakeup timer + * - bFALSE: Disable wakeup timer + * @return return none. +*/ +void AD5940_WUPTCtrl(BoolFlag Enable) +{ + uint16_t tempreg; + tempreg = AD5940_ReadReg(REG_WUPTMR_CON); + tempreg &= ~BITM_WUPTMR_CON_EN; + + if(Enable == bTRUE) + tempreg |= BITM_WUPTMR_CON_EN; + + AD5940_WriteReg(REG_WUPTMR_CON, tempreg); +} + +/** + * @brief Configure WakeupTimer. + * @param SeqId: Select from SEQID_0/1/2/3. The wakeup timer will load corresponding value from four sets of registers. + * @param SleepTime: After how much time, AFE will try to enter hibernate. We disabled this feature in AD59840_Initialize. After this timer expired, nothing will happen. + * @param WakeupTime: After how much time, AFE will wakeup and trigger corresponding sequencer. + * @note By SleepTime and WakeupTime, the sequencer is triggered periodically and period is (SleepTime+WakeupTime) + * @return return none. +*/ +AD5940Err AD5940_WUPTTime(uint32_t SeqId, uint32_t SleepTime, uint32_t WakeupTime) +{ + switch (SeqId) + { + case SEQID_0: + { + AD5940_WriteReg(REG_WUPTMR_SEQ0WUPL, (WakeupTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ0WUPH, (WakeupTime & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ0SLEEPL, (SleepTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ0SLEEPH, (SleepTime & 0xF0000)>>16); + break; + } + case SEQID_1: + { + AD5940_WriteReg(REG_WUPTMR_SEQ1WUPL, (WakeupTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ1WUPH, (WakeupTime & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ1SLEEPL, (SleepTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ1SLEEPH, (SleepTime & 0xF0000)>>16); + break; + } + case SEQID_2: + { + AD5940_WriteReg(REG_WUPTMR_SEQ2WUPL, (WakeupTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ2WUPH, (WakeupTime & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ2SLEEPL, (SleepTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ2SLEEPH, (SleepTime & 0xF0000)>>16); + break; + } + case SEQID_3: + { + AD5940_WriteReg(REG_WUPTMR_SEQ3WUPL, (WakeupTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ3WUPH, (WakeupTime & 0xF0000)>>16); + AD5940_WriteReg(REG_WUPTMR_SEQ3SLEEPL, (SleepTime & 0xFFFF)); + AD5940_WriteReg(REG_WUPTMR_SEQ3SLEEPH, (SleepTime & 0xF0000)>>16); + break; + } + default: + return AD5940ERR_PARA; + } + return AD5940ERR_OK; +} + +/** + * @} end-of Sequencer_FIFO_Functions + * @} end-of Sequencer_FIFO +*/ + +/** + * @defgroup MISC_Block + * @brief Other functions not included in above blocks. Clock, GPIO, INTC etc. + * @{ + * @defgroup MISC_Block_Functions + * @{ +*/ + +/** + * @brief Configure AD5940 clock + * @param pClkCfg: Pointer to configuration structure. + * @return return none. +*/ +void AD5940_CLKCfg(CLKCfg_Type *pClkCfg) +{ + uint32_t tempreg, reg_osccon; + + reg_osccon = AD5940_ReadReg(REG_ALLON_OSCCON); + /* Enable clocks */ + if(pClkCfg->HFXTALEn == bTRUE) + { + reg_osccon |= BITM_ALLON_OSCCON_HFXTALEN; + AD5940_WriteReg(REG_ALLON_OSCKEY,KEY_OSCCON); /* Write Key */ + AD5940_WriteReg(REG_ALLON_OSCCON, reg_osccon); /* Enable HFXTAL */ + while((AD5940_ReadReg(REG_ALLON_OSCCON)&BITM_ALLON_OSCCON_HFXTALOK) == 0); /* Wait for clock ready */ + } + + if(pClkCfg->HFOSCEn == bTRUE) + { + reg_osccon |= BITM_ALLON_OSCCON_HFOSCEN; + AD5940_WriteReg(REG_ALLON_OSCKEY,KEY_OSCCON); /* Write Key */ + AD5940_WriteReg(REG_ALLON_OSCCON, reg_osccon); /* Enable HFOSC */ + while((AD5940_ReadReg(REG_ALLON_OSCCON)&BITM_ALLON_OSCCON_HFOSCOK) == 0); /* Wait for clock ready */ + /* Configure HFOSC mode if it's enabled. */ + if(pClkCfg->HfOSC32MHzMode == bTRUE) + AD5940_HFOSC32MHzCtrl(bTRUE); + else + AD5940_HFOSC32MHzCtrl(bFALSE); + } + + if(pClkCfg->LFOSCEn == bTRUE) + { + reg_osccon |= BITM_ALLON_OSCCON_LFOSCEN; + AD5940_WriteReg(REG_ALLON_OSCKEY,KEY_OSCCON); /* Write Key */ + AD5940_WriteReg(REG_ALLON_OSCCON, reg_osccon); /* Enable LFOSC */ + while((AD5940_ReadReg(REG_ALLON_OSCCON)&BITM_ALLON_OSCCON_LFOSCOK) == 0); /* Wait for clock ready */ + } + + /* Switch clocks */ + /* step1. Set clock divider */ + tempreg = pClkCfg->SysClkDiv&0x3f; + tempreg |= (pClkCfg->SysClkDiv&0x3f) << BITP_AFECON_CLKCON0_SYSCLKDIV; + tempreg |= (pClkCfg->ADCClkDiv&0xf) << BITP_AFECON_CLKCON0_ADCCLKDIV; + AD5940_WriteReg(REG_AFECON_CLKCON0, tempreg); + AD5940_Delay10us(10); + /* Step2. set clock source */ + tempreg = pClkCfg->SysClkSrc; + tempreg |= pClkCfg->ADCCLkSrc << BITP_AFECON_CLKSEL_ADCCLKSEL; + AD5940_WriteReg(REG_AFECON_CLKSEL, tempreg); + + /* Disable clocks */ + if(pClkCfg->HFXTALEn == bFALSE) + reg_osccon &= ~BITM_ALLON_OSCCON_HFXTALEN; + if(pClkCfg->HFOSCEn == bFALSE) + reg_osccon &= ~BITM_ALLON_OSCCON_HFOSCEN; + if(pClkCfg->LFOSCEn == bFALSE) + reg_osccon &= ~BITM_ALLON_OSCCON_LFOSCEN; + AD5940_WriteReg(REG_ALLON_OSCKEY, KEY_OSCCON); /* Write Key */ + AD5940_WriteReg(REG_ALLON_OSCCON, reg_osccon); +} + +/** + * @brief Configure Internal HFOSC to output 32MHz or 16MHz. + * @param Mode32MHz : {bTRUE, bFALSE} + * - bTRUE: HFOSC 32MHz mode. + * - bFALSE: HFOSC 16MHz mode. + * @return return none. +*/ +void AD5940_HFOSC32MHzCtrl(BoolFlag Mode32MHz) +{ + uint32_t RdCLKEN1; + uint32_t RdHPOSCCON; + + uint32_t bit8,bit9; + + RdCLKEN1 = AD5940_ReadReg(REG_AFECON_CLKEN1); + bit8 = (RdCLKEN1>>9)&0x01; + bit9 = (RdCLKEN1>>8)&0x01; /* Fix bug in silicon, bit8 and bit9 is swapped when read back. */ + RdCLKEN1 = RdCLKEN1&0xff; + RdCLKEN1 |= (bit8<<8)|(bit9<<9); + AD5940_WriteReg(REG_AFECON_CLKEN1,RdCLKEN1|BITM_AFECON_CLKEN1_ACLKDIS); /* Disable ACLK during clock changing */ + + RdHPOSCCON = AD5940_ReadReg(REG_AFE_HPOSCCON); + if(Mode32MHz == bTRUE) + { + AD5940_WriteReg(REG_AFE_HPOSCCON,RdHPOSCCON&(~BITM_AFE_HPOSCCON_CLK32MHZEN)); /* Enable 32MHz output(bit definition-0: 32MHz, 1: 16MHz) */ + while((AD5940_ReadReg(REG_ALLON_OSCCON)&BITM_ALLON_OSCCON_HFOSCOK) == 0); /* Wait for clock ready */ + } + else + { + AD5940_WriteReg(REG_AFE_HPOSCCON,RdHPOSCCON|BITM_AFE_HPOSCCON_CLK32MHZEN); /* Enable 16MHz output(bit definition-0: 32MHz, 1: 16MHz) */ + while((AD5940_ReadReg(REG_ALLON_OSCCON)&BITM_ALLON_OSCCON_HFOSCOK) == 0); /* Wait for clock ready */ + } + + AD5940_WriteReg(REG_AFECON_CLKEN1,RdCLKEN1&(~BITM_AFECON_CLKEN1_ACLKDIS)); /* Enable ACLK */ +} +/** + * @brief Enable high power mode for high frequency EIS + * @param Mode32MHz : {bTRUE, bFALSE} + * - bTRUE: HFOSC 32MHz mode. + * - bFALSE: HFOSC 16MHz mode. + * @return return none. +*/ +void AD5940_HPModeEn(BoolFlag Enable) +{ + CLKCfg_Type clk_cfg; + uint32_t temp_reg = 0; + + /* Check what the system clock is */ + temp_reg = AD5940_ReadReg(REG_AFECON_CLKSEL); + clk_cfg.ADCCLkSrc = (temp_reg>>2)&0x3; + clk_cfg.SysClkSrc = temp_reg & 0x3; + if(Enable == bTRUE) + { + clk_cfg.SysClkDiv = SYSCLKDIV_2; + clk_cfg.HfOSC32MHzMode = bTRUE; + AD5940_AFEPwrBW(AFEPWR_HP, AFEBW_250KHZ); + } + else + { + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.HfOSC32MHzMode = bFALSE; + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_100KHZ); + } + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.HFOSCEn = (temp_reg & 0x3) == 0x1? bFALSE : bTRUE;; + clk_cfg.HFXTALEn = (temp_reg & 0x3) == 0x1? bTRUE : bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); +} + +/** + * @defgroup Interrupt_Controller_Functions + * @{ +*/ +/* AFE Interrupt Controller */ +/** + * @brief Enable or Disable selected interrupt source(s) + * @param AfeIntcSel : {AFEINTC_0, AFEINTC_1} + * - AFEINTC_0: Configure Interrupt Controller 0 + * - AFEINTC_1: Configure Interrupt Controller 1 + * @param AFEIntSrc: select from @ref AFEINTC_SRC_Const + * - AFEINTSRC_ADCRDY : Bit0 ADC Result Ready Status + * - AFEINTSRC_DFTRDY : Bit1 DFT Result Ready Status + * - AFEINTSRC_SUPPLYFILTRDY : Bit2 Low Pass Filter Result Status + * - AFEINTSRC_TEMPRDY : Bit3, Temp Sensor Result Ready + * - AFEINTSRC_ADCMINERR : Bit4, ADC Minimum Value + * - AFEINTSRC_ADCMAXERR : Bit5, ADC Maximum Value + * - AFEINTSRC_ADCDIFFERR : Bit6, ADC Delta Ready + * - AFEINTSRC_MEANRDY : Bit7, Mean Result Ready + * - AFEINTSRC_VARRDY : Bit8, Variance Result Ready + * - AFEINTSRC_DLYCMDDONE : Bit9, User controlled interrupt by writing AFEGENINTSTA. Provides an Early Indication for the End of the Test _Block. + * - AFEINTSRC_HWSETUPDONE : Bit10, User controlled interrupt by writing AFEGENINTSTA. Indicates the MMR Setup for the Measurement Step Finished + * - AFEINTSRC_BRKSEQ : Bit11, User controlled interrupt by writing AFEGENINTSTA. + * - AFEINTSRC_CUSTOMINS : Bit12, User controlled interrupt by writing AFEGENINTSTA. General Purpose Custom Interrupt. + * - AFEINTSRC_BOOTLDDONE : Bit13, OTP Boot Loading Done + * - AFEINTSRC_WAKEUP : Bit14, AFE Woken up + * - AFEINTSRC_ENDSEQ : Bit15, End of Sequence Interrupt. + * - AFEINTSRC_SEQTIMEOUT : Bit16, Sequencer Timeout Command Finished. + * - AFEINTSRC_SEQTIMEOUTERR : Bit17, Sequencer Timeout Command Error. + * - AFEINTSRC_CMDFIFOFULL : Bit18, Command FIFO Full Interrupt. + * - AFEINTSRC_CMDFIFOEMPTY : Bit19, Command FIFO Empty + * - AFEINTSRC_CMDFIFOTHRESH: Bit20, Command FIFO Threshold Interrupt. + * - AFEINTSRC_CMDFIFOOF : Bit21, Command FIFO Overflow Interrupt. + * - AFEINTSRC_CMDFIFOUF : Bit22, Command FIFO Underflow Interrupt. + * - AFEINTSRC_DATAFIFOFULL : Bit23, Data FIFO Full Interrupt. + * - AFEINTSRC_DATAFIFOEMPTY: Bit24, Data FIFO Empty + * - AFEINTSRC_DATAFIFOTHRESH: Bit25, Data FIFO Threshold Interrupt. + * - AFEINTSRC_DATAFIFOOF : Bit26, Data FIFO Overflow Interrupt. + * - AFEINTSRC_DATAFIFOUF : Bit27, Data FIFO Underflow Interrupt. + * - AFEINTSRC_WDTIRQ : Bit28, WDT Timeout Interrupt. + * - AFEINTSRC_CRC_OUTLIER : Bit29, CRC interrupt for M355, Outliers Int for AD5940 + * - AFEINTSRC_GPT0INT_SLPWUT: Bit30, General Purpose Timer0 IRQ for M355. Sleep or Wakeup Timer timeout for AD5940 + * - AFEINTSRC_GPT1INT_TRYBRK: Bit31, General Purpose Timer1 IRQ for M355. Tried to Break IRQ for AD5940 + * - AFE_INTC_ALLINT : All interrupts + * @param State : {bTRUE, bFALSE} + * - bTRUE: Enable these interrupt source(s) + * - bFALSE: Disable interrupt source(s) + * @return return none. +*/ +void AD5940_INTCCfg(uint32_t AfeIntcSel, uint32_t AFEIntSrc, BoolFlag State) +{ + uint32_t tempreg; + uint32_t regaddr = REG_INTC_INTCSEL0; + + if(AfeIntcSel == AFEINTC_1) + regaddr = REG_INTC_INTCSEL1; + + tempreg = AD5940_ReadReg(regaddr); + if(State == bTRUE) + tempreg |= AFEIntSrc; /* Enable this interrupt */ + else + tempreg &= ~(AFEIntSrc); /* Disable this interrupt */ + AD5940_WriteReg(regaddr,tempreg); +} + +/** + * @brief Check if current interrupt configuration. + * @param AfeIntcSel : {AFEINTC_0, AFEINTC_1} + * - AFEINTC_0: Configure Interrupt Controller 0 + * - AFEINTC_1: Configure Interrupt Controller 1 +*/ +uint32_t AD5940_INTCGetCfg(uint32_t AfeIntcSel) +{ + uint32_t tempreg; + if(AfeIntcSel == AFEINTC_0) + tempreg = AD5940_ReadReg(REG_INTC_INTCSEL0); + else + tempreg = AD5940_ReadReg(REG_INTC_INTCSEL1); + return tempreg; +} + +/** + * @brief Clear selected interrupt(s) flag(INTC0Flag and INTC1Flag are both cleared). + * @param AfeIntSrcSel: Select from @ref AFEINTC_SRC_Const + * @return return none. +**/ +void AD5940_INTCClrFlag(uint32_t AfeIntSrcSel) +{ + AD5940_WriteReg(REG_INTC_INTCCLR,AfeIntSrcSel); +} + +/** + * @brief Test if selected interrupt source(s) is(are) bTRUE. + * @param AfeIntcSel : {AFEINTC_0, AFEINTC_1} + * - AFEINTC_0: Read Interrupt Controller 0 flag + * - AFEINTC_1: Read Interrupt Controller 1 flag + * @param AfeIntSrcSel: Select from @ref AFEINTC_SRC_Const + * @return If selected interrupt source(s) are all cleared, return bFALSE. Otherwise return bTRUE. +**/ +BoolFlag AD5940_INTCTestFlag(uint32_t AfeIntcSel, uint32_t AfeIntSrcSel) +{ + uint32_t tempreg; + uint32_t regaddr = (AfeIntcSel == AFEINTC_0)? REG_INTC_INTCFLAG0: REG_INTC_INTCFLAG1; + + tempreg = AD5940_ReadReg(regaddr); + if(tempreg & AfeIntSrcSel) + return bTRUE; + else + return bFALSE; +} + +/** + * @brief return register value of REG_INTC_INTCFLAGx + * @param AfeIntcSel : {AFEINTC_0, AFEINTC_1} + * - AFEINTC_0: Read Interrupt Controller 0 flag + * - AFEINTC_1: Read Interrupt Controller 1 flag + * @return register value of REG_INTC_INTCFLAGx. +**/ +uint32_t AD5940_INTCGetFlag(uint32_t AfeIntcSel) +{ + uint32_t tempreg; + uint32_t regaddr = (AfeIntcSel == AFEINTC_0)? REG_INTC_INTCFLAG0: REG_INTC_INTCFLAG1; + + tempreg = AD5940_ReadReg(regaddr); + return tempreg; +} + +/** + * @} Interrupt_Controller_Functions +*/ + +/** + * @defgroup GPIO_Block_Functions + * @{ +*/ + +/** + * @brief Initialize AFE GPIO + * @param pAgpioCfg: Pointer to configuration structure + * @return return none. +*/ +void AD5940_AGPIOCfg(AGPIOCfg_Type *pAgpioCfg) +{ + AD5940_AGPIOFuncCfg(pAgpioCfg->FuncSet); + AD5940_AGPIOOen(pAgpioCfg->OutputEnSet); + AD5940_AGPIOIen(pAgpioCfg->InputEnSet); + AD5940_AGPIOPen(pAgpioCfg->PullEnSet); + AD5940_WriteReg(REG_AGPIO_GP0OUT, pAgpioCfg->OutVal); +} + +/** + * @brief Configure the function of GP0 to GP7. + * @param uiCfgSet :{GP0_INT,GP0_TRIG,GP0_SYNC,GP0_GPIO| + * GP1_GPIO,GP1_TRIG,GP1_SYNC,GP1_SLEEP| + * GP2_PORB,GP2_TRIG,GP2_SYNC,GP2_EXTCLK| + * GP3_GPIO,GP3_TRIG,GP3_SYNC,GP3_INT0|\ + * GP4_GPIO,GP4_TRIG,GP4_SYNC,GP4_INT1| + * GP5_GPIO,GP5_TRIG,GP5_SYNC,GP5_EXTCLK| + * GP6_GPIO,GP6_TRIG,GP6_SYNC,GP6_INT0| + * GP7_GPIO,GP7_TRIG,GP7_SYNC,GP7_INT} + * @return return none. +**/ +void AD5940_AGPIOFuncCfg(uint32_t uiCfgSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0CON,uiCfgSet); +} + +/** + * @brief Enable GPIO output mode on selected pins. Disable output on non-selected pins. + * @param uiPinSet :Select from {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOOen(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0OEN,uiPinSet); +} + +/** + * @brief Enable input on selected pins while disable others. + * @param uiPinSet: Select from {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOIen(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0IEN,uiPinSet); +} + +/** + * @brief Read the GPIO status. + * @return return GP0IN register which is the GPIO status. +**/ +uint32_t AD5940_AGPIOIn(void) +{ + return AD5940_ReadReg(REG_AGPIO_GP0IN); +} + +/** + * @brief Enable pull-up or down on selected pins while disable other pins. + * @param uiPinSet: Select from: {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOPen(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0PE,uiPinSet); +} + +/** + * @brief Put selected GPIOs to high level. + * @param uiPinSet: Select from: {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOSet(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0SET,uiPinSet); +} + +/** + * @brief Put selected GPIOs to low level. + * @param uiPinSet: Select from: {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOClr(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0CLR,uiPinSet); +} + +/** + * @brief Toggle selected GPIOs. + * @param uiPinSet: Select from: {AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin3|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6|AGPIO_Pin7} + * @return return none +**/ +void AD5940_AGPIOToggle(uint32_t uiPinSet) +{ + AD5940_WriteReg(REG_AGPIO_GP0TGL,uiPinSet); +} + +/** + * @} GPIO_Block_Functions +*/ + +/** + * @defgroup LPMode_Block_Functions + * @{ +*/ +/** + * @brief Enter or leave LPMODE. + * @details Once enter this mode, some registers are collected together to a new register so we can + * Control most blocks with in one register. The so called LPMODE has nothing to do with AD5940 power. + * @return return AD5940ERR_OK +**/ +AD5940Err AD5940_LPModeEnS(BoolFlag LPModeEn) +{ + if(LPModeEn == bTRUE) + AD5940_WriteReg(REG_AFE_LPMODEKEY, KEY_LPMODEKEY); /* Enter LP mode by right key. */ + else + AD5940_WriteReg(REG_AFE_LPMODEKEY, 0); /* Write wrong key to exit LP mode */ + return AD5940ERR_OK; +} + +/** + * @brief Select system clock source for LPMODE. + * @note Only in LP Mode, this operation takes effect. Enter LPMODE by function @ref AD5940_LPModeEnS. + * @param LPModeClk: Select from @ref LPMODECLK_Const + * - LPMODECLK_LFOSC: Select LFOSC 32kHz for system clock + * - LPMODECLK_HFOSC: Select HFOSC 16MHz/32MHz for system clock + * @return none. +*/ +void AD5940_LPModeClkS(uint32_t LPModeClk) +{ + AD5940_WriteReg(REG_AFE_LPMODECLKSEL, LPModeClk); +} + +/** + * @} LPMode_Block_Functions +*/ + +/** + * @brief Enter sleep mode key to unlock it or enter incorrect key to lock it. \ + * Once key is unlocked, it will always be effect until manually lock it + * @param SlpKey : {SLPKEY_UNLOCK, SLPKEY_LOCK} + - SLPKEY_UNLOCK Unlock Key so we can enter sleep(or called hibernate) mode. + - SLPKEY_LOCK Lock key so AD5940 is prohibited to enter sleep mode. + @return return none. +*/ +void AD5940_SleepKeyCtrlS(uint32_t SlpKey) +{ + AD5940_WriteReg(REG_AFE_SEQSLPLOCK, SlpKey); +} + +/** + * @brief Put AFE to hibernate. + * @details This will only take effect when SLP_KEY has been unlocked. Use function @ref AD5940_SleepKeyCtrlS to enter correct key. + * @return return none. +*/ +void AD5940_EnterSleepS(void) +{ + AD5940_WriteReg(REG_AFE_SEQTRGSLP, 0); + AD5940_WriteReg(REG_AFE_SEQTRGSLP, 1); +} + +/** + * @brief Turn off LP-Loop and put AFE to hibernate mode; + * @details By function @ref AD5940_EnterSleepS, we can put most blocks to hibernate mode except LP block. + * This function will shut down LP block and then enter sleep mode. + * @return return none. +*/ +void AD5940_ShutDownS(void) +{ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + /* Turn off LP-loop manually because it's not affected by sleep/hibernate mode */ + AD5940_StructInit(&aferef_cfg, sizeof(aferef_cfg)); + AD5940_StructInit(&lp_loop, sizeof(lp_loop)); + AD5940_REFCfgS(&aferef_cfg); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Unlock the key */ + AD5940_EnterSleepS(); /* Enter Hibernate */ +} + +/** + * @brief Try to wakeup AD5940 by read register. + * @details Any SPI operation can wakeup AD5940. AD5940_Initialize must be called to enable this function. + * @param TryCount Specify how many times we will read register. Zero or negative number means always waiting here. + * @return How many times register is read. If returned value is bigger than TryCount, it means wakeup failed. +*/ +uint32_t AD5940_WakeUp(int32_t TryCount) +{ + uint32_t count = 0; + while(1) + { + count++; + if(AD5940_ReadReg(REG_AFECON_ADIID) == AD5940_ADIID) + break; /* Succeed */ + if(TryCount<=0) + continue; /* Always try to wakeup AFE */ + + if(count > TryCount) + break; /* Failed */ + } + return count; +} + +/** + * @brief Read ADIID register, the value for current version is @ref AD5940_ADIID + * @return return none. +*/ +uint32_t AD5940_GetADIID(void) +{ + return AD5940_ReadReg(REG_AFECON_ADIID); +} + +/** + * @brief Read CHIPID register, the value for current version is 0x5501. + * @return return none. +*/ +uint32_t AD5940_GetChipID(void) +{ + return AD5940_ReadReg(REG_AFECON_CHIPID); +} +/** + * @brief Reset AD5940 by register. + * @note AD5940 must be in active state so we can access registers. + * If AD5940 system clock is too low, we consider to use hardware reset, or + * we need to make sure register write is successfully. + * @return return none. +*/ +AD5940Err AD5940_SoftRst(void) +{ + AD5940_WriteReg(REG_AFECON_SWRSTCON, AD5940_SWRST); + AD5940_Delay10us(20); /* AD5940 need some time to exit reset status. 200us looks good. */ + /* We can check RSTSTA register to make sure software reset happened. */ + return AD5940ERR_OK; +} + +/** + * @brief Reset AD5940 with RESET pin. + * @note This will call function AD5940_RstClr which locates in file XXXPort.C + * @return return none. +*/ +void AD5940_HWReset(void) +{ +#ifndef CHIPSEL_M355 + AD5940_RstClr(); + AD5940_Delay10us(200); /* Delay some time */ + AD5940_RstSet(); + AD5940_Delay10us(500); /* AD5940 need some time to exit reset status. 200us looks good. */ +#else + //There is no method to reset AFE only for M355. +#endif +} + +/** + * @} MISC_Block_Functions + * @} MISC_Block +*/ + +/** + * @defgroup Calibration_Block + * @brief The non-factory calibration routines. + * @{ + * @defgroup Calibration_Functions + * @{ + * + * + */ +/** + * @brief Turn on High power 1.8V/1.1V reference and 2.5V LP reference. + * @return return none. +*/ +static void __AD5940_ReferenceON(void) +{ + AFERefCfg_Type ref_cfg; + /* Turn ON ADC/DAC and LPDAC reference */ + ref_cfg.Hp1V1BuffEn = bTRUE; + ref_cfg.Hp1V8BuffEn = bTRUE; + ref_cfg.HpBandgapEn = bTRUE; + ref_cfg.HSDACRefEn = bTRUE; + ref_cfg.LpBandgapEn = bTRUE; + ref_cfg.LpRefBufEn = bTRUE; + + ref_cfg.Disc1V1Cap = bFALSE; + ref_cfg.Disc1V8Cap = bFALSE; + ref_cfg.Hp1V8Ilimit = bFALSE; + ref_cfg.Hp1V8ThemBuff = bFALSE; + ref_cfg.Lp1V1BuffEn = bFALSE; + ref_cfg.Lp1V8BuffEn = bFALSE; + ref_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&ref_cfg); +} + +/** + * @brief Turn on ADC to sample one SINC2 data. + * @return return ADCCode. +*/ +static uint32_t __AD5940_TakeMeasurement(int32_t *time_out) +{ + uint32_t ADCCode = 0; + AD5940_INTCClrFlag(AFEINTSRC_SINC2RDY); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_SINC2NOTCH, bTRUE);/* Start conversion */ + do + { + AD5940_Delay10us(1); /* Delay 10us */ + if(AD5940_INTCTestFlag(AFEINTC_1,AFEINTSRC_SINC2RDY)) + { + ADCCode = AD5940_ReadAfeResult(AFERESULT_SINC2); + break; + } + if(*time_out != -1) + (*time_out)--; + }while(*time_out != 0); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_SINC2NOTCH, bFALSE);/* Stop conversion */ + return ADCCode; +} + +/** + @brief Calibrate ADC PGA + @param pADCPGACal: PGA calibration parameters include filter setup and PGA gain. + @return AD5940ERR_OK. +**/ +AD5940Err AD5940_ADCPGACal(ADCPGACal_Type *pADCPGACal) +{ + const float kFactor = 1.835f/1.82f; + ADCBaseCfg_Type adc_base; + + int32_t time_out; + uint32_t INTCCfg; + int32_t ADCCode; + BoolFlag bADCClk32MHzMode; + + uint32_t regaddr_gain, regaddr_offset; + + if(pADCPGACal == NULL) return AD5940ERR_NULLP; + if(pADCPGACal->ADCPga > ADCPGA_9) return AD5940ERR_PARA; /* Parameter Error */ + + if(pADCPGACal->AdcClkFreq > (32000000*0.8)) + bADCClk32MHzMode = bTRUE; + + /** + * Determine Gain calibration method according to different gain value... + * and calibration register + * */ + static const struct _cal_registers + { + uint16_t gain_reg; + uint16_t offset_reg; + }cal_registers[] = { + {REG_AFE_ADCGAINGN1,REG_AFE_ADCOFFSETGN1}, + {REG_AFE_ADCGAINGN1P5,REG_AFE_ADCOFFSETGN1P5}, + {REG_AFE_ADCGAINGN2,REG_AFE_ADCOFFSETGN2}, + {REG_AFE_ADCGAINGN4,REG_AFE_ADCOFFSETGN4}, + {REG_AFE_ADCGAINGN9,REG_AFE_ADCOFFSETGN9}, + }; + regaddr_gain = cal_registers[pADCPGACal->ADCPga].gain_reg; + regaddr_offset = cal_registers[pADCPGACal->ADCPga].offset_reg; + + /* Do initialization */ + __AD5940_ReferenceON(); + ADCFilterCfg_Type adc_filter; + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH. Use SIN2 data for calibration-->Lower noise */ + adc_filter.ADCSinc3Osr = pADCPGACal->ADCSinc3Osr; + adc_filter.ADCSinc2Osr = pADCPGACal->ADCSinc2Osr; /* 800KSPS/4/1333 = 150SPS */ + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = bADCClk32MHzMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + /* Turn ON reference and ADC power, and DAC reference. We use DAC 1.8V reference to calibrate ADC because of the ADC reference bug. */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Disable all */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_HPREFPWR|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_Delay10us(25); /* Wait 250us for reference power up */ + /* INTC configure and open calibration lock */ + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, KEY_CALDATLOCK); /* Unlock KEY */ + + /* Do offset calibration. */ + if(pADCPGACal->PGACalType != PGACALTYPE_GAIN){ /* Need offset calibration */ + int32_t ExpectedCode = 0x8000; /* Ideal ADC output */ + AD5940_WriteReg(regaddr_offset, 0); /* Reset offset register */ + + adc_base.ADCMuxP = ADCMUXP_VSET1P1; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; /* Short input with common voltage set to 1.11v */ + adc_base.ADCPga = pADCPGACal->ADCPga; /* Set correct Gain value. */ + AD5940_ADCBaseCfgS(&adc_base); + AD5940_Delay10us(5); /* Wait for sometime */ + ADCCode = 0; + for(int i=0; i<8; i++) + { /* ADC offset calibration register has resolution of 0.25LSB. take full use of it. */ + time_out = pADCPGACal->TimeOut10us; /* Reset time out counter */ + ADCCode += __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) goto ADCPGACALERROR_TIMEOUT; /* Time out error. */ + } + /* Calculate and write the result to registers before gain calibration */ + ADCCode = (ExpectedCode<<3) - ADCCode; /* We will shift back 1bit below */ + /** + * AD5940 use formular Output = gain*(input + offset) for calibration. + * So, the measured results should be divided by gain to get value for offset register. + */ + uint32_t gain = AD5940_ReadReg(regaddr_gain); + ADCCode = (ADCCode*0x4000)/gain; + ADCCode = ((ADCCode+1)>>1)&0x7fff; /* Round 0.5 */ + AD5940_WriteReg(regaddr_offset, ADCCode); + } + + /* Do gain calibration */ + if(pADCPGACal->PGACalType != PGACALTYPE_OFFSET) /* Need gain calibration */ + { + int32_t ExpectedGainCode; + static const float ideal_pga_gain[]={1,1.5,2,4,9}; + AD5940_WriteReg(regaddr_gain, 0x4000); /* Reset gain register */ + if(pADCPGACal->ADCPga <= ADCPGA_2) + { + //gain1,1.5,2 could use reference directly + adc_base.ADCMuxP = ADCMUXP_VREF1P8DAC; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + ExpectedGainCode = (int32_t)((pADCPGACal->VRef1p82 - pADCPGACal->VRef1p11)*ideal_pga_gain[pADCPGACal->ADCPga]/\ + pADCPGACal->VRef1p82*32768/kFactor)\ + + 0x8000; + } + else + { + //gain4,9 use DAC generated voltage + adc_base.ADCMuxP = ADCMUXP_P_NODE; + adc_base.ADCMuxN = ADCMUXN_N_NODE; + /* Setup HSLOOP to generate voltage for GAIN4/9 calibration. */ + AD5940_AFECtrlS(AFECTRL_EXTBUFPWR|AFECTRL_INAMPPWR|AFECTRL_HSTIAPWR|AFECTRL_WG, bTRUE); + HSLoopCfg_Type hsloop_cfg; + hsloop_cfg.HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + hsloop_cfg.HsDacCfg.HsDacGain = HSDACGAIN_1; + hsloop_cfg.HsDacCfg.HsDacUpdateRate = 7; + hsloop_cfg.HsTiaCfg.DiodeClose = bFALSE; + hsloop_cfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hsloop_cfg.HsTiaCfg.HstiaCtia = 31; + hsloop_cfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDe1Rload = HSTIADERLOAD_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDe1Rtia = HSTIADERTIA_OPEN; + hsloop_cfg.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_200; + hsloop_cfg.SWMatCfg.Dswitch = SWD_OPEN; + hsloop_cfg.SWMatCfg.Pswitch = SWP_PL; + hsloop_cfg.SWMatCfg.Nswitch = SWN_NL; + hsloop_cfg.SWMatCfg.Tswitch = SWT_TRTIA; + hsloop_cfg.WgCfg.GainCalEn = bTRUE; + hsloop_cfg.WgCfg.OffsetCalEn = bTRUE; + hsloop_cfg.WgCfg.WgType = WGTYPE_MMR; + uint32_t HSDACCode; + if(pADCPGACal->ADCPga == ADCPGA_4) + HSDACCode = 0x800 + 0x300; /* 0x300--> 0x300/0x1000*0.8*BUFFERGAIN2 = 0.3V. */ + else if(pADCPGACal->ADCPga == ADCPGA_9) + HSDACCode = 0x800 + 0x155; /* 0x155--> 0x155/0x1000*0.8*BUFFERGAIN2 = 0.133V. */ + hsloop_cfg.WgCfg.WgCode = HSDACCode; + AD5940_HSLoopCfgS(&hsloop_cfg); + + //measure expected code + adc_base.ADCPga = ADCPGA_1P5; + AD5940_ADCBaseCfgS(&adc_base); + AD5940_Delay10us(5); + time_out = pADCPGACal->TimeOut10us; /* Reset time out counter */ + ExpectedGainCode = 0x8000 + (int32_t)((__AD5940_TakeMeasurement(&time_out) - 0x8000)/1.5f\ + *ideal_pga_gain[pADCPGACal->ADCPga]); + if(time_out == 0) goto ADCPGACALERROR_TIMEOUT; + } + adc_base.ADCPga = pADCPGACal->ADCPga; /* Set to gain under calibration */ + AD5940_ADCBaseCfgS(&adc_base); + AD5940_Delay10us(5); + time_out = pADCPGACal->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); + if(time_out == 0) goto ADCPGACALERROR_TIMEOUT; + /* Calculate and write the result to registers */ + ADCCode = (ExpectedGainCode - 0x8000)*0x4000/(ADCCode-0x8000); + ADCCode &= 0x7fff; + AD5940_WriteReg(regaddr_gain, ADCCode); + } + + /* Restore INTC1 SINC2 configure */ + if(INTCCfg&AFEINTSRC_SINC2RDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bFALSE); /* Disable SINC2 Interrupt */ + + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + /* Done */ + return AD5940ERR_OK; + +ADCPGACALERROR_TIMEOUT: + AD5940_ADCConvtCtrlS(bFALSE); /* Stop conversion */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + return AD5940ERR_TIMEOUT; +} + +/** + * @brief Calibrate LPTIA offset + * @param pLPTIAOffsetCal Pointer to LPTIA offset calibration settings. + * @return AD5940ERR_OK. +**/ +AD5940Err AD5940_LPTIAOffsetCal(LPTIAOffsetCal_Type *pLPTIAOffsetCal) +{ + AD5940Err error = AD5940ERR_OK; + LPLoopCfg_Type lploop_cfg; + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + + int32_t time_out; + uint32_t INTCCfg; + int32_t ADCCode; + BoolFlag bADCClk32MHzMode; + + if(pLPTIAOffsetCal == NULL) return AD5940ERR_NULLP; + if(pLPTIAOffsetCal->AdcClkFreq > (32000000*0.8)) + bADCClk32MHzMode = bTRUE; + + /* Step0: Do initialization */ + /* Turn on AD5940 references in case it's disabled. */ + __AD5940_ReferenceON(); + lploop_cfg.LpAmpCfg.LpAmpSel = pLPTIAOffsetCal->LpAmpSel; + lploop_cfg.LpAmpCfg.LpAmpPwrMod = pLPTIAOffsetCal->LpAmpPwrMod; /* Power mode will affect amp offset. */ + lploop_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaRf = LPTIARF_OPEN; + lploop_cfg.LpAmpCfg.LpTiaRload = LPTIARLOAD_100R; + lploop_cfg.LpAmpCfg.LpTiaRtia = pLPTIAOffsetCal->LpTiaRtia; + lploop_cfg.LpAmpCfg.LpTiaSW = pLPTIAOffsetCal->LpTiaSW; /* Disconnect capacitors so it settles quickly */ + lploop_cfg.LpDacCfg.LpdacSel = (pLPTIAOffsetCal->LpAmpSel == LPAMP0)?LPDAC0:LPDAC1; + lploop_cfg.LpDacCfg.DacData12Bit = pLPTIAOffsetCal->DacData12Bit; + lploop_cfg.LpDacCfg.DacData6Bit = pLPTIAOffsetCal->DacData6Bit; + lploop_cfg.LpDacCfg.DataRst = bFALSE; + lploop_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; + lploop_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lploop_cfg.LpDacCfg.LpDacVzeroMux = pLPTIAOffsetCal->LpDacVzeroMux; + lploop_cfg.LpDacCfg.LpDacSW = LPDACSW_VZERO2LPTIA; + lploop_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lploop_cfg.LpDacCfg.PowerEn = bTRUE; + AD5940_LPLoopCfgS(&lploop_cfg); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH. Use SIN2 data for calibration-->Lower noise */ + adc_filter.ADCSinc3Osr = pLPTIAOffsetCal->ADCSinc3Osr; + adc_filter.ADCSinc2Osr = pLPTIAOffsetCal->ADCSinc2Osr; /* 800KSPS/4/1333 = 150SPS */ + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = bADCClk32MHzMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + /* Initialize ADC MUx and PGA */ + if(pLPTIAOffsetCal->LpAmpSel == LPAMP0) + { + adc_base.ADCMuxP = ADCMUXP_LPTIA0_P; + adc_base.ADCMuxN = ADCMUXN_LPTIA0_N; + } + else + { + adc_base.ADCMuxP = ADCMUXP_LPTIA1_P; + adc_base.ADCMuxN = ADCMUXN_LPTIA1_N; + } + adc_base.ADCPga = pLPTIAOffsetCal->ADCPga; /* Set correct Gain value. */ + AD5940_ADCBaseCfgS(&adc_base); + /* Turn ON ADC and its reference. And SINC2. */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Disable all firstly, we only enable things we use */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_HPREFPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_Delay10us(25); /* Wait 250us for reference power up */ + /* INTC configure and open calibration lock */ + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, KEY_CALDATLOCK); /* Unlock KEY */ + + /* Do offset calibration. */ + { + int32_t ExpectedCode = 0x8000; /* Ideal ADC output */ + AD5940_WriteReg(REG_AFE_ADCOFFSETLPTIA0, 0); /* Reset offset register */ + + if(pLPTIAOffsetCal->SettleTime10us > 0) + AD5940_Delay10us(pLPTIAOffsetCal->SettleTime10us); /* Delay 10us */ + time_out = pLPTIAOffsetCal->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPTIAOFFSETCALERROR; + } /* Time out error. */ + /* Calculate and write the result to registers before gain calibration */ + ADCCode = ((ExpectedCode - ADCCode)<<3); /* We will shift back 1bit below */ + ADCCode = ((ADCCode+1)>>1); /* Round 0.5 */ + if((ADCCode > 0x3fff) || + (ADCCode < -0x4000)) /* The register used for offset calibration is limited to -0x4000 to 0x3fff */ + { + error = AD5940ERR_CALOR; + goto LPTIAOFFSETCALERROR; + } + ADCCode &= 0x7fff; + if(pLPTIAOffsetCal->LpAmpSel == LPAMP0) + AD5940_WriteReg(REG_AFE_ADCOFFSETLPTIA0, ADCCode); + else + AD5940_WriteReg(REG_AFE_ADCOFFSETLPTIA1, ADCCode); + } + /* Restore INTC1 SINC2 configure */ + if(INTCCfg&AFEINTSRC_SINC2RDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bFALSE); /* Disable SINC2 Interrupt */ + + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + /* Done */ + return AD5940ERR_OK; + +LPTIAOFFSETCALERROR: + AD5940_ADCConvtCtrlS(bFALSE); /* Stop conversion */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + return error; +} + +/** + * @brief Calibrate HSTIA offset-ongoing. + * @param pHSTIAOffsetCal: pointer to configuration. + * @return AD5940ERR_OK. +**/ +AD5940Err AD5940_HSTIAOffsetCal(LPTIAOffsetCal_Type *pHSTIAOffsetCal) +{ + return AD5940ERR_OK; +} + +/** + * @brief Measure HSTIA internal RTIA impedance. + * @param pCalCfg: pointer to calibration structure. + * @param pResult: Pointer to a variable that used to store result. + * If bPolarResult in structure is set, then use type fImpPol_Type otherwise use fImpCar_Type. + * @return AD5940ERR_OK if succeed. +**/ +AD5940Err AD5940_HSRtiaCal(HSRTIACal_Type *pCalCfg, void *pResult) +{ + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + DSPCfg_Type dsp_cfg; + uint32_t INTCCfg; + + BoolFlag bADCClk32MHzMode = bFALSE; + uint32_t ExcitBuffGain = EXCITBUFGAIN_2; + uint32_t HsDacGain = HSDACGAIN_1; + + float ExcitVolt; /* Excitation voltage, unit is mV */ + uint32_t RtiaVal; + uint32_t const HpRtiaTable[]={200,1000,5000,10000,20000,40000,80000,160000,0}; + uint32_t WgAmpWord; + + iImpCar_Type DftRcal, DftRtia; + + if(pCalCfg == NULL) return AD5940ERR_NULLP; + if(pCalCfg->fRcal == 0) + return AD5940ERR_PARA; + if(pCalCfg->HsTiaCfg.HstiaRtiaSel > HSTIARTIA_160K) + return AD5940ERR_PARA; + if(pCalCfg->HsTiaCfg.HstiaRtiaSel == HSTIARTIA_OPEN) + return AD5940ERR_PARA; /* Do not support calibrating DE0-RTIA */ + if(pResult == NULL) + return AD5940ERR_NULLP; + + if(pCalCfg->AdcClkFreq > (32000000*0.8)) + bADCClk32MHzMode = bTRUE; + + /* Calculate the excitation voltage we should use based on RCAL/Rtia */ + RtiaVal = HpRtiaTable[pCalCfg->HsTiaCfg.HstiaRtiaSel]; + /* + DAC output voltage calculation + Note: RCAL value should be similar to RTIA so the accuracy is best. + HSTIA output voltage should be limited to 0.2V to AVDD-0.2V, with 1.1V bias. We use 80% of this range for safe. + Because the bias voltage is fixed to 1.1V, so for AC signal maximum amplitude is 1.1V-0.2V = 0.9Vp. That's 1.8Vpp. + Formula is: ExcitVolt(in mVpp) = (1800mVpp*80% / RTIA) * RCAL + ADC input range is +-1.5V which is enough for calibration. + + */ + ExcitVolt = 1800*0.8*pCalCfg->fRcal/RtiaVal; + + if(ExcitVolt <= 800*0.05) /* Voltage is so small that we can enable the attenuator of DAC(1/5) and Excitation buffer(1/4). 800mVpp is the DAC output voltage */ + { + ExcitBuffGain = EXCITBUFGAIN_0P25; + HsDacGain = HSDACGAIN_0P2; + /* Excitation buffer voltage full range is 800mVpp*0.05 = 40mVpp */ + WgAmpWord = ((uint32_t)(ExcitVolt/40*2047*2)+1)>>1; /* Assign value with rounding (0.5 LSB error) */ + } + else if(ExcitVolt <= 800*0.25) /* Enable Excitation buffer attenuator */ + { + ExcitBuffGain = EXCITBUFGAIN_0P25; + HsDacGain = HSDACGAIN_1; + /* Excitation buffer voltage full range is 800mVpp*0.25 = 200mVpp */ + WgAmpWord = ((uint32_t)(ExcitVolt/200*2047*2)+1)>>1; /* Assign value with rounding (0.5 LSB error) */ + } + else if(ExcitVolt <= 800*0.4) /* Enable DAC attenuator */ + { + ExcitBuffGain = EXCITBUFGAIN_2; + HsDacGain = HSDACGAIN_0P2; + /* Excitation buffer voltage full range is 800mVpp*0.4 = 320mV */ + WgAmpWord = ((uint32_t)(ExcitVolt/320*2047*2)+1)>>1; /* Assign value with rounding (0.5 LSB error) */ + } + else /* No attenuator is needed. This is the best condition which means RTIA is close to RCAL */ + { + ExcitBuffGain = EXCITBUFGAIN_2; + HsDacGain = HSDACGAIN_1; + /* Excitation buffer voltage full range is 800mVpp*2=1600mVpp */ + WgAmpWord = ((uint32_t)(ExcitVolt/1600*2047*2)+1)>>1; /* Assign value with rounding (0.5 LSB error) */ + } + + if(WgAmpWord > 0x7ff) + WgAmpWord = 0x7ff; + + /*INTC configuration */ + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_DFTRDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + /* Configure reference system */ + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + /* Configure HP Loop */ + hs_loop.HsDacCfg.ExcitBufGain = ExcitBuffGain; + hs_loop.HsDacCfg.HsDacGain = HsDacGain; + hs_loop.HsDacCfg.HsDacUpdateRate = 7; /* Set it to highest update rate */ + memcpy(&hs_loop.HsTiaCfg, &pCalCfg->HsTiaCfg, sizeof(pCalCfg->HsTiaCfg)); + hs_loop.SWMatCfg.Dswitch = SWD_RCAL0; + hs_loop.SWMatCfg.Pswitch = SWP_RCAL0; + hs_loop.SWMatCfg.Nswitch = SWN_RCAL1; + hs_loop.SWMatCfg.Tswitch = SWT_RCAL1|SWT_TRTIA; + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bTRUE; + hs_loop.WgCfg.OffsetCalEn = bTRUE; + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(pCalCfg->fFreq, pCalCfg->SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = WgAmpWord; + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + /* Configure DSP */ + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_N_NODE; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_P_NODE; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1P5; + AD5940_StructInit(&dsp_cfg.ADCDigCompCfg, sizeof(dsp_cfg.ADCDigCompCfg)); + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = bADCClk32MHzMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = pCalCfg->ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = pCalCfg->ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + + memcpy(&dsp_cfg.DftCfg, &pCalCfg->DftCfg, sizeof(pCalCfg->DftCfg)); + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + /*AFECTRL_WG|*/AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + //wait for sometime. + AD5940_Delay10us(25); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /* Wait until DFT ready */ + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_DFTRDY) == bFALSE); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + + DftRcal.Real = AD5940_ReadAfeResult(AFERESULT_DFTREAL); + DftRcal.Image = AD5940_ReadAfeResult(AFERESULT_DFTIMAGE); + + AD5940_ADCMuxCfgS(ADCMUXP_HSTIA_P, ADCMUXN_HSTIA_N); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + //wait for sometime. + AD5940_Delay10us(25); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /* Wait until DFT ready */ + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_DFTRDY) == bFALSE); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + + DftRtia.Real = AD5940_ReadAfeResult(AFERESULT_DFTREAL); + DftRtia.Image = AD5940_ReadAfeResult(AFERESULT_DFTIMAGE); + + if(DftRcal.Real&(1L<<17)) + DftRcal.Real |= 0xfffc0000; + if(DftRcal.Image&(1L<<17)) + DftRcal.Image |= 0xfffc0000; + if(DftRtia.Real&(1L<<17)) + DftRtia.Real |= 0xfffc0000; + if(DftRtia.Image&(1L<<17)) + DftRtia.Image |= 0xfffc0000; + /* + ADC MUX is set to HSTIA_P and HSTIA_N. + While the current flow through RCAL and then into RTIA, the current direction should be from HSTIA_N to HSTIA_P if we + measure the voltage across RCAL by MUXSELP_P_NODE and MUXSELN_N_NODE. + So here, we add a negative sign to results + */ + DftRtia.Image = -DftRtia.Image; + DftRtia.Real = -DftRtia.Real; /* Current is measured by MUX HSTIA_P-HSTIA_N. It should be */ + /* + The impedance engine inside of AD594x give us Real part and Imaginary part of DFT. Due to technology used, the Imaginary + part in register is the opposite number. So we add a negative sign on the Imaginary part of results. + */ + DftRtia.Image = -DftRtia.Image; + DftRcal.Image = -DftRcal.Image; + + fImpCar_Type temp; + temp = AD5940_ComplexDivInt(&DftRtia, &DftRcal); + temp.Real *= pCalCfg->fRcal; + temp.Image *= pCalCfg->fRcal; + if(pCalCfg->bPolarResult == bFALSE) + { + *(fImpCar_Type*)pResult = temp; + } + else + { + ((fImpPol_Type*)pResult)->Magnitude = AD5940_ComplexMag(&temp); + ((fImpPol_Type*)pResult)->Phase = AD5940_ComplexPhase(&temp); + } + + /* Restore INTC1 DFT configure */ + if(INTCCfg&AFEINTSRC_DFTRDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_DFTRDY, bFALSE); /* Disable DFT Interrupt */ + + return AD5940ERR_OK; +} + +/** + * @brief Measure LPTIA internal RTIA impedance with HSTIA. This is the recommended method for LPTIA RTIA calibration. + * @param pCalCfg: pointer to calibration structure. + * @param pResult: Pointer to a variable that used to store result. + * If bPolarResult in structure is set, then use type fImpPol_Type otherwise use fImpCar_Type. + * @return AD5940ERR_OK if succeed. +**/ +AD5940Err AD5940_LPRtiaCal(LPRTIACal_Type *pCalCfg, void *pResult) +{ + HSLoopCfg_Type hs_loop; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + ADCBaseCfg_Type *pADCBaseCfg; + SWMatrixCfg_Type *pSWCfg; + uint32_t INTCCfg, reg_afecon; + BoolFlag bADCClk32MHzMode = bFALSE; + BoolFlag bDCMode = bFALSE; /* Indicate if frequency is 0, which means we calibrate at DC. */ + + float ExcitVolt; /* Excitation voltage, unit is mV */ + uint32_t RtiaVal; + /* RTIA value table when RLOAD set to 100Ohm */ + uint32_t const LpRtiaTable[]={0,110,1000,2000,3000,4000,6000,8000,10000,12000,16000,20000,24000,30000,32000,40000,48000,64000,85000,96000,100000,120000,128000,160000,196000,256000,512000}; + float const ADCPGAGainTable[] = {1, 1.5, 2, 4, 9}; + uint32_t WgAmpWord; + + uint32_t ADCPgaGainRtia, ADCPgaGainRcal; + float GainRatio; + + iImpCar_Type DftRcal, DftRtia; + + if(pCalCfg == NULL) return AD5940ERR_NULLP; /* Parameters illegal */ + + if(pCalCfg->fRcal == 0) + return AD5940ERR_PARA; + if(pCalCfg->LpTiaRtia > LPTIARTIA_512K) + return AD5940ERR_PARA; + if(pCalCfg->LpTiaRtia == LPTIARTIA_OPEN) + return AD5940ERR_PARA; /* Not supported now. By setting RTIA to open and set corresponding switches can calibrate external RTIA */ + if(pResult == NULL) + return AD5940ERR_NULLP; + + if(pCalCfg->AdcClkFreq > (32000000*0.8)) + bADCClk32MHzMode = bTRUE; /* Clock frequency is high. */ + if(pCalCfg->fFreq == 0.0f) /* Frequency is zero means we calibrate RTIA at DC. */ + bDCMode = bTRUE; + /* Init two pointers */ + pSWCfg = &hs_loop.SWMatCfg; + pADCBaseCfg = &dsp_cfg.ADCBaseCfg; + /* Calculate the excitation voltage we should use based on RCAL/Rtia */ + RtiaVal = LpRtiaTable[pCalCfg->LpTiaRtia]; + /* + * DAC output voltage calculation + * Note: RCAL value should be similar to RTIA so the accuracy is best. + * LPTIA output voltage should be limited to 0.3V to AVDD-0.4V, with 1.3V bias. We use 80% of this range for safe. + * That's 2.0Vpp*80%@2.7V AVDD + * Formula is: ExcitVolt(in mVpp) = (2000mVpp*80% / RTIA) * RCAL + * ADC input range is +-1.5V which is enough for calibration. + * Limitations: + * Note: HSTIA output range is AVDD-0.4V to AGND+0.2V + * HSTIA input common voltage range is 0.3V to AVDD-0.7V; + * When AVDD is 2.7V, the input range is 0.3V to 2.0V; + * If we set Vbias to 1.3V, then maximum AC signal is 0.7Vp*2 = 1.4Vpp. + * Maximum AC signal is further limited by HSTIA RTIA=200Ohm, when RCAL is 200Ohm(for ADuCM355). The maximum output of HSTIA is limited to 2.3V. + * Maximum Vzero voltage is 1.9V when Rcal is 200Ohm and Switch On resistance is 50Ohm*2. Vzero_max = 1.3V + (2.3V-1.3V)/(200+200+50*2)*300. + * Maximum AC signal is (1.9-1.3)*2 = 1.2Vpp(for ADuCM355, RCAl=200Ohm). + */ + /** @cond */ + #define MAXVOLT_P2P 1400 /* Maximum peak to peak voltage 1200mV for ADuCM355. */ + /* Maximum peak2peak voltage for AD5940 10kOhm RCAL is 1400mV */ + #define __MAXVOLT_AMP_CODE (MAXVOLT_P2P*2047L/2200) + /** @endcond */ + ExcitVolt = 2000*0.8*pCalCfg->fRcal/RtiaVal; + WgAmpWord = ((uint32_t)(ExcitVolt/2200*2047*2)+1)>>1; /* Assign value with rounding (0.5 LSB error) */ + if(WgAmpWord > __MAXVOLT_AMP_CODE) + WgAmpWord = __MAXVOLT_AMP_CODE; + /** + * Determine the best ADC PGA gain for both RCAL and RTIA voltage measurement. + */ + { + float RtiaVolt, RcalVolt, temp; + ExcitVolt = WgAmpWord*2000.0f/2047; /* 2000mVpp -->ExcitVolt in Peak to Peak unit */ + RtiaVolt = ExcitVolt/(pCalCfg->fRcal + 100)*RtiaVal; + RcalVolt = RtiaVolt/RtiaVal*pCalCfg->fRcal; + /* The input range of ADC is 1.5Vp, we calculate how much gain we need */ + temp = 3000.0f/RcalVolt; + if(temp >= 9.0f) ADCPgaGainRcal = ADCPGA_9; + else if(temp >= 4.0f) ADCPgaGainRcal = ADCPGA_4; + else if(temp >= 2.0f) ADCPgaGainRcal = ADCPGA_2; + else if(temp >= 1.5f) ADCPgaGainRcal = ADCPGA_1P5; + else ADCPgaGainRcal = ADCPGA_1; + temp = 3000.0f/RtiaVolt; + if(temp >= 9.0f) ADCPgaGainRtia = ADCPGA_9; + else if(temp >= 4.0f) ADCPgaGainRtia = ADCPGA_4; + else if(temp >= 2.0f) ADCPgaGainRtia = ADCPGA_2; + else if(temp >= 1.5f) ADCPgaGainRtia = ADCPGA_1P5; + else ADCPgaGainRtia = ADCPGA_1; + GainRatio = ADCPGAGainTable[ADCPgaGainRtia]/ADCPGAGainTable[ADCPgaGainRcal]; + } + reg_afecon = AD5940_ReadReg(REG_AFE_AFECON); + /* INTC configuration */ + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_DFTRDY|AFEINTSRC_SINC2RDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + /* Configure reference system */ + __AD5940_ReferenceON(); + /* Configure DSP */ + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = bADCClk32MHzMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = pCalCfg->ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = pCalCfg->ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + memcpy(&dsp_cfg.DftCfg, &pCalCfg->DftCfg, sizeof(pCalCfg->DftCfg)); + AD5940_DSPCfgS(&dsp_cfg); + /* Configure LP Loop */ + AD5940_StructInit(&lp_loop, sizeof(lp_loop)); + /* Configure LP Amplifies(LPPA and LPTIA). We won't use LP-PA */ + lp_loop.LpDacCfg.LpdacSel = (pCalCfg->LpAmpSel == LPAMP0)?LPDAC0:LPDAC1; + lp_loop.LpDacCfg.DacData12Bit = 0x800; /* Controlled by WG */ + lp_loop.LpDacCfg.DacData6Bit = 32; /* middle scale value */ + lp_loop.LpDacCfg.DataRst =bFALSE; /* Do not keep DATA registers at reset status */ + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VZERO2HSTIA; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; /* Select internal 2.5V reference */ + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_WG; /* The LPDAC data comes from WG not MMR in this case */ + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_6BIT; /* Connect Vbias signal to 6Bit LPDAC output */ + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_12BIT; /* Connect Vzero signal to 12bit LPDAC output */ + lp_loop.LpDacCfg.PowerEn = bTRUE; /* Power up LPDAC */ + + lp_loop.LpAmpCfg.LpAmpSel = pCalCfg->LpAmpSel; + lp_loop.LpAmpCfg.LpAmpPwrMod = pCalCfg->LpAmpPwrMod; /* Set low power amplifiers to normal power mode */ + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; /* Enable LP PA(potential-stat amplifier) power */ + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; /* Enable LPTIA*/ + lp_loop.LpAmpCfg.LpTiaRload = LPTIARLOAD_100R; + lp_loop.LpAmpCfg.LpTiaRtia = pCalCfg->LpTiaRtia; + lp_loop.LpAmpCfg.LpTiaRf = LPTIARF_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(6)|LPTIASW(8)|(pCalCfg->bWithCtia==bTRUE?LPTIASW(5)/*|LPTIASW(9)*/:0); + AD5940_LPLoopCfgS(&lp_loop); + /* Configure HS Loop */ + AD5940_StructInit(&hs_loop, sizeof(hs_loop)); + /* Take care of HSTIA, we need to disconnect internal RTIA because it connects to Tswitch directly. */ + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = (pCalCfg->LpAmpSel == LPAMP0)?HSTIABIAS_VZERO0:HSTIABIAS_VZERO1; + hs_loop.HsTiaCfg.HstiaCtia = 31; + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaDe1Rload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDe1Rtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_200; + /* Configure HSDAC */ + hs_loop.HsDacCfg.ExcitBufGain = 0; + hs_loop.HsDacCfg.HsDacGain = 0; /* Don't care */ + hs_loop.HsDacCfg.HsDacUpdateRate = 255; /* Lowest for LPDAC */ + + hs_loop.SWMatCfg.Dswitch = SWD_RCAL0|((pCalCfg->LpAmpSel == LPAMP0)?SWD_SE0:SWD_SE1); + hs_loop.SWMatCfg.Pswitch = SWP_RCAL0; + hs_loop.SWMatCfg.Nswitch = SWN_RCAL1; + hs_loop.SWMatCfg.Tswitch = SWT_TRTIA|SWT_RCAL1; + if(bDCMode) + { + int32_t time_out = -1; /* Always wait. */ + int32_t offset_rcal, offset_rtia; + /* Configure WG */ + hs_loop.WgCfg.WgType = WGTYPE_MMR; + hs_loop.WgCfg.WgCode = WgAmpWord; /* Amplitude word is exactly the maximum DC voltage we could use */ + hs_loop.WgCfg.GainCalEn = bFALSE; /* We don't have calibration value for LPDAC, so we don't use it. */ + hs_loop.WgCfg.OffsetCalEn = bFALSE; + AD5940_HSLoopCfgS(&hs_loop); + AD5940_WGDACCodeS(WgAmpWord + 0x800); + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Apply voltage to loop and turn on ADC */ + /* Do offset measurement */ + pSWCfg->Dswitch = SWD_RCAL0;//|SWD_SE0; /* Disconnect SE0 for now to measure the offset voltage. */ + pSWCfg->Pswitch = SWP_RCAL0; + pSWCfg->Nswitch = SWN_RCAL1; + pSWCfg->Tswitch = SWT_TRTIA|SWT_RCAL1; + AD5940_SWMatrixCfgS(pSWCfg); + AD5940_Delay10us(1000); /* Wait some time here. */ + /* Measure RCAL channel voltage offset */ + pADCBaseCfg->ADCMuxN = ADCMUXN_N_NODE; + pADCBaseCfg->ADCMuxP = ADCMUXP_P_NODE; + pADCBaseCfg->ADCPga = ADCPgaGainRcal; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_Delay10us(50); /* Wait some time here. */ + offset_rcal = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + /* Measure RTIA channel voltage offset */ + if(pCalCfg->LpAmpSel == LPAMP0) + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA0_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA0_P; + }else + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA1_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA1_P; + } + pADCBaseCfg->ADCPga = ADCPgaGainRtia; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_Delay10us(50); /* Wait some time here. */ + offset_rtia = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + /* Connect LPTIA loop, let current flow to RTIA. */ + pSWCfg->Dswitch = SWD_RCAL0|((pCalCfg->LpAmpSel == LPAMP0)?SWD_SE0:SWD_SE1); + pSWCfg->Pswitch = SWP_RCAL0; + pSWCfg->Nswitch = SWN_RCAL1; + pSWCfg->Tswitch = SWT_TRTIA|SWT_RCAL1; + AD5940_SWMatrixCfgS(pSWCfg); + AD5940_Delay10us(1000); /* Wait some time here. */ + /* Measure RCAL */ + pADCBaseCfg = &dsp_cfg.ADCBaseCfg; + pADCBaseCfg->ADCMuxN = ADCMUXN_N_NODE; + pADCBaseCfg->ADCMuxP = ADCMUXP_P_NODE; + pADCBaseCfg->ADCPga = ADCPgaGainRcal; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_Delay10us(50); /* Wait some time here. */ + DftRcal.Real = (int32_t)__AD5940_TakeMeasurement(&time_out)- offset_rcal; + DftRcal.Image = 0; + /* Measure RTIA */ + if(pCalCfg->LpAmpSel == LPAMP0) + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA0_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA0_P; + }else + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA1_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA1_P; + } + pADCBaseCfg->ADCPga = ADCPgaGainRtia; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_Delay10us(50); /* Wait some time here. */ + DftRtia.Real = (int32_t)__AD5940_TakeMeasurement(&time_out)- offset_rtia; + DftRtia.Image = 0; + } + else + { + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = WgAmpWord; + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(pCalCfg->fFreq, pCalCfg->SysClkFreq); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + hs_loop.WgCfg.WgCode = 0; + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; /* disable it */ + hs_loop.WgCfg.OffsetCalEn = bFALSE; + AD5940_HSLoopCfgS(&hs_loop); + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR, bTRUE); + AD5940_Delay10us(100); /* Wait for loop stable. */ + pADCBaseCfg = &dsp_cfg.ADCBaseCfg; + /* DFT on RCAL */ + pADCBaseCfg->ADCMuxN = ADCMUXN_N_NODE; + pADCBaseCfg->ADCMuxP = ADCMUXP_P_NODE; + pADCBaseCfg->ADCPga = ADCPgaGainRcal; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_WG, bTRUE); + AD5940_Delay10us(25); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); + /* Wait until DFT ready */ + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_DFTRDY) == bFALSE); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + DftRcal.Real = AD5940_ReadAfeResult(AFERESULT_DFTREAL); + DftRcal.Image = AD5940_ReadAfeResult(AFERESULT_DFTIMAGE); + /* DFT on RTIA */ + if(pCalCfg->LpAmpSel == LPAMP0) + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA0_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA0_P; + }else + { + pADCBaseCfg->ADCMuxN = ADCMUXN_LPTIA1_N; + pADCBaseCfg->ADCMuxP = ADCMUXP_LPTIA1_P; + } + pADCBaseCfg->ADCPga = ADCPgaGainRtia; + AD5940_ADCBaseCfgS(pADCBaseCfg); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_WG, bTRUE); + AD5940_Delay10us(25); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); + /* Wait until DFT ready */ + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_DFTRDY) == bFALSE); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + DftRtia.Real = AD5940_ReadAfeResult(AFERESULT_DFTREAL); + DftRtia.Image = AD5940_ReadAfeResult(AFERESULT_DFTIMAGE); + if(DftRcal.Real&(1L<<17)) + DftRcal.Real |= 0xfffc0000; + if(DftRcal.Image&(1L<<17)) + DftRcal.Image |= 0xfffc0000; + if(DftRtia.Real&(1L<<17)) + DftRtia.Real |= 0xfffc0000; + if(DftRtia.Image&(1L<<17)) + DftRtia.Image |= 0xfffc0000; + } + /* + The impedance engine inside of AD594x give us Real part and Imaginary part of DFT. Due to technology used, the Imaginary + part in register is the opposite number. So we add a negative sign on the Imaginary part of results. + */ + DftRtia.Image = -DftRtia.Image; + DftRcal.Image = -DftRcal.Image; + + fImpCar_Type res; + /* RTIA = (DftRtia.Real, DftRtia.Image)/(DftRcal.Real, DftRcal.Image)*fRcal */ + res = AD5940_ComplexDivInt(&DftRtia, &DftRcal); + res.Real *= pCalCfg->fRcal/GainRatio; + res.Image *= pCalCfg->fRcal/GainRatio; + if(pCalCfg->bPolarResult == bFALSE) + { + ((fImpCar_Type*)pResult)->Real = res.Real; + ((fImpCar_Type*)pResult)->Image = res.Image; + } + else + { + ((fImpPol_Type*)pResult)->Magnitude = AD5940_ComplexMag(&res); + ((fImpPol_Type*)pResult)->Phase = AD5940_ComplexPhase(&res); + } + + /* Restore INTC1 DFT configure */ + if(INTCCfg&AFEINTSRC_DFTRDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_DFTRDY, bFALSE); /* Disable DFT Interrupt */ + if(INTCCfg&AFEINTSRC_SINC2RDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bFALSE); /* Disable SINC2 Interrupt */ + AD5940_WriteReg(REG_AFE_AFECON, reg_afecon); /* Restore AFECON register */ + /* Open all switches in switch-matrix */ + hs_loop.SWMatCfg.Dswitch = SWD_OPEN; + hs_loop.SWMatCfg.Pswitch = SWP_OPEN; + hs_loop.SWMatCfg.Nswitch = SWN_OPEN; + hs_loop.SWMatCfg.Tswitch = SWT_OPEN; + AD5940_SWMatrixCfgS(&hs_loop.SWMatCfg); + + return AD5940ERR_OK; +} + +/** + * @brief calibrate HSDAC output voltage using ADC. + * @note It acutally calibrates voltage output of excitation buffer. + * @param pCalCfg: pointer to configuration structure + * @return return AD5940ERR_OK if succeeded. +*/ +AD5940Err AD5940_HSDACCal(HSDACCal_Type *pCalCfg) +{ + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + HSLoopCfg_Type hsloop_cfg; + LPLoopCfg_Type lploop_cfg; + + /* LSB_Numerator and LSB_Denometer are used to calculate + the codes to write to calibration registers depending on + which calibration register is used + There are LSB_Numerator ADC LSBs in + LSB_Denominator DAC Calibration LSBs*/ + int32_t LSB_Numerator; + int32_t LEB_Denominator; + int32_t time_out; + int32_t ADCCode; + uint32_t HSDACCode = 0x800; /* Mid scale DAC */ + + uint32_t regaddr_offset; + uint32_t ADCPGA_Sel; + BoolFlag bHPMode; + + if(pCalCfg == NULL) return AD5940ERR_NULLP; + if(pCalCfg->ExcitBufGain > 1) return AD5940ERR_PARA; + if(pCalCfg->HsDacGain > 1) return AD5940ERR_PARA; + + bHPMode = pCalCfg->AfePwrMode == AFEPWR_HP?bTRUE:bFALSE; + + switch(pCalCfg->ExcitBufGain) + { + case EXCITBUFGAIN_2: + regaddr_offset = bHPMode?REG_AFE_DACOFFSETHP:REG_AFE_DACOFFSET; + if(pCalCfg->HsDacGain == HSDACGAIN_0P2) + { + LSB_Numerator = 40; + LEB_Denominator = 14; + ADCPGA_Sel = ADCPGA_4; + } + else + { + LSB_Numerator = 7; + LEB_Denominator = 2; + ADCPGA_Sel = ADCPGA_1; + } + break; + case EXCITBUFGAIN_0P25: + regaddr_offset = bHPMode?REG_AFE_DACOFFSETATTENHP:REG_AFE_DACOFFSETATTEN; + if(pCalCfg->HsDacGain == HSDACGAIN_0P2) + { + LSB_Numerator = 5; + LEB_Denominator = 14; + } + else + { + LSB_Numerator = 25; + LEB_Denominator = 14; + } + ADCPGA_Sel = ADCPGA_4; + break; + default: + return AD5940ERR_PARA; + } + + /* Turn On References*/ + __AD5940_ReferenceON(); + /* Step0.0 Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH. Use SIN2 data for calibration-->Lower noise */ + adc_filter.ADCSinc3Osr = pCalCfg->ADCSinc3Osr; + adc_filter.ADCSinc2Osr = pCalCfg->ADCSinc2Osr; /* 800KSPS/4/1333 = 150SPS */ + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = bHPMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + /* Step0.1 Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_P_NODE; + adc_base.ADCMuxN = ADCMUXN_N_NODE; + adc_base.ADCPga = ADCPGA_Sel; + AD5940_ADCBaseCfgS(&adc_base); + + /* Step0.2 Configure LPDAC to connect VZERO to HSTIA */ + lploop_cfg.LpDacCfg.LpdacSel = LPDAC0; + lploop_cfg.LpDacCfg.DacData12Bit = 0x7C0; + lploop_cfg.LpDacCfg.DacData6Bit = 0x1F; + lploop_cfg.LpDacCfg.DataRst = bFALSE; + lploop_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; + lploop_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lploop_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lploop_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lploop_cfg.LpDacCfg.PowerEn = bTRUE; + lploop_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2HSTIA; + AD5940_LPLoopCfgS(&lploop_cfg); + + /* Step0.3 Configure HSLOOP */ + hsloop_cfg.HsDacCfg.ExcitBufGain = pCalCfg->ExcitBufGain; + hsloop_cfg.HsDacCfg.HsDacGain = pCalCfg->HsDacGain; + hsloop_cfg.HsDacCfg.HsDacUpdateRate = bHPMode?0x7:0x1B; + hsloop_cfg.HsTiaCfg.DiodeClose = bFALSE; + hsloop_cfg.HsTiaCfg.HstiaBias = HSTIABIAS_VZERO0; + hsloop_cfg.HsTiaCfg.HstiaCtia = 8; + hsloop_cfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDe1Rload = HSTIADERLOAD_OPEN; + hsloop_cfg.HsTiaCfg.HstiaDe1Rtia = HSTIADERTIA_OPEN; + hsloop_cfg.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_200; + hsloop_cfg.SWMatCfg.Dswitch = SWD_RCAL0; + hsloop_cfg.SWMatCfg.Pswitch = SWP_RCAL0; + hsloop_cfg.SWMatCfg.Nswitch = SWN_RCAL1; + hsloop_cfg.SWMatCfg.Tswitch = SWT_TRTIA|SWT_RCAL1; + hsloop_cfg.WgCfg.GainCalEn = bTRUE; + hsloop_cfg.WgCfg.OffsetCalEn = bTRUE; + hsloop_cfg.WgCfg.WgType = WGTYPE_MMR; + hsloop_cfg.WgCfg.WgCode = HSDACCode; + AD5940_HSLoopCfgS(&hsloop_cfg); + /* Step0.4 Turn ON reference and ADC power, and DAC power and DAC reference. We use DAC 1.8V reference to calibrate ADC. */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Disable all */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_HPREFPWR|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|AFECTRL_SINC2NOTCH|\ + AFECTRL_EXTBUFPWR|AFECTRL_INAMPPWR|AFECTRL_HSTIAPWR|AFECTRL_WG, bTRUE); + AD5940_Delay10us(25); /* Wait 250us for reference power up */ + /* Step0.5 INTC configure and open calibration lock */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, KEY_CALDATLOCK); /* Unlock KEY */ + /* Reset Offset register before calibration */ + AD5940_WriteReg(regaddr_offset, 0); + /* Update HSDACDAT after resetting calibration register */ + AD5940_WriteReg(REG_AFE_HSDACDAT, 0x800); + /* Step1: Do offset calibration. */ + { + int32_t ExpectedCode = 0x8000; /* Ideal ADC output */ + AD5940_Delay10us(10); + time_out = 1000; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); +#ifdef ADI_DEBUG + ADI_Print("Voltage before cal: %f \n", AD5940_ADCCode2Volt(ADCCode, ADCPGA_Sel, 1.82)); +#endif + + if(time_out == 0) goto DACCALERROR_TIMEOUT; /* Time out error. */ + ADCCode = ADCCode - ExpectedCode; + ADCCode = (((ADCCode)*LEB_Denominator)/LSB_Numerator); + if(ADCCode>0) + ADCCode = 0xFFF - ADCCode; + else + ADCCode = -ADCCode; + AD5940_WriteReg(regaddr_offset, ADCCode); + AD5940_Delay10us(10); + AD5940_WriteReg(REG_AFE_HSDACDAT, 0x800); + AD5940_Delay10us(10); +#ifdef ADI_DEBUG + ADCCode = __AD5940_TakeMeasurement(&time_out); + ADI_Print("Voltage after cal: %f \n", AD5940_ADCCode2Volt(ADCCode, ADCPGA_Sel, 1.82)); +#endif + } + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + return AD5940ERR_OK; +DACCALERROR_TIMEOUT: + AD5940_ADCConvtCtrlS(bFALSE); /* Stop conversion */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, 0); /* Lock KEY */ + return AD5940ERR_TIMEOUT; +} + +/** + * @brief Use ADC to measure LPDAC offset and gain factor. + * @note Assume ADC is accurate enough or accurate than LPDAC at least. + * @param pCalCfg: pointer to structure. + * @param pResult: the pointer to save calibration result. + * @return AD5940ERR_OK if succeed. +**/ +AD5940Err AD5940_LPDACCal(LPDACCal_Type *pCalCfg, LPDACPara_Type *pResult) +{ + AD5940Err error = AD5940ERR_OK; + LPDACCfg_Type LpDacCfg; + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + + int32_t time_out; + uint32_t INTCCfg; + int32_t ADCCode, ADCCodeVref1p1; + BoolFlag bADCClk32MHzMode; + + if(pCalCfg == NULL) return AD5940ERR_NULLP; + if(pResult == NULL) return AD5940ERR_NULLP; + if(pCalCfg->AdcClkFreq > (32000000*0.8)) + bADCClk32MHzMode = bTRUE; + + /* Step0: Do initialization */ + /* Turn on AD5940 references in case it's disabled. */ + __AD5940_ReferenceON(); + LpDacCfg.LpdacSel = pCalCfg->LpdacSel; + LpDacCfg.DacData12Bit = 0; + LpDacCfg.DacData6Bit = 0; + LpDacCfg.DataRst = bFALSE; + LpDacCfg.LpDacRef = LPDACREF_2P5; + LpDacCfg.LpDacSrc = LPDACSRC_MMR; + LpDacCfg.LpDacSW = LPDACSW_VBIAS2PIN|LPDACSW_VZERO2PIN; + LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + LpDacCfg.PowerEn = bTRUE; + AD5940_LPDACCfgS(&LpDacCfg); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH. Use SIN2 data for calibration-->Lower noise */ + adc_filter.ADCSinc3Osr = pCalCfg->ADCSinc3Osr; + adc_filter.ADCSinc2Osr = pCalCfg->ADCSinc2Osr; /* 800KSPS/4/1333 = 150SPS */ + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = bADCClk32MHzMode?ADCRATE_1P6MHZ:ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + /* Initialize ADC MUx and PGA */ + adc_base.ADCMuxP = ADCMUXP_AGND; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = ADCPGA_1; + AD5940_ADCBaseCfgS(&adc_base); + /* Turn ON ADC and its reference. And SINC2. */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Disable all firstly, we only enable things we use */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_HPREFPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_Delay10us(25); /* Wait 250us for reference power up */ + /* INTC configure and open calibration lock */ + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bTRUE); /* Enable SINC2 Interrupt in INTC1 */ + /* Step1: Measure internal 1.1V reference. */ + { + //AD5940_ADCMuxCfgS(ADCMUXP_AGND, ADCMUXN_VSET1P1); + time_out = pCalCfg->TimeOut10us; /* Reset time out counter */ + ADCCodeVref1p1 = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPDACCALERROR; + } /* Time out error. */ + /* Equation1: ADCCodeVref1p1 = AGND - Vref1p1 */ + } + /* Step2: Do offset measurement. */ + { + /* Equation2': ADCCode = Vbias0/1 - Vref1p1 */ + AD5940_LPDACWriteS(0,0); /* Set LPDAC output voltage to 0.2V(zero code) */ + if(pCalCfg->SettleTime10us > 0) + AD5940_Delay10us(pCalCfg->SettleTime10us); /* Delay nx10us */ + if(pCalCfg->LpdacSel == LPDAC0) + AD5940_ADCMuxCfgS(ADCMUXP_VBIAS0, ADCMUXN_VREF1P1); /* Vbias0 is routed to 12BIT LPDAC */ + else + AD5940_ADCMuxCfgS(ADCMUXP_VBIAS1, ADCMUXN_VREF1P1); /* Vbias1 is routed to 12BIT LPDAC */ + + AD5940_Delay10us(5); /* Delay 50us */ + time_out = pCalCfg->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPDACCALERROR; + } /* Time out error. */ + /* Calculate the offset voltage using Equation2 - Equation1 */ + ADCCode -= ADCCodeVref1p1; /* Get the code of Vbias0-AGND. Then calculate the offset voltage in mV. */ + pResult->bC2V_DAC12B = ADCCode*pCalCfg->ADCRefVolt*1e3f/32768*1.835f/1.82f; /*mV unit*/ + /* Measure 6BIT DAC output(Vzero0/1) */ + if(pCalCfg->LpdacSel == LPDAC0) + AD5940_ADCMuxCfgS(ADCMUXP_VZERO0, ADCMUXN_VREF1P1); /* Vbias0 is routed to 12BIT LPDAC */ + else + AD5940_ADCMuxCfgS(ADCMUXP_VZERO1, ADCMUXN_VREF1P1); /* Vbias1 is routed to 12BIT LPDAC */ + AD5940_Delay10us(5); /* Delay 50us */ + time_out = pCalCfg->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPDACCALERROR; + } /* Time out error. */ + /* Calculate the offset voltage */ + ADCCode -= ADCCodeVref1p1; /* Get the code of Vbias0-AGND. Then calculate the offset voltage in mV. */ + pResult->bC2V_DAC6B = ADCCode*pCalCfg->ADCRefVolt*1e3f/32768*1.835f/1.82f; /*mV unit*/ + } + /* Step3: Do gain measurement */ + { + /* Equation2: ADCCode = Vbias0 - Vref1p1 */ + AD5940_LPDACWriteS(0xfff,0x3f); /* Set LPDAC output voltage to 2.4V(zero code) */ + if(pCalCfg->SettleTime10us > 0) + AD5940_Delay10us(pCalCfg->SettleTime10us); /* Delay nx10us */ + if(pCalCfg->LpdacSel == LPDAC0) + AD5940_ADCMuxCfgS(ADCMUXP_VBIAS0, ADCMUXN_VREF1P1); /* Vbias0 is routed to 12BIT LPDAC */ + else + AD5940_ADCMuxCfgS(ADCMUXP_VBIAS1, ADCMUXN_VREF1P1); /* Vbias1 is routed to 12BIT LPDAC */ + AD5940_Delay10us(5); /* Delay 50us */ + time_out = pCalCfg->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPDACCALERROR; + } /* Time out error. */ + /* Calculate the offset voltage */ + ADCCode -= ADCCodeVref1p1; /* Get the code of Vbias0-AGND. Then calculate the gain factor 'k'. */ + pResult->kC2V_DAC12B = (ADCCode*pCalCfg->ADCRefVolt*1e3f/32768*1.835f/1.82f - pResult->bC2V_DAC12B)/0xfff;/*mV unit*/ + /* Measure 6BIT DAC output(Vzero0) */ + if(pCalCfg->LpdacSel == LPDAC0) + AD5940_ADCMuxCfgS(ADCMUXP_VZERO0, ADCMUXN_VREF1P1); /* Vbias0 is routed to 12BIT LPDAC */ + else + AD5940_ADCMuxCfgS(ADCMUXP_VZERO1, ADCMUXN_VREF1P1); /* Vbias1 is routed to 12BIT LPDAC */ + AD5940_Delay10us(5); /* Delay 50us */ + time_out = pCalCfg->TimeOut10us; /* Reset time out counter */ + ADCCode = __AD5940_TakeMeasurement(&time_out); /* Turn on ADC to get one valid data and then turn off ADC. */ + if(time_out == 0) + { + error = AD5940ERR_TIMEOUT; + goto LPDACCALERROR; + } /* Time out error. */ + /* Calculate the offset voltage */ + ADCCode -= ADCCodeVref1p1; /* Get the code of Vbias0-AGND. Then calculate the offset voltage in mV. */ + pResult->kC2V_DAC6B = (ADCCode*pCalCfg->ADCRefVolt*1e3f/32768*1.835f/1.82f - pResult->bC2V_DAC6B)/0x3f;/*mV unit*/ + } + /* Step4: calculate the parameters for voltage to code calculation. */ + pResult->kV2C_DAC12B = 1/pResult->kC2V_DAC12B; + pResult->bV2C_DAC12B = -pResult->bC2V_DAC12B/pResult->kC2V_DAC12B; + pResult->kV2C_DAC6B = 1/pResult->kC2V_DAC6B; + pResult->bV2C_DAC6B = -pResult->bC2V_DAC6B/pResult->kC2V_DAC6B; + /* Restore INTC1 SINC2 configure */ + if(INTCCfg&AFEINTSRC_SINC2RDY); + else + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_SINC2RDY, bFALSE); /* Disable SINC2 Interrupt */ + /* Done */ + return AD5940ERR_OK; + +LPDACCALERROR: + AD5940_ADCConvtCtrlS(bFALSE); /* Stop conversion */ + return error; +} + +/** + * @brief Use system clock to measure LFOSC frequency. + * @note Set system clock to external crystal to get a better measurement accuracy. + * This function use 3 sequences and the start address is specified by parameter. + * @param pCfg: pointer to structure. + * @param pFreq: Pointer to a variable that used to store frequency in Hz. + * @return AD5940ERR_OK if succeed. +**/ +AD5940Err AD5940_LFOSCMeasure(LFOSCMeasure_Type *pCfg, float *pFreq) /* Measure current LFOSC frequency. */ +{ + /** + * @code + * Sleep wakeup timer running... + * -SLP----WKP----SLP----WKP----SLP----WKP + * --|-----|-------------|-------------|------------Trigger sequencer when Wakeup Timer over. + * --------|SEQA---------|SEQB----------------------Execute SeqA then SeqB + * ---------|InitT--------|StopT--------------------SeqA start timer and SeqB trigger interrupt so MCU read back current count + * ------------------------|INT--------------------- + * -----------------------------------------|Read---We read SEQTIMEOUT register here + * ---------|-----TimerCount----------------|------- + * ---------|--------------|---TimerCount2--|-------We change SeqB to reset timer so we measure how much time needed for MCU to read back SEQTIMEOUT register(TimerCount2) + * @endcode + * **/ + uint32_t TimerCount, TimerCount2; + SEQCfg_Type seq_cfg, seq_cfg_backup; + SEQInfo_Type seqinfo; + WUPTCfg_Type wupt_cfg; + uint32_t INTCCfg; + uint32_t WuptPeriod; + + static const uint32_t SeqA[]= + { + SEQ_TOUT(0x3fffffff), /* Set time-out timer. It will always run until disable Sequencer by SPI interface. */ + }; + static const uint32_t SeqB[]= + { + /** + * Interrupt flag AFEINTSRC_ENDSEQ will be set after this command. So We can inform MCU to read back + * current timer value. MCU will need some additional time to read back time count. + * So we use SeqB to measure how much time needed for MCU to read back + * */ + SEQ_STOP(), + }; + static const uint32_t SeqBB[]= + { + SEQ_TOUT(0x3fffffff), /* Re-Set time-out timer, so we can measure the time needed for MCU to read out Timer Count register. */ + SEQ_STOP(), /* Interrupt flag AFEINTSRC_ENDSEQ will be set here */ + }; + + if(pCfg == NULL) return AD5940ERR_NULLP; + if(pFreq == NULL) return AD5940ERR_NULLP; + if(pCfg->CalDuration < 1.0f) + return AD5940ERR_PARA; + AD5940_SEQGetCfg(&seq_cfg_backup); + INTCCfg = AD5940_INTCGetCfg(AFEINTC_1); + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ENDSEQ, bTRUE); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bFALSE; + seq_cfg.SeqEnable = bTRUE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + + seqinfo.pSeqCmd = SeqA; + seqinfo.SeqId = SEQID_0; + seqinfo.SeqLen = SEQ_LEN(SeqA); + seqinfo.SeqRamAddr = pCfg->CalSeqAddr; + seqinfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo); + seqinfo.SeqId = SEQID_1; + seqinfo.SeqRamAddr = pCfg->CalSeqAddr + SEQ_LEN(SeqA) ; + seqinfo.SeqLen = SEQ_LEN(SeqB); + seqinfo.pSeqCmd = SeqB; + AD5940_SEQInfoCfg(&seqinfo); /* Configure sequence0 and sequence1 with command SeqA and SeqB */ + + wupt_cfg.WuptEn = bFALSE; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.WuptOrder[1] = SEQID_1; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_B; + wupt_cfg.SeqxWakeupTime[0] = 4; /* Don't care. >4 is acceptable */ + wupt_cfg.SeqxSleepTime[0] = (uint32_t)((pCfg->CalDuration)*32 + 0.5f) - 1 - 4; + wupt_cfg.SeqxWakeupTime[1] = 4-1; + wupt_cfg.SeqxSleepTime[1] = 0xffffffff; /* Don't care */ + WuptPeriod = (wupt_cfg.SeqxSleepTime[0]+1) + (wupt_cfg.SeqxWakeupTime[1]+1); + AD5940_WUPTCfg(&wupt_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + AD5940_WUPTCtrl(bTRUE); + + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + TimerCount = AD5940_SEQTimeOutRd(); + + AD5940_WUPTCtrl(bFALSE); + AD5940_WUPTTime(SEQID_0, 4, 4); /* Set it to minimum value because we don't care about sequence0 now. We only want to measure how much time MCU will need to read register */ + seqinfo.SeqId = SEQID_1; + seqinfo.SeqRamAddr = pCfg->CalSeqAddr + SEQ_LEN(SeqA) ; + seqinfo.SeqLen = SEQ_LEN(SeqBB); + seqinfo.pSeqCmd = SeqBB; + seqinfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo); + AD5940_SEQCtrlS(bTRUE); /* Enable Sequencer again */ + + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + AD5940_WUPTCtrl(bTRUE); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + TimerCount2 = AD5940_SEQTimeOutRd(); + AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_ENDSEQ); + + AD5940_WUPTCtrl(bFALSE); + AD5940_SEQCfg(&seq_cfg_backup); /* restore sequencer configuration */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ENDSEQ, (INTCCfg&AFEINTSRC_ENDSEQ)?bTRUE:bFALSE); /* Restore interrupt configuration */ + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + //printf("Time duration:%d ", (TimerCount2 - TimerCount)); + *pFreq = pCfg->SystemClkFreq*WuptPeriod/(TimerCount2 - TimerCount); + return AD5940ERR_OK; +} + +/** + * @} Calibration + * @} Calibration_Block +*/ + +/** + * @} AD5940_Functions + * @} AD5940_Library +*/ diff --git a/examples/AD5940_BATImpedance/ad5940.h b/examples/AD5940_BATImpedance/ad5940.h new file mode 100644 index 0000000..d856dba --- /dev/null +++ b/examples/AD5940_BATImpedance/ad5940.h @@ -0,0 +1,4933 @@ +/** + * @file ad5940.h + * @brief AD5940 library. This file contains all AD5940 library functions. + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#ifndef _AD5940_H_ +#define _AD5940_H_ +#include "math.h" +#include "string.h" +#include "stdio.h" +/** @addtogroup AD5940_Library + * @{ + */ + +/** + * Select the correct chip. + * Recommend to define this in your compiler. + * */ +//#define CHIPSEL_M355 /**< ADuCM355 */ +//#define CHIPSEL_594X /**< AD5940 or AD5941 */ + +/* library version number */ +#define AD5940LIB_VER_MAJOR 0 /**< Major number */ +#define AD5940LIB_VER_MINOR 2 /**< Minor number */ +#define AD5940LIB_VER_PATCH 1 /**< Path number */ +#define AD5940LIB_VER (AD5940LIB_VER_MAJOR<<16)|(AD5940LIB_VER_MINOR<<8)|(AD5940LIB_VER_PATCH) + +//#define ADI_DEBUG /**< Comment this line to remove debug info. */ + +#ifdef ADI_DEBUG +#define ADI_Print printf /**< Select the method to print out debug message */ +#endif + +#if defined(CHIPSEL_M355) && defined(CHIPSEL_594X) +#error Please select the correct chip by define CHIPSEL_M355 or CHIPSEL_594X. +#endif + +#if !defined(CHIPSEL_M355) && !defined(CHIPSEL_594X) +#error Please select the correct chip by define CHIPSEL_M355 or CHIPSEL_594X. +#endif + +/** + * @cond + * @defgroup AD5940RegistersBitfields + * @brief All AD5940 registers and bitfields definition. + * @{ +*/ +//#if defined(_LANGUAGE_C) || (defined(__GNUC__) && !defined(__ASSEMBLER__)) +#include +//#endif /* _LANGUAGE_C */ + +#ifndef __ADI_GENERATED_DEF_HEADERS__ +#define __ADI_GENERATED_DEF_HEADERS__ 1 +#endif + +#define __ADI_HAS_AGPIO__ 1 +#define __ADI_HAS_ALLON__ 1 +#define __ADI_HAS_INTC__ 1 +#define __ADI_HAS_AFECON__ 1 +#define __ADI_HAS_WUPTMR__ 1 +#define __ADI_HAS_AFE__ 1 + +/* ============================================================================================================================ + GPIO + ============================================================================================================================ */ + +/* ============================================================================================================================ + AGPIO + ============================================================================================================================ */ +#define REG_AGPIO_GP0CON_RESET 0x00000000 /* Reset Value for GP0CON */ +#define REG_AGPIO_GP0CON 0x00000000 /* AGPIO GPIO Port 0 Configuration */ +#define REG_AGPIO_GP0OEN_RESET 0x00000000 /* Reset Value for GP0OEN */ +#define REG_AGPIO_GP0OEN 0x00000004 /* AGPIO GPIO Port 0 Output Enable */ +#define REG_AGPIO_GP0PE_RESET 0x00000000 /* Reset Value for GP0PE */ +#define REG_AGPIO_GP0PE 0x00000008 /* AGPIO GPIO Port 0 Pullup/Pulldown Enable */ +#define REG_AGPIO_GP0IEN_RESET 0x00000000 /* Reset Value for GP0IEN */ +#define REG_AGPIO_GP0IEN 0x0000000C /* AGPIO GPIO Port 0 Input Path Enable */ +#define REG_AGPIO_GP0IN_RESET 0x00000000 /* Reset Value for GP0IN */ +#define REG_AGPIO_GP0IN 0x00000010 /* AGPIO GPIO Port 0 Registered Data Input */ +#define REG_AGPIO_GP0OUT_RESET 0x00000000 /* Reset Value for GP0OUT */ +#define REG_AGPIO_GP0OUT 0x00000014 /* AGPIO GPIO Port 0 Data Output */ +#define REG_AGPIO_GP0SET_RESET 0x00000000 /* Reset Value for GP0SET */ +#define REG_AGPIO_GP0SET 0x00000018 /* AGPIO GPIO Port 0 Data Out Set */ +#define REG_AGPIO_GP0CLR_RESET 0x00000000 /* Reset Value for GP0CLR */ +#define REG_AGPIO_GP0CLR 0x0000001C /* AGPIO GPIO Port 0 Data Out Clear */ +#define REG_AGPIO_GP0TGL_RESET 0x00000000 /* Reset Value for GP0TGL */ +#define REG_AGPIO_GP0TGL 0x00000020 /* AGPIO GPIO Port 0 Pin Toggle */ + +/* ============================================================================================================================ + AGPIO Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0CON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0CON_PIN7CFG 14 /* P0.7 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN6CFG 12 /* P0.6 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN5CFG 10 /* P0.5 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN4CFG 8 /* P0.4 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN3CFG 6 /* P0.3 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN2CFG 4 /* P0.2 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN1CFG 2 /* P0.1 Configuration Bits */ +#define BITP_AGPIO_GP0CON_PIN0CFG 0 /* P0.0 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN7CFG 0x0000C000 /* P0.7 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN6CFG 0x00003000 /* P0.6 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN5CFG 0x00000C00 /* P0.5 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN4CFG 0x00000300 /* P0.4 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN3CFG 0x000000C0 /* P0.3 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN2CFG 0x00000030 /* P0.2 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN1CFG 0x0000000C /* P0.1 Configuration Bits */ +#define BITM_AGPIO_GP0CON_PIN0CFG 0x00000003 /* P0.0 Configuration Bits */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0OEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0OEN_OEN 0 /* Pin Output Drive Enable */ +#define BITM_AGPIO_GP0OEN_OEN 0x000000FF /* Pin Output Drive Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0PE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0PE_PE 0 /* Pin Pull Enable */ +#define BITM_AGPIO_GP0PE_PE 0x000000FF /* Pin Pull Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0IEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0IEN_IEN 0 /* Input Path Enable */ +#define BITM_AGPIO_GP0IEN_IEN 0x000000FF /* Input Path Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0IN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0IN_IN 0 /* Registered Data Input */ +#define BITM_AGPIO_GP0IN_IN 0x000000FF /* Registered Data Input */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0OUT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0OUT_OUT 0 /* Data Out */ +#define BITM_AGPIO_GP0OUT_OUT 0x000000FF /* Data Out */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0SET Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0SET_SET 0 /* Set the Output HIGH */ +#define BITM_AGPIO_GP0SET_SET 0x000000FF /* Set the Output HIGH */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0CLR Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0CLR_CLR 0 /* Set the Output LOW */ +#define BITM_AGPIO_GP0CLR_CLR 0x000000FF /* Set the Output LOW */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPIO_GP0TGL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPIO_GP0TGL_TGL 0 /* Toggle the Output */ +#define BITM_AGPIO_GP0TGL_TGL 0x000000FF /* Toggle the Output */ + + +/* ============================================================================================================================ + + ============================================================================================================================ */ + +/* ============================================================================================================================ + AFECON + ============================================================================================================================ */ +#define REG_AFECON_ADIID_RESET 0x00000000 /* Reset Value for ADIID */ +#define REG_AFECON_ADIID 0x00000400 /* AFECON ADI Identification */ +#define REG_AFECON_CHIPID_RESET 0x00000000 /* Reset Value for CHIPID */ +#define REG_AFECON_CHIPID 0x00000404 /* AFECON Chip Identification */ +#define REG_AFECON_CLKCON0_RESET 0x00000441 /* Reset Value for CLKCON0 */ +#define REG_AFECON_CLKCON0 0x00000408 /* AFECON Clock Divider Configuration */ +#define REG_AFECON_CLKEN1_RESET 0x000002C0 /* Reset Value for CLKEN1 */ +#define REG_AFECON_CLKEN1 0x00000410 /* AFECON Clock Gate Enable */ +#define REG_AFECON_CLKSEL_RESET 0x00000000 /* Reset Value for CLKSEL */ +#define REG_AFECON_CLKSEL 0x00000414 /* AFECON Clock Select */ +#define REG_AFECON_CLKCON0KEY_RESET 0x00000000 /* Reset Value for CLKCON0KEY */ +#define REG_AFECON_CLKCON0KEY 0x00000420 /* AFECON Enable Clock Division to 8Mhz,4Mhz and 2Mhz */ +#define REG_AFECON_SWRSTCON_RESET 0x00000001 /* Reset Value for SWRSTCON */ +#define REG_AFECON_SWRSTCON 0x00000424 /* AFECON Software Reset */ +#define REG_AFECON_TRIGSEQ_RESET 0x00000000 /* Reset Value for TRIGSEQ */ +#define REG_AFECON_TRIGSEQ 0x00000430 /* AFECON Trigger Sequence */ + +/* ============================================================================================================================ + AFECON Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_ADIID Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_ADIID_ADIID 0 /* ADI Identifier. */ +#define BITM_AFECON_ADIID_ADIID 0x0000FFFF /* ADI Identifier. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_CHIPID Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_CHIPID_PARTID 4 /* Part Identifier */ +#define BITP_AFECON_CHIPID_REVISION 0 /* Silicon Revision Number */ +#define BITM_AFECON_CHIPID_PARTID 0x0000FFF0 /* Part Identifier */ +#define BITM_AFECON_CHIPID_REVISION 0x0000000F /* Silicon Revision Number */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_CLKCON0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_CLKCON0_SFFTCLKDIVCNT 10 /* SFFT Clock Divider Configuration */ +#define BITP_AFECON_CLKCON0_ADCCLKDIV 6 /* ADC Clock Divider Configuration */ +#define BITP_AFECON_CLKCON0_SYSCLKDIV 0 /* System Clock Divider Configuration */ +#define BITM_AFECON_CLKCON0_SFFTCLKDIVCNT 0x0000FC00 /* SFFT Clock Divider Configuration */ +#define BITM_AFECON_CLKCON0_ADCCLKDIV 0x000003C0 /* ADC Clock Divider Configuration */ +#define BITM_AFECON_CLKCON0_SYSCLKDIV 0x0000003F /* System Clock Divider Configuration */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_CLKEN1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_CLKEN1_GPT1DIS 7 /* GPT1 Clock Enable */ +#define BITP_AFECON_CLKEN1_GPT0DIS 6 /* GPT0 Clock Enable */ +#define BITP_AFECON_CLKEN1_ACLKDIS 5 /* ACLK Clock Enable */ +#define BITM_AFECON_CLKEN1_GPT1DIS 0x00000080 /* GPT1 Clock Enable */ +#define BITM_AFECON_CLKEN1_GPT0DIS 0x00000040 /* GPT0 Clock Enable */ +#define BITM_AFECON_CLKEN1_ACLKDIS 0x00000020 /* ACLK Clock Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_CLKSEL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_CLKSEL_ADCCLKSEL 2 /* Select ADC Clock Source */ +#define BITP_AFECON_CLKSEL_SYSCLKSEL 0 /* Select System Clock Source */ +#define BITM_AFECON_CLKSEL_ADCCLKSEL 0x0000000C /* Select ADC Clock Source */ +#define BITM_AFECON_CLKSEL_SYSCLKSEL 0x00000003 /* Select System Clock Source */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_CLKCON0KEY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_CLKCON0KEY_DIVSYSCLK_ULP_EN 0 /* Enable Clock Division to 8Mhz,4Mhz and 2Mhz */ +#define BITM_AFECON_CLKCON0KEY_DIVSYSCLK_ULP_EN 0x0000FFFF /* Enable Clock Division to 8Mhz,4Mhz and 2Mhz */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_SWRSTCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_SWRSTCON_SWRSTL 0 /* Software Reset */ +#define BITM_AFECON_SWRSTCON_SWRSTL 0x0000FFFF /* Software Reset */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECON_TRIGSEQ Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECON_TRIGSEQ_TRIG3 3 /* Trigger Sequence 3 */ +#define BITP_AFECON_TRIGSEQ_TRIG2 2 /* Trigger Sequence 2 */ +#define BITP_AFECON_TRIGSEQ_TRIG1 1 /* Trigger Sequence 1 */ +#define BITP_AFECON_TRIGSEQ_TRIG0 0 /* Trigger Sequence 0 */ +#define BITM_AFECON_TRIGSEQ_TRIG3 0x00000008 /* Trigger Sequence 3 */ +#define BITM_AFECON_TRIGSEQ_TRIG2 0x00000004 /* Trigger Sequence 2 */ +#define BITM_AFECON_TRIGSEQ_TRIG1 0x00000002 /* Trigger Sequence 1 */ +#define BITM_AFECON_TRIGSEQ_TRIG0 0x00000001 /* Trigger Sequence 0 */ + +/* ============================================================================================================================ + AFEWDT + ============================================================================================================================ */ +#define REG_AFEWDT_WDTLD 0x00000900 /* AFEWDT Watchdog Timer Load Value */ +#define REG_AFEWDT_WDTVALS 0x00000904 /* AFEWDT Current Count Value */ +#define REG_AFEWDT_WDTCON 0x00000908 /* AFEWDT Watchdog Timer Control Register */ +#define REG_AFEWDT_WDTCLRI 0x0000090C /* AFEWDT Refresh Watchdog Register */ +#define REG_AFEWDT_WDTSTA 0x00000918 /* AFEWDT Timer Status */ +#define REG_AFEWDT_WDTMINLD 0x0000091C /* AFEWDT Minimum Load Value */ + +/* ============================================================================================================================ + AFEWDT Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTLD Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTLD_LOAD 0 /* WDT Load Value */ +#define BITM_AFEWDT_WDTLD_LOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* WDT Load Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTVALS Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTVALS_CCOUNT 0 /* Current WDT Count Value. */ +#define BITM_AFEWDT_WDTVALS_CCOUNT (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Current WDT Count Value. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTCON_RESERVED_15_11 11 /* RESERVED */ +#define BITP_AFEWDT_WDTCON_WDTIRQEN 10 /* WDT Interrupt Enable */ +#define BITP_AFEWDT_WDTCON_MINLOAD_EN 9 /* Timer Window Control */ +#define BITP_AFEWDT_WDTCON_CLKDIV2 8 /* Clock Source */ +#define BITP_AFEWDT_WDTCON_RESERVED1_7 7 /* Reserved */ +#define BITP_AFEWDT_WDTCON_MDE 6 /* Timer Mode Select */ +#define BITP_AFEWDT_WDTCON_EN 5 /* Timer Enable */ +#define BITP_AFEWDT_WDTCON_PRE 2 /* Prescaler. */ +#define BITP_AFEWDT_WDTCON_IRQ 1 /* WDT Interrupt Enable */ +#define BITP_AFEWDT_WDTCON_PDSTOP 0 /* Power Down Stop Enable */ +#define BITM_AFEWDT_WDTCON_RESERVED_15_11 (_ADI_MSK_3(0x0000F800,0x0000F800U, uint16_t )) /* RESERVED */ +#define BITM_AFEWDT_WDTCON_WDTIRQEN (_ADI_MSK_3(0x00000400,0x00000400U, uint16_t )) /* WDT Interrupt Enable */ +#define BITM_AFEWDT_WDTCON_MINLOAD_EN (_ADI_MSK_3(0x00000200,0x00000200U, uint16_t )) /* Timer Window Control */ +#define BITM_AFEWDT_WDTCON_CLKDIV2 (_ADI_MSK_3(0x00000100,0x00000100U, uint16_t )) /* Clock Source */ +#define BITM_AFEWDT_WDTCON_RESERVED1_7 (_ADI_MSK_3(0x00000080,0x00000080U, uint16_t )) /* Reserved */ +#define BITM_AFEWDT_WDTCON_MDE (_ADI_MSK_3(0x00000040,0x00000040U, uint16_t )) /* Timer Mode Select */ +#define BITM_AFEWDT_WDTCON_EN (_ADI_MSK_3(0x00000020,0x00000020U, uint16_t )) /* Timer Enable */ +#define BITM_AFEWDT_WDTCON_PRE (_ADI_MSK_3(0x0000000C,0x0000000CU, uint16_t )) /* Prescaler. */ +#define BITM_AFEWDT_WDTCON_IRQ (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* WDT Interrupt Enable */ +#define BITM_AFEWDT_WDTCON_PDSTOP (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Power Down Stop Enable */ +#define ENUM_AFEWDT_WDTCON_RESET (_ADI_MSK_3(0x00000000,0x00000000U, uint16_t )) /* IRQ: Watchdog Timer timeout creates a reset. */ +#define ENUM_AFEWDT_WDTCON_INTERRUPT (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* IRQ: Watchdog Timer timeout creates an interrupt instead of reset. */ +#define ENUM_AFEWDT_WDTCON_CONTINUE (_ADI_MSK_3(0x00000000,0x00000000U, uint16_t )) /* PDSTOP: Continue Counting When In Hibernate */ +#define ENUM_AFEWDT_WDTCON_STOP (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* PDSTOP: Stop Counter When In Hibernate. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTCLRI Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTCLRI_CLRWDG 0 /* Refresh Register */ +#define BITM_AFEWDT_WDTCLRI_CLRWDG (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Refresh Register */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTSTA_RESERVED_15_7 7 /* RESERVED */ +#define BITP_AFEWDT_WDTSTA_TMINLD 6 /* WDTMINLD Write Status */ +#define BITP_AFEWDT_WDTSTA_OTPWRDONE 5 /* Reset Type Status */ +#define BITP_AFEWDT_WDTSTA_LOCK 4 /* Lock Status */ +#define BITP_AFEWDT_WDTSTA_CON 3 /* WDTCON Write Status */ +#define BITP_AFEWDT_WDTSTA_TLD 2 /* WDTVAL Write Status */ +#define BITP_AFEWDT_WDTSTA_CLRI 1 /* WDTCLRI Write Status */ +#define BITP_AFEWDT_WDTSTA_IRQ 0 /* WDT Interrupt */ +#define BITM_AFEWDT_WDTSTA_RESERVED_15_7 (_ADI_MSK_3(0x0000FF80,0x0000FF80U, uint16_t )) /* RESERVED */ +#define BITM_AFEWDT_WDTSTA_TMINLD (_ADI_MSK_3(0x00000040,0x00000040U, uint16_t )) /* WDTMINLD Write Status */ +#define BITM_AFEWDT_WDTSTA_OTPWRDONE (_ADI_MSK_3(0x00000020,0x00000020U, uint16_t )) /* Reset Type Status */ +#define BITM_AFEWDT_WDTSTA_LOCK (_ADI_MSK_3(0x00000010,0x00000010U, uint16_t )) /* Lock Status */ +#define BITM_AFEWDT_WDTSTA_CON (_ADI_MSK_3(0x00000008,0x00000008U, uint16_t )) /* WDTCON Write Status */ +#define BITM_AFEWDT_WDTSTA_TLD (_ADI_MSK_3(0x00000004,0x00000004U, uint16_t )) /* WDTVAL Write Status */ +#define BITM_AFEWDT_WDTSTA_CLRI (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* WDTCLRI Write Status */ +#define BITM_AFEWDT_WDTSTA_IRQ (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* WDT Interrupt */ +#define ENUM_AFEWDT_WDTSTA_OPEN (_ADI_MSK_3(0x00000000,0x00000000U, uint16_t )) /* LOCK: Timer Operation Not Locked */ +#define ENUM_AFEWDT_WDTSTA_LOCKED (_ADI_MSK_3(0x00000010,0x00000010U, uint16_t )) /* LOCK: Timer Enabled and Locked */ +#define ENUM_AFEWDT_WDTSTA_SYNC_COMPLETE (_ADI_MSK_3(0x00000000,0x00000000U, uint16_t )) /* TLD: Arm and AFE Watchdog Clock Domains WDTLD values match */ +#define ENUM_AFEWDT_WDTSTA_SYNC_IN_PROGRESS (_ADI_MSK_3(0x00000004,0x00000004U, uint16_t )) /* TLD: Synchronize In Progress */ +#define ENUM_AFEWDT_WDTSTA_CLEARED (_ADI_MSK_3(0x00000000,0x00000000U, uint16_t )) /* IRQ: Watchdog Timer Interrupt Not Pending */ +#define ENUM_AFEWDT_WDTSTA_PENDING (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* IRQ: Watchdog Timer Interrupt Pending */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFEWDT_WDTMINLD Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFEWDT_WDTMINLD_MIN_LOAD 0 /* WDT Min Load Value */ +#define BITM_AFEWDT_WDTMINLD_MIN_LOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* WDT Min Load Value */ + +/* ============================================================================================================================ + Wakeup Timer + ============================================================================================================================ */ + +/* ============================================================================================================================ + WUPTMR + ============================================================================================================================ */ +#define REG_WUPTMR_CON_RESET 0x00000000 /* Reset Value for CON */ +#define REG_WUPTMR_CON 0x00000800 /* WUPTMR Timer Control */ +#define REG_WUPTMR_SEQORDER_RESET 0x00000000 /* Reset Value for SEQORDER */ +#define REG_WUPTMR_SEQORDER 0x00000804 /* WUPTMR Order Control */ +#define REG_WUPTMR_SEQ0WUPL_RESET 0x0000FFFF /* Reset Value for SEQ0WUPL */ +#define REG_WUPTMR_SEQ0WUPL 0x00000808 /* WUPTMR SEQ0 WTimeL (LSB) */ +#define REG_WUPTMR_SEQ0WUPH_RESET 0x0000000F /* Reset Value for SEQ0WUPH */ +#define REG_WUPTMR_SEQ0WUPH 0x0000080C /* WUPTMR SEQ0 WTimeH (MSB) */ +#define REG_WUPTMR_SEQ0SLEEPL_RESET 0x0000FFFF /* Reset Value for SEQ0SLEEPL */ +#define REG_WUPTMR_SEQ0SLEEPL 0x00000810 /* WUPTMR SEQ0 STimeL (LSB) */ +#define REG_WUPTMR_SEQ0SLEEPH_RESET 0x0000000F /* Reset Value for SEQ0SLEEPH */ +#define REG_WUPTMR_SEQ0SLEEPH 0x00000814 /* WUPTMR SEQ0 STimeH (MSB) */ +#define REG_WUPTMR_SEQ1WUPL_RESET 0x0000FFFF /* Reset Value for SEQ1WUPL */ +#define REG_WUPTMR_SEQ1WUPL 0x00000818 /* WUPTMR SEQ1 WTimeL (LSB) */ +#define REG_WUPTMR_SEQ1WUPH_RESET 0x0000000F /* Reset Value for SEQ1WUPH */ +#define REG_WUPTMR_SEQ1WUPH 0x0000081C /* WUPTMR SEQ1 WTimeH (MSB) */ +#define REG_WUPTMR_SEQ1SLEEPL_RESET 0x0000FFFF /* Reset Value for SEQ1SLEEPL */ +#define REG_WUPTMR_SEQ1SLEEPL 0x00000820 /* WUPTMR SEQ1 STimeL (LSB) */ +#define REG_WUPTMR_SEQ1SLEEPH_RESET 0x0000000F /* Reset Value for SEQ1SLEEPH */ +#define REG_WUPTMR_SEQ1SLEEPH 0x00000824 /* WUPTMR SEQ1 STimeH (MSB) */ +#define REG_WUPTMR_SEQ2WUPL_RESET 0x0000FFFF /* Reset Value for SEQ2WUPL */ +#define REG_WUPTMR_SEQ2WUPL 0x00000828 /* WUPTMR SEQ2 WTimeL (LSB) */ +#define REG_WUPTMR_SEQ2WUPH_RESET 0x0000000F /* Reset Value for SEQ2WUPH */ +#define REG_WUPTMR_SEQ2WUPH 0x0000082C /* WUPTMR SEQ2 WTimeH (MSB) */ +#define REG_WUPTMR_SEQ2SLEEPL_RESET 0x0000FFFF /* Reset Value for SEQ2SLEEPL */ +#define REG_WUPTMR_SEQ2SLEEPL 0x00000830 /* WUPTMR SEQ2 STimeL (LSB) */ +#define REG_WUPTMR_SEQ2SLEEPH_RESET 0x0000000F /* Reset Value for SEQ2SLEEPH */ +#define REG_WUPTMR_SEQ2SLEEPH 0x00000834 /* WUPTMR SEQ2 STimeH (MSB) */ +#define REG_WUPTMR_SEQ3WUPL_RESET 0x0000FFFF /* Reset Value for SEQ3WUPL */ +#define REG_WUPTMR_SEQ3WUPL 0x00000838 /* WUPTMR SEQ3 WTimeL (LSB) */ +#define REG_WUPTMR_SEQ3WUPH_RESET 0x0000000F /* Reset Value for SEQ3WUPH */ +#define REG_WUPTMR_SEQ3WUPH 0x0000083C /* WUPTMR SEQ3 WTimeH (MSB) */ +#define REG_WUPTMR_SEQ3SLEEPL_RESET 0x0000FFFF /* Reset Value for SEQ3SLEEPL */ +#define REG_WUPTMR_SEQ3SLEEPL 0x00000840 /* WUPTMR SEQ3 STimeL (LSB) */ +#define REG_WUPTMR_SEQ3SLEEPH_RESET 0x0000000F /* Reset Value for SEQ3SLEEPH */ +#define REG_WUPTMR_SEQ3SLEEPH 0x00000844 /* WUPTMR SEQ3 STimeH (MSB) */ + +/* ============================================================================================================================ + WUPTMR Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_CON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_CON_MSKTRG 6 /* Mark Sequence Trigger from Sleep Wakeup Timer */ +#define BITP_WUPTMR_CON_CLKSEL 4 /* Clock Selection */ +#define BITP_WUPTMR_CON_ENDSEQ 1 /* End Sequence */ +#define BITP_WUPTMR_CON_EN 0 /* Sleep Wake Timer Enable Bit */ +#define BITM_WUPTMR_CON_MSKTRG 0x00000040 /* Mark Sequence Trigger from Sleep Wakeup Timer */ +#define BITM_WUPTMR_CON_CLKSEL 0x00000030 /* Clock Selection */ +#define BITM_WUPTMR_CON_ENDSEQ 0x0000000E /* End Sequence */ +#define BITM_WUPTMR_CON_EN 0x00000001 /* Sleep Wake Timer Enable Bit */ +#define ENUM_WUPTMR_CON_SWT32K0 0x00000000 /* CLKSEL: Internal 32kHz OSC */ +#define ENUM_WUPTMR_CON_SWTEXT0 0x00000010 /* CLKSEL: External Clock */ +#define ENUM_WUPTMR_CON_SWT32K 0x00000020 /* CLKSEL: Internal 32kHz OSC */ +#define ENUM_WUPTMR_CON_SWTEXT 0x00000030 /* CLKSEL: External Clock */ +#define ENUM_WUPTMR_CON_ENDSEQA 0x00000000 /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqA And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQB 0x00000002 /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqB And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQC 0x00000004 /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqC And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQD 0x00000006 /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqD And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQE 0x00000008 /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqE And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQF 0x0000000A /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqF And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQG 0x0000000C /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqG And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_ENDSEQH 0x0000000E /* ENDSEQ: The Sleep Wakeup Timer Will Stop At SeqH And Then Go Back To SeqA */ +#define ENUM_WUPTMR_CON_SWTEN 0x00000000 /* EN: Enable Sleep Wakeup Timer */ +#define ENUM_WUPTMR_CON_SWTDIS 0x00000001 /* EN: Disable Sleep Wakeup Timer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQORDER Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQORDER_SEQH 14 /* SEQH Config */ +#define BITP_WUPTMR_SEQORDER_SEQG 12 /* SEQG Config */ +#define BITP_WUPTMR_SEQORDER_SEQF 10 /* SEQF Config */ +#define BITP_WUPTMR_SEQORDER_SEQE 8 /* SEQE Config */ +#define BITP_WUPTMR_SEQORDER_SEQD 6 /* SEQD Config */ +#define BITP_WUPTMR_SEQORDER_SEQC 4 /* SEQC Config */ +#define BITP_WUPTMR_SEQORDER_SEQB 2 /* SEQB Config */ +#define BITP_WUPTMR_SEQORDER_SEQA 0 /* SEQA Config */ +#define BITM_WUPTMR_SEQORDER_SEQH 0x0000C000 /* SEQH Config */ +#define BITM_WUPTMR_SEQORDER_SEQG 0x00003000 /* SEQG Config */ +#define BITM_WUPTMR_SEQORDER_SEQF 0x00000C00 /* SEQF Config */ +#define BITM_WUPTMR_SEQORDER_SEQE 0x00000300 /* SEQE Config */ +#define BITM_WUPTMR_SEQORDER_SEQD 0x000000C0 /* SEQD Config */ +#define BITM_WUPTMR_SEQORDER_SEQC 0x00000030 /* SEQC Config */ +#define BITM_WUPTMR_SEQORDER_SEQB 0x0000000C /* SEQB Config */ +#define BITM_WUPTMR_SEQORDER_SEQA 0x00000003 /* SEQA Config */ +#define ENUM_WUPTMR_SEQORDER_SEQH0 0x00000000 /* SEQH: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQH1 0x00004000 /* SEQH: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQH2 0x00008000 /* SEQH: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQH3 0x0000C000 /* SEQH: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQG0 0x00000000 /* SEQG: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQG1 0x00001000 /* SEQG: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQG2 0x00002000 /* SEQG: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQG3 0x00003000 /* SEQG: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQF0 0x00000000 /* SEQF: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQF1 0x00000400 /* SEQF: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQF2 0x00000800 /* SEQF: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQF3 0x00000C00 /* SEQF: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQE0 0x00000000 /* SEQE: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQE1 0x00000100 /* SEQE: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQE2 0x00000200 /* SEQE: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQE3 0x00000300 /* SEQE: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQD0 0x00000000 /* SEQD: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQD1 0x00000040 /* SEQD: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQD2 0x00000080 /* SEQD: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQD3 0x000000C0 /* SEQD: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQC0 0x00000000 /* SEQC: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQC1 0x00000010 /* SEQC: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQC2 0x00000020 /* SEQC: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQC3 0x00000030 /* SEQC: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQB0 0x00000000 /* SEQB: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQB1 0x00000004 /* SEQB: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQB2 0x00000008 /* SEQB: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQB3 0x0000000C /* SEQB: Fill SEQ3 In */ +#define ENUM_WUPTMR_SEQORDER_SEQA0 0x00000000 /* SEQA: Fill SEQ0 In */ +#define ENUM_WUPTMR_SEQORDER_SEQA1 0x00000001 /* SEQA: Fill SEQ1 In */ +#define ENUM_WUPTMR_SEQORDER_SEQA2 0x00000002 /* SEQA: Fill SEQ2 In */ +#define ENUM_WUPTMR_SEQORDER_SEQA3 0x00000003 /* SEQA: Fill SEQ3 In */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ0WUPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ0WUPL_WAKEUPTIME0 0 /* Sequence 0 Sleep Period */ +#define BITM_WUPTMR_SEQ0WUPL_WAKEUPTIME0 0x0000FFFF /* Sequence 0 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ0WUPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ0WUPH_WAKEUPTIME0 0 /* Sequence 0 Sleep Period */ +#define BITM_WUPTMR_SEQ0WUPH_WAKEUPTIME0 0x0000000F /* Sequence 0 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ0SLEEPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ0SLEEPL_SLEEPTIME0 0 /* Sequence 0 Active Period */ +#define BITM_WUPTMR_SEQ0SLEEPL_SLEEPTIME0 0x0000FFFF /* Sequence 0 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ0SLEEPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ0SLEEPH_SLEEPTIME0 0 /* Sequence 0 Active Period */ +#define BITM_WUPTMR_SEQ0SLEEPH_SLEEPTIME0 0x0000000F /* Sequence 0 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ1WUPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ1WUPL_WAKEUPTIME 0 /* Sequence 1 Sleep Period */ +#define BITM_WUPTMR_SEQ1WUPL_WAKEUPTIME 0x0000FFFF /* Sequence 1 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ1WUPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ1WUPH_WAKEUPTIME 0 /* Sequence 1 Sleep Period */ +#define BITM_WUPTMR_SEQ1WUPH_WAKEUPTIME 0x0000000F /* Sequence 1 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ1SLEEPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ1SLEEPL_SLEEPTIME1 0 /* Sequence 1 Active Period */ +#define BITM_WUPTMR_SEQ1SLEEPL_SLEEPTIME1 0x0000FFFF /* Sequence 1 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ1SLEEPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ1SLEEPH_SLEEPTIME1 0 /* Sequence 1 Active Period */ +#define BITM_WUPTMR_SEQ1SLEEPH_SLEEPTIME1 0x0000000F /* Sequence 1 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ2WUPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ2WUPL_WAKEUPTIME2 0 /* Sequence 2 Sleep Period */ +#define BITM_WUPTMR_SEQ2WUPL_WAKEUPTIME2 0x0000FFFF /* Sequence 2 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ2WUPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ2WUPH_WAKEUPTIME2 0 /* Sequence 2 Sleep Period */ +#define BITM_WUPTMR_SEQ2WUPH_WAKEUPTIME2 0x0000000F /* Sequence 2 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ2SLEEPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ2SLEEPL_SLEEPTIME2 0 /* Sequence 2 Active Period */ +#define BITM_WUPTMR_SEQ2SLEEPL_SLEEPTIME2 0x0000FFFF /* Sequence 2 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ2SLEEPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ2SLEEPH_SLEEPTIME2 0 /* Sequence 2 Active Period */ +#define BITM_WUPTMR_SEQ2SLEEPH_SLEEPTIME2 0x0000000F /* Sequence 2 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ3WUPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ3WUPL_WAKEUPTIME3 0 /* Sequence 3 Sleep Period */ +#define BITM_WUPTMR_SEQ3WUPL_WAKEUPTIME3 0x0000FFFF /* Sequence 3 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ3WUPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ3WUPH_WAKEUPTIME3 0 /* Sequence 3 Sleep Period */ +#define BITM_WUPTMR_SEQ3WUPH_WAKEUPTIME3 0x0000000F /* Sequence 3 Sleep Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ3SLEEPL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ3SLEEPL_SLEEPTIME3 0 /* Sequence 3 Active Period */ +#define BITM_WUPTMR_SEQ3SLEEPL_SLEEPTIME3 0x0000FFFF /* Sequence 3 Active Period */ + +/* ------------------------------------------------------------------------------------------------------------------------- + WUPTMR_SEQ3SLEEPH Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_WUPTMR_SEQ3SLEEPH_SLEEPTIME3 0 /* Sequence 3 Active Period */ +#define BITM_WUPTMR_SEQ3SLEEPH_SLEEPTIME3 0x0000000F /* Sequence 3 Active Period */ + + +/* ============================================================================================================================ + Always On Register + ============================================================================================================================ */ + +/* ============================================================================================================================ + ALLON + ============================================================================================================================ */ +#define REG_ALLON_PWRMOD_RESET 0x00000001 /* Reset Value for PWRMOD */ +#define REG_ALLON_PWRMOD 0x00000A00 /* ALLON Power Modes */ +#define REG_ALLON_PWRKEY_RESET 0x00000000 /* Reset Value for PWRKEY */ +#define REG_ALLON_PWRKEY 0x00000A04 /* ALLON Key Protection for PWRMOD */ +#define REG_ALLON_OSCKEY_RESET 0x00000000 /* Reset Value for OSCKEY */ +#define REG_ALLON_OSCKEY 0x00000A0C /* ALLON Key Protection for OSCCON */ +#define REG_ALLON_OSCCON_RESET 0x00000003 /* Reset Value for OSCCON */ +#define REG_ALLON_OSCCON 0x00000A10 /* ALLON Oscillator Control */ +#define REG_ALLON_TMRCON_RESET 0x00000000 /* Reset Value for TMRCON */ +#define REG_ALLON_TMRCON 0x00000A1C /* ALLON Timer Wakeup Configuration */ +#define REG_ALLON_EI0CON_RESET 0x00000000 /* Reset Value for EI0CON */ +#define REG_ALLON_EI0CON 0x00000A20 /* ALLON External Interrupt Configuration 0 */ +#define REG_ALLON_EI1CON_RESET 0x00000000 /* Reset Value for EI1CON */ +#define REG_ALLON_EI1CON 0x00000A24 /* ALLON External Interrupt Configuration 1 */ +#define REG_ALLON_EI2CON_RESET 0x00000000 /* Reset Value for EI2CON */ +#define REG_ALLON_EI2CON 0x00000A28 /* ALLON External Interrupt Configuration 2 */ +#define REG_ALLON_EICLR_RESET 0x0000C000 /* Reset Value for EICLR */ +#define REG_ALLON_EICLR 0x00000A30 /* ALLON External Interrupt Clear */ +#define REG_ALLON_RSTSTA_RESET 0x00000000 /* Reset Value for RSTSTA */ +#define REG_ALLON_RSTSTA 0x00000A40 /* ALLON Reset Status */ +#define REG_ALLON_RSTCONKEY_RESET 0x00000000 /* Reset Value for RSTCONKEY */ +#define REG_ALLON_RSTCONKEY 0x00000A5C /* ALLON Key Protection for RSTCON Register */ +#define REG_ALLON_LOSCTST_RESET 0x0000008F /* Reset Value for LOSCTST */ +#define REG_ALLON_LOSCTST 0x00000A6C /* ALLON Internal LF Oscillator Test */ +#define REG_ALLON_CLKEN0_RESET 0x00000004 /* Reset Value for CLKEN0 */ +#define REG_ALLON_CLKEN0 0x00000A70 /* ALLON 32KHz Peripheral Clock Enable */ + +/* ============================================================================================================================ + ALLON Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_PWRMOD Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_PWRMOD_RAMRETEN 15 /* Retention for RAM */ +#define BITP_ALLON_PWRMOD_ADCRETEN 14 /* Keep ADC Power Switch on in Hibernate */ +#define BITP_ALLON_PWRMOD_SEQSLPEN 3 /* Auto Sleep by Sequencer Command */ +#define BITP_ALLON_PWRMOD_TMRSLPEN 2 /* Auto Sleep by Sleep Wakeup Timer */ +#define BITP_ALLON_PWRMOD_PWRMOD 0 /* Power Mode Control Bits */ +#define BITM_ALLON_PWRMOD_RAMRETEN 0x00008000 /* Retention for RAM */ +#define BITM_ALLON_PWRMOD_ADCRETEN 0x00004000 /* Keep ADC Power Switch on in Hibernate */ +#define BITM_ALLON_PWRMOD_SEQSLPEN 0x00000008 /* Auto Sleep by Sequencer Command */ +#define BITM_ALLON_PWRMOD_TMRSLPEN 0x00000004 /* Auto Sleep by Sleep Wakeup Timer */ +#define BITM_ALLON_PWRMOD_PWRMOD 0x00000003 /* Power Mode Control Bits */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_PWRKEY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_PWRKEY_PWRKEY 0 /* PWRMOD Key Register */ +#define BITM_ALLON_PWRKEY_PWRKEY 0x0000FFFF /* PWRMOD Key Register */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_OSCKEY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_OSCKEY_OSCKEY 0 /* Oscillator Control Key Register. */ +#define BITM_ALLON_OSCKEY_OSCKEY 0x0000FFFF /* Oscillator Control Key Register. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_OSCCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_OSCCON_HFXTALOK 10 /* Status of HFXTAL Oscillator */ +#define BITP_ALLON_OSCCON_HFOSCOK 9 /* Status of HFOSC Oscillator */ +#define BITP_ALLON_OSCCON_LFOSCOK 8 /* Status of LFOSC Oscillator */ +#define BITP_ALLON_OSCCON_HFXTALEN 2 /* High Frequency Crystal Oscillator Enable */ +#define BITP_ALLON_OSCCON_HFOSCEN 1 /* High Frequency Internal Oscillator Enable */ +#define BITP_ALLON_OSCCON_LFOSCEN 0 /* Low Frequency Internal Oscillator Enable */ +#define BITM_ALLON_OSCCON_HFXTALOK 0x00000400 /* Status of HFXTAL Oscillator */ +#define BITM_ALLON_OSCCON_HFOSCOK 0x00000200 /* Status of HFOSC Oscillator */ +#define BITM_ALLON_OSCCON_LFOSCOK 0x00000100 /* Status of LFOSC Oscillator */ +#define BITM_ALLON_OSCCON_HFXTALEN 0x00000004 /* High Frequency Crystal Oscillator Enable */ +#define BITM_ALLON_OSCCON_HFOSCEN 0x00000002 /* High Frequency Internal Oscillator Enable */ +#define BITM_ALLON_OSCCON_LFOSCEN 0x00000001 /* Low Frequency Internal Oscillator Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_TMRCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_TMRCON_TMRINTEN 0 /* Enable Wakeup Timer */ +#define BITM_ALLON_TMRCON_TMRINTEN 0x00000001 /* Enable Wakeup Timer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_EI0CON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_EI0CON_IRQ3EN 15 /* External Interrupt 3 Enable Bit */ +#define BITP_ALLON_EI0CON_IRQ3MDE 12 /* External Interrupt 3 Mode Registers */ +#define BITP_ALLON_EI0CON_IRQ2EN 11 /* External Interrupt 2 Enable Bit */ +#define BITP_ALLON_EI0CON_IRQ2MDE 8 /* External Interrupt 2 Mode Registers */ +#define BITP_ALLON_EI0CON_IRQ1EN 7 /* External Interrupt 1 Enable Bit */ +#define BITP_ALLON_EI0CON_IRQ1MDE 4 /* External Interrupt 1 Mode Registers */ +#define BITP_ALLON_EI0CON_IRQ0EN 3 /* External Interrupt 0 Enable Bit */ +#define BITP_ALLON_EI0CON_IRQ0MDE 0 /* External Interrupt 0 Mode Registers */ +#define BITM_ALLON_EI0CON_IRQ3EN 0x00008000 /* External Interrupt 3 Enable Bit */ +#define BITM_ALLON_EI0CON_IRQ3MDE 0x00007000 /* External Interrupt 3 Mode Registers */ +#define BITM_ALLON_EI0CON_IRQ2EN 0x00000800 /* External Interrupt 2 Enable Bit */ +#define BITM_ALLON_EI0CON_IRQ2MDE 0x00000700 /* External Interrupt 2 Mode Registers */ +#define BITM_ALLON_EI0CON_IRQ1EN 0x00000080 /* External Interrupt 1 Enable Bit */ +#define BITM_ALLON_EI0CON_IRQ1MDE 0x00000070 /* External Interrupt 1 Mode Registers */ +#define BITM_ALLON_EI0CON_IRQ0EN 0x00000008 /* External Interrupt 0 Enable Bit */ +#define BITM_ALLON_EI0CON_IRQ0MDE 0x00000007 /* External Interrupt 0 Mode Registers */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_EI1CON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_EI1CON_IRQ7EN 15 /* External Interrupt 7 Enable Bit */ +#define BITP_ALLON_EI1CON_IRQ7MDE 12 /* External Interrupt 7 Mode Registers */ +#define BITP_ALLON_EI1CON_IRQ6EN 11 /* External Interrupt 6 Enable Bit */ +#define BITP_ALLON_EI1CON_IRQ6MDE 8 /* External Interrupt 6 Mode Registers */ +#define BITP_ALLON_EI1CON_IRQ5EN 7 /* External Interrupt 5 Enable Bit */ +#define BITP_ALLON_EI1CON_IRQ5MDE 4 /* External Interrupt 5 Mode Registers */ +#define BITP_ALLON_EI1CON_IRQ4EN 3 /* External Interrupt 4 Enable Bit */ +#define BITP_ALLON_EI1CON_IRQ4MDE 0 /* External Interrupt 4 Mode Registers */ +#define BITM_ALLON_EI1CON_IRQ7EN 0x00008000 /* External Interrupt 7 Enable Bit */ +#define BITM_ALLON_EI1CON_IRQ7MDE 0x00007000 /* External Interrupt 7 Mode Registers */ +#define BITM_ALLON_EI1CON_IRQ6EN 0x00000800 /* External Interrupt 6 Enable Bit */ +#define BITM_ALLON_EI1CON_IRQ6MDE 0x00000700 /* External Interrupt 6 Mode Registers */ +#define BITM_ALLON_EI1CON_IRQ5EN 0x00000080 /* External Interrupt 5 Enable Bit */ +#define BITM_ALLON_EI1CON_IRQ5MDE 0x00000070 /* External Interrupt 5 Mode Registers */ +#define BITM_ALLON_EI1CON_IRQ4EN 0x00000008 /* External Interrupt 4 Enable Bit */ +#define BITM_ALLON_EI1CON_IRQ4MDE 0x00000007 /* External Interrupt 4 Mode Registers */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_EI2CON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_EI2CON_BUSINTEN 3 /* BUS Interrupt Detection Enable Bit */ +#define BITP_ALLON_EI2CON_BUSINTMDE 0 /* BUS Interrupt Detection Mode Registers */ +#define BITM_ALLON_EI2CON_BUSINTEN 0x00000008 /* BUS Interrupt Detection Enable Bit */ +#define BITM_ALLON_EI2CON_BUSINTMDE 0x00000007 /* BUS Interrupt Detection Mode Registers */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_EICLR Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_EICLR_AUTCLRBUSEN 15 /* Enable Auto Clear of Bus Interrupt */ +#define BITP_ALLON_EICLR_BUSINT 8 /* BUS Interrupt */ +#define BITM_ALLON_EICLR_AUTCLRBUSEN 0x00008000 /* Enable Auto Clear of Bus Interrupt */ +#define BITM_ALLON_EICLR_BUSINT 0x00000100 /* BUS Interrupt */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_RSTSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_RSTSTA_PINSWRST 4 /* Software Reset Pin */ +#define BITP_ALLON_RSTSTA_MMRSWRST 3 /* MMR Software Reset */ +#define BITP_ALLON_RSTSTA_WDRST 2 /* Watchdog Timeout */ +#define BITP_ALLON_RSTSTA_EXTRST 1 /* External Reset */ +#define BITP_ALLON_RSTSTA_POR 0 /* Power-on Reset */ +#define BITM_ALLON_RSTSTA_PINSWRST 0x00000010 /* Software Reset Pin */ +#define BITM_ALLON_RSTSTA_MMRSWRST 0x00000008 /* MMR Software Reset */ +#define BITM_ALLON_RSTSTA_WDRST 0x00000004 /* Watchdog Timeout */ +#define BITM_ALLON_RSTSTA_EXTRST 0x00000002 /* External Reset */ +#define BITM_ALLON_RSTSTA_POR 0x00000001 /* Power-on Reset */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_RSTCONKEY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_RSTCONKEY_KEY 0 /* Reset Control Key Register */ +#define BITM_ALLON_RSTCONKEY_KEY 0x0000FFFF /* Reset Control Key Register */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_LOSCTST Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_LOSCTST_TRIM 0 /* Trim Caps to Adjust Frequency. */ +#define BITM_ALLON_LOSCTST_TRIM 0x0000000F /* Trim Caps to Adjust Frequency. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + ALLON_CLKEN0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_ALLON_CLKEN0_TIACHPDIS 2 /* TIA Chop Clock Disable */ +#define BITP_ALLON_CLKEN0_SLPWUTDIS 1 /* Sleep/Wakeup Timer Clock Disable */ +#define BITP_ALLON_CLKEN0_WDTDIS 0 /* Watch Dog Timer Clock Disable */ +#define BITM_ALLON_CLKEN0_TIACHPDIS 0x00000004 /* TIA Chop Clock Disable */ +#define BITM_ALLON_CLKEN0_SLPWUTDIS 0x00000002 /* Sleep/Wakeup Timer Clock Disable */ +#define BITM_ALLON_CLKEN0_WDTDIS 0x00000001 /* Watch Dog Timer Clock Disable */ + +/* ============================================================================================================================ + General Purpose Timer + ============================================================================================================================ */ + +/* ============================================================================================================================ + AGPT0 + ============================================================================================================================ */ +#define REG_AGPT0_LD0 0x00000D00 /* AGPT0 16-bit Load Value Register. */ +#define REG_AGPT0_VAL0 0x00000D04 /* AGPT0 16-Bit Timer Value Register. */ +#define REG_AGPT0_CON0 0x00000D08 /* AGPT0 Control Register. */ +#define REG_AGPT0_CLRI0 0x00000D0C /* AGPT0 Clear Interrupt Register. */ +#define REG_AGPT0_CAP0 0x00000D10 /* AGPT0 Capture Register. */ +#define REG_AGPT0_ALD0 0x00000D14 /* AGPT0 16-Bit Load Value, Asynchronous. */ +#define REG_AGPT0_AVAL0 0x00000D18 /* AGPT0 16-Bit Timer Value, Asynchronous Register. */ +#define REG_AGPT0_STA0 0x00000D1C /* AGPT0 Status Register. */ +#define REG_AGPT0_PWMCON0 0x00000D20 /* AGPT0 PWM Control Register. */ +#define REG_AGPT0_PWMMAT0 0x00000D24 /* AGPT0 PWM Match Value Register. */ +#define REG_AGPT0_INTEN 0x00000D28 /* AGPT0 Interrupt Enable */ + +/* ============================================================================================================================ + AGPT0 Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_LD0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_LD0_LOAD 0 /* Load Value */ +#define BITM_AGPT0_LD0_LOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Load Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_VAL0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_VAL0_VAL 0 /* Current Count */ +#define BITM_AGPT0_VAL0_VAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Current Count */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_CON0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_CON0_SYNCBYP 15 /* Synchronization Bypass */ +#define BITP_AGPT0_CON0_RSTEN 14 /* Counter and Prescale Reset Enable */ +#define BITP_AGPT0_CON0_EVTEN 13 /* Event Select */ +#define BITP_AGPT0_CON0_EVENT 8 /* Event Select Range */ +#define BITP_AGPT0_CON0_RLD 7 /* Reload Control */ +#define BITP_AGPT0_CON0_CLK 5 /* Clock Select */ +#define BITP_AGPT0_CON0_ENABLE 4 /* Timer Enable */ +#define BITP_AGPT0_CON0_MOD 3 /* Timer Mode */ +#define BITP_AGPT0_CON0_UP 2 /* Count up */ +#define BITP_AGPT0_CON0_PRE 0 /* Prescaler */ +#define BITM_AGPT0_CON0_SYNCBYP (_ADI_MSK_3(0x00008000,0x00008000U, uint16_t )) /* Synchronization Bypass */ +#define BITM_AGPT0_CON0_RSTEN (_ADI_MSK_3(0x00004000,0x00004000U, uint16_t )) /* Counter and Prescale Reset Enable */ +#define BITM_AGPT0_CON0_EVTEN (_ADI_MSK_3(0x00002000,0x00002000U, uint16_t )) /* Event Select */ +#define BITM_AGPT0_CON0_EVENT (_ADI_MSK_3(0x00001F00,0x00001F00U, uint16_t )) /* Event Select Range */ +#define BITM_AGPT0_CON0_RLD (_ADI_MSK_3(0x00000080,0x00000080U, uint16_t )) /* Reload Control */ +#define BITM_AGPT0_CON0_CLK (_ADI_MSK_3(0x00000060,0x00000060U, uint16_t )) /* Clock Select */ +#define BITM_AGPT0_CON0_ENABLE (_ADI_MSK_3(0x00000010,0x00000010U, uint16_t )) /* Timer Enable */ +#define BITM_AGPT0_CON0_MOD (_ADI_MSK_3(0x00000008,0x00000008U, uint16_t )) /* Timer Mode */ +#define BITM_AGPT0_CON0_UP (_ADI_MSK_3(0x00000004,0x00000004U, uint16_t )) /* Count up */ +#define BITM_AGPT0_CON0_PRE (_ADI_MSK_3(0x00000003,0x00000003U, uint16_t )) /* Prescaler */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_CLRI0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_CLRI0_CAP 1 /* Clear Captured Event Interrupt */ +#define BITP_AGPT0_CLRI0_TMOUT 0 /* Clear Timeout Interrupt */ +#define BITM_AGPT0_CLRI0_CAP (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* Clear Captured Event Interrupt */ +#define BITM_AGPT0_CLRI0_TMOUT (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Clear Timeout Interrupt */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_CAP0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_CAP0_CAP 0 /* 16-bit Captured Value */ +#define BITM_AGPT0_CAP0_CAP (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* 16-bit Captured Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_ALD0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_ALD0_ALOAD 0 /* Load Value, Asynchronous */ +#define BITM_AGPT0_ALD0_ALOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Load Value, Asynchronous */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_AVAL0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_AVAL0_AVAL 0 /* Counter Value */ +#define BITM_AGPT0_AVAL0_AVAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Counter Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_STA0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_STA0_RSTCNT 8 /* Counter Reset Occurring */ +#define BITP_AGPT0_STA0_PDOK 7 /* Clear Interrupt Register Synchronization */ +#define BITP_AGPT0_STA0_BUSY 6 /* Timer Busy */ +#define BITP_AGPT0_STA0_CAP 1 /* Capture Event Pending */ +#define BITP_AGPT0_STA0_TMOUT 0 /* Timeout Event Occurred */ +#define BITM_AGPT0_STA0_RSTCNT (_ADI_MSK_3(0x00000100,0x00000100U, uint16_t )) /* Counter Reset Occurring */ +#define BITM_AGPT0_STA0_PDOK (_ADI_MSK_3(0x00000080,0x00000080U, uint16_t )) /* Clear Interrupt Register Synchronization */ +#define BITM_AGPT0_STA0_BUSY (_ADI_MSK_3(0x00000040,0x00000040U, uint16_t )) /* Timer Busy */ +#define BITM_AGPT0_STA0_CAP (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* Capture Event Pending */ +#define BITM_AGPT0_STA0_TMOUT (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Timeout Event Occurred */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_PWMCON0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_PWMCON0_IDLE 1 /* PWM Idle State */ +#define BITP_AGPT0_PWMCON0_MATCHEN 0 /* PWM Match Enabled */ +#define BITM_AGPT0_PWMCON0_IDLE (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* PWM Idle State */ +#define BITM_AGPT0_PWMCON0_MATCHEN (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* PWM Match Enabled */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_PWMMAT0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_PWMMAT0_MATCHVAL 0 /* PWM Match Value */ +#define BITM_AGPT0_PWMMAT0_MATCHVAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* PWM Match Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT0_INTEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT0_INTEN_INTEN 0 /* Interrupt Enable */ +#define BITM_AGPT0_INTEN_INTEN (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Interrupt Enable */ + + +/* ============================================================================================================================ + General Purpose Timer + ============================================================================================================================ */ + +/* ============================================================================================================================ + AGPT1 + ============================================================================================================================ */ +#define REG_AGPT1_LD1 0x00000E00 /* AGPT1 16-bit Load Value Register */ +#define REG_AGPT1_VAL1 0x00000E04 /* AGPT1 16-bit Timer Value Register */ +#define REG_AGPT1_CON1 0x00000E08 /* AGPT1 Control Register */ +#define REG_AGPT1_CLRI1 0x00000E0C /* AGPT1 Clear Interrupt Register */ +#define REG_AGPT1_CAP1 0x00000E10 /* AGPT1 Capture Register */ +#define REG_AGPT1_ALD1 0x00000E14 /* AGPT1 16-bit Load Value, Asynchronous Register */ +#define REG_AGPT1_AVAL1 0x00000E18 /* AGPT1 16-bit Timer Value, Asynchronous Register */ +#define REG_AGPT1_STA1 0x00000E1C /* AGPT1 Status Register */ +#define REG_AGPT1_PWMCON1 0x00000E20 /* AGPT1 PWM Control Register */ +#define REG_AGPT1_PWMMAT1 0x00000E24 /* AGPT1 PWM Match Value Register */ +#define REG_AGPT1_INTEN1 0x00000E28 /* AGPT1 Interrupt Enable */ + +/* ============================================================================================================================ + AGPT1 Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_LD1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_LD1_LOAD 0 /* Load Value */ +#define BITM_AGPT1_LD1_LOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Load Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_VAL1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_VAL1_VAL 0 /* Current Count */ +#define BITM_AGPT1_VAL1_VAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Current Count */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_CON1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_CON1_SYNCBYP 15 /* Synchronization Bypass */ +#define BITP_AGPT1_CON1_RSTEN 14 /* Counter and Prescale Reset Enable */ +#define BITP_AGPT1_CON1_EVENTEN 13 /* Event Select */ +#define BITP_AGPT1_CON1_EVENT 8 /* Event Select Range */ +#define BITP_AGPT1_CON1_RLD 7 /* Reload Control */ +#define BITP_AGPT1_CON1_CLK 5 /* Clock Select */ +#define BITP_AGPT1_CON1_ENABLE 4 /* Timer Enable */ +#define BITP_AGPT1_CON1_MOD 3 /* Timer Mode */ +#define BITP_AGPT1_CON1_UP 2 /* Count up */ +#define BITP_AGPT1_CON1_PRE 0 /* Prescaler */ +#define BITM_AGPT1_CON1_SYNCBYP (_ADI_MSK_3(0x00008000,0x00008000U, uint16_t )) /* Synchronization Bypass */ +#define BITM_AGPT1_CON1_RSTEN (_ADI_MSK_3(0x00004000,0x00004000U, uint16_t )) /* Counter and Prescale Reset Enable */ +#define BITM_AGPT1_CON1_EVENTEN (_ADI_MSK_3(0x00002000,0x00002000U, uint16_t )) /* Event Select */ +#define BITM_AGPT1_CON1_EVENT (_ADI_MSK_3(0x00001F00,0x00001F00U, uint16_t )) /* Event Select Range */ +#define BITM_AGPT1_CON1_RLD (_ADI_MSK_3(0x00000080,0x00000080U, uint16_t )) /* Reload Control */ +#define BITM_AGPT1_CON1_CLK (_ADI_MSK_3(0x00000060,0x00000060U, uint16_t )) /* Clock Select */ +#define BITM_AGPT1_CON1_ENABLE (_ADI_MSK_3(0x00000010,0x00000010U, uint16_t )) /* Timer Enable */ +#define BITM_AGPT1_CON1_MOD (_ADI_MSK_3(0x00000008,0x00000008U, uint16_t )) /* Timer Mode */ +#define BITM_AGPT1_CON1_UP (_ADI_MSK_3(0x00000004,0x00000004U, uint16_t )) /* Count up */ +#define BITM_AGPT1_CON1_PRE (_ADI_MSK_3(0x00000003,0x00000003U, uint16_t )) /* Prescaler */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_CLRI1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_CLRI1_CAP 1 /* Clear Captured Event Interrupt */ +#define BITP_AGPT1_CLRI1_TMOUT 0 /* Clear Timeout Interrupt */ +#define BITM_AGPT1_CLRI1_CAP (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* Clear Captured Event Interrupt */ +#define BITM_AGPT1_CLRI1_TMOUT (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Clear Timeout Interrupt */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_CAP1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_CAP1_CAP 0 /* 16-bit Captured Value. */ +#define BITM_AGPT1_CAP1_CAP (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* 16-bit Captured Value. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_ALD1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_ALD1_ALOAD 0 /* Load Value, Asynchronous */ +#define BITM_AGPT1_ALD1_ALOAD (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Load Value, Asynchronous */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_AVAL1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_AVAL1_AVAL 0 /* Counter Value */ +#define BITM_AGPT1_AVAL1_AVAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* Counter Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_STA1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_STA1_RSTCNT 8 /* Counter Reset Occurring */ +#define BITP_AGPT1_STA1_PDOK 7 /* Clear Interrupt Register Synchronization */ +#define BITP_AGPT1_STA1_BUSY 6 /* Timer Busy */ +#define BITP_AGPT1_STA1_CAP 1 /* Capture Event Pending */ +#define BITP_AGPT1_STA1_TMOUT 0 /* Timeout Event Occurred */ +#define BITM_AGPT1_STA1_RSTCNT (_ADI_MSK_3(0x00000100,0x00000100U, uint16_t )) /* Counter Reset Occurring */ +#define BITM_AGPT1_STA1_PDOK (_ADI_MSK_3(0x00000080,0x00000080U, uint16_t )) /* Clear Interrupt Register Synchronization */ +#define BITM_AGPT1_STA1_BUSY (_ADI_MSK_3(0x00000040,0x00000040U, uint16_t )) /* Timer Busy */ +#define BITM_AGPT1_STA1_CAP (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* Capture Event Pending */ +#define BITM_AGPT1_STA1_TMOUT (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Timeout Event Occurred */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_PWMCON1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_PWMCON1_IDLE 1 /* PWM Idle State. */ +#define BITP_AGPT1_PWMCON1_MATCHEN 0 /* PWM Match Enabled. */ +#define BITM_AGPT1_PWMCON1_IDLE (_ADI_MSK_3(0x00000002,0x00000002U, uint16_t )) /* PWM Idle State. */ +#define BITM_AGPT1_PWMCON1_MATCHEN (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* PWM Match Enabled. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_PWMMAT1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_PWMMAT1_MATCHVAL 0 /* PWM Match Value */ +#define BITM_AGPT1_PWMMAT1_MATCHVAL (_ADI_MSK_3(0x0000FFFF,0x0000FFFF, int16_t )) /* PWM Match Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AGPT1_INTEN1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AGPT1_INTEN1_INTEN 0 /* Interrupt Enable */ +#define BITM_AGPT1_INTEN1_INTEN (_ADI_MSK_3(0x00000001,0x00000001U, uint16_t )) /* Interrupt Enable */ + + +/* ============================================================================================================================ + CRC Accelerator + ============================================================================================================================ */ + +/* ============================================================================================================================ + AFECRC + ============================================================================================================================ */ +#define REG_AFECRC_CTL 0x00001000 /* AFECRC CRC Control Register */ +#define REG_AFECRC_IPDATA 0x00001004 /* AFECRC Data Input. */ +#define REG_AFECRC_RESULT 0x00001008 /* AFECRC CRC Residue */ +#define REG_AFECRC_POLY 0x0000100C /* AFECRC CRC Reduction Polynomial */ +#define REG_AFECRC_IPBITS 0x00001010 /* AFECRC Input Data Bits */ +#define REG_AFECRC_IPBYTE 0x00001014 /* AFECRC Input Data Byte */ +#define REG_AFECRC_CRC_SIG_COMP 0x00001020 /* AFECRC CRC Signature Compare Data Input. */ +#define REG_AFECRC_CRCINTEN 0x00001024 /* AFECRC CRC Error Interrupt Enable Bit */ +#define REG_AFECRC_INTSTA 0x00001028 /* AFECRC CRC Error Interrupt Status Bit */ + +/* ============================================================================================================================ + AFECRC Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_CTL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_CTL_REVID 28 /* Revision ID */ +#define BITP_AFECRC_CTL_MON_EN 9 /* Enable Apb32/Apb16 to Get Address/Data for CRC Calculation */ +#define BITP_AFECRC_CTL_W16SWP 4 /* Word16 Swap Enabled. */ +#define BITP_AFECRC_CTL_BYTMIRR 3 /* Byte Mirroring. */ +#define BITP_AFECRC_CTL_BITMIRR 2 /* Bit Mirroring. */ +#define BITP_AFECRC_CTL_LSBFIRST 1 /* LSB First Calculation Order */ +#define BITP_AFECRC_CTL_EN 0 /* CRC Peripheral Enable */ +#define BITM_AFECRC_CTL_REVID (_ADI_MSK_3(0xF0000000,0xF0000000UL, uint32_t )) /* Revision ID */ +#define BITM_AFECRC_CTL_MON_EN (_ADI_MSK_3(0x00000200,0x00000200UL, uint32_t )) /* Enable Apb32/Apb16 to Get Address/Data for CRC Calculation */ +#define BITM_AFECRC_CTL_W16SWP (_ADI_MSK_3(0x00000010,0x00000010UL, uint32_t )) /* Word16 Swap Enabled. */ +#define BITM_AFECRC_CTL_BYTMIRR (_ADI_MSK_3(0x00000008,0x00000008UL, uint32_t )) /* Byte Mirroring. */ +#define BITM_AFECRC_CTL_BITMIRR (_ADI_MSK_3(0x00000004,0x00000004UL, uint32_t )) /* Bit Mirroring. */ +#define BITM_AFECRC_CTL_LSBFIRST (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* LSB First Calculation Order */ +#define BITM_AFECRC_CTL_EN (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* CRC Peripheral Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_IPDATA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_IPDATA_VALUE 0 /* Data Input. */ +#define BITM_AFECRC_IPDATA_VALUE (_ADI_MSK_3(0xFFFFFFFF,0xFFFFFFFF, int32_t )) /* Data Input. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_RESULT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_RESULT_VALUE 0 /* CRC Residue */ +#define BITM_AFECRC_RESULT_VALUE (_ADI_MSK_3(0xFFFFFFFF,0xFFFFFFFF, int32_t )) /* CRC Residue */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_POLY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_POLY_VALUE 0 /* CRC Reduction Polynomial */ +#define BITM_AFECRC_POLY_VALUE (_ADI_MSK_3(0xFFFFFFFF,0xFFFFFFFFUL, uint32_t )) /* CRC Reduction Polynomial */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_IPBITS Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_IPBITS_DATA_BITS 0 /* Input Data Bits. */ +#define BITM_AFECRC_IPBITS_DATA_BITS (_ADI_MSK_3(0x000000FF,0x000000FFU, uint8_t )) /* Input Data Bits. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_IPBYTE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_IPBYTE_DATA_BYTE 0 /* Input Data Byte. */ +#define BITM_AFECRC_IPBYTE_DATA_BYTE (_ADI_MSK_3(0x000000FF,0x000000FFU, uint8_t )) /* Input Data Byte. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_CRC_SIG_COMP Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_CRC_SIG_COMP_CRC_SIG 0 /* CRC Signature Compare Data Input. */ +#define BITM_AFECRC_CRC_SIG_COMP_CRC_SIG (_ADI_MSK_3(0xFFFFFFFF,0xFFFFFFFFUL, uint32_t )) /* CRC Signature Compare Data Input. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_CRCINTEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_CRCINTEN_RESERVED_31_1 1 /* Reserved */ +#define BITP_AFECRC_CRCINTEN_CRC_ERR_EN 0 /* CRC Error Interrupt Enable Bit */ +#define BITM_AFECRC_CRCINTEN_RESERVED_31_1 (_ADI_MSK_3(0xFFFFFFFE,0xFFFFFFFEUL, uint32_t )) /* Reserved */ +#define BITM_AFECRC_CRCINTEN_CRC_ERR_EN (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* CRC Error Interrupt Enable Bit */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFECRC_INTSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFECRC_INTSTA_CRC_ERR_ST 0 /* CRC Error Interrupt Status Bit */ +#define BITM_AFECRC_INTSTA_CRC_ERR_ST (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* CRC Error Interrupt Status Bit */ + + +/* ============================================================================================================================ + + ============================================================================================================================ */ + +/* ============================================================================================================================ + AFE + ============================================================================================================================ */ +#define REG_AFE_AFECON_RESET 0x00080000 /* Reset Value for AFECON */ +#define REG_AFE_AFECON 0x00002000 /* AFE AFE Configuration */ +#define REG_AFE_SEQCON_RESET 0x00000002 /* Reset Value for SEQCON */ +#define REG_AFE_SEQCON 0x00002004 /* AFE Sequencer Configuration */ +#define REG_AFE_FIFOCON_RESET 0x00001010 /* Reset Value for FIFOCON */ +#define REG_AFE_FIFOCON 0x00002008 /* AFE FIFOs Configuration */ +#define REG_AFE_SWCON_RESET 0x0000FFFF /* Reset Value for SWCON */ +#define REG_AFE_SWCON 0x0000200C /* AFE Switch Matrix Configuration */ +#define REG_AFE_HSDACCON_RESET 0x0000001E /* Reset Value for HSDACCON */ +#define REG_AFE_HSDACCON 0x00002010 /* AFE High Speed DAC Configuration */ +#define REG_AFE_WGCON_RESET 0x00000030 /* Reset Value for WGCON */ +#define REG_AFE_WGCON 0x00002014 /* AFE Waveform Generator Configuration */ +#define REG_AFE_WGDCLEVEL1_RESET 0x00000000 /* Reset Value for WGDCLEVEL1 */ +#define REG_AFE_WGDCLEVEL1 0x00002018 /* AFE Waveform Generator - Trapezoid DC Level 1 */ +#define REG_AFE_WGDCLEVEL2_RESET 0x00000000 /* Reset Value for WGDCLEVEL2 */ +#define REG_AFE_WGDCLEVEL2 0x0000201C /* AFE Waveform Generator - Trapezoid DC Level 2 */ +#define REG_AFE_WGDELAY1_RESET 0x00000000 /* Reset Value for WGDELAY1 */ +#define REG_AFE_WGDELAY1 0x00002020 /* AFE Waveform Generator - Trapezoid Delay 1 Time */ +#define REG_AFE_WGSLOPE1_RESET 0x00000000 /* Reset Value for WGSLOPE1 */ +#define REG_AFE_WGSLOPE1 0x00002024 /* AFE Waveform Generator - Trapezoid Slope 1 Time */ +#define REG_AFE_WGDELAY2_RESET 0x00000000 /* Reset Value for WGDELAY2 */ +#define REG_AFE_WGDELAY2 0x00002028 /* AFE Waveform Generator - Trapezoid Delay 2 Time */ +#define REG_AFE_WGSLOPE2_RESET 0x00000000 /* Reset Value for WGSLOPE2 */ +#define REG_AFE_WGSLOPE2 0x0000202C /* AFE Waveform Generator - Trapezoid Slope 2 Time */ +#define REG_AFE_WGFCW_RESET 0x00000000 /* Reset Value for WGFCW */ +#define REG_AFE_WGFCW 0x00002030 /* AFE Waveform Generator - Sinusoid Frequency Control Word */ +#define REG_AFE_WGPHASE_RESET 0x00000000 /* Reset Value for WGPHASE */ +#define REG_AFE_WGPHASE 0x00002034 /* AFE Waveform Generator - Sinusoid Phase Offset */ +#define REG_AFE_WGOFFSET_RESET 0x00000000 /* Reset Value for WGOFFSET */ +#define REG_AFE_WGOFFSET 0x00002038 /* AFE Waveform Generator - Sinusoid Offset */ +#define REG_AFE_WGAMPLITUDE_RESET 0x00000000 /* Reset Value for WGAMPLITUDE */ +#define REG_AFE_WGAMPLITUDE 0x0000203C /* AFE Waveform Generator - Sinusoid Amplitude */ +#define REG_AFE_ADCFILTERCON_RESET 0x00000301 /* Reset Value for ADCFILTERCON */ +#define REG_AFE_ADCFILTERCON 0x00002044 /* AFE ADC Output Filters Configuration */ +#define REG_AFE_HSDACDAT_RESET 0x00000800 /* Reset Value for HSDACDAT */ +#define REG_AFE_HSDACDAT 0x00002048 /* AFE HS DAC Code */ +#define REG_AFE_LPREFBUFCON_RESET 0x00000000 /* Reset Value for LPREFBUFCON */ +#define REG_AFE_LPREFBUFCON 0x00002050 /* AFE LPREF_BUF_CON */ +#define REG_AFE_SYNCEXTDEVICE_RESET 0x00000000 /* Reset Value for SYNCEXTDEVICE */ +#define REG_AFE_SYNCEXTDEVICE 0x00002054 /* AFE SYNC External Devices */ +#define REG_AFE_SEQCRC_RESET 0x00000001 /* Reset Value for SEQCRC */ +#define REG_AFE_SEQCRC 0x00002060 /* AFE Sequencer CRC Value */ +#define REG_AFE_SEQCNT_RESET 0x00000000 /* Reset Value for SEQCNT */ +#define REG_AFE_SEQCNT 0x00002064 /* AFE Sequencer Command Count */ +#define REG_AFE_SEQTIMEOUT_RESET 0x00000000 /* Reset Value for SEQTIMEOUT */ +#define REG_AFE_SEQTIMEOUT 0x00002068 /* AFE Sequencer Timeout Counter */ +#define REG_AFE_DATAFIFORD_RESET 0x00000000 /* Reset Value for DATAFIFORD */ +#define REG_AFE_DATAFIFORD 0x0000206C /* AFE Data FIFO Read */ +#define REG_AFE_CMDFIFOWRITE_RESET 0x00000000 /* Reset Value for CMDFIFOWRITE */ +#define REG_AFE_CMDFIFOWRITE 0x00002070 /* AFE Command FIFO Write */ +#define REG_AFE_ADCDAT_RESET 0x00000000 /* Reset Value for ADCDAT */ +#define REG_AFE_ADCDAT 0x00002074 /* AFE ADC Raw Result */ +#define REG_AFE_DFTREAL_RESET 0x00000000 /* Reset Value for DFTREAL */ +#define REG_AFE_DFTREAL 0x00002078 /* AFE DFT Result, Real Part */ +#define REG_AFE_DFTIMAG_RESET 0x00000000 /* Reset Value for DFTIMAG */ +#define REG_AFE_DFTIMAG 0x0000207C /* AFE DFT Result, Imaginary Part */ +#define REG_AFE_SINC2DAT_RESET 0x00000000 /* Reset Value for SINC2DAT */ +#define REG_AFE_SINC2DAT 0x00002080 /* AFE Supply Rejection Filter Result */ +#define REG_AFE_TEMPSENSDAT_RESET 0x00000000 /* Reset Value for TEMPSENSDAT */ +#define REG_AFE_TEMPSENSDAT 0x00002084 /* AFE Temperature Sensor Result */ +#define REG_AFE_AFEGENINTSTA_RESET 0x00000000 /* Reset Value for AFEGENINTSTA */ +#define REG_AFE_AFEGENINTSTA 0x0000209C /* AFE Analog Generation Interrupt */ +#define REG_AFE_ADCMIN_RESET 0x00000000 /* Reset Value for ADCMIN */ +#define REG_AFE_ADCMIN 0x000020A8 /* AFE ADC Minimum Value Check */ +#define REG_AFE_ADCMINSM_RESET 0x00000000 /* Reset Value for ADCMINSM */ +#define REG_AFE_ADCMINSM 0x000020AC /* AFE ADCMIN Hysteresis Value */ +#define REG_AFE_ADCMAX_RESET 0x00000000 /* Reset Value for ADCMAX */ +#define REG_AFE_ADCMAX 0x000020B0 /* AFE ADC Maximum Value Check */ +#define REG_AFE_ADCMAXSMEN_RESET 0x00000000 /* Reset Value for ADCMAXSMEN */ +#define REG_AFE_ADCMAXSMEN 0x000020B4 /* AFE ADCMAX Hysteresis Value */ +#define REG_AFE_ADCDELTA_RESET 0x00000000 /* Reset Value for ADCDELTA */ +#define REG_AFE_ADCDELTA 0x000020B8 /* AFE ADC Delta Value */ +#define REG_AFE_HPOSCCON_RESET 0x00000024 /* Reset Value for HPOSCCON */ +#define REG_AFE_HPOSCCON 0x000020BC /* AFE HPOSC Configuration */ +#define REG_AFE_DFTCON_RESET 0x00000090 /* Reset Value for DFTCON */ +#define REG_AFE_DFTCON 0x000020D0 /* AFE AFE DSP Configuration */ +#define REG_AFE_LPTIASW1 0x000020E0 /* AFE ULPTIA Switch Configuration for Channel 1 */ +#define REG_AFE_LPTIASW0_RESET 0x00000000 /* Reset Value for LPTIASW0 */ +#define REG_AFE_LPTIACON1 0x000020E8 /* AFE ULPTIA Control Bits Channel 1 */ +#define REG_AFE_LPTIASW0 0x000020E4 /* AFE ULPTIA Switch Configuration for Channel 0 */ +#define REG_AFE_LPTIACON0_RESET 0x00000003 /* Reset Value for LPTIACON0 */ +#define REG_AFE_LPTIACON0 0x000020EC /* AFE ULPTIA Control Bits Channel 0 */ +#define REG_AFE_HSRTIACON_RESET 0x0000000F /* Reset Value for HSRTIACON */ +#define REG_AFE_HSRTIACON 0x000020F0 /* AFE High Power RTIA Configuration */ +#define REG_AFE_DE1RESCON 0x000020F4 /* AFE DE1 HSTIA Resistors Configuration */ +#define REG_AFE_DE0RESCON_RESET 0x000000FF /* Reset Value for DE0RESCON */ +#define REG_AFE_DE0RESCON 0x000020F8 /* AFE DE0 HSTIA Resistors Configuration */ +#define REG_AFE_HSTIACON_RESET 0x00000000 /* Reset Value for HSTIACON */ +#define REG_AFE_HSTIACON 0x000020FC /* AFE HSTIA Amplifier Configuration */ +#define REG_AFE_LPMODEKEY_RESET 0x00000000 /* Reset Value for LPMODEKEY */ +#define REG_AFE_LPMODEKEY 0x0000210C /* AFE LP Mode AFE Control Lock */ +#define REG_AFE_LPMODECLKSEL_RESET 0x00000000 /* Reset Value for LPMODECLKSEL */ +#define REG_AFE_LPMODECLKSEL 0x00002110 /* AFE LFSYSCLKEN */ +#define REG_AFE_LPMODECON_RESET 0x00000102 /* Reset Value for LPMODECON */ +#define REG_AFE_LPMODECON 0x00002114 /* AFE LPMODECON */ +#define REG_AFE_SEQSLPLOCK_RESET 0x00000000 /* Reset Value for SEQSLPLOCK */ +#define REG_AFE_SEQSLPLOCK 0x00002118 /* AFE Sequencer Sleep Control Lock */ +#define REG_AFE_SEQTRGSLP_RESET 0x00000000 /* Reset Value for SEQTRGSLP */ +#define REG_AFE_SEQTRGSLP 0x0000211C /* AFE Sequencer Trigger Sleep */ +#define REG_AFE_LPDACDAT0_RESET 0x00000000 /* Reset Value for LPDACDAT0 */ +#define REG_AFE_LPDACDAT0 0x00002120 /* AFE LPDAC Data-out */ +#define REG_AFE_LPDACSW0_RESET 0x00000000 /* Reset Value for LPDACSW0 */ +#define REG_AFE_LPDACSW0 0x00002124 /* AFE LPDAC0 Switch Control */ +#define REG_AFE_LPDACCON0_RESET 0x00000002 /* Reset Value for LPDACCON0 */ +#define REG_AFE_LPDACCON0 0x00002128 /* AFE LPDAC Control Bits */ +#define REG_AFE_LPDACDAT1 0x0000212C /* AFE Low Power DAC1 data register */ +#define REG_AFE_LPDACSW1 0x00002130 /* AFE Control register for switches to LPDAC1 */ +#define REG_AFE_LPDACCON1 0x00002134 /* AFE ULP_DACCON1 */ +#define REG_AFE_DSWFULLCON_RESET 0x00000000 /* Reset Value for DSWFULLCON */ +#define REG_AFE_DSWFULLCON 0x00002150 /* AFE Switch Matrix Full Configuration (D) */ +#define REG_AFE_NSWFULLCON_RESET 0x00000000 /* Reset Value for NSWFULLCON */ +#define REG_AFE_NSWFULLCON 0x00002154 /* AFE Switch Matrix Full Configuration (N) */ +#define REG_AFE_PSWFULLCON_RESET 0x00000000 /* Reset Value for PSWFULLCON */ +#define REG_AFE_PSWFULLCON 0x00002158 /* AFE Switch Matrix Full Configuration (P) */ +#define REG_AFE_TSWFULLCON_RESET 0x00000000 /* Reset Value for TSWFULLCON */ +#define REG_AFE_TSWFULLCON 0x0000215C /* AFE Switch Matrix Full Configuration (T) */ +#define REG_AFE_TEMPSENS_RESET 0x00000000 /* Reset Value for TEMPSENS */ +#define REG_AFE_TEMPSENS 0x00002174 /* AFE Temp Sensor Configuration */ +#define REG_AFE_BUFSENCON_RESET 0x00000037 /* Reset Value for BUFSENCON */ +#define REG_AFE_BUFSENCON 0x00002180 /* AFE HP and LP Buffer Control */ +#define REG_AFE_ADCCON_RESET 0x00000000 /* Reset Value for ADCCON */ +#define REG_AFE_ADCCON 0x000021A8 /* AFE ADC Configuration */ +#define REG_AFE_DSWSTA_RESET 0x00000000 /* Reset Value for DSWSTA */ +#define REG_AFE_DSWSTA 0x000021B0 /* AFE Switch Matrix Status (D) */ +#define REG_AFE_PSWSTA_RESET 0x00006000 /* Reset Value for PSWSTA */ +#define REG_AFE_PSWSTA 0x000021B4 /* AFE Switch Matrix Status (P) */ +#define REG_AFE_NSWSTA_RESET 0x00000C00 /* Reset Value for NSWSTA */ +#define REG_AFE_NSWSTA 0x000021B8 /* AFE Switch Matrix Status (N) */ +#define REG_AFE_TSWSTA_RESET 0x00000000 /* Reset Value for TSWSTA */ +#define REG_AFE_TSWSTA 0x000021BC /* AFE Switch Matrix Status (T) */ +#define REG_AFE_STATSVAR_RESET 0x00000000 /* Reset Value for STATSVAR */ +#define REG_AFE_STATSVAR 0x000021C0 /* AFE Variance Output */ +#define REG_AFE_STATSCON_RESET 0x00000000 /* Reset Value for STATSCON */ +#define REG_AFE_STATSCON 0x000021C4 /* AFE Statistics Control */ +#define REG_AFE_STATSMEAN_RESET 0x00000000 /* Reset Value for STATSMEAN */ +#define REG_AFE_STATSMEAN 0x000021C8 /* AFE Statistics Mean Output */ +#define REG_AFE_SEQ0INFO_RESET 0x00000000 /* Reset Value for SEQ0INFO */ +#define REG_AFE_SEQ0INFO 0x000021CC /* AFE Sequence 0 Info */ +#define REG_AFE_SEQ2INFO_RESET 0x00000000 /* Reset Value for SEQ2INFO */ +#define REG_AFE_SEQ2INFO 0x000021D0 /* AFE Sequence 2 Info */ +#define REG_AFE_CMDFIFOWADDR_RESET 0x00000000 /* Reset Value for CMDFIFOWADDR */ +#define REG_AFE_CMDFIFOWADDR 0x000021D4 /* AFE Command FIFO Write Address */ +#define REG_AFE_CMDDATACON_RESET 0x00000410 /* Reset Value for CMDDATACON */ +#define REG_AFE_CMDDATACON 0x000021D8 /* AFE Command Data Control */ +#define REG_AFE_DATAFIFOTHRES_RESET 0x00000000 /* Reset Value for DATAFIFOTHRES */ +#define REG_AFE_DATAFIFOTHRES 0x000021E0 /* AFE Data FIFO Threshold */ +#define REG_AFE_SEQ3INFO_RESET 0x00000000 /* Reset Value for SEQ3INFO */ +#define REG_AFE_SEQ3INFO 0x000021E4 /* AFE Sequence 3 Info */ +#define REG_AFE_SEQ1INFO_RESET 0x00000000 /* Reset Value for SEQ1INFO */ +#define REG_AFE_SEQ1INFO 0x000021E8 /* AFE Sequence 1 Info */ +#define REG_AFE_REPEATADCCNV_RESET 0x00000160 /* Reset Value for REPEATADCCNV */ +#define REG_AFE_REPEATADCCNV 0x000021F0 /* AFE REPEAT ADC Conversions */ +#define REG_AFE_FIFOCNTSTA_RESET 0x00000000 /* Reset Value for FIFOCNTSTA */ +#define REG_AFE_FIFOCNTSTA 0x00002200 /* AFE CMD and DATA FIFO INTERNAL DATA COUNT */ +#define REG_AFE_CALDATLOCK_RESET 0x00000000 /* Reset Value for CALDATLOCK */ +#define REG_AFE_CALDATLOCK 0x00002230 /* AFE Calibration Data Lock */ +#define REG_AFE_ADCOFFSETHSTIA_RESET 0x00000000 /* Reset Value for ADCOFFSETHSTIA */ +#define REG_AFE_ADCOFFSETHSTIA 0x00002234 /* AFE ADC Offset Calibration High Speed TIA Channel */ +#define REG_AFE_ADCGAINTEMPSENS0_RESET 0x00004000 /* Reset Value for ADCGAINTEMPSENS0 */ +#define REG_AFE_ADCGAINTEMPSENS0 0x00002238 /* AFE ADC Gain Calibration Temp Sensor Channel */ +#define REG_AFE_ADCOFFSETTEMPSENS0_RESET 0x00000000 /* Reset Value for ADCOFFSETTEMPSENS0 */ +#define REG_AFE_ADCOFFSETTEMPSENS0 0x0000223C /* AFE ADC Offset Calibration Temp Sensor Channel 0 */ +#define REG_AFE_ADCGAINGN1_RESET 0x00004000 /* Reset Value for ADCGAINGN1 */ +#define REG_AFE_ADCGAINGN1 0x00002240 /* AFE ADCPGAGN1: ADC Gain Calibration Auxiliary Input Channel */ +#define REG_AFE_ADCOFFSETGN1_RESET 0x00000000 /* Reset Value for ADCOFFSETGN1 */ +#define REG_AFE_ADCOFFSETGN1 0x00002244 /* AFE ADC Offset Calibration Auxiliary Channel (PGA Gain=1) */ +#define REG_AFE_DACGAIN_RESET 0x00000800 /* Reset Value for DACGAIN */ +#define REG_AFE_DACGAIN 0x00002260 /* AFE DACGAIN */ +#define REG_AFE_DACOFFSETATTEN_RESET 0x00000000 /* Reset Value for DACOFFSETATTEN */ +#define REG_AFE_DACOFFSETATTEN 0x00002264 /* AFE DAC Offset with Attenuator Enabled (LP Mode) */ +#define REG_AFE_DACOFFSET_RESET 0x00000000 /* Reset Value for DACOFFSET */ +#define REG_AFE_DACOFFSET 0x00002268 /* AFE DAC Offset with Attenuator Disabled (LP Mode) */ +#define REG_AFE_ADCGAINGN1P5_RESET 0x00004000 /* Reset Value for ADCGAINGN1P5 */ +#define REG_AFE_ADCGAINGN1P5 0x00002270 /* AFE ADC Gain Calibration Auxiliary Input Channel (PGA Gain=1.5) */ +#define REG_AFE_ADCGAINGN2_RESET 0x00004000 /* Reset Value for ADCGAINGN2 */ +#define REG_AFE_ADCGAINGN2 0x00002274 /* AFE ADC Gain Calibration Auxiliary Input Channel (PGA Gain=2) */ +#define REG_AFE_ADCGAINGN4_RESET 0x00004000 /* Reset Value for ADCGAINGN4 */ +#define REG_AFE_ADCGAINGN4 0x00002278 /* AFE ADC Gain Calibration Auxiliary Input Channel (PGA Gain=4) */ +#define REG_AFE_ADCPGAOFFSETCANCEL_RESET 0x00000000 /* Reset Value for ADCPGAOFFSETCANCEL */ +#define REG_AFE_ADCPGAOFFSETCANCEL 0x00002280 /* AFE ADC Offset Cancellation (Optional) */ +#define REG_AFE_ADCGNHSTIA_RESET 0x00004000 /* Reset Value for ADCGNHSTIA */ +#define REG_AFE_ADCGNHSTIA 0x00002284 /* AFE ADC Gain Calibration for HS TIA Channel */ +#define REG_AFE_ADCOFFSETLPTIA0_RESET 0x00000000 /* Reset Value for ADCOFFSETLPTIA0 */ +#define REG_AFE_ADCOFFSETLPTIA0 0x00002288 /* AFE ADC Offset Calibration ULP-TIA0 Channel */ +#define REG_AFE_ADCGNLPTIA0_RESET 0x00004000 /* Reset Value for ADCGNLPTIA0 */ +#define REG_AFE_ADCGNLPTIA0 0x0000228C /* AFE ADC GAIN Calibration for LP TIA0 Channel */ +#define REG_AFE_ADCPGAGN4OFCAL_RESET 0x00004000 /* Reset Value for ADCPGAGN4OFCAL */ +#define REG_AFE_ADCPGAGN4OFCAL 0x00002294 /* AFE ADC Gain Calibration with DC Cancellation(PGA G=4) */ +#define REG_AFE_ADCGAINGN9_RESET 0x00004000 /* Reset Value for ADCGAINGN9 */ +#define REG_AFE_ADCGAINGN9 0x00002298 /* AFE ADC Gain Calibration Auxiliary Input Channel (PGA Gain=9) */ +#define REG_AFE_ADCOFFSETEMPSENS1_RESET 0x00000000 /* Reset Value for ADCOFFSETEMPSENS1 */ +#define REG_AFE_ADCOFFSETEMPSENS1 0x000022A8 /* AFE ADC Offset Calibration Temp Sensor Channel 1 */ +#define REG_AFE_ADCGAINDIOTEMPSENS_RESET 0x00004000 /* Reset Value for ADCGAINDIOTEMPSENS */ +#define REG_AFE_ADCGAINDIOTEMPSENS 0x000022AC /* AFE ADC Gain Calibration Diode Temperature Sensor Channel */ +#define REG_AFE_DACOFFSETATTENHP_RESET 0x00000000 /* Reset Value for DACOFFSETATTENHP */ +#define REG_AFE_DACOFFSETATTENHP 0x000022B8 /* AFE DAC Offset with Attenuator Enabled (HP Mode) */ +#define REG_AFE_DACOFFSETHP_RESET 0x00000000 /* Reset Value for DACOFFSETHP */ +#define REG_AFE_DACOFFSETHP 0x000022BC /* AFE DAC Offset with Attenuator Disabled (HP Mode) */ +#define REG_AFE_ADCGNLPTIA1_RESET 0x00004000 /* Reset Value for ADCGNLPTIA1 */ +#define REG_AFE_ADCOFFSETLPTIA1 0x000022C0 /* AFE ADC Offset Calibration ULP-TIA0 Channel */ +#define REG_AFE_ADCGNLPTIA1 0x000022C4 /* AFE ADC GAIN Calibration for LP TIA1 Channel */ +#define REG_AFE_ADCOFFSETGN2_RESET 0x00000000 /* Reset Value for ADCOFFSETGN2 */ +#define REG_AFE_ADCOFFSETGN2 0x000022C8 /* AFE Offset Calibration Auxiliary Channel (PGA Gain =2) */ +#define REG_AFE_ADCOFFSETGN1P5_RESET 0x00000000 /* Reset Value for ADCOFFSETGN1P5 */ +#define REG_AFE_ADCOFFSETGN1P5 0x000022CC /* AFE Offset Calibration Auxiliary Channel (PGA Gain =1.5) */ +#define REG_AFE_ADCOFFSETGN9_RESET 0x00000000 /* Reset Value for ADCOFFSETGN9 */ +#define REG_AFE_ADCOFFSETGN9 0x000022D0 /* AFE Offset Calibration Auxiliary Channel (PGA Gain =9) */ +#define REG_AFE_ADCOFFSETGN4_RESET 0x00000000 /* Reset Value for ADCOFFSETGN4 */ +#define REG_AFE_ADCOFFSETGN4 0x000022D4 /* AFE Offset Calibration Auxiliary Channel (PGA Gain =4) */ +#define REG_AFE_PMBW_RESET 0x00088800 /* Reset Value for PMBW */ +#define REG_AFE_PMBW 0x000022F0 /* AFE Power Mode Configuration */ +#define REG_AFE_SWMUX_RESET 0x00000000 /* Reset Value for SWMUX */ +#define REG_AFE_SWMUX 0x0000235C /* AFE Switch Mux for ECG */ +#define REG_AFE_AFE_TEMPSEN_DIO_RESET 0x00020000 /* Reset Value for AFE_TEMPSEN_DIO */ +#define REG_AFE_AFE_TEMPSEN_DIO 0x00002374 /* AFE AFE_TEMPSEN_DIO */ +#define REG_AFE_ADCBUFCON_RESET 0x005F3D00 /* Reset Value for ADCBUFCON */ +#define REG_AFE_ADCBUFCON 0x0000238C /* AFE Configure ADC Input Buffer */ + +/* ============================================================================================================================ + AFE Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_AFECON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_AFECON_DACBUFEN 21 /* Enable DC DAC Buffer */ +#define BITP_AFE_AFECON_DACREFEN 20 /* High Speed DAC Reference Enable */ +#define BITP_AFE_AFECON_ALDOILIMITEN 19 /* Analog LDO Current Limiting Enable */ +#define BITP_AFE_AFECON_SINC2EN 16 /* ADC Output 50/60Hz Filter Enable */ +#define BITP_AFE_AFECON_DFTEN 15 /* DFT Hardware Accelerator Enable */ +#define BITP_AFE_AFECON_WAVEGENEN 14 /* Waveform Generator Enable */ +#define BITP_AFE_AFECON_TEMPCONVEN 13 /* ADC Temp Sensor Convert Enable */ +#define BITP_AFE_AFECON_TEMPSENSEN 12 /* ADC Temperature Sensor Channel Enable */ +#define BITP_AFE_AFECON_TIAEN 11 /* High Power TIA Enable */ +#define BITP_AFE_AFECON_INAMPEN 10 /* Enable Excitation Amplifier */ +#define BITP_AFE_AFECON_EXBUFEN 9 /* Enable Excitation Buffer */ +#define BITP_AFE_AFECON_ADCCONVEN 8 /* ADC Conversion Start Enable */ +#define BITP_AFE_AFECON_ADCEN 7 /* ADC Power Enable */ +#define BITP_AFE_AFECON_DACEN 6 /* High Power DAC Enable */ +#define BITP_AFE_AFECON_HPREFDIS 5 /* Disable High Power Reference */ +#define BITM_AFE_AFECON_DACBUFEN 0x00200000 /* Enable DC DAC Buffer */ +#define BITM_AFE_AFECON_DACREFEN 0x00100000 /* High Speed DAC Reference Enable */ +#define BITM_AFE_AFECON_ALDOILIMITEN 0x00080000 /* Analog LDO Current Limiting Enable */ +#define BITM_AFE_AFECON_SINC2EN 0x00010000 /* ADC Output 50/60Hz Filter Enable */ +#define BITM_AFE_AFECON_DFTEN 0x00008000 /* DFT Hardware Accelerator Enable */ +#define BITM_AFE_AFECON_WAVEGENEN 0x00004000 /* Waveform Generator Enable */ +#define BITM_AFE_AFECON_TEMPCONVEN 0x00002000 /* ADC Temp Sensor Convert Enable */ +#define BITM_AFE_AFECON_TEMPSENSEN 0x00001000 /* ADC Temperature Sensor Channel Enable */ +#define BITM_AFE_AFECON_TIAEN 0x00000800 /* High Power TIA Enable */ +#define BITM_AFE_AFECON_INAMPEN 0x00000400 /* Enable Excitation Amplifier */ +#define BITM_AFE_AFECON_EXBUFEN 0x00000200 /* Enable Excitation Buffer */ +#define BITM_AFE_AFECON_ADCCONVEN 0x00000100 /* ADC Conversion Start Enable */ +#define BITM_AFE_AFECON_ADCEN 0x00000080 /* ADC Power Enable */ +#define BITM_AFE_AFECON_DACEN 0x00000040 /* High Power DAC Enable */ +#define BITM_AFE_AFECON_HPREFDIS 0x00000020 /* Disable High Power Reference */ +#define ENUM_AFE_AFECON_OFF 0x00000000 /* DACEN: High Power DAC Disabled */ +#define ENUM_AFE_AFECON_ON 0x00000040 /* DACEN: High Power DAC Enabled */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQCON_SEQWRTMR 8 /* Timer for Sequencer Write Commands */ +#define BITP_AFE_SEQCON_SEQHALT 4 /* Halt Seq */ +#define BITP_AFE_SEQCON_SEQHALTFIFOEMPTY 1 /* Halt Sequencer If Empty */ +#define BITP_AFE_SEQCON_SEQEN 0 /* Enable Sequencer */ +#define BITM_AFE_SEQCON_SEQWRTMR 0x0000FF00 /* Timer for Sequencer Write Commands */ +#define BITM_AFE_SEQCON_SEQHALT 0x00000010 /* Halt Seq */ +#define BITM_AFE_SEQCON_SEQHALTFIFOEMPTY 0x00000002 /* Halt Sequencer If Empty */ +#define BITM_AFE_SEQCON_SEQEN 0x00000001 /* Enable Sequencer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_FIFOCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_FIFOCON_DATAFIFOSRCSEL 13 /* Selects the Source for the Data FIFO. */ +#define BITP_AFE_FIFOCON_DATAFIFOEN 11 /* Data FIFO Enable. */ +#define BITM_AFE_FIFOCON_DATAFIFOSRCSEL 0x0000E000 /* Selects the Source for the Data FIFO. */ +#define BITM_AFE_FIFOCON_DATAFIFOEN 0x00000800 /* Data FIFO Enable. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SWCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SWCON_T11CON 19 /* Control of T[11] */ +#define BITP_AFE_SWCON_T10CON 18 /* Control of T[10] */ +#define BITP_AFE_SWCON_T9CON 17 /* Control of T[9] */ +#define BITP_AFE_SWCON_SWSOURCESEL 16 /* Switch Control Select */ +#define BITP_AFE_SWCON_TMUXCON 12 /* Control of T Switch MUX. */ +#define BITP_AFE_SWCON_NMUXCON 8 /* Control of N Switch MUX */ +#define BITP_AFE_SWCON_PMUXCON 4 /* Control of P Switch MUX */ +#define BITP_AFE_SWCON_DMUXCON 0 /* Control of D Switch MUX */ +#define BITM_AFE_SWCON_T11CON 0x00080000 /* Control of T[11] */ +#define BITM_AFE_SWCON_T10CON 0x00040000 /* Control of T[10] */ +#define BITM_AFE_SWCON_T9CON 0x00020000 /* Control of T[9] */ +#define BITM_AFE_SWCON_SWSOURCESEL 0x00010000 /* Switch Control Select */ +#define BITM_AFE_SWCON_TMUXCON 0x0000F000 /* Control of T Switch MUX. */ +#define BITM_AFE_SWCON_NMUXCON 0x00000F00 /* Control of N Switch MUX */ +#define BITM_AFE_SWCON_PMUXCON 0x000000F0 /* Control of P Switch MUX */ +#define BITM_AFE_SWCON_DMUXCON 0x0000000F /* Control of D Switch MUX */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_HSDACCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_HSDACCON_INAMPGNMDE 12 /* Excitation Amplifier Gain Control */ +#define BITP_AFE_HSDACCON_RATE 1 /* DAC Update Rate */ +#define BITP_AFE_HSDACCON_ATTENEN 0 /* PGA Stage Gain Attenuation */ +#define BITM_AFE_HSDACCON_INAMPGNMDE 0x00001000 /* Excitation Amplifier Gain Control */ +#define BITM_AFE_HSDACCON_RATE 0x000001FE /* DAC Update Rate */ +#define BITM_AFE_HSDACCON_ATTENEN 0x00000001 /* PGA Stage Gain Attenuation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGCON_DACGAINCAL 5 /* Bypass DAC Gain */ +#define BITP_AFE_WGCON_DACOFFSETCAL 4 /* Bypass DAC Offset */ +#define BITP_AFE_WGCON_TYPESEL 1 /* Selects the Type of Waveform */ +#define BITP_AFE_WGCON_TRAPRSTEN 0 /* Resets the Trapezoid Waveform Generator */ +#define BITM_AFE_WGCON_DACGAINCAL 0x00000020 /* Bypass DAC Gain */ +#define BITM_AFE_WGCON_DACOFFSETCAL 0x00000010 /* Bypass DAC Offset */ +#define BITM_AFE_WGCON_TYPESEL 0x00000006 /* Selects the Type of Waveform */ +#define BITM_AFE_WGCON_TRAPRSTEN 0x00000001 /* Resets the Trapezoid Waveform Generator */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGDCLEVEL1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGDCLEVEL1_TRAPDCLEVEL1 0 /* DC Level 1 Value for Trapezoid Waveform Generation */ +#define BITM_AFE_WGDCLEVEL1_TRAPDCLEVEL1 0x00000FFF /* DC Level 1 Value for Trapezoid Waveform Generation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGDCLEVEL2 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGDCLEVEL2_TRAPDCLEVEL2 0 /* DC Level 2 Value for Trapezoid Waveform Generation */ +#define BITM_AFE_WGDCLEVEL2_TRAPDCLEVEL2 0x00000FFF /* DC Level 2 Value for Trapezoid Waveform Generation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGDELAY1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGDELAY1_DELAY1 0 /* Delay 1 Value for Trapezoid Waveform Generation */ +#define BITM_AFE_WGDELAY1_DELAY1 0x000FFFFF /* Delay 1 Value for Trapezoid Waveform Generation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGSLOPE1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGSLOPE1_SLOPE1 0 /* Slope 1 Value for Trapezoid Waveform Generation */ +#define BITM_AFE_WGSLOPE1_SLOPE1 0x000FFFFF /* Slope 1 Value for Trapezoid Waveform Generation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGDELAY2 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGDELAY2_DELAY2 0 /* Delay 2 Value for Trapezoid Waveform Generation */ +#define BITM_AFE_WGDELAY2_DELAY2 0x000FFFFF /* Delay 2 Value for Trapezoid Waveform Generation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGSLOPE2 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGSLOPE2_SLOPE2 0 /* Slope 2 Value for Trapezoid Waveform Generation. */ +#define BITM_AFE_WGSLOPE2_SLOPE2 0x000FFFFF /* Slope 2 Value for Trapezoid Waveform Generation. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGFCW Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGFCW_SINEFCW 0 /* Sinusoid Generator Frequency Control Word */ +#define BITM_AFE_WGFCW_SINEFCW 0x00FFFFFF /* Sinusoid Generator Frequency Control Word */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGPHASE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGPHASE_SINEOFFSET 0 /* Sinusoid Phase Offset */ +#define BITM_AFE_WGPHASE_SINEOFFSET 0x000FFFFF /* Sinusoid Phase Offset */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGOFFSET Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGOFFSET_SINEOFFSET 0 /* Sinusoid Offset */ +#define BITM_AFE_WGOFFSET_SINEOFFSET 0x00000FFF /* Sinusoid Offset */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_WGAMPLITUDE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_WGAMPLITUDE_SINEAMPLITUDE 0 /* Sinusoid Amplitude */ +#define BITM_AFE_WGAMPLITUDE_SINEAMPLITUDE 0x000007FF /* Sinusoid Amplitude */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCFILTERCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCFILTERCON_AVRGNUM 14 /* Number of Samples Averaged */ +#define BITP_AFE_ADCFILTERCON_SINC3OSR 12 /* SINC3 OSR */ +#define BITP_AFE_ADCFILTERCON_SINC2OSR 8 /* SINC2 OSR */ +#define BITP_AFE_ADCFILTERCON_AVRGEN 7 /* Average Function Enable */ +#define BITP_AFE_ADCFILTERCON_SINC3BYP 6 /* SINC3 Filter Bypass */ +#define BITP_AFE_ADCFILTERCON_LPFBYPEN 4 /* 50/60Hz Low Pass Filter */ +#define BITP_AFE_ADCFILTERCON_ADCCLK 0 /* ADC Data Rate */ +#define BITM_AFE_ADCFILTERCON_AVRGNUM 0x0000C000 /* Number of Samples Averaged */ +#define BITM_AFE_ADCFILTERCON_SINC3OSR 0x00003000 /* SINC3 OSR */ +#define BITM_AFE_ADCFILTERCON_SINC2OSR 0x00000F00 /* SINC2 OSR */ +#define BITM_AFE_ADCFILTERCON_AVRGEN 0x00000080 /* Average Function Enable */ +#define BITM_AFE_ADCFILTERCON_SINC3BYP 0x00000040 /* SINC3 Filter Bypass */ +#define BITM_AFE_ADCFILTERCON_LPFBYPEN 0x00000010 /* 50/60Hz Low Pass Filter */ +#define BITM_AFE_ADCFILTERCON_ADCCLK 0x00000001 /* ADC Data Rate */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_HSDACDAT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_HSDACDAT_DACDAT 0 /* DAC Code */ +#define BITM_AFE_HSDACDAT_DACDAT 0x00000FFF /* DAC Code */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPREFBUFCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPREFBUFCON_BOOSTCURRENT 2 /* Set: Drive 2 Dac ;Unset Drive 1 Dac, and Save Power */ +#define BITP_AFE_LPREFBUFCON_LPBUF2P5DIS 1 /* Low Power Bandgap's Output Buffer */ +#define BITP_AFE_LPREFBUFCON_LPREFDIS 0 /* Set This Bit Will Power Down Low Power Bandgap */ +#define BITM_AFE_LPREFBUFCON_BOOSTCURRENT 0x00000004 /* Set: Drive 2 Dac ;Unset Drive 1 Dac, and Save Power */ +#define BITM_AFE_LPREFBUFCON_LPBUF2P5DIS 0x00000002 /* Low Power Bandgap's Output Buffer */ +#define BITM_AFE_LPREFBUFCON_LPREFDIS 0x00000001 /* Set This Bit Will Power Down Low Power Bandgap */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SYNCEXTDEVICE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SYNCEXTDEVICE_SYNC 0 /* As Output Data of GPIO */ +#define BITM_AFE_SYNCEXTDEVICE_SYNC 0x000000FF /* As Output Data of GPIO */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQCRC Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQCRC_CRC 0 /* Sequencer Command CRC Value. */ +#define BITM_AFE_SEQCRC_CRC 0x000000FF /* Sequencer Command CRC Value. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQCNT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQCNT_COUNT 0 /* Sequencer Command Count */ +#define BITM_AFE_SEQCNT_COUNT 0x0000FFFF /* Sequencer Command Count */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQTIMEOUT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQTIMEOUT_TIMEOUT 0 /* Current Value of the Sequencer Timeout Counter. */ +#define BITM_AFE_SEQTIMEOUT_TIMEOUT 0x3FFFFFFF /* Current Value of the Sequencer Timeout Counter. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DATAFIFORD Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DATAFIFORD_DATAFIFOOUT 0 /* Data FIFO Read */ +#define BITM_AFE_DATAFIFORD_DATAFIFOOUT 0x0000FFFF /* Data FIFO Read */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_CMDFIFOWRITE Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_CMDFIFOWRITE_CMDFIFOIN 0 /* Command FIFO Write. */ +#define BITM_AFE_CMDFIFOWRITE_CMDFIFOIN 0xFFFFFFFF /* Command FIFO Write. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCDAT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCDAT_DATA 0 /* ADC Result */ +#define BITM_AFE_ADCDAT_DATA 0x0000FFFF /* ADC Result */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DFTREAL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DFTREAL_DATA 0 /* DFT Real */ +#define BITM_AFE_DFTREAL_DATA 0x0003FFFF /* DFT Real */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DFTIMAG Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DFTIMAG_DATA 0 /* DFT Imaginary */ +#define BITM_AFE_DFTIMAG_DATA 0x0003FFFF /* DFT Imaginary */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SINC2DAT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SINC2DAT_DATA 0 /* LPF Result */ +#define BITM_AFE_SINC2DAT_DATA 0x0000FFFF /* LPF Result */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_TEMPSENSDAT Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_TEMPSENSDAT_DATA 0 /* Temp Sensor */ +#define BITM_AFE_TEMPSENSDAT_DATA 0x0000FFFF /* Temp Sensor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_AFEGENINTSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_AFEGENINTSTA_CUSTOMIRQ3 3 /* Custom IRQ 3. */ +#define BITP_AFE_AFEGENINTSTA_CUSTOMIRQ2 2 /* Custom IRQ 2 */ +#define BITP_AFE_AFEGENINTSTA_CUSTOMIRQ1 1 /* Custom IRQ 1. */ +#define BITP_AFE_AFEGENINTSTA_CUSTOMIRQ0 0 /* Custom IRQ 0 */ +#define BITM_AFE_AFEGENINTSTA_CUSTOMIRQ3 0x00000008 /* Custom IRQ 3. */ +#define BITM_AFE_AFEGENINTSTA_CUSTOMIRQ2 0x00000004 /* Custom IRQ 2 */ +#define BITM_AFE_AFEGENINTSTA_CUSTOMIRQ1 0x00000002 /* Custom IRQ 1. */ +#define BITM_AFE_AFEGENINTSTA_CUSTOMIRQ0 0x00000001 /* Custom IRQ 0 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCMIN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCMIN_MINVAL 0 /* ADC Minimum Value Threshold */ +#define BITM_AFE_ADCMIN_MINVAL 0x0000FFFF /* ADC Minimum Value Threshold */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCMINSM Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCMINSM_MINCLRVAL 0 /* ADCMIN Hysteresis Value */ +#define BITM_AFE_ADCMINSM_MINCLRVAL 0x0000FFFF /* ADCMIN Hysteresis Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCMAX Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCMAX_MAXVAL 0 /* ADC Max Threshold */ +#define BITM_AFE_ADCMAX_MAXVAL 0x0000FFFF /* ADC Max Threshold */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCMAXSMEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCMAXSMEN_MAXSWEN 0 /* ADCMAX Hysteresis Value */ +#define BITM_AFE_ADCMAXSMEN_MAXSWEN 0x0000FFFF /* ADCMAX Hysteresis Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCDELTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCDELTA_DELTAVAL 0 /* ADCDAT Code Differences Limit Option */ +#define BITM_AFE_ADCDELTA_DELTAVAL 0x0000FFFF /* ADCDAT Code Differences Limit Option */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_HPOSCCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_HPOSCCON_CLK32MHZEN 2 /* 16M/32M Output Selector Signal. */ +#define BITM_AFE_HPOSCCON_CLK32MHZEN 0x00000004 /* 16M/32M Output Selector Signal. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DFTCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DFTCON_DFTINSEL 20 /* DFT Input Select */ +#define BITP_AFE_DFTCON_DFTNUM 4 /* ADC Samples Used */ +#define BITP_AFE_DFTCON_HANNINGEN 0 /* Hanning Window Enable */ +#define BITM_AFE_DFTCON_DFTINSEL 0x00300000 /* DFT Input Select */ +#define BITM_AFE_DFTCON_DFTNUM 0x000000F0 /* ADC Samples Used */ +#define BITM_AFE_DFTCON_HANNINGEN 0x00000001 /* Hanning Window Enable */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPTIASW1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPTIASW1_TIABIASSEL 13 /* TIA SW13 Control. Active High */ +#define BITP_AFE_LPTIASW1_PABIASSEL 12 /* TIA SW12 Control. Active High */ +#define BITP_AFE_LPTIASW1_TIASWCON 0 /* TIA SW[11:0] Control */ +#define BITM_AFE_LPTIASW1_TIABIASSEL (_ADI_MSK_3(0x00002000,0x00002000UL, uint32_t )) /* TIA SW13 Control. Active High */ +#define BITM_AFE_LPTIASW1_PABIASSEL (_ADI_MSK_3(0x00001000,0x00001000UL, uint32_t )) /* TIA SW12 Control. Active High */ +#define BITM_AFE_LPTIASW1_TIASWCON (_ADI_MSK_3(0x00000FFF,0x00000FFFUL, uint32_t )) /* TIA SW[11:0] Control */ +#define ENUM_AFE_LPTIASW1_CAPA_LP (_ADI_MSK_3(0x00000014,0x00000014UL, uint32_t )) /* TIASWCON: CAPA test with LP TIA */ +#define ENUM_AFE_LPTIASW1_NORM (_ADI_MSK_3(0x0000002C,0x0000002CUL, uint32_t )) /* TIASWCON: Normal work mode */ +#define ENUM_AFE_LPTIASW1_DIO (_ADI_MSK_3(0x0000002D,0x0000002DUL, uint32_t )) /* TIASWCON: Normal work mode with back-back diode enabled. */ +#define ENUM_AFE_LPTIASW1_SHORTSW (_ADI_MSK_3(0x0000002E,0x0000002EUL, uint32_t )) /* TIASWCON: Work mode with short switch protection */ +#define ENUM_AFE_LPTIASW1_LOWNOISE (_ADI_MSK_3(0x0000006C,0x0000006CUL, uint32_t )) /* TIASWCON: Work mode, vzero-vbias=0. */ +#define ENUM_AFE_LPTIASW1_CAPA_RAMP_H (_ADI_MSK_3(0x00000094,0x00000094UL, uint32_t )) /* TIASWCON: CAPA test or Ramp test with HP TIA */ +#define ENUM_AFE_LPTIASW1_BUFDIS (_ADI_MSK_3(0x00000180,0x00000180UL, uint32_t )) /* TIASWCON: Set PA/TIA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW1_BUFEN (_ADI_MSK_3(0x000001A4,0x000001A4UL, uint32_t )) /* TIASWCON: Set PA/TIA as unity gain buffer. Connect amp's output to CE1 & RC11. */ +#define ENUM_AFE_LPTIASW1_TWOLEAD (_ADI_MSK_3(0x0000042C,0x0000042CUL, uint32_t )) /* TIASWCON: Two lead sensor, set PA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW1_BUFEN2 (_ADI_MSK_3(0x000004A4,0x000004A4UL, uint32_t )) /* TIASWCON: Set PA/TIA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW1_SESHORTRE (_ADI_MSK_3(0x00000800,0x00000800UL, uint32_t )) /* TIASWCON: Close SW11 - Short SE1 to RE1, */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPTIASW0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPTIASW0_RECAL 15 /* TIA SW15 Control. Active High */ +#define BITP_AFE_LPTIASW0_VZEROSHARE 14 /* TIA SW14 Control. Active High */ +#define BITP_AFE_LPTIASW0_TIABIASSEL 13 /* TIA SW13 Control. Active High */ +#define BITP_AFE_LPTIASW0_PABIASSEL 12 /* TIA SW12 Control. Active High */ +#define BITP_AFE_LPTIASW0_TIASWCON 0 /* TIA SW[11:0] Control */ +#define BITM_AFE_LPTIASW0_RECAL 0x00008000 /* TIA SW15 Control. Active High */ +#define BITM_AFE_LPTIASW0_VZEROSHARE 0x00004000 /* TIA SW14 Control. Active High */ +#define BITM_AFE_LPTIASW0_TIABIASSEL 0x00002000 /* TIA SW13 Control. Active High */ +#define BITM_AFE_LPTIASW0_PABIASSEL 0x00001000 /* TIA SW12 Control. Active High */ +#define BITM_AFE_LPTIASW0_TIASWCON 0x00000FFF /* TIA SW[11:0] Control */ +#define ENUM_AFE_LPTIASW0_11 0x00000014 /* TIASWCON: CAPA test with LP TIA */ +#define ENUM_AFE_LPTIASW0_NORM 0x0000002C /* TIASWCON: Normal work mode */ +#define ENUM_AFE_LPTIASW0_DIO 0x0000002D /* TIASWCON: Normal work mode with back-back diode enabled. */ +#define ENUM_AFE_LPTIASW0_SHORTSW 0x0000002E /* TIASWCON: Work mode with short switch protection */ +#define ENUM_AFE_LPTIASW0_LOWNOISE 0x0000006C /* TIASWCON: Work mode, vzero-vbias=0. */ +#define ENUM_AFE_LPTIASW0_1 0x00000094 /* TIASWCON: CAPA test or Ramp test with HP TIA */ +#define ENUM_AFE_LPTIASW0_BUFDIS 0x00000180 /* TIASWCON: Set PA/TIA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW0_BUFEN 0x000001A4 /* TIASWCON: Set PA/TIA as unity gain buffer. Connect amp's output to CE0 & RC01. */ +#define ENUM_AFE_LPTIASW0_TWOLEAD 0x0000042C /* TIASWCON: Two lead sensor, set PA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW0_BUFEN2 0x000004A4 /* TIASWCON: Set PA/TIA as unity gain buffer. */ +#define ENUM_AFE_LPTIASW0_SESHORTRE 0x00000800 /* TIASWCON: Close SW11 - Short SE0 to RE0. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPTIACON1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPTIACON1_CHOPEN 16 /* Chopping Enable */ +#define BITP_AFE_LPTIACON1_TIARF 13 /* Set LPF Resistor */ +#define BITP_AFE_LPTIACON1_TIARL 10 /* Set RLOAD */ +#define BITP_AFE_LPTIACON1_TIAGAIN 5 /* Set RTIA Gain Resistor */ +#define BITP_AFE_LPTIACON1_IBOOST 3 /* Current Boost Control */ +#define BITP_AFE_LPTIACON1_HALFPWR 2 /* Half Power Mode Select */ +#define BITP_AFE_LPTIACON1_PAPDEN 1 /* PA Power Down */ +#define BITP_AFE_LPTIACON1_TIAPDEN 0 /* TIA Power Down */ +#define BITM_AFE_LPTIACON1_CHOPEN (_ADI_MSK_3(0x00030000,0x00030000UL, uint32_t )) /* Chopping Enable */ +#define BITM_AFE_LPTIACON1_TIARF (_ADI_MSK_3(0x0000E000,0x0000E000UL, uint32_t )) /* Set LPF Resistor */ +#define BITM_AFE_LPTIACON1_TIARL (_ADI_MSK_3(0x00001C00,0x00001C00UL, uint32_t )) /* Set RLOAD */ +#define BITM_AFE_LPTIACON1_TIAGAIN (_ADI_MSK_3(0x000003E0,0x000003E0UL, uint32_t )) /* Set RTIA Gain Resistor */ +#define BITM_AFE_LPTIACON1_IBOOST (_ADI_MSK_3(0x00000018,0x00000018UL, uint32_t )) /* Current Boost Control */ +#define BITM_AFE_LPTIACON1_HALFPWR (_ADI_MSK_3(0x00000004,0x00000004UL, uint32_t )) /* Half Power Mode Select */ +#define BITM_AFE_LPTIACON1_PAPDEN (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* PA Power Down */ +#define BITM_AFE_LPTIACON1_TIAPDEN (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* TIA Power Down */ +#define ENUM_AFE_LPTIACON1_DISCONRF (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* TIARF: Disconnect TIA output from LPF pin */ +#define ENUM_AFE_LPTIACON1_BYPRF (_ADI_MSK_3(0x00002000,0x00002000UL, uint32_t )) /* TIARF: Bypass resistor */ +#define ENUM_AFE_LPTIACON1_RF20K (_ADI_MSK_3(0x00004000,0x00004000UL, uint32_t )) /* TIARF: 20k Ohm */ +#define ENUM_AFE_LPTIACON1_RF100K (_ADI_MSK_3(0x00006000,0x00006000UL, uint32_t )) /* TIARF: 100k Ohm */ +#define ENUM_AFE_LPTIACON1_RF200K (_ADI_MSK_3(0x00008000,0x00008000UL, uint32_t )) /* TIARF: 200k Ohm */ +#define ENUM_AFE_LPTIACON1_RF400K (_ADI_MSK_3(0x0000A000,0x0000A000UL, uint32_t )) /* TIARF: 400k Ohm */ +#define ENUM_AFE_LPTIACON1_RF600K (_ADI_MSK_3(0x0000C000,0x0000C000UL, uint32_t )) /* TIARF: 600k Ohm */ +#define ENUM_AFE_LPTIACON1_RF1MOHM (_ADI_MSK_3(0x0000E000,0x0000E000UL, uint32_t )) /* TIARF: 1Meg Ohm */ +#define ENUM_AFE_LPTIACON1_RL0 (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* TIARL: 0 ohm */ +#define ENUM_AFE_LPTIACON1_RL10 (_ADI_MSK_3(0x00000400,0x00000400UL, uint32_t )) /* TIARL: 10 ohm */ +#define ENUM_AFE_LPTIACON1_RL30 (_ADI_MSK_3(0x00000800,0x00000800UL, uint32_t )) /* TIARL: 30 ohm */ +#define ENUM_AFE_LPTIACON1_RL50 (_ADI_MSK_3(0x00000C00,0x00000C00UL, uint32_t )) /* TIARL: 50 ohm */ +#define ENUM_AFE_LPTIACON1_RL100 (_ADI_MSK_3(0x00001000,0x00001000UL, uint32_t )) /* TIARL: 100 ohm */ +#define ENUM_AFE_LPTIACON1_RL1P6K (_ADI_MSK_3(0x00001400,0x00001400UL, uint32_t )) /* TIARL: 1.6kohm */ +#define ENUM_AFE_LPTIACON1_RL3P1K (_ADI_MSK_3(0x00001800,0x00001800UL, uint32_t )) /* TIARL: 3.1kohm */ +#define ENUM_AFE_LPTIACON1_RL3P5K (_ADI_MSK_3(0x00001C00,0x00001C00UL, uint32_t )) /* TIARL: 3.6kohm */ +#define ENUM_AFE_LPTIACON1_DISCONTIA (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* TIAGAIN: Disconnect TIA Gain resistor */ +#define ENUM_AFE_LPTIACON1_TIAGAIN200 (_ADI_MSK_3(0x00000020,0x00000020UL, uint32_t )) /* TIAGAIN: 200 Ohm */ +#define ENUM_AFE_LPTIACON1_TIAGAIN1K (_ADI_MSK_3(0x00000040,0x00000040UL, uint32_t )) /* TIAGAIN: 1k ohm */ +#define ENUM_AFE_LPTIACON1_TIAGAIN2K (_ADI_MSK_3(0x00000060,0x00000060UL, uint32_t )) /* TIAGAIN: 2k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN3K (_ADI_MSK_3(0x00000080,0x00000080UL, uint32_t )) /* TIAGAIN: 3k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN4K (_ADI_MSK_3(0x000000A0,0x000000A0UL, uint32_t )) /* TIAGAIN: 4k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN6K (_ADI_MSK_3(0x000000C0,0x000000C0UL, uint32_t )) /* TIAGAIN: 6k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN8K (_ADI_MSK_3(0x000000E0,0x000000E0UL, uint32_t )) /* TIAGAIN: 8k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN10K (_ADI_MSK_3(0x00000100,0x00000100UL, uint32_t )) /* TIAGAIN: 10k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN12K (_ADI_MSK_3(0x00000120,0x00000120UL, uint32_t )) /* TIAGAIN: 12k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN16K (_ADI_MSK_3(0x00000140,0x00000140UL, uint32_t )) /* TIAGAIN: 16k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN20K (_ADI_MSK_3(0x00000160,0x00000160UL, uint32_t )) /* TIAGAIN: 20k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN24K (_ADI_MSK_3(0x00000180,0x00000180UL, uint32_t )) /* TIAGAIN: 24k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN30K (_ADI_MSK_3(0x000001A0,0x000001A0UL, uint32_t )) /* TIAGAIN: 30k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN32K (_ADI_MSK_3(0x000001C0,0x000001C0UL, uint32_t )) /* TIAGAIN: 32k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN40K (_ADI_MSK_3(0x000001E0,0x000001E0UL, uint32_t )) /* TIAGAIN: 40k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN48K (_ADI_MSK_3(0x00000200,0x00000200UL, uint32_t )) /* TIAGAIN: 48k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN64K (_ADI_MSK_3(0x00000220,0x00000220UL, uint32_t )) /* TIAGAIN: 64k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN85K (_ADI_MSK_3(0x00000240,0x00000240UL, uint32_t )) /* TIAGAIN: 85k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN96K (_ADI_MSK_3(0x00000260,0x00000260UL, uint32_t )) /* TIAGAIN: 96k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN100K (_ADI_MSK_3(0x00000280,0x00000280UL, uint32_t )) /* TIAGAIN: 100k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN120K (_ADI_MSK_3(0x000002A0,0x000002A0UL, uint32_t )) /* TIAGAIN: 120k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN128K (_ADI_MSK_3(0x000002C0,0x000002C0UL, uint32_t )) /* TIAGAIN: 128k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN160K (_ADI_MSK_3(0x000002E0,0x000002E0UL, uint32_t )) /* TIAGAIN: 160k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN196K (_ADI_MSK_3(0x00000300,0x00000300UL, uint32_t )) /* TIAGAIN: 196k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN256K (_ADI_MSK_3(0x00000320,0x00000320UL, uint32_t )) /* TIAGAIN: 256k */ +#define ENUM_AFE_LPTIACON1_TIAGAIN512K (_ADI_MSK_3(0x00000340,0x00000340UL, uint32_t )) /* TIAGAIN: 512k */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPTIACON0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPTIACON0_CHOPEN 16 /* Chopping Enable */ +#define BITP_AFE_LPTIACON0_TIARF 13 /* Set LPF Resistor */ +#define BITP_AFE_LPTIACON0_TIARL 10 /* Set RLOAD */ +#define BITP_AFE_LPTIACON0_TIAGAIN 5 /* Set RTIA */ +#define BITP_AFE_LPTIACON0_IBOOST 3 /* Current Boost Control */ +#define BITP_AFE_LPTIACON0_HALFPWR 2 /* Half Power Mode Select */ +#define BITP_AFE_LPTIACON0_PAPDEN 1 /* PA Power Down */ +#define BITP_AFE_LPTIACON0_TIAPDEN 0 /* TIA Power Down */ +#define BITM_AFE_LPTIACON0_CHOPEN 0x00030000 /* Chopping Enable */ +#define BITM_AFE_LPTIACON0_TIARF 0x0000E000 /* Set LPF Resistor */ +#define BITM_AFE_LPTIACON0_TIARL 0x00001C00 /* Set RLOAD */ +#define BITM_AFE_LPTIACON0_TIAGAIN 0x000003E0 /* Set RTIA */ +#define BITM_AFE_LPTIACON0_IBOOST 0x00000018 /* Current Boost Control */ +#define BITM_AFE_LPTIACON0_HALFPWR 0x00000004 /* Half Power Mode Select */ +#define BITM_AFE_LPTIACON0_PAPDEN 0x00000002 /* PA Power Down */ +#define BITM_AFE_LPTIACON0_TIAPDEN 0x00000001 /* TIA Power Down */ +#define ENUM_AFE_LPTIACON0_DISCONRF 0x00000000 /* TIARF: Disconnect TIA output from LPF pin */ +#define ENUM_AFE_LPTIACON0_BYPRF 0x00002000 /* TIARF: Bypass resistor */ +#define ENUM_AFE_LPTIACON0_RF20K 0x00004000 /* TIARF: 20k Ohm */ +#define ENUM_AFE_LPTIACON0_RF100K 0x00006000 /* TIARF: 100k Ohm */ +#define ENUM_AFE_LPTIACON0_RF200K 0x00008000 /* TIARF: 200k Ohm */ +#define ENUM_AFE_LPTIACON0_RF400K 0x0000A000 /* TIARF: 400k Ohm */ +#define ENUM_AFE_LPTIACON0_RF600K 0x0000C000 /* TIARF: 600k Ohm */ +#define ENUM_AFE_LPTIACON0_RF1MOHM 0x0000E000 /* TIARF: 1Meg Ohm */ +#define ENUM_AFE_LPTIACON0_RL0 0x00000000 /* TIARL: 0 ohm */ +#define ENUM_AFE_LPTIACON0_RL10 0x00000400 /* TIARL: 10 ohm */ +#define ENUM_AFE_LPTIACON0_RL30 0x00000800 /* TIARL: 30 ohm */ +#define ENUM_AFE_LPTIACON0_RL50 0x00000C00 /* TIARL: 50 ohm */ +#define ENUM_AFE_LPTIACON0_RL100 0x00001000 /* TIARL: 100 ohm */ +#define ENUM_AFE_LPTIACON0_RL1P6K 0x00001400 /* TIARL: 1.6kohm */ +#define ENUM_AFE_LPTIACON0_RL3P1K 0x00001800 /* TIARL: 3.1kohm */ +#define ENUM_AFE_LPTIACON0_RL3P5K 0x00001C00 /* TIARL: 3.6kohm */ +#define ENUM_AFE_LPTIACON0_DISCONTIA 0x00000000 /* TIAGAIN: Disconnect TIA Gain resistor */ +#define ENUM_AFE_LPTIACON0_TIAGAIN200 0x00000020 /* TIAGAIN: 200 Ohm */ +#define ENUM_AFE_LPTIACON0_TIAGAIN1K 0x00000040 /* TIAGAIN: 1k ohm */ +#define ENUM_AFE_LPTIACON0_TIAGAIN2K 0x00000060 /* TIAGAIN: 2k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN3K 0x00000080 /* TIAGAIN: 3k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN4K 0x000000A0 /* TIAGAIN: 4k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN6K 0x000000C0 /* TIAGAIN: 6k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN8K 0x000000E0 /* TIAGAIN: 8k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN10K 0x00000100 /* TIAGAIN: 10k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN12K 0x00000120 /* TIAGAIN: 12k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN16K 0x00000140 /* TIAGAIN: 16k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN20K 0x00000160 /* TIAGAIN: 20k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN24K 0x00000180 /* TIAGAIN: 24k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN30K 0x000001A0 /* TIAGAIN: 30k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN32K 0x000001C0 /* TIAGAIN: 32k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN40K 0x000001E0 /* TIAGAIN: 40k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN48K 0x00000200 /* TIAGAIN: 48k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN64K 0x00000220 /* TIAGAIN: 64k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN85K 0x00000240 /* TIAGAIN: 85k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN96K 0x00000260 /* TIAGAIN: 96k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN100K 0x00000280 /* TIAGAIN: 100k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN120K 0x000002A0 /* TIAGAIN: 120k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN128K 0x000002C0 /* TIAGAIN: 128k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN160K 0x000002E0 /* TIAGAIN: 160k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN196K 0x00000300 /* TIAGAIN: 196k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN256K 0x00000320 /* TIAGAIN: 256k */ +#define ENUM_AFE_LPTIACON0_TIAGAIN512K 0x00000340 /* TIAGAIN: 512k */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_HSRTIACON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_HSRTIACON_CTIACON 5 /* Configure Capacitor in Parallel with RTIA */ +#define BITP_AFE_HSRTIACON_TIASW6CON 4 /* SW6 Control */ +#define BITP_AFE_HSRTIACON_RTIACON 0 /* Configure General RTIA Value */ +#define BITM_AFE_HSRTIACON_CTIACON 0x00001FE0 /* Configure Capacitor in Parallel with RTIA */ +#define BITM_AFE_HSRTIACON_TIASW6CON 0x00000010 /* SW6 Control */ +#define BITM_AFE_HSRTIACON_RTIACON 0x0000000F /* Configure General RTIA Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DE1RESCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DE1RESCON_DE1RCON 0 /* DE1 RLOAD RTIA Setting */ +#define BITM_AFE_DE1RESCON_DE1RCON (_ADI_MSK_3(0x000000FF,0x000000FFUL, uint32_t )) /* DE1 RLOAD RTIA Setting */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DE0RESCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DE0RESCON_DE0RCON 0 /* DE0 RLOAD RTIA Setting */ +#define BITM_AFE_DE0RESCON_DE0RCON 0x000000FF /* DE0 RLOAD RTIA Setting */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_HSTIACON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_HSTIACON_VBIASSEL 0 /* Select HSTIA Positive Input */ +#define BITM_AFE_HSTIACON_VBIASSEL 0x00000003 /* Select HSTIA Positive Input */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACDCBUFCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACDCBUFCON_CHANSEL 1 /* DAC DC Channel Selection */ +#define BITP_AFE_DACDCBUFCON_RESERVED_0 0 /* Reserved */ +#define BITM_AFE_DACDCBUFCON_CHANSEL (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* DAC DC Channel Selection */ +#define BITM_AFE_DACDCBUFCON_RESERVED_0 (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* Reserved */ +#define ENUM_AFE_DACDCBUFCON_CHAN0 (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* CHANSEL: ULPDAC0 Sets DC level */ +#define ENUM_AFE_DACDCBUFCON_CHAN1 (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* CHANSEL: ULPDAC1 Sets DC level */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPMODEKEY Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPMODEKEY_KEY 0 /* LP Key */ +#define BITM_AFE_LPMODEKEY_KEY 0x000FFFFF /* LP Key */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPMODECLKSEL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPMODECLKSEL_LFSYSCLKEN 0 /* Enable Switching System Clock to 32KHz by Sequencer */ +#define BITM_AFE_LPMODECLKSEL_LFSYSCLKEN 0x00000001 /* Enable Switching System Clock to 32KHz by Sequencer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPMODECON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPMODECON_ALDOEN 8 /* Set High to Power Down of Analog LDO */ +#define BITP_AFE_LPMODECON_V1P1HPADCEN 7 /* Set High to Enable 1.1V HP CM Buffer */ +#define BITP_AFE_LPMODECON_V1P8HPADCEN 6 /* Set High to Enable HP 1.8V Reference Buffer */ +#define BITP_AFE_LPMODECON_PTATEN 5 /* Set to High to Generate Ptat Current Bias */ +#define BITP_AFE_LPMODECON_ZTATEN 4 /* Set High to Generate Ztat Current Bias */ +#define BITP_AFE_LPMODECON_REPEATADCCNVEN_P 3 /* Set High to Enable Repeat ADC Conversion */ +#define BITP_AFE_LPMODECON_ADCCONVEN 2 /* Set High to Enable ADC Conversion */ +#define BITP_AFE_LPMODECON_HPREFDIS 1 /* Set High to Power Down HP Reference */ +#define BITP_AFE_LPMODECON_HFOSCPD 0 /* Set High to Power Down HP Power Oscillator */ +#define BITM_AFE_LPMODECON_ALDOEN 0x00000100 /* Set High to Power Down of Analog LDO */ +#define BITM_AFE_LPMODECON_V1P1HPADCEN 0x00000080 /* Set High to Enable 1.1V HP CM Buffer */ +#define BITM_AFE_LPMODECON_V1P8HPADCEN 0x00000040 /* Set High to Enable HP 1.8V Reference Buffer */ +#define BITM_AFE_LPMODECON_PTATEN 0x00000020 /* Set to High to Generate Ptat Current Bias */ +#define BITM_AFE_LPMODECON_ZTATEN 0x00000010 /* Set High to Generate Ztat Current Bias */ +#define BITM_AFE_LPMODECON_REPEATADCCNVEN_P 0x00000008 /* Set High to Enable Repeat ADC Conversion */ +#define BITM_AFE_LPMODECON_ADCCONVEN 0x00000004 /* Set High to Enable ADC Conversion */ +#define BITM_AFE_LPMODECON_HPREFDIS 0x00000002 /* Set High to Power Down HP Reference */ +#define BITM_AFE_LPMODECON_HFOSCPD 0x00000001 /* Set High to Power Down HP Power Oscillator */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQSLPLOCK Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQSLPLOCK_SEQ_SLP_PW 0 /* Password for SLPBYSEQ Register */ +#define BITM_AFE_SEQSLPLOCK_SEQ_SLP_PW 0x000FFFFF /* Password for SLPBYSEQ Register */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQTRGSLP Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQTRGSLP_TRGSLP 0 /* Trigger Sleep by Sequencer */ +#define BITM_AFE_SEQTRGSLP_TRGSLP 0x00000001 /* Trigger Sleep by Sequencer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACDAT0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACDAT0_DACIN6 12 /* 6BITVAL, 1LSB=34.375mV */ +#define BITP_AFE_LPDACDAT0_DACIN12 0 /* 12BITVAL, 1LSB=537uV */ +#define BITM_AFE_LPDACDAT0_DACIN6 0x0003F000 /* 6BITVAL, 1LSB=34.375mV */ +#define BITM_AFE_LPDACDAT0_DACIN12 0x00000FFF /* 12BITVAL, 1LSB=537uV */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACSW0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACSW0_LPMODEDIS 5 /* Switch Control */ +#define BITP_AFE_LPDACSW0_LPDACSW 0 /* LPDAC0 Switches Matrix */ +#define BITM_AFE_LPDACSW0_LPMODEDIS 0x00000020 /* Switch Control */ +#define BITM_AFE_LPDACSW0_LPDACSW 0x0000001F /* LPDAC0 Switches Matrix */ +#define ENUM_AFE_LPDACSW0_DACCONBIT5 0x00000000 /* LPMODEDIS: REG_AFE_LPDACDAT0 Switch controlled by REG_AFE_LPDACDAT0CON0 bit 5 */ +#define ENUM_AFE_LPDACSW0_OVRRIDE 0x00000020 /* LPMODEDIS: REG_AFE_LPDACDAT0 Switches override */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACCON0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACCON0_WAVETYPE 6 /* LPDAC Data Source */ +#define BITP_AFE_LPDACCON0_DACMDE 5 /* LPDAC0 Switch Settings */ +#define BITP_AFE_LPDACCON0_VZEROMUX 4 /* VZERO MUX Select */ +#define BITP_AFE_LPDACCON0_VBIASMUX 3 /* VBIAS MUX Select */ +#define BITP_AFE_LPDACCON0_REFSEL 2 /* Reference Select Bit */ +#define BITP_AFE_LPDACCON0_PWDEN 1 /* LPDAC0 Power Down */ +#define BITP_AFE_LPDACCON0_RSTEN 0 /* Enable Writes to REG_AFE_LPDACDAT00 */ +#define BITM_AFE_LPDACCON0_WAVETYPE 0x00000040 /* LPDAC Data Source */ +#define BITM_AFE_LPDACCON0_DACMDE 0x00000020 /* LPDAC0 Switch Settings */ +#define BITM_AFE_LPDACCON0_VZEROMUX 0x00000010 /* VZERO MUX Select */ +#define BITM_AFE_LPDACCON0_VBIASMUX 0x00000008 /* VBIAS MUX Select */ +#define BITM_AFE_LPDACCON0_REFSEL 0x00000004 /* Reference Select Bit */ +#define BITM_AFE_LPDACCON0_PWDEN 0x00000002 /* LPDAC0 Power Down */ +#define BITM_AFE_LPDACCON0_RSTEN 0x00000001 /* Enable Writes to REG_AFE_LPDACDAT00 */ +#define ENUM_AFE_LPDACCON0_MMR 0x00000000 /* WAVETYPE: Direct from REG_AFE_LPDACDAT0DAT0 */ +#define ENUM_AFE_LPDACCON0_WAVEGEN 0x00000040 /* WAVETYPE: Waveform generator */ +#define ENUM_AFE_LPDACCON0_NORM 0x00000000 /* DACMDE: REG_AFE_LPDACDAT00 switches set for normal mode */ +#define ENUM_AFE_LPDACCON0_DIAG 0x00000020 /* DACMDE: REG_AFE_LPDACDAT00 switches set for Diagnostic mode */ +#define ENUM_AFE_LPDACCON0_BITS6 0x00000000 /* VZEROMUX: VZERO 6BIT */ +#define ENUM_AFE_LPDACCON0_BITS12 0x00000010 /* VZEROMUX: VZERO 12BIT */ +#define ENUM_AFE_LPDACCON0_12BIT 0x00000000 /* VBIASMUX: Output 12Bit */ +#define ENUM_AFE_LPDACCON0_EN 0x00000008 /* VBIASMUX: output 6Bit */ +#define ENUM_AFE_LPDACCON0_ULPREF 0x00000000 /* REFSEL: ULP2P5V Ref */ +#define ENUM_AFE_LPDACCON0_AVDD 0x00000004 /* REFSEL: AVDD Reference */ +#define ENUM_AFE_LPDACCON0_PWREN 0x00000000 /* PWDEN: REG_AFE_LPDACDAT00 Powered On */ +#define ENUM_AFE_LPDACCON0_PWRDIS 0x00000002 /* PWDEN: REG_AFE_LPDACDAT00 Powered Off */ +#define ENUM_AFE_LPDACCON0_WRITEDIS 0x00000000 /* RSTEN: Disable REG_AFE_LPDACDAT00 Writes */ +#define ENUM_AFE_LPDACCON0_WRITEEN 0x00000001 /* RSTEN: Enable REG_AFE_LPDACDAT00 Writes */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACDAT1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACDAT1_DACIN6 12 /* 6BITVAL, 1LSB=34.375mV */ +#define BITP_AFE_LPDACDAT1_DACIN12 0 /* 12BITVAL, 1LSB=537uV */ +#define BITM_AFE_LPDACDAT1_DACIN6 (_ADI_MSK_3(0x0003F000,0x0003F000UL, uint32_t )) /* 6BITVAL, 1LSB=34.375mV */ +#define BITM_AFE_LPDACDAT1_DACIN12 (_ADI_MSK_3(0x00000FFF,0x00000FFFUL, uint32_t )) /* 12BITVAL, 1LSB=537uV */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACSW1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACSW1_LPMODEDIS 5 /* Switch Control */ +#define BITP_AFE_LPDACSW1_LPDACSW 0 /* ULPDAC0 Switches Matrix */ +#define BITM_AFE_LPDACSW1_LPMODEDIS (_ADI_MSK_3(0x00000020,0x00000020UL, uint32_t )) /* Switch Control */ +#define BITM_AFE_LPDACSW1_LPDACSW (_ADI_MSK_3(0x0000001F,0x0000001FUL, uint32_t )) /* ULPDAC0 Switches Matrix */ +#define ENUM_AFE_LPDACSW1_DACCONBIT5 (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* LPMODEDIS: ULPDAC Switch controlled by ULPDACCON1 bit 5 */ +#define ENUM_AFE_LPDACSW1_OVRRIDE (_ADI_MSK_3(0x00000020,0x00000020UL, uint32_t )) /* LPMODEDIS: ULPDAC Switches override */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_LPDACCON1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_LPDACCON1_WAVETYPE 6 /* DAC Input Source */ +#define BITP_AFE_LPDACCON1_DACMDE 5 /* LPDAC1 Switch Settings */ +#define BITP_AFE_LPDACCON1_VZEROMUX 4 /* VZEROOUT */ +#define BITP_AFE_LPDACCON1_VBIASMUX 3 /* BITSEL */ +#define BITP_AFE_LPDACCON1_REFSEL 2 /* REFSEL */ +#define BITP_AFE_LPDACCON1_PWDEN 1 /* ULPDAC0 Power */ +#define BITP_AFE_LPDACCON1_RSTEN 0 /* Enable Writes to ULPDAC1 */ +#define BITM_AFE_LPDACCON1_WAVETYPE (_ADI_MSK_3(0x00000040,0x00000040UL, uint32_t )) /* DAC Input Source */ +#define BITM_AFE_LPDACCON1_DACMDE (_ADI_MSK_3(0x00000020,0x00000020UL, uint32_t )) /* LPDAC1 Switch Settings */ +#define BITM_AFE_LPDACCON1_VZEROMUX (_ADI_MSK_3(0x00000010,0x00000010UL, uint32_t )) /* VZEROOUT */ +#define BITM_AFE_LPDACCON1_VBIASMUX (_ADI_MSK_3(0x00000008,0x00000008UL, uint32_t )) /* BITSEL */ +#define BITM_AFE_LPDACCON1_REFSEL (_ADI_MSK_3(0x00000004,0x00000004UL, uint32_t )) /* REFSEL */ +#define BITM_AFE_LPDACCON1_PWDEN (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* ULPDAC0 Power */ +#define BITM_AFE_LPDACCON1_RSTEN (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* Enable Writes to ULPDAC1 */ +#define ENUM_AFE_LPDACCON1_NORM (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* DACMDE: ULPDAC1 switches set for normal mode */ +#define ENUM_AFE_LPDACCON1_DIAG (_ADI_MSK_3(0x00000020,0x00000020UL, uint32_t )) /* DACMDE: ULPDAC1 switches set for Diagnostic mode */ +#define ENUM_AFE_LPDACCON1_BITS6 (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* VZEROMUX: VZERO 6BIT */ +#define ENUM_AFE_LPDACCON1_BITS12 (_ADI_MSK_3(0x00000010,0x00000010UL, uint32_t )) /* VZEROMUX: VZERO 12BIT */ +#define ENUM_AFE_LPDACCON1_DIS (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* VBIASMUX: 12BIT Output */ +#define ENUM_AFE_LPDACCON1_EN (_ADI_MSK_3(0x00000008,0x00000008UL, uint32_t )) /* VBIASMUX: 6BIT Output */ +#define ENUM_AFE_LPDACCON1_ULPREF (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) +#define ENUM_AFE_LPDACCON1_AVDD (_ADI_MSK_3(0x00000004,0x00000004UL, uint32_t )) +#define ENUM_AFE_LPDACCON1_PWREN (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* PWDEN: ULPDAC1 Powered On */ +#define ENUM_AFE_LPDACCON1_PWRDIS (_ADI_MSK_3(0x00000002,0x00000002UL, uint32_t )) /* PWDEN: ULPDAC1 Powered Off */ +#define ENUM_AFE_LPDACCON1_WRITEDIS (_ADI_MSK_3(0x00000000,0x00000000UL, uint32_t )) /* RSTEN: Disable ULPDAC1 Writes */ +#define ENUM_AFE_LPDACCON1_WRITEEN (_ADI_MSK_3(0x00000001,0x00000001UL, uint32_t )) /* RSTEN: Enable ULPDAC1 Writes */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DSWFULLCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DSWFULLCON_D8 7 /* Control of D8 Switch. */ +#define BITP_AFE_DSWFULLCON_D7 6 /* Control of D7 Switch. */ +#define BITP_AFE_DSWFULLCON_D6 5 /* Control of D6 Switch. */ +#define BITP_AFE_DSWFULLCON_D5 4 /* Control of D5 Switch. */ +#define BITP_AFE_DSWFULLCON_D4 3 /* Control of D4 Switch. */ +#define BITP_AFE_DSWFULLCON_D3 2 /* Control of D3 Switch. */ +#define BITP_AFE_DSWFULLCON_D2 1 /* Control of D2 Switch. */ +#define BITP_AFE_DSWFULLCON_DR0 0 /* Control of Dr0 Switch. */ +#define BITM_AFE_DSWFULLCON_D8 0x00000080 /* Control of D8 Switch. */ +#define BITM_AFE_DSWFULLCON_D7 0x00000040 /* Control of D7 Switch. */ +#define BITM_AFE_DSWFULLCON_D6 0x00000020 /* Control of D6 Switch. */ +#define BITM_AFE_DSWFULLCON_D5 0x00000010 /* Control of D5 Switch. */ +#define BITM_AFE_DSWFULLCON_D4 0x00000008 /* Control of D4 Switch. */ +#define BITM_AFE_DSWFULLCON_D3 0x00000004 /* Control of D3 Switch. */ +#define BITM_AFE_DSWFULLCON_D2 0x00000002 /* Control of D2 Switch. */ +#define BITM_AFE_DSWFULLCON_DR0 0x00000001 /* Control of Dr0 Switch. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_NSWFULLCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_NSWFULLCON_NL2 11 /* Control of NL2 Switch. */ +#define BITP_AFE_NSWFULLCON_NL 10 /* Control of NL Switch. */ +#define BITP_AFE_NSWFULLCON_NR1 9 /* Control of Nr1 Switch. Set Will Close Nr1, Unset Open */ +#define BITP_AFE_NSWFULLCON_N9 8 /* Control of N9 Switch. Set Will Close N9, Unset Open */ +#define BITP_AFE_NSWFULLCON_N8 7 /* Control of N8 Switch. Set Will Close N8, Unset Open */ +#define BITP_AFE_NSWFULLCON_N7 6 /* Control of N7 Switch. Set Will Close N7, Unset Open */ +#define BITP_AFE_NSWFULLCON_N6 5 /* Control of N6 Switch. Set Will Close N6, Unset Open */ +#define BITP_AFE_NSWFULLCON_N5 4 /* Control of N5 Switch. Set Will Close N5, Unset Open */ +#define BITP_AFE_NSWFULLCON_N4 3 /* Control of N4 Switch. Set Will Close N4, Unset Open */ +#define BITP_AFE_NSWFULLCON_N3 2 /* Control of N3 Switch. Set Will Close N3, Unset Open */ +#define BITP_AFE_NSWFULLCON_N2 1 /* Control of N2 Switch. Set Will Close N2, Unset Open */ +#define BITP_AFE_NSWFULLCON_N1 0 /* Control of N1 Switch. Set Will Close N1, Unset Open */ +#define BITM_AFE_NSWFULLCON_NL2 0x00000800 /* Control of NL2 Switch. */ +#define BITM_AFE_NSWFULLCON_NL 0x00000400 /* Control of NL Switch. */ +#define BITM_AFE_NSWFULLCON_NR1 0x00000200 /* Control of Nr1 Switch. Set Will Close Nr1, Unset Open */ +#define BITM_AFE_NSWFULLCON_N9 0x00000100 /* Control of N9 Switch. Set Will Close N9, Unset Open */ +#define BITM_AFE_NSWFULLCON_N8 0x00000080 /* Control of N8 Switch. Set Will Close N8, Unset Open */ +#define BITM_AFE_NSWFULLCON_N7 0x00000040 /* Control of N7 Switch. Set Will Close N7, Unset Open */ +#define BITM_AFE_NSWFULLCON_N6 0x00000020 /* Control of N6 Switch. Set Will Close N6, Unset Open */ +#define BITM_AFE_NSWFULLCON_N5 0x00000010 /* Control of N5 Switch. Set Will Close N5, Unset Open */ +#define BITM_AFE_NSWFULLCON_N4 0x00000008 /* Control of N4 Switch. Set Will Close N4, Unset Open */ +#define BITM_AFE_NSWFULLCON_N3 0x00000004 /* Control of N3 Switch. Set Will Close N3, Unset Open */ +#define BITM_AFE_NSWFULLCON_N2 0x00000002 /* Control of N2 Switch. Set Will Close N2, Unset Open */ +#define BITM_AFE_NSWFULLCON_N1 0x00000001 /* Control of N1 Switch. Set Will Close N1, Unset Open */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_PSWFULLCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_PSWFULLCON_PL2 14 /* PL2 Switch Control */ +#define BITP_AFE_PSWFULLCON_PL 13 /* PL Switch Control */ +#define BITP_AFE_PSWFULLCON_P12 11 /* Control of P12 Switch. Set Will Close P12, Unset Open */ +#define BITP_AFE_PSWFULLCON_P11 10 /* Control of P11 Switch. Set Will Close P11, Unset Open */ +#define BITP_AFE_PSWFULLCON_P10 9 /* P10 Switch Control */ +#define BITP_AFE_PSWFULLCON_P9 8 /* Control of P9 Switch. Set Will Close P9, Unset Open */ +#define BITP_AFE_PSWFULLCON_P8 7 /* Control of P8 Switch. Set Will Close P8, Unset Open */ +#define BITP_AFE_PSWFULLCON_P7 6 /* Control of P7 Switch. Set Will Close P7, Unset Open */ +#define BITP_AFE_PSWFULLCON_P6 5 /* Control of P6 Switch. Set Will Close P6, Unset Open */ +#define BITP_AFE_PSWFULLCON_P5 4 /* Control of P5 Switch. Set Will Close P5, Unset Open */ +#define BITP_AFE_PSWFULLCON_P4 3 /* Control of P4 Switch. Set Will Close P4, Unset Open */ +#define BITP_AFE_PSWFULLCON_P3 2 /* Control of P3 Switch. Set Will Close P3, Unset Open */ +#define BITP_AFE_PSWFULLCON_P2 1 /* Control of P2 Switch. Set Will Close P2, Unset Open */ +#define BITP_AFE_PSWFULLCON_PR0 0 /* PR0 Switch Control */ +#define BITM_AFE_PSWFULLCON_PL2 0x00004000 /* PL2 Switch Control */ +#define BITM_AFE_PSWFULLCON_PL 0x00002000 /* PL Switch Control */ +#define BITM_AFE_PSWFULLCON_P12 0x00000800 /* Control of P12 Switch. Set Will Close P12, Unset Open */ +#define BITM_AFE_PSWFULLCON_P11 0x00000400 /* Control of P11 Switch. Set Will Close P11, Unset Open */ +#define BITM_AFE_PSWFULLCON_P10 0x00000200 /* P10 Switch Control */ +#define BITM_AFE_PSWFULLCON_P9 0x00000100 /* Control of P9 Switch. Set Will Close P9, Unset Open */ +#define BITM_AFE_PSWFULLCON_P8 0x00000080 /* Control of P8 Switch. Set Will Close P8, Unset Open */ +#define BITM_AFE_PSWFULLCON_P7 0x00000040 /* Control of P7 Switch. Set Will Close P7, Unset Open */ +#define BITM_AFE_PSWFULLCON_P6 0x00000020 /* Control of P6 Switch. Set Will Close P6, Unset Open */ +#define BITM_AFE_PSWFULLCON_P5 0x00000010 /* Control of P5 Switch. Set Will Close P5, Unset Open */ +#define BITM_AFE_PSWFULLCON_P4 0x00000008 /* Control of P4 Switch. Set Will Close P4, Unset Open */ +#define BITM_AFE_PSWFULLCON_P3 0x00000004 /* Control of P3 Switch. Set Will Close P3, Unset Open */ +#define BITM_AFE_PSWFULLCON_P2 0x00000002 /* Control of P2 Switch. Set Will Close P2, Unset Open */ +#define BITM_AFE_PSWFULLCON_PR0 0x00000001 /* PR0 Switch Control */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_TSWFULLCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_TSWFULLCON_TR1 11 /* Control of Tr1 Switch. Set Will Close Tr1, Unset Open */ +#define BITP_AFE_TSWFULLCON_T11 10 /* Control of T11 Switch. Set Will Close T11, Unset Open */ +#define BITP_AFE_TSWFULLCON_T10 9 /* Control of T10 Switch. Set Will Close T10, Unset Open */ +#define BITP_AFE_TSWFULLCON_T9 8 /* Control of T9 Switch. Set Will Close T9, Unset Open */ +#define BITP_AFE_TSWFULLCON_T7 6 /* Control of T7 Switch. Set Will Close T7, Unset Open */ +#define BITP_AFE_TSWFULLCON_T5 4 /* Control of T5 Switch. Set Will Close T5, Unset Open */ +#define BITP_AFE_TSWFULLCON_T4 3 /* Control of T4 Switch. Set Will Close T4, Unset Open */ +#define BITP_AFE_TSWFULLCON_T3 2 /* Control of T3 Switch. Set Will Close T3, Unset Open */ +#define BITP_AFE_TSWFULLCON_T2 1 /* Control of T2 Switch. Set Will Close T2, Unset Open */ +#define BITP_AFE_TSWFULLCON_T1 0 /* Control of T1 Switch. Set Will Close T1, Unset Open */ +#define BITM_AFE_TSWFULLCON_TR1 0x00000800 /* Control of Tr1 Switch. Set Will Close Tr1, Unset Open */ +#define BITM_AFE_TSWFULLCON_T11 0x00000400 /* Control of T11 Switch. Set Will Close T11, Unset Open */ +#define BITM_AFE_TSWFULLCON_T10 0x00000200 /* Control of T10 Switch. Set Will Close T10, Unset Open */ +#define BITM_AFE_TSWFULLCON_T9 0x00000100 /* Control of T9 Switch. Set Will Close T9, Unset Open */ +#define BITM_AFE_TSWFULLCON_T7 0x00000040 /* Control of T7 Switch. Set Will Close T7, Unset Open */ +#define BITM_AFE_TSWFULLCON_T5 0x00000010 /* Control of T5 Switch. Set Will Close T5, Unset Open */ +#define BITM_AFE_TSWFULLCON_T4 0x00000008 /* Control of T4 Switch. Set Will Close T4, Unset Open */ +#define BITM_AFE_TSWFULLCON_T3 0x00000004 /* Control of T3 Switch. Set Will Close T3, Unset Open */ +#define BITM_AFE_TSWFULLCON_T2 0x00000002 /* Control of T2 Switch. Set Will Close T2, Unset Open */ +#define BITM_AFE_TSWFULLCON_T1 0x00000001 /* Control of T1 Switch. Set Will Close T1, Unset Open */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_TEMPSENS Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_TEMPSENS_CHOPFRESEL 2 /* Chop Mode Frequency Setting */ +#define BITP_AFE_TEMPSENS_CHOPCON 1 /* Temp Sensor Chop Mode */ +#define BITP_AFE_TEMPSENS_ENABLE 0 /* Unused */ +#define BITM_AFE_TEMPSENS_CHOPFRESEL 0x0000000C /* Chop Mode Frequency Setting */ +#define BITM_AFE_TEMPSENS_CHOPCON 0x00000002 /* Temp Sensor Chop Mode */ +#define BITM_AFE_TEMPSENS_ENABLE 0x00000001 /* Unused */ +#define ENUM_AFE_TEMPSENS_DIS 0x00000000 /* CHOPCON: Disable chop */ +#define ENUM_AFE_TEMPSENS_EN 0x00000002 /* CHOPCON: Enable chop */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_BUFSENCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_BUFSENCON_V1P8THERMSTEN 8 /* Buffered Reference Output */ +#define BITP_AFE_BUFSENCON_V1P1LPADCCHGDIS 6 /* Controls Decoupling Cap Discharge Switch */ +#define BITP_AFE_BUFSENCON_V1P1LPADCEN 5 /* ADC 1.1V LP Buffer */ +#define BITP_AFE_BUFSENCON_V1P1HPADCEN 4 /* Enable 1.1V HP CM Buffer */ +#define BITP_AFE_BUFSENCON_V1P8HPADCCHGDIS 3 /* Controls Decoupling Cap Discharge Switch */ +#define BITP_AFE_BUFSENCON_V1P8LPADCEN 2 /* ADC 1.8V LP Reference Buffer */ +#define BITP_AFE_BUFSENCON_V1P8HPADCILIMITEN 1 /* HP ADC Input Current Limit */ +#define BITP_AFE_BUFSENCON_V1P8HPADCEN 0 /* HP 1.8V Reference Buffer */ +#define BITM_AFE_BUFSENCON_V1P8THERMSTEN 0x00000100 /* Buffered Reference Output */ +#define BITM_AFE_BUFSENCON_V1P1LPADCCHGDIS 0x00000040 /* Controls Decoupling Cap Discharge Switch */ +#define BITM_AFE_BUFSENCON_V1P1LPADCEN 0x00000020 /* ADC 1.1V LP Buffer */ +#define BITM_AFE_BUFSENCON_V1P1HPADCEN 0x00000010 /* Enable 1.1V HP CM Buffer */ +#define BITM_AFE_BUFSENCON_V1P8HPADCCHGDIS 0x00000008 /* Controls Decoupling Cap Discharge Switch */ +#define BITM_AFE_BUFSENCON_V1P8LPADCEN 0x00000004 /* ADC 1.8V LP Reference Buffer */ +#define BITM_AFE_BUFSENCON_V1P8HPADCILIMITEN 0x00000002 /* HP ADC Input Current Limit */ +#define BITM_AFE_BUFSENCON_V1P8HPADCEN 0x00000001 /* HP 1.8V Reference Buffer */ +#define ENUM_AFE_BUFSENCON_DIS 0x00000000 /* V1P8THERMSTEN: Disable 1.8V Buffered Reference output */ +#define ENUM_AFE_BUFSENCON_EN 0x00000100 /* V1P8THERMSTEN: Enable 1.8V Buffered Reference output */ +#define ENUM_AFE_BUFSENCON_ENCHRG 0x00000000 /* V1P1LPADCCHGDIS: Open switch */ +#define ENUM_AFE_BUFSENCON_DISCHRG 0x00000040 /* V1P1LPADCCHGDIS: Close Switch */ +#define ENUM_AFE_BUFSENCON_DISABLE 0x00000000 /* V1P1LPADCEN: Disable ADC 1.8V LP Reference Buffer */ +#define ENUM_AFE_BUFSENCON_ENABLE 0x00000020 /* V1P1LPADCEN: Enable ADC 1.8V LP Reference Buffer */ +#define ENUM_AFE_BUFSENCON_OFF 0x00000000 /* V1P1HPADCEN: Disable 1.1V HP Common Mode Buffer */ +#define ENUM_AFE_BUFSENCON_ON 0x00000010 /* V1P1HPADCEN: Enable 1.1V HP Common Mode Buffer */ +#define ENUM_AFE_BUFSENCON_OPEN 0x00000000 /* V1P8HPADCCHGDIS: Open switch */ +#define ENUM_AFE_BUFSENCON_CLOSED 0x00000008 /* V1P8HPADCCHGDIS: Close Switch */ +#define ENUM_AFE_BUFSENCON_LPADCREF_DIS 0x00000000 /* V1P8LPADCEN: Disable LP 1.8V Reference Buffer */ +#define ENUM_AFE_BUFSENCON_LPADCREF_EN 0x00000004 /* V1P8LPADCEN: Enable LP 1.8V Reference Buffer */ +#define ENUM_AFE_BUFSENCON_LIMIT_DIS 0x00000000 /* V1P8HPADCILIMITEN: Disable buffer Current Limit */ +#define ENUM_AFE_BUFSENCON_LIMIT_EN 0x00000002 /* V1P8HPADCILIMITEN: Enable buffer Current Limit */ +#define ENUM_AFE_BUFSENCON_HPBUF_DIS 0x00000000 /* V1P8HPADCEN: Disable 1.8V HP ADC Reference Buffer */ +#define ENUM_AFE_BUFSENCON_HPBUF_EN 0x00000001 /* V1P8HPADCEN: Enable 1.8V HP ADC Reference Buffer */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCCON_GNPGA 16 /* PGA Gain Setup */ +#define BITP_AFE_ADCCON_GNOFSELPGA 15 /* Internal Offset/Gain Cancellation */ +#define BITP_AFE_ADCCON_GNOFFSEL 13 /* Obsolete */ +#define BITP_AFE_ADCCON_MUXSELN 8 /* Select Negative Input */ +#define BITP_AFE_ADCCON_MUXSELP 0 /* Select Positive Input */ +#define BITM_AFE_ADCCON_GNPGA 0x00070000 /* PGA Gain Setup */ +#define BITM_AFE_ADCCON_GNOFSELPGA 0x00008000 /* Internal Offset/Gain Cancellation */ +#define BITM_AFE_ADCCON_GNOFFSEL 0x00006000 /* Obsolete */ +#define BITM_AFE_ADCCON_MUXSELN 0x00001F00 /* Select Negative Input */ +#define BITM_AFE_ADCCON_MUXSELP 0x0000003F /* Select Positive Input */ +#define ENUM_AFE_ADCCON_RESERVED 0x00000011 /* MUXSELP: Reserved */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DSWSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DSWSTA_D8STA 7 /* Status of D8 Switch. */ +#define BITP_AFE_DSWSTA_D7STA 6 /* Status of D7 Switch. */ +#define BITP_AFE_DSWSTA_D6STA 5 /* Status of D6 Switch. */ +#define BITP_AFE_DSWSTA_D5STA 4 /* Status of D5 Switch. */ +#define BITP_AFE_DSWSTA_D4STA 3 /* Status of D4 Switch. */ +#define BITP_AFE_DSWSTA_D3STA 2 /* Status of D3 Switch. */ +#define BITP_AFE_DSWSTA_D2STA 1 /* Status of D2 Switch. */ +#define BITP_AFE_DSWSTA_D1STA 0 /* Status of Dr0 Switch. */ +#define BITM_AFE_DSWSTA_D8STA 0x00000080 /* Status of D8 Switch. */ +#define BITM_AFE_DSWSTA_D7STA 0x00000040 /* Status of D7 Switch. */ +#define BITM_AFE_DSWSTA_D6STA 0x00000020 /* Status of D6 Switch. */ +#define BITM_AFE_DSWSTA_D5STA 0x00000010 /* Status of D5 Switch. */ +#define BITM_AFE_DSWSTA_D4STA 0x00000008 /* Status of D4 Switch. */ +#define BITM_AFE_DSWSTA_D3STA 0x00000004 /* Status of D3 Switch. */ +#define BITM_AFE_DSWSTA_D2STA 0x00000002 /* Status of D2 Switch. */ +#define BITM_AFE_DSWSTA_D1STA 0x00000001 /* Status of Dr0 Switch. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_PSWSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_PSWSTA_PL2STA 14 /* PL Switch Control */ +#define BITP_AFE_PSWSTA_PLSTA 13 /* PL Switch Control */ +#define BITP_AFE_PSWSTA_P13STA 12 /* Status of P13 Switch. */ +#define BITP_AFE_PSWSTA_P12STA 11 /* Status of P12 Switch. */ +#define BITP_AFE_PSWSTA_P11STA 10 /* Status of P11 Switch. */ +#define BITP_AFE_PSWSTA_P10STA 9 /* Status of P10 Switch. */ +#define BITP_AFE_PSWSTA_P9STA 8 /* Status of P9 Switch. */ +#define BITP_AFE_PSWSTA_P8STA 7 /* Status of P8 Switch. */ +#define BITP_AFE_PSWSTA_P7STA 6 /* Status of P7 Switch. */ +#define BITP_AFE_PSWSTA_P6STA 5 /* Status of P6 Switch. */ +#define BITP_AFE_PSWSTA_P5STA 4 /* Status of P5 Switch. */ +#define BITP_AFE_PSWSTA_P4STA 3 /* Status of P4 Switch. */ +#define BITP_AFE_PSWSTA_P3STA 2 /* Status of P3 Switch. */ +#define BITP_AFE_PSWSTA_P2STA 1 /* Status of P2 Switch. */ +#define BITP_AFE_PSWSTA_PR0STA 0 /* PR0 Switch Control */ +#define BITM_AFE_PSWSTA_PL2STA 0x00004000 /* PL Switch Control */ +#define BITM_AFE_PSWSTA_PLSTA 0x00002000 /* PL Switch Control */ +#define BITM_AFE_PSWSTA_P13STA 0x00001000 /* Status of P13 Switch. */ +#define BITM_AFE_PSWSTA_P12STA 0x00000800 /* Status of P12 Switch. */ +#define BITM_AFE_PSWSTA_P11STA 0x00000400 /* Status of P11 Switch. */ +#define BITM_AFE_PSWSTA_P10STA 0x00000200 /* Status of P10 Switch. */ +#define BITM_AFE_PSWSTA_P9STA 0x00000100 /* Status of P9 Switch. */ +#define BITM_AFE_PSWSTA_P8STA 0x00000080 /* Status of P8 Switch. */ +#define BITM_AFE_PSWSTA_P7STA 0x00000040 /* Status of P7 Switch. */ +#define BITM_AFE_PSWSTA_P6STA 0x00000020 /* Status of P6 Switch. */ +#define BITM_AFE_PSWSTA_P5STA 0x00000010 /* Status of P5 Switch. */ +#define BITM_AFE_PSWSTA_P4STA 0x00000008 /* Status of P4 Switch. */ +#define BITM_AFE_PSWSTA_P3STA 0x00000004 /* Status of P3 Switch. */ +#define BITM_AFE_PSWSTA_P2STA 0x00000002 /* Status of P2 Switch. */ +#define BITM_AFE_PSWSTA_PR0STA 0x00000001 /* PR0 Switch Control */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_NSWSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_NSWSTA_NL2STA 11 /* Status of NL2 Switch. */ +#define BITP_AFE_NSWSTA_NLSTA 10 /* Status of NL Switch. */ +#define BITP_AFE_NSWSTA_NR1STA 9 /* Status of NR1 Switch. */ +#define BITP_AFE_NSWSTA_N9STA 8 /* Status of N9 Switch. */ +#define BITP_AFE_NSWSTA_N8STA 7 /* Status of N8 Switch. */ +#define BITP_AFE_NSWSTA_N7STA 6 /* Status of N7 Switch. */ +#define BITP_AFE_NSWSTA_N6STA 5 /* Status of N6 Switch. */ +#define BITP_AFE_NSWSTA_N5STA 4 /* Status of N5 Switch. */ +#define BITP_AFE_NSWSTA_N4STA 3 /* Status of N4 Switch. */ +#define BITP_AFE_NSWSTA_N3STA 2 /* Status of N3 Switch. */ +#define BITP_AFE_NSWSTA_N2STA 1 /* Status of N2 Switch. */ +#define BITP_AFE_NSWSTA_N1STA 0 /* Status of N1 Switch. */ +#define BITM_AFE_NSWSTA_NL2STA 0x00000800 /* Status of NL2 Switch. */ +#define BITM_AFE_NSWSTA_NLSTA 0x00000400 /* Status of NL Switch. */ +#define BITM_AFE_NSWSTA_NR1STA 0x00000200 /* Status of NR1 Switch. */ +#define BITM_AFE_NSWSTA_N9STA 0x00000100 /* Status of N9 Switch. */ +#define BITM_AFE_NSWSTA_N8STA 0x00000080 /* Status of N8 Switch. */ +#define BITM_AFE_NSWSTA_N7STA 0x00000040 /* Status of N7 Switch. */ +#define BITM_AFE_NSWSTA_N6STA 0x00000020 /* Status of N6 Switch. */ +#define BITM_AFE_NSWSTA_N5STA 0x00000010 /* Status of N5 Switch. */ +#define BITM_AFE_NSWSTA_N4STA 0x00000008 /* Status of N4 Switch. */ +#define BITM_AFE_NSWSTA_N3STA 0x00000004 /* Status of N3 Switch. */ +#define BITM_AFE_NSWSTA_N2STA 0x00000002 /* Status of N2 Switch. */ +#define BITM_AFE_NSWSTA_N1STA 0x00000001 /* Status of N1 Switch. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_TSWSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_TSWSTA_TR1STA 11 /* Status of TR1 Switch. */ +#define BITP_AFE_TSWSTA_T11STA 10 /* Status of T11 Switch. */ +#define BITP_AFE_TSWSTA_T10STA 9 /* Status of T10 Switch. */ +#define BITP_AFE_TSWSTA_T9STA 8 /* Status of T9 Switch. */ +#define BITP_AFE_TSWSTA_T8STA 7 /* Status of T8 Switch. */ +#define BITP_AFE_TSWSTA_T7STA 6 /* Status of T7 Switch. */ +#define BITP_AFE_TSWSTA_T6STA 5 /* Status of T6 Switch. */ +#define BITP_AFE_TSWSTA_T5STA 4 /* Status of T5 Switch. */ +#define BITP_AFE_TSWSTA_T4STA 3 /* Status of T4 Switch. */ +#define BITP_AFE_TSWSTA_T3STA 2 /* Status of T3 Switch. */ +#define BITP_AFE_TSWSTA_T2STA 1 /* Status of T2 Switch. */ +#define BITP_AFE_TSWSTA_T1STA 0 /* Status of T1 Switch. */ +#define BITM_AFE_TSWSTA_TR1STA 0x00000800 /* Status of TR1 Switch. */ +#define BITM_AFE_TSWSTA_T11STA 0x00000400 /* Status of T11 Switch. */ +#define BITM_AFE_TSWSTA_T10STA 0x00000200 /* Status of T10 Switch. */ +#define BITM_AFE_TSWSTA_T9STA 0x00000100 /* Status of T9 Switch. */ +#define BITM_AFE_TSWSTA_T8STA 0x00000080 /* Status of T8 Switch. */ +#define BITM_AFE_TSWSTA_T7STA 0x00000040 /* Status of T7 Switch. */ +#define BITM_AFE_TSWSTA_T6STA 0x00000020 /* Status of T6 Switch. */ +#define BITM_AFE_TSWSTA_T5STA 0x00000010 /* Status of T5 Switch. */ +#define BITM_AFE_TSWSTA_T4STA 0x00000008 /* Status of T4 Switch. */ +#define BITM_AFE_TSWSTA_T3STA 0x00000004 /* Status of T3 Switch. */ +#define BITM_AFE_TSWSTA_T2STA 0x00000002 /* Status of T2 Switch. */ +#define BITM_AFE_TSWSTA_T1STA 0x00000001 /* Status of T1 Switch. */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_STATSVAR Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_STATSVAR_VARIANCE 0 /* Statistical Variance Value */ +#define BITM_AFE_STATSVAR_VARIANCE 0x7FFFFFFF /* Statistical Variance Value */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_STATSCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_STATSCON_STDDEV 7 /* Standard Deviation Configuration */ +#define BITP_AFE_STATSCON_SAMPLENUM 4 /* Sample Size */ +#define BITP_AFE_STATSCON_RESRVED 1 /* Reserved */ +#define BITP_AFE_STATSCON_STATSEN 0 /* Statistics Enable */ +#define BITM_AFE_STATSCON_STDDEV 0x00000F80 /* Standard Deviation Configuration */ +#define BITM_AFE_STATSCON_SAMPLENUM 0x00000070 /* Sample Size */ +#define BITM_AFE_STATSCON_RESRVED 0x0000000E /* Reserved */ +#define BITM_AFE_STATSCON_STATSEN 0x00000001 /* Statistics Enable */ +#define ENUM_AFE_STATSCON_DIS 0x00000000 /* STATSEN: Disable Statistics */ +#define ENUM_AFE_STATSCON_EN 0x00000001 /* STATSEN: Enable Statistics */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_STATSMEAN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_STATSMEAN_MEAN 0 /* Mean Output */ +#define BITM_AFE_STATSMEAN_MEAN 0x0000FFFF /* Mean Output */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQ0INFO Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQ0INFO_LEN 16 /* SEQ0 Instruction Number */ +#define BITP_AFE_SEQ0INFO_ADDR 0 /* SEQ0 Start Address */ +#define BITM_AFE_SEQ0INFO_LEN 0x07FF0000 /* SEQ0 Instruction Number */ +#define BITM_AFE_SEQ0INFO_ADDR 0x000007FF /* SEQ0 Start Address */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQ2INFO Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQ2INFO_LEN 16 /* SEQ2 Instruction Number */ +#define BITP_AFE_SEQ2INFO_ADDR 0 /* SEQ2 Start Address */ +#define BITM_AFE_SEQ2INFO_LEN 0x07FF0000 /* SEQ2 Instruction Number */ +#define BITM_AFE_SEQ2INFO_ADDR 0x000007FF /* SEQ2 Start Address */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_CMDFIFOWADDR Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_CMDFIFOWADDR_WADDR 0 /* Write Address */ +#define BITM_AFE_CMDFIFOWADDR_WADDR 0x000007FF /* Write Address */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_CMDDATACON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_CMDDATACON_DATAMEMMDE 9 /* Data FIFO Mode Select */ +#define BITP_AFE_CMDDATACON_DATA_MEM_SEL 6 /* Data FIFO Size Select */ +#define BITP_AFE_CMDDATACON_CMDMEMMDE 3 /* This is Command Fifo Mode Register */ +#define BITP_AFE_CMDDATACON_CMD_MEM_SEL 0 /* Command Memory Select */ +#define BITM_AFE_CMDDATACON_DATAMEMMDE 0x00000E00 /* Data FIFO Mode Select */ +#define BITM_AFE_CMDDATACON_DATA_MEM_SEL 0x000001C0 /* Data FIFO Size Select */ +#define BITM_AFE_CMDDATACON_CMDMEMMDE 0x00000038 /* This is Command Fifo Mode Register */ +#define BITM_AFE_CMDDATACON_CMD_MEM_SEL 0x00000007 /* Command Memory Select */ +#define ENUM_AFE_CMDDATACON_DFIFO 0x00000400 /* DATAMEMMDE: FIFO MODE */ +#define ENUM_AFE_CMDDATACON_DSTM 0x00000600 /* DATAMEMMDE: STREAM MODE */ +#define ENUM_AFE_CMDDATACON_DMEM32B 0x00000000 /* DATA_MEM_SEL: 32B_1 Local Memory */ +#define ENUM_AFE_CMDDATACON_DMEM2K 0x00000040 /* DATA_MEM_SEL: 2K_2 SRAM */ +#define ENUM_AFE_CMDDATACON_DMEM4K 0x00000080 /* DATA_MEM_SEL: 2K_2~1 SRAM */ +#define ENUM_AFE_CMDDATACON_DMEM6K 0x000000C0 /* DATA_MEM_SEL: 2K_2~0 SRAM */ +#define ENUM_AFE_CMDDATACON_CMEM 0x00000008 /* CMDMEMMDE: MEMORY MODE */ +#define ENUM_AFE_CMDDATACON_CFIFO 0x00000010 /* CMDMEMMDE: FIFO MODE */ +#define ENUM_AFE_CMDDATACON_CSTM 0x00000018 /* CMDMEMMDE: STREAM MODE */ +#define ENUM_AFE_CMDDATACON_CMEM32B 0x00000000 /* CMD_MEM_SEL: 32B_0 Local Memory */ +#define ENUM_AFE_CMDDATACON_CMEM2K 0x00000001 /* CMD_MEM_SEL: 2K_0 SRAM */ +#define ENUM_AFE_CMDDATACON_CMEM4K 0x00000002 /* CMD_MEM_SEL: 2K_0~1 SRAM */ +#define ENUM_AFE_CMDDATACON_CMEM6K 0x00000003 /* CMD_MEM_SEL: 2K_0~2 SRAM */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DATAFIFOTHRES Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DATAFIFOTHRES_HIGHTHRES 16 /* High Threshold */ +#define BITM_AFE_DATAFIFOTHRES_HIGHTHRES 0x07FF0000 /* High Threshold */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQ3INFO Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQ3INFO_LEN 16 /* SEQ3 Instruction Number */ +#define BITP_AFE_SEQ3INFO_ADDR 0 /* SEQ3 Start Address */ +#define BITM_AFE_SEQ3INFO_LEN 0x07FF0000 /* SEQ3 Instruction Number */ +#define BITM_AFE_SEQ3INFO_ADDR 0x000007FF /* SEQ3 Start Address */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SEQ1INFO Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SEQ1INFO_LEN 16 /* SEQ1 Instruction Number */ +#define BITP_AFE_SEQ1INFO_ADDR 0 /* SEQ1 Start Address */ +#define BITM_AFE_SEQ1INFO_LEN 0x07FF0000 /* SEQ1 Instruction Number */ +#define BITM_AFE_SEQ1INFO_ADDR 0x000007FF /* SEQ1 Start Address */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_REPEATADCCNV Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_REPEATADCCNV_NUM 4 /* Repeat Value */ +#define BITP_AFE_REPEATADCCNV_EN 0 /* Enable Repeat ADC Conversions */ +#define BITM_AFE_REPEATADCCNV_NUM 0x00000FF0 /* Repeat Value */ +#define BITM_AFE_REPEATADCCNV_EN 0x00000001 /* Enable Repeat ADC Conversions */ +#define ENUM_AFE_REPEATADCCNV_DIS 0x00000000 /* EN: Disable Repeat ADC Conversions */ +#define ENUM_AFE_REPEATADCCNV_EN 0x00000001 /* EN: Enable Repeat ADC Conversions */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_FIFOCNTSTA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_FIFOCNTSTA_DATAFIFOCNTSTA 16 /* Current Number of Words in the Data FIFO */ +#define BITM_AFE_FIFOCNTSTA_DATAFIFOCNTSTA 0x07FF0000 /* Current Number of Words in the Data FIFO */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_CALDATLOCK Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_CALDATLOCK_KEY 0 /* Password for Calibration Data Registers */ +#define BITM_AFE_CALDATLOCK_KEY 0xFFFFFFFF /* Password for Calibration Data Registers */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETHSTIA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETHSTIA_VALUE 0 /* HSTIA Offset Calibration */ +#define BITM_AFE_ADCOFFSETHSTIA_VALUE 0x00007FFF /* HSTIA Offset Calibration */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINTEMPSENS0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINTEMPSENS0_VALUE 0 /* Gain Calibration Temp Sensor Channel */ +#define BITM_AFE_ADCGAINTEMPSENS0_VALUE 0x00007FFF /* Gain Calibration Temp Sensor Channel */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETTEMPSENS0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETTEMPSENS0_VALUE 0 /* Offset Calibration Temp Sensor */ +#define BITM_AFE_ADCOFFSETTEMPSENS0_VALUE 0x00007FFF /* Offset Calibration Temp Sensor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINGN1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINGN1_VALUE 0 /* Gain Calibration PGA Gain 1x */ +#define BITM_AFE_ADCGAINGN1_VALUE 0x00007FFF /* Gain Calibration PGA Gain 1x */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETGN1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETGN1_VALUE 0 /* Offset Calibration Gain1 */ +#define BITM_AFE_ADCOFFSETGN1_VALUE 0x00007FFF /* Offset Calibration Gain1 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACGAIN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACGAIN_VALUE 0 /* HS DAC Gain Correction Factor */ +#define BITM_AFE_DACGAIN_VALUE 0x00000FFF /* HS DAC Gain Correction Factor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACOFFSETATTEN Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACOFFSETATTEN_VALUE 0 /* DAC Offset Correction Factor */ +#define BITM_AFE_DACOFFSETATTEN_VALUE 0x00000FFF /* DAC Offset Correction Factor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACOFFSET Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACOFFSET_VALUE 0 /* DAC Offset Correction Factor */ +#define BITM_AFE_DACOFFSET_VALUE 0x00000FFF /* DAC Offset Correction Factor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINGN1P5 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINGN1P5_VALUE 0 /* Gain Calibration PGA Gain 1.5x */ +#define BITM_AFE_ADCGAINGN1P5_VALUE 0x00007FFF /* Gain Calibration PGA Gain 1.5x */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINGN2 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINGN2_VALUE 0 /* Gain Calibration PGA Gain 2x */ +#define BITM_AFE_ADCGAINGN2_VALUE 0x00007FFF /* Gain Calibration PGA Gain 2x */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINGN4 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINGN4_VALUE 0 /* Gain Calibration PGA Gain 4x */ +#define BITM_AFE_ADCGAINGN4_VALUE 0x00007FFF /* Gain Calibration PGA Gain 4x */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCPGAOFFSETCANCEL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCPGAOFFSETCANCEL_OFFSETCANCEL 0 /* Offset Cancellation */ +#define BITM_AFE_ADCPGAOFFSETCANCEL_OFFSETCANCEL 0x00007FFF /* Offset Cancellation */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGNHSTIA Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGNHSTIA_VALUE 0 /* Gain Error Calibration HS TIA Channel */ +#define BITM_AFE_ADCGNHSTIA_VALUE 0x00007FFF /* Gain Error Calibration HS TIA Channel */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETLPTIA0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETLPTIA0_VALUE 0 /* Offset Calibration for ULP-TIA0 */ +#define BITM_AFE_ADCOFFSETLPTIA0_VALUE 0x00007FFF /* Offset Calibration for ULP-TIA0 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGNLPTIA0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGNLPTIA0_VALUE 0 /* Gain Error Calibration ULPTIA0 */ +#define BITM_AFE_ADCGNLPTIA0_VALUE 0x00007FFF /* Gain Error Calibration ULPTIA0 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCPGAGN4OFCAL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCPGAGN4OFCAL_ADCGAINAUX 0 /* DC Calibration Gain=4 */ +#define BITM_AFE_ADCPGAGN4OFCAL_ADCGAINAUX 0x00007FFF /* DC Calibration Gain=4 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINGN9 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINGN9_VALUE 0 /* Gain Calibration PGA Gain 9x */ +#define BITM_AFE_ADCGAINGN9_VALUE 0x00007FFF /* Gain Calibration PGA Gain 9x */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETEMPSENS1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETEMPSENS1_VALUE 0 /* Offset Calibration Temp Sensor */ +#define BITM_AFE_ADCOFFSETEMPSENS1_VALUE 0x00007FFF /* Offset Calibration Temp Sensor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGAINDIOTEMPSENS Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGAINDIOTEMPSENS_VALUE 0 /* Gain Calibration for Diode Temp Sensor */ +#define BITM_AFE_ADCGAINDIOTEMPSENS_VALUE 0x00007FFF /* Gain Calibration for Diode Temp Sensor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACOFFSETATTENHP Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACOFFSETATTENHP_VALUE 0 /* DAC Offset Correction Factor */ +#define BITM_AFE_DACOFFSETATTENHP_VALUE 0x00000FFF /* DAC Offset Correction Factor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_DACOFFSETHP Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_DACOFFSETHP_VALUE 0 /* DAC Offset Correction Factor */ +#define BITM_AFE_DACOFFSETHP_VALUE 0x00000FFF /* DAC Offset Correction Factor */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETLPTIA1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETLPTIA1_VALUE 0 /* Offset Calibration for ULP-TIA1 */ +#define BITM_AFE_ADCOFFSETLPTIA1_VALUE (_ADI_MSK_3(0x00007FFF,0x00007FFFUL, uint32_t )) /* Offset Calibration for ULP-TIA1 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCGNLPTIA1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCGNLPTIA1_ULPTIA1GN 0 /* Gain Calibration ULP-TIA1 */ +#define BITM_AFE_ADCGNLPTIA1_ULPTIA1GN 0x00007FFF /* Gain Calibration ULP-TIA1 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETGN2 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETGN2_VALUE 0 /* Offset Calibration Auxiliary Channel (PGA Gain =2) */ +#define BITM_AFE_ADCOFFSETGN2_VALUE 0x00007FFF /* Offset Calibration Auxiliary Channel (PGA Gain =2) */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETGN1P5 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETGN1P5_VALUE 0 /* Offset Calibration Gain1.5 */ +#define BITM_AFE_ADCOFFSETGN1P5_VALUE 0x00007FFF /* Offset Calibration Gain1.5 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETGN9 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETGN9_VALUE 0 /* Offset Calibration Gain9 */ +#define BITM_AFE_ADCOFFSETGN9_VALUE 0x00007FFF /* Offset Calibration Gain9 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCOFFSETGN4 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCOFFSETGN4_VALUE 0 /* Offset Calibration Gain4 */ +#define BITM_AFE_ADCOFFSETGN4_VALUE 0x00007FFF /* Offset Calibration Gain4 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_PMBW Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_PMBW_SYSBW 2 /* Configure System Bandwidth */ +#define BITP_AFE_PMBW_SYSHP 0 /* Set High Speed DAC and ADC in High Power Mode */ +#define BITM_AFE_PMBW_SYSBW 0x0000000C /* Configure System Bandwidth */ +#define BITM_AFE_PMBW_SYSHP 0x00000001 /* Set High Speed DAC and ADC in High Power Mode */ +#define ENUM_AFE_PMBW_BWNA 0x00000000 /* SYSBW: no action for system configuration */ +#define ENUM_AFE_PMBW_BW50 0x00000004 /* SYSBW: 50kHz -3dB bandwidth */ +#define ENUM_AFE_PMBW_BW100 0x00000008 /* SYSBW: 100kHz -3dB bandwidth */ +#define ENUM_AFE_PMBW_BW250 0x0000000C /* SYSBW: 250kHz -3dB bandwidth */ +#define ENUM_AFE_PMBW_LP 0x00000000 /* SYSHP: LP mode */ +#define ENUM_AFE_PMBW_HP 0x00000001 /* SYSHP: HP mode */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_SWMUX Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_SWMUX_CMMUX 3 /* CM Resistor Select for Ain2, Ain3 */ +#define BITM_AFE_SWMUX_CMMUX 0x00000008 /* CM Resistor Select for Ain2, Ain3 */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_AFE_TEMPSEN_DIO Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_AFE_TEMPSEN_DIO_TSDIO_PD 17 /* Power Down Control */ +#define BITP_AFE_AFE_TEMPSEN_DIO_TSDIO_EN 16 /* Test Signal Enable */ +#define BITP_AFE_AFE_TEMPSEN_DIO_TSDIO_CON 0 /* Bias Current Selection */ +#define BITM_AFE_AFE_TEMPSEN_DIO_TSDIO_PD 0x00020000 /* Power Down Control */ +#define BITM_AFE_AFE_TEMPSEN_DIO_TSDIO_EN 0x00010000 /* Test Signal Enable */ +#define BITM_AFE_AFE_TEMPSEN_DIO_TSDIO_CON 0x0000FFFF /* Bias Current Selection */ + +/* ------------------------------------------------------------------------------------------------------------------------- + AFE_ADCBUFCON Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_AFE_ADCBUFCON_AMPDIS 4 /* Disable OpAmp. */ +#define BITP_AFE_ADCBUFCON_CHOPDIS 0 /* Disable Chop */ +#define BITM_AFE_ADCBUFCON_AMPDIS 0x000001F0 /* Disable OpAmp. */ +#define BITM_AFE_ADCBUFCON_CHOPDIS 0x0000000F /* Disable Chop */ + + +/* ============================================================================================================================ + Interrupt Controller Register Map + ============================================================================================================================ */ + +/* ============================================================================================================================ + INTC + ============================================================================================================================ */ +#define REG_INTC_INTCPOL_RESET 0x00000000 /* Reset Value for INTCPOL */ +#define REG_INTC_INTCPOL 0x00003000 /* INTC Interrupt Polarity Register */ +#define REG_INTC_INTCCLR_RESET 0x00000000 /* Reset Value for INTCCLR */ +#define REG_INTC_INTCCLR 0x00003004 /* INTC Interrupt Clear Register */ +#define REG_INTC_INTCSEL0_RESET 0x00002000 /* Reset Value for INTCSEL0 */ +#define REG_INTC_INTCSEL0 0x00003008 /* INTC INT0 Select Register */ +#define REG_INTC_INTCSEL1_RESET 0x00000000 /* Reset Value for INTCSEL1 */ +#define REG_INTC_INTCSEL1 0x0000300C /* INTC INT1 Select Register */ +#define REG_INTC_INTCFLAG0_RESET 0x00000000 /* Reset Value for INTCFLAG0 */ +#define REG_INTC_INTCFLAG0 0x00003010 /* INTC INT0 FLAG Register */ +#define REG_INTC_INTCFLAG1_RESET 0x00000000 /* Reset Value for INTCFLAG1 */ +#define REG_INTC_INTCFLAG1 0x00003014 /* INTC INT1 FLAG Register */ + +/* ============================================================================================================================ + INTC Register BitMasks, Positions & Enumerations + ============================================================================================================================ */ +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCPOL Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCPOL_INTPOL 0 +#define BITM_INTC_INTCPOL_INTPOL 0x00000001 + +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCCLR Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCCLR_INTCLR31 31 +#define BITP_INTC_INTCCLR_INTCLR30 30 +#define BITP_INTC_INTCCLR_INTCLR29 29 +#define BITP_INTC_INTCCLR_INTCLR28 28 +#define BITP_INTC_INTCCLR_INTCLR27 27 +#define BITP_INTC_INTCCLR_INTCLR26 26 +#define BITP_INTC_INTCCLR_INTCLR25 25 +#define BITP_INTC_INTCCLR_INTCLR24 24 +#define BITP_INTC_INTCCLR_INTCLR23 23 +#define BITP_INTC_INTCCLR_INTCLR22 22 +#define BITP_INTC_INTCCLR_INTCLR21 21 +#define BITP_INTC_INTCCLR_INTCLR20 20 +#define BITP_INTC_INTCCLR_INTCLR19 19 +#define BITP_INTC_INTCCLR_INTCLR18 18 +#define BITP_INTC_INTCCLR_INTCLR17 17 +#define BITP_INTC_INTCCLR_INTCLR16 16 +#define BITP_INTC_INTCCLR_INTCLR15 15 +#define BITP_INTC_INTCCLR_INTCLR14 14 +#define BITP_INTC_INTCCLR_INTCLR13 13 +#define BITP_INTC_INTCCLR_INTCLR12 12 /* Custom IRQ 3. Write 1 to clear. */ +#define BITP_INTC_INTCCLR_INTCLR11 11 /* Custom IRQ 2. Write 1 to clear. */ +#define BITP_INTC_INTCCLR_INTCLR10 10 /* Custom IRQ 1. Write 1 to clear. */ +#define BITP_INTC_INTCCLR_INTCLR9 9 /* Custom IRQ 0. Write 1 to clear */ +#define BITP_INTC_INTCCLR_INTCLR8 8 +#define BITP_INTC_INTCCLR_INTCLR7 7 +#define BITP_INTC_INTCCLR_INTCLR6 6 +#define BITP_INTC_INTCCLR_INTCLR5 5 +#define BITP_INTC_INTCCLR_INTCLR4 4 +#define BITP_INTC_INTCCLR_INTCLR3 3 +#define BITP_INTC_INTCCLR_INTCLR2 2 +#define BITP_INTC_INTCCLR_INTCLR1 1 +#define BITP_INTC_INTCCLR_INTCLR0 0 +#define BITM_INTC_INTCCLR_INTCLR31 0x80000000 +#define BITM_INTC_INTCCLR_INTCLR30 0x40000000 +#define BITM_INTC_INTCCLR_INTCLR29 0x20000000 +#define BITM_INTC_INTCCLR_INTCLR28 0x10000000 +#define BITM_INTC_INTCCLR_INTCLR27 0x08000000 +#define BITM_INTC_INTCCLR_INTCLR26 0x04000000 +#define BITM_INTC_INTCCLR_INTCLR25 0x02000000 +#define BITM_INTC_INTCCLR_INTCLR24 0x01000000 +#define BITM_INTC_INTCCLR_INTCLR23 0x00800000 +#define BITM_INTC_INTCCLR_INTCLR22 0x00400000 +#define BITM_INTC_INTCCLR_INTCLR21 0x00200000 +#define BITM_INTC_INTCCLR_INTCLR20 0x00100000 +#define BITM_INTC_INTCCLR_INTCLR19 0x00080000 +#define BITM_INTC_INTCCLR_INTCLR18 0x00040000 +#define BITM_INTC_INTCCLR_INTCLR17 0x00020000 +#define BITM_INTC_INTCCLR_INTCLR16 0x00010000 +#define BITM_INTC_INTCCLR_INTCLR15 0x00008000 +#define BITM_INTC_INTCCLR_INTCLR14 0x00004000 +#define BITM_INTC_INTCCLR_INTCLR13 0x00002000 +#define BITM_INTC_INTCCLR_INTCLR12 0x00001000 /* Custom IRQ 3. Write 1 to clear. */ +#define BITM_INTC_INTCCLR_INTCLR11 0x00000800 /* Custom IRQ 2. Write 1 to clear. */ +#define BITM_INTC_INTCCLR_INTCLR10 0x00000400 /* Custom IRQ 1. Write 1 to clear. */ +#define BITM_INTC_INTCCLR_INTCLR9 0x00000200 /* Custom IRQ 0. Write 1 to clear */ +#define BITM_INTC_INTCCLR_INTCLR8 0x00000100 +#define BITM_INTC_INTCCLR_INTCLR7 0x00000080 +#define BITM_INTC_INTCCLR_INTCLR6 0x00000040 +#define BITM_INTC_INTCCLR_INTCLR5 0x00000020 +#define BITM_INTC_INTCCLR_INTCLR4 0x00000010 +#define BITM_INTC_INTCCLR_INTCLR3 0x00000008 +#define BITM_INTC_INTCCLR_INTCLR2 0x00000004 +#define BITM_INTC_INTCCLR_INTCLR1 0x00000002 +#define BITM_INTC_INTCCLR_INTCLR0 0x00000001 + +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCSEL0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCSEL0_INTSEL31 31 +#define BITP_INTC_INTCSEL0_INTSEL30 30 +#define BITP_INTC_INTCSEL0_INTSEL29 29 +#define BITP_INTC_INTCSEL0_INTSEL28 28 +#define BITP_INTC_INTCSEL0_INTSEL27 27 +#define BITP_INTC_INTCSEL0_INTSEL26 26 +#define BITP_INTC_INTCSEL0_INTSEL25 25 +#define BITP_INTC_INTCSEL0_INTSEL24 24 +#define BITP_INTC_INTCSEL0_INTSEL23 23 +#define BITP_INTC_INTCSEL0_INTSEL22 22 +#define BITP_INTC_INTCSEL0_INTSEL21 21 +#define BITP_INTC_INTCSEL0_INTSEL20 20 +#define BITP_INTC_INTCSEL0_INTSEL19 19 +#define BITP_INTC_INTCSEL0_INTSEL18 18 +#define BITP_INTC_INTCSEL0_INTSEL17 17 +#define BITP_INTC_INTCSEL0_INTSEL16 16 +#define BITP_INTC_INTCSEL0_INTSEL15 15 +#define BITP_INTC_INTCSEL0_INTSEL14 14 +#define BITP_INTC_INTCSEL0_INTSEL13 13 +#define BITP_INTC_INTCSEL0_INTSEL12 12 /* Custom IRQ 3 Enable */ +#define BITP_INTC_INTCSEL0_INTSEL11 11 /* Custom IRQ 2 Enable */ +#define BITP_INTC_INTCSEL0_INTSEL10 10 /* Custom IRQ 1 Enable */ +#define BITP_INTC_INTCSEL0_INTSEL9 9 /* Custom IRQ 0 Enable */ +#define BITP_INTC_INTCSEL0_INTSEL8 8 +#define BITP_INTC_INTCSEL0_INTSEL7 7 +#define BITP_INTC_INTCSEL0_INTSEL6 6 +#define BITP_INTC_INTCSEL0_INTSEL5 5 +#define BITP_INTC_INTCSEL0_INTSEL4 4 +#define BITP_INTC_INTCSEL0_INTSEL3 3 +#define BITP_INTC_INTCSEL0_INTSEL2 2 +#define BITP_INTC_INTCSEL0_INTSEL1 1 +#define BITP_INTC_INTCSEL0_INTSEL0 0 +#define BITM_INTC_INTCSEL0_INTSEL31 0x80000000 +#define BITM_INTC_INTCSEL0_INTSEL30 0x40000000 +#define BITM_INTC_INTCSEL0_INTSEL29 0x20000000 +#define BITM_INTC_INTCSEL0_INTSEL28 0x10000000 +#define BITM_INTC_INTCSEL0_INTSEL27 0x08000000 +#define BITM_INTC_INTCSEL0_INTSEL26 0x04000000 +#define BITM_INTC_INTCSEL0_INTSEL25 0x02000000 +#define BITM_INTC_INTCSEL0_INTSEL24 0x01000000 +#define BITM_INTC_INTCSEL0_INTSEL23 0x00800000 +#define BITM_INTC_INTCSEL0_INTSEL22 0x00400000 +#define BITM_INTC_INTCSEL0_INTSEL21 0x00200000 +#define BITM_INTC_INTCSEL0_INTSEL20 0x00100000 +#define BITM_INTC_INTCSEL0_INTSEL19 0x00080000 +#define BITM_INTC_INTCSEL0_INTSEL18 0x00040000 +#define BITM_INTC_INTCSEL0_INTSEL17 0x00020000 +#define BITM_INTC_INTCSEL0_INTSEL16 0x00010000 +#define BITM_INTC_INTCSEL0_INTSEL15 0x00008000 +#define BITM_INTC_INTCSEL0_INTSEL14 0x00004000 +#define BITM_INTC_INTCSEL0_INTSEL13 0x00002000 +#define BITM_INTC_INTCSEL0_INTSEL12 0x00001000 /* Custom IRQ 3 Enable */ +#define BITM_INTC_INTCSEL0_INTSEL11 0x00000800 /* Custom IRQ 2 Enable */ +#define BITM_INTC_INTCSEL0_INTSEL10 0x00000400 /* Custom IRQ 1 Enable */ +#define BITM_INTC_INTCSEL0_INTSEL9 0x00000200 /* Custom IRQ 0 Enable */ +#define BITM_INTC_INTCSEL0_INTSEL8 0x00000100 +#define BITM_INTC_INTCSEL0_INTSEL7 0x00000080 +#define BITM_INTC_INTCSEL0_INTSEL6 0x00000040 +#define BITM_INTC_INTCSEL0_INTSEL5 0x00000020 +#define BITM_INTC_INTCSEL0_INTSEL4 0x00000010 +#define BITM_INTC_INTCSEL0_INTSEL3 0x00000008 +#define BITM_INTC_INTCSEL0_INTSEL2 0x00000004 +#define BITM_INTC_INTCSEL0_INTSEL1 0x00000002 +#define BITM_INTC_INTCSEL0_INTSEL0 0x00000001 + +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCSEL1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCSEL1_INTSEL31 31 +#define BITP_INTC_INTCSEL1_INTSEL30 30 +#define BITP_INTC_INTCSEL1_INTSEL29 29 +#define BITP_INTC_INTCSEL1_INTSEL28 28 +#define BITP_INTC_INTCSEL1_INTSEL27 27 +#define BITP_INTC_INTCSEL1_INTSEL26 26 +#define BITP_INTC_INTCSEL1_INTSEL25 25 +#define BITP_INTC_INTCSEL1_INTSEL24 24 +#define BITP_INTC_INTCSEL1_INTSEL23 23 +#define BITP_INTC_INTCSEL1_INTSEL22 22 +#define BITP_INTC_INTCSEL1_INTSEL21 21 +#define BITP_INTC_INTCSEL1_INTSEL20 20 +#define BITP_INTC_INTCSEL1_INTSEL19 19 +#define BITP_INTC_INTCSEL1_INTSEL18 18 +#define BITP_INTC_INTCSEL1_INTSEL17 17 +#define BITP_INTC_INTCSEL1_INTSEL16 16 +#define BITP_INTC_INTCSEL1_INTSEL15 15 +#define BITP_INTC_INTCSEL1_INTSEL14 14 +#define BITP_INTC_INTCSEL1_INTSEL13 13 +#define BITP_INTC_INTCSEL1_INTSEL12 12 /* Custom IRQ 3 Enable */ +#define BITP_INTC_INTCSEL1_INTSEL11 11 /* Custom IRQ 2 Enable */ +#define BITP_INTC_INTCSEL1_INTSEL10 10 /* Custom IRQ 1 Enable */ +#define BITP_INTC_INTCSEL1_INTSEL9 9 /* Custom IRQ 0 Enable */ +#define BITP_INTC_INTCSEL1_INTSEL8 8 +#define BITP_INTC_INTCSEL1_INTSEL7 7 +#define BITP_INTC_INTCSEL1_INTSEL6 6 +#define BITP_INTC_INTCSEL1_INTSEL5 5 +#define BITP_INTC_INTCSEL1_INTSEL4 4 +#define BITP_INTC_INTCSEL1_INTSEL3 3 +#define BITP_INTC_INTCSEL1_INTSEL2 2 +#define BITP_INTC_INTCSEL1_INTSEL1 1 +#define BITP_INTC_INTCSEL1_INTSEL0 0 +#define BITM_INTC_INTCSEL1_INTSEL31 0x80000000 +#define BITM_INTC_INTCSEL1_INTSEL30 0x40000000 +#define BITM_INTC_INTCSEL1_INTSEL29 0x20000000 +#define BITM_INTC_INTCSEL1_INTSEL28 0x10000000 +#define BITM_INTC_INTCSEL1_INTSEL27 0x08000000 +#define BITM_INTC_INTCSEL1_INTSEL26 0x04000000 +#define BITM_INTC_INTCSEL1_INTSEL25 0x02000000 +#define BITM_INTC_INTCSEL1_INTSEL24 0x01000000 +#define BITM_INTC_INTCSEL1_INTSEL23 0x00800000 +#define BITM_INTC_INTCSEL1_INTSEL22 0x00400000 +#define BITM_INTC_INTCSEL1_INTSEL21 0x00200000 +#define BITM_INTC_INTCSEL1_INTSEL20 0x00100000 +#define BITM_INTC_INTCSEL1_INTSEL19 0x00080000 +#define BITM_INTC_INTCSEL1_INTSEL18 0x00040000 +#define BITM_INTC_INTCSEL1_INTSEL17 0x00020000 +#define BITM_INTC_INTCSEL1_INTSEL16 0x00010000 +#define BITM_INTC_INTCSEL1_INTSEL15 0x00008000 +#define BITM_INTC_INTCSEL1_INTSEL14 0x00004000 +#define BITM_INTC_INTCSEL1_INTSEL13 0x00002000 +#define BITM_INTC_INTCSEL1_INTSEL12 0x00001000 /* Custom IRQ 3 Enable */ +#define BITM_INTC_INTCSEL1_INTSEL11 0x00000800 /* Custom IRQ 2 Enable */ +#define BITM_INTC_INTCSEL1_INTSEL10 0x00000400 /* Custom IRQ 1 Enable */ +#define BITM_INTC_INTCSEL1_INTSEL9 0x00000200 /* Custom IRQ 0 Enable */ +#define BITM_INTC_INTCSEL1_INTSEL8 0x00000100 +#define BITM_INTC_INTCSEL1_INTSEL7 0x00000080 +#define BITM_INTC_INTCSEL1_INTSEL6 0x00000040 +#define BITM_INTC_INTCSEL1_INTSEL5 0x00000020 +#define BITM_INTC_INTCSEL1_INTSEL4 0x00000010 +#define BITM_INTC_INTCSEL1_INTSEL3 0x00000008 +#define BITM_INTC_INTCSEL1_INTSEL2 0x00000004 +#define BITM_INTC_INTCSEL1_INTSEL1 0x00000002 +#define BITM_INTC_INTCSEL1_INTSEL0 0x00000001 + +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCFLAG0 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCFLAG0_FLAG31 31 +#define BITP_INTC_INTCFLAG0_FLAG30 30 +#define BITP_INTC_INTCFLAG0_FLAG29 29 +#define BITP_INTC_INTCFLAG0_FLAG28 28 +#define BITP_INTC_INTCFLAG0_FLAG27 27 +#define BITP_INTC_INTCFLAG0_FLAG26 26 +#define BITP_INTC_INTCFLAG0_FLAG25 25 +#define BITP_INTC_INTCFLAG0_FLAG24 24 +#define BITP_INTC_INTCFLAG0_FLAG23 23 +#define BITP_INTC_INTCFLAG0_FLAG22 22 +#define BITP_INTC_INTCFLAG0_FLAG21 21 +#define BITP_INTC_INTCFLAG0_FLAG20 20 +#define BITP_INTC_INTCFLAG0_FLAG19 19 +#define BITP_INTC_INTCFLAG0_FLAG18 18 +#define BITP_INTC_INTCFLAG0_FLAG17 17 +#define BITP_INTC_INTCFLAG0_FLAG16 16 +#define BITP_INTC_INTCFLAG0_FLAG15 15 +#define BITP_INTC_INTCFLAG0_FLAG14 14 +#define BITP_INTC_INTCFLAG0_FLAG13 13 +#define BITP_INTC_INTCFLAG0_FLAG12 12 /* Custom IRQ 3 Status */ +#define BITP_INTC_INTCFLAG0_FLAG11 11 /* Custom IRQ 2 Status */ +#define BITP_INTC_INTCFLAG0_FLAG10 10 /* Custom IRQ 1 Status */ +#define BITP_INTC_INTCFLAG0_FLAG9 9 /* Custom IRQ 0 Status */ +#define BITP_INTC_INTCFLAG0_FLAG8 8 /* Variance IRQ status. */ +#define BITP_INTC_INTCFLAG0_FLAG7 7 +#define BITP_INTC_INTCFLAG0_FLAG6 6 +#define BITP_INTC_INTCFLAG0_FLAG5 5 +#define BITP_INTC_INTCFLAG0_FLAG4 4 +#define BITP_INTC_INTCFLAG0_FLAG3 3 +#define BITP_INTC_INTCFLAG0_FLAG2 2 +#define BITP_INTC_INTCFLAG0_FLAG1 1 +#define BITP_INTC_INTCFLAG0_FLAG0 0 +#define BITM_INTC_INTCFLAG0_FLAG31 0x80000000 +#define BITM_INTC_INTCFLAG0_FLAG30 0x40000000 +#define BITM_INTC_INTCFLAG0_FLAG29 0x20000000 +#define BITM_INTC_INTCFLAG0_FLAG28 0x10000000 +#define BITM_INTC_INTCFLAG0_FLAG27 0x08000000 +#define BITM_INTC_INTCFLAG0_FLAG26 0x04000000 +#define BITM_INTC_INTCFLAG0_FLAG25 0x02000000 +#define BITM_INTC_INTCFLAG0_FLAG24 0x01000000 +#define BITM_INTC_INTCFLAG0_FLAG23 0x00800000 +#define BITM_INTC_INTCFLAG0_FLAG22 0x00400000 +#define BITM_INTC_INTCFLAG0_FLAG21 0x00200000 +#define BITM_INTC_INTCFLAG0_FLAG20 0x00100000 +#define BITM_INTC_INTCFLAG0_FLAG19 0x00080000 +#define BITM_INTC_INTCFLAG0_FLAG18 0x00040000 +#define BITM_INTC_INTCFLAG0_FLAG17 0x00020000 +#define BITM_INTC_INTCFLAG0_FLAG16 0x00010000 +#define BITM_INTC_INTCFLAG0_FLAG15 0x00008000 +#define BITM_INTC_INTCFLAG0_FLAG14 0x00004000 +#define BITM_INTC_INTCFLAG0_FLAG13 0x00002000 +#define BITM_INTC_INTCFLAG0_FLAG12 0x00001000 /* Custom IRQ 3 Status */ +#define BITM_INTC_INTCFLAG0_FLAG11 0x00000800 /* Custom IRQ 2 Status */ +#define BITM_INTC_INTCFLAG0_FLAG10 0x00000400 /* Custom IRQ 1 Status */ +#define BITM_INTC_INTCFLAG0_FLAG9 0x00000200 /* Custom IRQ 0 Status */ +#define BITM_INTC_INTCFLAG0_FLAG8 0x00000100 /* Variance IRQ status. */ +#define BITM_INTC_INTCFLAG0_FLAG7 0x00000080 +#define BITM_INTC_INTCFLAG0_FLAG6 0x00000040 +#define BITM_INTC_INTCFLAG0_FLAG5 0x00000020 +#define BITM_INTC_INTCFLAG0_FLAG4 0x00000010 +#define BITM_INTC_INTCFLAG0_FLAG3 0x00000008 +#define BITM_INTC_INTCFLAG0_FLAG2 0x00000004 +#define BITM_INTC_INTCFLAG0_FLAG1 0x00000002 +#define BITM_INTC_INTCFLAG0_FLAG0 0x00000001 + +/* ------------------------------------------------------------------------------------------------------------------------- + INTC_INTCFLAG1 Pos/Masks Description + ------------------------------------------------------------------------------------------------------------------------- */ +#define BITP_INTC_INTCFLAG1_FLAG31 31 +#define BITP_INTC_INTCFLAG1_FLAG30 30 +#define BITP_INTC_INTCFLAG1_FLAG29 29 +#define BITP_INTC_INTCFLAG1_FLAG28 28 +#define BITP_INTC_INTCFLAG1_FLAG27 27 +#define BITP_INTC_INTCFLAG1_FLAG26 26 +#define BITP_INTC_INTCFLAG1_FLAG25 25 +#define BITP_INTC_INTCFLAG1_FLAG24 24 +#define BITP_INTC_INTCFLAG1_FLAG23 23 +#define BITP_INTC_INTCFLAG1_FLAG22 22 +#define BITP_INTC_INTCFLAG1_FLAG21 21 +#define BITP_INTC_INTCFLAG1_FLAG20 20 +#define BITP_INTC_INTCFLAG1_FLAG19 19 +#define BITP_INTC_INTCFLAG1_FLAG18 18 +#define BITP_INTC_INTCFLAG1_FLAG17 17 +#define BITP_INTC_INTCFLAG1_FLAG16 16 +#define BITP_INTC_INTCFLAG1_FLAG15 15 +#define BITP_INTC_INTCFLAG1_FLAG14 14 +#define BITP_INTC_INTCFLAG1_FLAG13 13 +#define BITP_INTC_INTCFLAG1_FLAG12 12 /* Custom IRQ 3 Status */ +#define BITP_INTC_INTCFLAG1_FLAG11 11 /* Custom IRQ 2 Status */ +#define BITP_INTC_INTCFLAG1_FLAG10 10 /* Custom IRQ 1 Status */ +#define BITP_INTC_INTCFLAG1_FLAG9 9 /* Custom IRQ 0 Status */ +#define BITP_INTC_INTCFLAG1_FLAG8 8 /* Variance IRQ status. */ +#define BITP_INTC_INTCFLAG1_FLAG7 7 +#define BITP_INTC_INTCFLAG1_FLAG6 6 +#define BITP_INTC_INTCFLAG1_FLAG5 5 +#define BITP_INTC_INTCFLAG1_FLAG4 4 +#define BITP_INTC_INTCFLAG1_FLAG3 3 +#define BITP_INTC_INTCFLAG1_FLAG2 2 +#define BITP_INTC_INTCFLAG1_FLAG1 1 +#define BITP_INTC_INTCFLAG1_FLAG0 0 +#define BITM_INTC_INTCFLAG1_FLAG31 0x80000000 +#define BITM_INTC_INTCFLAG1_FLAG30 0x40000000 +#define BITM_INTC_INTCFLAG1_FLAG29 0x20000000 +#define BITM_INTC_INTCFLAG1_FLAG28 0x10000000 +#define BITM_INTC_INTCFLAG1_FLAG27 0x08000000 +#define BITM_INTC_INTCFLAG1_FLAG26 0x04000000 +#define BITM_INTC_INTCFLAG1_FLAG25 0x02000000 +#define BITM_INTC_INTCFLAG1_FLAG24 0x01000000 +#define BITM_INTC_INTCFLAG1_FLAG23 0x00800000 +#define BITM_INTC_INTCFLAG1_FLAG22 0x00400000 +#define BITM_INTC_INTCFLAG1_FLAG21 0x00200000 +#define BITM_INTC_INTCFLAG1_FLAG20 0x00100000 +#define BITM_INTC_INTCFLAG1_FLAG19 0x00080000 +#define BITM_INTC_INTCFLAG1_FLAG18 0x00040000 +#define BITM_INTC_INTCFLAG1_FLAG17 0x00020000 +#define BITM_INTC_INTCFLAG1_FLAG16 0x00010000 +#define BITM_INTC_INTCFLAG1_FLAG15 0x00008000 +#define BITM_INTC_INTCFLAG1_FLAG14 0x00004000 +#define BITM_INTC_INTCFLAG1_FLAG13 0x00002000 +#define BITM_INTC_INTCFLAG1_FLAG12 0x00001000 /* Custom IRQ 3 Status */ +#define BITM_INTC_INTCFLAG1_FLAG11 0x00000800 /* Custom IRQ 2 Status */ +#define BITM_INTC_INTCFLAG1_FLAG10 0x00000400 /* Custom IRQ 1 Status */ +#define BITM_INTC_INTCFLAG1_FLAG9 0x00000200 /* Custom IRQ 0 Status */ +#define BITM_INTC_INTCFLAG1_FLAG8 0x00000100 /* Variance IRQ status. */ +#define BITM_INTC_INTCFLAG1_FLAG7 0x00000080 +#define BITM_INTC_INTCFLAG1_FLAG6 0x00000040 +#define BITM_INTC_INTCFLAG1_FLAG5 0x00000020 +#define BITM_INTC_INTCFLAG1_FLAG4 0x00000010 +#define BITM_INTC_INTCFLAG1_FLAG3 0x00000008 +#define BITM_INTC_INTCFLAG1_FLAG2 0x00000004 +#define BITM_INTC_INTCFLAG1_FLAG1 0x00000002 +#define BITM_INTC_INTCFLAG1_FLAG0 0x00000001 +/** + * @} AD5940RegistersBitfields + * @endcond + * */ + +/** + * @addtogroup SPI_Block + * @{ + * @defgroup SPI_Block_Const + * @{ + * +*/ +#define SPICMD_SETADDR 0x20 /**< set the register address that is going to operate. */ +#define SPICMD_READREG 0x6d /**< command to read register */ +#define SPICMD_WRITEREG 0x2d /**< command to write register */ +#define SPICMD_READFIFO 0x5f /**< command to read FIFO */ +/** + * @} SPI_Block_Const + * @} SPI_Block +*/ + +/** + * @addtogroup AFE_Control + * @{ + * */ + +/** + * @defgroup AFE_Control_Const + * @{ + * */ + +/** + * @defgroup AFEINTC_Const + * @brief AD5940 has two interrupt controller INTC0 and INTC1. Both of them have ability to generate interrupt signal from GPIO. + * @{ + * */ +/* AFE Interrupt controller selection */ +#define AFEINTC_0 0 /**< Interrupt controller 0 */ +#define AFEINTC_1 1 /**< Interrupt controller 1 */ +/** @} */ + +/** + * @defgroup AFEINTC_SRC_Const + * @brief Interrupt source selection. These sources are defined as bit mask. They are available for register INTCCLR, INTCSEL0/1, INTCFLAG0/1 + * @{ + * */ +#define AFEINTSRC_ADCRDY 0x00000001 /**< Bit0, ADC Result Ready Status */ +#define AFEINTSRC_DFTRDY 0x00000002 /**< Bit1, DFT Result Ready Status */ +#define AFEINTSRC_SINC2RDY 0x00000004 /**< Bit2, SINC2/Low Pass Filter Result Status */ +#define AFEINTSRC_TEMPRDY 0x00000008 /**< Bit3, Temp Sensor Result Ready */ +#define AFEINTSRC_ADCMINERR 0x00000010 /**< Bit4, ADC Minimum Value */ +#define AFEINTSRC_ADCMAXERR 0x00000020 /**< Bit5, ADC Maximum Value */ +#define AFEINTSRC_ADCDIFFERR 0x00000040 /**< Bit6, ADC Delta Ready */ +#define AFEINTSRC_MEANRDY 0x00000080 /**< Bit7, Mean Result Ready */ +#define AFEINTSRC_VARRDY 0x00000100 /**< Bit8, Variance Result Ready */ +#define AFEINTSRC_CUSTOMINT0 0x00000200 /**< Bit9, Custom interrupt source 0. It happens when **sequencer** writes 1 to register AFEGENINTSTA.BIT0 */ +#define AFEINTSRC_CUSTOMINT1 0x00000400 /**< Bit10, Custom interrupt source 1. It happens when **sequencer** writes 1 to register AFEGENINTSTA.BIT1*/ +#define AFEINTSRC_CUSTOMINT2 0x00000800 /**< Bit11, Custom interrupt source 2. It happens when **sequencer** writes 1 to register AFEGENINTSTA.BIT2 */ +#define AFEINTSRC_CUSTOMINT3 0x00001000 /**< Bit12, Custom interrupt source 3. It happens when **sequencer** writes 1 to register AFEGENINTSTA.BIT3 */ +#define AFEINTSRC_BOOTLDDONE 0x00002000 /**< Bit13, OTP Boot Loading Done */ +#define AFEINTSRC_WAKEUP 0x00004000 /**< Bit14, AFE Woken up*/ +#define AFEINTSRC_ENDSEQ 0x00008000 /**< Bit15, End of Sequence Interrupt. */ +#define AFEINTSRC_SEQTIMEOUT 0x00010000 /**< Bit16, Sequencer Timeout Command Finished. */ +#define AFEINTSRC_SEQTIMEOUTERR 0x00020000 /**< Bit17, Sequencer Timeout Command Error. */ +#define AFEINTSRC_CMDFIFOFULL 0x00040000 /**< Bit18, Command FIFO Full Interrupt. */ +#define AFEINTSRC_CMDFIFOEMPTY 0x00080000 /**< Bit19, Command FIFO Empty */ +#define AFEINTSRC_CMDFIFOTHRESH 0x00100000 /**< Bit20, Command FIFO Threshold Interrupt. */ +#define AFEINTSRC_CMDFIFOOF 0x00200000 /**< Bit21, Command FIFO Overflow Interrupt. */ +#define AFEINTSRC_CMDFIFOUF 0x00400000 /**< Bit22, Command FIFO Underflow Interrupt. */ +#define AFEINTSRC_DATAFIFOFULL 0x00800000 /**< Bit23, Data FIFO Full Interrupt. */ +#define AFEINTSRC_DATAFIFOEMPTY 0x01000000 /**< Bit24, Data FIFO Empty */ +#define AFEINTSRC_DATAFIFOTHRESH 0x02000000 /**< Bit25, Data FIFO Threshold Interrupt. */ +#define AFEINTSRC_DATAFIFOOF 0x04000000 /**< Bit26, Data FIFO Overflow Interrupt. */ +#define AFEINTSRC_DATAFIFOUF 0x08000000 /**< Bit27, Data FIFO Underflow Interrupt. */ +#define AFEINTSRC_WDTIRQ 0x10000000 /**< Bit28, WDT Timeout Interrupt. */ +#define AFEINTSRC_CRC_OUTLIER 0x20000000 /**< Bit29, CRC interrupt for M355, Outlier Int for AD5940 */ +#define AFEINTSRC_GPT0INT_SLPWUT 0x40000000 /**< Bit30, Gneral Pupose Timer0 IRQ for M355. Sleep or Wakeup Tiemr timeout for AD5940*/ +#define AFEINTSRC_GPT1INT_TRYBRK 0x80000000 /**< Bit31, Gneral Pupose Timer1 IRQ for M355. Tried to Break IRQ for AD5940*/ +#define AFEINTSRC_ALLINT 0xffffffff /**< mask of all interrupt */ +/** @} */ + +/** + * @defgroup AFEPWR_Const + * @brief AFE power mode. + * @details It will set the whole analog system power mode include HSDAC, Excitation Buffer, HSTIA, ADC front-buffer etc. + * @{ +*/ +#define AFEPWR_LP 0 /**< Set AFE to Low Power mode. For signal <80kHz, use it. */ +#define AFEPWR_HP 1 /**< Set AFE to High Power mode. For signal >80kHz, use it. */ +/** + * @} +*/ + +/** + * @defgroup AFEBW_Const + * @brief AFE system bandwidth. + * @details It will set the whole analog bandwidth include HSDAC, Excitation Buffer, HSTIA, ADC front-buffer etc. + * @{ +*/ +#define AFEBW_AUTOSET 0 /**< Set the bandwidth automatically based on WGFCW frequency word. */ +#define AFEBW_50KHZ 1 /**< 50kHZ system bandwidth(DAC/ADC) */ +#define AFEBW_100KHZ 2 /**< 100kHZ system bandwidth(DAC/ADC) */ +#define AFEBW_250KHZ 3 /**< 250kHZ system bandwidth(DAC/ADC) */ +/** + * @} +*/ + +/** + * @defgroup AFECTRL_Const + * @brief AFE Control signal set. Bit masks for register AFECON. + * @details This is all the available control signal for function @ref AD5940_AFECtrlS + * @warning Bit field in register AFECON has some opposite meaning as below definitions. We use all positive word here + * like HPREF instead of HPREFDIS. This set is only used in function @ref AD5940_AFECtrlS, the second parameter + * decides whether enable it or disable it. + * @{ +*/ +#define AFECTRL_HPREFPWR (1L<<5) /**< High power reference on-off control */ +#define AFECTRL_HSDACPWR (1L<<6) /**< High speed DAC on-off control */ +#define AFECTRL_ADCPWR (1L<<7) /**< ADC power on-off control */ +#define AFECTRL_ADCCNV (1L<<8) /**< Start ADC convert enable */ +#define AFECTRL_EXTBUFPWR (1L<<9) /**< Excitation buffer power control */ +#define AFECTRL_INAMPPWR (1L<<10) /**< Excitation loop input amplifier before P/N node power control */ +#define AFECTRL_HSTIAPWR (1L<<11) /**< High speed TIA amplifier power control */ +#define AFECTRL_TEMPSPWR (1L<<12) /**< Temperature sensor power */ +#define AFECTRL_TEMPCNV (1L<<13) /**< Start Temperature sensor convert */ +#define AFECTRL_WG (1L<<14) /**< Waveform generator on-off control */ +#define AFECTRL_DFT (1L<<15) /**< DFT engine on-off control */ +#define AFECTRL_SINC2NOTCH (1L<<16) /**< SIN2+Notch block on-off control */ +#define AFECTRL_ALDOLIMIT (1L<<19) /**< ALDO current limit on-off control */ +#define AFECTRL_DACREFPWR (1L<<20) /**< DAC reference buffer power control */ +#define AFECTRL_DCBUFPWR (1L<<21) /**< Excitation loop DC offset buffer sourced from LPDAC power control */ +#define AFECTRL_ALL 0x39ffe0 /**< All control signals */ +/** + * @} +*/ + +/** + * @defgroup LPMODECTRL_Const + * @brief LP Control signal(bit mask) for register LPMODECON + * @details This is all the available control signal for function @ref AD5940_LPModeCtrlS + * @warning Bit field in register LPMODECON has some opposite meaning as below definitions. We use all positive word here + * like HPREFPWR instead of HPREFDIS. This set is only used in function @ref AD5940_AFECtrlS, the second parameter + * decides whether enable or disable selected block(s). + * @{ +*/ +#define LPMODECTRL_HFOSCEN (1<<0) /**< Enable internal HFOSC. Note: the register defination is set this bit to 1 to disable it. */ +#define LPMODECTRL_HPREFPWR (1<<1) /**< High power reference power EN. Note: the register defination is set this bit to 1 to disable it. */ +#define LPMODECTRL_ADCCNV (1<<2) /**< Start ADC convert enable */ +#define LPMODECTRL_REPEATEN (1<<3) /**< Enable repeat convert function. This will enable ADC power automatically */ +#define LPMODECTRL_GLBBIASZ (1<<4) /**< Enable Global ZTAT bias. Disable it to save more power */ +#define LPMODECTRL_GLBBIASP (1<<5) /**< Enable Global PTAT bias. Disable it to save more power */ +#define LPMODECTRL_BUFHP1P8V (1<<6) /**< High power 1.8V reference buffer */ +#define LPMODECTRL_BUFHP1P1V (1<<7) /**< High power 1.1V reference buffer */ +#define LPMODECTRL_ALDOPWR (1<<8) /**< Enable ALDO. Note: register defination is set this bit to 1 to disable ALDO. */ +#define LPMODECTRL_ALL 0x1ff /**< All Control signal Or'ed together*/ +#define LPMODECTRL_NONE 0 /**< No blocks selected */ +/** @} */ + +/** + * @defgroup AFERESULT_Const + * @brief The available AFE results type. Used for function @ref AD5940_ReadAfeResult + * @{ +*/ +#define AFERESULT_SINC3 0 /**< SINC3 result */ +#define AFERESULT_SINC2 1 /**< SINC2+NOTCH result */ +#define AFERESULT_TEMPSENSOR 2 /**< Temperature sensor result */ +#define AFERESULT_DFTREAL 3 /**< DFT Real result */ +#define AFERESULT_DFTIMAGE 4 /**< DFT Imaginary result */ +#define AFERESULT_STATSMEAN 5 /**< Statistic Mean result */ +#define AFERESULT_STATSVAR 6 /**< Statistic Variance result */ +/** @} */ + +/** + * @} AFE_Control_Const + * @} AFE_Control + * */ + +/** + * @addtogroup High_Speed_Loop + * @{ + * @defgroup High_Speed_Loop_Const + * @{ +*/ + +/** + * @defgroup Switch_Matrix_Block_Const + * @{ + * @defgroup SWD_Const + * @brief Switch D set. This is bit mask for register DSWFULLCON. + * @details + * It's used to initialize structure @ref SWMatrixCfg_Type + * The bit masks can be OR'ed together. For example + * - `SWD_AIN1|SWD_RCAL0` means close SWD_AIN1 and SWD_RCAL0 in same time, and open all other D switches. + * - `SWD_AIN2` means close SWD_AIN2 and open all other D switches. + * @{ +*/ +#define SWD_OPEN (0<<0) /**< Open all D switch. */ +#define SWD_RCAL0 (1<<0) /**< pin RCAL0 */ +#define SWD_AIN1 (1<<1) /**< Pin AIN1 */ +#define SWD_AIN2 (1<<2) /**< Pin AIN2 */ +#define SWD_AIN3 (1<<3) /**< Pin AIN3 */ +#define SWD_CE0 (1<<4) /**< Pin CE0 */ +#define SWD_CE1 (1<<5) /**< CE1 in ADuCM355 */ +#define SWD_AFE1 (1<<5) /**< AFE1 in AD594x */ +#define SWD_SE0 (1<<6) /**< Pin SE0 */ +#define SWD_SE1 (1<<7) /**< SE1 in ADuCM355 */ +#define SWD_AFE3 (1<<7) /**< AFE3 in AD594x */ +/** @} */ + +/** + * @defgroup SWP_Const + * @brief Switch P set. This is bit mask for register PSWFULLCON. + * @details + * It's used to initialize structure @ref SWMatrixCfg_Type. + * The bit masks can be OR'ed together. For example + * - `SWP_RCAL0|SWP_AIN1` means close SWP_RCAL0 and SWP_AIN1 in same time, and open all other P switches. + * - `SWP_SE0` means close SWP_SE0 and open all other P switches. + * @{ +*/ +#define SWP_OPEN 0 /**< Open all P switches */ +#define SWP_RCAL0 (1<<0) /**< Pin RCAL0 */ +#define SWP_AIN1 (1<<1) /**< Pin AIN1 */ +#define SWP_AIN2 (1<<2) /**< Pin AIN2 */ +#define SWP_AIN3 (1<<3) /**< Pin AIN3 */ +#define SWP_RE0 (1<<4) /**< Pin RE0 */ +#define SWP_RE1 (1<<5) /**< RE1 in ADuCM355 */ +#define SWP_AFE2 (1<<5) /**< AFE2 in AD5940 */ +#define SWP_SE0 (1<<6) /**< Pin SE0 */ +#define SWP_DE0 (1<<7) /**< Pin DE0 */ +#define SWP_SE1 (1<<8) /**< SE1 in ADuCM355 */ +#define SWP_AFE3 (1<<8) /**< AFE3 in AD5940 */ +#define SWP_DE1 (1<<9) /**< ADuCM355 Only. */ +#define SWP_CE0 (1<<10) /**< Pin CE0 */ +#define SWP_CE1 (1<<11) /**< CE1 in ADuCM355 */ +#define SWP_AFE1 (1<<11) /**< AFE1 in AD5940 */ +#define SWP_PL (1<<13) /**< Internal PL switch */ +#define SWP_PL2 (1<<14) /**< Internal PL2 switch */ +/** @} */ + +/** + * @defgroup SWN_Const + * @brief Switch N set. This is bit mask for register NSWFULLCON. + * @details + * It's used to initialize structure @ref SWMatrixCfg_Type. + * The bit masks can be OR'ed together. For example + * - `SWN_RCAL0|SWN_AIN1` means close SWN_RCAL0 and SWN_AIN1 in same time, and open all other N switches. + * - `SWN_SE0` means close SWN_SE0 and open all other N switches. + * @{ +*/ +#define SWN_OPEN 0 /**< Open all N switches */ +#define SWN_RCAL1 (1<<9) /**< Pin RCAL1 */ +#define SWN_AIN0 (1<<0) /**< Pin AIN0 */ +#define SWN_AIN1 (1<<1) /**< Pin AIN1 */ +#define SWN_AIN2 (1<<2) /**< Pin AIN2 */ +#define SWN_AIN3 (1<<3) /**< Pin AIN3 */ +#define SWN_SE0LOAD (1<<4) /**< SE0_LOAD is different from PIN SE0. It's the point after 100Ohm load resistor */ +#define SWN_DE0LOAD (1<<5) /**< DE0_Load is after Rload resistor */ +#define SWN_SE1LOAD (1<<6) /**< SE1_LOAD in ADuCM355 */ +#define SWN_AFE3LOAD (1<<6) /**< AFE3LOAD in ADuCM355 */ +#define SWN_DE1LOAD (1<<7) /**< ADuCM355 Only*/ +#define SWN_SE0 (1<<8) /**< SE0 here means the PIN SE0. */ +#define SWN_NL (1<<10) /**< Internal NL switch */ +#define SWN_NL2 (1<<11) /**< Internal NL2 switch */ +/** @} */ + +/** + * @defgroup SWT_Const + * @brief Switch T set. This is bit mask for register TSWFULLCON. + * @details + * It's used to initialize structure @ref SWMatrixCfg_Type. + * The bit masks can be OR'ed together. For example + * - SWT_RCAL0|SWT_AIN1 means close SWT_RCAL0 and SWT_AIN1 in same time, and open all other T switches. + * - SWT_SE0LOAD means close SWT_SE0LOAD and open all other T switches. + * @{ +*/ +#define SWT_OPEN 0 /**< Open all T switches */ +#define SWT_RCAL1 (1<<11) /**< Pin RCAL1 */ +#define SWT_AIN0 (1<<0) /**< Pin AIN0 */ +#define SWT_AIN1 (1<<1) /**< Pin AIN1 */ +#define SWT_AIN2 (1<<2) /**< Pin AIN2 */ +#define SWT_AIN3 (1<<3) /**< Pin AIN3 */ +#define SWT_SE0LOAD (1<<4) /**< SE0_LOAD is different from PIN SE0. It's the point after 100Ohm load resistor */ +#define SWT_DE0 (1<<5) /**< DE0 pin. */ +#define SWT_SE1LOAD (1<<6) /**< SE1_LOAD on ADuCM355*/ +#define SWT_AFE3LOAD (1<<6) /**< AFE3_LOAD on ADuCM355*/ +#define SWT_DE1 (1<<7) /**< ADuCM355 Only*/ +#define SWT_TRTIA (1<<8) /**< T9 switch. Connect RTIA to T matrix */ +#define SWT_DE0LOAD (1<<9) /**< DE0Load is the position after Rload Resisor */ +#define SWT_DE1LOAD (1<<10) /**< DE1Load is the position after Rload Resisor */ +/** @} */ + +/** @} Switch_Matrix_Block_Const */ + + +/** + * @defgroup Waveform_Generator_Block_Const + * @{ +*/ +/** + * @defgroup WGTYPE_Const + * @brief Waveform generator signal type + * @{ +*/ +#define WGTYPE_MMR 0 /**< Direct write to DAC using register */ +#define WGTYPE_SIN 2 /**< Sine wave generator */ +#define WGTYPE_TRAPZ 3 /**< Trapezoid generator */ +/** @} */ +/** @} Waveform_Generator_Block_Const */ + +/** + * @defgroup HSDAC_Block_Const + * @{ +*/ +/* Excitation buffer gain selection */ +/** + * @defgroup EXCITBUFGAIN_Const + * @{ +*/ +#define EXCITBUFGAIN_2 0 /**< Excitation buffer gain is x2 */ +#define EXCITBUFGAIN_0P25 1 /**< Excitation buffer gain is x1/4 */ +/** @} */ + +/** + * @defgroup HSDACGAIN_Const + * @{ +*/ +/* HSDAC PGA Gain selection(DACCON.BIT0) */ +#define HSDACGAIN_1 0 /**< Gain is x1 */ +#define HSDACGAIN_0P2 1 /**< Gain is x1/5 */ +/** @} */ +/** @} */ //HSDAC_Block_Const + +/** + * @defgroup HSTIA_Block_Const + * @{ + * */ +/* HSTIA Amplifier Positive Input selection */ + +/** + * @defgroup HSTIABIAS_Const + * @warning When select Vzero0 as bias, close LPDAC switch + * @{ +*/ +#define HSTIABIAS_1P1 0 /**< Internal 1.1V common voltage from internal 1.1V reference buffer */ +#define HSTIABIAS_VZERO0 1 /**< From LPDAC0 Vzero0 output */ +#define HSTIABIAS_VZERO1 2 /**< From LPDAC1 Vzero1 output. Only available on ADuCM355. */ +/** @} */ + + +/* HSTIA Internal RTIA selection */ + +/** + * @defgroup HSTIARTIA_Const + * @{ +*/ +#define HSTIARTIA_200 0 /**< HSTIA Internal RTIA resistor 200 */ +#define HSTIARTIA_1K 1 /**< HSTIA Internal RTIA resistor 1K */ +#define HSTIARTIA_5K 2 /**< HSTIA Internal RTIA resistor 5K */ +#define HSTIARTIA_10K 3 /**< HSTIA Internal RTIA resistor 10K */ +#define HSTIARTIA_20K 4 /**< HSTIA Internal RTIA resistor 20K */ +#define HSTIARTIA_40K 5 /**< HSTIA Internal RTIA resistor 40K */ +#define HSTIARTIA_80K 6 /**< HSTIA Internal RTIA resistor 80K */ +#define HSTIARTIA_160K 7 /**< HSTIA Internal RTIA resistor 160K */ +#define HSTIARTIA_OPEN 8 /**< Open internal resistor */ +/** @} */ + +/** + * @defgroup HSTIADERTIA_Const + * @{ +*/ +#define HSTIADERTIA_50 0 /**< 50Ohm Settings depends on RLOAD resistor. */ +#define HSTIADERTIA_100 1 /**< 100Ohm Settings depends on RLOAD resistor.*/ +#define HSTIADERTIA_200 2 /**< 200Ohm Settings depends on RLOAD resistor.*/ +#define HSTIADERTIA_1K 3 /**< set bit[7:3] to 0x0b(11) */ +#define HSTIADERTIA_5K 4 /**< set bit[7:3] to 0x0c(12) */ +#define HSTIADERTIA_10K 5 /**< set bit[7:3] to 0x0d(13) */ +#define HSTIADERTIA_20K 6 /**< set bit[7:3] to 0x0e(14) */ +#define HSTIADERTIA_40K 7 /**< set bit[7:3] to 0x0f(15) */ +#define HSTIADERTIA_80K 8 /**< set bit[7:3] to 0x10(16) */ +#define HSTIADERTIA_160K 9 /**< set bit[7:3] to 0x11(17) */ +#define HSTIADERTIA_TODE 10 /**< short HSTIA output to DE0 pin. set bit[7:3] to 0x12(18) */ +#define HSTIADERTIA_OPEN 11 /**< Default state is set to OPEN RTIA by setting bit[7:3] to 0x1f */ +/** @} */ + +/* HSTIA DE0 Terminal internal RLOAD selection */ +/** + * @defgroup HSTIADERLOAD_Const + * @{ +*/ +#define HSTIADERLOAD_0R 0 /**< set bit[2:0] to 0x00 */ +#define HSTIADERLOAD_10R 1 /**< set bit[2:0] to 0x01 */ +#define HSTIADERLOAD_30R 2 /**< set bit[2:0] to 0x02 */ +#define HSTIADERLOAD_50R 3 /**< set bit[2:0] to 0x03 */ +#define HSTIADERLOAD_100R 4 /**< set bit[2:0] to 0x04 */ +#define HSTIADERLOAD_OPEN 5 /**< RLOAD open means open switch between HSTIA negative input and Rload resistor().Default state is OPEN RLOAD by setting HSTIARES03CON[2:0] to 0x5, 0x6 or 0x7 */ +/** @} */ + +/** + * @defgroup HSTIAPWRMOE_Const + * @{ +*/ +#define HSTIAPWRMOE_LP 0 /**< HSTIA in LP mode */ +#define HSTIAPWRMOE_HP 1 /**< HSTIA in HP mode */ +/** @} */ + + +/** @} HSTIA_Block_Const */ +/** + * @} High_Speed_Loop_Const + * @} High_Speed_Loop +*/ + +/** + * @addtogroup Low_Power_Loop + * Low power includes low power DAC and two low power amplifiers(PA and TIA) + * @{ + * @defgroup Low_Power_Loop_Const + * The constant used in Low power loop. + * @{ +*/ + +/** + * @defgroup LPDAC_Block_Const + * @{ + * */ +/** + * @defgroup LPDAC_Const + * Select which LPDAC is accessing. + * @note This parameter must be configured correctly + * @{ +*/ +#define LPDAC0 0 /**< LPDAC0 */ +#define LPDAC1 1 /**< LPDAC1, ADuCM355 Only */ +/** @} */ +/** + * @defgroup LPDACSRC_Const + * LPDAC data source selection. Either from MMR or from waveform generator. + * @{ +*/ +#define LPDACSRC_MMR 0 /**< Get data from register REG_AFE_LPDACDAT0DATA0 */ +#define LPDACSRC_WG 1 /**< Get data from waveform generator */ +/** @} */ + +/** + * @defgroup LPDACSW_Const + * @brief LPDAC switch settings + * @{ +*/ +#define LPDACSW_VBIAS2LPPA 0x10 /**< switch between LPDAC Vbias output and LPPA(low power PA(Potential Amplifier)) */ +#define LPDACSW_VBIAS2PIN 0x08 /**< Switch between LPDAC Vbias output and Vbias pin */ +#define LPDACSW_VZERO2LPTIA 0x04 /**< Switch between LPDAC Vzero output and LPTIA positive input */ +#define LPDACSW_VZERO2PIN 0x02 /**< Switch between LPDAC Vzero output and Vzero pin */ +#define LPDACSW_VZERO2HSTIA 0x01 /**< Switch between LPDAC Vzero output and HSTIA positive input MUX */ +/** @} */ + +/** + * @defgroup LPDACVZERO_Const + * @brief Vzero MUX selection + * @{ +*/ +#define LPDACVZERO_6BIT 0 /**< Connect Vzero to 6bit LPDAC output */ +#define LPDACVZERO_12BIT 1 /**< Connect Vzero to 12bit LPDAC output */ +/** @} */ + +/** + * @defgroup LPDACVBIAS_Const + * @brief Vbias MUX selection + * @{ +*/ +#define LPDACVBIAS_6BIT 1 /**< Connect Vbias to 6bit LPDAC output */ +#define LPDACVBIAS_12BIT 0 /**< Connect Vbias to 12bit LPDAC output */ +/** @} */ + + +/** + * @defgroup LPDACREF_Const + * @brief LPDAC reference selection + * @{ +*/ +#define LPDACREF_2P5 0 /**< Internal 2.5V reference */ +#define LPDACREF_AVDD 1 /**< Use AVDD as reference */ +/** @} */ + +/** @} */ //LPDAC_Block_Const + +/** + * @defgroup LPAMP_Block_Const + * @brief Low power amplifies include potential-state amplifier(PA in short) and TIA. + * @{ + * */ + +/** + * @defgroup LPTIA_Const + * @brief LPTIA selecion + * @{ + * */ +#define LPTIA0 0 /**< LPTIA0 */ +#define LPTIA1 1 /**< LPTIA1, ADuCM355 Only */ +/** @} */ + +/** + * @defgroup LPTIARF_Const + * @brief LPTIA LPF Resistor selection + * @{ + * */ +#define LPTIARF_OPEN 0 /**< Disconnect Rf resistor */ +#define LPTIARF_SHORT 1 /**< Bypass Rf resistor */ +#define LPTIARF_20K 2 /**< 20kOhm Rf */ +#define LPTIARF_100K 3 /**< Rf resistor 100kOhm */ +#define LPTIARF_200K 4 /**< Rf resistor 200kOhm */ +#define LPTIARF_400K 5 /**< Rf resistor 400kOhm */ +#define LPTIARF_600K 6 /**< Rf resistor 600kOhm */ +#define LPTIARF_1M 7 /**< Rf resistor 1MOhm */ +/** @} */ + +/** + * @defgroup LPTIARLOAD_Const + * @brief LPTIA Rload Selection + * @{ +*/ +#define LPTIARLOAD_SHORT 0 /**< 0Ohm Rload */ +#define LPTIARLOAD_10R 1 /**< 10Ohm Rload */ +#define LPTIARLOAD_30R 2 /**< Rload resistor 30Ohm */ +#define LPTIARLOAD_50R 3 /**< Rload resistor 50Ohm */ +#define LPTIARLOAD_100R 4 /**< Rload resistor 100Ohm */ +#define LPTIARLOAD_1K6 5 /**< Only available when RTIA setting >= 2KOHM */ +#define LPTIARLOAD_3K1 6 /**< Only available when RTIA setting >= 4KOHM */ +#define LPTIARLOAD_3K6 7 /**< Only available when RTIA setting >= 4KOHM */ +/** @} */ + +/** + * @defgroup LPTIARTIA_Const + * @brief LPTIA RTIA Selection + * @note The real RTIA resistor value dependents on Rload settings. + * @{ +*/ +#define LPTIARTIA_OPEN 0 /**< Disconnect LPTIA Internal RTIA */ +#define LPTIARTIA_200R 1 /**< 200Ohm Internal RTIA */ +#define LPTIARTIA_1K 2 /**< 1KOHM */ +#define LPTIARTIA_2K 3 /**< 2KOHM */ +#define LPTIARTIA_3K 4 /**< 3KOHM */ +#define LPTIARTIA_4K 5 /**< 4KOHM */ +#define LPTIARTIA_6K 6 /**< 6KOHM */ +#define LPTIARTIA_8K 7 /**< 8KOHM */ +#define LPTIARTIA_10K 8 /**< 10KOHM */ +#define LPTIARTIA_12K 9 /**< 12KOHM */ +#define LPTIARTIA_16K 10 /**< 16KOHM */ +#define LPTIARTIA_20K 11 /**< 20KOHM */ +#define LPTIARTIA_24K 12 /**< 24KOHM */ +#define LPTIARTIA_30K 13 /**< 30KOHM */ +#define LPTIARTIA_32K 14 /**< 32KOHM */ +#define LPTIARTIA_40K 15 /**< 40KOHM */ +#define LPTIARTIA_48K 16 /**< 48KOHM */ +#define LPTIARTIA_64K 17 /**< 64KOHM */ +#define LPTIARTIA_85K 18 /**< 85KOHM */ +#define LPTIARTIA_96K 19 /**< 96KOHM */ +#define LPTIARTIA_100K 20 /**< 100KOHM */ +#define LPTIARTIA_120K 21 /**< 120KOHM */ +#define LPTIARTIA_128K 22 /**< 128KOHM */ +#define LPTIARTIA_160K 23 /**< 160KOHM */ +#define LPTIARTIA_196K 24 /**< 196KOHM */ +#define LPTIARTIA_256K 25 /**< 256KOHM */ +#define LPTIARTIA_512K 26 /**< 512KOHM */ +/** @} */ + +/** + * @defgroup LPAMP_Const + * LPAMP selecion. On AD594x, only LPAMP0 is available. + * @note This parameter must be configured correctly. + * @{ + * */ +#define LPAMP0 0 /**< LPAMP0, AMP include both LPTIA and Potentio-stat amplifiers */ +#define LPAMP1 1 /**< LPAMP1, ADuCM355 Only */ +/** @} */ + +/** + * @defgroup LPAMPPWR_Const + * @brief Low power amplifier(PA and TIA) power mode selection. + * @{ +*/ +#define LPAMPPWR_NORM 0 /**< Normal Power mode */ +#define LPAMPPWR_BOOST1 1 /**< Boost power to level 1 */ +#define LPAMPPWR_BOOST2 2 /**< Boost power to level 2 */ +#define LPAMPPWR_BOOST3 3 /**< Boost power to level 3 */ +#define LPAMPPWR_HALF 4 /**< Put PA and TIA in half power mode */ +/** @} */ + +#define LPTIASW(n) (1L<>2)&0x7f)<<24) \ + |(((uint32_t)(data))&0xffffff)) + +/* Some commands used frequently */ +#define SEQ_NOP() SEQ_WAIT(0) /**< SEQ_NOP is just a simple wait command that wait one system clock */ +#define SEQ_HALT() SEQ_WR(REG_AFE_SEQCON,0x12) /**< Can halt sequencer. Used for debug */ +#define SEQ_STOP() SEQ_WR(REG_AFE_SEQCON,0x00) /**< Disable sequencer, this will generate End of Sequence interrupt */ + +#define SEQ_SLP() SEQ_WR(REG_AFE_SEQTRGSLP, 1) /**< Trigger sleep. If sleep is allowed, AFE will go to sleep/hibernate mode */ + +#define SEQ_INT0() SEQ_WR(REG_AFE_AFEGENINTSTA, (1L<<0)) /**< Generate custom interrupt 0 */ +#define SEQ_INT1() SEQ_WR(REG_AFE_AFEGENINTSTA, (1L<<1)) /**< Generate custom interrupt 1 */ +#define SEQ_INT2() SEQ_WR(REG_AFE_AFEGENINTSTA, (1L<<2)) /**< Generate custom interrupt 2 */ +#define SEQ_INT3() SEQ_WR(REG_AFE_AFEGENINTSTA, (1L<<3)) /**< Generate custom interrupt 3 */ + +/* Helper to calculate sequence length in array */ +#define SEQ_LEN(n) (sizeof(n)/4) /**< Calculate how many commands are in sepecified array. */ +/** @} */ //Sequencer_Helper + +/* FIFO */ +/** + * @defgroup FIFOMODE_Const + * @{ +*/ +#define FIFOMODE_FIFO 2 /**< Standard FIFO mode. If FIFO is full, reject all comming data and put FIFO to fault state, report interrupt if enabled */ +#define FIFOMODE_STREAM 3 /**< Stream mode. If FIFO is full, discard older data. Report FIFO full interrupt if enabled */ +/** @} */ + +/** + * @defgroup FIFOSRC_Const + * @{ +*/ +#define FIFOSRC_SINC3 0 /**< SINC3 data */ +#define FIFOSRC_DFT 2 /**< DFT real and imaginary part */ +#define FIFOSRC_SINC2NOTCH 3 /**< SINC2+NOTCH block. Notch can be bypassed, so SINC2 data can be feed to FIFO */ +#define FIFOSRC_VAR 4 /**< Statistic variarance output */ +#define FIFOSRC_MEAN 5 /**< Statistic mean output */ +/** @} */ + +/** + * @defgroup FIFO_Helper + * @{ +*/ +/** + * Method to identify FIFO channel ID: + * [31:25][24:23][22:16][15:0] + * [ ECC ][SEQID][CH_ID][DATA] + * + * CH_ID: [22:16] 7bit in total: + * xxxxx_xx + * 11111_xx : DFT results + * 11110_xx : Mean of statistic block + * 11101_xx : Variance of statistic block + * 1xxxx_xx : Notch filter result, where xxx_xx is the ADC MUX P settings(6bits of reg ADCCON[5:0]). + * 0xxxx_xx : SINC3 filter result, where xxx_xx is the ADC MUX P settings(6bits of reg ADCCON[5:0]). +*/ +#define FIFO_SEQID(data) ((((uint32_t)data)>>23)&0x3) /**< Return seqid of this FIFO result */ +#define FIFO_ECC(data) ((((uint32_t)data)>>25)&0x7f) /**< Return ECC of this FIFO result */ +#define FIFO_CHANID(data) ((((uint32_t)data)>>16)&0x7f) /**< Return Channel ID */ +#define FIFOCHANID_MUXP(data) ((((uint32_t)data)>>16)&0x3f) /**< Return the ADC MUXP selection */ + +#define ISCHANID_DFT(data) ((((((uint32_t)data)>>18)&0x1f)==0x1f)?bTRUE:bFALSE) /**< If the channel id is DFT */ +#define ISCHANID_MEAN(data) ((((((uint32_t)data)>>18)&0x1f)==0x1e)?bTRUE:bFALSE) /**< If the channel id is MEAN */ +#define ISCHANID_VAR(data) ((((((uint32_t)data)>>18)&0x1f)==0x1d)?bTRUE:bFALSE) /**< If the channel id is Variance */ +#define ISCHANID_SINC3(data) ((((((uint32_t)data)>>18)&0x1f)< 0x10)?bTRUE:bFALSE) /**< If the channel id is SINC3 */ +#define ISCHANID_NOTCH(data) ((((((uint32_t)data)>>18)&0x1f)>=0x10)&&(((((uint32_t)data>>18)&0x1f) < 0x1d)?bTRUE:bFALSE)) /**< If the channel id is Notch */ +/** @} */ + +/** + * @defgroup FIFOSIZE_Const + * @brief Set FIFO size. + * @warning The total available SRAM is 6kB. It's shared by FIFO and sequencer. + * @{ +*/ +#define FIFOSIZE_32B 0 /**< The selfbuild in 32Byte for data FIFO. All 6kB SRAM for sequencer */ +#define FIFOSIZE_2KB 1 /**< DATA FIFO use 2kB. The reset 4kB is used for sequencer */ +#define FIFOSIZE_4KB 2 /**< 4kB for Data FIFO. 2kB for sequencer */ +#define FIFOSIZE_6KB 3 /**< All 6kB for Data FIFO. Build in 32Bytes memory for sequencer */ +/** @} */ + +/* Wake up timer */ +/** + * @defgroup WUPTENDSEQ_Const + * @{ +*/ +#define WUPTENDSEQ_A 0 /**< End at slot A */ +#define WUPTENDSEQ_B 1 /**< End at slot B */ +#define WUPTENDSEQ_C 2 /**< End at slot C */ +#define WUPTENDSEQ_D 3 /**< End at slot D */ +#define WUPTENDSEQ_E 4 /**< End at slot E */ +#define WUPTENDSEQ_F 5 /**< End at slot F */ +#define WUPTENDSEQ_G 6 /**< End at slot G */ +#define WUPTENDSEQ_H 7 /**< End at slot H */ +/** @} */ + +/** + * @} End of sequencer_and_FIFO block + * @} Sequencer_FIFO + * */ + +/** + * @addtogroup MISC_Block + * @{ + * @defgroup MISC_Block_Const + * @brief This block includes clock, GPIO, configuration. + * @{ +*/ + +/* Helper for calculate clocks needed for various of data type */ +/** + * @defgroup DATATYPE_Const + * @{ +*/ +#define DATATYPE_ADCRAW 0 /**< ADC raw data */ +#define DATATYPE_SINC3 1 /**< SINC3 data */ +#define DATATYPE_SINC2 2 /**< SINC2 Data */ +#define DATATYPE_DFT 3 /**< DFT */ +#define DATATYPE_NOTCH 4 /**< Notch filter output. (when notch is not bypassed) */ +//#define DATATYPE_MEAN +/** @} */ + + +/** + * @defgroup SLPKEY_Const + * @{ +*/ +#define SLPKEY_LOCK 0 /**< any incorrect value will lock the key */ +#define SLPKEY_UNLOCK 0xa47e5 /**< The correct key for register SEQSLPLOCK */ +/** @} */ + +/** + * @defgroup HPOSCOUT_Const + * @brief Set HPOSC output clock frequency, 16MHz or 32MHz. + * @{ +*/ +#define HPOSCOUT_32MHZ 0 /**< Configure internal HFOSC output 32MHz clock */ +#define HPOSCOUT_16MHZ 1 /**< 16MHz Clock */ +/** @} */ + +/* GPIO */ +/** + * @defgroup AGPIOPIN_Const + * @brief The pin masks for register GP0OEN, GP0PE, GP0IEN,..., GP0TGL + * @{ +*/ +#define AGPIO_Pin0 0x01 /**< AFE GPIO0, only available on AD5940 and AD5941, not ADuCM355 */ +#define AGPIO_Pin1 0x02 /**< AFE GPIO1, only available on AD5940 and AD5941, not ADuCM355 */ +#define AGPIO_Pin2 0x04 /**< AFE GPIO2, only available on AD5940 and AD5941, not ADuCM355 */ +#define AGPIO_Pin3 0x08 /**< AFE GPIO3, only available on AD5941. */ +#define AGPIO_Pin4 0x10 /**< AFE GPIO4, only available on AD5941. */ +#define AGPIO_Pin5 0x20 /**< AFE GPIO5, only available on AD5941. */ +#define AGPIO_Pin6 0x40 /**< AFE GPIO6, only available on AD5941. */ +#define AGPIO_Pin7 0x80 /**< AFE GPIO7, only available on AD5941. */ +/** @} */ + +/** + * @defgroup GP0FUNC_Const + * @{ +*/ +#define GP0_INT 0 /**< Interrupt Controller 0 output */ +#define GP0_TRIG 1 /**< Sequence0 trigger */ +#define GP0_SYNC 2 /**< Use Sequencer to controll GP0 output level */ +#define GP0_GPIO 3 /**< Normal GPIO function */ +/** @} */ + +/** + * @defgroup GP1FUNC_Const + * @{ +*/ +#define GP1_GPIO (0<<2) /**< Normal GPIO function */ +#define GP1_TRIG (1<<2) /**< Sequence1 trigger */ +#define GP1_SYNC (2<<2) /**< Use Sequencer to controll GP1 output level */ +#define GP1_SLEEP (3<<2) /**< Internal Sleep Signal */ +/** @} */ + +/** + * @defgroup GP2FUNC_Const + * @{ +*/ +#define GP2_PORB (0<<4) /**< Internal Power ON reset signal */ +#define GP2_TRIG (1<<4) /**< Sequence1 trigger */ +#define GP2_SYNC (2<<4) /**< Use Sequencer to controll GP2 output level */ +#define GP2_EXTCLK (3<<4) /**< External Clock input(32kHz/16MHz/32MHz) */ +/** @} */ + +/** + * @defgroup GP3FUNC_Const + * @{ +*/ +#define GP3_GPIO (0<<6) /**< Normal GPIO function */ +#define GP3_TRIG (1<<6) /**< Sequence3 trigger */ +#define GP3_SYNC (2<<6) /**< Use Sequencer to controll GP3 output level */ +#define GP3_INT0 (3<<6) /**< Interrupt Controller 0 output */ +/** @} */ + +/** + * @defgroup GP4FUNC_Const + * @note GP4 (Not available on AD5941) + * @{ +*/ +#define GP4_GPIO (0<<8) /**< Normal GPIO function */ +#define GP4_TRIG (1<<8) /**< Sequence0 trigger */ +#define GP4_SYNC (2<<8) /**< Use Sequencer to controll GP4 output level */ +#define GP4_INT1 (3<<8) /**< Interrupt Controller 1 output */ +/** @} */ + +/** + * @defgroup GP5FUNC_Const + * @note GP5 (Not available on AD5941) + * @{ +*/ +#define GP5_GPIO (0<<10) /**< Internal Power ON reset signal */ +#define GP5_TRIG (1<<10) /**< Sequence1 trigger */ +#define GP5_SYNC (2<<10) /**< Use Sequencer to controll GP5 output level */ +#define GP5_EXTCLK (3<<10) /**< External Clock input(32kHz/16MHz/32MHz) */ +/** @} */ + +/** + * @defgroup GP6FUNC_Const + * @note GP6 (Not available on AD5941) + * @{ +*/ +#define GP6_GPIO (0<<12) /**< Normal GPIO function */ +#define GP6_TRIG (1<<12) /**< Sequence2 trigger */ +#define GP6_SYNC (2<<12) /**< Use Sequencer to controll GP6 output level */ +#define GP6_INT0 (3<<12) /**< Interrupt Controller 0 output */ +/** @} */ + +/** + * @defgroup GP7FUNC_Const + * @note GP7 (Not available on AD5941) + * @{ +*/ +#define GP7_GPIO (0<<14) /**< Normal GPIO function */ +#define GP7_TRIG (1<<14) /**< Sequence2 trigger */ +#define GP7_SYNC (2<<14) /**< Use Sequencer to controll GP7 output level */ +#define GP7_INT (3<<14) /**< Interrupt Controller 1 output */ +/** @} */ + +//LPModeClk +/** + * @defgroup LPMODECLK_Const + * @{ +*/ +#define LPMODECLK_HFOSC 0 /**< Use HFOSC 16MHz/32MHz clock as system clock */ +#define LPMODECLK_LFOSC 1 /**< Use LFOSC 32kHz clock as system clock */ +/** @} */ + +/* Clock */ +/** + * @defgroup SYSCLKSRC_Const + * @brief Select system clock source. The clock must be available. If unavailable clock is selected, we can reset AD5940. + * The system clock should be limited to 32MHz. If external clock or XTAL is faster than 16MHz, we use system clock divider to ensure it's always in range of 16MHz. + * @warning Maximum SPI clock has relation with system clock. Limit the SPI clock to ensure SPI clock is slower than system clock. + * @{ +*/ +#define SYSCLKSRC_HFOSC 0 /**< Internal HFOSC. CLock is 16MHz or 32MHz configurable. Set clock divider to ensure system clock is always 16MHz */ +#define SYSCLKSRC_XTAL 1 /**< External crystal. It can be 16MHz or 32MHz.Set clock divider to ensure system clock is always 16MHz */ +#define SYSCLKSRC_LFOSC 2 /**< Internal 32kHz clock. Note the SPI clock also sourced with 32kHz so the register read/write frequency is lower down. */ +#define SYSCLKSRC_EXT 3 /**< External clock from GPIO, AD594x Only */ +/** @} */ + +/** + * @defgroup ADCCLKSRC_Const + * @brief Select ADC clock source. + * The maximum clock is 32MHz. + * @warning The ADC raw data update rate is equal to ADCClock/20. When ADC clock is 32MHz, sample rate is 1.6MSPS. + * The SINC3 filter clock are sourced from ADC clock and should be limited to 16MHz. When ADC clock is set to 32MHz. Clear bit ADCFILTERCON.BIT0 + * to enable the SINC3 clock divider. + * @{ +*/ +#define ADCCLKSRC_HFOSC 0 /**< Internal HFOSC. 16MHz or 32MHz which is configurable */ +#define ADCCLKSRC_XTAL 1 /**< External crystal. Set ADC clock divider to get either 16MHz or 32MHz clock */ +//#define ADCCLKSRC_LFOSC 2 /**< Do not use */ +#define ADCCLKSRC_EXT 3 /**< External clock from GPIO. Set ADC clock divider to get the clock you want */ +/** @} */ + + +/** + * @defgroup ADCCLKDIV_Const + * @brief The divider for ADC clock. ADC clock = ClockSrc/Divider. + * @{ +*/ +#define ADCCLKDIV_1 1 /**< Divider ADCClk = ClkSrc/1 */ +#define ADCCLKDIV_2 2 /**< Divider ADCClk = ClkSrc/2 */ +/** @} */ + +/** + * @defgroup SYSCLKDV_Const + * @brief The divider for system clock. System clock = ClockSrc/Divider. + * @{ +*/ +#define SYSCLKDIV_1 1 /**< Divider SysClk = ClkSrc/1 */ +#define SYSCLKDIV_2 2 /**< Divider SysClk = ClkSrc/2 */ +/** @} */ + +/** + * @defgroup PGACALTYPE_Const + * @brief Calibration Type + * @{ +*/ +#define PGACALTYPE_OFFSET 0 /**< Calibrate offset */ +#define PGACALTYPE_GAIN 1 /**< Calibrate gain */ +#define PGACALTYPE_OFFSETGAIN 2 /**< Calibrate offset and gain */ +/** @} */ + +/** + * @defgroup AD5940ERR_Const + * @brief AD5940 error code used by library and example codes. + * @{ +*/ +#define AD5940ERR_OK 0 /**< No error */ +#define AD5940ERR_ERROR -1 /**< General error message */ +#define AD5940ERR_PARA -2 /**< Parameter is illegal */ +#define AD5940ERR_NULLP -3 /**< Null pointer */ +#define AD5940ERR_BUFF -4 /**< Buffer limited. */ +#define AD5940ERR_ADDROR -5 /**< Out of Range. Register address is out of range. */ +#define AD5940ERR_SEQGEN -6 /**< Sequence generator error */ +#define AD5940ERR_SEQREG -7 /**< Register info is not found */ +#define AD5940ERR_SEQLEN -8 /**< Sequence length is too long. */ +#define AD5940ERR_WAKEUP -9 /**< Unable to wakeup AFE in specified time */ +#define AD5940ERR_TIMEOUT -10 /**< Time out error. */ +#define AD5940ERR_CALOR -11 /**< calibration out of range. */ +#define AD5940ERR_APPERROR -100 /**< Used in example code to indicated the application has not been initialized. */ +/** @} */ + +#ifndef NULL + #define NULL (void *) 0 /**< Null, if it's not defined. */ +#endif +#define MATH_PI 3.1415926f /**< Pi defination. */ + +#define AD5940_ADIID 0x4144 /**< ADIID is fixed to 0x4144 */ +#define AD5940_CHIPID 0x0000 /**< CHIPID is changing with silicon version */ +#define M355_ADIID 0x4144 /**< ADIID is fixed to 0x4144 */ +#define M355_CHIPID 0x0000 /**< CHIPID is changing with silicon version */ + +#define AD5940_SWRST 0xa158 /**< AD594x only. The value to perform software reset via reigster SWRSTCON */ +#define KEY_OSCCON 0xcb14 /**< key of register OSCCON. The key is auto locked after writing to any other register */ +#define KEY_CALDATLOCK 0xde87a5af /**< Calibration key. */ +#define KEY_LPMODEKEY 0xc59d6 /**< LP mode key */ + +#define PARA_CHECK(n) /** add parameter check, Add DEBUG switch */ + +/** + * @} MISC_Block_Const + * @} MISC_Block + * */ +/** + * @defgroup TypeDefinitions + * @{ +*/ + +typedef int32_t AD5940Err; /**< error number defination */ + +/** + * bool definition for ad5940lib. +*/ +typedef enum +{ + bFALSE = 0, bTRUE = !bFALSE, /**< True and False definition*/ +}BoolFlag; + +typedef struct +{ + /* ADC/DAC/TIA reference and buffer */ + BoolFlag HpBandgapEn; /**< Enable High power band-gap. Clear bit AFECON.HPREFDIS will enable Bandgap, while set this bit will disable bandgap */ + BoolFlag Hp1V8BuffEn; /**< High power 1.8V reference buffer enable */ + BoolFlag Hp1V1BuffEn; /**< High power 1.1V reference buffer enable */ + BoolFlag Lp1V8BuffEn; /**< Low power 1.8V reference buffer enable */ + BoolFlag Lp1V1BuffEn; /**< Low power 1.1V reference buffer enable */ + /* Low bandwidth loop reference and buffer */ + BoolFlag LpBandgapEn; /**< Enable Low power band-gap. */ + BoolFlag LpRefBufEn; /**< Enable the 2.5V low power reference buffer */ + BoolFlag LpRefBoostEn; /**< Boost buffer current */ + /* DAC Reference Buffer */ + BoolFlag HSDACRefEn; /**< Enable DAC reference buffer from HP Bandgap */ + /* Misc. control */ + BoolFlag Hp1V8ThemBuff; /**< Thermal Buffer for internal 1.8V reference to AIN3 pin */ + BoolFlag Hp1V8Ilimit; /**< Current limit for High power 1.8V reference buffer */ + BoolFlag Disc1V8Cap; /**< Discharge 1.8V capacitor. Short external 1.8V decouple capacitor to ground. Be careful when use this bit */ + BoolFlag Disc1V1Cap; /**< Discharge 1.1V capacitor. Short external 1.1V decouple capacitor to ground. Be careful when use this bit */ +}AFERefCfg_Type; + +/** + * @defgroup ADC_BlockType + * @{ +*/ + +/** + * Structure for ADC Basic settings include MUX and PGA. +*/ +typedef struct +{ + uint32_t ADCMuxP; /**< ADC Positive input channel selection. select from @ref ADCMUXP */ + uint32_t ADCMuxN; /**< ADC negative input channel selection. select from @ref ADCMUXN */ + uint32_t ADCPga; /**< ADC PGA settings, select from @ref ADCPGA */ +}ADCBaseCfg_Type; + +/** + * Structure for ADC filter settings. +*/ +typedef struct +{ + uint32_t ADCSinc3Osr; + uint32_t ADCSinc2Osr; + uint32_t ADCAvgNum; /**< Average filter is enabled when DFT source is @ref DFTSRC_AVG in function @ref AD5940_DFTCfgS. This average filter is only used by DFT engine. */ + uint32_t ADCRate; /**< ADC Core sample rate */ + BoolFlag BpNotch; /**< Bypass Notch filter in SINC2+Notch block, so only SINC2 is used. ADCFILTERCON.BIT4 */ + BoolFlag BpSinc3; /**< Bypass SINC3 Module */ + BoolFlag Sinc2NotchEnable; /**< Enable SINC2+Notch block */ +}ADCFilterCfg_Type; +/** @} */ + +/** + * DFT Configuration structure. +*/ +typedef struct +{ + uint32_t DftNum; /**< DFT number */ + uint32_t DftSrc; /**< DFT Source */ + BoolFlag HanWinEn; /**< Enable Hanning window */ +}DFTCfg_Type; + +/** + * ADC digital comparator +*/ +typedef struct +{ + uint16_t ADCMin; /**< The ADC code minimum limit value */ + uint16_t ADCMinHys; + uint16_t ADCMax; /**< The ADC code maximum limit value */ + uint16_t ADCMaxHys; +}ADCDigComp_Type; + +/** + * Statistic function +*/ +typedef struct +{ + uint32_t StatDev; /**< Statistic standard deviation configure */ + uint32_t StatSample; /**< Sample size */ + BoolFlag StatEnable; /**< Set true to enable statistic block */ +}StatCfg_Type; + +/** + * Switch matrix configure */ +typedef struct +{ + uint32_t Dswitch; /**< D switch settings. Select from @ref SWD_Const*/ + uint32_t Pswitch; /**< P switch settings. Select from @ref SWP_Const */ + uint32_t Nswitch; /**< N switch settings. Select from @ref SWN_Const */ + uint32_t Tswitch; /**< T switch settings. Select from @ref SWT_Const */ +}SWMatrixCfg_Type; + +/** HSTIA Configure */ +typedef struct +{ + uint32_t HstiaBias; /**< When select Vzero as bias, the related switch(VZERO2HSTIA) at LPDAC should be closed */ + uint32_t HstiaRtiaSel; /**< RTIA selection @ref HSTIARTIA_Const */ + uint32_t HstiaCtia; /**< Set internal CTIA value from 1 to 32 pF */ + BoolFlag DiodeClose; /**< Close the switch for internal back to back diode */ + uint32_t HstiaDeRtia; /**< DE0 node RTIA selection @ref HSTIADERTIA_Const */ + uint32_t HstiaDeRload; /**< DE0 node Rload selection @ref HSTIADERLOAD_Const */ + uint32_t HstiaDe1Rtia; /**< (ADuCM355 only, ignored on AD594x)DE1 node RTIA selection @ref HSTIADERTIA_Const */ + uint32_t HstiaDe1Rload; /**< (ADuCM355 only)DE1 node Rload selection @ref HSTIADERLOAD_Const */ +}HSTIACfg_Type; + +/** HSDAC Configure */ +typedef struct +{ + uint32_t ExcitBufGain; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; /**< Divider for DAC update. Available range is 7~255. */ +}HSDACCfg_Type; + +/** LPDAC Configure + * @note The LPDAC structure: + * @code + * Switch to select DAC output to Vzero and Vbias nodes. Vzero and Vbias can select from DAC6BIT and DAC12BIT output freely. + * LPDAC >DAC6BIT ---- Vzero LPDACVZERO_12BIT + * \--- Vbias LPDACVBIAS_6BIT + * >DAC12BIT---- Vzero LPDACVZERO_6BIT + * \--- Vbias LPDACVBIAS_12BIT + * Vzero/Vbias switch, controlled by @ref LPDACCfg_Type LpDacSW + * Vzero ------PIN + * \-----LPTIA LPDACSW_VZERO2LPTIA. LPTIA positive input + * \----HSTIA LPDACSW_VZERO2LPAMP. HSTIA positive input. Note, there is a MUX on HSTIA positive input pin to select the bias voltage between Vzero and 1.1V fixed internal reference. + * Vbias ------PIN LPDACSW_VBIAS2PIN + * \-----LPAMP LPDACSW_VBIAS2LPAMP positive input. The potential state amplifier input, or called LPAMP or PA(potential amplifier). + * @endcode +*/ +typedef struct +{ + uint32_t LpdacSel; /**< Selectr from LPDAC0 or LPDAC1. LPDAC1 is only available on ADuCM355. */ + uint32_t LpDacSrc; /**< LPDACSRC_MMR or LPDACSRC_WG. Note: HSDAC is always connects to WG. Disable HSDAC if there is need. */ + uint32_t LpDacVzeroMux; /**< Select which DAC output connects to Vzero. 6Bit or 12Bit DAC */ + uint32_t LpDacVbiasMux; /**< Select which DAC output connects to Vbias */ + uint32_t LpDacSW; /**< LPDAC switch set. Only available from Si2 */ + uint32_t LpDacRef; /**< Reference selection. Either internal 2.5V LPRef or AVDD. select from @ref LPDACREF_Const*/ + BoolFlag DataRst; /**< Keep Reset register REG_AFE_LPDACDAT0DATA */ + BoolFlag PowerEn; /**< Power up REG_AFE_LPDACDAT0 */ + uint16_t DacData12Bit; /**< Data for 12bit DAC */ + uint16_t DacData6Bit; /**< Data for 6bit DAC */ +}LPDACCfg_Type; + +/** + * Low power amplifiers(PA and TIA) +*/ +typedef struct +{ + uint32_t LpAmpSel; /**< Select from LPAMP0 and LPAMP1. LPAMP1 is only available on ADuCM355. */ + uint32_t LpTiaRf; /**< The one order RC filter resistor selection. Select from @ref LPTIARF_Const */ + uint32_t LpTiaRload; /**< The Rload resistor right in front of LPTIA negative input terminal. Select from @ref LPTIARLOAD_Const*/ + uint32_t LpTiaRtia; /**< LPTIA RTIA resistor selection. Set it to open(@ref LPTIARTIA_Const) when use external resistor. */ + uint32_t LpAmpPwrMod; /**< Power mode for LP PA and LPTIA */ + uint32_t LpTiaSW; /**< Set of switches, using macro LPTIASW() to close switch */ + BoolFlag LpPaPwrEn; /**< Enable(bTRUE) or disable(bFALSE) power of PA(potential amplifier) */ + BoolFlag LpTiaPwrEn; /**< Enable(bTRUE) or Disable(bFALSE) power of LPTIA amplifier */ +}LPAmpCfg_Type; + +/** + * @brief Trapezoid Generator parameters + * The definition of the Trapezoid waveform is shown below. Note the Delay and Slope are all in clock unit. + * @code + * + * DCLevel2 _________ + * / \ + * / \ + * DCLevel1 _____/ \______ + * | | | | | + * Delay1|S1|Delay2 |S2| Delay1 repeat... + * Where S1 is slope1 and S2 is slop2 + * @endcode + * The DAC update rate from Trapezoid generator is SystemClock/50. The default SystemClock + * is internal HFOSC 16MHz. So the update rate is 320kHz. + * The time parameter specifies in clock number. + * For example, if Delay1 is set to 10, S1 is set 20, the time for Delay1 period is 10/320kHz = 31.25us, + * and time for S1 period is 20/320kHz = 62.5us. +*/ +typedef struct +{ + uint32_t WGTrapzDCLevel1; /**< Trapezoid generator DC level1, this value is written directly to corresponding register */ + uint32_t WGTrapzDCLevel2; /**< DC level2, similar to DCLevel1 */ + uint32_t WGTrapzDelay1; /**< Trapezoid generator delay 1 */ + uint32_t WGTrapzDelay2; /**< Trapezoid generator delay 2 */ + uint32_t WGTrapzSlope1; /**< Trapezoid generator Slope 1 */ + uint32_t WGTrapzSlope2; /**< Trapezoid generator Slope 2 */ +}WGTrapzCfg_Type; + +/** + * Sin wave generator parameters +*/ +typedef struct +{ + uint32_t SinFreqWord; /**< Frequency word */ + uint32_t SinAmplitudeWord; /**< Amplitude word, range is 0 to 2047 */ + uint32_t SinOffsetWord; /**< Offset word, range is 0 to 4095 */ + uint32_t SinPhaseWord; /**< the start phase of sine wave. Use to tune start phase of signal. */ +}WGSinCfg_Type; + +/** + * Waveform generator configuration +*/ +typedef struct +{ + uint32_t WgType; /**< Select from WGTYPE_MMR, WGTYPE_SIN, WGTYPE_TRAPZ. HSDAC is always connected to WG. */ + BoolFlag GainCalEn; /**< Enable Gain calibration */ + BoolFlag OffsetCalEn; /**< Enable offset calibration */ + WGTrapzCfg_Type TrapzCfg; /**< Configure Trapezoid generator */ + WGSinCfg_Type SinCfg; /**< Configure Sine wave generator */ + uint32_t WgCode; /**< The 12bit data WG will move to DAC data register. */ +}WGCfg_Type; + +/** + * High speed loop configuration + * */ +typedef struct +{ + SWMatrixCfg_Type SWMatCfg; /**< switch matrix configuration. */ + HSDACCfg_Type HsDacCfg; /**< HSDAC configuration. */ + WGCfg_Type WgCfg; /**< Waveform generator configuration. */ + HSTIACfg_Type HsTiaCfg; /**< HSTIA configuration. */ +}HSLoopCfg_Type; + +/** + * Low power loop Configure + * */ +typedef struct +{ + LPDACCfg_Type LpDacCfg; /**< LPDAC configuration. @note Must select LPDAC0 or LPDAC1 in structure. */ + LPAmpCfg_Type LpAmpCfg; /**< LPAMP(LPTIA and PA) configuration. @note Must select LPAMP0 or LPAMP1 in structure. */ +}LPLoopCfg_Type; + +/** + * DSP Configure + * */ +typedef struct +{ + ADCBaseCfg_Type ADCBaseCfg; /**< ADC base configuration */ + ADCFilterCfg_Type ADCFilterCfg; /**< ADC filter configuration include SINC3/SINC2/Notch/Average(for DFT only) */ + ADCDigComp_Type ADCDigCompCfg; /**< ADC digital comparator */ + DFTCfg_Type DftCfg; /**< DFT configuration include data source, DFT number and Hanning Window */ + StatCfg_Type StatCfg; /**< Statistic block */ +}DSPCfg_Type; + +/** + * GPIO Configure + * */ +typedef struct +{ + uint32_t FuncSet; /**< AGP0 to AGP7 function sets */ + uint32_t OutputEnSet; /**< AGPIO_Pin0|AGPIO_Pin1|...|AGPIO_Pin7, Enable output of selected pins, disable other pins */ + uint32_t InputEnSet; /**< Enable input of selected pins, disable other pins */ + uint32_t PullEnSet; /**< Enable pull up or down on selected pin. disable other pins */ + uint32_t OutVal; /**< Value for GPIOOUT register */ +}AGPIOCfg_Type; + +/** + * FIFO configure +*/ +typedef struct +{ + BoolFlag FIFOEn; /**< Enable DATAFIFO. Disable FIFO will reset FIFO */ + uint32_t FIFOMode; /**< Stream mode or standard FIFO mode */ + uint32_t FIFOSize; /**< How to allocate the internal 6kB SRAM. Data FIFO and sequencer share all 6kB SRAM */ + uint32_t FIFOSrc; /**< Select which data source will be stored to FIFO */ + uint32_t FIFOThresh; /**< FIFO threshold value, 0 to 1023. Threshold can be used to generate interrupt so MCU can read back data before FIFO is full */ +}FIFOCfg_Type; + +/** + * Sequencer configure +*/ +typedef struct +{ + uint32_t SeqMemSize; /**< Sequencer memory size. SRAM is used by both FIFO and Sequencer. Make sure the total SRAM used is less than 6kB. */ + BoolFlag SeqEnable; /**< Enable sequencer. Only with valid trigger, sequencer can run */ + BoolFlag SeqBreakEn; /**< Do not use it */ + BoolFlag SeqIgnoreEn; /**< Do not use it */ + BoolFlag SeqCntCRCClr; /**< Clear sequencer count and CRC */ + uint32_t SeqWrTimer; /**< Set wait how much clocks after every commands executed */ +}SEQCfg_Type; + +/** + * Sequence info structure +*/ +typedef struct +{ + uint32_t SeqId; /**< The Sequence ID @ref SEQID_Const */ + uint32_t SeqRamAddr; /**< The start address that in AF5940 SRAM */ + uint32_t SeqLen; /**< Sequence length */ + BoolFlag WriteSRAM; /**< Write command to SRAM or not. */ + const uint32_t *pSeqCmd; /**< Pointer to the sequencer commands that stored in MCU */ +}SEQInfo_Type; + +typedef struct +{ + uint32_t PinSel; /**< Select which pin are going to be configured. @ref AGPIOPIN_Const */ + uint32_t SeqPinTrigMode; /**< The pin detect mode. Select from @ref SEQPINTRIGMODE_Const */ + BoolFlag bEnable; /**< Allow detected pin action to trigger corresponding sequence. */ +}SeqGpioTrig_Cfg; + +/** + * Wakeup Timer Configure + * */ +typedef struct +{ + uint32_t WuptEndSeq; /**< end sequence selection @ref WUPTENDSEQ_Const. Wupt will go back to slot A after this one is executed. */ + uint32_t WuptOrder[8]; /**< The 8 slots for WakeupTimer. Place @ref SEQID_Const to this array. */ + uint32_t SeqxSleepTime[4]; /**< Time before put AFE to sleep. 0 to 0x000f_ffff. We normally don't use this feature and it's disabled in @ref AD5940_Initialize */ + uint32_t SeqxWakeupTime[4]; /**< Time before Wakeup AFE. */ + BoolFlag WuptEn; /**< Timer enable. Once enabled, it starts to run. */ +}WUPTCfg_Type; + +/** + * Clock configure +*/ +typedef struct +{ + uint32_t SysClkSrc; /**< System clock source @ref SYSCLKSRC_Const */ + uint32_t ADCCLkSrc; /**< ADC clock source @ref ADCCLKSRC_Const */ + uint32_t SysClkDiv; /**< System clock divider. Use this to ensure System clock < 16MHz. */ + uint32_t ADCClkDiv; /**< ADC control clock divider. ADC core clock is @ADCCLkSrc, but control clock should be <16MHz. */ + BoolFlag HFOSCEn; /**< Enable internal 16MHz/32MHz HFOSC */ + BoolFlag HfOSC32MHzMode; /**< Enable internal HFOSC to output 32MHz */ + BoolFlag LFOSCEn; /**< Enable internal 32kHZ OSC */ + BoolFlag HFXTALEn; /**< Enable XTAL driver */ +}CLKCfg_Type; + +/** + * HSTIA internal RTIA calibration structure + * @note ADC filter settings and DFT should be configured properly based on signal frequency. +*/ +typedef struct +{ + float fFreq; /**< Calibration frequency */ + float fRcal; /**< Rcal resistor value in Ohm*/ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + + HSTIACfg_Type HsTiaCfg; /**< HSTIA configuration */ + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + DFTCfg_Type DftCfg; /**< DFT configuration. */ + uint32_t bPolarResult; /**< bTRUE-Polar coordinate:Return results in Magnitude and Phase. bFALSE-Cartesian coordinate: Return results in Real part and Imaginary Part */ +}HSRTIACal_Type; + +/** + * LPTIA internal RTIA calibration structure +*/ +typedef struct +{ + float fFreq; /**< Calibration frequency. Set it to 0.0 for DC calibration */ + float fRcal; /**< Rcal resistor value in Ohm*/ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + + uint32_t LpAmpSel; /**< Select from LPAMP0 and LPAMP1. LPAMP1 is only available on ADuCM355. */ + BoolFlag bWithCtia; /**< Connect external CTIA or not. */ + uint32_t LpTiaRtia; /**< LPTIA RTIA selection. */ + uint32_t LpAmpPwrMod; /**< Amplifiers power mode setting */ + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + DFTCfg_Type DftCfg; /**< DFT configuration */ + uint32_t bPolarResult; /**< bTRUE-Polar coordinate:Return results in Magnitude and Phase. bFALSE-Cartesian coordinate: Return results in Real part and Imaginary Part */ +}LPRTIACal_Type; + +/** + * HSDAC calibration structure. +*/ +typedef struct +{ + float fRcal; /**< Rcal resistor value in Ohm*/ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + + uint32_t AfePwrMode; /**< Calibrate DAC in High power mode */ + uint32_t ExcitBufGain; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ +}HSDACCal_Type; + +/** + * LPDAC calibration structure. +*/ +typedef struct +{ + uint32_t LpdacSel; /**< Select from LPDAC0 and LPDAC1. LPDAC1 is ADuCM355 only. */ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + float ADCRefVolt; /**< ADC reference voltage. Default is 1.82V*/ + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC2 OSR settings. */ + int32_t SettleTime10us; /**< Wait how much time after TIA is enabled? */ + int32_t TimeOut10us; /**< ADC converts signal need time. Specify the maximum time allowed. Timeout in 10us. negative number means wait no time. */ +}LPDACCal_Type; + +/** + * LPDAC parameters: LPDAC code to voltage transfer function. + * Voltage(mV) = kC2V_DACxB * Code + bC2V_DACxB; + * where x is 12 or 6 represent 12Bit DAC and 6Bit DAC. C2V means code to voltage. + * Code is the data register value for LPDAC. The equation gives real output voltage of LPDAC. + * Similarly, Code(LSB) = kV2C_DACxB * Voltage(mV) + bC2V_DAC12B; + * + * Apparently, kV2C_DACxB = 1/kC2V_DACxB; + * bC2V_DACxB = -bC2V_DACxB/kC2V_DACxB; +*/ +typedef struct +{ + /* Code to voltage equation parameters */ + float kC2V_DAC12B; /**< the k factor of code to voltage(in mV) transfer function */ + float bC2V_DAC12B; /**< the offset of code to voltage transfer function. It's the voltage in mV when code is zero. */ + float kC2V_DAC6B; /**< the k factor for LPDAC 6 bit output. */ + float bC2V_DAC6B; /**< the offset for LPDAC 6 bit output. */ + /* Code to voltage equation parameters */ + float kV2C_DAC12B; /**< the k factor for converting voltage to code for LPDAC 12bit output. */ + float bV2C_DAC12B; /**< the offset for converting voltage to code for LPDAC 12bit output. */ + float kV2C_DAC6B; /**< the k factor for converting voltage to code for LPDAC 6bit output. */ + float bV2C_DAC6B; /**< the offset for converting voltage to code for LPDAC 6bit output. */ +}LPDACPara_Type; + +/** + * LFOSC frequency measure structure +*/ +typedef struct +{ + uint32_t CalSeqAddr; /**< Sequence start address */ + float CalDuration; /**< Time can be used for calibration in unit of ms. Recommend to use tens of millisecond like 10ms */ + float SystemClkFreq; /**< System clock frequency. */ +}LFOSCMeasure_Type; + +/** + * ADC PGA calibration type +*/ +typedef struct +{ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + float VRef1p82; /**< The real voltage of 1.82 reference. Unit is volt. */ + float VRef1p11; /**< The real voltage of 1.1 reference. Unit is volt. */ + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCPga; /**< Which PGA gain we are going to calibrate? */ + uint32_t PGACalType; /**< Calibrate gain of offset or gain+offset? */ + int32_t TimeOut10us; /**< Timeout in 10us. -1 means no time-out*/ +}ADCPGACal_Type; + +/** + * LPTIA Offset calibration type +*/ +typedef struct +{ + uint32_t LpAmpSel; /**< Select from LPAMP0 and LPAMP1. LPAMP1 is only available on ADuCM355. */ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + uint32_t ADCSinc3Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCSinc2Osr; /**< SINC3OSR_5, SINC3OSR_4 or SINC3OSR_2 */ + uint32_t ADCPga; /**< PGA Gain selection */ + uint32_t DacData12Bit; /**< 12Bit DAC data */ + uint32_t DacData6Bit; /**< 6Bit DAC data */ + uint32_t LpDacVzeroMux; /**< Vzero is used as LPTIA bias voltage, select 12Bit/6Bit DAC */ + uint32_t LpAmpPwrMod; /**< LP amplifiers power mode, select from LPAMPPWR_NORM, LPAMPPWR_BOOSTn*/ + uint32_t LpTiaSW; /**< Switch configuration for LPTIA. Normally for SW(5) and SW(9).*/ + uint32_t LpTiaRtia; /**< LPTIA RTIA resistor selection. */ + int32_t SettleTime10us; /**< Wait how much time after TIA is enabled? */ + int32_t TimeOut10us; /**< ADC converts signal need time. Specify the maximum time allowed. Timeout in 10us. negative number means wait no time. */ +}LPTIAOffsetCal_Type; + +/** + * Structure for calculating how much system clocks needed for specified number of data +*/ +typedef struct +{ + uint32_t DataType; /**< The final data output selection. @ref DATATYPE_Const */ + uint32_t DataCount; /**< How many data you want. */ + uint32_t ADCSinc3Osr; /**< ADC SINC3 filter OSR setting */ + uint32_t ADCSinc2Osr; /**< ADC SINC2 filter OSR setting */ + uint32_t ADCAvgNum; /**< Average number for DFT engine. Only used when data type is DATATYPE_DFT and DftSrc is DFTSRC_AVG */ + uint32_t DftSrc; /**< The DFT source. Only used when data type is DATATYPE_DFT */ + uint8_t ADCRate; /**< ADCRate @ref ADCRATE_Const. Only used when data type is DATATYPE_NOTCH */ + BoolFlag BpNotch; /**< Bypass notch filter or not. Only used when data type is DATATYPE_DFT and DftSrc is DFTSRC_SINC2NOTCH */ + float RatioSys2AdcClk; /**< Ratio of system clock to ADC clock frequency */ +}ClksCalInfo_Type; + +/** + * Software controlled Sweep Function + * */ +typedef struct +{ + BoolFlag SweepEn; /**< Software can automatically sweep frequency from following parameters. Set value to 1 to enable it. */ + float SweepStart; /**< Sweep start frequency. Software will go back to the start frequency when it reaches SWEEP_STOP */ + float SweepStop; /**< Sweep end frequency. */ + uint32_t SweepPoints; /**< How many points from START to STOP frequency */ + BoolFlag SweepLog; /**< The step is linear or logarithmic. 0: Linear, 1: Logarithmic*/ + uint32_t SweepIndex; /**< Current position of sweep */ +}SoftSweepCfg_Type; + +/** + * Impedance result in Polar coordinate +*/ +typedef struct +{ + float Magnitude; /**< The magnitude in polar coordinate */ + float Phase; /**< The phase in polar coordinate */ +}fImpPol_Type; //Polar + +/** + * Impedance result in Cartesian coordinate +*/ +typedef struct +{ + float Real; /**< The real part in Cartesian coordinate */ + float Image; /**< The imaginary in Cartesian coordinate */ +}fImpCar_Type; //Cartesian + +/** + * int32_t type Impedance result in Cartesian coordinate +*/ +typedef struct +{ + int32_t Real; /**< The real part in Cartesian coordinate */ + int32_t Image; /**< The real imaginary in Cartesian coordinate */ +}iImpCar_Type; + +/** + * FreqParams_Type - Structure to store optimum filter settings +*/ +typedef struct +{ + BoolFlag HighPwrMode; + uint32_t DftNum; + uint32_t DftSrc; + uint32_t ADCSinc3Osr; + uint32_t ADCSinc2Osr; + uint32_t NumClks; +}FreqParams_Type; + +/** + * @} TypeDefinitions +*/ + +/** + * @defgroup Exported_Functions + * @{ +*/ +/* 1. Basic SPI functions */ +void AD5940_WriteReg(uint16_t RegAddr, uint32_t RegData); +uint32_t AD5940_ReadReg(uint16_t RegAddr); +void AD5940_FIFORd(uint32_t *pBuffer,uint32_t uiReadCount); + +/* 2. AD5940 Top Control functions */ +void AD5940_Initialize(void); /* Call this function firstly once AD5940 power on or come from soft reset */ +void AD5940_AFECtrlS(uint32_t AfeCtrlSet, BoolFlag State); +AD5940Err AD5940_LPModeCtrlS(uint32_t EnSet); +void AD5940_AFEPwrBW(uint32_t AfePwr, uint32_t AfeBw); /* AFE power mode and system bandwidth control */ +void AD5940_REFCfgS(AFERefCfg_Type *pBufCfg); + +/* 3. High_Speed_Loop Functions */ +void AD5940_HSLoopCfgS(HSLoopCfg_Type *pHsLoopCfg); +void AD5940_SWMatrixCfgS(SWMatrixCfg_Type *pSwMatrix); +void AD5940_HSDacCfgS(HSDACCfg_Type *pHsDacCfg); +AD5940Err AD5940_HSTIACfgS(HSTIACfg_Type *pHsTiaCfg); +void AD5940_HSRTIACfgS(uint32_t HSTIARtia); + +/* 4. Low_Power_Loop Functions*/ +void AD5940_LPLoopCfgS(LPLoopCfg_Type *pLpLoopCfg); +void AD5940_LPDACCfgS(LPDACCfg_Type *pLpDacCfg); +//void AD5940_LPDACWriteS(uint16_t Data12Bit, uint8_t Data6Bit); +void AD5940_LPDAC0WriteS(uint16_t Data12Bit, uint8_t Data6Bit); +void AD5940_LPDAC1WriteS(uint16_t Data12Bit, uint8_t Data6Bit); +void AD5940_LPAMPCfgS(LPAmpCfg_Type *pLpAmpCfg); + +/* 5. DSP_Block_Functions */ +void AD5940_DSPCfgS(DSPCfg_Type *pDSPCfg); +uint32_t AD5940_ReadAfeResult(uint32_t AfeResultSel); +/* 5.1 ADC Block */ +void AD5940_ADCBaseCfgS(ADCBaseCfg_Type *pADCInit); +void AD5940_ADCFilterCfgS(ADCFilterCfg_Type *pFiltCfg); +void AD5940_ADCPowerCtrlS(BoolFlag State); +void AD5940_ADCConvtCtrlS(BoolFlag State); +void AD5940_ADCMuxCfgS(uint32_t ADCMuxP, uint32_t ADCMuxN); +void AD5940_ADCDigCompCfgS(ADCDigComp_Type *pCompCfg); +void AD5940_StatisticCfgS(StatCfg_Type *pStatCfg); +void AD5940_ADCRepeatCfgS(uint32_t Number); +void AD5940_DFTCfgS(DFTCfg_Type *pDftCfg); +/* 5.2 Waveform Generator Block */ +void AD5940_WGCfgS(WGCfg_Type *pWGInit); +AD5940Err AD5940_WGDACCodeS(uint32_t code); /* Directly write DAC Code */ +void AD5940_WGFreqCtrlS(float SinFreqHz, float WGClock); +uint32_t AD5940_WGFreqWordCal(float SinFreqHz, float WGClock); +//uint32_t AD5940_WGAmpWordCal(float Amp, BoolFlag DacGain, BoolFlag ExcitGain); + +/* 6. Sequencer_FIFO */ +void AD5940_FIFOCfg(FIFOCfg_Type *pFifoCfg); +AD5940Err AD5940_FIFOGetCfg(FIFOCfg_Type *pFifoCfg); /* Read back current configuration */ +void AD5940_FIFOCtrlS(uint32_t FifoSrc, BoolFlag FifoEn); /* Configure FIFO data source. And disable/enable it.*/ +void AD5940_FIFOThrshSet(uint32_t FIFOThresh); +uint32_t AD5940_FIFOGetCnt(void); /* Get current FIFO count */ +void AD5940_SEQCfg(SEQCfg_Type *pSeqCfg); +AD5940Err AD5940_SEQGetCfg(SEQCfg_Type *pSeqCfg); /* Read back current configuration */ +void AD5940_SEQCtrlS(BoolFlag SeqEn); +void AD5940_SEQHaltS(void); +void AD5940_SEQMmrTrig(uint32_t SeqId); /* Manually trigger sequence */ +void AD5940_SEQCmdWrite(uint32_t StartAddr, const uint32_t *pCommand, uint32_t CmdCnt); +void AD5940_SEQInfoCfg(SEQInfo_Type *pSeq); +AD5940Err AD5940_SEQInfoGet(uint32_t SeqId, SEQInfo_Type *pSeqInfo); +void AD5940_SEQGpioCtrlS(uint32_t GpioSet); /* Sequencer can control GPIO0~7 if the GPIO function is set to SYNC */ +uint32_t AD5940_SEQTimeOutRd(void); /* Read back current sequence time out value */ +AD5940Err AD5940_SEQGpioTrigCfg(SeqGpioTrig_Cfg *pSeqGpioTrigCfg); +void AD5940_WUPTCfg(WUPTCfg_Type *pWuptCfg); +void AD5940_WUPTCtrl(BoolFlag Enable); /* Enable or disable Wakeup timer */ +AD5940Err AD5940_WUPTTime(uint32_t SeqId, uint32_t SleepTime, uint32_t WakeupTime); + +/* 7. MISC_Block */ +/* 7.1 Clock system */ +void AD5940_CLKCfg(CLKCfg_Type *pClkCfg); +void AD5940_HFOSC32MHzCtrl(BoolFlag Mode32MHz); +void AD5940_HPModeEn(BoolFlag Enable); /* Switch system clocks to high power mode for EIS >80kHz)*/ +/* 7.2 AFE Interrupt */ +void AD5940_INTCCfg(uint32_t AfeIntcSel, uint32_t AFEIntSrc, BoolFlag State); +uint32_t AD5940_INTCGetCfg(uint32_t AfeIntcSel); +void AD5940_INTCClrFlag(uint32_t AfeIntSrcSel); +BoolFlag AD5940_INTCTestFlag(uint32_t AfeIntcSel, uint32_t AfeIntSrcSel); /* Check if selected interrupt happened */ +uint32_t AD5940_INTCGetFlag(uint32_t AfeIntcSel); /* Get current INTC interrupt flag */ +/* 7.3 GPIO */ +void AD5940_AGPIOCfg(AGPIOCfg_Type *pAgpioCfg); +void AD5940_AGPIOFuncCfg(uint32_t uiCfgSet); +void AD5940_AGPIOOen(uint32_t uiPinSet); +void AD5940_AGPIOIen(uint32_t uiPinSet); +uint32_t AD5940_AGPIOIn(void); +void AD5940_AGPIOPen(uint32_t uiPinSet); +void AD5940_AGPIOSet(uint32_t uiPinSet); +void AD5940_AGPIOClr(uint32_t uiPinSet); +void AD5940_AGPIOToggle(uint32_t uiPinSet); + +/* 7.4 LPMODE */ +AD5940Err AD5940_LPModeEnS(BoolFlag LPModeEn); /* Enable LP mode or disable it. */ +void AD5940_LPModeClkS(uint32_t LPModeClk); +void AD5940_ADCRepeatCfg(uint32_t Number); +/* 7.5 Power */ +void AD5940_SleepKeyCtrlS(uint32_t SlpKey); /* enter the correct key to allow AFE to enter sleep mode */ +void AD5940_EnterSleepS(void); /* Put AFE to hibernate/sleep mode and keep LP loop as the default settings. */ +void AD5940_ShutDownS(void); /* Unlock the key, turn off LP loop and enter sleep/hibernate mode */ +uint32_t AD5940_WakeUp(int32_t TryCount); /* Try to wakeup AFE by read register */ +uint32_t AD5940_GetADIID(void); /* Read ADIID */ +uint32_t AD5940_GetChipID(void); /* Read Chip ID */ +AD5940Err AD5940_SoftRst(void); +void AD5940_HWReset(void); /* Do hardware reset to AD5940 using RESET pin */ +/* Calibration functions */ +/* 8. Calibration */ +AD5940Err AD5940_ADCPGACal(ADCPGACal_Type *ADCPGACal); +AD5940Err AD5940_LPDACCal(LPDACCal_Type *pCalCfg, LPDACPara_Type *pResult); +AD5940Err AD5940_LPTIAOffsetCal(LPTIAOffsetCal_Type *pLPTIAOffsetCal); +AD5940Err AD5940_HSRtiaCal(HSRTIACal_Type *pCalCfg, void *pResult); +AD5940Err AD5940_HSDACCal(HSDACCal_Type *pCalCfg); +AD5940Err AD5940_LPRtiaCal(LPRTIACal_Type *pCalCfg, void *pResult); +AD5940Err AD5940_LFOSCMeasure(LFOSCMeasure_Type *pCfg, float *pFreq); +//void AD5940_LFOSCTrim(uint32_t TrimValue); /* TrimValue: 0 to 15 */ +//void AD5940_HFOSC16MHzTrim(uint32_t TrimValue); +//void AD5940_HFOSC32MHzTrim(uint32_t TrimValue); + +/* 9. Pure software functions. Functions with no register access. These functions are helpers */ + /* Sequence Generator */ +void AD5940_SEQGenInit(uint32_t *pBuffer, uint32_t BufferSize);/* Initialize sequence generator workspace */ +void AD5940_SEQGenCtrl(BoolFlag bFlag); /* Enable or disable sequence generator */ +void AD5940_SEQGenInsert(uint32_t CmdWord); /* Manually insert a sequence command */ +AD5940Err AD5940_SEQGenFetchSeq(const uint32_t **ppSeqCmd, uint32_t *pSeqCount); /* Fetch generated sequence and start a new sequence */ +void AD5940_ClksCalculate(ClksCalInfo_Type *pFilterInfo, uint32_t *pClocks); +uint32_t AD5940_SEQCycleTime(void); +void AD5940_SweepNext(SoftSweepCfg_Type *pSweepCfg, float *pNextFreq); +void AD5940_StructInit(void *pStruct, uint32_t StructSize); +float AD5940_ADCCode2Volt(uint32_t code, uint32_t ADCPga, float VRef1p82); /* Calculate ADC code to voltage */ +BoolFlag AD5940_Notch50HzAvailable(ADCFilterCfg_Type *pFilterInfo, uint8_t *dl); +BoolFlag AD5940_Notch60HzAvailable(ADCFilterCfg_Type *pFilterInfo, uint8_t *dl); +fImpCar_Type AD5940_ComplexDivFloat(fImpCar_Type *a, fImpCar_Type *b); +fImpCar_Type AD5940_ComplexMulFloat(fImpCar_Type *a, fImpCar_Type *b); +fImpCar_Type AD5940_ComplexAddFloat(fImpCar_Type *a, fImpCar_Type *b); +fImpCar_Type AD5940_ComplexSubFloat(fImpCar_Type *a, fImpCar_Type *b); + +fImpCar_Type AD5940_ComplexDivInt(iImpCar_Type *a, iImpCar_Type *b); +fImpCar_Type AD5940_ComplexMulInt(iImpCar_Type *a, iImpCar_Type *b); +float AD5940_ComplexMag(fImpCar_Type *a); +float AD5940_ComplexPhase(fImpCar_Type *a); +FreqParams_Type AD5940_GetFreqParameters(float freq); +/** + * @} Exported_Functions +*/ + +/** + * @defgroup Library_Interface + * The functions user should provide for specific MCU platform + * @{ +*/ +void AD5940_CsClr(void); +void AD5940_CsSet(void); +void AD5940_RstClr(void); +void AD5940_RstSet(void); +void AD5940_Delay10us(uint32_t time); +/* (Not used for now.)AD5940 has 8 GPIOs, some of them are connected to MCU. MCU can set or read the status of these pins. */ +void AD5940_MCUGpioWrite(uint32_t data); /* */ +uint32_t AD5940_MCUGpioRead(uint32_t); +void AD5940_MCUGpioCtrl(uint32_t, BoolFlag); +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length); +/* Below functions are frequently used in example code but not necessary for library */ +uint32_t AD5940_GetMCUIntFlag(void); +uint32_t AD5940_ClrMCUIntFlag(void); +uint32_t AD5940_MCUResourceInit(void *pCfg); +/** + * @} Library_Interface +*/ + + +/** + * @} AD5940_Library + */ + +#endif diff --git a/examples/AD5940_BIA/AD5940Main.c b/examples/AD5940_BIA/AD5940Main.c new file mode 100644 index 0000000..bda0cda --- /dev/null +++ b/examples/AD5940_BIA/AD5940Main.c @@ -0,0 +1,158 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup BioElec_Example + * @{ + */ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "BodyImpedance.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +int32_t BIAShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpPol_Type *pImp = (fImpPol_Type*)pData; + AppBIACtrl(BIACTRL_GETFREQ, &freq); + + printf("Freq:%.2f ", freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pBIACfg->MaxSeqLen = 512; /** @todo add checker in function */ + + pBIACfg->RcalVal = 10000.0; + pBIACfg->DftNum = DFTNUM_8192; + pBIACfg->NumOfData = -1; /* Never stop until you stop it manually by AppBIACtrl() function */ + pBIACfg->BiaODR = 20; /* ODR(Sample Rate) 20Hz */ + pBIACfg->FifoThresh = 4; /* 4 */ + pBIACfg->ADCSinc3Osr = ADCSINC3OSR_2; +} + +void AD5940_Main(void) +{ + static uint32_t IntCount; + static uint32_t count; + uint32_t temp; + + AD5940PlatformCfg(); + + AD5940BIAStructInit(); /* Configure your parameters in this function */ + + AppBIAInit(AppBuff, APPBUFF_SIZE); /* Initialize BIA application. Provide a buffer, which is used to store sequencer commands */ + AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + IntCount++; + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppBIAISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + BIAShowResult(AppBuff, temp); /* Show the results to UART */ + + if(IntCount == 240) + { + IntCount = 0; + //AppBIACtrl(BIACTRL_SHUTDOWN, 0); + } + } + count++; + if(count > 1000000) + { + count = 0; + //AppBIAInit(0, 0); /* Re-initialize BIA application. Because sequences are ready, no need to provide a buffer, which is used to store sequencer commands */ + //AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurement to start. Second parameter has no meaning with this command. */ + } + } +} + +/** + * @} + * @} + * */ + diff --git a/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewd b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewp b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewp new file mode 100644 index 0000000..9c17de2 --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\BodyImpedance.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvoptx b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvoptx new file mode 100644 index 0000000..6d68fc9 --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance.c + BodyImpedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvprojx b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvprojx new file mode 100644 index 0000000..d3a0fe5 --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/AD5940_BIA.uvprojx @@ -0,0 +1,505 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::..\..\Program Files (x86)\ARM_Compiler_5.06u7 + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.1 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance.c + 1 + ..\BodyImpedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_BIA/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_BIA/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_BIA/ADICUP3029/main.c b/examples/AD5940_BIA/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_BIA/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_BIA/BodyImpedance.c b/examples/AD5940_BIA/BodyImpedance.c new file mode 100644 index 0000000..ed06803 --- /dev/null +++ b/examples/AD5940_BIA/BodyImpedance.c @@ -0,0 +1,609 @@ +/*! + ***************************************************************************** + @file: BodyComposition.c + @author: Neo Xu + @brief: BIA measurement sequences. + ----------------------------------------------------------------------------- +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "BodyImpedance.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppBIACfg_Type AppBIACfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .BiaODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + .RcalVal = 10000.0, /* 10kOhm */ + + .PwrMod = AFEPWR_LP, + .HstiaRtiaSel = HSTIARTIA_1K, + .CtiaSel = 16, + .ExcitBufGain = EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 800.0, + + .SinFreq = 50000.0, /* 50kHz */ + + .ADCPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .DftNum = DFTNUM_8192, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .SweepCfg.SweepEn = bFALSE, + .SweepCfg.SweepStart = 10000, + .SweepCfg.SweepStop = 150000.0, + .SweepCfg.SweepPoints = 100, + .SweepCfg.SweepLog = bTRUE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, + .BIAInited = bFALSE, + .StopRequired = bFALSE, + .MeasSeqCycleCount = 0, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppBIAGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppBIACfg_Type**)pCfg = &AppBIACfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara) +{ + switch (BcmCtrl) + { + case BIACTRL_START: + { + WUPTCfg_Type wupt_cfg; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppBIACfg.WuptClkFreq/AppBIACfg.BiaODR)-2-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 1; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + + AppBIACfg.FifoDataCount = 0; /* restart */ + break; + } + case BIACTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case BIACTRL_STOPSYNC: + { + AppBIACfg.StopRequired = bTRUE; + break; + } + case BIACTRL_GETFREQ: + if(pPara) + { + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppBIACfg.FreqofData; + else + *(float*)pPara = AppBIACfg.SinFreq; + } + break; + case BIACTRL_SHUTDOWN: + { + AppBIACtrl(BIACTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppBIASeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + //AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + hs_loop.HsDacCfg.ExcitBufGain = AppBIACfg.ExcitBufGain; + hs_loop.HsDacCfg.HsDacGain = AppBIACfg.HsDacGain; + hs_loop.HsDacCfg.HsDacUpdateRate = AppBIACfg.HsDacUpdateRate; + + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hs_loop.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; /* 31pF + 2pF */ + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + + hs_loop.SWMatCfg.Dswitch = SWD_OPEN; + hs_loop.SWMatCfg.Pswitch = SWP_PL|SWP_PL2; + hs_loop.SWMatCfg.Nswitch = SWN_NL|SWN_NL2; + hs_loop.SWMatCfg.Tswitch = SWT_TRTIA; + + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; + hs_loop.WgCfg.OffsetCalEn = bFALSE; + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.SweepCfg.SweepIndex = 0; + AppBIACfg.FreqofData = AppBIACfg.SweepCfg.SweepStart; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + sin_freq = AppBIACfg.SweepCurrFreq; + } + else + { + sin_freq = AppBIACfg.SinFreq; + AppBIACfg.FreqofData = sin_freq; + } + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppBIACfg.SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppBIACfg.DacVoltPP/800.0f*2047 + 0.5f); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData12Bit = (uint32_t)((1100-200)/2200.0*4095); + lp_loop.LpDacCfg.DacData6Bit = 31; + + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = LPTIARF_20K; + lp_loop.LpAmpCfg.LpTiaRload = LPTIARLOAD_SHORT; + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(6)|LPTIASW(7)|LPTIASW(8)|LPTIASW(9)|LPTIASW(12)|LPTIASW(13); /** @todo Optimization needed for new silicon */ + AD5940_LPLoopCfgS(&lp_loop); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppBIACfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppBIACfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBIACfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppBIACfg.InitSeqInfo.SeqId = SEQID_1; + AppBIACfg.InitSeqInfo.SeqRamAddr = AppBIACfg.SeqStartAddr; + AppBIACfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIASeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBIACfg.DftSrc; + clks_cal.DataCount = 1L<<(AppBIACfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBIACfg.SysClkFreq/AppBIACfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* @todo wait 250us?? */ + sw_cfg.Dswitch = SWD_CE0; + sw_cfg.Pswitch = SWP_CE0; + sw_cfg.Nswitch = SWN_AIN1; + sw_cfg.Tswitch = SWT_AIN1|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_ADCMuxCfgS(ADCMUXP_HSTIA_P, ADCMUXN_HSTIA_N); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + AD5940_ADCMuxCfgS(ADCMUXP_AIN3, ADCMUXN_AIN2); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + sw_cfg.Dswitch = SWD_OPEN; + sw_cfg.Pswitch = SWP_PL|SWP_PL2; + sw_cfg.Nswitch = SWN_NL|SWN_NL2; + sw_cfg.Tswitch = SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); /* Float switches */ + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + AppBIACfg.MeasSeqCycleCount = AD5940_SEQCycleTime(); + AppBIACfg.MaxODR = 1/(((AppBIACfg.MeasSeqCycleCount + 10) / 16.0)* 1E-6) ; + if(AppBIACfg.BiaODR > AppBIACfg.MaxODR) + { + /* We have requested a sampling rate that cannot be achieved with the time it + takes to acquire a sample. + */ + AppBIACfg.BiaODR = AppBIACfg.MaxODR; + } + + if(error == AD5940ERR_OK) + { + AppBIACfg.MeasureSeqInfo.SeqId = SEQID_0; + AppBIACfg.MeasureSeqInfo.SeqRamAddr = AppBIACfg.InitSeqInfo.SeqRamAddr + AppBIACfg.InitSeqInfo.SeqLen ; + AppBIACfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIARtiaCal(void) +{ + HSRTIACal_Type hsrtia_cal; + + hsrtia_cal.AdcClkFreq = AppBIACfg.AdcClkFreq; + hsrtia_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + hsrtia_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + hsrtia_cal.bPolarResult = bTRUE; /* We need magnitude and phase here */ + hsrtia_cal.DftCfg.DftNum = AppBIACfg.DftNum; + hsrtia_cal.DftCfg.DftSrc = AppBIACfg.DftSrc; + hsrtia_cal.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + hsrtia_cal.fRcal= AppBIACfg.RcalVal; + hsrtia_cal.HsTiaCfg.DiodeClose = bFALSE; + hsrtia_cal.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hsrtia_cal.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; + hsrtia_cal.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsrtia_cal.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; + hsrtia_cal.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + hsrtia_cal.SysClkFreq = AppBIACfg.SysClkFreq; + hsrtia_cal.fFreq = AppBIACfg.SweepCfg.SweepStart; + + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + uint32_t i; + AppBIACfg.SweepCfg.SweepIndex = 0; /* Reset index */ + for(i=0;i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + + if((AppBIACfg.ReDoRtiaCal == bTRUE) || \ + AppBIACfg.BIAInited == bFALSE) /* Do calibration on the first initializaion */ + { + AppBIARtiaCal(); + AppBIACfg.ReDoRtiaCal = bFALSE; + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppBIACfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppBIACfg.BIAInited == bFALSE)||\ + (AppBIACfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppBIASeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppBIASeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppBIACfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppBIACfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppBIACfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppBIACfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppBIACfg.PwrMod, AFEBW_250KHZ); + AD5940_WriteReg(REG_AFE_SWMUX, 1<<3); + AppBIACfg.BIAInited = bTRUE; /* BIA application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppBIARegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppBIACfg.NumOfData > 0) + { + AppBIACfg.FifoDataCount += *pDataCount/4; + if(AppBIACfg.FifoDataCount >= AppBIACfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppBIACfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppBIACfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppBIACfg.SweepNextFreq, AppBIACfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppBIADataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/4; + + fImpPol_Type * const pOut = (fImpPol_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/4)*4;/* We expect RCAL data together with Rz data. One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal*pDftVolt->Real+(float)pDftVolt->Image*pDftVolt->Image); + VoltPhase = atan2(-pDftVolt->Image,pDftVolt->Real); + CurrMag = sqrt((float)pDftCurr->Real*pDftCurr->Real+(float)pDftCurr->Image*pDftCurr->Image); + CurrPhase = atan2(-pDftCurr->Image,pDftCurr->Real); + + VoltMag = VoltMag/CurrMag*AppBIACfg.RtiaCurrValue[0]; + VoltPhase = VoltPhase - CurrPhase + AppBIACfg.RtiaCurrValue[1]; + + pOut[i].Magnitude = VoltMag; + pOut[i].Phase = VoltPhase; + } + *pDataCount = ImpResCount; + /* Calculate next frequency point */ + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.FreqofData = AppBIACfg.SweepCurrFreq; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepNextFreq; + AppBIACfg.RtiaCurrValue[0] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][0]; + AppBIACfg.RtiaCurrValue[1] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][1]; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + } + return AD5940ERR_OK; +} + +/** +*/ +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + *pCount = 0; + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppBIARegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter hibernate mode */ + /* Process data */ + AppBIADataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + +/** + * @} + */ diff --git a/examples/AD5940_BIA/BodyImpedance.h b/examples/AD5940_BIA/BodyImpedance.h new file mode 100644 index 0000000..5a93e51 --- /dev/null +++ b/examples/AD5940_BIA/BodyImpedance.h @@ -0,0 +1,94 @@ +/*! + @file: ImpSeqs.h + @author: $Author: nxu2 $ + @brief: 4-wire BIA measurement header file. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#ifndef _BODYCOMPOSITION_H_ +#define _BODYCOMPOSITION_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +#define MAXSWEEP_POINTS 100 /* Need to know how much buffer is needed to save RTIA calibration result */ + +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration. +*/ + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + //BoolFlag bBioElecBoard; /* The code is same for BioElec board and AD5941Sens1 board. No changes are needed */ + BoolFlag ReDoRtiaCal; /* Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /* The real frequency of system clock */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + float BiaODR; /* in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float SinFreq; /* Frequency of excitation signal */ + float RcalVal; /* Rcal value in Ohm */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + float DacVoltPP; /* Final excitation voltage is DAC_VOLTpp*DAC_PGA*EXCIT_GAIN, DAC_PGA= 1 or 0.2, EXCIT_GAIN=2 or 0.25. DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + uint32_t ExcitBufGain; /* Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; /* DAC update rate is SystemCLoock/Divider. The available value is 7 to 255. Set to 7 for better performance */ + uint32_t ADCPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /* SINC3 OSR selection. ADCSINC3OSR_2, ADCSINC3OSR_4 */ + uint8_t ADCSinc2Osr; /* SINC2 OSR selection. ADCSINC2OSR_22...ADCSINC2OSR_1333 */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t CtiaSel; /* Select CTIA in pF unit from 0 to 31pF */ + + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float RtiaCurrValue[2]; /* Calibrated Rtia value of current frequency */ + float RtiaCalTable[MAXSWEEP_POINTS][2]; /* Calibrated Rtia Value table */ + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag BIAInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ + uint32_t MeasSeqCycleCount; /* How long the measurement sequence will take */ + float MaxODR; /* Max ODR for sampling in this config */ +/* End */ +}AppBIACfg_Type; + +#define BIACTRL_START 0 +#define BIACTRL_STOPNOW 1 +#define BIACTRL_STOPSYNC 2 +#define BIACTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define BIACTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppBIAGetCfg(void *pCfg); +AD5940Err AppBIAInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount); +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara); + +#endif diff --git a/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvoptx b/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvoptx new file mode 100644 index 0000000..c722152 --- /dev/null +++ b/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance.c + BodyImpedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvprojx b/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvprojx new file mode 100644 index 0000000..ced63fe --- /dev/null +++ b/examples/AD5940_BIA/NUCLEO-F411/AD5940_BIA.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance.c + 1 + ..\BodyImpedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_BIA/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_BIA/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_BIA/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_BIA/NUCLEO-F411/main.c b/examples/AD5940_BIA/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_BIA/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BIA_HiZ_Electrodes/AD5940Main.c b/examples/AD5940_BIA_HiZ_Electrodes/AD5940Main.c new file mode 100644 index 0000000..8923287 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/AD5940Main.c @@ -0,0 +1,193 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: ADI + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup BIA_Pro_Example + * @{ + */ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "BodyImpedance-HiZ_Electrodes.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +#define REAL_IMAG 0 +#define MAG_PAHSE 1 + +#define REAL_IMAG_OR_MAG_PAHSE MAG_PAHSE /*SKR you can chose what you want to print*/ + +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +int32_t BIAShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpCar_Type *pImp = (fImpCar_Type*)pData; + AppBIACtrl(BIACTRL_GETFREQ, &freq); + + printf("Freq:%.2f, ", freq); + /*Process data*/ + +#if REAL_IMAG_OR_MAG_PAHSE == REAL_IMAG + for(int i=0;iAdcClkFreq = 32000000.0; /*DO NOT MODIFY*/ /*High Power Mode and external Xtal.*/ + + pBIACfg->SeqStartAddr = 0; + pBIACfg->MaxSeqLen = 512; /** @todo add checker in function */ + + pBIACfg->RcalVal = 10000.0; + pBIACfg->DftNum = DFTNUM_16384; + pBIACfg->NumOfData = -1; /* Never stop until you stop it mannually by AppBIACtrl() function */ + pBIACfg->BiaODR = 2.5; /* ODR(Sample Rate) 20Hz */ + pBIACfg->FifoThresh = 12; /*SKR: this parameter needs to be changed... but it should not be visible*/ /* 4 */ + pBIACfg->ADCSinc3Osr = ADCSINC3OSR_2; + + pBIACfg->SinFreq = 50000.0; /*50kHz */ + pBIACfg->SweepCfg.SweepEn = bFALSE; + pBIACfg->SweepCfg.SweepStart = 10000; + pBIACfg->SweepCfg.SweepStop = 150000.0; + pBIACfg->SweepCfg.SweepPoints = 100; + pBIACfg->SweepCfg.SweepLog = bTRUE; +} + +void AD5940_Main(void) +{ + static uint32_t IntCount; + static uint32_t count; + uint32_t temp; + + AD5940PlatformCfg(); + + AD5940BIAStructInit(); /* Configure your parameters in this function */ + + AppBIAInit(AppBuff, APPBUFF_SIZE); /* Initialize BIA application. Provide a buffer, which is used to store sequencer commands */ /*SKR this needs to be invisible by the final user*/ + AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurment to start. Second parameter has no meaning with this command. */ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occured. */ + if(AD5940_GetMCUIntFlag()) + { + IntCount++; + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppBIAISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + BIAShowResult(AppBuff, temp); /* Show the results to UART */ + + if(IntCount == 240) + { + IntCount = 0; + //AppBIACtrl(BIACTRL_SHUTDOWN, 0); + } + } + count++; + if(count > 1000000) + { + count = 0; + //AppBIAInit(0, 0); /* Re-initialize BIA application. Because sequences are ready, no need to provide a buffer, which is used to store sequencer commands */ + //AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurment to start. Second parameter has no meaning with this command. */ + } + } +} + +/** + * @} + * @} + * */ + diff --git a/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.rteconfig b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.rteconfig new file mode 100644 index 0000000..06593ae --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.rteconfig @@ -0,0 +1,56 @@ + + + + + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvoptx b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvoptx new file mode 100644 index 0000000..9559b03 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance-HiZ_Electrodes.c + BodyImpedance-HiZ_Electrodes.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvprojx b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvprojx new file mode 100644 index 0000000..485bf25 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/AD5940_BIA_HiZ_Electrodes.uvprojx @@ -0,0 +1,505 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::..\..\Program Files (x86)\ARM_Compiler_5.06u7 + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.1 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance-HiZ_Electrodes.c + 1 + ..\BodyImpedance-HiZ_Electrodes.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/main.c b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.c b/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.c new file mode 100644 index 0000000..3f0023a --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.c @@ -0,0 +1,680 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: ADI + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "BodyImpedance-HiZ_Electrodes.h" +#include +DSPCfg_Type dsp_cfg; /*SKR: this variable needs to be global since the DFTlength is modified several times*/ + + +/* This file contains auto generated source code that user defined */ + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppBIACfg_Type AppBIACfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 32000000.0, + .BiaODR = 2.5, /* 20.0 Hz*/ + .NumOfData = -1, + .RcalVal = 10000.0, /* 10kOhm */ + + .PwrMod = AFEPWR_HP, + .HstiaRtiaSel = HSTIARTIA_1K, + .CtiaSel = 16, + .ExcitBufGain = EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 800.0, + + .SinFreq = 50000.0, /* 1000Hz */ + + .ADCPgaGain = ADCPGA_1P5, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .DftNum = DFTNUM_16384, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .SweepCfg.SweepEn = bFALSE, + .SweepCfg.SweepStart = 10000, + .SweepCfg.SweepStop = 150000.0, + .SweepCfg.SweepPoints = 100, + .SweepCfg.SweepLog = bTRUE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 12, + .BIAInited = bFALSE, + .StopRequired = bFALSE, + +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppBIAGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppBIACfg_Type**)pCfg = &AppBIACfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara) +{ + switch (BcmCtrl) + { + case BIACTRL_START: + { + WUPTCfg_Type wupt_cfg; + if(AD5940_WakeUp(10) > 10) /* Wakup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppBIACfg.WuptClkFreq/AppBIACfg.BiaODR)-2-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 1; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + + AppBIACfg.FifoDataCount = 0; /* restart */ + printf("BIA Start...\n"); + break; + } + case BIACTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + AD5940_WUPTCtrl(bFALSE); /* @todo is it sure this will stop Wupt? */ + printf("BIA Stop Now...\n"); + break; + } + case BIACTRL_STOPSYNC: + { + printf("BIA Stop SYNC...\n"); + AppBIACfg.StopRequired = bTRUE; + break; + } + case BIACTRL_GETFREQ: + if(pPara) + { + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppBIACfg.FreqofData; + else + *(float*)pPara = AppBIACfg.SinFreq; + } + break; + case BIACTRL_SHUTDOWN: + { + AppBIACtrl(BIACTRL_STOPNOW, 0); /* Stop the measurment if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + printf("BIA Shut down...\n"); + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppBIASeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + LPLoopCfg_Type lp_loop; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->control external mux, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save powr*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + hs_loop.HsDacCfg.ExcitBufGain = AppBIACfg.ExcitBufGain; + hs_loop.HsDacCfg.HsDacGain = AppBIACfg.HsDacGain; + hs_loop.HsDacCfg.HsDacUpdateRate = AppBIACfg.HsDacUpdateRate; + + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hs_loop.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; /* 16pF */ + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + + hs_loop.SWMatCfg.Dswitch = SWD_OPEN; + hs_loop.SWMatCfg.Pswitch = SWP_PL|SWP_PL2; + hs_loop.SWMatCfg.Nswitch = SWN_NL|SWN_NL2; + hs_loop.SWMatCfg.Tswitch = SWT_TRTIA; + + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; + hs_loop.WgCfg.OffsetCalEn = bFALSE; + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.FreqofData = AppBIACfg.SweepCfg.SweepStart; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + sin_freq = AppBIACfg.SweepCurrFreq; + } + else + { + sin_freq = AppBIACfg.SinFreq; + AppBIACfg.FreqofData = sin_freq; + } + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppBIACfg.SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppBIACfg.DacVoltPP/800.0f*2047 + 0.5f); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData12Bit = (uint32_t)((1100-200)/2200.0*4095); + lp_loop.LpDacCfg.DacData6Bit = 31; + + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = LPTIARF_20K; + lp_loop.LpAmpCfg.LpTiaRload = LPTIARLOAD_SHORT; + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(6)|LPTIASW(7)|LPTIASW(8)|LPTIASW(9)|LPTIASW(12)|LPTIASW(13); /* @todo Optimizanation needed for new silicon */ + AD5940_LPLoopCfgS(&lp_loop); + + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppBIACfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_2; /* Don't care becase it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_1P6MHZ; /* @todo Add explanation in UG that SINC3 filter clock is same as ADC, when ADC runs at 32MHz, clear this bit to enable clock divider for SINC3 filter. Make sure SINC3 clock is below 16MHz. */ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + /*dsp_cfg.ADCFilterCfg.Sinc2NotchClkEnable = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc3ClkEnable = bTRUE; + dsp_cfg.ADCFilterCfg.WGClkEnable = bTRUE; + dsp_cfg.ADCFilterCfg.DFTClkEnable = bTRUE;*/ + dsp_cfg.DftCfg.DftNum = AppBIACfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBIACfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extral command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop seuqncer generator */ + if(error == AD5940ERR_OK) + { + AppBIACfg.InitSeqInfo.SeqId = SEQID_1; + AppBIACfg.InitSeqInfo.SeqRamAddr = AppBIACfg.SeqStartAddr; + AppBIACfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIASeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBIACfg.DftSrc; + clks_cal.DataCount = 1L<<(dsp_cfg.DftCfg.DftNum+2); /*wait can be no constant*//*clks_cal.DataCount = 1L<<(AppBIACfg.DftNum+2);*/ /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBIACfg.SysClkFreq/AppBIACfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + /*0*/AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + /*1*//*SKR: BUFSENCON is not done, it is done during the initialization (AD5940_REFCfgS)*/ + /*2*//*SKR: AFECON is set to all connected during the initialization (AD5940_AFECtrlS)*/ + /*3*/AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* @todo wait 250us?? */ + /*4*/dsp_cfg.DftCfg.DftNum = DFTNUM_16384; + AD5940_DSPCfgS(&dsp_cfg); + clks_cal.DataCount = 1L<<(dsp_cfg.DftCfg.DftNum+2); + AD5940_ClksCalculate(&clks_cal, &WaitClks); + /*5*/sw_cfg.Dswitch = SWD_RCAL0; + /*6*/sw_cfg.Pswitch = SWP_RCAL0; + /*7*/sw_cfg.Nswitch = SWN_RCAL1; + /*8*/sw_cfg.Tswitch = SWT_RCAL1|SWT_TRTIA; + /*9*/AD5940_SWMatrixCfgS(&sw_cfg); + /*10*/ + /*11*/AD5940_ADCMuxCfgS(ADCMUXP_HSTIA_P, ADCMUXN_HSTIA_N); + /*12*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*13*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*14*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*15*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*16*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*17*/dsp_cfg.DftCfg.DftNum = AppBIACfg.DftNum; + clks_cal.DataCount = 1L<<(dsp_cfg.DftCfg.DftNum+2); + AD5940_ClksCalculate(&clks_cal, &WaitClks); + /*18*/ //I think it is not needed + /*19*/ //I think it is not needed + /*20*/sw_cfg.Dswitch = SWD_CE0; + /*21*/sw_cfg.Pswitch = SWP_CE0; + /*22*/sw_cfg.Nswitch = SWN_AIN1|SWN_AIN2|SWN_AIN3; + /*23*/sw_cfg.Tswitch = SWT_AIN1|SWT_AIN2|SWT_AIN3|SWT_TRTIA; + /*24*/AD5940_SWMatrixCfgS(&sw_cfg); + /*25*/ //I think it is not needed + /*26*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*27*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*28*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*29*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*30*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*31*/ //I think it is not needed + /*32*/sw_cfg.Dswitch = SWD_CE0|SWD_AIN1|SWD_AIN3; + /*33*/sw_cfg.Pswitch = SWP_CE0|SWP_AIN1|SWP_AIN3; + /*34*/sw_cfg.Nswitch = SWN_AIN2; + /*35*/sw_cfg.Tswitch = SWT_AIN2|SWT_TRTIA; + /*36*/AD5940_SWMatrixCfgS(&sw_cfg); + /*37*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*38*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*39*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*40*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*41*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*42*/sw_cfg.Dswitch = SWD_CE0|SWD_AIN1|SWD_AIN2; + /*43*/sw_cfg.Pswitch = SWP_CE0|SWP_AIN1|SWP_AIN2; + /*44*/sw_cfg.Nswitch = SWN_AIN3; + /*45*/sw_cfg.Tswitch = SWT_AIN3|SWT_TRTIA; + /*46*/AD5940_SWMatrixCfgS(&sw_cfg); + /*47*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*48*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*49*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*50*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*51*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*52*/sw_cfg.Dswitch = SWD_CE0|SWD_AIN2|SWD_AIN3; + /*53*/sw_cfg.Pswitch = SWP_CE0|SWP_AIN2|SWP_AIN3; + /*54*/sw_cfg.Nswitch = SWN_AIN1; + /*55*/sw_cfg.Tswitch = SWT_AIN1|SWT_TRTIA; + /*56*/AD5940_SWMatrixCfgS(&sw_cfg); + /*57*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*58*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*59*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*60*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*61*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*62*/sw_cfg.Dswitch = SWD_CE0|SWD_AIN2; + /*63*/sw_cfg.Pswitch = SWP_CE0|SWP_AIN2; + /*64*/sw_cfg.Nswitch = SWN_AIN1|SWN_AIN3; + /*65*/sw_cfg.Tswitch = SWT_AIN1|SWT_AIN3|SWT_TRTIA; + /*66*/AD5940_SWMatrixCfgS(&sw_cfg); + /*67*/AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + /*68*/AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + /*69*/ AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + /*70*/AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + /*71*/AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + /*72*/ + /*73*/sw_cfg.Dswitch = SWD_OPEN; + /*74*/sw_cfg.Pswitch = SWP_PL|SWP_PL2; + /*75*/sw_cfg.Nswitch = SWN_NL|SWN_NL2; + /*76*/sw_cfg.Tswitch = SWT_OPEN; + /*77*/AD5940_SWMatrixCfgS(&sw_cfg); /* Float switches */ + /*78*/ + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->control MUX, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop seuqncer generator */ + + if(error == AD5940ERR_OK) + { + AppBIACfg.MeasureSeqInfo.SeqId = SEQID_0; + AppBIACfg.MeasureSeqInfo.SeqRamAddr = AppBIACfg.InitSeqInfo.SeqRamAddr + AppBIACfg.InitSeqInfo.SeqLen ; + AppBIACfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIARtiaCal(void) +{ + HSRTIACal_Type hsrtia_cal; + + hsrtia_cal.AdcClkFreq = AppBIACfg.AdcClkFreq; + hsrtia_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + hsrtia_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + hsrtia_cal.bPolarResult = bTRUE; /* We need magnitude and phase here */ + hsrtia_cal.DftCfg.DftNum = AppBIACfg.DftNum; + hsrtia_cal.DftCfg.DftSrc = AppBIACfg.DftSrc; + hsrtia_cal.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + hsrtia_cal.fRcal= AppBIACfg.RcalVal; + hsrtia_cal.HsTiaCfg.DiodeClose = bFALSE; + hsrtia_cal.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hsrtia_cal.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; + hsrtia_cal.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsrtia_cal.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; + hsrtia_cal.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + hsrtia_cal.SysClkFreq = AppBIACfg.SysClkFreq; + + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + uint32_t i; + AppBIACfg.SweepCfg.SweepIndex = 0; /* Reset index */ + for(i=0;i 10) /* Wakup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + + if((AppBIACfg.ReDoRtiaCal == bTRUE) || \ + AppBIACfg.BIAInited == bFALSE) /* Do calibration on the first initializaion */ + { + AppBIARtiaCal(); + AppBIACfg.ReDoRtiaCal = bFALSE; + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppBIACfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppBIACfg.BIAInited == bFALSE)||\ + (AppBIACfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppBIASeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppBIASeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppBIACfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppBIACfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppBIACfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurment sequence */ + AppBIACfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppBIACfg.PwrMod, AFEBW_250KHZ); + AD5940_WriteReg(REG_AFE_SWMUX, 1<<3); + AppBIACfg.BIAInited = bTRUE; /* BIA application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppBIARegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppBIACfg.NumOfData > 0) + { + AppBIACfg.FifoDataCount += *pDataCount/4; + if(AppBIACfg.FifoDataCount >= AppBIACfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppBIACfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppBIACfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppBIACfg.SweepNextFreq, AppBIACfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppBIADataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/12; + + fImpCar_Type * const pOut = (fImpCar_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/12)*12;/* We expect RCAL data together with Rz data. One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal + AppBIACfg.RcalVal * zCalCurr->Image*I; //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex a1 = vcal / (-I1->Real + I1->Image*I); //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex a2 = vcal / (-I2->Real + I2->Image*I); //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex a3 = vcal / (-I3->Real + I3->Image*I); //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex a4 = vcal / (-I4->Real + I4->Image*I); //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex a5 = vcal / (-I5->Real + I5->Image*I); //real part is multiplied by -1 because current is 180� shifted. the imaginary part does not need be multiplied by -1 because DFT provides the -imaginary value, no the imaginary value + double complex E1 = -2*a1*a2*a5*(a1*a2 + a1*a5 - a2*a5)/(a1*a1*a2*a2 - 2*a1*a1*a2*a5 + a1*a1*a5*a5 - 2*a1*a2*a2*a5 - 2*a1*a2*a5*a5 + a2*a2*a5*a5); + double complex E2 = -2*a1*a2*a5*(a1*a2 - a1*a5 + a2*a5)/(a1*a1*a2*a2 - 2*a1*a1*a2*a5 + a1*a1*a5*a5 - 2*a1*a2*a2*a5 - 2*a1*a2*a5*a5 + a2*a2*a5*a5); + double complex E3 = -2*a3*a4*a5*(a3*a4 + a3*a5 - a4*a5)/(a3*a3*a4*a4 - 2*a3*a3*a4*a5 + a3*a3*a5*a5 - 2*a3*a4*a4*a5 - 2*a3*a4*a5*a5 + a4*a4*a5*a5); + double complex E4 = -2*a3*a4*a5*(a3*a4 - a3*a5 + a4*a5)/(a3*a3*a4*a4 - 2*a3*a3*a4*a5 + a3*a3*a5*a5 - 2*a3*a4*a4*a5 - 2*a3*a4*a5*a5 + a4*a4*a5*a5); + double complex ZB = (-E1*E2*E3 - E1*E2*E4 - E1*E3*E4 + E1*E3*a5 + E1*E4*a5 - E2*E3*E4 + E2*E3*a5 + E2*E4*a5)/(E1*E3 + E1*E4 + E2*E3 + E2*E4); + + pOut[(i*5)+0].Real = creal(E1); + pOut[(i*5)+0].Image = cimag(E1); + pOut[(i*5)+1].Real = creal(E2); + pOut[(i*5)+1].Image = cimag(E2); + pOut[(i*5)+2].Real = creal(E3); + pOut[(i*5)+2].Image = cimag(E3); + pOut[(i*5)+3].Real = creal(E4); + pOut[(i*5)+3].Image = cimag(E4); + pOut[(i*5)+4].Real = creal(ZB); + pOut[(i*5)+4].Image = cimag(ZB); + + + } + *pDataCount = ImpResCount; + /* Calculate next frequency point */ + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.FreqofData = AppBIACfg.SweepCurrFreq; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepNextFreq; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + AppBIACfg.RtiaCurrValue[0] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][0]; + AppBIACfg.RtiaCurrValue[1] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][1]; + } + return AD5940ERR_OK; +} + +/** + +*/ +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + if(AD5940_WakeUp(10) > 10) /* Wakup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/12)*12; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppBIARegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + + /* Process data */ + AppBIADataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + +/** + * @} + */ + diff --git a/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.h b/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.h new file mode 100644 index 0000000..7b7ec63 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/BodyImpedance-HiZ_Electrodes.h @@ -0,0 +1,121 @@ +/*! + @file: ImpSeqs.h + @author: $Author: nxu2 $ + @brief: 4-wire BIA measurement header file. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- +Copyright (c) 2012-2017 Analog Devices, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Modified versions of the software must be conspicuously marked as such. + - This software is licensed solely and exclusively for use with processors + manufacTRUEd by or for Analog Devices, Inc. + - This software may not be combined or merged with other code in any manner + that would cause the software to become subject to terms and conditions + which differ from those listed here. + - Neither the name of Analog Devices, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + - The use of this software may or may not infringe the patent rights of one + or more patent holders. This license does not release you from the + requirement that you obtain separate licenses from these patent holders + to use this software. +THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON- +INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF +CLAIMS OF INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*****************************************************************************/ + +#ifndef _BODYCOMPOSITIONJOSEMETHOD_H_ +#define _BODYCOMPOSITIONJOSEMETHOD_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +#define MAXSWEEP_POINTS 100 /* Need to know how much buffer is needed to save RTIA calibration result */ + +/* + Note: this example will use SEQID_0 as measurment sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration. +*/ + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurment sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + //BoolFlag bBioElecBoard; /* The code is same for BioElec board and AD5941Sens1 board. No changes are needed */ + BoolFlag ReDoRtiaCal; /* Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /* The real frequency of system clock */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + float BiaODR; /* in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float SinFreq; /* Frequency of excitation signal */ + float RcalVal; /* Rcal value in Ohm */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + float DacVoltPP; /* Final excitation voltage is DAC_VOLTpp*DAC_PGA*EXCIT_GAIN, DAC_PGA= 1 or 0.2, EXCIT_GAIN=2 or 0.25. DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + uint32_t ExcitBufGain; /* Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; /* DAC update rate is SystemCLoock/Divider. The available value is 7 to 255. Set to 7 for better perfomance */ + uint32_t ADCPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /* SINC3 OSR selection. ADCSINC3OSR_2, ADCSINC3OSR_4 */ + uint8_t ADCSinc2Osr; /* SINC2 OSR selection. ADCSINC2OSR_22...ADCSINC2OSR_1333 */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t CtiaSel; /* Select CTIA in pF unit from 0 to 31pF */ + + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float RtiaCurrValue[2]; /* Calibrated Rtia value of current frequency */ + float RtiaCalTable[MAXSWEEP_POINTS][2]; /* Calibrated Rtia Value table */ + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag BIAInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurment sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +/* End */ +}AppBIACfg_Type; + +#define BIACTRL_START 0 +#define BIACTRL_STOPNOW 1 +#define BIACTRL_STOPSYNC 2 +#define BIACTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define BIACTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppBIAGetCfg(void *pCfg); +AD5940Err AppBIAInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount); +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara); + +#endif diff --git a/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvoptx b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvoptx new file mode 100644 index 0000000..0fbea52 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance-HiZ_Electrodes.c + BodyImpedance-HiZ_Electrodes.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvprojx b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvprojx new file mode 100644 index 0000000..6f64da4 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/AD5940_BIA_HiZ_Electrodes.uvprojx @@ -0,0 +1,591 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.17.1 + https://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance-HiZ_Electrodes.c + 1 + ..\BodyImpedance-HiZ_Electrodes.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/main.c b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_BIA_HiZ_Electrodes/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BIOZ-2Wire/AD5940Main.c b/examples/AD5940_BIOZ-2Wire/AD5940Main.c new file mode 100644 index 0000000..e566bca --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/AD5940Main.c @@ -0,0 +1,155 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and further process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup BioElec_Example + * @{ + */ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "BIOZ-2Wire.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +int32_t BIOZShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpCar_Type *pImp = (fImpCar_Type*)pData; + AppBIOZCtrl(BIOZCTRL_GETFREQ, &freq); + + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pBIOZCfg->MaxSeqLen = 512; + + pBIOZCfg->SinFreq = 20e3; /* 20kHz. This value is ignored if SweepEn = bTRUE */ + pBIOZCfg->RcalVal = 10000.0; /* Value of RCAl on the evaluaiton board */ + pBIOZCfg->HstiaRtiaSel = HSTIARTIA_200; + + /* Configure Switch matrix */ + pBIOZCfg->DswitchSel = SWD_CE0; + pBIOZCfg->PswitchSel = SWP_CE0; + pBIOZCfg->NswitchSel = SWN_AIN2; + pBIOZCfg->TswitchSel = SWN_AIN2; + + /* Configure Sweep Parameters */ + pBIOZCfg->SweepCfg.SweepEn = bTRUE; + pBIOZCfg->SweepCfg.SweepStart = 1000; + pBIOZCfg->SweepCfg.SweepStop = 200000.0; + pBIOZCfg->SweepCfg.SweepPoints = 40; /* Maximum is 100 */ + pBIOZCfg->SweepCfg.SweepLog = bFALSE; + + pBIOZCfg->BIOZODR = 5; /* ODR(Sample Rate) 5Hz */ + pBIOZCfg->NumOfData = -1; /* Never stop until you stop it manually by AppBIOZCtrl() function */ +} + + +void AD5940_Main(void) +{ + uint32_t temp; + + AD5940PlatformCfg(); + + AD5940BIOZStructInit(); /* Configure your parameters in this function */ + + AppBIOZInit(AppBuff, APPBUFF_SIZE); /* Initialize BIOZ application. Provide a buffer, which is used to store sequencer commands */ + AppBIOZCtrl(BIOZCTRL_START, 0); /* Control BIOZ measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppBIOZISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + BIOZShowResult(AppBuff, temp); /* Show the results to UART */ + } + } +} + +/** + * @} + * @} + * */ + diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewd b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewp b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewp new file mode 100644 index 0000000..2ba0e9b --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\BIOZ-2Wire.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.rteconfig b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvoptx b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvoptx new file mode 100644 index 0000000..17518d2 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BIOZ-2Wire.c + BIOZ-2Wire.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvprojx b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvprojx new file mode 100644 index 0000000..c3de7c5 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/AD5940_BIOZ-2Wire.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BIOZ-2Wire.c + 1 + ..\BIOZ-2Wire.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_BIOZ-2Wire/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_BIOZ-2Wire/ADICUP3029/main.c b/examples/AD5940_BIOZ-2Wire/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.c b/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.c new file mode 100644 index 0000000..3aac68f --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.c @@ -0,0 +1,710 @@ +/****************************************************************************** +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include "BIOZ-2Wire.h" + +/** +* @note This example is modified from BIOZ example. This one is for 2-wire impedance measuremnt. +* The default pins used are CE0 and AIN2. The differnce with BIOZ is that the body voltage +* Measurment is replaced with excitation voltage measurment and it's only measured once. +*/ + +/* +Application configuration structure. Specified by user from template. +The variables are usable in this whole application. +It includes basic configuration for sequencer generator and application related parameters +*/ +AppBIOZCfg_Type AppBIOZCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .BIOZODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + .RcalVal = 10000.0, /* 10kOhm */ + + .PwrMod = AFEPWR_LP, + .HstiaRtiaSel = HSTIARTIA_10K, + .CtiaSel = 16, + .ExcitBufGain = EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 600.0, + + .SinFreq = 50000.0, /* 5000Hz */ + + .ADCPgaGain = ADCPGA_1P5, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .DftNum = DFTNUM_8192, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .SweepCfg.SweepEn = bFALSE, + .SweepCfg.SweepStart = 10000, + .SweepCfg.SweepStop = 150000.0, + .SweepCfg.SweepPoints = 100, + .SweepCfg.SweepLog = bTRUE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, /* Must be 4 when SweepEn = bTRUE*/ + .BIOZInited = bFALSE, + .StopRequired = bFALSE, +}; + +/** +This function is provided for upper controllers that want to change +application parameters specially for user defined parameters. +*/ +AD5940Err AppBIOZGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppBIOZCfg_Type**)pCfg = &AppBIOZCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +AD5940Err AppBIOZCtrl(int32_t BcmCtrl, void *pPara) +{ + switch (BcmCtrl) + { + case BIOZCTRL_START: + { + WUPTCfg_Type wupt_cfg; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppBIOZCfg.BIOZInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start the wakeup timer */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppBIOZCfg.WuptClkFreq/AppBIOZCfg.BIOZODR)-2-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 1; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + + AppBIOZCfg.FifoDataCount = 0; /* restart */ +#ifdef ADI_DEBUG + ADI_Print("BIOZ Start...\n"); +#endif + break; + } + case BIOZCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Stop Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + AD5940_WUPTCtrl(bFALSE); +#ifdef ADI_DEBUG + ADI_Print("BIOZ Stop Now...\n"); +#endif + break; + } + case BIOZCTRL_STOPSYNC: + { +#ifdef ADI_DEBUG + ADI_Print("BIOZ Stop SYNC...\n"); +#endif + AppBIOZCfg.StopRequired = bTRUE; + break; + } + case BIOZCTRL_GETFREQ: + if(pPara) + { + if(AppBIOZCfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppBIOZCfg.FreqofData; + else + *(float*)pPara = AppBIOZCfg.SinFreq; + } + break; + case BIOZCTRL_SHUTDOWN: + { + AppBIOZCtrl(BIOZCTRL_STOPNOW, 0); /* Stop the measurment if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ +#ifdef ADI_DEBUG + ADI_Print("BIOZ Shut down...\n"); +#endif + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppBIOZSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + + /* LP reference control - turn off them to save powr*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + hs_loop.HsDacCfg.ExcitBufGain = AppBIOZCfg.ExcitBufGain; + hs_loop.HsDacCfg.HsDacGain = AppBIOZCfg.HsDacGain; + hs_loop.HsDacCfg.HsDacUpdateRate = AppBIOZCfg.HsDacUpdateRate; + + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hs_loop.HsTiaCfg.HstiaCtia = AppBIOZCfg.CtiaSel; /* 31pF + 2pF */ + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = AppBIOZCfg.HstiaRtiaSel; + + hs_loop.SWMatCfg.Dswitch = SWD_OPEN; + hs_loop.SWMatCfg.Pswitch = SWP_PL|SWP_PL2; + hs_loop.SWMatCfg.Nswitch = SWN_NL|SWN_NL2; + hs_loop.SWMatCfg.Tswitch = SWT_TRTIA; + + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; + hs_loop.WgCfg.OffsetCalEn = bFALSE; + if(AppBIOZCfg.SweepCfg.SweepEn == bTRUE) + { + AppBIOZCfg.SweepCfg.SweepIndex = 0; + AppBIOZCfg.FreqofData = AppBIOZCfg.SweepCfg.SweepStart; + AppBIOZCfg.SweepCurrFreq = AppBIOZCfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppBIOZCfg.SweepCfg, &AppBIOZCfg.SweepNextFreq); + sin_freq = AppBIOZCfg.SweepCurrFreq; + } + else + { + sin_freq = AppBIOZCfg.SinFreq; + AppBIOZCfg.FreqofData = sin_freq; + } + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppBIOZCfg.SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppBIOZCfg.DacVoltPP/800.0f*2047 + 0.5f); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppBIOZCfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care becase it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBIOZCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBIOZCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppBIOZCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBIOZCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBIOZCfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extral command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop seuqncer generator */ + if(error == AD5940ERR_OK) + { + AppBIOZCfg.InitSeqInfo.SeqId = SEQID_1; + AppBIOZCfg.InitSeqInfo.SeqRamAddr = AppBIOZCfg.SeqStartAddr; + AppBIOZCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppBIOZCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIOZCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIOZSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBIOZCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppBIOZCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBIOZCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBIOZCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBIOZCfg.SysClkFreq/AppBIOZCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_SEQGpioCtrlS(AGPIO_Pin1/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Configure switch matrix to connect the sensor */ + sw_cfg.Dswitch = AppBIOZCfg.DswitchSel; + sw_cfg.Pswitch = AppBIOZCfg.PswitchSel; + sw_cfg.Nswitch = AppBIOZCfg.NswitchSel; + sw_cfg.Tswitch = AppBIOZCfg.TswitchSel|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); + /* Step 1: Measure Current */ + AD5940_ADCMuxCfgS(ADCMUXP_HSTIA_P, ADCMUXN_HSTIA_N); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_SEQGenInsert(SEQ_WAIT(1)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + /* Step 2: Measure Voltage */ + AD5940_ADCMuxCfgS(ADCMUXP_VCE0, ADCMUXN_N_NODE); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_SEQGenInsert(SEQ_WAIT(1)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + sw_cfg.Dswitch = SWD_OPEN; + sw_cfg.Pswitch = SWP_PL|SWP_PL2; + sw_cfg.Nswitch = SWN_NL|SWN_NL2; + sw_cfg.Tswitch = SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); /* Float switches */ + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop seuqncer generator */ + + if(error == AD5940ERR_OK) + { + AppBIOZCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppBIOZCfg.MeasureSeqInfo.SeqRamAddr = AppBIOZCfg.InitSeqInfo.SeqRamAddr + AppBIOZCfg.InitSeqInfo.SeqLen ; + AppBIOZCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppBIOZCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIOZCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIOZRtiaCal(void) +{ + HSRTIACal_Type hsrtia_cal; + FreqParams_Type freq_params; + + if(AppBIOZCfg.SweepCfg.SweepEn == bTRUE) + { + hsrtia_cal.fFreq = AppBIOZCfg.SweepCfg.SweepStart; + freq_params = AD5940_GetFreqParameters(AppBIOZCfg.SweepCfg.SweepStart); + } + else + { + hsrtia_cal.fFreq = AppBIOZCfg.SinFreq; + freq_params = AD5940_GetFreqParameters(AppBIOZCfg.SinFreq); + } + + if(freq_params.HighPwrMode == bTRUE) + hsrtia_cal.AdcClkFreq = 32e6; + else + hsrtia_cal.AdcClkFreq = 16e6; + hsrtia_cal.ADCSinc2Osr = freq_params.ADCSinc2Osr; + hsrtia_cal.ADCSinc3Osr = freq_params.ADCSinc3Osr; + hsrtia_cal.DftCfg.DftNum = freq_params.DftNum; + hsrtia_cal.DftCfg.DftSrc = freq_params.DftSrc; + hsrtia_cal.bPolarResult = bTRUE; /* We need magnitude and phase here */ + hsrtia_cal.DftCfg.HanWinEn = AppBIOZCfg.HanWinEn; + hsrtia_cal.fRcal= AppBIOZCfg.RcalVal; + hsrtia_cal.HsTiaCfg.DiodeClose = bFALSE; + hsrtia_cal.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hsrtia_cal.HsTiaCfg.HstiaCtia = AppBIOZCfg.CtiaSel; + hsrtia_cal.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsrtia_cal.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hsrtia_cal.HsTiaCfg.HstiaRtiaSel = AppBIOZCfg.HstiaRtiaSel; + hsrtia_cal.SysClkFreq = AppBIOZCfg.SysClkFreq; + + + if(AppBIOZCfg.SweepCfg.SweepEn == bTRUE) + { + uint32_t i; + AppBIOZCfg.SweepCfg.SweepIndex = 0; /* Reset index */ + for(i=0;i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + if((AppBIOZCfg.ReDoRtiaCal == bTRUE) || \ + AppBIOZCfg.BIOZInited == bFALSE) /* Do calibration on the first initializaion */ + { + AppBIOZRtiaCal(); + AppBIOZCfg.ReDoRtiaCal = bFALSE; + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppBIOZCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppBIOZCfg.BIOZInited == bFALSE)||\ + (AppBIOZCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppBIOZSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppBIOZSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppBIOZCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppBIOZCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIOZCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppBIOZCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Measurment sequence */ + AppBIOZCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIOZCfg.MeasureSeqInfo); + + AppBIOZCheckFreq(AppBIOZCfg.FreqofData); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AppBIOZCfg.BIOZInited = bTRUE; /* BIOZ application has been initialized. */ + return AD5940ERR_OK; +} + +/* Depending on frequency of Sin wave set optimum filter settings */ +AD5940Err AppBIOZCheckFreq(float freq) +{ + ADCFilterCfg_Type filter_cfg; + DFTCfg_Type dft_cfg; + HSDACCfg_Type hsdac_cfg; + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + FreqParams_Type freq_params; + uint32_t SeqCmdBuff[2]; + uint32_t SRAMAddr = 0;; + /* Step 1: Check Frequency */ + freq_params = AD5940_GetFreqParameters(freq); + + /* Set power mode */ + if(freq_params.HighPwrMode == bTRUE) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain = AppBIOZCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = AppBIOZCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x7; + AD5940_HSDacCfgS(&hsdac_cfg); + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_1P6MHZ; + AppBIOZCfg.AdcClkFreq = 32e6; + + /* Change clock to 32MHz oscillator */ + AD5940_HPModeEn(bTRUE); + }else + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain = AppBIOZCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = AppBIOZCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x1B; + AD5940_HSDacCfgS(&hsdac_cfg); + /* Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_800KHZ; + AppBIOZCfg.AdcClkFreq = 16e6; + + /* Change clock to 16MHz oscillator */ + AD5940_HPModeEn(bFALSE); + } + + /* Step 2: Adjust ADCFILTERCON and DFTCON to set optimumn SINC3, SINC2 and DFTNUM settings */ + filter_cfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + filter_cfg.ADCSinc2Osr = freq_params.ADCSinc2Osr; + filter_cfg.ADCSinc3Osr = freq_params.ADCSinc3Osr; + filter_cfg.BpSinc3 = bFALSE; + filter_cfg.BpNotch = bTRUE; + filter_cfg.Sinc2NotchEnable = bTRUE; + dft_cfg.DftNum = freq_params.DftNum; + dft_cfg.DftSrc = freq_params.DftSrc; + dft_cfg.HanWinEn = AppBIOZCfg.HanWinEn; + AD5940_ADCFilterCfgS(&filter_cfg); + AD5940_DFTCfgS(&dft_cfg); + + /* Step 3: Calculate clocks needed to get result to FIFO and update sequencer wait command */ + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = freq_params.DftSrc; + clks_cal.DataCount = 1L<<(freq_params.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = freq_params.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = freq_params.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBIOZCfg.SysClkFreq/AppBIOZCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Maximum number of clocks is 0x3FFFFFFF. More are needed if the frequency is low */ + if(WaitClks > 0x3FFFFFFF) + { + WaitClks /=2; + SRAMAddr = AppBIOZCfg.MeasureSeqInfo.SeqRamAddr; + SeqCmdBuff[0] = SEQ_WAIT(WaitClks); + AD5940_SEQCmdWrite(SRAMAddr+11, SeqCmdBuff, 1); + AD5940_SEQCmdWrite(SRAMAddr+12, SeqCmdBuff, 1); + AD5940_SEQCmdWrite(SRAMAddr+18, SeqCmdBuff, 1); + AD5940_SEQCmdWrite(SRAMAddr+19, SeqCmdBuff, 1); + } + else + { + SRAMAddr = AppBIOZCfg.MeasureSeqInfo.SeqRamAddr; + SeqCmdBuff[0] = SEQ_WAIT(WaitClks); + AD5940_SEQCmdWrite(SRAMAddr+11, SeqCmdBuff, 1); + AD5940_SEQCmdWrite(SRAMAddr+18, SeqCmdBuff, 1); + } + + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppBIOZRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppBIOZCfg.NumOfData > 0) + { + AppBIOZCfg.FifoDataCount += *pDataCount/4; + if(AppBIOZCfg.FifoDataCount >= AppBIOZCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppBIOZCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppBIOZCfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AppBIOZCheckFreq(AppBIOZCfg.SweepNextFreq); + AD5940_WGFreqCtrlS(AppBIOZCfg.SweepNextFreq, AppBIOZCfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppBIOZDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/4; + + fImpCar_Type * pOut = (fImpCar_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/4)*4; /* One DFT result has two data in FIFO, real part and imaginary part. Each measurement has 2 DFT results, one for voltage measurement, one for current */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + *pCount = 0; + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppBIOZRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode to save power. */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter hibernate mode */ + /* Process data */ + AppBIOZDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + +/** +* @} +*/ + diff --git a/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.h b/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.h new file mode 100644 index 0000000..13e7ad1 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/BIOZ-2Wire.h @@ -0,0 +1,97 @@ +/*! + @file: BIOZ-2Wire.h + @author: Neo Xu + @brief: 4-wire BIOZ measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#ifndef _BODYCOMPOSITION_H_ +#define _BODYCOMPOSITION_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +#define MAXSWEEP_POINTS 100 /* Need to know how much buffer is needed to save RTIA calibration result */ + +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration. +*/ + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIOZInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + //BoolFlag bBioElecBoard; /* The code is same for BioElec board and AD5941Sens1 board. No changes are needed */ + BoolFlag ReDoRtiaCal; /* Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /* The real frequency of system clock */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*2 */ + float BIOZODR; /* in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float SinFreq; /* Frequency of excitation signal */ + float RcalVal; /* Rcal value in Ohm */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + float DacVoltPP; /* Final excitation voltage is DacVoltPP*DAC_PGA*EXCIT_GAIN, DAC_PGA= 1 or 0.2, EXCIT_GAIN=2 or 0.25. DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + uint32_t ExcitBufGain; /* Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; /* DAC update rate is SystemCLoock/Divider. The available value is 7 to 255. Set to 7 for better performance */ + uint32_t ADCPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /* SINC3 OSR selection. ADCSINC3OSR_2, ADCSINC3OSR_4 */ + uint8_t ADCSinc2Osr; /* SINC2 OSR selection. ADCSINC2OSR_22...ADCSINC2OSR_1333 */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t CtiaSel; /* Select CTIA in pF unit from 0 to 31pF */ + + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + + /* Switch Configuration */ + uint32_t DswitchSel; + uint32_t PswitchSel; + uint32_t NswitchSel; + uint32_t TswitchSel; + + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + fImpCar_Type RtiaCurrValue; /* Calibrated Rtia value at current frequency */ + fImpCar_Type RtiaCalTable[MAXSWEEP_POINTS]; /* Calibrated Rtia Value table */ + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag BIOZInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +/* End */ +}AppBIOZCfg_Type; + +#define BIOZCTRL_START 0 +#define BIOZCTRL_STOPNOW 1 +#define BIOZCTRL_STOPSYNC 2 +#define BIOZCTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define BIOZCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppBIOZGetCfg(void *pCfg); +AD5940Err AppBIOZInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppBIOZISR(void *pBuff, uint32_t *pCount); +AD5940Err AppBIOZCtrl(int32_t BcmCtrl, void *pPara); +AD5940Err AppBIOZCheckFreq(float freq); + +#endif diff --git a/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvoptx b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvoptx new file mode 100644 index 0000000..efcf66c --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BIOZ-2Wire.c + BIOZ-2Wire.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvprojx b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvprojx new file mode 100644 index 0000000..f278a77 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/AD5940_BIOZ-2Wire.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BIOZ-2Wire.c + 1 + ..\BIOZ-2Wire.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/main.c b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_BIOZ-2Wire/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BioElec/AD5940Main.c b/examples/AD5940_BioElec/AD5940Main.c new file mode 100644 index 0000000..629568a --- /dev/null +++ b/examples/AD5940_BioElec/AD5940Main.c @@ -0,0 +1,338 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "BodyImpedance.h" +#include "Electrocardiograph.h" +#include "ElectrodermalActivity.h" + +#define APP_NUM 3 /* Totally, we have 3 applications */ + +#define APP_ID_EDA 0 +#define APP_ID_ECG 1 +#define APP_ID_BIA 2 + +#define APP_EDA_SEQ_ADDR 0 +#define APP_ECG_SEQ_ADDR 256 +#define APP_BIA_SEQ_ADDR 384 + +#define APP_EDA_MAX_SEQLEN 256 +#define APP_ECG_MAX_SEQLEN 128 +#define APP_BIA_MAX_SEQLEN 128 + +typedef struct +{ + AD5940Err (*pAppGetCfg) (void *pCfg); + AD5940Err (*pAppInit) (uint32_t *pBuffer, uint32_t BufferSize); + AD5940Err (*pAppISR) (void *pBuff, uint32_t *pCount); + AD5940Err (*pAppCtrl) (int32_t BcmCtrl, void *pPara); + AD5940Err (*pAppUserDataProc) (void *pBuff, uint32_t pCount); +}BioElecApp_Type; + +AD5940Err BIAShowResult(void *pData, uint32_t DataCount); +AD5940Err ECGShowResult(void *pData, uint32_t DataCount); +AD5940Err EDAShowResult(void *pData, uint32_t DataCount); + +BioElecApp_Type BioElecAppList[APP_NUM]= +{ + /* EDA App */ + { + .pAppGetCfg = AppEDAGetCfg, + .pAppInit = AppEDAInit, + .pAppISR = AppEDAISR, + .pAppCtrl = AppEDACtrl, + .pAppUserDataProc = EDAShowResult, + }, + /* ECG App */ + { + .pAppGetCfg = AppECGGetCfg, + .pAppInit = AppECGInit, + .pAppISR = AppECGISR, + .pAppCtrl = AppECGCtrl, + .pAppUserDataProc = ECGShowResult, + }, + /* BIA App */ + { + .pAppGetCfg = AppBIAGetCfg, + .pAppInit = AppBIAInit, + .pAppISR = AppBIAISR, + .pAppCtrl = AppBIACtrl, + .pAppUserDataProc = BIAShowResult, + }, +}; +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; /* Measured LFOSC frequency */ + +/* It's your choice here how to do with the data. Here is just an example to print them to UART */ +AD5940Err BIAShowResult(void *pData, uint32_t DataCount) +{ + float freq; + + fImpPol_Type *pImp = (fImpPol_Type*)pData; + AppBIACtrl(BIACTRL_GETFREQ, &freq); + + printf("Freq:%.2f ", freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = APP_BIA_SEQ_ADDR; + pBIACfg->MaxSeqLen = APP_BIA_MAX_SEQLEN; /* @todo add checker in function */ + + pBIACfg->RcalVal = 10000.0; + pBIACfg->DftNum = DFTNUM_8192; + pBIACfg->NumOfData = -1; /* Never stop until you stop it manually by AppBIACtrl() function */ + pBIACfg->BiaODR = 20; /* ODR(Sample Rate) 20Hz */ + pBIACfg->FifoThresh = 4; /* 4 */ + pBIACfg->ADCSinc3Osr = ADCSINC3OSR_2; + pBIACfg->LfoscClkFreq = LFOSCFreq; + + pBIACfg->bParaChanged = bTRUE; /* Always initialize AFE. */ +} + +/* !!Change the application parameters here if you want to change it to none-default value */ +void AD5940ECGStructInit(void) +{ + AppECGCfg_Type *pCfg; + + AppECGGetCfg(&pCfg); + + pCfg->SeqStartAddr = APP_ECG_SEQ_ADDR; + pCfg->MaxSeqLen = APP_ECG_MAX_SEQLEN; /* @todo add checker in function */ + + pCfg->ECGODR = 250; /* ODR(Sample Rate) 200Hz */ + pCfg->FifoThresh = 256; /* 4 */ + pCfg->ADCSinc3Osr = ADCSINC3OSR_2; + pCfg->LfoscClkFreq = LFOSCFreq; + pCfg->bParaChanged = bTRUE; /* We always initialize AFE. */ +} + +void AD5940EDAStructInit(void) +{ + AppEDACfg_Type *pCfg; + + AppEDAGetCfg(&pCfg); + pCfg->SeqStartAddr = APP_EDA_SEQ_ADDR; + pCfg->MaxSeqLen = APP_EDA_MAX_SEQLEN; + + pCfg->LfoscClkFreq = LFOSCFreq; + + pCfg->bParaChanged = bTRUE; /* We always initialize AFE. */ +} + +BioElecApp_Type *pCurrApp; +uint8_t bSwitchingApp = 1; +uint8_t toApp = APP_ID_BIA; + +void AD5940_Main(void) +{ + static uint32_t IntCount; + uint32_t temp; + + AD5940PlatformCfg(); + AD5940BIAStructInit(); /* Configure your parameters in this function */ + AD5940ECGStructInit(); /* */ + AD5940EDAStructInit(); /* */ + pCurrApp = &BioElecAppList[toApp]; + while(1) + { + if(bSwitchingApp) + { + //if the 'old' app stopped? + BoolFlag running; + if(pCurrApp->pAppCtrl(APPCTRL_RUNNING, &running) == AD5940ERR_OK){ + if(running == bFALSE){ + bSwitchingApp = 0; + pCurrApp = &BioElecAppList[toApp]; + /* Initialize registers that fit to all measurements */ + AD5940PlatformCfg(); + pCurrApp->pAppInit(AppBuff, APPBUFF_SIZE); + AD5940_ClrMCUIntFlag(); /* Clear the interrupts happened during initialization */ + pCurrApp->pAppCtrl(APPCTRL_START, 0); + } + } + } + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + pCurrApp->pAppISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + if(pCurrApp->pAppUserDataProc) + pCurrApp->pAppUserDataProc(AppBuff, temp); /* Show the results to UART */ + + if(IntCount++ == 10) + { + IntCount = 0; + /* Control the application at any time */ + /* For example, I want to measure EDA excitation voltage periodically */ + //if(toApp == APP_ID_EDA) + // pCurrApp->pAppCtrl(EDACTRL_MEASVOLT, 0); + } + } + } +} + + +uint32_t command_start_measurement(uint32_t para1, uint32_t para2) +{ + pCurrApp->pAppCtrl(APPCTRL_START, 0); + return 0; +} + +uint32_t command_stop_measurement(uint32_t para1, uint32_t para2) +{ + pCurrApp->pAppCtrl(APPCTRL_STOPNOW, 0); + return 0; +} + +uint32_t command_switch_app(uint32_t AppID, uint32_t para2) +{ + if(AppID == APP_ID_EDA) + { + AD5940EDAStructInit(); + printf("Switch to EDA application\n"); + } + else if(AppID == APP_ID_ECG) + { + AD5940ECGStructInit(); + printf("Switch to ECG application\n"); + } + else if(AppID == APP_ID_BIA) + { + AD5940BIAStructInit(); + printf("Switch to BIA application\n"); + } + else{ + printf("Wrong application ID.\n"); + return (uint32_t)-1; + } + + if(pCurrApp) + pCurrApp->pAppCtrl(APPCTRL_STOPSYNC, 0); + bSwitchingApp = 1; + toApp = AppID; + return 0; +} + diff --git a/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewd b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewp b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewp new file mode 100644 index 0000000..7a92048 --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.ewp @@ -0,0 +1,2244 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\BodyImpedance.c + + + $PROJ_DIR$\..\Electrocardiograph.c + + + $PROJ_DIR$\..\ElectrodermalActivity.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\..\UARTCmd.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.rteconfig b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvoptx b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvoptx new file mode 100644 index 0000000..4dfad53 --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvoptx @@ -0,0 +1,337 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + wupt_cfg.SeqxSleepTime[0],0x0A + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance.c + BodyImpedance.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\Electrocardiograph.c + Electrocardiograph.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\ElectrodermalActivity.c + ElectrodermalActivity.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\UARTCmd.c + UARTCmd.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvprojx b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvprojx new file mode 100644 index 0000000..3b94caa --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/AD5940_BioElec.uvprojx @@ -0,0 +1,518 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance.c + 1 + ..\BodyImpedance.c + + + Electrocardiograph.c + 1 + ..\Electrocardiograph.c + + + ElectrodermalActivity.c + 1 + ..\ElectrodermalActivity.c + + + UARTCmd.c + 1 + ..\UARTCmd.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_BioElec/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_BioElec/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_BioElec/ADICUP3029/main.c b/examples/AD5940_BioElec/ADICUP3029/main.c new file mode 100644 index 0000000..d58b160 --- /dev/null +++ b/examples/AD5940_BioElec/ADICUP3029/main.c @@ -0,0 +1,173 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} + +void UART_Int_Handler(void) +{ + void UARTCmd_Process(char); + uint32_t flag; + flag = pADI_UART0->LSR; + flag = pADI_UART0->IIR; + if((flag & 0x0e) == 0x04) /* Receive Byte */ + { + uint32_t count; + count = pADI_UART0->RFC; /* Receive FIFO count */ + for(int i=0;i < count; i++) + { + char c; + c = pADI_UART0->COMRX&0xff; + UARTCmd_Process(c); + } + } + if((flag & 0x0e) == 0xc) /* Time-out */ + { + uint32_t count; + count = pADI_UART0->RFC; /* Receive FIFO count */ + for(int i=0;i < count; i++) + { + char c; + c = pADI_UART0->COMRX&0xff; + UARTCmd_Process(c); + } + } +} diff --git a/examples/AD5940_BioElec/BodyImpedance.c b/examples/AD5940_BioElec/BodyImpedance.c new file mode 100644 index 0000000..308354e --- /dev/null +++ b/examples/AD5940_BioElec/BodyImpedance.c @@ -0,0 +1,636 @@ +/*! + ***************************************************************************** + @file: BodyImpedance.c + @author: Neo Xu + @brief: Body impedance measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "BodyImpedance.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppBIACfg_Type AppBIACfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .LfoscClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .BiaODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + .RcalVal = 10000.0, /* 10kOhm */ + + .PwrMod = AFEPWR_LP, + .HstiaRtiaSel = HSTIARTIA_1K, + .CtiaSel = 16, + .ExcitBufGain = EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 800.0, + + .SinFreq = 50000.0, /* 50kHz */ + + .ADCPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .DftNum = DFTNUM_8192, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .SweepCfg.SweepEn = bFALSE, + .SweepCfg.SweepStart = 10000, + .SweepCfg.SweepStop = 150000.0, + .SweepCfg.SweepPoints = 100, + .SweepCfg.SweepLog = bTRUE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, + .BIAInited = bFALSE, + .StopRequired = bFALSE, + .bRunning = bFALSE, + .MeasSeqCycleCount = 0, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppBIAGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppBIACfg_Type**)pCfg = &AppBIACfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara) +{ + switch (BcmCtrl) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppBIACfg.LfoscClkFreq/AppBIACfg.BiaODR)-2-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 1; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + + AppBIACfg.FifoDataCount = 0; /* restart */ + AppBIACfg.bRunning = bTRUE; +#ifdef ADI_DEBUG + ADI_Print("BIA Start...\n"); +#endif + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + AppBIACfg.bRunning = bFALSE; +#ifdef ADI_DEBUG + ADI_Print("BIA Stop Now...\n"); +#endif + break; + } + case APPCTRL_STOPSYNC: + { +#ifdef ADI_DEBUG + ADI_Print("BIA Stop SYNC...\n"); +#endif + AppBIACfg.StopRequired = bTRUE; + break; + } + case BIACTRL_GETFREQ: + if(pPara) + { + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppBIACfg.FreqofData; + else + *(float*)pPara = AppBIACfg.SinFreq; + } + break; + case APPCTRL_SHUTDOWN: + { + AppBIACtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ +#ifdef ADI_DEBUG + ADI_Print("BIA Shut down...\n"); +#endif + } + break; + case APPCTRL_RUNNING: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(BoolFlag*)pPara = AppBIACfg.bRunning; + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppBIASeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type hs_loop; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + //AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + hs_loop.HsDacCfg.ExcitBufGain = AppBIACfg.ExcitBufGain; + hs_loop.HsDacCfg.HsDacGain = AppBIACfg.HsDacGain; + hs_loop.HsDacCfg.HsDacUpdateRate = AppBIACfg.HsDacUpdateRate; + + hs_loop.HsTiaCfg.DiodeClose = bFALSE; + hs_loop.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hs_loop.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; /* 31pF + 2pF */ + hs_loop.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hs_loop.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + hs_loop.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + + hs_loop.SWMatCfg.Dswitch = SWD_OPEN; + hs_loop.SWMatCfg.Pswitch = SWP_PL|SWP_PL2; + hs_loop.SWMatCfg.Nswitch = SWN_NL|SWN_NL2; + hs_loop.SWMatCfg.Tswitch = SWT_TRTIA; + + hs_loop.WgCfg.WgType = WGTYPE_SIN; + hs_loop.WgCfg.GainCalEn = bFALSE; + hs_loop.WgCfg.OffsetCalEn = bFALSE; + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.SweepCfg.SweepIndex = 0; + AppBIACfg.FreqofData = AppBIACfg.SweepCfg.SweepStart; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + sin_freq = AppBIACfg.SweepCurrFreq; + } + else + { + sin_freq = AppBIACfg.SinFreq; + AppBIACfg.FreqofData = sin_freq; + } + hs_loop.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppBIACfg.SysClkFreq); + hs_loop.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppBIACfg.DacVoltPP/800.0f*2047 + 0.5f); + hs_loop.WgCfg.SinCfg.SinOffsetWord = 0; + hs_loop.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&hs_loop); + + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData12Bit = (uint32_t)((1100-200)/2200.0*4095); + lp_loop.LpDacCfg.DacData6Bit = 31; + + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = LPTIARF_20K; + lp_loop.LpAmpCfg.LpTiaRload = LPTIARLOAD_SHORT; + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(6)|LPTIASW(7)|LPTIASW(8)|LPTIASW(9)|LPTIASW(12)|LPTIASW(13); + AD5940_LPLoopCfgS(&lp_loop); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppBIACfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppBIACfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppBIACfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppBIACfg.InitSeqInfo.SeqId = SEQID_1; + AppBIACfg.InitSeqInfo.SeqRamAddr = AppBIACfg.SeqStartAddr; + AppBIACfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIASeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppBIACfg.DftSrc; + clks_cal.DataCount = 1L<<(AppBIACfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppBIACfg.SysClkFreq/AppBIACfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); + sw_cfg.Dswitch = SWD_CE0; + sw_cfg.Pswitch = SWP_CE0; + sw_cfg.Nswitch = SWN_AIN1; + sw_cfg.Tswitch = SWT_AIN1|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_ADCMuxCfgS(ADCMUXP_HSTIA_P, ADCMUXN_HSTIA_N); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + AD5940_ADCMuxCfgS(ADCMUXP_AIN3, ADCMUXN_AIN2); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator, ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + + sw_cfg.Dswitch = SWD_OPEN; + sw_cfg.Pswitch = SWP_PL|SWP_PL2; + sw_cfg.Nswitch = SWN_NL|SWN_NL2; + sw_cfg.Tswitch = SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); /* Float switches */ + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + AppBIACfg.MeasSeqCycleCount = AD5940_SEQCycleTime(); + AppBIACfg.MaxODR = 1/(((AppBIACfg.MeasSeqCycleCount + 10) / 16.0)* 1E-6) ; + if(AppBIACfg.BiaODR > AppBIACfg.MaxODR) + { + /* We have requested a sampling rate that cannot be achieved with the time it + takes to acquire a sample. + */ + AppBIACfg.BiaODR = AppBIACfg.MaxODR; + } + + if(error == AD5940ERR_OK) + { + AppBIACfg.MeasureSeqInfo.SeqId = SEQID_0; + AppBIACfg.MeasureSeqInfo.SeqRamAddr = AppBIACfg.InitSeqInfo.SeqRamAddr + AppBIACfg.InitSeqInfo.SeqLen ; + AppBIACfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppBIACfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppBIACfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppBIARtiaCal(void) +{ + HSRTIACal_Type hsrtia_cal; + + hsrtia_cal.AdcClkFreq = AppBIACfg.AdcClkFreq; + hsrtia_cal.ADCSinc2Osr = AppBIACfg.ADCSinc2Osr; + hsrtia_cal.ADCSinc3Osr = AppBIACfg.ADCSinc3Osr; + hsrtia_cal.bPolarResult = bTRUE; /* We need magnitude and phase here */ + hsrtia_cal.DftCfg.DftNum = AppBIACfg.DftNum; + hsrtia_cal.DftCfg.DftSrc = AppBIACfg.DftSrc; + hsrtia_cal.DftCfg.HanWinEn = AppBIACfg.HanWinEn; + hsrtia_cal.fRcal= AppBIACfg.RcalVal; + hsrtia_cal.HsTiaCfg.DiodeClose = bFALSE; + hsrtia_cal.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + hsrtia_cal.HsTiaCfg.HstiaCtia = AppBIACfg.CtiaSel; + hsrtia_cal.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + hsrtia_cal.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; + hsrtia_cal.HsTiaCfg.HstiaRtiaSel = AppBIACfg.HstiaRtiaSel; + hsrtia_cal.SysClkFreq = AppBIACfg.SysClkFreq; + hsrtia_cal.fFreq = AppBIACfg.SweepCfg.SweepStart; + + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + uint32_t i; + AppBIACfg.SweepCfg.SweepIndex = 0; /* Reset index */ + for(i=0;i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + + if((AppBIACfg.ReDoRtiaCal == bTRUE) || \ + AppBIACfg.BIAInited == bFALSE) /* Do calibration on the first initializaion */ + { + AppBIARtiaCal(); + AppBIACfg.ReDoRtiaCal = bFALSE; + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppBIACfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppBIACfg.BIAInited == bFALSE)||\ + (AppBIACfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppBIASeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppBIASeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppBIACfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppBIACfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppBIACfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppBIACfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppBIACfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppBIACfg.PwrMod, AFEBW_250KHZ); + AD5940_WriteReg(REG_AFE_SWMUX, 1<<3); + AppBIACfg.BIAInited = bTRUE; /* BIA application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppBIARegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppBIACfg.NumOfData > 0) + { + AppBIACfg.FifoDataCount += *pDataCount/4; + if(AppBIACfg.FifoDataCount >= AppBIACfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppBIACfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + AppBIACfg.StopRequired = bFALSE; + AppBIACfg.bRunning = bFALSE; + return AD5940ERR_OK; + } + if(AppBIACfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppBIACfg.SweepNextFreq, AppBIACfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppBIADataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/4; + + fImpPol_Type * const pOut = (fImpPol_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/4)*4;/* We expect RCAL data together with Rz data. One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal*pDftVolt->Real+(float)pDftVolt->Image*pDftVolt->Image); + VoltPhase = atan2(-pDftVolt->Image,pDftVolt->Real); + CurrMag = sqrt((float)pDftCurr->Real*pDftCurr->Real+(float)pDftCurr->Image*pDftCurr->Image); + CurrPhase = atan2(-pDftCurr->Image,pDftCurr->Real); + + VoltMag = VoltMag/CurrMag*AppBIACfg.RtiaCurrValue[0]; + VoltPhase = VoltPhase - CurrPhase + AppBIACfg.RtiaCurrValue[1]; + //printf("V:%d,%d,I:%d,%d ",pDftVolt->Real,pDftVolt->Image, pDftCurr->Real, pDftCurr->Image); + + pOut[i].Magnitude = VoltMag; + pOut[i].Phase = VoltPhase; + } + *pDataCount = ImpResCount; + /* Calculate next frequency point */ + if(AppBIACfg.SweepCfg.SweepEn == bTRUE) + { + AppBIACfg.FreqofData = AppBIACfg.SweepCurrFreq; + AppBIACfg.SweepCurrFreq = AppBIACfg.SweepNextFreq; + AppBIACfg.RtiaCurrValue[0] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][0]; + AppBIACfg.RtiaCurrValue[1] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][1]; + AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq); + } + return AD5940ERR_OK; +} + +/** + +*/ +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + if(AppBIACfg.BIAInited == bFALSE) + return AD5940ERR_APPERROR; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + *pCount = 0; + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppBIARegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter hibernate mode */ + /* Process data */ + AppBIADataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + + diff --git a/examples/AD5940_BioElec/BodyImpedance.h b/examples/AD5940_BioElec/BodyImpedance.h new file mode 100644 index 0000000..4e4c437 --- /dev/null +++ b/examples/AD5940_BioElec/BodyImpedance.h @@ -0,0 +1,98 @@ +/*! + ***************************************************************************** + @file: BodyImpedance.h + @author: Neo Xu + @brief: 4-wire body impedance measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _BODYCOMPOSITION_H_ +#define _BODYCOMPOSITION_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +#define MAXSWEEP_POINTS 100 /* Need to know how much buffer is needed to save RTIA calibration result */ + +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration. +*/ + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + //BoolFlag bBioElecBoard; /* The code is same for BioElec board and AD5941Sens1 board. No changes are needed */ + BoolFlag ReDoRtiaCal; /* Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /* The real frequency of system clock */ + float LfoscClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + float BiaODR; /* in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float SinFreq; /* Frequency of excitation signal */ + float RcalVal; /* Rcal value in Ohm */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + float DacVoltPP; /* Final excitation voltage is DAC_VOLTpp*DAC_PGA*EXCIT_GAIN, DAC_PGA= 1 or 0.2, EXCIT_GAIN=2 or 0.25. DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + uint32_t ExcitBufGain; /* Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; /* DAC update rate is SystemCLoock/Divider. The available value is 7 to 255. Set to 7 for better performance */ + uint32_t ADCPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /* SINC3 OSR selection. ADCSINC3OSR_2, ADCSINC3OSR_4 */ + uint8_t ADCSinc2Osr; /* SINC2 OSR selection. ADCSINC2OSR_22...ADCSINC2OSR_1333 */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t CtiaSel; /* Select CTIA in pF unit from 0 to 31pF */ + + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float RtiaCurrValue[2]; /* Calibrated Rtia value of current frequency */ + float RtiaCalTable[MAXSWEEP_POINTS][2]; /* Calibrated Rtia Value table */ + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag BIAInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + BoolFlag bRunning; /**< status of if app is running. Useful when send STOP_SYNC to detect if it's actually stopped. */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ + uint32_t MeasSeqCycleCount; /* How long the measurement sequence will take */ + float MaxODR; /* Max ODR for sampling in this config */ +/* End */ +}AppBIACfg_Type; + +#ifndef APPCTRL_START +/* Common application control message */ +#define APPCTRL_START 0 /**< Start the measurement by starting Wakeup Timer */ +#define APPCTRL_STOPNOW 1 /**< Stop immediately by stop Wakeup Timer*/ +#define APPCTRL_STOPSYNC 2 /**< Stop the measurement when interrupt occurred */ +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ +#define APPCTRL_RUNNING 4 /**< Is application running? */ +#endif + +#define BIACTRL_GETFREQ 100 /* Get Current frequency of returned data from ISR */ + +AD5940Err AppBIAGetCfg(void *pCfg); +AD5940Err AppBIAInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppBIAISR(void *pBuff, uint32_t *pCount); +AD5940Err AppBIACtrl(int32_t BcmCtrl, void *pPara); + +#endif diff --git a/examples/AD5940_BioElec/Electrocardiograph.c b/examples/AD5940_BioElec/Electrocardiograph.c new file mode 100644 index 0000000..948b0fd --- /dev/null +++ b/examples/AD5940_BioElec/Electrocardiograph.c @@ -0,0 +1,396 @@ +/*! + ***************************************************************************** + @file: Electrocardiograph.c + @author: Neo Xu + @brief: ECG Measurement. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "Electrocardiograph.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppECGCfg_Type AppECGCfg = +{ + .bParaChanged = bFALSE, + .bBioElecBoard = bTRUE, + .SeqStartAddr = 0, + .MaxSeqLen = 512, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 512, + + .ECGODR = 1000.0, /* 1000.0 Hz*/ + .NumOfData = -1, + .FifoThresh = 100, + + .LfoscClkFreq = 32000.0, + .SysClkFreq = 16000000.0, + .AdcClkFreq = 16000000.0, + .PwrMod = AFEPWR_LP, + + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .ECGInited = bFALSE, + .StopRequired = bFALSE, + .bRunning = bFALSE, + .FifoDataCount = 0, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppECGGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppECGCfg_Type**)pCfg = &AppECGCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +int32_t AppECGCtrl(int32_t Command, void *pPara) +{ + + switch (Command) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppECGCfg.ECGInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppECGCfg.LfoscClkFreq/AppECGCfg.ECGODR)-4-1; + AD5940_WUPTCfg(&wupt_cfg); + + AppECGCfg.FifoDataCount = 0; /* restart */ + AppECGCfg.bRunning = bTRUE; + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + AppECGCfg.bRunning = bFALSE; + break; + } + case APPCTRL_STOPSYNC: + { + AppECGCfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppECGCtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + case APPCTRL_RUNNING: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(BoolFlag*)pPara = AppECGCfg.bRunning; + break; + default: break; + } + return AD5940ERR_OK; +} + +/* Application initialization */ +static AD5940Err AppECGSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + SWMatrixCfg_Type sw_matrix; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; /* The High speed buffers are automatically turned off during hibernate */ + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + /* Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_AIN6; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = AppECGCfg.AdcPgaGain; + AD5940_ADCBaseCfgS(&adc_base); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + adc_filter.ADCSinc3Osr = AppECGCfg.ADCSinc3Osr; + adc_filter.ADCSinc2Osr = AppECGCfg.ADCSinc2Osr; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + + sw_matrix.Dswitch = SWD_OPEN; + sw_matrix.Pswitch = SWP_RE0|SWP_RE1|SWP_DE0; + sw_matrix.Nswitch = SWN_AIN2|SWN_SE0; + sw_matrix.Tswitch = SWT_AIN0|SWT_AFE3LOAD; + AD5940_SWMatrixCfgS(&sw_matrix); + + AD5940_AFECtrlS(AFECTRL_HPREFPWR, bTRUE); /* Enable reference. It's automatically turned off during hibernate */ + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_SEQGpioCtrlS(/*AGPIO_Pin6|*/AGPIO_Pin5|AGPIO_Pin1); /* GP6 to indicate sequencer is running. GP5 to disable AD8233. GP1 to enable AD8233 RLD function. */ + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppECGCfg.InitSeqInfo.SeqId = SEQID_1; + AppECGCfg.InitSeqInfo.SeqRamAddr = AppECGCfg.SeqStartAddr; + AppECGCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppECGCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppECGCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppECGSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_SINC3; + clks_cal.DataCount = 1; /* Sample one data when wakeup */ + clks_cal.ADCSinc2Osr = AppECGCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppECGCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppECGCfg.SysClkFreq/AppECGCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + //printf("Wait clocks:%d\n", WaitClks); + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_SEQGenInsert(SEQ_WAIT(16*200)); /* Time for reference settling.*/ + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_SEQGpioCtrlS(/*AGPIO_Pin6|*/AGPIO_Pin5|AGPIO_Pin1); /* GP6 to indicate sequencer is running. GP5 to enable AD8233. GP1 to enable AD8233 RLD function. */ + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppECGCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppECGCfg.MeasureSeqInfo.SeqRamAddr = AppECGCfg.InitSeqInfo.SeqRamAddr + AppECGCfg.InitSeqInfo.SeqLen ; + AppECGCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppECGCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM. The buffer 'pSeqCmd' will be used to generate next sequence */ + AD5940_SEQCmdWrite(AppECGCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/* This function provide application initialize. It can also enable Wupt that will automatically trigger sequence. Or it can configure */ +int32_t AppECGInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + + SEQCfg_Type seq_cfg; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + AD5940_FIFOThrshSet(AppECGCfg.FifoThresh); + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bTRUE); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppECGCfg.ECGInited == bFALSE)||\ + (AppECGCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppECGSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppECGSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppECGCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppECGCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppECGCfg.InitSeqInfo); + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppECGCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppECGCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppECGCfg.MeasureSeqInfo); + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger. It's disabled in initialization sequence */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppECGCfg.PwrMod, AFEBW_250KHZ); + + AppECGCfg.ECGInited = bTRUE; /* ECG application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +int32_t AppECGRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppECGCfg.NumOfData > 0) + { + AppECGCfg.FifoDataCount += *pDataCount/4; + if(AppECGCfg.FifoDataCount >= AppECGCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppECGCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + AppECGCfg.StopRequired = bFALSE; + AppECGCfg.bRunning = bFALSE; + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static int32_t AppECGDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + + *pDataCount = 0; + + /* Get ADC result */ + for(uint32_t i=0; i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* We are operating registers, so we don't allow AFE enter sleep mode which is done in our sequencer */ + *pCount = 0; + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = AD5940_FIFOGetCnt(); + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppECGRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. AFE will stay at active mode until sequencer trigger sleep */ + /* AD5940_EnterSleepS(); // We cannot manually put AFE to hibernate because it's possible sequencer is running to take measurements */ + /* Process data */ + AppECGDataProcess(pBuff,&FifoCnt); + *pCount = FifoCnt; + return AD5940ERR_OK; + } + + return AD5940ERR_OK; +} + + diff --git a/examples/AD5940_BioElec/Electrocardiograph.h b/examples/AD5940_BioElec/Electrocardiograph.h new file mode 100644 index 0000000..04b2157 --- /dev/null +++ b/examples/AD5940_BioElec/Electrocardiograph.h @@ -0,0 +1,67 @@ +/*! + ***************************************************************************** + @file: Electrocardiograph.h + @author: Neo Xu + @brief: ECG measurement. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _ELETROCARDIOAGRAPH_H_ +#define _ELETROCARDIOAGRAPH_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + BoolFlag bBioElecBoard; /* Indicate if the board is Bioelec board. 0: AD5941Sens1 board, 1: AD5940-BioElec */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Calibration sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + float ECGODR; /* Must be less than 1500Hz. Sample frequency in Hz, this value is used to set Sleep Wakeup Timer period */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + + float LfoscClkFreq; /* The clock frequency of internal LFOSC in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /* The real frequency of system clock */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + + uint32_t AdcPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint32_t ADCSinc3Osr; + uint32_t ADCSinc2Osr; +/* Private variables for internal usage */ + BoolFlag ECGInited; /* If the program run firstly, generated sequence commands */ + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + BoolFlag bRunning; /**< status of if app is running. Useful when send STOP_SYNC to detect if it's actually stopped. */ + uint32_t FifoDataCount; /* How many data we have got from start. */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; +}AppECGCfg_Type; + +#ifndef APPCTRL_START +#define APPCTRL_START 0 /**< Start the measurement by starting Wakeup Timer */ +#define APPCTRL_STOPNOW 1 /**< Stop immediately by stop Wakeup Timer*/ +#define APPCTRL_STOPSYNC 2 /**< Stop the measurement when interrupt occurred */ +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ +#define APPCTRL_RUNNING 4 /**< Is application running? */ + +#endif + +AD5940Err AppECGGetCfg(void *pCfg); +AD5940Err AppECGInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppECGISR(void *pBuff, uint32_t *pCount); +AD5940Err AppECGCtrl(int32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_BioElec/ElectrodermalActivity.c b/examples/AD5940_BioElec/ElectrodermalActivity.c new file mode 100644 index 0000000..f697986 --- /dev/null +++ b/examples/AD5940_BioElec/ElectrodermalActivity.c @@ -0,0 +1,874 @@ +/*! + ***************************************************************************** + @file: ElectrodermalActivity.c + @author: Neo Xu + @brief: EDA measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ElectrodermalActivity.h" + +/** @addtogroup AD5940_System_Examples + * @{ + * @defgroup EDA_Example + * @brief This example is used to measure skin impedance. The main feature of this example is ultra low power consumption. + * @details + * @note Need to update code when runs at S2 silicon. + * + * + * + * @{ + * */ + +/** + * @brief The EDA application paramters. + * @details Do not modify following default parameters. Use the function in AD5940Main.c to change it. + * + * */ +AppEDACfg_Type AppEDACfg = +{ +/* Common configurations for all kinds of Application. */ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, +/* Application related parameters */ + .bBioElecBoard = bTRUE, + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .LfoscClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .FifoThresh = 4, + .EDAODR = 4.0, /* 20.0 Hz*/ + .NumOfData = -1, + .VoltCalPoints = 8, + .RcalVal = 10000.0, /* 10kOhm */ + .SinFreq = 100.0, /* 100Hz */ + .SampleFreq = 400.0, /* 400Hz */ + .SinAmplitude = 1100.0f/2, /* 1100mV peak */ + .DacUpdateRate = 7, + .LptiaRtiaSel = LPTIARTIA_100K, + + .DftNum = DFTNUM_16, + .HanWinEn = bTRUE, + + .RtiaAutoScaleEnable = bTRUE, + .RtiaAutoScaleMax = LPTIARTIA_512K, + .RtiaAutoScaleMin = LPTIARTIA_1K, + + .RtiaIndexCurr = 0, + .RtiaIndexNext = 0, + .bChangeRtia = bFALSE, + + /* private varaibles */ + .SeqPatchInfo ={ + .BuffLen = 32, + .pSeqCmd = NULL, + }, + .ImpEDABase = {0,0}, + .ImpSum = {0,0}, + .EDAInited = bFALSE, + .StopRequired = bFALSE, + .bRunning = bFALSE, + .bMeasVoltReq = bFALSE, + .EDAStateCurr = EDASTATE_INIT, + .EDAStateNext = EDASTATE_INIT, +}; + +/** + * @brief This function is provided for upper controllers that want to change + * application parameters specially for user defined parameters. + * @param pCfg: The pointer used to store application configuration structure pointer. + * @return none. +*/ +AD5940Err AppEDAGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppEDACfg_Type**)pCfg = &AppEDACfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +/** + * @brief Control application like start, stop. + * @param Command: The command for this application, select from below paramters + * - APPCTRL_START: start the measurement. Note: the ramp test need firstly call function AppRAMPInit() every time before start it. + * - APPCTRL_STOPNOW: Stop the measurement immediately. + * - APPCTRL_STOPSYNC: Stop the measuremnt when current measured data is read back. + * - APPCTRL_SHUTDOWN: Stop the measurement immediately and put AFE to shut down mode(turn off LP loop and enter hibernate). + * - EDACTRL_MEASVOLT: Measure voltage once current measurement is done(Interrupt occurred). + * - EDACTRL_GETRTIAMAG: Get current RTIA value. + * @return none. +*/ +AD5940Err AppEDACtrl(int32_t EDACtrl, void *pPara) +{ + switch (EDACtrl) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppEDACfg.EDAInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppEDACfg.LfoscClkFreq/AppEDACfg.EDAODR)-2-4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 4; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + AppEDACfg.FifoDataCount = 0; /* restart */ + AppEDACfg.bRunning = bTRUE; + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + AppEDACfg.bRunning = bFALSE; + break; + } + case APPCTRL_STOPSYNC: + { + AppEDACfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppEDACtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPLoop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + case EDACTRL_MEASVOLT: + AppEDACfg.bMeasVoltReq = bTRUE; + break; + case EDACTRL_GETRTIAMAG: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(float*)pPara = AD5940_ComplexMag(&AppEDACfg.RtiaCurrValue); + break; + case EDACTRL_RSTBASE: + AppEDACfg.ImpEDABase.Real = 0; + AppEDACfg.ImpEDABase.Image = 0; + AppEDACfg.ImpSum.Real = 0; + AppEDACfg.ImpSum.Image = 0; + AppEDACfg.ImpSumCount = 0; + break; + case EDACTRL_SETBASE: + { + fImpCar_Type *pImpBase = (fImpCar_Type *)pPara; /* The impedance used to set base line */ + AppEDACfg.ImpEDABase = *pImpBase; + } + break; + case EDACTRL_GETAVR: + if(pPara == NULL) return AD5940ERR_NULLP; + { + fImpCar_Type *pImpAVR = (fImpCar_Type *)pPara; + pImpAVR->Real = AppEDACfg.ImpSum.Real/AppEDACfg.ImpSumCount; + pImpAVR->Image = AppEDACfg.ImpSum.Image/AppEDACfg.ImpSumCount; + break; + } + case APPCTRL_RUNNING: + case EDACTRL_STATUS: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(BoolFlag*)pPara = AppEDACfg.bRunning; + break; + default: + break; + } + return AD5940ERR_OK; +} + +/** + * @brief Generate initialization sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppEDASeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSDACCfg_Type hsdac_cfg; /* Waveform Generator uses some parameter(DAC update rate) from HSDAC config registers */ + LPLoopCfg_Type lp_loop; + WGCfg_Type wg_cfg; + DSPCfg_Type dsp_cfg; + SWMatrixCfg_Type sw_cfg; + + AD5940_SEQGenCtrl(bTRUE); + /* Sequence starts here */ + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5*/|AGPIO_Pin1); + AD5940_StructInit(&aferef_cfg, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); /* Turn off all references, we only enable it when we need it. */ + + AD5940_StructInit(&lp_loop, sizeof(lp_loop)); /* Disable everything, configure them during measurement */ + AD5940_LPLoopCfgS(&lp_loop); + + AD5940_StructInit(&wg_cfg, sizeof(wg_cfg)); + wg_cfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppEDACfg.SinAmplitude/1100.0f*2047); /* Maximum amplitude is 1100mV */ + wg_cfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(AppEDACfg.SinFreq, AppEDACfg.LfoscClkFreq); + wg_cfg.SinCfg.SinPhaseWord = 0; + wg_cfg.WgType = WGTYPE_SIN; + AD5940_WGCfgS(&wg_cfg); + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); + + /* Switch configuration for BioElec board */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_AIN2|SWP_SE0; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_VSET1P1; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_AIN4; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_4; /* We use averaged SINC3 output as DFT input source */ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = ADCSINC2OSR_22; /* Don't care */ + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = ADCSINC3OSR_5; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bFALSE; + dsp_cfg.DftCfg.DftNum = AppEDACfg.DftNum; + dsp_cfg.DftCfg.DftSrc = DFTSRC_AVG; /* Use averaged SINC3 data */ + dsp_cfg.DftCfg.HanWinEn = AppEDACfg.HanWinEn; + AD5940_DSPCfgS(&dsp_cfg); + AD5940_ADCRepeatCfgS(5*(4+2)+1); /* (n+2)*osr + 1, n=4,osr=5*/ + hsdac_cfg.ExcitBufGain = EXCITBUFGAIN_2; + hsdac_cfg.HsDacGain = HSDACGAIN_1; + hsdac_cfg.HsDacUpdateRate = AppEDACfg.DacUpdateRate; /* Note: the DAC update rate is decided by register DACON.RATE */ + AD5940_HSDacCfgS(&hsdac_cfg); + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + /* Stop here */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + AppEDACfg.InitSeqInfo.SeqId = SEQID_1; + AppEDACfg.InitSeqInfo.SeqRamAddr = AppEDACfg.SeqStartAddr; + AppEDACfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppEDACfg.InitSeqInfo.SeqLen = SeqLen; + AppEDACfg.InitSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppEDACfg.InitSeqInfo); /* Write command to SRAM */ + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** + * @brief Generate patch sequence according to current measurement type(Voltage or Current). + * @details The patch is used to adjust sequencer commands already stored in SRAM of AD5940 in order to perform different measurements. + * The reason is that the sequences need to be adjusted. Using the patch method will make things easily and we won't need to modify + * sequences in register level. + * @param pPatch: pointer to patch information include the measurement type, Rtia selection and buffers. + * @return return error code. +*/ +static AD5940Err ApPEDASeqPatchGen(SeqPatchInfo_Type *pPatch) +{ + AD5940Err err; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + LPAmpCfg_Type lpamp_cfg; + AD5940_SEQGenInit(pPatch->Buffer, pPatch->BuffLen); + AD5940_SEQGenCtrl(bTRUE); + lpamp_cfg.LpAmpSel = LPAMP0; + lpamp_cfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Use normal power mode is enough */ + lpamp_cfg.LpPaPwrEn = bTRUE; /* Enable Potential amplifier */ + lpamp_cfg.LpTiaPwrEn = bTRUE; /* Enable TIA amplifier */ + lpamp_cfg.LpTiaRf = LPF_RF; /* Rf resistor controls cut off frequency. */ + lpamp_cfg.LpTiaRload = LPTIARLOAD_100R; /** @note Use 100Ohm Rload. */ + lpamp_cfg.LpTiaRtia = pPatch->RtiaSel; /* If autoscaling is enabled, use selected value. */ + if(pPatch->Type == PATCHTYPE_VOLT) + lpamp_cfg.LpTiaSW = LPTIASW_VOLT; /* Switch settings for voltage measurement */ + else if(pPatch->Type == PATCHTYPE_CURR) + lpamp_cfg.LpTiaSW = LPTIASW_CURR; /* Switch settings for current measurement */ + AD5940_LPAMPCfgS(&lpamp_cfg); + AD5940_SEQGenCtrl(bFALSE); + err = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(err != AD5940ERR_OK) + return err; + pPatch->pSeqCmd = pSeqCmd; + pPatch->SeqLen = SeqLen; + return AD5940ERR_OK; +} + +/** + * @brief Generate measurement sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppEDASeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + uint32_t i; + uint32_t DFTNumber; + + LPDACCfg_Type lpdac_cfg; + LPAmpCfg_Type lpamp_cfg; + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + /* Stage I: Initialization */ + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + /* LP loop configure: LPDAC and LPAMP */ + lpdac_cfg.LpdacSel = LPDAC0; + lpdac_cfg.DataRst = bFALSE; + lpdac_cfg.LpDacSW = LPDACSW_VBIAS2LPPA/*|LPDACSW_VBIAS2PIN*/|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lpdac_cfg.LpDacRef = LPDACREF_2P5; /* Use internal 2.5V reference */ + lpdac_cfg.LpDacSrc = LPDACSRC_WG; /* Use data from waveform generator */ + lpdac_cfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lpdac_cfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Use 6bit LPDAC for Vzero */ + lpdac_cfg.PowerEn = bTRUE; /* Enable LPDAC */ + lpdac_cfg.DacData12Bit = 0; /* Don't care, 12bit DAC data is from WG */ + lpdac_cfg.DacData6Bit = 32; /* Set it to middle scale of LPDAC. Vzero is the bias voltage of LPTIA amplifier */ + AD5940_LPDACCfgS(&lpdac_cfg); + + /* Voltage and current measurement need different switch settings, record the difference and only modify this part for different purpose */ + error = AD5940_SEQGenFetchSeq(NULL, &AppEDACfg.SeqPatchInfo.SRAMAddr); /* Record the start address of below commands */ + if(error != AD5940ERR_OK) + return error; + + lpamp_cfg.LpAmpSel = LPAMP0; + lpamp_cfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Use normal power mode is enough */ + lpamp_cfg.LpPaPwrEn = bTRUE; /* Enable Potential amplifier */ + lpamp_cfg.LpTiaPwrEn = bTRUE; /* Enable TIA amplifier */ + lpamp_cfg.LpTiaRf = LPF_RF; /* Rf resistor controls cut off frequency. */ + lpamp_cfg.LpTiaRload = LPTIARLOAD_100R; /** @note Use 100Ohm Rload. */ + lpamp_cfg.LpTiaRtia = AppEDACfg.LptiaRtiaSel; /* If autoscaling is enabled, use seleted value. */ + lpamp_cfg.LpTiaSW = LPTIASW_VOLT; /* Swtich settings for voltage measurement */ + AD5940_LPAMPCfgS(&lpamp_cfg); + + AD5940_WriteReg(REG_AFE_LPREFBUFCON, 0); /* Enable low power bandgap and 2.5V reference buffer */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Off everything */ + + AD5940_LPModeEnS(bTRUE); /* Enter LP control mode. The registers are summarized to LPMODECON, so we can control some blocks convenniently */ + AD5940_LPModeClkS(LPMODECLK_LFOSC); /* Trigger switching system clock to 32kHz */ + AD5940_LPModeCtrlS(LPMODECTRL_NONE); /* Disable all */ + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); /* Start waveform generator */ + AD5940_SEQGenInsert(SEQ_WAIT(LPF_TIME*32)); /* wait for stable */ + AD5940_AFECtrlS(AFECTRL_DFT, bTRUE); /* Enable DFT engine */ + + /* Stage II: ADC Run to sample enough data(DFT number) */ + DFTNumber = (1<<(AppEDACfg.DftNum +2)); + for(i=0;iendSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Go to hibernate */ + + /* Sequence end. */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + if(AppEDACfg.MaxSeqLen < (SeqLen + AppEDACfg.InitSeqInfo.SeqLen)) + return AD5940ERR_BUFF; /* Buffer limited */ + AppEDACfg.MeasureSeqInfo.SeqId = SEQID_0; + AppEDACfg.MeasureSeqInfo.SeqRamAddr = AppEDACfg.InitSeqInfo.SeqRamAddr + AppEDACfg.InitSeqInfo.SeqLen ; + AppEDACfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppEDACfg.MeasureSeqInfo.SeqLen = SeqLen; + AppEDACfg.MeasureSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppEDACfg.MeasureSeqInfo); /* Write command to SRAM */ + /* Record where the patch should be applied. */ + AppEDACfg.SeqPatchInfo.SRAMAddr += AppEDACfg.MeasureSeqInfo.SeqRamAddr; /* The start address in AD5940 SRAM */ + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** + * @brief Calibrate LPTIA internal RTIA resistor(s). + * @details This function will do calibration using parameters stored in @ref AppEDACfg structure. + * @return return error code. +*/ +static AD5940Err AppEDARtiaCal(void) +{ + fImpCar_Type RtiaCalValue; /* Calibration result */ + LPRTIACal_Type lprtia_cal; + AD5940_StructInit(&lprtia_cal, sizeof(lprtia_cal)); + + lprtia_cal.LpAmpSel = LPAMP0; + lprtia_cal.bPolarResult = bFALSE; /* Real + Image */ + lprtia_cal.AdcClkFreq = AppEDACfg.AdcClkFreq; + lprtia_cal.SysClkFreq = AppEDACfg.SysClkFreq; + lprtia_cal.ADCSinc3Osr = ADCSINC3OSR_4; + lprtia_cal.ADCSinc2Osr = ADCSINC2OSR_22; /* We don't use SINC2 for now. */ + lprtia_cal.DftCfg.DftNum = DFTNUM_2048; /* Maximum DFT number */ + lprtia_cal.DftCfg.DftSrc = DFTSRC_SINC2NOTCH; + lprtia_cal.DftCfg.HanWinEn = bTRUE; + lprtia_cal.fFreq = AppEDACfg.SinFreq; + lprtia_cal.fRcal = AppEDACfg.RcalVal; + lprtia_cal.bWithCtia = bTRUE; + lprtia_cal.LpAmpPwrMod = LPAMPPWR_NORM; + lprtia_cal.bWithCtia = bTRUE; + lprtia_cal.LpTiaRtia = AppEDACfg.LptiaRtiaSel; + if(AppEDACfg.RtiaAutoScaleEnable == bTRUE) + { + int i = AppEDACfg.RtiaAutoScaleMin; + for(;i<=AppEDACfg.RtiaAutoScaleMax; i++) + { + lprtia_cal.LpTiaRtia = i; + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppEDACfg.RtiaCalTable[i] = RtiaCalValue; + //printf("Rtia%d,%f,%f\n", i, RtiaCalValue.Real, RtiaCalValue.Image); + } + AppEDACfg.RtiaCurrValue = AppEDACfg.RtiaCalTable[AppEDACfg.RtiaIndexCurr]; + } + else + { + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppEDACfg.RtiaCurrValue = RtiaCalValue; + //printf("Rtia,%f,%f\n", RtiaCalValue.Real, RtiaCalValue.Image); + //printf("Rtia calibration done\n"); + } + return AD5940ERR_OK; +} + +/** + * @brief Initialize the EDA measurement. + * @details This function must be called before start measurement. It will initialize all needed hardwares and put AD5940 to ready state. + * The application parameters stored in @ref AppEDACfg can be changed. Call this function to re-initialize AD5940 with new parameters. + * @param pBuffer: the buffer for sequencer generator. Only need to provide it for the first time. + * @param BufferSize: The buffer size start from pBuffer. + * @return return error code. +*/ +AD5940Err AppEDAInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + AppEDACfg.EDAStateCurr = EDASTATE_INIT; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + /* Do RTIA calibration */ + if((AppEDACfg.ReDoRtiaCal == bTRUE) || \ + AppEDACfg.EDAInited == bFALSE) /* Do calibration on the first initialization */ + { + AppEDACfg.EDAStateCurr = EDASTATE_RTIACAL; + AppEDARtiaCal(); + AppEDACfg.ReDoRtiaCal = bFALSE; + //AppEDAMeasureRserial(); + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppEDACfg.VoltCalPoints*2; /* The first measurement is for excitation voltage. */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppEDACfg.EDAInited == bFALSE)||\ + (AppEDACfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppEDASeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppEDASeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppEDACfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequence */ + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, run initialization sequence */ + AD5940_SEQMmrTrig(AppEDACfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Apply patch for voltage measurement */ + AppEDACfg.EDAStateCurr = EDASTATE_VOLT; /* After initialization, the first thing is to measure excitation voltage */ + AppEDACfg.RtiaIndexCurr = AppEDACfg.RtiaIndexNext = AppEDACfg.LptiaRtiaSel; /* Init with a value */ + AppEDACfg.SeqPatchInfo.RtiaSel = LPTIARTIA_OPEN;//AppEDACfg.RtiaIndexCurr; + //AppEDACfg.SeqPatchInfo.bMeasureVolt = bTRUE; + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_VOLT; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + AD5940_WriteReg(REG_AFE_SWMUX, 0x01); /**@todo remove it? close switch SW1 */ + + if(AppEDACfg.RtiaAutoScaleMin > AppEDACfg.RtiaAutoScaleMax) + { + uint32_t temp; + temp = AppEDACfg.RtiaAutoScaleMin; + AppEDACfg.RtiaAutoScaleMin = AppEDACfg.RtiaAutoScaleMax; + AppEDACfg.RtiaAutoScaleMax = temp; + } + AppEDACfg.EDAInited = bTRUE; /* EDA application has been initialized. */ + return AD5940ERR_OK; +} + +/** + * @brief Register modification function. + * @details This function is called in ISR when AFE has been wakeup and we can access registers. + * @param pData: the buffer points to data read back from FIFO. Not needed for this application-RAMP + * @param pDataCount: The data count in pData buffer. + * @return return error code. +*/ +static AD5940Err AppEDARegModify(int32_t * const pData, uint32_t *pDataCount) +{ + AD5940Err error = AD5940ERR_OK; + if(AppEDACfg.EDAStateCurr == EDASTATE_VOLT) + { + SWMatrixCfg_Type sw_cfg; + /* Next step is to measure current */ + AppEDACfg.EDAStateNext = EDASTATE_CURR; + /* Need change some registers in order to measure current */ + AD5940_SEQCtrlS(bFALSE); /* Stop it for now. */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly because we are going to change FIFO threshold */ + AD5940_FIFOThrshSet(AppEDACfg.FifoThresh); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); /* Enable FIFO. */ + /* Change Switch matrix settings to connect AIN2(body) to SE0 */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_AIN2|SWP_SE0; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; /* This switch is for ECG. */ + AD5940_SWMatrixCfgS(&sw_cfg); + /* Apply patch for current measurement */ + //AppEDACfg.SeqPatchInfo.bMeasureVolt = bFALSE; + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_CURR; + AppEDACfg.SeqPatchInfo.RtiaSel = AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer. Sequencer will run when next valid trigger comes */ + } + else if(AppEDACfg.EDAStateCurr == EDASTATE_CURR) + { + if(AppEDACfg.bChangeRtia == bTRUE) + { + AppEDACfg.bChangeRtia = bFALSE; + /* Apply patch for next RTIA selection */ + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_CURR; + AppEDACfg.SeqPatchInfo.RtiaSel = AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + } + } + + if(AppEDACfg.bMeasVoltReq == bTRUE) + { + SWMatrixCfg_Type sw_cfg; + AppEDACfg.bMeasVoltReq = bFALSE; /* Clear this request */ + /* Next step is to measure voltage */ + AppEDACfg.EDAStateNext = EDASTATE_VOLT; + + /* Change Switch matrix settings to connect AIN2(body) to SE0 */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_OPEN; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; /* This switch is for ECG. */ + AD5940_SWMatrixCfgS(&sw_cfg); + + /* Need change some registers in order to measure current */ + AD5940_SEQCtrlS(bFALSE); /* Stop it for now. */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly because we are going to change FIFO threshold */ + AD5940_FIFOThrshSet(AppEDACfg.VoltCalPoints*2); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); /* Enable FIFO. */ + + /* Apply patch for current measurement */ + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_VOLT; + AppEDACfg.SeqPatchInfo.RtiaSel = LPTIARTIA_OPEN;//AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer. Sequencer will run when next valid trigger comes */ + } + + if(AppEDACfg.NumOfData > 0) + { + AppEDACfg.FifoDataCount += *pDataCount/4; + if(AppEDACfg.FifoDataCount >= AppEDACfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppEDACfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + AppEDACfg.StopRequired = bFALSE; + AppEDACfg.bRunning = bFALSE; + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/** + * @brief Depending on the data type, do appropriate data pre-process before return back to controller + * @param pImpedance: the buffer points to pre-processed data. We use the impedance magnitude value to decide new RTIA settings. + * @param uiDataCount: The data count in pData buffer. + * @return return the next appropriate RTIA index value. +*/ +static uint32_t EDARtiaAutoScaling(fImpCar_Type * const pImpedance, uint32_t uiDataCount) +{ + uint32_t OptRtiaIndex; + float MagMean = 0; + fImpCar_Type SumImp={0,0}; + + /* Get Averaged Magnitude Result */ + for(int i=0;i 4) + { + DftResCnt -= 4; + pDftRes += 4; /* Discard the first 4 results */ + } + for(uint32_t i=0;i 20) /* Wakeup AFE by read register, read 20 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + //@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppEDARegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Don't enter hibernate */ + /* Process data */ + AppEDADataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return AD5940ERR_OK; + } + return AD5940ERR_WAKEUP; +} + +/** + * @} + * @} +*/ + + diff --git a/examples/AD5940_BioElec/ElectrodermalActivity.h b/examples/AD5940_BioElec/ElectrodermalActivity.h new file mode 100644 index 0000000..7690390 --- /dev/null +++ b/examples/AD5940_BioElec/ElectrodermalActivity.h @@ -0,0 +1,139 @@ +/*! + ***************************************************************************** + @file: ElectrodermalActivity.h + @author: Neo Xu + @brief: skin impedance measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _EDA_H_ +#define _EDA_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +/* Do not modify following parameters */ +#define LPTIAPA_PMOD 0 /* Power Mode of PA and LPTIA, Set to Half Power Mode is better for power consumption, 0: normal. 0x18: boost power. BITM_AFE_ULPTIACON0_HALFPWR: half power */ +#define LPF_RF LPTIARF_20K /* Set RF resistor of Low Pass Filter */ +#define LPF_TIME 10.0 /* Unit is ms. Low Pass Filter need time to settle. 10ms is OK for now */ + +#define LPTIASW_VOLT LPTIASW(5)|LPTIASW(6)|LPTIASW(7)|LPTIASW(8)|LPTIASW(9)|LPTIASW(13) +#define LPTIASW_CURR LPTIASW(2)|LPTIASW(5)|LPTIASW(10)|LPTIASW(13) + +/** + * @brief The structure for sequencer patch. +*/ +typedef struct +{ + enum __PatchType + { + PATCHTYPE_VOLT = 0, /**< Generate patch for measuring voltage */ + PATCHTYPE_CURR, /**< Generate patch for measuring current of body */ + }Type; + uint32_t RtiaSel; /**< LPTIA RTIA selection */ + const uint32_t *pSeqCmd; /**< The sequence to measure voltage and current is similar. The difference is stored in a command patch. */ + uint32_t SeqLen; /**< Length of patch sequence */ + uint32_t SRAMAddr; /**< Start address of the sequence command patch */ + uint32_t Buffer[32]; /**< 32Byte should be enough for sequence generator */ + const uint32_t BuffLen; /**< The buffer length of Buffer */ +}SeqPatchInfo_Type; + +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration if there is need. +*/ +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /**< Indicate to generate sequence again. It's auto cleared by AppEDAInit */ + uint32_t SeqStartAddr; /**< Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /**< Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /**< Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + BoolFlag bBioElecBoard; /**< Select between AD5941Sens1 board and BioElec board */ + BoolFlag ReDoRtiaCal; /**< Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /**< The real frequency of system clock */ + float LfoscClkFreq; /**< The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + uint32_t FifoThresh; /**< FIFO threshold. Should be N*4 */ + float EDAODR; /**< in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /**< By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + uint32_t VoltCalPoints; /**< Use how many points to calculate average excitation voltage */ + float RcalVal; /**< Rcal value in Ohm */ + float SinFreq; /**< Frequency of excitation signal */ + float SampleFreq; /**< Sample Frequency in Hz. Clock source is 32kHz.*/ + float SinAmplitude; /**< Signal in amplitude in mV unit. Range: 0Vp to 1100mVp (0Vpp to 2.2Vpp) */ + uint32_t DacUpdateRate; /**< DAC update rate is SystemCLock/Divider. The available value is 7 to 255. */ + uint32_t LptiaRtiaSel; /**< Use internal RTIA, Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + + uint32_t DftNum; /**< DFT number */ + BoolFlag HanWinEn; /**< Enable Hanning window */ + + BoolFlag RtiaAutoScaleEnable; /**< Automatically change RTIA value according to measurement results. 0: Set RTIA with RTIA_SEL. 1: Automatically choose RTIA in software */ + uint32_t RtiaAutoScaleMax; /**< Limit the maximum RTIA value that auto scale function can use. Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + uint32_t RtiaAutoScaleMin; /**< Limit the minimum RTIA value that auto scale function can use. Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + +/* Private variables for internal usage */ + fImpCar_Type RtiaCurrValue; /**< Calibrated Rtia value of current frequency */ + fImpCar_Type RtiaCalTable[LPTIARTIA_512K+1]; /**< Calibrated Rtia Value table */ + fImpCar_Type ImpEDABase; /**< Impedance of EDA base line */ + fImpCar_Type ImpSum; /**< Sum of all measured results. Used to calculate base line of EDA */ + uint32_t ImpSumCount; /**< Count of data added to 'ImpSum' */ + uint32_t RtiaIndexCurr; /**< Index value 0 to 26 means Open, 200Ohm, to 512kOhm */ + uint32_t RtiaIndexNext; + BoolFlag bChangeRtia; /**< Auto scaling method says we need to change RTIA */ + + SeqPatchInfo_Type SeqPatchInfo; /**< The sequence patch for different RTIA and both voltage/current measurement */ + fImpCar_Type ExcitVolt; /**< Measured excitation voltage result */ + BoolFlag bDataIsVolt; /**< Current DFT result is voltage */ + BoolFlag bMeasVoltReq; /**< User says we need to measure voltage */ + + BoolFlag EDAInited; /**< If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /**< After FIFO is ready, stop the measurement sequence */ + BoolFlag bRunning; /**< status of if EDA is running. Useful when send STOP_SYNC to detect if it's actually stopped. */ + uint32_t FifoDataCount; /**< Count how many times impedance have been measured */ + + enum __EDAState{ + EDASTATE_INIT = 0, /**< Initializing */ + EDASTATE_RTIACAL, /**< Internal RTIA resistor calibrating. */ + EDASTATE_VOLT, /**< Measuring excitation voltage */ + EDASTATE_CURR, /**< Measuring respond current */ + }EDAStateCurr, EDAStateNext; /**< When interrupt happens, the state is EDACurrState. At the end of interrupt function, go to EDANextState */ +/* End */ +}AppEDACfg_Type; + +/* Common application control message */ +#define APPCTRL_START 0 /**< Start the measurement by starting Wakeup Timer */ +#define APPCTRL_STOPNOW 1 /**< Stop immediately by stop Wakeup Timer*/ +#define APPCTRL_STOPSYNC 2 /**< Stop the measurement when interrupt occurred */ +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ +#define APPCTRL_RUNNING 4 /**< Is application running? */ + +#define EDACTRL_MEASVOLT 100 /**< Measure Excitation voltage now */ +#define EDACTRL_GETRTIAMAG 101 /**< Get the rtia magnitude for current measured data */ + +#define EDACTRL_RSTBASE 102 /**< Reset base line of EDA result. */ +#define EDACTRL_SETBASE 103 /**< Set base line of EDA result */ +#define EDACTRL_GETAVR 104 /**< Get average value of all measured impedance */ +#define EDACTRL_STATUS 105 /**< Get if EDA is running. */ + +/* Error message */ +#define EDAERR_ERROR AD5940ERR_APPERROR /**< General error */ +#define EDAERR_VOLTMEASURE AD5940ERR_APPERROR-1 /**< Excitation voltage measurement error. Points not match */ + +AD5940Err AppEDAGetCfg(void *pCfg); +AD5940Err AppEDAInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppEDAISR(void *pBuff, uint32_t *pCount); +AD5940Err AppEDACtrl(int32_t EDACtrl, void *pPara); + +#endif diff --git a/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvoptx b/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvoptx new file mode 100644 index 0000000..f3a680d --- /dev/null +++ b/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvoptx @@ -0,0 +1,369 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\BodyImpedance.c + BodyImpedance.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\Electrocardiograph.c + Electrocardiograph.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\ElectrodermalActivity.c + ElectrodermalActivity.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\UARTCmd.c + UARTCmd.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvprojx b/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvprojx new file mode 100644 index 0000000..ff29b3e --- /dev/null +++ b/examples/AD5940_BioElec/NUCLEO-F411/AD5940_BioElec.uvprojx @@ -0,0 +1,604 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + BodyImpedance.c + 1 + ..\BodyImpedance.c + + + Electrocardiograph.c + 1 + ..\Electrocardiograph.c + + + ElectrodermalActivity.c + 1 + ..\ElectrodermalActivity.c + + + UARTCmd.c + 1 + ..\UARTCmd.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_BioElec/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_BioElec/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_BioElec/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_BioElec/NUCLEO-F411/main.c b/examples/AD5940_BioElec/NUCLEO-F411/main.c new file mode 100644 index 0000000..f802f14 --- /dev/null +++ b/examples/AD5940_BioElec/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_BioElec/UARTCmd.c b/examples/AD5940_BioElec/UARTCmd.c new file mode 100644 index 0000000..5430ee4 --- /dev/null +++ b/examples/AD5940_BioElec/UARTCmd.c @@ -0,0 +1,194 @@ +/*! + ***************************************************************************** + @file: UARTCmd.C + @author: $Author: nxu2 $ + @brief: UART Command process + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "stdint.h" +#include "string.h" +#include "stdio.h" +#include + +#define LINEBUFF_SIZE 128 +#define CMDTABLE_SIZE 6 + +uint32_t help(uint32_t para1, uint32_t para2); +uint32_t say_hello(uint32_t para1, uint32_t para2); +uint32_t command_start_measurement(uint32_t para1, uint32_t para2); +uint32_t command_stop_measurement(uint32_t para1, uint32_t para2); +uint32_t command_switch_app(uint32_t AppID, uint32_t para2); + +struct __uartcmd_table +{ + void *pObj; + const char *cmd_name; + const char *pDesc; +}uart_cmd_table[CMDTABLE_SIZE]= +{ + {(void*)help, "help", "print supported commands"}, + {(void*)help, "?", "print supported commands"}, + {(void*)say_hello, "hello", "print parameteres and say hello"}, + {(void*)command_start_measurement, "start", "start selected application"}, + {(void*)command_stop_measurement, "stop", "stop selected application"}, + {(void*)command_switch_app, "switch", "stop current APP and switch to new APP set by parameter1"}, +}; + + +uint32_t help(uint32_t para1, uint32_t para2) +{ + int i = 0; + printf("*****help menu*****\nbelow are supported commands:\n"); + for(;i= LINEBUFF_SIZE-1) + line_buffer_index = 0; /* Error: buffer overflow */ + if( (c == '\r') || (c == '\n')) + { + uint32_t res; + line_buffer[line_buffer_index] = '\0'; + /* Start to process command */ + if(line_buffer_index == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* No command inputs, return */ + } + /* Step1, remove space */ + UARTCmd_RemoveSpaces(); + if(token_count == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* No valid input */ + } + /* Step2, match commands */ + UARTCmd_MatchCommand(); + if(pObjFound == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* Command not support */ + } + if(token_count > 1) /* There is parameters */ + { + UARTCmd_TranslateParas(); + } + /* Step3, call function */ + res = ((uint32_t (*)(uint32_t, uint32_t))(pObjFound))(parameter1, parameter2); + printf("res:0x%08x\n", res); + line_buffer_index = 0; /* Reset buffer */ + } + else + { + line_buffer[line_buffer_index++] = c; + } +} diff --git a/examples/AD5940_ChronoAmperometric/AD5940Main.c b/examples/AD5940_ChronoAmperometric/AD5940Main.c new file mode 100644 index 0000000..0cf4523 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/AD5940Main.c @@ -0,0 +1,170 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: $Author: nxu2 $ + @brief: Used to control specific application and process data. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "ChronoAmperometric.h" + +#define APPBUFF_SIZE 1000 +#define n 3 +#ifdef __ICCARM__ +#pragma location="never_retained_ram" +#endif +uint32_t AppBuff[n][APPBUFF_SIZE]; +float LFOSCFreq; +uint32_t IntCount = 0; +/* It's your choice here what to do with the data. Here is just an example to print to UART */ +int32_t AMPShowResult(float *pData, uint32_t DataCount) +{ + /*static*/ uint32_t index = 0; + /* Print data*/ + if(!IntCount) + index = 0; + for(int i=0;iWuptClkFreq = LFOSCFreq; /* Use measured 32kHz clock freq for accurate wake up timer */ + pAMPCfg->SeqStartAddr = 0; + pAMPCfg->MaxSeqLen = 512; /* @todo add checker in function */ + pAMPCfg->RcalVal = 10000.0; + pAMPCfg->NumOfData = -1; /* Never stop until you stop it manually by AppAMPCtrl() function */ + + pAMPCfg->AmpODR = 1; + pAMPCfg->FifoThresh = 5; + pAMPCfg->ADCRefVolt = 1.82; /* Measure voltage on VREF_1V8 pin and add here */ + + pAMPCfg->ExtRtia = bFALSE; /* Set to true if using external Rtia */ + pAMPCfg->ExtRtiaVal = 10000000; /* Enter external Rtia value here is using one */ + pAMPCfg->LptiaRtiaSel = LPTIARTIA_1K; /* Select TIA gain resistor. */ + + pAMPCfg->SensorBias = 0; /* Sensor bias voltage between reference and sense electrodes*/ + pAMPCfg->Vzero = 1100; + /* Configure Pulse*/ + pAMPCfg->pulseAmplitude = 500; /* Pulse amplitude on counter electrode (mV) */ + pAMPCfg->pulseLength = 500; /* Length of voltage pulse in ms */ + + +} + +void AD5940_Main(void) +{ + uint32_t temp[n]; + AppCHRONOAMPCfg_Type *pAMPCfg; + AppCHRONOAMPGetCfg(&pAMPCfg); + AD5940PlatformCfg(); + + AD5940AMPStructInit(); /* Configure your parameters in this function */ + + AppCHRONOAMPInit(AppBuff[0], APPBUFF_SIZE); /* Initialize AMP application. Provide a buffer, which is used to store sequencer commands */ + AppCHRONOAMPCtrl(CHRONOAMPCTRL_PULSETEST, 0); /* Control AMP measurement. AMPCTRL_PULSETEST carries out pulse test*/ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp[IntCount] = APPBUFF_SIZE; + AppCHRONOAMPISR(AppBuff[IntCount], &temp[IntCount]); /* Deal with it and provide a buffer to store data we got */ + if(pAMPCfg->bMeasureTransient == bFALSE) + { + AMPShowResult((float*)AppBuff[0], temp[0]); + } + if(pAMPCfg->EndSeq) /* End sequence only set at end of transient */ + { + for(int i = 0; iEndSeq = bFALSE; + pAMPCfg->bMeasureTransient = bFALSE; + IntCount = 0; + AppCHRONOAMPCtrl(CHRONOAMPCTRL_START, 0); /* Begin standard amperometric measurement after pulse test is complete */ + } + } + } +} + diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewd b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewp b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewp new file mode 100644 index 0000000..647e271 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\ChronoAmperometric.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.rteconfig b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvoptx b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvoptx new file mode 100644 index 0000000..ad6044f --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 1 + 0 + 0 + ..\ChronoAmperometric.c + ChronoAmperometric.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvprojx b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvprojx new file mode 100644 index 0000000..f432f9d --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/AD5940_ChronoAmperometric.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + ChronoAmperometric.c + 1 + ..\ChronoAmperometric.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_ChronoAmperometric/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/ADuCM3029_SRAM_Mode2.icf b/examples/AD5940_ChronoAmperometric/ADICUP3029/ADuCM3029_SRAM_Mode2.icf new file mode 100644 index 0000000..c03fd2b --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/ADuCM3029_SRAM_Mode2.icf @@ -0,0 +1,183 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; + +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; + +// symbols +define symbol USE_PARITY = 1; + +define symbol FLASH = 0x00000000; // flash address +define symbol FLASH_SIZE = 256K; // 128k flash size +define symbol FLASH_PAGE_SIZE = 2K; // 2k flash page size +define symbol PAGE0_ROM_START = 0x1A0; + + +define symbol SIZE_OF_INTVEC = 384; +define symbol START_OF_READ_PROTECT_KEY_HASH = FLASH+SIZE_OF_INTVEC; +define symbol SIZE_OF_READ_PROTECT_KEY_HASH = 16; +define symbol START_OF_CRC_READ_PROTECT_KEY_HASH = FLASH+SIZE_OF_INTVEC+SIZE_OF_READ_PROTECT_KEY_HASH; +define symbol SIZE_OF_CRC_READ_PROTECT_KEY_HASH = 4; +define symbol START_OF_NUM_CRC_PAGES = FLASH+SIZE_OF_INTVEC+SIZE_OF_READ_PROTECT_KEY_HASH+SIZE_OF_CRC_READ_PROTECT_KEY_HASH; +define symbol NUM_OF_CRC_PAGES = 4; + + + +// user-selectable SRAM mode +// SRAM Banks 1 & 2 are dynamically configurable for hibernation retention at runtime +// referred to here as "xRAM_bank#_retained_region", where x = i (instruction) or d (data) and # = 1 or 2 +define symbol USER_SRAM_MODE = 2; + +// RAM bank sizes sizes are invariant... locations vary by RAM Mode# +define symbol RAM_BANK0_SIZE = 8K; +define symbol RAM_BANK1_SIZE = 8K; +define symbol RAM_BANK2_SIZE = 16K; +define symbol RAM_BANK3_SIZE = 16K; +define symbol RAM_BANK4_SIZE = 12K; +define symbol RAM_BANK5_SIZE = 4K; + +//MODE0 0kB CACHE 32kB ISRAM 32kB DSRAM +if(USER_SRAM_MODE == 0) +{ + define symbol RAM_BANK0 = 0x20000000; // Always Retained + define symbol RAM_BANK1 = 0x20002000; // Retained during Hibernate if SRAMRET.BANK1EN=1 + define symbol RAM_BANK2 = 0x10000000; // Retained during Hibernate if SRAMRET.BANK2EN=1 + define symbol RAM_BANK3 = 0x20040000; // Not retained + define symbol RAM_BANK4 = 0x10004000; // Not retained + + define region iRAM_bank2_retained_region = mem:[from RAM_BANK2 size RAM_BANK2_SIZE]; + define region iRAM_never_retained_region = mem:[from RAM_BANK4 size (RAM_BANK4_SIZE + RAM_BANK5_SIZE)]; + + define region dRAM_always_retained_region = mem:[from RAM_BANK0 size RAM_BANK0_SIZE]; + define region dRAM_bank1_retained_region = mem:[from RAM_BANK1 size RAM_BANK1_SIZE]; + define region dRAM_never_retained_region = mem:[from RAM_BANK3 size RAM_BANK3_SIZE]; +} + +//MODE1 4kB CACHE 28kB ISRAM 32kB DSRAM +else if(USER_SRAM_MODE == 1) +{ + define symbol RAM_BANK0 = 0x20000000; // Always Retained + define symbol RAM_BANK1 = 0x20002000; // Retained during Hibernate if SRAMRET.BANK1EN=1 + define symbol RAM_BANK2 = 0x10000000; // Retained during Hibernate if SRAMRET.BANK2EN=1 + define symbol RAM_BANK3 = 0x20040000; // Not retained + + define region iRAM_bank2_retained_region = mem:[from RAM_BANK2 size RAM_BANK2_SIZE]; + define region iRAM_never_retained_region = mem:[from RAM_BANK4 size RAM_BANK4_SIZE]; + + define region dRAM_always_retained_region = mem:[from RAM_BANK0 size RAM_BANK0_SIZE]; + define region dRAM_bank1_retained_region = mem:[from RAM_BANK1 size RAM_BANK1_SIZE]; + define region dRAM_never_retained_region = mem:[from RAM_BANK3 size RAM_BANK3_SIZE]; +} + +//MODE2 0kB CACHE 0kB ISRAM 64kB DSRAM +else if(USER_SRAM_MODE == 2) +{ + define symbol RAM_BANK0 = 0x20000000; // Always Retained + define symbol RAM_BANK1 = 0x20002000; // Retained during Hibernate if SRAMRET.BANK1EN=1 + define symbol RAM_BANK2 = 0x20004000; // Retained during Hibernate if SRAMRET.BANK2EN=1 + define symbol RAM_BANK3 = 0x20040000; // Not retained + + define region dRAM_always_retained_region = mem:[from RAM_BANK0 size RAM_BANK0_SIZE]; + define region dRAM_bank1_retained_region = mem:[from RAM_BANK1 size RAM_BANK1_SIZE]; + define region dRAM_bank2_retained_region = mem:[from RAM_BANK2 size RAM_BANK2_SIZE]; + define region dRAM_never_retained_region = mem:[from RAM_BANK3 size (RAM_BANK3_SIZE + RAM_BANK4_SIZE + RAM_BANK5_SIZE)]; +} + +//MODE3 4kB CACHE 0kB ISRAM 60kB DSRAM +else if(USER_SRAM_MODE == 3) +{ + define symbol RAM_BANK0 = 0x20000000; // Always Retained + define symbol RAM_BANK1 = 0x20002000; // Retained during Hibernate if SRAMRET.BANK1EN=1 + define symbol RAM_BANK2 = 0x20004000; // Retained during Hibernate if SRAMRET.BANK2EN=1 + define symbol RAM_BANK3 = 0x20040000; // Not retained + + define region dRAM_always_retained_region = mem:[from RAM_BANK0 size RAM_BANK0_SIZE]; + define region dRAM_bank1_retained_region = mem:[from RAM_BANK1 size RAM_BANK1_SIZE]; + define region dRAM_bank2_retained_region = mem:[from RAM_BANK2 size RAM_BANK2_SIZE]; + define region dRAM_never_retained_region = mem:[from RAM_BANK3 size (RAM_BANK3_SIZE + RAM_BANK4_SIZE)]; +} + +// ROM regions +define region ROM_PAGE0_INTVEC = mem:[from FLASH size SIZE_OF_INTVEC]; +define region START_OF_PAGE0_REGION = mem:[from (PAGE0_ROM_START) size (FLASH_PAGE_SIZE - PAGE0_ROM_START)]; +define region ROM_REGION = mem:[from (FLASH + FLASH_PAGE_SIZE) size (FLASH_SIZE - FLASH_PAGE_SIZE)]; +define region SRAM_CODE = mem:[from (RAM_BANK2) size (RAM_BANK2_SIZE)]; + +place at address mem: START_OF_READ_PROTECT_KEY_HASH { readonly section ReadProtectedKeyHash }; +place at address mem: START_OF_CRC_READ_PROTECT_KEY_HASH { readonly section CRC_ReadProtectedKeyHash }; +place at address mem: START_OF_NUM_CRC_PAGES { readonly section NumCRCPages }; + +// C-Runtime blocks +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + + +// Flash Page0 contains an optional checksum block, as verified by the boot kernel at startup. +// If generating a checksum ("Checksum" linker dialogue box) during the build, it is also +// required to add "--keep __checksum" to the linker "Extra Options" dialogue to preserve the +// linker-generated "__checksum" symbol. +define block CHECKSUM with alignment = 4, size = 4 { ro section .checksum }; + +// force manditory placement of the CHECKSUM block within Page0 +place at address 0x000007FC { block CHECKSUM }; + + +// KEEP these blocks, avoiding linker elimination... +keep { + block CHECKSUM, +}; + + +// initializations... +do not initialize { section .noinit }; + +// expand encoded initialized data variables from flash image into RAM during C-Runtime Startup +initialize by copy { rw }; + +//initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application + +// ROM: place IVT at start of flash, page zero (ahead of the "meta-data") +place at start of ROM_PAGE0_INTVEC { ro section .intvec }; +place in START_OF_PAGE0_REGION { ro section Page0_region }; + +// ROM: place remaining read-only code/data in flash, starting at flash page1 +place in ROM_REGION { ro }; + + +// Create as large a gap as possible between the stack and the heap to avoid collision... + +// RAM: place stack @ end (high-address) of always-retained dRAM because stack "grows" towards low addresses +place at end of dRAM_always_retained_region { block CSTACK }; + +// RAM: place heap, etc., into low-address, always-retained dRAM +place in dRAM_always_retained_region { rw, block HEAP }; + +// ISRAM section for placing code in SRAM +place in SRAM_CODE {section ISRAM_REGION}; + +initialize by copy {section ISRAM_REGION }; + +// NOTE: To direct data to reside in specifically named memory regions +// (suce as into specific banks or non-hibernation-retained memory), +// use either of the IAR directives: +// '#pragma location="named_region"' directive prefix, or the +// '@ "named_region"' suffix with the data declarations. + +// place data declared as bank1-hibernation-retained +place in dRAM_bank1_retained_region { rw section bank1_retained_ram }; + +// place data declared as bank2-hibernation-retained (RAM modes 2 or 3 only) +//place in dRAM_bank2_retained_region { rw section bank2_retained_ram }; + +// RAM: place volatile RAM data (never retained during hibernation) into select +// named volatile regions, depending on SRAM Mode# and SRAMRET.BANK#EN bits +// + +// place unterained sections +place in dRAM_never_retained_region { rw section never_retained_ram }; diff --git a/examples/AD5940_ChronoAmperometric/ADICUP3029/main.c b/examples/AD5940_ChronoAmperometric/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_ChronoAmperometric/ChronoAmperometric.c b/examples/AD5940_ChronoAmperometric/ChronoAmperometric.c new file mode 100644 index 0000000..f6ff909 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/ChronoAmperometric.c @@ -0,0 +1,638 @@ +/*! +***************************************************************************** +@file: ChronoAmperometric.c +@author: $Author: nxu2 $ +@brief: Chrono-amperometric measurement sequences. +@version: $Revision: 766 $ +@date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ +----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ChronoAmperometric.h" + +/* +Application configuration structure. Specified by user from template. +The variables are usable in this whole application. +It includes basic configuration for sequencer generator and application related parameters +*/ +AppCHRONOAMPCfg_Type AppCHRONOAMPCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + .FifoThresh = 1000, + + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .AmpODR = 1, + .NumOfData = -1, + .RcalVal = 10000.0, /* 10kOhm */ + + .ExtRtiaVal = 0, + .PwrMod = AFEPWR_LP, + /* LPTIA Configure */ + .LptiaRtiaSel = LPTIARTIA_10K, + .LpTiaRf = LPTIARF_1M, + .LpTiaRl = LPTIARLOAD_SHORT, + .ReDoRtiaCal = bTRUE, + .RtiaCalValue = 0, + /*LPDAC Configure */ + .Vbias = 1100, + .Vzero = 1100, + + /* Waveform Configuration */ + .pulseAmplitude = 500, /* Amplitude of step in mV */ + .pulseLength = 500, /* Length of transient in ms*/ + .EndSeq = bFALSE, /* Flag to indicate sequence has finished */ + + /* ADC Configuration*/ + .ADCPgaGain = ADCPGA_1P5, + .ADCSinc3Osr = ADCSINC3OSR_4, + .ADCSinc2Osr = ADCSINC2OSR_44, + .ADCRefVolt = 1.82, /* Measure voltage on ADCRefVolt pin and enter here*/ + .DataFifoSrc = DATATYPE_SINC2, /* Data type must be SINC2 for chrono-amperometric measurement*/ + .CHRONOAMPInited = bFALSE, + .StopRequired = bFALSE, +}; + +/** +This function is provided for upper controllers that want to change +application parameters specially for user defined parameters. +*/ +AD5940Err AppCHRONOAMPGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppCHRONOAMPCfg_Type**)pCfg = &AppCHRONOAMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +AD5940Err AppCHRONOAMPCtrl(int32_t AmpCtrl, void *pPara) +{ + switch (AmpCtrl) + { + case CHRONOAMPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + SEQCfg_Type seq_cfg; + + AD5940_ReadReg(REG_AFE_ADCDAT); /* Any SPI Operation can wakeup AFE */ + if(AppCHRONOAMPCfg.CHRONOAMPInited == bFALSE) + return AD5940ERR_APPERROR; + + /* Configure FIFO and Sequencer for normal Amperometric Measurement */ + AD5940_FIFOThrshSet(AppCHRONOAMPCfg.FifoThresh); + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bTRUE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Configure Wakeup Timer*/ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 1; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppCHRONOAMPCfg.WuptClkFreq*AppCHRONOAMPCfg.AmpODR)-2-1; + AD5940_WUPTCfg(&wupt_cfg); + + AppCHRONOAMPCfg.FifoDataCount = 0; /* restart */ + break; + } + case CHRONOAMPCTRL_STOPNOW: + { + AD5940_ReadReg(REG_AFE_ADCDAT); /* Any SPI Operation can wakeup AFE */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case CHRONOAMPCTRL_STOPSYNC: + { + AppCHRONOAMPCfg.StopRequired = bTRUE; + break; + } + case CHRONOAMPCTRL_SHUTDOWN: + { + AppCHRONOAMPCtrl(CHRONOAMPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by sleep operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + case CHRONOAMPCTRL_PULSETEST: + { + FIFOCfg_Type fifo_cfg; + AD5940_WUPTCtrl(bFALSE); + AppCHRONOAMPCfg.bMeasureTransient = bTRUE; + /* Reconfigure FIFO for Pulse test*/ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC2NOTCH; + fifo_cfg.FIFOThresh = 1000; + AD5940_FIFOCfg(&fifo_cfg); + + /* Trigger sequence by MMR write */ + AD5940_SEQMmrTrig(AppCHRONOAMPCfg.TransientSeqInfo.SeqId); + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* Generate init sequence */ +static AD5940Err AppCHRONOAMPSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + DSPCfg_Type dsp_cfg; + HSLoopCfg_Type hs_loop; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + //AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bTRUE; + aferef_cfg.Lp1V8BuffEn = bTRUE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + lp_loop.LpDacCfg.LpdacSel = LPDAC0; + lp_loop.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lp_loop.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|/*LPDACSW_VBIAS2PIN|*/LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_loop.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lp_loop.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lp_loop.LpDacCfg.LpDacRef = LPDACREF_2P5; + lp_loop.LpDacCfg.DataRst = bFALSE; + lp_loop.LpDacCfg.PowerEn = bTRUE; + lp_loop.LpDacCfg.DacData6Bit = (uint32_t)((AppCHRONOAMPCfg.Vzero-200)/DAC6BITVOLT_1LSB); + lp_loop.LpDacCfg.DacData12Bit =(int32_t)((AppCHRONOAMPCfg.SensorBias)/DAC12BITVOLT_1LSB) + lp_loop.LpDacCfg.DacData6Bit*64; + if(lp_loop.LpDacCfg.DacData12Bit>lp_loop.LpDacCfg.DacData6Bit*64) + lp_loop.LpDacCfg.DacData12Bit--; + + lp_loop.LpAmpCfg.LpAmpSel = LPAMP0; + lp_loop.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lp_loop.LpAmpCfg.LpPaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaPwrEn = bTRUE; + lp_loop.LpAmpCfg.LpTiaRf = AppCHRONOAMPCfg.LpTiaRf; + lp_loop.LpAmpCfg.LpTiaRload = AppCHRONOAMPCfg.LpTiaRl; + if(AppCHRONOAMPCfg.ExtRtia == bTRUE) + { + lp_loop.LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(9)|LPTIASW(2)|LPTIASW(4)|LPTIASW(5)/*|LPTIASW(12)*/|LPTIASW(13); + }else + { + lp_loop.LpAmpCfg.LpTiaRtia = AppCHRONOAMPCfg.LptiaRtiaSel; + lp_loop.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(2)|LPTIASW(4)/*|LPTIASW(12)*/|LPTIASW(13); + } + AD5940_LPLoopCfgS(&lp_loop); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_LPTIA0_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_LPTIA0_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppCHRONOAMPCfg.ADCPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppCHRONOAMPCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppCHRONOAMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); /* Don't care about Statistic */ + AD5940_DSPCfgS(&dsp_cfg); + + hs_loop.SWMatCfg.Dswitch = 0; + hs_loop.SWMatCfg.Pswitch = 0; + hs_loop.SWMatCfg.Nswitch = 0; + hs_loop.SWMatCfg.Tswitch = 0; + AD5940_HSLoopCfgS(&hs_loop); + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_AFECtrlS(AFECTRL_HPREFPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGpioCtrlS(0); + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppCHRONOAMPCfg.InitSeqInfo.SeqId = SEQID_1; + AppCHRONOAMPCfg.InitSeqInfo.SeqRamAddr = AppCHRONOAMPCfg.SeqStartAddr; + AppCHRONOAMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppCHRONOAMPCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppCHRONOAMPCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppCHRONOAMPTransientMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + uint32_t VbiasCode, VzeroCode; + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + if(AppCHRONOAMPCfg.DataFifoSrc != DATATYPE_SINC2) + return AD5940ERR_ERROR; /* FIFO data must be SINC2 filter for measuring transient */ + /* Calculate LPDAC codes */ + VzeroCode = (uint32_t)((AppCHRONOAMPCfg.Vzero-200)/DAC6BITVOLT_1LSB); + VbiasCode = (int32_t)((AppCHRONOAMPCfg.pulseAmplitude + AppCHRONOAMPCfg.SensorBias)/DAC12BITVOLT_1LSB) + VzeroCode*64; + if(VbiasCode < (VzeroCode*64)) + VbiasCode --; + /* Truncate */ + if(VbiasCode > 4095) VbiasCode = 4095; + if(VzeroCode > 63) VzeroCode = 63; + + clks_cal.DataType = AppCHRONOAMPCfg.DataFifoSrc; + clks_cal.DataCount = AppCHRONOAMPCalcDataNum(AppCHRONOAMPCfg.pulseLength); + clks_cal.ADCSinc2Osr = AppCHRONOAMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppCHRONOAMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppCHRONOAMPCfg.SysClkFreq/AppCHRONOAMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin1); + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC conversion before applying step to capture peak */ + AD5940_WriteReg(REG_AFE_LPDACDAT0, VzeroCode<<12|VbiasCode); + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV, bFALSE); /* Stop ADC */ + AD5940_WriteReg(REG_AFE_LPDACDAT0,(uint32_t)((AppCHRONOAMPCfg.Vzero-200)/DAC6BITVOLT_1LSB)<<12|(int32_t)((AppCHRONOAMPCfg.SensorBias)/DAC12BITVOLT_1LSB) + VzeroCode*64); + AD5940_SEQGpioCtrlS(0); + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppCHRONOAMPCfg.TransientSeqInfo.SeqId = SEQID_2; + AppCHRONOAMPCfg.TransientSeqInfo.SeqRamAddr = AppCHRONOAMPCfg.MeasureSeqInfo.SeqRamAddr + AppCHRONOAMPCfg.MeasureSeqInfo.SeqLen ; + AppCHRONOAMPCfg.TransientSeqInfo.pSeqCmd = pSeqCmd; + AppCHRONOAMPCfg.TransientSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppCHRONOAMPCfg.TransientSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} +static AD5940Err AppCHRONOAMPSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + uint32_t const *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = AppCHRONOAMPCfg.DataFifoSrc; + clks_cal.DataCount = 1; + clks_cal.ADCSinc2Osr = AppCHRONOAMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppCHRONOAMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppCHRONOAMPCfg.SysClkFreq/AppCHRONOAMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin1); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV, bFALSE); /* Stop ADC */ + AD5940_SEQGpioCtrlS(0); + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppCHRONOAMPCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppCHRONOAMPCfg.MeasureSeqInfo.SeqRamAddr = AppCHRONOAMPCfg.InitSeqInfo.SeqRamAddr + AppCHRONOAMPCfg.InitSeqInfo.SeqLen ; + AppCHRONOAMPCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppCHRONOAMPCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppCHRONOAMPCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} +static AD5940Err AppCHRONOAMPRtiaCal(void) +{ + fImpPol_Type RtiaCalValue; /* Calibration result */ + LPRTIACal_Type lprtia_cal; + AD5940_StructInit(&lprtia_cal, sizeof(lprtia_cal)); + + lprtia_cal.LpAmpSel = LPAMP0; + lprtia_cal.bPolarResult = bTRUE; /* Magnitude + Phase */ + lprtia_cal.AdcClkFreq = AppCHRONOAMPCfg.AdcClkFreq; + lprtia_cal.SysClkFreq = AppCHRONOAMPCfg.SysClkFreq; + lprtia_cal.ADCSinc3Osr = ADCSINC3OSR_4; + lprtia_cal.ADCSinc2Osr = ADCSINC2OSR_22; /* Use SINC2 data as DFT data source */ + lprtia_cal.DftCfg.DftNum = DFTNUM_2048; /* Maximum DFT number */ + lprtia_cal.DftCfg.DftSrc = DFTSRC_SINC2NOTCH; + lprtia_cal.DftCfg.HanWinEn = bTRUE; + lprtia_cal.fFreq = AppCHRONOAMPCfg.AdcClkFreq/4/22/2048*3; /* Sample 3 period of signal, 13.317Hz here. Do not use DC method, because it needs ADC/PGA calibrated firstly(but it's faster) */ + lprtia_cal.fRcal = AppCHRONOAMPCfg.RcalVal; + lprtia_cal.LpAmpPwrMod = LPAMPPWR_NORM; + lprtia_cal.bWithCtia = bFALSE; + lprtia_cal.LpTiaRtia = AppCHRONOAMPCfg.LptiaRtiaSel; + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppCHRONOAMPCfg.RtiaCalValue = RtiaCalValue; + return AD5940ERR_OK; +} +/** +* @brief Initialize the amperometric test. Call this function every time before starting amperometric test. +* @param pBuffer: the buffer for sequencer generator. Only need to provide it for the first time. +* @param BufferSize: The buffer size start from pBuffer. +* @return return error code. +*/ +AD5940Err AppCHRONOAMPInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + AD5940_ReadReg(REG_AFE_ADCDAT); /* Any SPI Operation can wakeup AFE */ + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Do RTIA calibration */ + if(((AppCHRONOAMPCfg.ReDoRtiaCal == bTRUE) || \ + AppCHRONOAMPCfg.CHRONOAMPInited == bFALSE) && AppCHRONOAMPCfg.ExtRtia == bFALSE) + { + AppCHRONOAMPRtiaCal(); + AppCHRONOAMPCfg.ReDoRtiaCal = bFALSE; + } + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC2NOTCH; + fifo_cfg.FIFOThresh = AppCHRONOAMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppCHRONOAMPCfg.CHRONOAMPInited == bFALSE)||\ + (AppCHRONOAMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppCHRONOAMPSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppCHRONOAMPSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + /* Generate transient sequence */ + error = AppCHRONOAMPTransientMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppCHRONOAMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppCHRONOAMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppCHRONOAMPCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppCHRONOAMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + + /* Transient sequence */ + AppCHRONOAMPCfg.TransientSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppCHRONOAMPCfg.TransientSeqInfo); + + /* Measurement sequence */ + AppCHRONOAMPCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppCHRONOAMPCfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppCHRONOAMPCfg.PwrMod, AFEBW_250KHZ); + AppCHRONOAMPCfg.CHRONOAMPInited = bTRUE; /* CHRONOAMP application has been initialized. */ + AppCHRONOAMPCfg.bMeasureTransient = bFALSE; + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +static AD5940Err AppCHRONOAMPRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + FIFOCfg_Type fifo_cfg; + SEQCfg_Type seq_cfg; + /* Reset dtat FIFO threshold for normal amp */ + if(AppCHRONOAMPCfg.EndSeq) + { + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC2NOTCH; + fifo_cfg.FIFOThresh = AppCHRONOAMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + } + if(AppCHRONOAMPCfg.NumOfData > 0) + { + AppCHRONOAMPCfg.FifoDataCount += *pDataCount/4; + if(AppCHRONOAMPCfg.FifoDataCount >= AppCHRONOAMPCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppCHRONOAMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static AD5940Err AppCHRONOAMPDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t i, datacount; + datacount = *pDataCount; + float *pOut = (float *)pData; + for(i=0;i + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\ChronoAmperometric.c + ChronoAmperometric.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ChronoAmperometric/NUCLEO-F411/AD5940_ChronoAmperometric.uvprojx b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/AD5940_ChronoAmperometric.uvprojx new file mode 100644 index 0000000..d3d889e --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/AD5940_ChronoAmperometric.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + ChronoAmperometric.c + 1 + ..\ChronoAmperometric.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_ChronoAmperometric/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_ChronoAmperometric/NUCLEO-F411/main.c b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_ChronoAmperometric/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_DFT/AD5940_DFTPolling.c b/examples/AD5940_DFT/AD5940_DFTPolling.c new file mode 100644 index 0000000..be1404a --- /dev/null +++ b/examples/AD5940_DFT/AD5940_DFTPolling.c @@ -0,0 +1,83 @@ +/*! + ***************************************************************************** + @file: AD5940_DFTPolling.c + @author: Neo Xu + @brief: DFT Polling mode example. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include "stdio.h" +#include "math.h" + +/** + * Note: In order to use on-chip DFT engine, WG must be set to SIN wave generator and enable it. +*/ + +void AD5940_Main(void) +{ + DSPCfg_Type dsp_cfg; + WGCfg_Type wg_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + /* Firstly call this function after reset to initialize AFE registers. */ + AD5940_Initialize(); + + /* Configure AFE power mode and bandwidth */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + /* Initialize ADC basic function */ + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_VCE0; + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_VSET1P1; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1; + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = ADCSINC3OSR_4; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = ADCSINC2OSR_1333; + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + dsp_cfg.DftCfg.DftNum = DFTNUM_16384; + dsp_cfg.DftCfg.DftSrc = DFTSRC_SINC3; + AD5940_DSPCfgS(&dsp_cfg); + + AD5940_StructInit(&wg_cfg, sizeof(wg_cfg)); + wg_cfg.WgType = WGTYPE_SIN; + wg_cfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(1000.0, 16000000.0); /* 10kHz */ + AD5940_WGCfgS(&wg_cfg); + + /* Enable all interrupt at Interrupt Controller 1. So we can check the interrupt flag */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH|AFECTRL_WG, bTRUE); + AD5940_AFECtrlS(AFECTRL_DFT, bTRUE); + AD5940_ADCConvtCtrlS(bTRUE); + + while(1) + { + int32_t real, image; + if(AD5940_INTCTestFlag(AFEINTC_1,AFEINTSRC_DFTRDY)) + { + AD5940_INTCClrFlag(AFEINTSRC_DFTRDY); + real = AD5940_ReadAfeResult(AFERESULT_DFTREAL); + if(real&(1<<17)) + real |= 0xfffc0000; /* Data is 18bit in two's complement, bit17 is the sign bit */ + printf("DFT: %d,", real); + image = AD5940_ReadAfeResult(AFERESULT_DFTIMAGE); + if(image&(1<<17)) + image |= 0xfffc0000; /* Data is 18bit in two's complement, bit17 is the sign bit */ + printf("%d,", image); + printf("Mag:%f\n", sqrt((float)real*real + (float)image*image)); + } + } +} + diff --git a/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewd b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewp b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewp new file mode 100644 index 0000000..d684276 --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_DFTPolling.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.rteconfig b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvoptx b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvoptx new file mode 100644 index 0000000..e186ba3 --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvoptx @@ -0,0 +1,282 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_DFTPolling.c + AD5940_DFTPolling.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvprojx b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvprojx new file mode 100644 index 0000000..ccc05c9 --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/AD5940_DFT.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_DFTPolling.c + 1 + ..\AD5940_DFTPolling.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_DFT/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_DFT/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_DFT/ADICUP3029/main.c b/examples/AD5940_DFT/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_DFT/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvoptx b/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvoptx new file mode 100644 index 0000000..f0ea7c0 --- /dev/null +++ b/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_DFTPolling.c + AD5940_DFTPolling.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvprojx b/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvprojx new file mode 100644 index 0000000..e14db00 --- /dev/null +++ b/examples/AD5940_DFT/NUCLEO-F411/AD5940_DFT.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X, ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_DFTPolling.c + 1 + ..\AD5940_DFTPolling.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_DFT/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_DFT/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_DFT/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_DFT/NUCLEO-F411/main.c b/examples/AD5940_DFT/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_DFT/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_ECG/AD5940Main.c b/examples/AD5940_ECG/AD5940Main.c new file mode 100644 index 0000000..8fef1e7 --- /dev/null +++ b/examples/AD5940_ECG/AD5940Main.c @@ -0,0 +1,148 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup BioElec_Example + * @{ + */ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "Electrocardiograph.h" + +#define APPBUFF_SIZE 1024 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; /* Measured LFOSC frequency */ + +/* print ECG result to uart */ +AD5940Err ECGShowResult(void *pData, uint32_t DataCount) +{ + /*Process data*/ + for(int i=0;iMaxSeqLen = 512; + pCfg->FifoThresh = 250; + pCfg->ECGODR = 250; /* Note: ADuCM3029 is too slow to print data to UART. Limited to 1000Hz. */ + pCfg->LfoscClkFreq = LFOSCFreq; +} + + +void AD5940_Main(void) +{ + uint32_t temp; + + AD5940PlatformCfg(); + + AD5940ECGStructInit(); /* Configure your parameters in this function */ + + AppECGInit(AppBuff, APPBUFF_SIZE); /* Initialize BIA application. Provide a buffer, which is used to store sequencer commands */ + AppECGCtrl(APPCTRL_START, 0); /* Control BIA measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppECGISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + ECGShowResult(AppBuff, temp); /* Show the results to UART */ + } + } +} + +/** + * @} + * @} + * */ + diff --git a/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewd b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewp b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewp new file mode 100644 index 0000000..623b1a3 --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\Electrocardiograph.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.rteconfig b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvoptx b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvoptx new file mode 100644 index 0000000..456dbef --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Electrocardiograph.c + Electrocardiograph.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvprojx b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvprojx new file mode 100644 index 0000000..4bf5382 --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/AD5940_ECG.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Electrocardiograph.c + 1 + ..\Electrocardiograph.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_ECG/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_ECG/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_ECG/ADICUP3029/main.c b/examples/AD5940_ECG/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_ECG/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_ECG/Electrocardiograph.c b/examples/AD5940_ECG/Electrocardiograph.c new file mode 100644 index 0000000..f29d60f --- /dev/null +++ b/examples/AD5940_ECG/Electrocardiograph.c @@ -0,0 +1,391 @@ +/*! + ***************************************************************************** + @file: Electrocardiograph.c + @author: Neo Xu + @brief: ECG Measurement. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "Electrocardiograph.h" + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppECGCfg_Type AppECGCfg = +{ + .bParaChanged = bFALSE, + .bBioElecBoard = bTRUE, + .SeqStartAddr = 0, + .MaxSeqLen = 512, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 512, + + .ECGODR = 1000.0, /* 1000.0 Hz*/ + .NumOfData = -1, + .FifoThresh = 100, + + .LfoscClkFreq = 32000.0, + .SysClkFreq = 16000000.0, + .AdcClkFreq = 16000000.0, + .PwrMod = AFEPWR_LP, + + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .ECGInited = bFALSE, + .StopRequired = bFALSE, + .FifoDataCount = 0, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +AD5940Err AppECGGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppECGCfg_Type**)pCfg = &AppECGCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +int32_t AppECGCtrl(int32_t Command, void *pPara) +{ + + switch (Command) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppECGCfg.ECGInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppECGCfg.LfoscClkFreq/AppECGCfg.ECGODR)-4-1; + AD5940_WUPTCfg(&wupt_cfg); + + AppECGCfg.FifoDataCount = 0; /* restart */ + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case APPCTRL_STOPSYNC: + { + AppECGCfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppECGCtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: break; + } + return AD5940ERR_OK; +} + +/* Application initialization */ +static AD5940Err AppECGSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + SWMatrixCfg_Type sw_matrix; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; /* The High speed buffers are automatically turned off during hibernate */ + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + /* Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_AIN6; + adc_base.ADCMuxN = ADCMUXN_VSET1P1; + adc_base.ADCPga = AppECGCfg.AdcPgaGain; + AD5940_ADCBaseCfgS(&adc_base); + + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + adc_filter.ADCSinc3Osr = AppECGCfg.ADCSinc3Osr; + adc_filter.ADCSinc2Osr = AppECGCfg.ADCSinc2Osr; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc3ClkEnable = bTRUE; /* Enable SINC3 clock. */ + adc_filter.Sinc2NotchClkEnable = bTRUE; + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + adc_filter.DFTClkEnable = bTRUE; + adc_filter.WGClkEnable = bTRUE; + AD5940_ADCFilterCfgS(&adc_filter); + + sw_matrix.Dswitch = SWD_OPEN; + /* Performing a three wire ECG measurement */ + sw_matrix.Pswitch = SWP_RE1|SWP_DE0; + sw_matrix.Nswitch = SWN_AIN2|SWN_SE0; + sw_matrix.Tswitch = SWT_AIN0|SWT_AFE3LOAD; + AD5940_SWMatrixCfgS(&sw_matrix); + + AD5940_AFECtrlS(AFECTRL_HPREFPWR, bTRUE); /* Enable reference. It's automatically turned off during hibernate */ + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + AD5940_SEQGpioCtrlS(/*AGPIO_Pin6|*/AGPIO_Pin5|AGPIO_Pin1); /* GP6 to indicate sequencer is running. GP5 to disable AD8233. GP1 to enable AD8233 RLD function. */ + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppECGCfg.InitSeqInfo.SeqId = SEQID_1; + AppECGCfg.InitSeqInfo.SeqRamAddr = AppECGCfg.SeqStartAddr; + AppECGCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppECGCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppECGCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +static AD5940Err AppECGSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_SINC3; + clks_cal.DataCount = 1; /* Sample one data when wakeup */ + clks_cal.ADCSinc2Osr = AppECGCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppECGCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppECGCfg.SysClkFreq/AppECGCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + //printf("Wait clocks:%d\n", WaitClks); + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_SEQGenInsert(SEQ_WAIT(16*200)); /* Time for reference settling.*/ + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_SEQGpioCtrlS(/*AGPIO_Pin6|*/AGPIO_Pin5|AGPIO_Pin1); /* GP6 to indicate Sequencer is running. GP5 to enable AD8233. GP1 to enable AD8233 RLD function. */ + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppECGCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppECGCfg.MeasureSeqInfo.SeqRamAddr = AppECGCfg.InitSeqInfo.SeqRamAddr + AppECGCfg.InitSeqInfo.SeqLen ; + AppECGCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppECGCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM. The buffer 'pSeqCmd' will be used to generate next sequence */ + AD5940_SEQCmdWrite(AppECGCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/* This function provide application initialize. It can also enable Wupt that will automatically trigger sequence. Or it can configure */ +int32_t AppECGInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + + SEQCfg_Type seq_cfg; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + AD5940_FIFOThrshSet(AppECGCfg.FifoThresh); + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bTRUE); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppECGCfg.ECGInited == bFALSE)||\ + (AppECGCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppECGSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppECGSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppECGCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppECGCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppECGCfg.InitSeqInfo); + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppECGCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppECGCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppECGCfg.MeasureSeqInfo); + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger. It's disabled in initialization sequence */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppECGCfg.PwrMod, AFEBW_250KHZ); + + AppECGCfg.ECGInited = bTRUE; /* ECG application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +int32_t AppECGRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppECGCfg.NumOfData > 0) + { + AppECGCfg.FifoDataCount += *pDataCount/4; + if(AppECGCfg.FifoDataCount >= AppECGCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppECGCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +static int32_t AppECGDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + + *pDataCount = 0; + + /* Get ADC result */ + for(uint32_t i=0; i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* We are operating registers, so we don't allow AFE enter sleep mode which is done in our sequencer */ + *pCount = 0; + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = AD5940_FIFOGetCnt(); + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppECGRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. AFE will stay at active mode until sequencer trigger sleep */ + /* AD5940_EnterSleepS(); // We cannot manually put AFE to hibernate because it's possible sequencer is running to take measurements */ + /* Process data */ + AppECGDataProcess(pBuff,&FifoCnt); + *pCount = FifoCnt; + return AD5940ERR_OK; + } + + return AD5940ERR_OK; +} + + diff --git a/examples/AD5940_ECG/Electrocardiograph.h b/examples/AD5940_ECG/Electrocardiograph.h new file mode 100644 index 0000000..4bcfdee --- /dev/null +++ b/examples/AD5940_ECG/Electrocardiograph.h @@ -0,0 +1,64 @@ +/*! + ***************************************************************************** + @file: Electrocardiograph.h + @author: Neo Xu + @brief: ECG measurement. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _ELETROCARDIOAGRAPH_H_ +#define _ELETROCARDIOAGRAPH_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + BoolFlag bBioElecBoard; /* Indicate if the board is Bioelec board. 0: AD5941Sens1 board, 1: AD5940-BioElec */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Calibration sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + float ECGODR; /* Must be less than 1500Hz. Sample frequency in Hz, this value is used to set Sleep Wakeup Timer period */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ + + float LfoscClkFreq; /* The clock frequency of internal LFOSC in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /* The real frequency of system clock */ + float AdcClkFreq; /* The real frequency of ADC clock */ + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + + uint32_t AdcPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint32_t ADCSinc3Osr; + uint32_t ADCSinc2Osr; +/* Private variables for internal usage */ + BoolFlag ECGInited; /* If the program run firstly, generated sequence commands */ + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* How many data we have got from start. */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; +}AppECGCfg_Type; + +#define APPCTRL_START 0 +#define APPCTRL_STOPNOW 1 +#define APPCTRL_STOPSYNC 2 +//#define APPCTRL_GETFREQ 3 +#define APPCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + + +AD5940Err AppECGGetCfg(void *pCfg); +AD5940Err AppECGInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppECGISR(void *pBuff, uint32_t *pCount); +AD5940Err AppECGCtrl(int32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvoptx b/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvoptx new file mode 100644 index 0000000..b4f719c --- /dev/null +++ b/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Electrocardiograph.c + Electrocardiograph.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvprojx b/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvprojx new file mode 100644 index 0000000..8dda73d --- /dev/null +++ b/examples/AD5940_ECG/NUCLEO-F411/AD5940_ECG.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Electrocardiograph.c + 1 + ..\Electrocardiograph.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_ECG/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_ECG/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_ECG/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_ECG/NUCLEO-F411/main.c b/examples/AD5940_ECG/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_ECG/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_ECSns_EIS/AD5940Main.c b/examples/AD5940_ECSns_EIS/AD5940Main.c new file mode 100644 index 0000000..8e06cc0 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/AD5940Main.c @@ -0,0 +1,151 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Electrochemical impedance spectroscopy based on example AD5940_Impedance + This project is optomized for 3-lead electrochemical sensors that typically have + an impedance <200ohm. For optimum performance RCAL should be close to + impedance of the sensor. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "Impedance.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +int32_t ImpedanceShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpPol_Type *pImp = (fImpPol_Type*)pData; + AppIMPCtrl(IMPCTRL_GETFREQ, &freq); + + printf("Freq:%.2f ", freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pImpedanceCfg->MaxSeqLen = 512; /* @todo add checker in function */ + + pImpedanceCfg->RcalVal = 200.0; + pImpedanceCfg->FifoThresh = 6; + pImpedanceCfg->SinFreq = 1000.0; + + /* Configure Excitation Waveform + * + * Output waveform = DacVoltPP * ExcitBufGain * HsDacGain + * + * = 300 * 0.25 * 0.2 = 15mV pk-pk + * + */ + pImpedanceCfg->DacVoltPP = 300; /* Maximum value is 600mV*/ + pImpedanceCfg->ExcitBufGain = EXCITBUFGAIN_0P25; + pImpedanceCfg->HsDacGain = HSDACGAIN_0P2; + + /* Set switch matrix to onboard(EVAL-AD5940ELECZ) gas sensor. */ + pImpedanceCfg->DswitchSel = SWD_CE0; + pImpedanceCfg->PswitchSel = SWP_RE0; + pImpedanceCfg->NswitchSel = SWN_SE0LOAD; + pImpedanceCfg->TswitchSel = SWT_SE0LOAD; + /* The dummy sensor is as low as 5kOhm. We need to make sure RTIA is small enough that HSTIA won't be saturated. */ + pImpedanceCfg->HstiaRtiaSel = HSTIARTIA_200; + pImpedanceCfg->BiasVolt = 0.0; + /* Configure the sweep function. */ + pImpedanceCfg->SweepCfg.SweepEn = bFALSE; + pImpedanceCfg->SweepCfg.SweepStart = 100.0f; /* Start from 1kHz */ + pImpedanceCfg->SweepCfg.SweepStop = 100e3f; /* Stop at 100kHz */ + pImpedanceCfg->SweepCfg.SweepPoints = 101; /* Points is 101 */ + pImpedanceCfg->SweepCfg.SweepLog = bTRUE; + /* Configure Power Mode. Use HP mode if frequency is higher than 80kHz. */ + pImpedanceCfg->PwrMod = AFEPWR_LP; + /* Configure filters if necessary */ + pImpedanceCfg->ADCSinc3Osr = ADCSINC3OSR_4; /* Sample rate is 800kSPS/2 = 400kSPS */ + pImpedanceCfg->DftNum = DFTNUM_16384; + pImpedanceCfg->DftSrc = DFTSRC_SINC3; +} + +void AD5940_Main(void) +{ + uint32_t temp; + AD5940PlatformCfg(); + AD5940ImpedanceStructInit(); + + AppIMPInit(AppBuff, APPBUFF_SIZE); /* Initialize IMP application. Provide a buffer, which is used to store sequencer commands */ + AppIMPCtrl(IMPCTRL_START, 0); /* Control IMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + temp = APPBUFF_SIZE; + AppIMPISR(AppBuff, &temp); + ImpedanceShowResult(AppBuff, temp); + } + } +} + diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewd b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewp b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewp new file mode 100644 index 0000000..754d5ed --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\Impedance.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.rteconfig b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvoptx b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvoptx new file mode 100644 index 0000000..1486aa4 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"DAPLink CMSIS-DAP" -U0600000032624e45004e2015b175000e -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + RzRloadMag + + + 1 + 1 + RcalMag + + + 2 + 1 + RzMag + + + 3 + 1 + RloadMag + + + 4 + 1 + pData + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvprojx b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvprojx new file mode 100644 index 0000000..c94175c --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/AD5940_ECSensEIS.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_ECSns_EIS/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_ECSns_EIS/ADICUP3029/main.c b/examples/AD5940_ECSns_EIS/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_ECSns_EIS/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_ECSns_EIS/Impedance.c b/examples/AD5940_ECSns_EIS/Impedance.c new file mode 100644 index 0000000..10323fe --- /dev/null +++ b/examples/AD5940_ECSns_EIS/Impedance.c @@ -0,0 +1,678 @@ +/*! + ***************************************************************************** + @file: Impedance.c + @author: Neo Xu + @brief: Electrochemical impedance spectroscopy based on example AD5940_Impedance + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "AD5940.H" +#include +#include "string.h" +#include "math.h" +#include "Impedance.h" + +/* Default LPDAC resolution(2.5V internal reference). */ +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppIMPCfg_Type AppIMPCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ImpODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .RcalVal = 10000.0, + + .DswitchSel = SWD_CE0, + .PswitchSel = SWP_CE0, + .NswitchSel = SWN_AIN1, + .TswitchSel = SWT_AIN1, + + .PwrMod = AFEPWR_LP, + + .LptiaRtiaSel = LPTIARTIA_4K, /* COnfigure RTIA */ + .LpTiaRf = LPTIARF_1M, /* Configure LPF resistor */ + .LpTiaRl = LPTIARLOAD_100R, + + .HstiaRtiaSel = HSTIARTIA_1K, + .ExcitBufGain = EXCITBUFGAIN_0P25, + .HsDacGain = HSDACGAIN_0P2, + .HsDacUpdateRate = 0x1B, + .DacVoltPP = 300.0, + .BiasVolt = -0.0f, + + .SinFreq = 100000.0, /* 1000Hz */ + + .DftNum = DFTNUM_16384, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .ADCAvgNum = ADCAVGNUM_16, + + .SweepCfg.SweepEn = bTRUE, + .SweepCfg.SweepStart = 1000, + .SweepCfg.SweepStop = 100000.0, + .SweepCfg.SweepPoints = 101, + .SweepCfg.SweepLog = bFALSE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, + .IMPInited = bFALSE, + .StopRequired = bFALSE, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +int32_t AppIMPGetCfg(void *pCfg) +{ + if(pCfg) + { + *(AppIMPCfg_Type**)pCfg = &AppIMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +int32_t AppIMPCtrl(uint32_t Command, void *pPara) +{ + + switch (Command) + { + case IMPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppIMPCfg.IMPInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppIMPCfg.WuptClkFreq/AppIMPCfg.ImpODR)-4; + AD5940_WUPTCfg(&wupt_cfg); + + AppIMPCfg.FifoDataCount = 0; /* restart */ + break; + } + case IMPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + AD5940_WUPTCtrl(bFALSE); + break; + } + case IMPCTRL_STOPSYNC: + { + AppIMPCfg.StopRequired = bTRUE; + break; + } + case IMPCTRL_GETFREQ: + { + if(pPara == 0) + return AD5940ERR_PARA; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppIMPCfg.FreqofData; + else + *(float*)pPara = AppIMPCfg.SinFreq; + } + break; + case IMPCTRL_SHUTDOWN: + { + AppIMPCtrl(IMPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lploop_cfg; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lploop_cfg, 0, sizeof(lploop_cfg)); + AD5940_LPLoopCfgS(&lploop_cfg); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* generated code snnipet */ +float AppIMPGetCurrFreq(void) +{ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + return AppIMPCfg.FreqofData; + else + return AppIMPCfg.SinFreq; +} + +/* Application initialization */ +static AD5940Err AppIMPSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HsLoopCfg; + LPLoopCfg_Type lploop_cfg; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + lploop_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lploop_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lploop_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; + lploop_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lploop_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; + lploop_cfg.LpDacCfg.DataRst = bFALSE; + lploop_cfg.LpDacCfg.PowerEn = bTRUE; + lploop_cfg.LpDacCfg.DacData6Bit = (uint32_t)((AppIMPCfg.Vzero-200)/DAC6BITVOLT_1LSB); + lploop_cfg.LpDacCfg.DacData12Bit =(int32_t)((AppIMPCfg.BiasVolt)/DAC12BITVOLT_1LSB) + lploop_cfg.LpDacCfg.DacData6Bit*64; + if(lploop_cfg.LpDacCfg.DacData12Bit>lploop_cfg.LpDacCfg.DacData6Bit*64) + lploop_cfg.LpDacCfg.DacData12Bit--; + lploop_cfg.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + lploop_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaRf = AppIMPCfg.LpTiaRf; + lploop_cfg.LpAmpCfg.LpTiaRload = AppIMPCfg.LpTiaRl; + lploop_cfg.LpAmpCfg.LpTiaRtia = AppIMPCfg.LptiaRtiaSel; + lploop_cfg.LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(2)|LPTIASW(4)|LPTIASW(12)|LPTIASW(13); + + AD5940_LPLoopCfgS(&lploop_cfg); + + HsLoopCfg.HsDacCfg.ExcitBufGain = AppIMPCfg.ExcitBufGain; + HsLoopCfg.HsDacCfg.HsDacGain = AppIMPCfg.HsDacGain; + HsLoopCfg.HsDacCfg.HsDacUpdateRate = AppIMPCfg.HsDacUpdateRate; + + HsLoopCfg.HsTiaCfg.DiodeClose = bFALSE; + HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HsLoopCfg.HsTiaCfg.HstiaCtia = 31; /* 31pF + 2pF */ + HsLoopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HsLoopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + HsLoopCfg.HsTiaCfg.HstiaRtiaSel = AppIMPCfg.HstiaRtiaSel; + + HsLoopCfg.SWMatCfg.Dswitch = AppIMPCfg.DswitchSel; + HsLoopCfg.SWMatCfg.Pswitch = AppIMPCfg.PswitchSel; + HsLoopCfg.SWMatCfg.Nswitch = AppIMPCfg.NswitchSel; + HsLoopCfg.SWMatCfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + + HsLoopCfg.WgCfg.WgType = WGTYPE_SIN; + HsLoopCfg.WgCfg.GainCalEn = bTRUE; + HsLoopCfg.WgCfg.OffsetCalEn = bTRUE; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCfg.SweepStart; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + sin_freq = AppIMPCfg.SweepCurrFreq; + } + else + { + sin_freq = AppIMPCfg.SinFreq; + AppIMPCfg.FreqofData = sin_freq; + } + HsLoopCfg.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppIMPCfg.SysClkFreq); + HsLoopCfg.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppIMPCfg.DacVoltPP/800.0f*2047 + 0.5f); + HsLoopCfg.WgCfg.SinCfg.SinOffsetWord = 0; + HsLoopCfg.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&HsLoopCfg); + + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppIMPCfg.AdcPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = AppIMPCfg.ADCAvgNum; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppIMPCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppIMPCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppIMPCfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + if(AppIMPCfg.BiasVolt == 0.0f) + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + else + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH|AFECTRL_DCBUFPWR, bTRUE); + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppIMPCfg.InitSeqInfo.SeqId = SEQID_1; + AppIMPCfg.InitSeqInfo.SeqRamAddr = AppIMPCfg.SeqStartAddr; + AppIMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + + +static AD5940Err AppIMPSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + LPAmpCfg_Type LpAmpCfg; + + /* Calculate number of clocks to get data to FIFO */ + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppIMPCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppIMPCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = AppIMPCfg.ADCAvgNum; + clks_cal.RatioSys2AdcClk = AppIMPCfg.SysClkFreq/AppIMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + /* Start Sequence Generator */ + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); /* Set GPIO1, clear others that under control */ + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* @todo wait 250us? */ + + /* Disconnect SE0 from LPTIA*/ + LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; + LpAmpCfg.LpPaPwrEn = bTRUE; + LpAmpCfg.LpTiaPwrEn = bTRUE; + LpAmpCfg.LpTiaRf = AppIMPCfg.LpTiaRf; + LpAmpCfg.LpTiaRload = AppIMPCfg.LpTiaRl; + LpAmpCfg.LpTiaRtia = LPTIARTIA_OPEN; /* Disconnect Rtia to avoid RC filter discharge */ + LpAmpCfg.LpTiaSW = LPTIASW(7)|LPTIASW(8)|LPTIASW(12)|LPTIASW(13); + AD5940_LPAMPCfgS(&LpAmpCfg); + /* Sensor + Rload Measurement */ + sw_cfg.Dswitch = AppIMPCfg.DswitchSel; + sw_cfg.Pswitch = AppIMPCfg.PswitchSel; + sw_cfg.Nswitch = AppIMPCfg.NswitchSel; + sw_cfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + + + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE); /* Enable Waveform generator */ + //delay for signal settling DFT_WAIT + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH|AFECTRL_DFT|AFECTRL_ADCCNV, bFALSE); + + /* RLOAD Measurement */ + sw_cfg.Dswitch = SWD_SE0; + sw_cfg.Pswitch = SWP_SE0; + sw_cfg.Nswitch = SWN_SE0LOAD; + sw_cfg.Tswitch = SWT_SE0LOAD|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH|AFECTRL_ADCCNV, bFALSE); + + /* RCAL Measurement */ + sw_cfg.Dswitch = SWD_RCAL0; + sw_cfg.Pswitch = SWP_RCAL0; + sw_cfg.Nswitch = SWN_RCAL1; + sw_cfg.Tswitch = SWT_RCAL1|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + /* Reconnect LP loop */ + LpAmpCfg.LpTiaRtia = AppIMPCfg.LptiaRtiaSel; /* Disconnect Rtia to avoid RC filter discharge */ + LpAmpCfg.LpTiaSW = LPTIASW(5)|LPTIASW(2)|LPTIASW(4)|LPTIASW(12)|LPTIASW(13); + AD5940_LPAMPCfgS(&LpAmpCfg); + + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|AFECTRL_SINC2NOTCH, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT/*|AFECTRL_SINC2NOTCH*/, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bFALSE); + AD5940_SEQGpioCtrlS(0); /* Clr GPIO1 */ + + sw_cfg.Dswitch = SWD_OPEN; + sw_cfg.Pswitch = SWP_OPEN; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_OPEN; + AD5940_SWMatrixCfgS(&sw_cfg); + + //AD5940_EnterSleepS();/* Goto hibernate */ + + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppIMPCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppIMPCfg.MeasureSeqInfo.SeqRamAddr = AppIMPCfg.InitSeqInfo.SeqRamAddr + AppIMPCfg.InitSeqInfo.SeqLen ; + AppIMPCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + + +/* This function provide application initialize. It can also enable Wupt that will automatically trigger sequence. Or it can configure */ +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bTRUE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppIMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppIMPCfg.IMPInited == bFALSE)||\ + (AppIMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppIMPSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppIMPSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppIMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppIMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppIMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppIMPCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppIMPCfg.PwrMod, AFEBW_250KHZ); + + AD5940_WriteReg(REG_AFE_LPTIASW0, 0x3180); + AppIMPCfg.IMPInited = bTRUE; /* IMP application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +int32_t AppIMPRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppIMPCfg.NumOfData > 0) + { + AppIMPCfg.FifoDataCount += *pDataCount/4; + if(AppIMPCfg.FifoDataCount >= AppIMPCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppIMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppIMPCfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + /* Check frequency and update FIlter settings */ + AD5940_WGFreqCtrlS(AppIMPCfg.SweepNextFreq, AppIMPCfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +int32_t AppIMPDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/6; + + fImpPol_Type * const pOut = (fImpPol_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/6)*6;/* We expect Rz+Rload, Rload and RCAL data, . One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal; + DftRzRload.Image = -pSrcData->Image; + pSrcData++; + DftRload.Real = pSrcData->Real; + DftRload.Image = -pSrcData->Image; + pSrcData++; + DftRcal.Real = pSrcData->Real; + DftRcal.Image = -pSrcData->Image; + pSrcData++; + /** + Rz = RloadRz - Rload + RloadRz = DftRcal/DftRzRload*RCAL; + Rload = DftRcal/DftRload*RCAL; + Rz = RloadRz - Rload = + (1/DftRzRload - 1/DftRload)*DftRcal*RCAL; + where RCAL is the RCAL resistor value in Ohm. + */ + //temp1 = 1/DftRzRload; + //temp2 = 1/DftRload; + temp1 = AD5940_ComplexDivFloat(&DftConst1, &DftRzRload); + temp2 = AD5940_ComplexDivFloat(&DftConst1, &DftRload); + res = AD5940_ComplexSubFloat(&temp1, &temp2); + res = AD5940_ComplexMulFloat(&res, &DftRcal); + pOut[i].Magnitude = AD5940_ComplexMag(&res)*AppIMPCfg.RcalVal; + pOut[i].Phase = AD5940_ComplexPhase(&res); + } + else + { + iImpCar_Type *pDftRcal, *pDftRzRload, *pDftRload; + + pDftRzRload = pSrcData++; + pDftRload = pSrcData++; + pDftRcal = pSrcData++; + + float RzRloadMag, RzRloadPhase; + float RloadMag, RloadPhase; + float RzMag,RzPhase; + float RcalMag, RcalPhase; + float RzReal, RzImage; + + RzReal = pDftRload->Real - pDftRzRload->Real; + RzImage = pDftRload->Image - pDftRzRload->Image; + + RzRloadMag = sqrt((float)pDftRzRload->Real*pDftRzRload->Real+(float)pDftRzRload->Image*pDftRzRload->Image); + RzRloadPhase = atan2(-pDftRzRload->Image,pDftRzRload->Real); + RcalMag = sqrt((float)pDftRcal->Real*pDftRcal->Real+(float)pDftRcal->Image*pDftRcal->Image); + RcalPhase = atan2(-pDftRcal->Image,pDftRcal->Real); + RzMag = sqrt((float)RzReal*RzReal+(float)RzImage*RzImage); + RzPhase = atan2(-RzImage,RzReal); + RloadMag = sqrt((float)pDftRload->Real*pDftRload->Real+(float)pDftRload->Image*pDftRload->Image); + RloadPhase = atan2(-pDftRload->Image,pDftRload->Real); + + RzMag = (AppIMPCfg.RcalVal*RcalMag*RzMag)/(RzRloadMag*RloadMag); + RzPhase = -(RcalPhase + RzPhase - RloadPhase - RzRloadPhase); + // RzPhase = (RcalPhase + RzPhase - RloadPhase - RzRloadPhase); + + + pOut[i].Magnitude = RzMag; + pOut[i].Phase = RzPhase; + } + } + *pDataCount = ImpResCount; + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + /* Calculate next frequency point */ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepNextFreq; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + } + + return 0; +} + +/** + +*/ +int32_t AppIMPISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + + *pCount = 0; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Prohibit AFE to enter sleep mode. */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/6)*6; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppIMPRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. */ + /* Process data */ + AppIMPDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + + diff --git a/examples/AD5940_ECSns_EIS/Impedance.h b/examples/AD5940_ECSns_EIS/Impedance.h new file mode 100644 index 0000000..e7d5425 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/Impedance.h @@ -0,0 +1,91 @@ +/*! + ***************************************************************************** + @file: Impedance.h + @author: Neo Xu + @brief: Electrochemical impedance spectroscopy based on example AD5940_Impedance + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _IMPEDANCESEQUENCES_H_ +#define _IMPEDANCESEQUENCES_H_ +#include "AD5940.H" +#include +#include "string.h" +#include "math.h" + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + float ImpODR; /* */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /* The real frequency of system clock */ + float AdcClkFreq; /* The real frequency of ADC clock */ + float RcalVal; /* Rcal value in Ohm */ + /* Switch Configuration */ + uint32_t DswitchSel; + uint32_t PswitchSel; + uint32_t NswitchSel; + uint32_t TswitchSel; + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t ExcitBufGain; /* Select from EXCTBUFGAIN_2, EXCTBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; + float DacVoltPP; /* DAC output voltage in mV peak to peak. Maximum value is 600mVpp. Peak to peak voltage */ + float BiasVolt; /* The excitation signal is DC+AC. This parameter decides the DC value in mV unit. 0.0mV means no DC bias.*/ + float SinFreq; /* Frequency of excitation signal */ + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + uint32_t AdcPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; + uint8_t ADCSinc2Osr; + uint8_t ADCAvgNum; + uint8_t ADC_Rate; + + uint32_t LptiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t LpTiaRf; /* Rfilter select */ + uint32_t LpTiaRl; /* SE0 Rload select */ + float Vzero; /* Voltage on SE0 pin and Vzero, optimumly 1100mV*/ + float Vbias; /* Voltage on CE0 and PA */ + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ +/* Private variables for internal usage */ +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag IMPInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +}AppIMPCfg_Type; + +#define IMPCTRL_START 0 +#define IMPCTRL_STOPNOW 1 +#define IMPCTRL_STOPSYNC 2 +#define IMPCTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define IMPCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + + +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize); +int32_t AppIMPGetCfg(void *pCfg); +int32_t AppIMPISR(void *pBuff, uint32_t *pCount); +int32_t AppIMPCtrl(uint32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvoptx b/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvoptx new file mode 100644 index 0000000..615740d --- /dev/null +++ b/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvprojx b/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvprojx new file mode 100644 index 0000000..a1b4295 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/NUCLEO-F411/AD5940_ECSns_EIS.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_ECSns_EIS/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_ECSns_EIS/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_ECSns_EIS/NUCLEO-F411/main.c b/examples/AD5940_ECSns_EIS/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_ECSns_EIS/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_EDA/AD5940Main.c b/examples/AD5940_EDA/AD5940Main.c new file mode 100644 index 0000000..1b4f383 --- /dev/null +++ b/examples/AD5940_EDA/AD5940Main.c @@ -0,0 +1,218 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Used to control specific application and furfur process data. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +/** + * @addtogroup AD5940_System_Examples + * @{ + * @defgroup BioElec_Example + * @{ + */ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include "math.h" +#include "ElectrodermalActivity.h" + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; /* Measured LFOSC frequency */ +uint32_t ResistorForBaseline = 0; + + +/* print EDA result to uart */ +AD5940Err EDAShowResult(void *pData, uint32_t DataCount) +{ + float RtiaMag; + /*Process data*/ + fImpCar_Type *pImp = (fImpCar_Type*)pData; + AppEDACtrl(EDACTRL_GETRTIAMAG, &RtiaMag); + + /*Process data*/ + for(int i=0;iMaxSeqLen = 512; + + pCfg->LfoscClkFreq = 32000; /* Don't do LFOSC calibration now. We assume the default LFOSC is trimmed. */ + pCfg->RtiaAutoScaleEnable = bTRUE; /* We manually select resistor value. */ + pCfg->LptiaRtiaSel = LPTIARTIA_120K; + pCfg->SinAmplitude = 1100*3/4; /* Set excitation voltage to 0.75 times of full range. */ + pCfg->SinFreq = 100.0f; + pCfg->SampleFreq = 400.0f; /* Do not change sample frequency unless you know how it works. */ + pCfg->EDAODR = 4.0f; /* ODR decides how frequently to start the engine to measure impedance. */ + pCfg->FifoThresh = 4; /* The minimum threshold value is 4, and should always be 4*N, where N is 1,2,3... */ + pCfg->bParaChanged = bTRUE; +} + + +void AD5940_Main(void) +{ + uint32_t temp; + fImpCar_Type EDABase = + { + .Real = 24299.84f, + .Image = -110778.71f, + }; + + AD5940PlatformCfg(); + + AD5940EDAStructInit(); /* Configure your parameters in this function */ + + AppEDAInit(AppBuff, APPBUFF_SIZE); /* Initialize BIA application. Provide a buffer, which is used to store sequencer commands */ + AppEDACtrl(APPCTRL_START, 0); /* Control BIA measurement to start. Second parameter has no meaning with this command. */ + AppEDACtrl(EDACTRL_SETBASE, &EDABase); + ResistorForBaseline = 20000; /* Above result is obtained using 20kOhm resistor on BioElec Rev C board. */ + while(1) + { + /* Check if interrupt flag which will be set when interrupt occurred. */ + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); /* Clear this flag */ + temp = APPBUFF_SIZE; + AppEDAISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */ + EDAShowResult(AppBuff, temp); /* Show the results to UART */ + } + } +} + +uint32_t rst_eda_base(uint32_t para1, uint32_t para2) +{ + printf("Reset EDA impedance baseline\n"); + ResistorForBaseline = 0; + AppEDACtrl(EDACTRL_RSTBASE, 0); + return 0; +} + +uint32_t set_eda_base(uint32_t para1, uint32_t para2) +{ + fImpCar_Type ImpAVR; + printf("Set EDA impedance baseline with current measured impedance average result\n"); + printf("Resistor used to measure baseline is %dOhm\n", para1); + ResistorForBaseline = para1; + AppEDACtrl(EDACTRL_GETAVR, &ImpAVR); + AppEDACtrl(EDACTRL_SETBASE, &ImpAVR); + return 0; +} + +uint32_t get_average_imp(uint32_t para1, uint32_t para2) +{ + fImpCar_Type ImpAVR; + printf("Measured average impedance result is:\n"); + AppEDACtrl(EDACTRL_GETAVR, &ImpAVR); + printf("(Real,Image)=(%.2f,%.2f)Ohm\n", ImpAVR.Real, ImpAVR.Image); + return 0; +} + +uint32_t eda_start(uint32_t para1, uint32_t para2) +{ + printf("Start EDA measurement\n"); + AppEDACtrl(APPCTRL_START, 0); + return 0; +} + +uint32_t eda_stop(uint32_t para1, uint32_t para2) +{ + printf("Stop EDA measurement right now!!\n"); + AppEDACtrl(APPCTRL_STOPNOW, 0); + return 0; +} + +/** + * @} + * @} + * */ + diff --git a/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewd b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewp b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewp new file mode 100644 index 0000000..ab0cf92 --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.ewp @@ -0,0 +1,2238 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\ElectrodermalActivity.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\..\UARTCmd.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.rteconfig b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvoptx b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvoptx new file mode 100644 index 0000000..599534f --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvoptx @@ -0,0 +1,306 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\ElectrodermalActivity.c + ElectrodermalActivity.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\UARTCmd.C + UARTCmd.C + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvprojx b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvprojx new file mode 100644 index 0000000..011a9fc --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/AD5940_EDA.uvprojx @@ -0,0 +1,508 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + ElectrodermalActivity.c + 1 + ..\ElectrodermalActivity.c + + + UARTCmd.C + 1 + ..\UARTCmd.C + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_EDA/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_EDA/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_EDA/ADICUP3029/main.c b/examples/AD5940_EDA/ADICUP3029/main.c new file mode 100644 index 0000000..42978a3 --- /dev/null +++ b/examples/AD5940_EDA/ADICUP3029/main.c @@ -0,0 +1,173 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0x40/*RX_FIFO_4BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} + +void UART_Int_Handler(void) +{ + void UARTCmd_Process(char); + uint32_t flag; + flag = pADI_UART0->LSR; + flag = pADI_UART0->IIR; + if((flag & 0x0e) == 0x04) /* Receive Byte */ + { + uint32_t count; + count = pADI_UART0->RFC; /* Receive FIFO count */ + for(int i=0;i < count; i++) + { + char c; + c = pADI_UART0->COMRX&0xff; + UARTCmd_Process(c); + } + } + if((flag & 0x0e) == 0xc) /* Time-out */ + { + uint32_t count; + count = pADI_UART0->RFC; /* Receive FIFO count */ + for(int i=0;i < count; i++) + { + char c; + c = pADI_UART0->COMRX&0xff; + UARTCmd_Process(c); + } + } +} diff --git a/examples/AD5940_EDA/ElectrodermalActivity.c b/examples/AD5940_EDA/ElectrodermalActivity.c new file mode 100644 index 0000000..f697986 --- /dev/null +++ b/examples/AD5940_EDA/ElectrodermalActivity.c @@ -0,0 +1,874 @@ +/*! + ***************************************************************************** + @file: ElectrodermalActivity.c + @author: Neo Xu + @brief: EDA measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ElectrodermalActivity.h" + +/** @addtogroup AD5940_System_Examples + * @{ + * @defgroup EDA_Example + * @brief This example is used to measure skin impedance. The main feature of this example is ultra low power consumption. + * @details + * @note Need to update code when runs at S2 silicon. + * + * + * + * @{ + * */ + +/** + * @brief The EDA application paramters. + * @details Do not modify following default parameters. Use the function in AD5940Main.c to change it. + * + * */ +AppEDACfg_Type AppEDACfg = +{ +/* Common configurations for all kinds of Application. */ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, +/* Application related parameters */ + .bBioElecBoard = bTRUE, + .ReDoRtiaCal = bFALSE, + .SysClkFreq = 16000000.0, + .LfoscClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .FifoThresh = 4, + .EDAODR = 4.0, /* 20.0 Hz*/ + .NumOfData = -1, + .VoltCalPoints = 8, + .RcalVal = 10000.0, /* 10kOhm */ + .SinFreq = 100.0, /* 100Hz */ + .SampleFreq = 400.0, /* 400Hz */ + .SinAmplitude = 1100.0f/2, /* 1100mV peak */ + .DacUpdateRate = 7, + .LptiaRtiaSel = LPTIARTIA_100K, + + .DftNum = DFTNUM_16, + .HanWinEn = bTRUE, + + .RtiaAutoScaleEnable = bTRUE, + .RtiaAutoScaleMax = LPTIARTIA_512K, + .RtiaAutoScaleMin = LPTIARTIA_1K, + + .RtiaIndexCurr = 0, + .RtiaIndexNext = 0, + .bChangeRtia = bFALSE, + + /* private varaibles */ + .SeqPatchInfo ={ + .BuffLen = 32, + .pSeqCmd = NULL, + }, + .ImpEDABase = {0,0}, + .ImpSum = {0,0}, + .EDAInited = bFALSE, + .StopRequired = bFALSE, + .bRunning = bFALSE, + .bMeasVoltReq = bFALSE, + .EDAStateCurr = EDASTATE_INIT, + .EDAStateNext = EDASTATE_INIT, +}; + +/** + * @brief This function is provided for upper controllers that want to change + * application parameters specially for user defined parameters. + * @param pCfg: The pointer used to store application configuration structure pointer. + * @return none. +*/ +AD5940Err AppEDAGetCfg(void *pCfg) +{ + if(pCfg){ + *(AppEDACfg_Type**)pCfg = &AppEDACfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +/** + * @brief Control application like start, stop. + * @param Command: The command for this application, select from below paramters + * - APPCTRL_START: start the measurement. Note: the ramp test need firstly call function AppRAMPInit() every time before start it. + * - APPCTRL_STOPNOW: Stop the measurement immediately. + * - APPCTRL_STOPSYNC: Stop the measuremnt when current measured data is read back. + * - APPCTRL_SHUTDOWN: Stop the measurement immediately and put AFE to shut down mode(turn off LP loop and enter hibernate). + * - EDACTRL_MEASVOLT: Measure voltage once current measurement is done(Interrupt occurred). + * - EDACTRL_GETRTIAMAG: Get current RTIA value. + * @return none. +*/ +AD5940Err AppEDACtrl(int32_t EDACtrl, void *pPara) +{ + switch (EDACtrl) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppEDACfg.EDAInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = (uint32_t)(AppEDACfg.LfoscClkFreq/AppEDACfg.EDAODR)-2-4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = 4; /* The minimum value is 1. Do not set it to zero. Set it to 1 will spend 2 32kHz clock. */ + AD5940_WUPTCfg(&wupt_cfg); + AppEDACfg.FifoDataCount = 0; /* restart */ + AppEDACfg.bRunning = bTRUE; + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + AppEDACfg.bRunning = bFALSE; + break; + } + case APPCTRL_STOPSYNC: + { + AppEDACfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppEDACtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPLoop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + case EDACTRL_MEASVOLT: + AppEDACfg.bMeasVoltReq = bTRUE; + break; + case EDACTRL_GETRTIAMAG: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(float*)pPara = AD5940_ComplexMag(&AppEDACfg.RtiaCurrValue); + break; + case EDACTRL_RSTBASE: + AppEDACfg.ImpEDABase.Real = 0; + AppEDACfg.ImpEDABase.Image = 0; + AppEDACfg.ImpSum.Real = 0; + AppEDACfg.ImpSum.Image = 0; + AppEDACfg.ImpSumCount = 0; + break; + case EDACTRL_SETBASE: + { + fImpCar_Type *pImpBase = (fImpCar_Type *)pPara; /* The impedance used to set base line */ + AppEDACfg.ImpEDABase = *pImpBase; + } + break; + case EDACTRL_GETAVR: + if(pPara == NULL) return AD5940ERR_NULLP; + { + fImpCar_Type *pImpAVR = (fImpCar_Type *)pPara; + pImpAVR->Real = AppEDACfg.ImpSum.Real/AppEDACfg.ImpSumCount; + pImpAVR->Image = AppEDACfg.ImpSum.Image/AppEDACfg.ImpSumCount; + break; + } + case APPCTRL_RUNNING: + case EDACTRL_STATUS: + if(pPara == NULL) + return AD5940ERR_NULLP; /* Null pointer */ + *(BoolFlag*)pPara = AppEDACfg.bRunning; + break; + default: + break; + } + return AD5940ERR_OK; +} + +/** + * @brief Generate initialization sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppEDASeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + AFERefCfg_Type aferef_cfg; + HSDACCfg_Type hsdac_cfg; /* Waveform Generator uses some parameter(DAC update rate) from HSDAC config registers */ + LPLoopCfg_Type lp_loop; + WGCfg_Type wg_cfg; + DSPCfg_Type dsp_cfg; + SWMatrixCfg_Type sw_cfg; + + AD5940_SEQGenCtrl(bTRUE); + /* Sequence starts here */ + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5*/|AGPIO_Pin1); + AD5940_StructInit(&aferef_cfg, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); /* Turn off all references, we only enable it when we need it. */ + + AD5940_StructInit(&lp_loop, sizeof(lp_loop)); /* Disable everything, configure them during measurement */ + AD5940_LPLoopCfgS(&lp_loop); + + AD5940_StructInit(&wg_cfg, sizeof(wg_cfg)); + wg_cfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppEDACfg.SinAmplitude/1100.0f*2047); /* Maximum amplitude is 1100mV */ + wg_cfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(AppEDACfg.SinFreq, AppEDACfg.LfoscClkFreq); + wg_cfg.SinCfg.SinPhaseWord = 0; + wg_cfg.WgType = WGTYPE_SIN; + AD5940_WGCfgS(&wg_cfg); + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); + + /* Switch configuration for BioElec board */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_AIN2|SWP_SE0; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_VSET1P1; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_AIN4; + dsp_cfg.ADCBaseCfg.ADCPga = ADCPGA_1; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_4; /* We use averaged SINC3 output as DFT input source */ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = ADCSINC2OSR_22; /* Don't care */ + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = ADCSINC3OSR_5; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bFALSE; + dsp_cfg.DftCfg.DftNum = AppEDACfg.DftNum; + dsp_cfg.DftCfg.DftSrc = DFTSRC_AVG; /* Use averaged SINC3 data */ + dsp_cfg.DftCfg.HanWinEn = AppEDACfg.HanWinEn; + AD5940_DSPCfgS(&dsp_cfg); + AD5940_ADCRepeatCfgS(5*(4+2)+1); /* (n+2)*osr + 1, n=4,osr=5*/ + hsdac_cfg.ExcitBufGain = EXCITBUFGAIN_2; + hsdac_cfg.HsDacGain = HSDACGAIN_1; + hsdac_cfg.HsDacUpdateRate = AppEDACfg.DacUpdateRate; /* Note: the DAC update rate is decided by register DACON.RATE */ + AD5940_HSDacCfgS(&hsdac_cfg); + + AD5940_SEQGpioCtrlS(0/*AGPIO_Pin6|AGPIO_Pin5|AGPIO_Pin1*/); //GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + /* Stop here */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + AppEDACfg.InitSeqInfo.SeqId = SEQID_1; + AppEDACfg.InitSeqInfo.SeqRamAddr = AppEDACfg.SeqStartAddr; + AppEDACfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppEDACfg.InitSeqInfo.SeqLen = SeqLen; + AppEDACfg.InitSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppEDACfg.InitSeqInfo); /* Write command to SRAM */ + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** + * @brief Generate patch sequence according to current measurement type(Voltage or Current). + * @details The patch is used to adjust sequencer commands already stored in SRAM of AD5940 in order to perform different measurements. + * The reason is that the sequences need to be adjusted. Using the patch method will make things easily and we won't need to modify + * sequences in register level. + * @param pPatch: pointer to patch information include the measurement type, Rtia selection and buffers. + * @return return error code. +*/ +static AD5940Err ApPEDASeqPatchGen(SeqPatchInfo_Type *pPatch) +{ + AD5940Err err; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + LPAmpCfg_Type lpamp_cfg; + AD5940_SEQGenInit(pPatch->Buffer, pPatch->BuffLen); + AD5940_SEQGenCtrl(bTRUE); + lpamp_cfg.LpAmpSel = LPAMP0; + lpamp_cfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Use normal power mode is enough */ + lpamp_cfg.LpPaPwrEn = bTRUE; /* Enable Potential amplifier */ + lpamp_cfg.LpTiaPwrEn = bTRUE; /* Enable TIA amplifier */ + lpamp_cfg.LpTiaRf = LPF_RF; /* Rf resistor controls cut off frequency. */ + lpamp_cfg.LpTiaRload = LPTIARLOAD_100R; /** @note Use 100Ohm Rload. */ + lpamp_cfg.LpTiaRtia = pPatch->RtiaSel; /* If autoscaling is enabled, use selected value. */ + if(pPatch->Type == PATCHTYPE_VOLT) + lpamp_cfg.LpTiaSW = LPTIASW_VOLT; /* Switch settings for voltage measurement */ + else if(pPatch->Type == PATCHTYPE_CURR) + lpamp_cfg.LpTiaSW = LPTIASW_CURR; /* Switch settings for current measurement */ + AD5940_LPAMPCfgS(&lpamp_cfg); + AD5940_SEQGenCtrl(bFALSE); + err = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(err != AD5940ERR_OK) + return err; + pPatch->pSeqCmd = pSeqCmd; + pPatch->SeqLen = SeqLen; + return AD5940ERR_OK; +} + +/** + * @brief Generate measurement sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppEDASeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + uint32_t i; + uint32_t DFTNumber; + + LPDACCfg_Type lpdac_cfg; + LPAmpCfg_Type lpamp_cfg; + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + /* Stage I: Initialization */ + AD5940_SEQGpioCtrlS(AGPIO_Pin6/*|AGPIO_Pin5|AGPIO_Pin1*/);//GP6->endSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + /* LP loop configure: LPDAC and LPAMP */ + lpdac_cfg.LpdacSel = LPDAC0; + lpdac_cfg.DataRst = bFALSE; + lpdac_cfg.LpDacSW = LPDACSW_VBIAS2LPPA/*|LPDACSW_VBIAS2PIN*/|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lpdac_cfg.LpDacRef = LPDACREF_2P5; /* Use internal 2.5V reference */ + lpdac_cfg.LpDacSrc = LPDACSRC_WG; /* Use data from waveform generator */ + lpdac_cfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lpdac_cfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Use 6bit LPDAC for Vzero */ + lpdac_cfg.PowerEn = bTRUE; /* Enable LPDAC */ + lpdac_cfg.DacData12Bit = 0; /* Don't care, 12bit DAC data is from WG */ + lpdac_cfg.DacData6Bit = 32; /* Set it to middle scale of LPDAC. Vzero is the bias voltage of LPTIA amplifier */ + AD5940_LPDACCfgS(&lpdac_cfg); + + /* Voltage and current measurement need different switch settings, record the difference and only modify this part for different purpose */ + error = AD5940_SEQGenFetchSeq(NULL, &AppEDACfg.SeqPatchInfo.SRAMAddr); /* Record the start address of below commands */ + if(error != AD5940ERR_OK) + return error; + + lpamp_cfg.LpAmpSel = LPAMP0; + lpamp_cfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Use normal power mode is enough */ + lpamp_cfg.LpPaPwrEn = bTRUE; /* Enable Potential amplifier */ + lpamp_cfg.LpTiaPwrEn = bTRUE; /* Enable TIA amplifier */ + lpamp_cfg.LpTiaRf = LPF_RF; /* Rf resistor controls cut off frequency. */ + lpamp_cfg.LpTiaRload = LPTIARLOAD_100R; /** @note Use 100Ohm Rload. */ + lpamp_cfg.LpTiaRtia = AppEDACfg.LptiaRtiaSel; /* If autoscaling is enabled, use seleted value. */ + lpamp_cfg.LpTiaSW = LPTIASW_VOLT; /* Swtich settings for voltage measurement */ + AD5940_LPAMPCfgS(&lpamp_cfg); + + AD5940_WriteReg(REG_AFE_LPREFBUFCON, 0); /* Enable low power bandgap and 2.5V reference buffer */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Off everything */ + + AD5940_LPModeEnS(bTRUE); /* Enter LP control mode. The registers are summarized to LPMODECON, so we can control some blocks convenniently */ + AD5940_LPModeClkS(LPMODECLK_LFOSC); /* Trigger switching system clock to 32kHz */ + AD5940_LPModeCtrlS(LPMODECTRL_NONE); /* Disable all */ + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); /* Start waveform generator */ + AD5940_SEQGenInsert(SEQ_WAIT(LPF_TIME*32)); /* wait for stable */ + AD5940_AFECtrlS(AFECTRL_DFT, bTRUE); /* Enable DFT engine */ + + /* Stage II: ADC Run to sample enough data(DFT number) */ + DFTNumber = (1<<(AppEDACfg.DftNum +2)); + for(i=0;iendSeq, GP5 -> AD8233=OFF, GP1->RLD=OFF . + AD5940_EnterSleepS();/* Go to hibernate */ + + /* Sequence end. */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + if(AppEDACfg.MaxSeqLen < (SeqLen + AppEDACfg.InitSeqInfo.SeqLen)) + return AD5940ERR_BUFF; /* Buffer limited */ + AppEDACfg.MeasureSeqInfo.SeqId = SEQID_0; + AppEDACfg.MeasureSeqInfo.SeqRamAddr = AppEDACfg.InitSeqInfo.SeqRamAddr + AppEDACfg.InitSeqInfo.SeqLen ; + AppEDACfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppEDACfg.MeasureSeqInfo.SeqLen = SeqLen; + AppEDACfg.MeasureSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppEDACfg.MeasureSeqInfo); /* Write command to SRAM */ + /* Record where the patch should be applied. */ + AppEDACfg.SeqPatchInfo.SRAMAddr += AppEDACfg.MeasureSeqInfo.SeqRamAddr; /* The start address in AD5940 SRAM */ + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** + * @brief Calibrate LPTIA internal RTIA resistor(s). + * @details This function will do calibration using parameters stored in @ref AppEDACfg structure. + * @return return error code. +*/ +static AD5940Err AppEDARtiaCal(void) +{ + fImpCar_Type RtiaCalValue; /* Calibration result */ + LPRTIACal_Type lprtia_cal; + AD5940_StructInit(&lprtia_cal, sizeof(lprtia_cal)); + + lprtia_cal.LpAmpSel = LPAMP0; + lprtia_cal.bPolarResult = bFALSE; /* Real + Image */ + lprtia_cal.AdcClkFreq = AppEDACfg.AdcClkFreq; + lprtia_cal.SysClkFreq = AppEDACfg.SysClkFreq; + lprtia_cal.ADCSinc3Osr = ADCSINC3OSR_4; + lprtia_cal.ADCSinc2Osr = ADCSINC2OSR_22; /* We don't use SINC2 for now. */ + lprtia_cal.DftCfg.DftNum = DFTNUM_2048; /* Maximum DFT number */ + lprtia_cal.DftCfg.DftSrc = DFTSRC_SINC2NOTCH; + lprtia_cal.DftCfg.HanWinEn = bTRUE; + lprtia_cal.fFreq = AppEDACfg.SinFreq; + lprtia_cal.fRcal = AppEDACfg.RcalVal; + lprtia_cal.bWithCtia = bTRUE; + lprtia_cal.LpAmpPwrMod = LPAMPPWR_NORM; + lprtia_cal.bWithCtia = bTRUE; + lprtia_cal.LpTiaRtia = AppEDACfg.LptiaRtiaSel; + if(AppEDACfg.RtiaAutoScaleEnable == bTRUE) + { + int i = AppEDACfg.RtiaAutoScaleMin; + for(;i<=AppEDACfg.RtiaAutoScaleMax; i++) + { + lprtia_cal.LpTiaRtia = i; + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppEDACfg.RtiaCalTable[i] = RtiaCalValue; + //printf("Rtia%d,%f,%f\n", i, RtiaCalValue.Real, RtiaCalValue.Image); + } + AppEDACfg.RtiaCurrValue = AppEDACfg.RtiaCalTable[AppEDACfg.RtiaIndexCurr]; + } + else + { + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppEDACfg.RtiaCurrValue = RtiaCalValue; + //printf("Rtia,%f,%f\n", RtiaCalValue.Real, RtiaCalValue.Image); + //printf("Rtia calibration done\n"); + } + return AD5940ERR_OK; +} + +/** + * @brief Initialize the EDA measurement. + * @details This function must be called before start measurement. It will initialize all needed hardwares and put AD5940 to ready state. + * The application parameters stored in @ref AppEDACfg can be changed. Call this function to re-initialize AD5940 with new parameters. + * @param pBuffer: the buffer for sequencer generator. Only need to provide it for the first time. + * @param BufferSize: The buffer size start from pBuffer. + * @return return error code. +*/ +AD5940Err AppEDAInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + AppEDACfg.EDAStateCurr = EDASTATE_INIT; + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + /* Do RTIA calibration */ + if((AppEDACfg.ReDoRtiaCal == bTRUE) || \ + AppEDACfg.EDAInited == bFALSE) /* Do calibration on the first initialization */ + { + AppEDACfg.EDAStateCurr = EDASTATE_RTIACAL; + AppEDARtiaCal(); + AppEDACfg.ReDoRtiaCal = bFALSE; + //AppEDAMeasureRserial(); + } + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppEDACfg.VoltCalPoints*2; /* The first measurement is for excitation voltage. */ + AD5940_FIFOCfg(&fifo_cfg); + + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppEDACfg.EDAInited == bFALSE)||\ + (AppEDACfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppEDASeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppEDASeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppEDACfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequence */ + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, run initialization sequence */ + AD5940_SEQMmrTrig(AppEDACfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Apply patch for voltage measurement */ + AppEDACfg.EDAStateCurr = EDASTATE_VOLT; /* After initialization, the first thing is to measure excitation voltage */ + AppEDACfg.RtiaIndexCurr = AppEDACfg.RtiaIndexNext = AppEDACfg.LptiaRtiaSel; /* Init with a value */ + AppEDACfg.SeqPatchInfo.RtiaSel = LPTIARTIA_OPEN;//AppEDACfg.RtiaIndexCurr; + //AppEDACfg.SeqPatchInfo.bMeasureVolt = bTRUE; + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_VOLT; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + AD5940_WriteReg(REG_AFE_SWMUX, 0x01); /**@todo remove it? close switch SW1 */ + + if(AppEDACfg.RtiaAutoScaleMin > AppEDACfg.RtiaAutoScaleMax) + { + uint32_t temp; + temp = AppEDACfg.RtiaAutoScaleMin; + AppEDACfg.RtiaAutoScaleMin = AppEDACfg.RtiaAutoScaleMax; + AppEDACfg.RtiaAutoScaleMax = temp; + } + AppEDACfg.EDAInited = bTRUE; /* EDA application has been initialized. */ + return AD5940ERR_OK; +} + +/** + * @brief Register modification function. + * @details This function is called in ISR when AFE has been wakeup and we can access registers. + * @param pData: the buffer points to data read back from FIFO. Not needed for this application-RAMP + * @param pDataCount: The data count in pData buffer. + * @return return error code. +*/ +static AD5940Err AppEDARegModify(int32_t * const pData, uint32_t *pDataCount) +{ + AD5940Err error = AD5940ERR_OK; + if(AppEDACfg.EDAStateCurr == EDASTATE_VOLT) + { + SWMatrixCfg_Type sw_cfg; + /* Next step is to measure current */ + AppEDACfg.EDAStateNext = EDASTATE_CURR; + /* Need change some registers in order to measure current */ + AD5940_SEQCtrlS(bFALSE); /* Stop it for now. */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly because we are going to change FIFO threshold */ + AD5940_FIFOThrshSet(AppEDACfg.FifoThresh); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); /* Enable FIFO. */ + /* Change Switch matrix settings to connect AIN2(body) to SE0 */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_AIN2|SWP_SE0; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; /* This switch is for ECG. */ + AD5940_SWMatrixCfgS(&sw_cfg); + /* Apply patch for current measurement */ + //AppEDACfg.SeqPatchInfo.bMeasureVolt = bFALSE; + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_CURR; + AppEDACfg.SeqPatchInfo.RtiaSel = AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer. Sequencer will run when next valid trigger comes */ + } + else if(AppEDACfg.EDAStateCurr == EDASTATE_CURR) + { + if(AppEDACfg.bChangeRtia == bTRUE) + { + AppEDACfg.bChangeRtia = bFALSE; + /* Apply patch for next RTIA selection */ + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_CURR; + AppEDACfg.SeqPatchInfo.RtiaSel = AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + } + } + + if(AppEDACfg.bMeasVoltReq == bTRUE) + { + SWMatrixCfg_Type sw_cfg; + AppEDACfg.bMeasVoltReq = bFALSE; /* Clear this request */ + /* Next step is to measure voltage */ + AppEDACfg.EDAStateNext = EDASTATE_VOLT; + + /* Change Switch matrix settings to connect AIN2(body) to SE0 */ + sw_cfg.Dswitch = SWD_OPEN; /* Open all switch D */ + sw_cfg.Pswitch = SWP_OPEN; + sw_cfg.Nswitch = SWN_OPEN; + sw_cfg.Tswitch = SWT_AIN0|SWT_AFE3LOAD; /* This switch is for ECG. */ + AD5940_SWMatrixCfgS(&sw_cfg); + + /* Need change some registers in order to measure current */ + AD5940_SEQCtrlS(bFALSE); /* Stop it for now. */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly because we are going to change FIFO threshold */ + AD5940_FIFOThrshSet(AppEDACfg.VoltCalPoints*2); + AD5940_FIFOCtrlS(FIFOSRC_DFT, bTRUE); /* Enable FIFO. */ + + /* Apply patch for current measurement */ + AppEDACfg.SeqPatchInfo.Type = PATCHTYPE_VOLT; + AppEDACfg.SeqPatchInfo.RtiaSel = LPTIARTIA_OPEN;//AppEDACfg.RtiaIndexNext; + error = ApPEDASeqPatchGen(&AppEDACfg.SeqPatchInfo); + if(error != AD5940ERR_OK) + return error; + AD5940_SEQCmdWrite(AppEDACfg.SeqPatchInfo.SRAMAddr, \ + AppEDACfg.SeqPatchInfo.pSeqCmd, AppEDACfg.SeqPatchInfo.SeqLen); /* Apply the patch to SRAM */ + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer. Sequencer will run when next valid trigger comes */ + } + + if(AppEDACfg.NumOfData > 0) + { + AppEDACfg.FifoDataCount += *pDataCount/4; + if(AppEDACfg.FifoDataCount >= AppEDACfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppEDACfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + AppEDACfg.StopRequired = bFALSE; + AppEDACfg.bRunning = bFALSE; + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/** + * @brief Depending on the data type, do appropriate data pre-process before return back to controller + * @param pImpedance: the buffer points to pre-processed data. We use the impedance magnitude value to decide new RTIA settings. + * @param uiDataCount: The data count in pData buffer. + * @return return the next appropriate RTIA index value. +*/ +static uint32_t EDARtiaAutoScaling(fImpCar_Type * const pImpedance, uint32_t uiDataCount) +{ + uint32_t OptRtiaIndex; + float MagMean = 0; + fImpCar_Type SumImp={0,0}; + + /* Get Averaged Magnitude Result */ + for(int i=0;i 4) + { + DftResCnt -= 4; + pDftRes += 4; /* Discard the first 4 results */ + } + for(uint32_t i=0;i 20) /* Wakeup AFE by read register, read 20 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Don't enter hibernate */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + //@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppEDARegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Don't enter hibernate */ + /* Process data */ + AppEDADataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return AD5940ERR_OK; + } + return AD5940ERR_WAKEUP; +} + +/** + * @} + * @} +*/ + + diff --git a/examples/AD5940_EDA/ElectrodermalActivity.h b/examples/AD5940_EDA/ElectrodermalActivity.h new file mode 100644 index 0000000..7690390 --- /dev/null +++ b/examples/AD5940_EDA/ElectrodermalActivity.h @@ -0,0 +1,139 @@ +/*! + ***************************************************************************** + @file: ElectrodermalActivity.h + @author: Neo Xu + @brief: skin impedance measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _EDA_H_ +#define _EDA_H_ +#include "ad5940.h" +#include "stdio.h" +#include "string.h" +#include "math.h" + +/* Do not modify following parameters */ +#define LPTIAPA_PMOD 0 /* Power Mode of PA and LPTIA, Set to Half Power Mode is better for power consumption, 0: normal. 0x18: boost power. BITM_AFE_ULPTIACON0_HALFPWR: half power */ +#define LPF_RF LPTIARF_20K /* Set RF resistor of Low Pass Filter */ +#define LPF_TIME 10.0 /* Unit is ms. Low Pass Filter need time to settle. 10ms is OK for now */ + +#define LPTIASW_VOLT LPTIASW(5)|LPTIASW(6)|LPTIASW(7)|LPTIASW(8)|LPTIASW(9)|LPTIASW(13) +#define LPTIASW_CURR LPTIASW(2)|LPTIASW(5)|LPTIASW(10)|LPTIASW(13) + +/** + * @brief The structure for sequencer patch. +*/ +typedef struct +{ + enum __PatchType + { + PATCHTYPE_VOLT = 0, /**< Generate patch for measuring voltage */ + PATCHTYPE_CURR, /**< Generate patch for measuring current of body */ + }Type; + uint32_t RtiaSel; /**< LPTIA RTIA selection */ + const uint32_t *pSeqCmd; /**< The sequence to measure voltage and current is similar. The difference is stored in a command patch. */ + uint32_t SeqLen; /**< Length of patch sequence */ + uint32_t SRAMAddr; /**< Start address of the sequence command patch */ + uint32_t Buffer[32]; /**< 32Byte should be enough for sequence generator */ + const uint32_t BuffLen; /**< The buffer length of Buffer */ +}SeqPatchInfo_Type; + +/* + Note: this example will use SEQID_0 as measurement sequence, and use SEQID_1 as init sequence. + SEQID_3 is used for calibration if there is need. +*/ +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /**< Indicate to generate sequence again. It's auto cleared by AppEDAInit */ + uint32_t SeqStartAddr; /**< Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /**< Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /**< Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + BoolFlag bBioElecBoard; /**< Select between AD5941Sens1 board and BioElec board */ + BoolFlag ReDoRtiaCal; /**< Set this flag to bTRUE when there is need to do calibration. */ + float SysClkFreq; /**< The real frequency of system clock */ + float LfoscClkFreq; /**< The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + uint32_t FifoThresh; /**< FIFO threshold. Should be N*4 */ + float EDAODR; /**< in Hz. ODR decides the period of WakeupTimer who will trigger sequencer periodically. DFT number and sample frequency decides the maxim ODR. */ + int32_t NumOfData; /**< By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + uint32_t VoltCalPoints; /**< Use how many points to calculate average excitation voltage */ + float RcalVal; /**< Rcal value in Ohm */ + float SinFreq; /**< Frequency of excitation signal */ + float SampleFreq; /**< Sample Frequency in Hz. Clock source is 32kHz.*/ + float SinAmplitude; /**< Signal in amplitude in mV unit. Range: 0Vp to 1100mVp (0Vpp to 2.2Vpp) */ + uint32_t DacUpdateRate; /**< DAC update rate is SystemCLock/Divider. The available value is 7 to 255. */ + uint32_t LptiaRtiaSel; /**< Use internal RTIA, Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + + uint32_t DftNum; /**< DFT number */ + BoolFlag HanWinEn; /**< Enable Hanning window */ + + BoolFlag RtiaAutoScaleEnable; /**< Automatically change RTIA value according to measurement results. 0: Set RTIA with RTIA_SEL. 1: Automatically choose RTIA in software */ + uint32_t RtiaAutoScaleMax; /**< Limit the maximum RTIA value that auto scale function can use. Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + uint32_t RtiaAutoScaleMin; /**< Limit the minimum RTIA value that auto scale function can use. Select from LPTIARTIA_OPEN, LPTIARTIA_200R, ... , LPTIARTIA_512K */ + +/* Private variables for internal usage */ + fImpCar_Type RtiaCurrValue; /**< Calibrated Rtia value of current frequency */ + fImpCar_Type RtiaCalTable[LPTIARTIA_512K+1]; /**< Calibrated Rtia Value table */ + fImpCar_Type ImpEDABase; /**< Impedance of EDA base line */ + fImpCar_Type ImpSum; /**< Sum of all measured results. Used to calculate base line of EDA */ + uint32_t ImpSumCount; /**< Count of data added to 'ImpSum' */ + uint32_t RtiaIndexCurr; /**< Index value 0 to 26 means Open, 200Ohm, to 512kOhm */ + uint32_t RtiaIndexNext; + BoolFlag bChangeRtia; /**< Auto scaling method says we need to change RTIA */ + + SeqPatchInfo_Type SeqPatchInfo; /**< The sequence patch for different RTIA and both voltage/current measurement */ + fImpCar_Type ExcitVolt; /**< Measured excitation voltage result */ + BoolFlag bDataIsVolt; /**< Current DFT result is voltage */ + BoolFlag bMeasVoltReq; /**< User says we need to measure voltage */ + + BoolFlag EDAInited; /**< If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /**< After FIFO is ready, stop the measurement sequence */ + BoolFlag bRunning; /**< status of if EDA is running. Useful when send STOP_SYNC to detect if it's actually stopped. */ + uint32_t FifoDataCount; /**< Count how many times impedance have been measured */ + + enum __EDAState{ + EDASTATE_INIT = 0, /**< Initializing */ + EDASTATE_RTIACAL, /**< Internal RTIA resistor calibrating. */ + EDASTATE_VOLT, /**< Measuring excitation voltage */ + EDASTATE_CURR, /**< Measuring respond current */ + }EDAStateCurr, EDAStateNext; /**< When interrupt happens, the state is EDACurrState. At the end of interrupt function, go to EDANextState */ +/* End */ +}AppEDACfg_Type; + +/* Common application control message */ +#define APPCTRL_START 0 /**< Start the measurement by starting Wakeup Timer */ +#define APPCTRL_STOPNOW 1 /**< Stop immediately by stop Wakeup Timer*/ +#define APPCTRL_STOPSYNC 2 /**< Stop the measurement when interrupt occurred */ +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ +#define APPCTRL_RUNNING 4 /**< Is application running? */ + +#define EDACTRL_MEASVOLT 100 /**< Measure Excitation voltage now */ +#define EDACTRL_GETRTIAMAG 101 /**< Get the rtia magnitude for current measured data */ + +#define EDACTRL_RSTBASE 102 /**< Reset base line of EDA result. */ +#define EDACTRL_SETBASE 103 /**< Set base line of EDA result */ +#define EDACTRL_GETAVR 104 /**< Get average value of all measured impedance */ +#define EDACTRL_STATUS 105 /**< Get if EDA is running. */ + +/* Error message */ +#define EDAERR_ERROR AD5940ERR_APPERROR /**< General error */ +#define EDAERR_VOLTMEASURE AD5940ERR_APPERROR-1 /**< Excitation voltage measurement error. Points not match */ + +AD5940Err AppEDAGetCfg(void *pCfg); +AD5940Err AppEDAInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppEDAISR(void *pBuff, uint32_t *pCount); +AD5940Err AppEDACtrl(int32_t EDACtrl, void *pPara); + +#endif diff --git a/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvoptx b/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvoptx new file mode 100644 index 0000000..de19425 --- /dev/null +++ b/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvoptx @@ -0,0 +1,345 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\ElectrodermalActivity.c + ElectrodermalActivity.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\UARTCmd.c + UARTCmd.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvprojx b/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvprojx new file mode 100644 index 0000000..4fc2881 --- /dev/null +++ b/examples/AD5940_EDA/NUCLEO-F411/AD5940_EDA.uvprojx @@ -0,0 +1,594 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + ElectrodermalActivity.c + 1 + ..\ElectrodermalActivity.c + + + UARTCmd.c + 1 + ..\UARTCmd.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_EDA/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_EDA/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_EDA/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_EDA/NUCLEO-F411/main.c b/examples/AD5940_EDA/NUCLEO-F411/main.c new file mode 100644 index 0000000..07ae303 --- /dev/null +++ b/examples/AD5940_EDA/NUCLEO-F411/main.c @@ -0,0 +1,124 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + return 1; +} + +void USART2_IRQHandler(void) +{ + void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + UARTCmd_Process(c); + } +} + + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + diff --git a/examples/AD5940_EDA/UARTCmd.c b/examples/AD5940_EDA/UARTCmd.c new file mode 100644 index 0000000..3e5add8 --- /dev/null +++ b/examples/AD5940_EDA/UARTCmd.c @@ -0,0 +1,198 @@ +/*! + ***************************************************************************** + @file: UARTCmd.c + @author: $Author: nxu2 $ + @brief: UART Command process + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "stdint.h" +#include "string.h" +#include "stdio.h" +#include + +#define LINEBUFF_SIZE 128 +#define CMDTABLE_SIZE 8 + +uint32_t help(uint32_t para1, uint32_t para2); +uint32_t say_hello(uint32_t para1, uint32_t para2); +uint32_t rst_eda_base(uint32_t para1, uint32_t para2); +uint32_t set_eda_base(uint32_t para1, uint32_t para2); +uint32_t get_average_imp(uint32_t para1, uint32_t para2); +uint32_t eda_start(uint32_t para1, uint32_t para2); +uint32_t eda_stop(uint32_t para1, uint32_t para2); + +struct __uartcmd_table +{ + void *pObj; + const char *cmd_name; + const char *pDesc; +}uart_cmd_table[CMDTABLE_SIZE]= +{ + {(void*)help, "help", "print supported commands"}, + {(void*)help, "?", "print supported commands"}, + {(void*)say_hello, "hello", "print parameteres and say hello"}, + {(void*)eda_start, "edastart", "Start EDA measurement"}, + {(void*)eda_stop, "edastop", "Stop EDA measurement immediately"}, + {(void*)rst_eda_base, "rstbase", "Reset EDA baseline impedance"}, + {(void*)set_eda_base, "setbase", "Set EDA impedance baseline with current averaged impedance result"}, + {(void*)get_average_imp, "getavr", "get average impedance of all result"}, +}; + + +uint32_t help(uint32_t para1, uint32_t para2) +{ + int i = 0; + printf("*****help menu*****\nbelow are supported commands:\n"); + for(;i= LINEBUFF_SIZE-1) + line_buffer_index = 0; /* Error: buffer overflow */ + if( (c == '\r') || (c == '\n')) + { + uint32_t res; + line_buffer[line_buffer_index] = '\0'; + /* Start to process command */ + if(line_buffer_index == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* No command inputs, return */ + } + /* Step1, remove space */ + UARTCmd_RemoveSpaces(); + if(token_count == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* No valid input */ + } + /* Step2, match commands */ + UARTCmd_MatchCommand(); + if(pObjFound == 0) + { + line_buffer_index = 0; /* Reset buffer */ + return; /* Command not support */ + } + if(token_count > 1) /* There is parameters */ + { + UARTCmd_TranslateParas(); + } + /* Step3, call function */ + res = ((uint32_t (*)(uint32_t, uint32_t))(pObjFound))(parameter1, parameter2); + printf("res:0x%08x\n", res); + line_buffer_index = 0; /* Reset buffer */ + } + else + { + line_buffer[line_buffer_index++] = c; + } +} diff --git a/examples/AD5940_HSDACCal/AD5940_HSDACCal.c b/examples/AD5940_HSDACCal/AD5940_HSDACCal.c new file mode 100644 index 0000000..130bd7a --- /dev/null +++ b/examples/AD5940_HSDACCal/AD5940_HSDACCal.c @@ -0,0 +1,95 @@ +/*! +***************************************************************************** +@file: AD5940_HSDACCal.c +@author: $Author: nxu2 $ +@brief: HSDAC Offset Calibration Demo calibration demo. +@version: $Revision: 766 $ +@date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ +----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include "ad5940.h" +#include +#include "string.h" + +/* The HSDAC has a number of different gain settings shown in table below. +The HSDAC needs to be calibrated seperately for each gain setting. HSDAC has two powe +modes. There are seperate offset registers for both, DACOFFSET and DACOFFSETHP. The +HSDAC needs to be calibrated for each mode. + +HSDACCON[12] | HSDACCON[0] | Output Range | +0 | 0 | +-607mV | +1 | 0 | +-75mV | +1 | 1 | +-15.14mV | +0 | 1 | +-121.2mV | + +*/ +void AD5940_Main(void){ + HSDACCal_Type hsdac_cal; + ADCPGACal_Type adcpga_cal; + CLKCfg_Type clk_cfg; + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bTRUE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + + + printf("ADC Offset Cal\n"); + adcpga_cal.AdcClkFreq=16000000; + adcpga_cal.ADCPga = ADCPGA_1; + adcpga_cal.ADCSinc2Osr = ADCSINC2OSR_1333; + adcpga_cal.ADCSinc3Osr = ADCSINC3OSR_4; + adcpga_cal.PGACalType = PGACALTYPE_OFFSET; + adcpga_cal.TimeOut10us = 1000; + adcpga_cal.VRef1p11 = 1.11; + adcpga_cal.VRef1p82 = 1.82; + AD5940_ADCPGACal(&adcpga_cal); + + printf("\n 607mV Range Cal\n"); + hsdac_cal.ExcitBufGain = EXCITBUFGAIN_2; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + hsdac_cal.HsDacGain = HSDACGAIN_1; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + hsdac_cal.AfePwrMode = AFEPWR_LP; + hsdac_cal.ADCSinc2Osr = ADCSINC2OSR_1333; + hsdac_cal.ADCSinc3Osr = ADCSINC3OSR_4; + AD5940_HSDACCal(&hsdac_cal); + + printf("\nADC GN 4 Offset Cal\n"); + adcpga_cal.ADCPga = ADCPGA_4; + AD5940_ADCPGACal(&adcpga_cal); + + printf("\n 125mV Range Cal\n"); + hsdac_cal.ExcitBufGain = EXCITBUFGAIN_2; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + hsdac_cal.HsDacGain = HSDACGAIN_0P2; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + AD5940_HSDACCal(&hsdac_cal); + + printf("\n 75mV Range Cal\n"); + hsdac_cal.ExcitBufGain = EXCITBUFGAIN_0P25; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + hsdac_cal.HsDacGain = HSDACGAIN_1; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + AD5940_HSDACCal(&hsdac_cal); + + printf("\n 15mV Range Cal\n"); + hsdac_cal.ExcitBufGain = EXCITBUFGAIN_0P25; /**< Select from EXCITBUFGAIN_2, EXCITBUFGAIN_0P25 */ + hsdac_cal.HsDacGain = HSDACGAIN_0P2; /**< Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + AD5940_HSDACCal(&hsdac_cal); + + printf("HSDAC Cal Complete!\n"); +} + diff --git a/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewd b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewp b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewp new file mode 100644 index 0000000..89e28c5 --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_HSDACCal.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.rteconfig b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvoptx b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvoptx new file mode 100644 index 0000000..9333caf --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvoptx @@ -0,0 +1,289 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"DAPLink CMSIS-DAP" -U0600000032624e45004a2015b1750046 -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + ADCCode + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_HSDACCal.c + AD5940_HSDACCal.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvprojx b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvprojx new file mode 100644 index 0000000..100a55a --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/AD5940_HSDACCal.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_HSDACCal.c + 1 + ..\AD5940_HSDACCal.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_HSDACCal/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_HSDACCal/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_HSDACCal/ADICUP3029/main.c b/examples/AD5940_HSDACCal/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_HSDACCal/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvoptx b/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvoptx new file mode 100644 index 0000000..510786a --- /dev/null +++ b/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 0 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_HSDACCal.c + AD5940_HSDACCal.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvprojx b/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvprojx new file mode 100644 index 0000000..d8fda2e --- /dev/null +++ b/examples/AD5940_HSDACCal/NUCLEO-F411/AD5940_HSDACCal.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_HSDACCal.c + 1 + ..\AD5940_HSDACCal.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_HSDACCal/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_HSDACCal/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_HSDACCal/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_HSDACCal/NUCLEO-F411/main.c b/examples/AD5940_HSDACCal/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_HSDACCal/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Impedance/AD5940Main.c b/examples/AD5940_Impedance/AD5940Main.c new file mode 100644 index 0000000..f94be43 --- /dev/null +++ b/examples/AD5940_Impedance/AD5940Main.c @@ -0,0 +1,142 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Standard 4-wire or 2-wire impedance measurement example. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "Impedance.h" + +/** + User could configure following parameters +**/ + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +int32_t ImpedanceShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpPol_Type *pImp = (fImpPol_Type*)pData; + AppIMPCtrl(IMPCTRL_GETFREQ, &freq); + + printf("Freq:%.2f ", freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pImpedanceCfg->MaxSeqLen = 512; /* @todo add checker in function */ + + pImpedanceCfg->RcalVal = 10000.0; + pImpedanceCfg->SinFreq = 60000.0; + pImpedanceCfg->FifoThresh = 4; + + /* Set switch matrix to onboard(EVAL-AD5940ELECZ) dummy sensor. */ + /* Note the RCAL0 resistor is 10kOhm. */ + pImpedanceCfg->DswitchSel = SWD_CE0; + pImpedanceCfg->PswitchSel = SWP_RE0; + pImpedanceCfg->NswitchSel = SWN_SE0; + pImpedanceCfg->TswitchSel = SWT_SE0LOAD; + /* The dummy sensor is as low as 5kOhm. We need to make sure RTIA is small enough that HSTIA won't be saturated. */ + pImpedanceCfg->HstiaRtiaSel = HSTIARTIA_5K; + + /* Configure the sweep function. */ + pImpedanceCfg->SweepCfg.SweepEn = bTRUE; + pImpedanceCfg->SweepCfg.SweepStart = 100.0f; /* Start from 1kHz */ + pImpedanceCfg->SweepCfg.SweepStop = 100e3f; /* Stop at 100kHz */ + pImpedanceCfg->SweepCfg.SweepPoints = 101; /* Points is 101 */ + pImpedanceCfg->SweepCfg.SweepLog = bTRUE; + /* Configure Power Mode. Use HP mode if frequency is higher than 80kHz. */ + pImpedanceCfg->PwrMod = AFEPWR_HP; + /* Configure filters if necessary */ + pImpedanceCfg->ADCSinc3Osr = ADCSINC3OSR_2; /* Sample rate is 800kSPS/2 = 400kSPS */ + pImpedanceCfg->DftNum = DFTNUM_16384; + pImpedanceCfg->DftSrc = DFTSRC_SINC3; +} + +void AD5940_Main(void) +{ + uint32_t temp; + AD5940PlatformCfg(); + AD5940ImpedanceStructInit(); + + AppIMPInit(AppBuff, APPBUFF_SIZE); /* Initialize IMP application. Provide a buffer, which is used to store sequencer commands */ + AppIMPCtrl(IMPCTRL_START, 0); /* Control IMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + temp = APPBUFF_SIZE; + AppIMPISR(AppBuff, &temp); + ImpedanceShowResult(AppBuff, temp); + } + } +} + diff --git a/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewd b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewp b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewp new file mode 100644 index 0000000..dc0edc4 --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\Impedance.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.rteconfig b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvoptx b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvoptx new file mode 100644 index 0000000..697650c --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvprojx b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvprojx new file mode 100644 index 0000000..111d301 --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/AD5940_Impedance.uvprojx @@ -0,0 +1,505 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::..\..\Program Files (x86)\ARM_Compiler_5.06u7 + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.1 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Impedance/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Impedance/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Impedance/ADICUP3029/main.c b/examples/AD5940_Impedance/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Impedance/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Impedance/Impedance.c b/examples/AD5940_Impedance/Impedance.c new file mode 100644 index 0000000..a5cb03b --- /dev/null +++ b/examples/AD5940_Impedance/Impedance.c @@ -0,0 +1,585 @@ +/*! + ***************************************************************************** + @file: Impedance.c + @author: Neo Xu + @brief: standard 4-wire or 2-wire impedance measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "Impedance.h" + +/* Default LPDAC resolution(2.5V internal reference). */ +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppIMPCfg_Type AppIMPCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ImpODR = 20.0, /* 20.0 Hz*/ + .NumOfData = -1, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .RcalVal = 10000.0, + + .DswitchSel = SWD_CE0, + .PswitchSel = SWP_CE0, + .NswitchSel = SWN_AIN1, + .TswitchSel = SWT_AIN1, + + .PwrMod = AFEPWR_HP, + + .HstiaRtiaSel = HSTIARTIA_5K, + .ExcitBufGain = EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 800.0, + .BiasVolt = -0.0f, + + .SinFreq = 100000.0, /* 1000Hz */ + + .DftNum = DFTNUM_16384, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .ADCAvgNum = ADCAVGNUM_16, + + .SweepCfg.SweepEn = bTRUE, + .SweepCfg.SweepStart = 1000, + .SweepCfg.SweepStop = 100000.0, + .SweepCfg.SweepPoints = 101, + .SweepCfg.SweepLog = bFALSE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, + .IMPInited = bFALSE, + .StopRequired = bFALSE, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +int32_t AppIMPGetCfg(void *pCfg) +{ + if(pCfg) + { + *(AppIMPCfg_Type**)pCfg = &AppIMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +int32_t AppIMPCtrl(uint32_t Command, void *pPara) +{ + + switch (Command) + { + case IMPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppIMPCfg.IMPInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppIMPCfg.WuptClkFreq/AppIMPCfg.ImpODR)-4; + AD5940_WUPTCfg(&wupt_cfg); + + AppIMPCfg.FifoDataCount = 0; /* restart */ + break; + } + case IMPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case IMPCTRL_STOPSYNC: + { + AppIMPCfg.StopRequired = bTRUE; + break; + } + case IMPCTRL_GETFREQ: + { + if(pPara == 0) + return AD5940ERR_PARA; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppIMPCfg.FreqofData; + else + *(float*)pPara = AppIMPCfg.SinFreq; + } + break; + case IMPCTRL_SHUTDOWN: + { + AppIMPCtrl(IMPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* generated code snnipet */ +float AppIMPGetCurrFreq(void) +{ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + return AppIMPCfg.FreqofData; + else + return AppIMPCfg.SinFreq; +} + +/* Application initialization */ +static AD5940Err AppIMPSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HsLoopCfg; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + { + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + } + else + { + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + } + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + HsLoopCfg.HsDacCfg.ExcitBufGain = AppIMPCfg.ExcitBufGain; + HsLoopCfg.HsDacCfg.HsDacGain = AppIMPCfg.HsDacGain; + HsLoopCfg.HsDacCfg.HsDacUpdateRate = AppIMPCfg.HsDacUpdateRate; + + HsLoopCfg.HsTiaCfg.DiodeClose = bFALSE; + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_VZERO0; + else + HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HsLoopCfg.HsTiaCfg.HstiaCtia = 31; /* 31pF + 2pF */ + HsLoopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HsLoopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + HsLoopCfg.HsTiaCfg.HstiaRtiaSel = AppIMPCfg.HstiaRtiaSel; + + HsLoopCfg.SWMatCfg.Dswitch = AppIMPCfg.DswitchSel; + HsLoopCfg.SWMatCfg.Pswitch = AppIMPCfg.PswitchSel; + HsLoopCfg.SWMatCfg.Nswitch = AppIMPCfg.NswitchSel; + HsLoopCfg.SWMatCfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + + HsLoopCfg.WgCfg.WgType = WGTYPE_SIN; + HsLoopCfg.WgCfg.GainCalEn = bTRUE; + HsLoopCfg.WgCfg.OffsetCalEn = bTRUE; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCfg.SweepStart; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + sin_freq = AppIMPCfg.SweepCurrFreq; + } + else + { + sin_freq = AppIMPCfg.SinFreq; + AppIMPCfg.FreqofData = sin_freq; + } + HsLoopCfg.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppIMPCfg.SysClkFreq); + HsLoopCfg.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppIMPCfg.DacVoltPP/800.0f*2047 + 0.5f); + HsLoopCfg.WgCfg.SinCfg.SinOffsetWord = 0; + HsLoopCfg.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&HsLoopCfg); + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + { + LPDACCfg_Type lpdac_cfg; + + lpdac_cfg.LpdacSel = LPDAC0; + lpdac_cfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Use Vbias to tuning BiasVolt. */ + lpdac_cfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Vbias-Vzero = BiasVolt */ + lpdac_cfg.DacData6Bit = 0x40>>1; /* Set Vzero to middle scale. */ + if(AppIMPCfg.BiasVolt<-1100.0f) AppIMPCfg.BiasVolt = -1100.0f + DAC12BITVOLT_1LSB; + if(AppIMPCfg.BiasVolt> 1100.0f) AppIMPCfg.BiasVolt = 1100.0f - DAC12BITVOLT_1LSB; + lpdac_cfg.DacData12Bit = (uint32_t)((AppIMPCfg.BiasVolt + 1100.0f)/DAC12BITVOLT_1LSB); + lpdac_cfg.DataRst = bFALSE; /* Do not reset data register */ + lpdac_cfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN|LPDACSW_VZERO2HSTIA; + lpdac_cfg.LpDacRef = LPDACREF_2P5; + lpdac_cfg.LpDacSrc = LPDACSRC_MMR; /* Use MMR data, we use LPDAC to generate bias voltage for LPTIA - the Vzero */ + lpdac_cfg.PowerEn = bTRUE; /* Power up LPDAC */ + AD5940_LPDACCfgS(&lpdac_cfg); + } + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppIMPCfg.AdcPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = AppIMPCfg.ADCAvgNum; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppIMPCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppIMPCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppIMPCfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + if(AppIMPCfg.BiasVolt == 0.0f) + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + else + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH|AFECTRL_DCBUFPWR, bTRUE); + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppIMPCfg.InitSeqInfo.SeqId = SEQID_1; + AppIMPCfg.InitSeqInfo.SeqRamAddr = AppIMPCfg.SeqStartAddr; + AppIMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + + +static AD5940Err AppIMPSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppIMPCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppIMPCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = AppIMPCfg.ADCAvgNum; + clks_cal.RatioSys2AdcClk = AppIMPCfg.SysClkFreq/AppIMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); /* Set GPIO1, clear others that under control */ + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* @todo wait 250us? */ + sw_cfg.Dswitch = SWD_RCAL0; + sw_cfg.Pswitch = SWP_RCAL0; + sw_cfg.Nswitch = SWN_RCAL1; + sw_cfg.Tswitch = SWT_RCAL1|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator */ + //delay for signal settling DFT_WAIT + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG, bFALSE); /* Stop ADC convert and DFT */ + + /* Configure matrix for external Rz */ + sw_cfg.Dswitch = AppIMPCfg.DswitchSel; + sw_cfg.Pswitch = AppIMPCfg.PswitchSel; + sw_cfg.Nswitch = AppIMPCfg.NswitchSel; + sw_cfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + AD5940_SWMatrixCfgS(&sw_cfg); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_WG, bTRUE); /* Enable Waveform generator */ + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bFALSE); + AD5940_SEQGpioCtrlS(0); /* Clr GPIO1 */ + + AD5940_EnterSleepS();/* Goto hibernate */ + + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppIMPCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppIMPCfg.MeasureSeqInfo.SeqRamAddr = AppIMPCfg.InitSeqInfo.SeqRamAddr + AppIMPCfg.InitSeqInfo.SeqLen ; + AppIMPCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + + +/* This function provide application initialize. It can also enable Wupt that will automatically trigger sequence. Or it can configure */ +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bTRUE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppIMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppIMPCfg.IMPInited == bFALSE)||\ + (AppIMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppIMPSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppIMPSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppIMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppIMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppIMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + + /* Measurement sequence */ + AppIMPCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.MeasureSeqInfo); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AppIMPCfg.PwrMod, AFEBW_250KHZ); + + AppIMPCfg.IMPInited = bTRUE; /* IMP application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +int32_t AppIMPRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppIMPCfg.NumOfData > 0) + { + AppIMPCfg.FifoDataCount += *pDataCount/4; + if(AppIMPCfg.FifoDataCount >= AppIMPCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppIMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppIMPCfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppIMPCfg.SweepNextFreq, AppIMPCfg.SysClkFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +int32_t AppIMPDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/4; + + fImpPol_Type * const pOut = (fImpPol_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/4)*4;/* We expect RCAL data together with Rz data. One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal*pDftRcal->Real+(float)pDftRcal->Image*pDftRcal->Image); + RcalPhase = atan2(-pDftRcal->Image,pDftRcal->Real); + RzMag = sqrt((float)pDftRz->Real*pDftRz->Real+(float)pDftRz->Image*pDftRz->Image); + RzPhase = atan2(-pDftRz->Image,pDftRz->Real); + + RzMag = RcalMag/RzMag*AppIMPCfg.RcalVal; + RzPhase = RcalPhase - RzPhase; + //printf("V:%d,%d,I:%d,%d ",pDftRcal->Real,pDftRcal->Image, pDftRz->Real, pDftRz->Image); + + pOut[i].Magnitude = RzMag; + pOut[i].Phase = RzPhase; + } + *pDataCount = ImpResCount; + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + /* Calculate next frequency point */ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepNextFreq; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + } + + return 0; +} + +/** + +*/ +int32_t AppIMPISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + + *pCount = 0; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Prohibit AFE to enter sleep mode. */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppIMPRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. */ + /* Process data */ + AppIMPDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + + diff --git a/examples/AD5940_Impedance/Impedance.h b/examples/AD5940_Impedance/Impedance.h new file mode 100644 index 0000000..dc3c157 --- /dev/null +++ b/examples/AD5940_Impedance/Impedance.h @@ -0,0 +1,84 @@ +/*! + ***************************************************************************** + @file: Impedance.h + @author: Neo XU + @brief: 4-wire/2-wire impedance measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _IMPEDANCESEQUENCES_H_ +#define _IMPEDANCESEQUENCES_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; +/* Application related parameters */ + float ImpODR; /* */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /* The real frequency of system clock */ + float AdcClkFreq; /* The real frequency of ADC clock */ + float RcalVal; /* Rcal value in Ohm */ + /* Switch Configuration */ + uint32_t DswitchSel; + uint32_t PswitchSel; + uint32_t NswitchSel; + uint32_t TswitchSel; + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t ExcitBufGain; /* Select from EXCTBUFGAIN_2, EXCTBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; + float DacVoltPP; /* DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + float BiasVolt; /* The excitation signal is DC+AC. This parameter decides the DC value in mV unit. 0.0mV means no DC bias.*/ + float SinFreq; /* Frequency of excitation signal */ + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + uint32_t AdcPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; + uint8_t ADCSinc2Osr; + uint8_t ADCAvgNum; + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ +/* Private variables for internal usage */ +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag IMPInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +}AppIMPCfg_Type; + +#define IMPCTRL_START 0 +#define IMPCTRL_STOPNOW 1 +#define IMPCTRL_STOPSYNC 2 +#define IMPCTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define IMPCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + + +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize); +int32_t AppIMPGetCfg(void *pCfg); +int32_t AppIMPISR(void *pBuff, uint32_t *pCount); +int32_t AppIMPCtrl(uint32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvoptx b/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvoptx new file mode 100644 index 0000000..615740d --- /dev/null +++ b/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvprojx b/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvprojx new file mode 100644 index 0000000..3e428dc --- /dev/null +++ b/examples/AD5940_Impedance/NUCLEO-F411/AD5940_Impedance.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Impedance/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Impedance/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Impedance/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Impedance/NUCLEO-F411/main.c b/examples/AD5940_Impedance/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Impedance/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/AD5940Main.c b/examples/AD5940_Impedance_Adjustable_with_frequency/AD5940Main.c new file mode 100644 index 0000000..fa9680e --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/AD5940Main.c @@ -0,0 +1,142 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Standard 4-wire or 2-wire impedance measurement example. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "Impedance.h" + +/** + User could configure following parameters +**/ + +#define APPBUFF_SIZE 512 +uint32_t AppBuff[APPBUFF_SIZE]; + +int32_t ImpedanceShowResult(uint32_t *pData, uint32_t DataCount) +{ + float freq; + + fImpPol_Type *pImp = (fImpPol_Type*)pData; + AppIMPCtrl(IMPCTRL_GETFREQ, &freq); + + printf("Freq:%.2f ", freq); + /*Process data*/ + for(int i=0;iSeqStartAddr = 0; + pImpedanceCfg->MaxSeqLen = 512; /* @todo add checker in function */ + + pImpedanceCfg->RcalVal = 10000.0; + pImpedanceCfg->SinFreq = 60000.0; + pImpedanceCfg->FifoThresh = 4; + + /* Set switch matrix to onboard(EVAL-AD5940ELECZ) dummy sensor. */ + /* Note the RCAL0 resistor is 10kOhm. */ + pImpedanceCfg->DswitchSel = SWD_CE0; + pImpedanceCfg->PswitchSel = SWP_RE0; + pImpedanceCfg->NswitchSel = SWN_SE0; + pImpedanceCfg->TswitchSel = SWT_SE0LOAD; + /* The dummy sensor is as low as 5kOhm. We need to make sure RTIA is small enough that HSTIA won't be saturated. */ + pImpedanceCfg->HstiaRtiaSel = HSTIARTIA_5K; + + /* Configure the sweep function. */ + pImpedanceCfg->SweepCfg.SweepEn = bTRUE; + pImpedanceCfg->SweepCfg.SweepStart = 1.0f; /* Start from 1kHz */ + pImpedanceCfg->SweepCfg.SweepStop = 200e3f; /* Stop at 100kHz */ + pImpedanceCfg->SweepCfg.SweepPoints = 101; /* Points is 101 */ + pImpedanceCfg->SweepCfg.SweepLog = bTRUE; + /* Configure Power Mode. Use HP mode if frequency is higher than 80kHz. */ + pImpedanceCfg->PwrMod = AFEPWR_LP; + /* Configure filters if necessary */ + pImpedanceCfg->ADCSinc3Osr = ADCSINC3OSR_2; /* Sample rate is 800kSPS/2 = 400kSPS */ + pImpedanceCfg->DftNum = DFTNUM_16384; + pImpedanceCfg->DftSrc = DFTSRC_SINC3; +} + +void AD5940_Main(void) +{ + uint32_t temp; + AD5940PlatformCfg(); + AD5940ImpedanceStructInit(); + + AppIMPInit(AppBuff, APPBUFF_SIZE); /* Initialize IMP application. Provide a buffer, which is used to store sequencer commands */ + AppIMPCtrl(IMPCTRL_START, 0); /* Control IMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + temp = APPBUFF_SIZE; + AppIMPISR(AppBuff, &temp); + ImpedanceShowResult(AppBuff, temp); + } + } +} + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/.project b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/.project new file mode 100644 index 0000000..4a97130 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/.project @@ -0,0 +1,11 @@ + + + AD5940_Impedance_Adjustable_with_frequency + + + + + + + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.rteconfig b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.rteconfig new file mode 100644 index 0000000..e223854 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.rteconfig @@ -0,0 +1,62 @@ + + + + + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvoptx b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvoptx new file mode 100644 index 0000000..697650c --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvoptx @@ -0,0 +1,294 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvprojx b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvprojx new file mode 100644 index 0000000..111d301 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance.uvprojx @@ -0,0 +1,505 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::..\..\Program Files (x86)\ARM_Compiler_5.06u7 + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.1 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X, ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewd b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewd new file mode 100644 index 0000000..adcdcbc --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewd @@ -0,0 +1,3226 @@ + + + 4 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 33 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 33 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewp b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewp new file mode 100644 index 0000000..23df817 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.ewp @@ -0,0 +1,2266 @@ + + + 4 + + Debug + + ARM + + 1 + + General + 3 + + 36 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BUILDACTION + 2 + + + + + Release + + ARM + + 0 + + General + 3 + + 36 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BUILDACTION + 2 + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\..\Impedance.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.1"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.6.0"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + <file category="header" condition="TrustZone" name="CMSIS/Core/Include/tz_context.h"/> + <file attr="template" category="sourceC" condition="TZ Secure" name="CMSIS/Core/Template/ARMv8-M/main_s.c" select="Secure mode 'main' module for ARMv8-M" version="1.1.1"/> + <file attr="template" category="sourceC" condition="TZ Secure" name="CMSIS/Core/Template/ARMv8-M/tz_context.c" select="RTOS Context Management (TrustZone for ARMv8-M)" version="1.1.1"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.1"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.1"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.rteconfig b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/AD5940_Impedance_Adjustable_with_frequency.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/main.c b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.c b/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.c new file mode 100644 index 0000000..0a0ad3c --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.c @@ -0,0 +1,740 @@ +/*! + ***************************************************************************** + @file: Impedance.c + @author: Neo Xu + @brief: standard 4-wire or 2-wire impedance measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*******************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "Impedance.h" + +/* Default LPDAC resolution(2.5V internal reference). */ +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV + +/* + Application configuration structure. Specified by user from template. + The variables are usable in this whole application. + It includes basic configuration for sequencer generator and application related parameters +*/ +AppIMPCfg_Type AppIMPCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .ImpODR = 0.0001, /* 20.0 Hz*/ + .NumOfData = -1, + .SysClkFreq = 16000000.0, + .WuptClkFreq = 32000.0, + .AdcClkFreq = 16000000.0, + .RcalVal = 10000.0, + + .DswitchSel = SWD_CE0, + .PswitchSel = SWP_CE0, + .NswitchSel = SWN_AIN1, + .TswitchSel = SWT_AIN1, + + .PwrMod = AFEPWR_HP, + + .HstiaRtiaSel = HSTIARTIA_5K, + .ExtRtia = 0, //set only when HstiaRtiaSel = HSTIARTIA_OPEN + .ExcitBufGain = EXCITBUFGAIN_0P25,//EXCITBUFGAIN_2, + .HsDacGain = HSDACGAIN_0P2,//HSDACGAIN_1, + .HsDacUpdateRate = 7, + .DacVoltPP = 800.0, + .BiasVolt = -0.0f, + + .SinFreq = 100000.0, /* 1000Hz */ + + .DftNum = DFTNUM_16384, + .DftSrc = DFTSRC_SINC3, + .HanWinEn = bTRUE, + + .AdcPgaGain = ADCPGA_4,//ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .ADCSinc2Osr = ADCSINC2OSR_22, + + .ADCAvgNum = ADCAVGNUM_16, + + .SweepCfg.SweepEn = bTRUE, + .SweepCfg.SweepStart = 1000, + .SweepCfg.SweepStop = 100000.0, + .SweepCfg.SweepPoints = 101, + .SweepCfg.SweepLog = bFALSE, + .SweepCfg.SweepIndex = 0, + + .FifoThresh = 4, + .IMPInited = bFALSE, + .StopRequired = bFALSE, +}; + +/** + This function is provided for upper controllers that want to change + application parameters specially for user defined parameters. +*/ +int32_t AppIMPGetCfg(void *pCfg) +{ + if(pCfg) + { + *(AppIMPCfg_Type**)pCfg = &AppIMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +int32_t AppIMPCtrl(uint32_t Command, void *pPara) +{ + + switch (Command) + { + case IMPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppIMPCfg.IMPInited == bFALSE) + return AD5940ERR_APPERROR; + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppIMPCfg.WuptClkFreq/AppIMPCfg.ImpODR)-4; + AD5940_WUPTCfg(&wupt_cfg); + + AppIMPCfg.FifoDataCount = 0; /* restart */ + break; + } + case IMPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case IMPCTRL_STOPSYNC: + { + AppIMPCfg.StopRequired = bTRUE; + break; + } + case IMPCTRL_GETFREQ: + { + if(pPara == 0) + return AD5940ERR_PARA; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + *(float*)pPara = AppIMPCfg.FreqofData; + else + *(float*)pPara = AppIMPCfg.SinFreq; + } + break; + case IMPCTRL_SHUTDOWN: + { + AppIMPCtrl(IMPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + /* Turn off LPloop related blocks which are not controlled automatically by hibernate operation */ + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lp_loop; + memset(&aferef_cfg, 0, sizeof(aferef_cfg)); + AD5940_REFCfgS(&aferef_cfg); + memset(&lp_loop, 0, sizeof(lp_loop)); + AD5940_LPLoopCfgS(&lp_loop); + AD5940_EnterSleepS(); /* Enter Hibernate */ + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/* generated code snnipet */ +float AppIMPGetCurrFreq(void) +{ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + return AppIMPCfg.FreqofData; + else + return AppIMPCfg.SinFreq; +} + +/* Application initialization */ +static AD5940Err AppIMPSeqCfgGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HsLoopCfg; + DSPCfg_Type dsp_cfg; + float sin_freq; + + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + { + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + } + else + { + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + } + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + HsLoopCfg.HsDacCfg.ExcitBufGain = AppIMPCfg.ExcitBufGain; + HsLoopCfg.HsDacCfg.HsDacGain = AppIMPCfg.HsDacGain; + HsLoopCfg.HsDacCfg.HsDacUpdateRate = AppIMPCfg.HsDacUpdateRate; + + HsLoopCfg.HsTiaCfg.DiodeClose = bFALSE; + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_VZERO0; + else + HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HsLoopCfg.HsTiaCfg.HstiaCtia = 31; /* 31pF + 2pF */ + HsLoopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HsLoopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_OPEN; + HsLoopCfg.HsTiaCfg.HstiaRtiaSel = AppIMPCfg.HstiaRtiaSel; + + HsLoopCfg.SWMatCfg.Dswitch = AppIMPCfg.DswitchSel; + HsLoopCfg.SWMatCfg.Pswitch = AppIMPCfg.PswitchSel; + HsLoopCfg.SWMatCfg.Nswitch = AppIMPCfg.NswitchSel; + HsLoopCfg.SWMatCfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + + HsLoopCfg.WgCfg.WgType = WGTYPE_SIN; + HsLoopCfg.WgCfg.GainCalEn = bTRUE; + HsLoopCfg.WgCfg.OffsetCalEn = bTRUE; + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCfg.SweepStart; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepCfg.SweepStart; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + sin_freq = AppIMPCfg.SweepCurrFreq; + } + else + { + sin_freq = AppIMPCfg.SinFreq; + AppIMPCfg.FreqofData = sin_freq; + } + HsLoopCfg.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(sin_freq, AppIMPCfg.SysClkFreq); + HsLoopCfg.WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(AppIMPCfg.DacVoltPP/800.0f*2047 + 0.5f); + HsLoopCfg.WgCfg.SinCfg.SinOffsetWord = 0; + HsLoopCfg.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&HsLoopCfg); + if(AppIMPCfg.BiasVolt != 0.0f) /* With bias voltage */ + { + LPDACCfg_Type lpdac_cfg; + + lpdac_cfg.LpdacSel = LPDAC0; + lpdac_cfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Use Vbias to tuning BiasVolt. */ + lpdac_cfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Vbias-Vzero = BiasVolt */ + lpdac_cfg.DacData6Bit = 0x40>>1; /* Set Vzero to middle scale. */ + if(AppIMPCfg.BiasVolt<-1100.0f) AppIMPCfg.BiasVolt = -1100.0f + DAC12BITVOLT_1LSB; + if(AppIMPCfg.BiasVolt> 1100.0f) AppIMPCfg.BiasVolt = 1100.0f - DAC12BITVOLT_1LSB; + lpdac_cfg.DacData12Bit = (uint32_t)((AppIMPCfg.BiasVolt + 1100.0f)/DAC12BITVOLT_1LSB); + lpdac_cfg.DataRst = bFALSE; /* Do not reset data register */ + lpdac_cfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN|LPDACSW_VZERO2HSTIA; + lpdac_cfg.LpDacRef = LPDACREF_2P5; + lpdac_cfg.LpDacSrc = LPDACSRC_MMR; /* Use MMR data, we use LPDAC to generate bias voltage for LPTIA - the Vzero */ + lpdac_cfg.PowerEn = bTRUE; /* Power up LPDAC */ + AD5940_LPDACCfgS(&lpdac_cfg); + } + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_HSTIA_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_HSTIA_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppIMPCfg.AdcPgaGain; + + memset(&dsp_cfg.ADCDigCompCfg, 0, sizeof(dsp_cfg.ADCDigCompCfg)); + + dsp_cfg.ADCFilterCfg.ADCAvgNum = AppIMPCfg.ADCAvgNum; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* Tell filter block clock rate of ADC*/ + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.DftCfg.DftNum = AppIMPCfg.DftNum; + dsp_cfg.DftCfg.DftSrc = AppIMPCfg.DftSrc; + dsp_cfg.DftCfg.HanWinEn = AppIMPCfg.HanWinEn; + + memset(&dsp_cfg.StatCfg, 0, sizeof(dsp_cfg.StatCfg)); + AD5940_DSPCfgS(&dsp_cfg); + + /* Enable all of them. They are automatically turned off during hibernate mode to save power */ + if(AppIMPCfg.BiasVolt == 0.0f) + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + else + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH|AFECTRL_DCBUFPWR, bTRUE); + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop here */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + if(error == AD5940ERR_OK) + { + AppIMPCfg.InitSeqInfo.SeqId = SEQID_1; + AppIMPCfg.InitSeqInfo.SeqRamAddr = AppIMPCfg.SeqStartAddr; + AppIMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.InitSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.InitSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + + +static AD5940Err AppIMPSeqMeasureGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + SWMatrixCfg_Type sw_cfg; + ClksCalInfo_Type clks_cal; + + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = AppIMPCfg.DftSrc; + clks_cal.DataCount = 1L<<(AppIMPCfg.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = AppIMPCfg.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = AppIMPCfg.ADCSinc3Osr; + clks_cal.ADCAvgNum = AppIMPCfg.ADCAvgNum; + clks_cal.RatioSys2AdcClk = AppIMPCfg.SysClkFreq/AppIMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); /* Set GPIO1, clear others that under control */ + AD5940_SEQGenInsert(SEQ_WAIT(16*250)); /* @todo wait 250us? */ + sw_cfg.Dswitch = SWD_RCAL0; + sw_cfg.Pswitch = SWP_RCAL0; + sw_cfg.Nswitch = SWN_RCAL1; + sw_cfg.Tswitch = SWT_RCAL1|SWT_TRTIA; + AD5940_SWMatrixCfgS(&sw_cfg); + + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bTRUE); + AD5940_AFECtrlS(AFECTRL_WG|AFECTRL_ADCPWR, bTRUE); /* Enable Waveform generator */ + //delay for signal settling DFT_WAIT + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + + AD5940_SEQGenFetchSeq(NULL, &AppIMPCfg.SeqWaitAddr[0]); /* Record the start address of the next command. */ + + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks/2)); + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks/2)); + + //wait for first data ready + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG, bFALSE); /* Stop ADC convert and DFT */ + + /* Configure matrix for external Rz */ + sw_cfg.Dswitch = AppIMPCfg.DswitchSel; + sw_cfg.Pswitch = AppIMPCfg.PswitchSel; + sw_cfg.Nswitch = AppIMPCfg.NswitchSel; + sw_cfg.Tswitch = SWT_TRTIA|AppIMPCfg.TswitchSel; + AD5940_SWMatrixCfgS(&sw_cfg); + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_WG, bTRUE); /* Enable Waveform generator */ + AD5940_SEQGenInsert(SEQ_WAIT(16*10)); //delay for signal settling DFT_WAIT + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE); /* Start ADC convert and DFT */ + + AD5940_SEQGenFetchSeq(NULL, &AppIMPCfg.SeqWaitAddr[1]); /* Record the start address of next command */ + + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks/2)); + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks/2)); + + AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT|AFECTRL_WG|AFECTRL_ADCPWR, bFALSE); /* Stop ADC convert and DFT */ + AD5940_AFECtrlS(AFECTRL_HSTIAPWR|AFECTRL_INAMPPWR|AFECTRL_EXTBUFPWR|\ + AFECTRL_WG|AFECTRL_DACREFPWR|AFECTRL_HSDACPWR|\ + AFECTRL_SINC2NOTCH, bFALSE); + AD5940_SEQGpioCtrlS(0); /* Clr GPIO1 */ + + AD5940_EnterSleepS();/* Goto hibernate */ + + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AppIMPCfg.MeasureSeqInfo.SeqId = SEQID_0; + AppIMPCfg.MeasureSeqInfo.SeqRamAddr = AppIMPCfg.InitSeqInfo.SeqRamAddr + AppIMPCfg.InitSeqInfo.SeqLen ; + AppIMPCfg.MeasureSeqInfo.pSeqCmd = pSeqCmd; + AppIMPCfg.MeasureSeqInfo.SeqLen = SeqLen; + /* Write command to SRAM */ + AD5940_SEQCmdWrite(AppIMPCfg.MeasureSeqInfo.SeqRamAddr, pSeqCmd, SeqLen); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/* Depending on frequency of Sin wave set optimum filter settings */ +AD5940Err AppIMPCheckFreq(float freq) +{ + ADCFilterCfg_Type filter_cfg; + DFTCfg_Type dft_cfg; + HSDACCfg_Type hsdac_cfg; + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + FreqParams_Type freq_params; + uint32_t SeqCmdBuff[32]; + uint32_t SRAMAddr = 0;; + /* Step 1: Check Frequency */ + freq_params = AD5940_GetFreqParameters(freq); + + if(freq < 0.51) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain =EXCITBUFGAIN_2;// AppIMPCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = HSDACGAIN_1;//AppIMPCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x1B; + AD5940_HSDacCfgS(&hsdac_cfg); + AD5940_HSRTIACfgS(HSTIARTIA_40K); //set as per load current range + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_800KHZ; + AppIMPCfg.AdcClkFreq = 16e6; + + /* Change clock to 16MHz oscillator */ + AD5940_HPModeEn(bFALSE); + } + else if(freq < 5 ) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain =EXCITBUFGAIN_2;// AppIMPCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = HSDACGAIN_1;//AppIMPCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x1B; + AD5940_HSDacCfgS(&hsdac_cfg); + AD5940_HSRTIACfgS(HSTIARTIA_40K); //set as per load current range + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_800KHZ; + AppIMPCfg.AdcClkFreq = 16e6; + + /* Change clock to 16MHz oscillator */ + AD5940_HPModeEn(bFALSE); + + }else if(freq < 450) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain =AppIMPCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = AppIMPCfg.HsDacGain; + + hsdac_cfg.HsDacUpdateRate = 0x1B; + AD5940_HSDacCfgS(&hsdac_cfg); + AD5940_HSRTIACfgS(HSTIARTIA_5K); //set as per load current range + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_800KHZ; + AppIMPCfg.AdcClkFreq = 16e6; + + /* Change clock to 16MHz oscillator */ + AD5940_HPModeEn(bFALSE); + } + else if(freq<80000) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain =AppIMPCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = AppIMPCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x1B; + AD5940_HSDacCfgS(&hsdac_cfg); + AD5940_HSRTIACfgS(HSTIARTIA_5K); //set as per load current range + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_800KHZ; + AppIMPCfg.AdcClkFreq = 16e6; + + /* Change clock to 16MHz oscillator */ + AD5940_HPModeEn(bFALSE); + } + /* High power mode */ + if(freq >= 80000) + { + /* Update HSDAC update rate */ + hsdac_cfg.ExcitBufGain =AppIMPCfg.ExcitBufGain; + hsdac_cfg.HsDacGain = AppIMPCfg.HsDacGain; + hsdac_cfg.HsDacUpdateRate = 0x07; + AD5940_HSDacCfgS(&hsdac_cfg); + AD5940_HSRTIACfgS(HSTIARTIA_5K); //set as per load current range + + /*Update ADC rate */ + filter_cfg.ADCRate = ADCRATE_1P6MHZ; + AppIMPCfg.AdcClkFreq = 32e6; + + /* Change clock to 32MHz oscillator */ + AD5940_HPModeEn(bTRUE); + } + + /* Step 2: Adjust ADCFILTERCON and DFTCON to set optimumn SINC3, SINC2 and DFTNUM settings */ + filter_cfg.ADCAvgNum = ADCAVGNUM_16; /* Don't care because it's disabled */ + filter_cfg.ADCSinc2Osr = freq_params.ADCSinc2Osr; + filter_cfg.ADCSinc3Osr = freq_params.ADCSinc3Osr; + filter_cfg.BpSinc3 = bFALSE; + filter_cfg.BpNotch = bTRUE; + filter_cfg.Sinc2NotchEnable = bTRUE; + dft_cfg.DftNum = freq_params.DftNum; + dft_cfg.DftSrc = freq_params.DftSrc; + dft_cfg.HanWinEn = AppIMPCfg.HanWinEn; + AD5940_ADCFilterCfgS(&filter_cfg); + AD5940_DFTCfgS(&dft_cfg); + + /* Step 3: Calculate clocks needed to get result to FIFO and update sequencer wait command */ + clks_cal.DataType = DATATYPE_DFT; + clks_cal.DftSrc = freq_params.DftSrc; + clks_cal.DataCount = 1L<<(freq_params.DftNum+2); /* 2^(DFTNUMBER+2) */ + clks_cal.ADCSinc2Osr = freq_params.ADCSinc2Osr; + clks_cal.ADCSinc3Osr = freq_params.ADCSinc3Osr; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = AppIMPCfg.SysClkFreq/AppIMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + + SRAMAddr = AppIMPCfg.MeasureSeqInfo.SeqRamAddr + AppIMPCfg.SeqWaitAddr[0]; + + SeqCmdBuff[0] =SEQ_WAIT(WaitClks/2); + SeqCmdBuff[1] =SEQ_WAIT(WaitClks/2); + + AD5940_SEQCmdWrite(SRAMAddr, SeqCmdBuff, 2); + + SRAMAddr = AppIMPCfg.MeasureSeqInfo.SeqRamAddr + AppIMPCfg.SeqWaitAddr[1]; + + SeqCmdBuff[0] =SEQ_WAIT(WaitClks/2); + SeqCmdBuff[1] =SEQ_WAIT(WaitClks/2); + + AD5940_SEQCmdWrite(SRAMAddr, SeqCmdBuff, 2); + + + return AD5940ERR_OK; +} + + +/* This function provide application initialize. It can also enable Wupt that will automatically trigger sequence. Or it can configure */ +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bTRUE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = AppIMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppIMPCfg.IMPInited == bFALSE)||\ + (AppIMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + AD5940_SEQGenInit(pBuffer, BufferSize); + + /* Generate initialize sequence */ + error = AppIMPSeqCfgGen(); /* Application initialization sequence using either MCU or sequencer */ + if(error != AD5940ERR_OK) return error; + + /* Generate measurement sequence */ + error = AppIMPSeqMeasureGen(); + if(error != AD5940ERR_OK) return error; + + AppIMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Initialization sequencer */ + AppIMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.InitSeqInfo); + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppIMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Measurement sequence */ + AppIMPCfg.MeasureSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppIMPCfg.MeasureSeqInfo); + + AppIMPCheckFreq(AppIMPCfg.FreqofData); + + seq_cfg.SeqEnable = bTRUE; + AD5940_SEQCfg(&seq_cfg); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + //AD5940_AFEPwrBW(AppIMPCfg.PwrMod, AFEBW_250KHZ); + + AppIMPCfg.IMPInited = bTRUE; /* IMP application has been initialized. */ + return AD5940ERR_OK; +} + +/* Modify registers when AFE wakeup */ +int32_t AppIMPRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppIMPCfg.NumOfData > 0) + { + AppIMPCfg.FifoDataCount += *pDataCount/4; + if(AppIMPCfg.FifoDataCount >= AppIMPCfg.NumOfData) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + } + if(AppIMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + if(AppIMPCfg.SweepCfg.SweepEn) /* Need to set new frequency and set power mode */ + { + AD5940_WGFreqCtrlS(AppIMPCfg.SweepNextFreq, AppIMPCfg.SysClkFreq); + AppIMPCheckFreq(AppIMPCfg.SweepNextFreq); + } + return AD5940ERR_OK; +} + +/* Depending on the data type, do appropriate data pre-process before return back to controller */ +int32_t AppIMPDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t DataCount = *pDataCount; + uint32_t ImpResCount = DataCount/4; + + fImpPol_Type * const pOut = (fImpPol_Type*)pData; + iImpCar_Type * pSrcData = (iImpCar_Type*)pData; + + *pDataCount = 0; + + DataCount = (DataCount/4)*4;/* We expect RCAL data together with Rz data. One DFT result has two data in FIFO, real part and imaginary part. */ + + /* Convert DFT result to int32_t type */ + for(uint32_t i=0; iReal*pDftRcal->Real+(float)pDftRcal->Image*pDftRcal->Image); + RcalPhase = atan2(-pDftRcal->Image,pDftRcal->Real); + RzMag = sqrt((float)pDftRz->Real*pDftRz->Real+(float)pDftRz->Image*pDftRz->Image); + RzPhase = atan2(-pDftRz->Image,pDftRz->Real); + + RzMag = RcalMag/RzMag*AppIMPCfg.RcalVal; + RzPhase = RcalPhase - RzPhase; + //printf("V:%d,%d,I:%d,%d ",pDftRcal->Real,pDftRcal->Image, pDftRz->Real, pDftRz->Image); + + pOut[i].Magnitude = RzMag; + pOut[i].Phase = RzPhase; + } + *pDataCount = ImpResCount; + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + /* Calculate next frequency point */ + if(AppIMPCfg.SweepCfg.SweepEn == bTRUE) + { + AppIMPCfg.FreqofData = AppIMPCfg.SweepCurrFreq; + AppIMPCfg.SweepCurrFreq = AppIMPCfg.SweepNextFreq; + AD5940_SweepNext(&AppIMPCfg.SweepCfg, &AppIMPCfg.SweepNextFreq); + } + + return 0; +} + +/** + +*/ +int32_t AppIMPISR(void *pBuff, uint32_t *pCount) +{ + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + + *pCount = 0; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* Prohibit AFE to enter sleep mode. */ + + if(AD5940_INTCTestFlag(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH) == bTRUE) + { + /* Now there should be 4 data in FIFO */ + FifoCnt = (AD5940_FIFOGetCnt()/4)*4; + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppIMPRegModify(pBuff, &FifoCnt); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + //AD5940_EnterSleepS(); /* Manually put AFE back to hibernate mode. This operation only takes effect when register value is ACTIVE previously */ + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. */ + /* Process data */ + AppIMPDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + + return 0; +} + + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.h b/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.h new file mode 100644 index 0000000..c24cdf5 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/Impedance.h @@ -0,0 +1,85 @@ +/*! + ***************************************************************************** + @file: Impedance.h + @author: Neo XU + @brief: 4-wire/2-wire impedance measurement header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _IMPEDANCESEQUENCES_H_ +#define _IMPEDANCESEQUENCES_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /* Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /* Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /* Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /* Measurement sequence start address in SRAM of AD5940 */ + uint32_t SeqWaitAddr[2]; + uint32_t MaxSeqLenCal; +/* Application related parameters */ + float ImpODR; /* */ + int32_t NumOfData; /* By default it's '-1'. If you want the engine stops after get NumofData, then set the value here. Otherwise, set it to '-1' which means never stop. */ + float WuptClkFreq; /* The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /* The real frequency of system clock */ + float AdcClkFreq; /* The real frequency of ADC clock */ + float RcalVal; /* Rcal value in Ohm */ + /* Switch Configuration */ + uint32_t DswitchSel; + uint32_t PswitchSel; + uint32_t NswitchSel; + uint32_t TswitchSel; + uint32_t PwrMod; /* Control Chip power mode(LP/HP) */ + uint32_t HstiaRtiaSel; /* Use internal RTIA, select from RTIA_INT_200, RTIA_INT_1K, RTIA_INT_5K, RTIA_INT_10K, RTIA_INT_20K, RTIA_INT_40K, RTIA_INT_80K, RTIA_INT_160K */ + uint32_t ExcitBufGain; /* Select from EXCTBUFGAIN_2, EXCTBUFGAIN_0P25 */ + uint32_t HsDacGain; /* Select from HSDACGAIN_1, HSDACGAIN_0P2 */ + uint32_t HsDacUpdateRate; + float DacVoltPP; /* DAC output voltage in mV peak to peak. Maximum value is 800mVpp. Peak to peak voltage */ + float BiasVolt; /* The excitation signal is DC+AC. This parameter decides the DC value in mV unit. 0.0mV means no DC bias.*/ + float SinFreq; /* Frequency of excitation signal */ + uint32_t DftNum; /* DFT number */ + uint32_t DftSrc; /* DFT Source */ + BoolFlag HanWinEn; /* Enable Hanning window */ + uint32_t AdcPgaGain; /* PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; + uint8_t ADCSinc2Osr; + uint8_t ADCAvgNum; + /* Sweep Function Control */ + SoftSweepCfg_Type SweepCfg; + uint32_t FifoThresh; /* FIFO threshold. Should be N*4 */ +/* Private variables for internal usage */ +/* Private variables for internal usage */ + float SweepCurrFreq; + float SweepNextFreq; + float FreqofData; /* The frequency of latest data sampled */ + BoolFlag IMPInited; /* If the program run firstly, generated sequence commands */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type MeasureSeqInfo; + BoolFlag StopRequired; /* After FIFO is ready, stop the measurement sequence */ + uint32_t FifoDataCount; /* Count how many times impedance have been measured */ +}AppIMPCfg_Type; + +#define IMPCTRL_START 0 +#define IMPCTRL_STOPNOW 1 +#define IMPCTRL_STOPSYNC 2 +#define IMPCTRL_GETFREQ 3 /* Get Current frequency of returned data from ISR */ +#define IMPCTRL_SHUTDOWN 4 /* Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + + +int32_t AppIMPInit(uint32_t *pBuffer, uint32_t BufferSize); +int32_t AppIMPGetCfg(void *pCfg); +int32_t AppIMPISR(void *pBuff, uint32_t *pCount); +int32_t AppIMPCtrl(uint32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvoptx b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvoptx new file mode 100644 index 0000000..615740d --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\Impedance.c + Impedance.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvprojx b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvprojx new file mode 100644 index 0000000..3e428dc --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/AD5940_Impedance.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + Impedance.c + 1 + ..\Impedance.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/main.c b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Impedance_Adjustable_with_frequency/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_LPDAC/AD5940_LPDAC.c b/examples/AD5940_LPDAC/AD5940_LPDAC.c new file mode 100644 index 0000000..3949529 --- /dev/null +++ b/examples/AD5940_LPDAC/AD5940_LPDAC.c @@ -0,0 +1,67 @@ +/*! + ***************************************************************************** + @file: AD5940_LPDAC.c + @author: Neo Xu + @brief: Low power DAC example. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** + * Note: This example will use LP loop to output voltage on RE0 pin. + * LPDAC reference: internal 2.5V + * LP PA(potentialstat amplifier) is used to buffer voltage from Vbias which connects to 12bit LPDAC output +**/ + +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" + +void AD5940_Main(void) +{ + AFERefCfg_Type ref_cfg; + LPLoopCfg_Type lp_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); + + /* Initialize everything to zero(false/OFF/PowerDown), only turn on what we need */ + AD5940_StructInit(&ref_cfg, sizeof(ref_cfg)); + ref_cfg.LpBandgapEn = bTRUE; /* Enable low power bandgap */ + ref_cfg.LpRefBufEn = bTRUE; /* Enable the low power reference buffer - 2.5V output */ + AD5940_REFCfgS(&ref_cfg); /* Call reference configuration function */ + + AD5940_StructInit(&lp_cfg, sizeof(lp_cfg)); /* Reset everything to zero(OFF) */ + /* Configure what we need below */ + lp_cfg.LpDacCfg.LpdacSel = LPDAC0; /* Select LPDAC0. Note LPDAC1 is available on ADuCM355 */ + lp_cfg.LpDacCfg.DacData12Bit = 0x800; /* Output midscale voltage (0.2V + 2.4V)/2 = 1.3V */ + lp_cfg.LpDacCfg.DacData6Bit = 0; /* 6Bit DAC data */ + lp_cfg.LpDacCfg.DataRst =bFALSE; /* Do not keep DATA registers at reset status */ + lp_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; /* Select internal 2.5V reference */ + lp_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; /* The LPDAC data comes from MMR not WG in this case */ + lp_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Connect Vbias signal to 12Bit LPDAC output */ + lp_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Connect Vzero signal to 6bit LPDAC output */ + lp_cfg.LpDacCfg.PowerEn = bTRUE; /* Power up LPDAC */ + lp_cfg.LpAmpCfg.LpAmpSel = LPAMP0; + lp_cfg.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Set low power amplifiers to normal power mode */ + lp_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; /* Enable LP PA(potentialstat amplifier) power */ + lp_cfg.LpAmpCfg.LpTiaPwrEn = bTRUE; /* Leave LPTIA power off */ + lp_cfg.LpAmpCfg.LpTiaSW = LPTIASW(12)|LPTIASW(13)|LPTIASW(2)|LPTIASW(10)\ + |LPTIASW(5)|LPTIASW(9); /* Close these switches to make sure LP PA amplifier is closed loop */ + lp_cfg.LpAmpCfg.LpTiaRf = LPTIARF_SHORT; + lp_cfg.LpAmpCfg.LpTiaRtia = LPTIARTIA_200R; + lp_cfg.LpAmpCfg.LpTiaRload = LPTIARLOAD_100R; + + AD5940_LPLoopCfgS(&lp_cfg); + while(1); +} + diff --git a/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewd b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewp b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewp new file mode 100644 index 0000000..27329f5 --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_LPDAC.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.rteconfig b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvoptx b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvoptx new file mode 100644 index 0000000..7215fb9 --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvoptx @@ -0,0 +1,306 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + 0 + 110 + 1 +
1748
+ 0 + 0 + 0 + 0 + 0 + 1 + C:\Users\neo\Documents\gitprojects\ad5940-examples\examples\AD5940_BioElec\AD5940_LPDAC.c + + \\ADICUP3029\../AD5940_LPDAC.c\110 +
+
+ + + 0 + 1 + VzeroCode + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_LPDAC.c + AD5940_LPDAC.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvprojx b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvprojx new file mode 100644 index 0000000..230a517 --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/AD5940_LPDAC.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060528::V5.06 update 5 (build 528)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_LPDAC.c + 1 + ..\AD5940_LPDAC.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_LPDAC/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_LPDAC/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_LPDAC/ADICUP3029/main.c b/examples/AD5940_LPDAC/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_LPDAC/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvoptx b/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvoptx new file mode 100644 index 0000000..5df700d --- /dev/null +++ b/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_LPDAC.c + AD5940_LPDAC.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvprojx b/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvprojx new file mode 100644 index 0000000..ac5bb4e --- /dev/null +++ b/examples/AD5940_LPDAC/NUCLEO-F411/AD5940_LPDAC.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_LPDAC.c + 1 + ..\AD5940_LPDAC.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_LPDAC/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_LPDAC/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_LPDAC/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_LPDAC/NUCLEO-F411/main.c b/examples/AD5940_LPDAC/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_LPDAC/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_LPLoop/AD5940_LpLoop.c b/examples/AD5940_LPLoop/AD5940_LpLoop.c new file mode 100644 index 0000000..c85d59c --- /dev/null +++ b/examples/AD5940_LPLoop/AD5940_LpLoop.c @@ -0,0 +1,64 @@ +/*! + ***************************************************************************** + @file: AD5940_LpLoop.c + @author: Neo Xu + @brief: Example of using low power loop amplifiers and LPDAC. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** + * Note: This example will use LP loop to output voltage on RE0 pin. + * LPDAC reference: internal 2.5V + * LP PA(potentialstat amplifier) is used to buffer voltage from Vbias which connects to 12bit LPDAC output +**/ + +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" + +void AD5940_Main(void) +{ + AFERefCfg_Type ref_cfg; + LPLoopCfg_Type lp_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); + + /* Initialize everything to zero(false/OFF/PowerDown), only turn on what we need */ + AD5940_StructInit(&ref_cfg, sizeof(ref_cfg)); + ref_cfg.LpBandgapEn = bTRUE; /* Enable low power bandgap */ + ref_cfg.LpRefBufEn = bTRUE; /* Enable the low power reference buffer - 2.5V output */ + AD5940_REFCfgS(&ref_cfg); /* Call reference configuration function */ + + AD5940_StructInit(&lp_cfg, sizeof(lp_cfg)); /* Reset everything to zero(OFF) */ + /* Configure what we need below */ + lp_cfg.LpDacCfg.LpdacSel = LPDAC0; + lp_cfg.LpDacCfg.DacData12Bit = 0x800; /* Output midscale voltage (0.2V + 2.4V)/2 = 1.3V */ + lp_cfg.LpDacCfg.DacData6Bit = 0; /* 6Bit DAC data */ + lp_cfg.LpDacCfg.DataRst =bFALSE; /* Do not keep DATA registers at reset status */ + lp_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2PIN|LPDACSW_VZERO2PIN;//LPDACSW_VBIAS2LPPA|LPDACSW_VBIAS2PIN|LPDACSW_VZERO2LPTIA|LPDACSW_VZERO2PIN; + lp_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; /* Select internal 2.5V reference */ + lp_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; /* The LPDAC data comes from MMR not WG in this case */ + lp_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Connect Vbias signal to 12Bit LPDAC output */ + lp_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Connect Vzero signal to 6bit LPDAC output */ + lp_cfg.LpDacCfg.PowerEn = bTRUE; /* Power up LPDAC */ + + lp_cfg.LpAmpCfg.LpAmpSel = LPAMP0; + lp_cfg.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Set low power amplifiers to normal power mode */ + lp_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; /* Enable LP PA(potentialstat amplifier) power */ + lp_cfg.LpAmpCfg.LpTiaPwrEn = bFALSE; /* Leave LPTIA power off */ + lp_cfg.LpAmpCfg.LpTiaSW = LPTIASW(12)|LPTIASW(15)|LPTIASW(4); /* Close these switches to make sure LP PA amplifier is closed loop */ + AD5940_LPLoopCfgS(&lp_cfg); + AD5940_LPDAC0WriteS(0x800,31); + while(1); +} + diff --git a/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewd b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewp b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewp new file mode 100644 index 0000000..296d8d9 --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.ewp @@ -0,0 +1,2195 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_LpLoop.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.ComponentGroup + + $PROJ_DIR$\RTE\RTE_Components.h + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> +<packages/> +<device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> +<url>http://www.keil.com/dd2/analogdevices/aducm3029</url> +<package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> +</device> +<toolchain Tcompiler="IAR" Toutput="exe"/> +<components/> +<apis/> +</configuration> + + + diff --git a/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.rteconfig b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.rteconfig new file mode 100644 index 0000000..c3f2bd4 --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.rteconfig @@ -0,0 +1,11 @@ + + + + +http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + diff --git a/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvoptx b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvoptx new file mode 100644 index 0000000..667d777 --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvoptx @@ -0,0 +1,282 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_LpLoop.c + AD5940_LpLoop.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvprojx b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvprojx new file mode 100644 index 0000000..d3d9abb --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/AD5940_LPLoop.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060528::V5.06 update 5 (build 528)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_LpLoop.c + 1 + ..\AD5940_LpLoop.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_LPLoop/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_LPLoop/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_LPLoop/ADICUP3029/main.c b/examples/AD5940_LPLoop/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_LPLoop/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvoptx b/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvoptx new file mode 100644 index 0000000..13383bb --- /dev/null +++ b/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_LpLoop.c + AD5940_LpLoop.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvprojx b/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvprojx new file mode 100644 index 0000000..3cd7613 --- /dev/null +++ b/examples/AD5940_LPLoop/NUCLEO-F411/AD5940_LPLoop.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_LpLoop.c + 1 + ..\AD5940_LpLoop.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_LPLoop/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_LPLoop/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_LPLoop/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_LPLoop/NUCLEO-F411/main.c b/examples/AD5940_LPLoop/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_LPLoop/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Ramp/AD5940Main.c b/examples/AD5940_Ramp/AD5940Main.c new file mode 100644 index 0000000..72a726a --- /dev/null +++ b/examples/AD5940_Ramp/AD5940Main.c @@ -0,0 +1,171 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: Neo Xu + @brief: Example of ramp test for electro-chemical sensor. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "RampTest.h" + +/** + User could configure following parameters +**/ + +#define APPBUFF_SIZE 1024 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; /* Measured LFOSC frequency */ + +/** + * @brief An example to deal with data read back from AD5940. Here we just print data to UART + * @note UART has limited speed, it has impact when sample rate is fast. Try to print some of the data not all of them. + * @param pData: the buffer stored data for this application. The data from FIFO has been pre-processed. + * @param DataCount: The available data count in buffer pData. + * @return return 0. +*/ +static int32_t RampShowResult(float *pData, uint32_t DataCount) +{ + static uint32_t index; + /* Print data*/ + for(int i=0;iSeqStartAddr = 0x10; /* leave 16 commands for LFOSC calibration. */ + pRampCfg->MaxSeqLen = 1024-0x10; /* 4kB/4 = 1024 */ + pRampCfg->RcalVal = 10000.0; /* 10kOhm RCAL */ + pRampCfg->ADCRefVolt = 1820.0f; /* The real ADC reference voltage. Measure it from capacitor C12 with DMM. */ + pRampCfg->FifoThresh = 480; /* Maximum value is 2kB/4-1 = 512-1. Set it to higher value to save power. */ + pRampCfg->SysClkFreq = 16000000.0f; /* System clock is 16MHz by default */ + pRampCfg->LFOSCClkFreq = LFOSCFreq; /* LFOSC frequency */ + /* Configure ramp signal parameters */ + pRampCfg->RampStartVolt = -1000.0f; /* -1V */ + pRampCfg->RampPeakVolt = +1000.0f; /* +1V */ + pRampCfg->VzeroStart = 1300.0f; /* 1.3V */ + pRampCfg->VzeroPeak = 1300.0f; /* 1.3V */ + pRampCfg->StepNumber = 800; /* Total steps. Equals to ADC sample number */ + pRampCfg->RampDuration = 24*1000; /* X * 1000, where x is total duration of ramp signal. Unit is ms. */ + pRampCfg->SampleDelay = 7.0f; /* 7ms. Time between update DAC and ADC sample. Unit is ms. */ + pRampCfg->LPTIARtiaSel = LPTIARTIA_4K; /* Maximum current decides RTIA value */ + pRampCfg->LPTIARloadSel = LPTIARLOAD_SHORT; + pRampCfg->AdcPgaGain = ADCPGA_1P5; + + +} + +void AD5940_Main(void) +{ + uint32_t temp; + AppRAMPCfg_Type *pRampCfg; + AD5940PlatformCfg(); + AD5940RampStructInit(); + + AppRAMPInit(AppBuff, APPBUFF_SIZE); /* Initialize RAMP application. Provide a buffer, which is used to store sequencer commands */ + AppRAMPCtrl(APPCTRL_START, 0); /* Control IMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + AppRAMPGetCfg(&pRampCfg); + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + temp = APPBUFF_SIZE; + AppRAMPISR(AppBuff, &temp); + RampShowResult((float*)AppBuff, temp); + } + /* Repeat Measurement continuously*/ + if(pRampCfg->bTestFinished ==bTRUE) + { + AD5940_Delay10us(200000); + pRampCfg->bTestFinished = bFALSE; + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger */ + AppRAMPCtrl(APPCTRL_START, 0); + } + } +} + diff --git a/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewd b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewp b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewp new file mode 100644 index 0000000..9ab783f --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\..\RampTest.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.rteconfig b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvoptx b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvoptx new file mode 100644 index 0000000..5e47efd --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvoptx @@ -0,0 +1,356 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.RampState + + + 1 + 1 + AppRAMPCfg.StepNumber,0x0A + + + 2 + 1 + AppRAMPCfg.CurrStepPos,0x0A + + + 3 + 1 + DACSeqLenMax,0x0A + + + 4 + 1 + StepsThisBlock,0x0A + + + 5 + 1 + SeqLen,0x0A + + + 6 + 1 + AppBuff + + + 7 + 1 + bIsFinalBlk + + + 8 + 1 + StepsThisBlock,0x0A + + + 9 + 1 + BlockStartSRAMAddr,0x0A + + + 10 + 1 + SRAMAddr,0x0A + + + 11 + 1 + AppRAMPCfg + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 1 + 0 + 0 + ..\RampTest.c + RampTest.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvprojx b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvprojx new file mode 100644 index 0000000..fce8071 --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/AD5940_Ramp.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + RampTest.c + 1 + ..\RampTest.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Ramp/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Ramp/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Ramp/ADICUP3029/main.c b/examples/AD5940_Ramp/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Ramp/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvoptx b/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvoptx new file mode 100644 index 0000000..4116d30 --- /dev/null +++ b/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\RampTest.c + RampTest.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvprojx b/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvprojx new file mode 100644 index 0000000..141606d --- /dev/null +++ b/examples/AD5940_Ramp/NUCLEO-F411/AD5940_Ramp.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + RampTest.c + 1 + ..\RampTest.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Ramp/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Ramp/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Ramp/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Ramp/NUCLEO-F411/main.c b/examples/AD5940_Ramp/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Ramp/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Ramp/RampTest.c b/examples/AD5940_Ramp/RampTest.c new file mode 100644 index 0000000..b46bfaa --- /dev/null +++ b/examples/AD5940_Ramp/RampTest.c @@ -0,0 +1,930 @@ +/*! + ***************************************************************************** + @file: RAMPTest.c + @author: Neo Xu + @brief: RAMP measurement sequences. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** @addtogroup AD5940_System_Examples + * @{ + * @defgroup Ramp_Test_Example + * @brief Using sequencer to generate ramp signal and control ADC to sample data. + * @details + * @note Need to update code when runs at S2 silicon. + * @todo update LPDAC switch settings for S2 and LPDAC 1LSB bug. + * @todo Calibrate ADC/PGA firstly to get accurate current. (Voltage/Rtia = Current) + * @note The method to calculate LPDAC ouput voltage + * - #define LSB_DAC12BIT (2.2V/4095) + * - #define LSB_DAC6BIT (2.2V/4095*64) + * - Volt_12bit = Code12Bit*LSB_DAC12BIT + 0.2V + * - Volt_6bit = Code6Bit*LSB_DAC6BIT + 0.2V + * + * # Ramp Signal Parameters definition + * + * @code + * (Vbias - Vzero): + * RampPeakVolt --> /\ + * / \ + * / \ + * / \ + * / \ + * / \ + * / \ + * / \ + * / \ + * RampStartVolt --> / \ + * + * Vzero: If there is no limitation on Vzero, Set VzeroStart to 2.2 and VzeroPeak to 0.4V + * Voltage VzeroStart --> ______ _____ + * | | + * Voltage VzeroPeak --> |________| + * + * + * Vbias: Vbias is calculated from RampPeakVolt, RampStartVolt, VzeroStart and VzeroPeak. + * Voltage VbiasPeak --> /| /\ |\ + * / | / \ | \ + * / | / \ | \ + * / |/ \| \ + * Voltage VbiasStart --> / | | \ + * + * RampState define: S0 | S1 | S2 |S3 | S4 | + * RampDuration define: | <--RampDuration--> | + * @endcode + * + * # The sequencer method to do Ramp test. + * The Ramp test need to update DAC data in real time to generate required waveform, and control ADC to start sample data. \n + * We used two kinds of sequence to realize it. One is to control DAC where SEQ0 and SEQ1 are used, another sequence SEQ2 controls ADC. + * ## Sequence Allocation + * SEQ3 is used to initialize AD5940.\n + * SEQ0/1 is used to generate voltage step.\n + * SEQ2 is used to startup ADC to sample one point. + * + * |SRAM allocation||| + * |------------|----------------|---------| + * |SequenceID | AddressRange | Usage | + * |SEQID_3 | 0x0000-0xzzzz | Initialization sequence| + * |SEQID_2 | 0xzzzz-0xyyyy | ADC control sequence, run this sequence will get one ADC result| + * |SEQID_0/1 | 0xyyyy-end | DAC update sequence. If size if not enough for all steps, use it like a Ping Pong buffer.| + * Where 0xzzzz equals to SEQ3 length, 0xyyyy equals to sum of SEQ2 and SEQ3 length. + * In one word, put SEQ2 commands right after SEQ3. Don't waste any SRAM resource. + * ##Sequencer Running Order + * The sequencer running order is set to firstly update DAC then start ADC. Repeat this process until all waveform generated. + * Below is explanation of sequencer running order. + * @code + * DAC voltage changes with sequencer, assume each step is 0.05V start from 0.2V + * 400mV-> _______ + * 350mV-> _______/ \_______ + * 300mV-> _______/ \_________ + * 250mV-> _______/ + * 200mV-> __/ + * Update DAC: ↑ ↑ ↑ ↑ ↑ ↑ -No update + * SEQ0 SEQ1 SEQ0 SEQ1 SEQ0 SEQ1 SEQ0 + * | / | / | / | / | / | / | + * SEQ2 SEQ2 SEQ2 SEQ2 SEQ2 SEQ2 |The final sequence is set to disable sequencer + * WuptTrigger ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ + * Time Spend |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 + * |The following triggers are ignored because sequencer is disabled + * Wupt: Wakeup Timer + * @endcode + * + * The final sequence will disable sequencer thus disable the whole measurement. It could be SEQ0 or SEQ1. \n + * SEQ2 will always follow SEQ0/SEQ1 to turn on ADC to sample data. \n + * SEQ0/1 and SEQ2 is managed by wakeup timer. The time delay between SEQ0/1 and SEQ + * is set by user. Reason is that after updating DAC, signal needs some time to settle before sample it. \n + * In above figure, the time t1 is the delay set by user which controls where ADC starts sampling. + * (t1+t2)*StepNumber is the total time used by ramp. It's defined by @ref RampDuration. + * + * SEQ2 commands are fixed. Function is simply turn on ADC for a while and turn off it + * after required number of data ready. \n + * SEQ0/1 is always changing its start address to update DAC with different voltage. \n + * Check above figure we can see SEQ0/SEQ1 is repeatedly trigged by Wakeuptimer, if we don't change the start + * Address of SEQ0/SEQ1, they will always update DAC with same data, thus no waveform generated. + * + * Considering below SEQ0 command which is similar for SEQ1 on modifying SEQxINFO register.: + * + * **Sequencer Command Block 1** + * @code + * //Total sequence command length is **4** + * SEQ_WR(REG_AFE_LPDACDAT0, 0x1234); //update DAC with correct voltage + * SEQ_WAIT(10); //wait 10clocks to allow DAC update + * SEQ_WR(REG_AFE_SEQ1INFO, NextAddr|SeqLen); //The next sequence is SEQ1, set it to correct address where stores commands. + * SEQ_SLP(); //Put AFE to hibernate/sleep mode. + * @endcode + * + * It will update DAC with data 0x1234, then it wait 10 clocks to allow LPDAC update. + * The final command is to send AFE to sleep state. + * The third commands here is to allow modify sequence infomation by sequencer. Above piece of commands are running by SEQ0. + * It modify the start address of **SEQ1**. SEQ1 has same ability to update DAC data but with **different** data. + * By the time Wakeup Timer triggers SEQ1, it will update DAC with correct data. + * + * The last block of sequencer command is to disable sequencer. + * + * **Sequencer Command Block 2** + * @code + * SEQ_NOP(); + * SEQ_NOP(); + * SEQ_NOP(); + * SEQ_STOP(); //Put AFE to hibernate/sleep mode. + * @endcode + * + * Total SRAM is 6kB in AD594x. In normal other application, we use 2kB for sequencer and 4kB for FIFO. + * Assume the ramp test require 128 steps, then the sequence length is 4*128 = 512, each command need 4Byte. So it costs 2kB SRAM. + * When ramp test requires hundres of voltage steps(ADC samples), 2kB SRAM is far from enough. We recommend to use 4kB for sequencer + * and 2kB for data FIFO. + * If ramp test require more steps, then we need to update SRAM with commands dynamically, use it as a ping-pong buffer. + * + * **Sequencer Command Block 3** + * @code + * SEQ_WR(REG_AFE_LPDACDAT0, 0x1234); + * SEQ_WAIT(10); + * SEQ_WR(REG_AFE_SEQ1INFO, NextAddr|SeqLen); + * SEQ_INT0(); //Generate custom interrupt 0 to inform MCU to update ping-pong buffer. + * @endcode + * + * @{ + * **/ + +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "RampTest.h" + +/** + * @brief The ramp application paramters. + * @details Do not modify following default parameters. Use the function in AD5940Main.c to change it. + * + * */ +AppRAMPCfg_Type AppRAMPCfg = + { + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .LFOSCClkFreq = 32000.0, + .SysClkFreq = 16000000.0, + .AdcClkFreq = 16000000.0, + .RcalVal = 10000.0, + .ADCRefVolt = 1820.0f, /* 1.8V or 1.82V? */ + .bTestFinished = bFALSE, + /* Describe Ramp signal */ + .RampStartVolt = -1000.0f, /* -1V */ + .RampPeakVolt = +1000.0f, /* +1V */ + .VzeroStart = 2200.0f, /* 2.2V */ + .VzeroPeak = 400.0f, /* 0.4V */ + .StepNumber = 866, + .RampDuration = 240 * 1000, /* 240s */ + /* Receive path configuration */ + .SampleDelay = 1.0f, /* 1ms */ + .LPTIARtiaSel = LPTIARTIA_20K, /* Maximum current decides RTIA value */ + .ExternalRtiaValue = 20000.0f, /* Optional external RTIA resistore value in Ohm. */ + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_2, + .FifoThresh = 4, + /* Priviate parameters */ + .RAMPInited = bFALSE, + .StopRequired = bFALSE, + .RampState = RAMP_STATE0, + .bFirstDACSeq = bTRUE, + .bRampOneDir = bFALSE, + }; + +/** + * @todo add paramater check. + * SampleDelay will limited by wakeup timer, check WUPT register value calculation equation below for reference. + * SampleDelay > 1.0ms is acceptable. + * RampDuration/StepNumber > 2.0ms + * ... + * */ + +/** + * @brief This function is provided for upper controllers that want to change + * application parameters specially for user defined parameters. + * @param pCfg: The pointer used to store application configuration structure pointer. + * @return none. +*/ +AD5940Err AppRAMPGetCfg(void *pCfg) + { + if(pCfg) + { + *(AppRAMPCfg_Type **)pCfg = &AppRAMPCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; + } + +/** + * @brief Control application like start, stop. + * @param Command: The command for this application, select from below paramters + * - APPCTRL_START: start the measurement. Note: the ramp test need firstly call function AppRAMPInit() every time before start it. + * - APPCTRL_STOPNOW: Stop the measurement immediately. + * - APPCTRL_STOPSYNC: Stop the measuremnt when current measured data is read back. + * - APPCTRL_SHUTDOWN: Stop the measurement immediately and put AFE to shut down mode(turn off LP loop and enter hibernate). + * @return none. +*/ +AD5940Err AppRAMPCtrl(uint32_t Command, void *pPara) + { + switch (Command) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppRAMPCfg.RAMPInited == bFALSE) + return AD5940ERR_APPERROR; + /** + * RAMP example is special, because the sequence is dynamically generated. + * Before 'START' ramp test, call AppRAMPInit firstly. + */ + if(AppRAMPCfg.RampState == RAMP_STOP) + return AD5940ERR_APPERROR; + + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_D; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.WuptOrder[1] = SEQID_2; + wupt_cfg.WuptOrder[2] = SEQID_1; + wupt_cfg.WuptOrder[3] = SEQID_2; + wupt_cfg.SeqxSleepTime[SEQID_2] = 4; + wupt_cfg.SeqxWakeupTime[SEQID_2] = (uint32_t)(AppRAMPCfg.LFOSCClkFreq * AppRAMPCfg.SampleDelay / 1000.0f) - 4 - 2; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppRAMPCfg.LFOSCClkFreq * (AppRAMPCfg.RampDuration / AppRAMPCfg.StepNumber - AppRAMPCfg.SampleDelay) / 1000.0f) - 4 - 2; + wupt_cfg.SeqxSleepTime[SEQID_1] = wupt_cfg.SeqxSleepTime[SEQID_0]; + wupt_cfg.SeqxWakeupTime[SEQID_1] = wupt_cfg.SeqxWakeupTime[SEQID_0]; + AD5940_WUPTCfg(&wupt_cfg); + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case APPCTRL_STOPSYNC: + { + AppRAMPCfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppRAMPCtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + AD5940_ShutDownS(); + } + break; + default: + break; + } + return AD5940ERR_OK; + } + +/** + * @brief Generate initialization sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppRAMPSeqInitGen(void) + { + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lploop_cfg; + DSPCfg_Type dsp_cfg; + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + lploop_cfg.LpAmpCfg.LpAmpSel = LPAMP0; + lploop_cfg.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_BOOST3; + lploop_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaRf = LPTIARF_20K; + lploop_cfg.LpAmpCfg.LpTiaRload = AppRAMPCfg.LPTIARloadSel; + lploop_cfg.LpAmpCfg.LpTiaRtia = AppRAMPCfg.LPTIARtiaSel; + if(AppRAMPCfg.LPTIARtiaSel == LPTIARTIA_OPEN) /* User want to use external RTIA */ + lploop_cfg.LpAmpCfg.LpTiaSW = LPTIASW(2) | LPTIASW(4) | LPTIASW(5) | LPTIASW(9)/*|LPTIASW(10)*/; /* SW5/9 is closed to support external RTIA resistor */ + else + lploop_cfg.LpAmpCfg.LpTiaSW = LPTIASW(2)|LPTIASW(4)|LPTIASW(5); + + lploop_cfg.LpDacCfg.LpdacSel = LPDAC0; + lploop_cfg.LpDacCfg.DacData12Bit = 0x800; + lploop_cfg.LpDacCfg.DacData6Bit = 0; + lploop_cfg.LpDacCfg.DataRst = bFALSE; + lploop_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA/*|LPDACSW_VBIAS2PIN*/ | LPDACSW_VZERO2LPTIA/*|LPDACSW_VZERO2PIN*/; + lploop_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; + lploop_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lploop_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Step Vbias. Use 12bit DAC ouput */ + lploop_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Base is Vzero. Use 6 bit DAC ouput */ + lploop_cfg.LpDacCfg.PowerEn = bTRUE; + AD5940_LPLoopCfgS(&lploop_cfg); + + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_LPTIA0_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_LPTIA0_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppRAMPCfg.AdcPgaGain; + + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppRAMPCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* ADC runs at 16MHz clock in this example, sample rate is 800kHz */ + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; /* We use data from SINC3 filter */ + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = ADCSINC2OSR_1067; /* Don't care */ + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_2; /* Don't care because it's disabled */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop sequence generator here */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + AD5940_StructInit(&AppRAMPCfg.InitSeqInfo, sizeof(AppRAMPCfg.InitSeqInfo)); + if(SeqLen >= AppRAMPCfg.MaxSeqLen) + return AD5940ERR_SEQLEN; + + AppRAMPCfg.InitSeqInfo.SeqId = SEQID_3; + AppRAMPCfg.InitSeqInfo.SeqRamAddr = AppRAMPCfg.SeqStartAddr; + AppRAMPCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppRAMPCfg.InitSeqInfo.SeqLen = SeqLen; + AppRAMPCfg.InitSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppRAMPCfg.InitSeqInfo); + } + else + return error; /* Error */ + return AD5940ERR_OK; + } + +/** + * @brief Generate ADC control sequence and write the commands to SRAM. + * @return return error code. +*/ +static AD5940Err AppRAMPSeqADCCtrlGen(void) + { + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataCount = 1; /* Sample one point everytime */ + clks_cal.DataType = DATATYPE_SINC3; + clks_cal.ADCSinc3Osr = AppRAMPCfg.ADCSinc3Osr; + clks_cal.ADCSinc2Osr = ADCSINC2OSR_1067; /* Don't care */ + clks_cal.ADCAvgNum = ADCAVGNUM_2; /* Don't care */ + clks_cal.RatioSys2AdcClk = AppRAMPCfg.SysClkFreq / AppRAMPCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16 * 250)); /* wait 250us for reference power up */ + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCPWR | AFECTRL_ADCCNV, bFALSE); /* Stop ADC */ + AD5940_SEQGpioCtrlS(0); + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AD5940_StructInit(&AppRAMPCfg.ADCSeqInfo, sizeof(AppRAMPCfg.ADCSeqInfo)); + if((SeqLen + AppRAMPCfg.InitSeqInfo.SeqLen) >= AppRAMPCfg.MaxSeqLen) + return AD5940ERR_SEQLEN; + AppRAMPCfg.ADCSeqInfo.SeqId = SEQID_2; + AppRAMPCfg.ADCSeqInfo.SeqRamAddr = AppRAMPCfg.InitSeqInfo.SeqRamAddr + AppRAMPCfg.InitSeqInfo.SeqLen ; + AppRAMPCfg.ADCSeqInfo.pSeqCmd = pSeqCmd; + AppRAMPCfg.ADCSeqInfo.SeqLen = SeqLen; + AppRAMPCfg.ADCSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppRAMPCfg.ADCSeqInfo); + } + else + return error; /* Error */ + return AD5940ERR_OK; + } + +/** + * @brief Calculate DAC code step by step. + * @details The calculation is based on following variables. + * - RampStartVolt + * - RampPeakVolt + * - VzeroStart + * - VzeroPeak + * - StepNumber + * Below variables must be initialzed before call this function. It's done in function @ref AppRAMPInit + * - RampState + * - CurrStepPos + * - bDACCodeInc + * - CurrRampCode + * @return return error code. +*/ +static AD5940Err RampDacRegUpdate(uint32_t *pDACData) + { + uint32_t VbiasCode, VzeroCode; + + if (AppRAMPCfg.bRampOneDir) + { + switch(AppRAMPCfg.RampState) + { + case RAMP_STATE0: /* Begin of Ramp */ + AppRAMPCfg.CurrVzeroCode = (uint32_t)((AppRAMPCfg.VzeroStart - 200.0f) / DAC6BITVOLT_1LSB); + AppRAMPCfg.RampState = RAMP_STATE1; + break; + case RAMP_STATE1: + if(AppRAMPCfg.CurrStepPos >= AppRAMPCfg.StepNumber / 2) + { + AppRAMPCfg.RampState = RAMP_STATE4; /* Enter State4 */ + AppRAMPCfg.CurrVzeroCode = (uint32_t)((AppRAMPCfg.VzeroPeak - 200.0f) / DAC6BITVOLT_1LSB); + } + break; + case RAMP_STATE4: + if(AppRAMPCfg.CurrStepPos >= AppRAMPCfg.StepNumber) + AppRAMPCfg.RampState = RAMP_STOP; /* Enter Stop */ + break; + case RAMP_STOP: + break; + } + } + else + { + switch(AppRAMPCfg.RampState) + { + case RAMP_STATE0: /* Begin of Ramp */ + AppRAMPCfg.CurrVzeroCode = (uint32_t)((AppRAMPCfg.VzeroStart - 200.0f) / DAC6BITVOLT_1LSB); + AppRAMPCfg.RampState = RAMP_STATE1; + break; + case RAMP_STATE1: + if(AppRAMPCfg.CurrStepPos >= AppRAMPCfg.StepNumber / 4) + { + AppRAMPCfg.RampState = RAMP_STATE2; /* Enter State2 */ + AppRAMPCfg.CurrVzeroCode = (uint32_t)((AppRAMPCfg.VzeroPeak - 200.0f) / DAC6BITVOLT_1LSB); + } + break; + case RAMP_STATE2: + if(AppRAMPCfg.CurrStepPos >= (AppRAMPCfg.StepNumber * 2) / 4) + { + AppRAMPCfg.RampState = RAMP_STATE3; /* Enter State3 */ + AppRAMPCfg.bDACCodeInc = AppRAMPCfg.bDACCodeInc ? bFALSE : bTRUE; + + } + break; + case RAMP_STATE3: + if(AppRAMPCfg.CurrStepPos >= (AppRAMPCfg.StepNumber * 3) / 4) + { + AppRAMPCfg.RampState = RAMP_STATE4; /* Enter State4 */ + AppRAMPCfg.CurrVzeroCode = (uint32_t)((AppRAMPCfg.VzeroStart - 200.0f) / DAC6BITVOLT_1LSB); + } + break; + case RAMP_STATE4: + if(AppRAMPCfg.CurrStepPos >= AppRAMPCfg.StepNumber) + AppRAMPCfg.RampState = RAMP_STOP; /* Enter Stop */ + break; + case RAMP_STOP: + break; + } + } + + AppRAMPCfg.CurrStepPos ++; + if(AppRAMPCfg.bDACCodeInc) + AppRAMPCfg.CurrRampCode += AppRAMPCfg.DACCodePerStep; + else + AppRAMPCfg.CurrRampCode -= AppRAMPCfg.DACCodePerStep; + VzeroCode = AppRAMPCfg.CurrVzeroCode; + VbiasCode = (uint32_t)(VzeroCode * 64 + AppRAMPCfg.CurrRampCode); + if(VbiasCode < (VzeroCode * 64)) + VbiasCode --; + /* Truncate */ + if(VbiasCode > 4095) VbiasCode = 4095; + if(VzeroCode > 63) VzeroCode = 63; + *pDACData = (VzeroCode << 12) | VbiasCode; + return AD5940ERR_OK; + } + +/* Geneate sequence(s) to update DAC step by step */ +/* Note: this function doesn't need sequencer generator */ + +/** + * @brief Update DAC sequence in SRAM in real time. + * @details This function generates sequences to update DAC code step by step. It's also called in interrupt + * function when half commands in SRAM has been completed. We don't use sequence generator to save memory. + * Check more details from documentation of this example. @ref Ramp_Test_Example + * @return return error code + * + * */ +static AD5940Err AppRAMPSeqDACCtrlGen(void) + { +#define SEQLEN_ONESTEP 4L /* How many sequence commands are needed to update LPDAC. */ +#define CURRBLK_BLK0 0 /* Current block is BLOCK0 */ +#define CURRBLK_BLK1 1 /* Current block is BLOCK1 */ + AD5940Err error = AD5940ERR_OK; + uint32_t BlockStartSRAMAddr; + uint32_t DACData, SRAMAddr; + uint32_t i; + uint32_t StepsThisBlock; + BoolFlag bIsFinalBlk; + uint32_t SeqCmdBuff[SEQLEN_ONESTEP]; + + /* All below static variables are inited in below 'if' block. They are only used in this function */ + static BoolFlag bCmdForSeq0 = bTRUE; + static uint32_t DACSeqBlk0Addr, DACSeqBlk1Addr; + static uint32_t StepsRemainning, StepsPerBlock, DACSeqCurrBlk; + + /* Do some math calculations */ + if(AppRAMPCfg.bFirstDACSeq == bTRUE) + { + /* Reset bIsFirstRun at end of function. */ + int32_t DACSeqLenMax; + StepsRemainning = AppRAMPCfg.StepNumber; + DACSeqLenMax = (int32_t)AppRAMPCfg.MaxSeqLen - (int32_t)AppRAMPCfg.InitSeqInfo.SeqLen - (int32_t)AppRAMPCfg.ADCSeqInfo.SeqLen; + if(DACSeqLenMax < SEQLEN_ONESTEP * 4) + return AD5940ERR_SEQLEN; /* No enough sequencer SRAM available */ + DACSeqLenMax -= SEQLEN_ONESTEP * 2; /* Reserve commands each block */ + StepsPerBlock = DACSeqLenMax / SEQLEN_ONESTEP / 2; + DACSeqBlk0Addr = AppRAMPCfg.ADCSeqInfo.SeqRamAddr + AppRAMPCfg.ADCSeqInfo.SeqLen; + DACSeqBlk1Addr = DACSeqBlk0Addr + StepsPerBlock * SEQLEN_ONESTEP; + DACSeqCurrBlk = CURRBLK_BLK0; + + /* Analog part */ + if (AppRAMPCfg.bRampOneDir) + { + /* Ramping between RampStartVolt and RampPeakVolt in StepNumber steps */ + AppRAMPCfg.DACCodePerStep = ((AppRAMPCfg.RampPeakVolt - AppRAMPCfg.RampStartVolt) / AppRAMPCfg.StepNumber) + / DAC12BITVOLT_1LSB; + } + else + { + /* Ramping between RampStartVolt and RampPeakVolt in StepNumber/2 steps */ + AppRAMPCfg.DACCodePerStep = ((AppRAMPCfg.RampPeakVolt - AppRAMPCfg.RampStartVolt) / AppRAMPCfg.StepNumber * 2) + / DAC12BITVOLT_1LSB; + } + +#if ALIGIN_VOLT2LSB + AppRAMPCfg.DACCodePerStep = (int32_t)AppRAMPCfg.DACCodePerStep; +#endif + if(AppRAMPCfg.DACCodePerStep > 0) + AppRAMPCfg.bDACCodeInc = bTRUE; + else + { + AppRAMPCfg.DACCodePerStep = -AppRAMPCfg.DACCodePerStep; /* Always positive */ + AppRAMPCfg.bDACCodeInc = bFALSE; + } + AppRAMPCfg.CurrRampCode = AppRAMPCfg.RampStartVolt / DAC12BITVOLT_1LSB; + + AppRAMPCfg.RampState = RAMP_STATE0; /* Init state to STATE0 */ + AppRAMPCfg.CurrStepPos = 0; + + bCmdForSeq0 = bTRUE; /* Start with SEQ0 */ + } + + if(StepsRemainning == 0) return AD5940ERR_OK; /* Done. */ + bIsFinalBlk = StepsRemainning <= StepsPerBlock ? bTRUE : bFALSE; + if(bIsFinalBlk) + StepsThisBlock = StepsRemainning; + else + StepsThisBlock = StepsPerBlock; + StepsRemainning -= StepsThisBlock; + + BlockStartSRAMAddr = (DACSeqCurrBlk == CURRBLK_BLK0) ? \ + DACSeqBlk0Addr : DACSeqBlk1Addr; + SRAMAddr = BlockStartSRAMAddr; + + for(i = 0; i < StepsThisBlock - 1; i++) + { + uint32_t CurrAddr = SRAMAddr; + SRAMAddr += SEQLEN_ONESTEP; /* Jump to next sequence */ + RampDacRegUpdate(&DACData); + SeqCmdBuff[0] = SEQ_WR(REG_AFE_LPDACDAT0, DACData); + SeqCmdBuff[1] = SEQ_WAIT(10); /* !!!NOTE LPDAC need 10 clocks to update data. Before send AFE to sleep state, wait 10 extra clocks */ + SeqCmdBuff[2] = SEQ_WR(bCmdForSeq0 ? REG_AFE_SEQ1INFO : REG_AFE_SEQ0INFO, \ + (SRAMAddr << BITP_AFE_SEQ1INFO_ADDR) | (SEQLEN_ONESTEP << BITP_AFE_SEQ1INFO_LEN)); + SeqCmdBuff[3] = SEQ_SLP(); + AD5940_SEQCmdWrite(CurrAddr, SeqCmdBuff, SEQLEN_ONESTEP); + bCmdForSeq0 = bCmdForSeq0 ? bFALSE : bTRUE; + } + /* Add final DAC update */ + if(bIsFinalBlk)/* This is the final block */ + { + uint32_t CurrAddr = SRAMAddr; + SRAMAddr += SEQLEN_ONESTEP; /* Jump to next sequence */ + /* After update LPDAC with final data, we let sequencer to run 'final final' command, to disable sequencer. */ + RampDacRegUpdate(&DACData); + SeqCmdBuff[0] = SEQ_WR(REG_AFE_LPDACDAT0, DACData); + SeqCmdBuff[1] = SEQ_WAIT(10); /* !!!NOTE LPDAC need 10 clocks to update data. Before send AFE to sleep state, wait 10 extra clocks */ + SeqCmdBuff[2] = SEQ_WR(bCmdForSeq0 ? REG_AFE_SEQ1INFO : REG_AFE_SEQ0INFO, \ + (SRAMAddr << BITP_AFE_SEQ1INFO_ADDR) | (SEQLEN_ONESTEP << BITP_AFE_SEQ1INFO_LEN)); + SeqCmdBuff[3] = SEQ_SLP(); + AD5940_SEQCmdWrite(CurrAddr, SeqCmdBuff, SEQLEN_ONESTEP); + CurrAddr += SEQLEN_ONESTEP; + /* The final final command is to disable sequencer. */ + SeqCmdBuff[0] = SEQ_NOP(); /* Do nothing */ + SeqCmdBuff[1] = SEQ_NOP(); + SeqCmdBuff[2] = SEQ_NOP(); + SeqCmdBuff[3] = SEQ_STOP(); /* Stop sequencer. */ + /* Disable sequencer, END of sequencer interrupt is generated. */ + AD5940_SEQCmdWrite(CurrAddr, SeqCmdBuff, SEQLEN_ONESTEP); + } + else /* This is not the final block */ + { + /* Jump to next block. */ + uint32_t CurrAddr = SRAMAddr; + SRAMAddr = (DACSeqCurrBlk == CURRBLK_BLK0) ? \ + DACSeqBlk1Addr : DACSeqBlk0Addr; + RampDacRegUpdate(&DACData); + SeqCmdBuff[0] = SEQ_WR(REG_AFE_LPDACDAT0, DACData); + SeqCmdBuff[1] = SEQ_WAIT(10); + SeqCmdBuff[2] = SEQ_WR(bCmdForSeq0 ? REG_AFE_SEQ1INFO : REG_AFE_SEQ0INFO, + (SRAMAddr << BITP_AFE_SEQ1INFO_ADDR) | (SEQLEN_ONESTEP << BITP_AFE_SEQ1INFO_LEN)); + SeqCmdBuff[3] = SEQ_INT0(); /* Generate Custom interrupt 0. */ + AD5940_SEQCmdWrite(CurrAddr, SeqCmdBuff, SEQLEN_ONESTEP); + bCmdForSeq0 = bCmdForSeq0 ? bFALSE : bTRUE; + } + + DACSeqCurrBlk = (DACSeqCurrBlk == CURRBLK_BLK0) ? \ + CURRBLK_BLK1 : CURRBLK_BLK0; /* Switch between Block0 and block1 */ + if(AppRAMPCfg.bFirstDACSeq) + { + AppRAMPCfg.bFirstDACSeq = bFALSE; + if(bIsFinalBlk == bFALSE) + { + /* Otherwise there is no need to init block1 sequence */ + error = AppRAMPSeqDACCtrlGen(); + if(error != AD5940ERR_OK) + return error; + } + /* This is the first DAC sequence. */ + AppRAMPCfg.DACSeqInfo.SeqId = SEQID_0; + AppRAMPCfg.DACSeqInfo.SeqLen = SEQLEN_ONESTEP; + AppRAMPCfg.DACSeqInfo.SeqRamAddr = BlockStartSRAMAddr; + AppRAMPCfg.DACSeqInfo.WriteSRAM = bFALSE; /* No need to write to SRAM. We already write them above. */ + AD5940_SEQInfoCfg(&AppRAMPCfg.DACSeqInfo); + } + return AD5940ERR_OK; + } + + +/** + * @brief Calibrate LPTIA internal RTIA resistor(s). + * @details This function will do calibration using parameters stored in @ref AppEDACfg structure. + * @return return error code. +*/ +static AD5940Err AppRAMPRtiaCal(void) + { + fImpPol_Type RtiaCalValue; /* Calibration result */ + LPRTIACal_Type lprtia_cal; + AD5940_StructInit(&lprtia_cal, sizeof(lprtia_cal)); + + lprtia_cal.LpAmpSel = LPAMP0; + lprtia_cal.bPolarResult = bTRUE; /* Magnitude + Phase */ + lprtia_cal.AdcClkFreq = AppRAMPCfg.AdcClkFreq; + lprtia_cal.SysClkFreq = AppRAMPCfg.SysClkFreq; + lprtia_cal.ADCSinc3Osr = ADCSINC3OSR_4; + lprtia_cal.ADCSinc2Osr = ADCSINC2OSR_22; /* Use SINC2 data as DFT data source */ + lprtia_cal.DftCfg.DftNum = DFTNUM_2048; /* Maximum DFT number */ + lprtia_cal.DftCfg.DftSrc = DFTSRC_SINC2NOTCH; + lprtia_cal.DftCfg.HanWinEn = bTRUE; + lprtia_cal.fFreq = AppRAMPCfg.AdcClkFreq / 4 / 22 / 2048 * 3; /* Sample 3 period of signal, 13.317Hz here. Do not use DC method, because it needs ADC/PGA calibrated firstly(but it's faster) */ + lprtia_cal.fRcal = AppRAMPCfg.RcalVal; + lprtia_cal.LpTiaRtia = AppRAMPCfg.LPTIARtiaSel; + lprtia_cal.LpAmpPwrMod = LPAMPPWR_NORM; + lprtia_cal.bWithCtia = bFALSE; + AD5940_LPRtiaCal(&lprtia_cal, &RtiaCalValue); + AppRAMPCfg.RtiaValue = RtiaCalValue; + //printf("Rtia,%f,%f\n", RtiaCalValue.Magnitude, RtiaCalValue.Phase); + return AD5940ERR_OK; + } + +/** + * @brief Initialize the ramp test. Call this functions every time before start ramp test. + * @param pBuffer: the buffer for sequencer generator. Only need to provide it for the first time. + * @param BufferSize: The buffer size start from pBuffer. + * @return return error code. +*/ +AD5940Err AppRAMPInit(uint32_t *pBuffer, uint32_t BufferSize) + { + AD5940Err error = AD5940ERR_OK; + FIFOCfg_Type fifo_cfg; + SEQCfg_Type seq_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_4KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppRAMPCfg.RAMPInited == bFALSE) || \ + (AppRAMPCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + + if(AppRAMPCfg.LPTIARtiaSel == LPTIARTIA_OPEN) /* Internal RTIA is opened. User wants to use external RTIA resistor */ + { + AppRAMPCfg.RtiaValue.Magnitude = AppRAMPCfg.ExternalRtiaValue; + AppRAMPCfg.RtiaValue.Phase = 0; + } + else + AppRAMPRtiaCal(); + + AppRAMPCfg.RAMPInited = bFALSE; + AD5940_SEQGenInit(pBuffer, BufferSize); + /* Generate sequence and write them to SRAM start from address AppRAMPCfg.SeqStartAddr */ + error = AppRAMPSeqInitGen(); /* Application initialization sequence */ + if(error != AD5940ERR_OK) return error; + error = AppRAMPSeqADCCtrlGen(); /* ADC control sequence */ + if(error != AD5940ERR_OK) return error; + AppRAMPCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Reconfigure FIFO, The Rtia calibration function may generate data that stored to FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOSrc = FIFOSRC_SINC3; + fifo_cfg.FIFOThresh = AppRAMPCfg.FifoThresh; /* Change FIFO paramters */ + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_2KB; + AD5940_FIFOCfg(&fifo_cfg); + + /* Clear all interrupts */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Generate DAC sequence */ + AppRAMPCfg.bFirstDACSeq = bTRUE; + error = AppRAMPSeqDACCtrlGen(); + if(error != AD5940ERR_OK) return error; + + /* Configure sequence info. */ + AppRAMPCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppRAMPCfg.InitSeqInfo); + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppRAMPCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + + AppRAMPCfg.ADCSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppRAMPCfg.ADCSeqInfo); + + AppRAMPCfg.DACSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppRAMPCfg.DACSeqInfo); + + AD5940_SEQCtrlS(bFALSE); + AD5940_WriteReg(REG_AFE_SEQCNT, 0); + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); /* Set to low power mode */ + + AppRAMPCfg.RAMPInited = bTRUE; /* RAMP application has been initialized. */ + return AD5940ERR_OK; + } + +/** + * @brief This function is called in ISR when AFE has been wakeup and we can access registers. + * @param pData: the buffer points to data read back from FIFO. Not needed for this application-RAMP + * @param pDataCount: The data count in pData buffer. + * @return return error code. +*/ +static int32_t AppRAMPRegModify(int32_t *const pData, uint32_t *pDataCount) + { + if(AppRAMPCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + return AD5940ERR_OK; + } + +/** + * @brief Depending on the data type, do appropriate data pre-process before return back to controller + * @param pData: the buffer points to data read back from FIFO. Not needed for this application-RAMP + * @param pDataCount: The data count in pData buffer. + * @return return error code. +*/ +static int32_t AppRAMPDataProcess(int32_t *const pData, uint32_t *pDataCount) + { + uint32_t i, datacount; + datacount = *pDataCount; + float *pOut = (float *)pData; + float temp; + for(i = 0; i < datacount; i++) + { + pData[i] &= 0xffff; + temp = -AD5940_ADCCode2Volt(pData[i], AppRAMPCfg.AdcPgaGain, AppRAMPCfg.ADCRefVolt); + pOut[i] = temp / AppRAMPCfg.RtiaValue.Magnitude * 1e3f; /* Result unit is uA. */ + } + return 0; + } + +/** + * @brief The interrupt service routine for RAMP test. + * @param pBuff: The buffer provides by host, used to store data read back from FIFO. + * @param pCount: The available buffer size starts from pBuff. + * @return return error code. +*/ +AD5940Err AppRAMPISR(void *pBuff, uint32_t *pCount) + { + uint32_t BuffCount; + uint32_t FifoCnt; + BuffCount = *pCount; + uint32_t IntFlag; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); + *pCount = 0; + IntFlag = AD5940_INTCGetFlag(AFEINTC_0); + if(IntFlag & AFEINTSRC_CUSTOMINT0) /* High priority. */ + { + AD5940Err error; + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT0); + error = AppRAMPSeqDACCtrlGen(); + if(error != AD5940ERR_OK) return error; + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); + //AD5940_EnterSleepS(); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + } + if(IntFlag & AFEINTSRC_DATAFIFOTHRESH) + { + FifoCnt = AD5940_FIFOGetCnt(); + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppRAMPRegModify(pBuff, &FifoCnt); + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); + //AD5940_EnterSleepS(); + /* Process data */ + AppRAMPDataProcess((int32_t *)pBuff, &FifoCnt); + *pCount = FifoCnt; + return 0; + } + if(IntFlag & AFEINTSRC_ENDSEQ) + { + FifoCnt = AD5940_FIFOGetCnt(); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + /* Process data */ + AppRAMPDataProcess((int32_t *)pBuff, &FifoCnt); + *pCount = FifoCnt; + AppRAMPCtrl(APPCTRL_STOPNOW, 0); /* Stop the Wakeup Timer. */ + + /* Reset variables so measurement can be restarted*/ + AppRAMPCfg.bTestFinished = bTRUE; + AppRAMPCfg.RampState = RAMP_STATE0; + AppRAMPCfg.bFirstDACSeq = bTRUE; + AppRAMPCfg.bDACCodeInc = bTRUE; + AppRAMPSeqDACCtrlGen(); + } + return 0; + } + +/** + * @} + * @} +*/ diff --git a/examples/AD5940_Ramp/RampTest.h b/examples/AD5940_Ramp/RampTest.h new file mode 100644 index 0000000..ca83cd4 --- /dev/null +++ b/examples/AD5940_Ramp/RampTest.h @@ -0,0 +1,88 @@ +/*! + ***************************************************************************** + @file: RampTest.h + @author: Neo Xu + @brief: Ramp Test header file. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _RAMPTEST_H_ +#define _RAMPTEST_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +/* Do not modify following parameters */ +#define ALIGIN_VOLT2LSB 0 /* Set it to 1 to align each voltage step to 1LSB of DAC. 0: step code is fractional. */ +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV + +/** + * The Ramp application related paramter structure +*/ +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /**< Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /**< Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /**< Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /**< Not used for Ramp.Calibration sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; /**< Not used for Ramp. */ +/* Application related parameters */ + float LFOSCClkFreq; /**< The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + float RcalVal; /**< Rcal value in Ohm */ + float ADCRefVolt; /**< The real ADC voltage in mV. */ + BoolFlag bTestFinished; /**< Variable to indicate ramt test has finished >*/ + /* Describe Ramp signal */ + float RampStartVolt; /**< The start voltage of ramp signal in mV */ + float RampPeakVolt; /**< The maximum or minimum voltage of ramp in mV */ + float VzeroStart; /**< The start voltage of Vzero in mV. Set it to 2400mV by default */ + float VzeroPeak; /**< The peak voltage of Vzero in mV. Set it to 200mV by default */ + uint32_t StepNumber; /**< Total number of steps. Limited to 4095. */ + uint32_t RampDuration; /**< Ramp signal duration(total time) in ms */ + /* Receive path configuration */ + float SampleDelay; /**< The time delay between update DAC and start ADC */ + uint32_t LPTIARtiaSel; /**< Select RTIA */ + uint32_t LPTIARloadSel; /**< Select Rload */ + float ExternalRtiaValue; /**< The optional external RTIA value in Ohm. Disconnect internal RTIA to use external RTIA. When using internal RTIA, this value is ignored. */ + uint32_t AdcPgaGain; /**< PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /**< We use data from SINC3 filter. */ + /* Digital related */ + uint32_t FifoThresh; /**< FIFO Threshold value */ +/* Private variables for internal usage */ + BoolFlag RAMPInited; /**< If the program run firstly, generated initialization sequence commands */ + fImpPol_Type RtiaValue; /**< Calibrated Rtia value */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type ADCSeqInfo; + BoolFlag bFirstDACSeq; /**< Init DAC sequence */ + SEQInfo_Type DACSeqInfo; /**< The first DAC update sequence info */ + uint32_t CurrStepPos; /**< Current position */ + float DACCodePerStep; /**< */ + float CurrRampCode; /**< */ + uint32_t CurrVzeroCode; + BoolFlag bDACCodeInc; /**< Increase DAC code. */ + BoolFlag StopRequired; /**< After FIFO is ready, stop the measurement sequence */ + enum _RampState{RAMP_STATE0 = 0, RAMP_STATE1, RAMP_STATE2, RAMP_STATE3, RAMP_STATE4, RAMP_STOP} RampState; + BoolFlag bRampOneDir; /**< Ramp in a single direction, no return to start */ +}AppRAMPCfg_Type; + +#define APPCTRL_START 0 +#define APPCTRL_STOPNOW 1 +#define APPCTRL_STOPSYNC 2 +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppRAMPInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppRAMPGetCfg(void *pCfg); +AD5940Err AppRAMPISR(void *pBuff, uint32_t *pCount); +AD5940Err AppRAMPCtrl(uint32_t Command, void *pPara); + +#endif diff --git a/examples/AD5940_Reset/AD5940_Reset.c b/examples/AD5940_Reset/AD5940_Reset.c new file mode 100644 index 0000000..fab2426 --- /dev/null +++ b/examples/AD5940_Reset/AD5940_Reset.c @@ -0,0 +1,82 @@ +/*! + ***************************************************************************** + @file: AD5940_Reset.c + @author: $Author: nxu2 $ + @brief: Demostrate three methods to reset AD5940: External Reset, MMR Reset and Power On Reset. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** + * The example shows three kinds of reset source of AD5940: + * - Hardware/External Reset, this is done via RESET pin. Pull it low to reset AD5940. + * - Software Reset, this is done by write regiter. + * - POR Reset, power on reset is done when the power is firstly applied. + * + * After power up, the program firlsty check reset status, there should be only POR reset flag set. + * Then we perform hardware reset. The reset status should reflect this. + * Note the flag in RSTSTA register is stiky. You can clear it by write 1 to corresponding bit. + * Finally, we perform software reset. + * Program then complete required initialization which should be done whenever there is a reset. +*/ + +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include + +void print_rststa(uint32_t reg) +{ + printf("<<<<<<>>>>>>Reset Status Done>>>>>\n"); +} + +void AD5940_Main(void) +{ + uint32_t temp; + printf("Wait 5 secondes\n"); + AD5940_Delay10us(100*5000); /* Delay 5s */ + printf("\n1. AD5940 Power ON\n"); + temp = AD5940_ReadReg(REG_ALLON_RSTSTA); + print_rststa(temp); + AD5940_WriteReg(REG_ALLON_RSTSTA, 0xf); /* Clear reset status. This register will remain its value until we manually clear it. Reset operation won't reset this register. */ + + printf("\n2. Perform Hardware reset now!\n"); + AD5940_HWReset(); + printf("Hardware reset done, status is:\n"); + temp = AD5940_ReadReg(REG_ALLON_RSTSTA); + print_rststa(temp); + AD5940_WriteReg(REG_ALLON_RSTSTA, 0xf); + + printf("\n3. Perform Software Reset now \n"); + AD5940_SoftRst(); + printf("Software reset done, status is:\n"); + temp = AD5940_ReadReg(REG_ALLON_RSTSTA); + print_rststa(temp); + printf("\nReset Test done \n"); + /** + * @note MUST call this function whenever there is reset happened. This function will put AD5940 to right state. + */ + AD5940_Initialize(); + AD5940_WriteReg(REG_ALLON_RSTSTA, 0xf); /* Clear reset status register. */ + + while(1); +} + diff --git a/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewd b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewp b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewp new file mode 100644 index 0000000..000d2b9 --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_Reset.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.rteconfig b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvoptx b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvoptx new file mode 100644 index 0000000..9ba9489 --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvoptx @@ -0,0 +1,306 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + 0 + 110 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + C:\Users\neo\Documents\gitprojects\ad5940-examples\examples\AD5940_ECSns_EIS\AD5940_Reset.c + + +
+
+ + + 0 + 1 + VzeroCode + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Reset.c + AD5940_Reset.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvprojx b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvprojx new file mode 100644 index 0000000..82384d1 --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/AD5940_Reset.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060528::V5.06 update 5 (build 528)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Reset.c + 1 + ..\AD5940_Reset.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Reset/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Reset/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Reset/ADICUP3029/main.c b/examples/AD5940_Reset/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Reset/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvoptx b/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvoptx new file mode 100644 index 0000000..a342f81 --- /dev/null +++ b/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Reset.c + AD5940_Reset.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvprojx b/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvprojx new file mode 100644 index 0000000..ffedafc --- /dev/null +++ b/examples/AD5940_Reset/NUCLEO-F411/AD5940_Reset.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Reset.c + 1 + ..\AD5940_Reset.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Reset/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Reset/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Reset/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Reset/NUCLEO-F411/main.c b/examples/AD5940_Reset/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Reset/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Reset/main.c b/examples/AD5940_Reset/main.c new file mode 100644 index 0000000..f759fda --- /dev/null +++ b/examples/AD5940_Reset/main.c @@ -0,0 +1,41 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "ADuCM3029.H" +#include "AD5940PORT.h" +#include "stdio.h" + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + MCUGpioInit(0); + MCUExtiInit(0); + MCUSPIInit(0); + MCUSysTickInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +//void Host_EnterHibernate(void) +//{ +// int32_t index = 0; +// uint32_t savedWDT; +// savedWDT = pADI_WDT0->CTL; //None of the watchdog timer registers are retained in hibernate mode +// SCB->SCR = 0x04; // sleepdeep mode - write to the Cortex-m3 System Control register bit2 +// pADI_PMG0->PWRKEY = 0x4859; // key1 +// pADI_PMG0->PWRMOD = ENUM_PMG_PWRMOD_HIBERNATE|BITM_PMG_PWRMOD_MONVBATN; +// for (index=0;index<2;index++); +// __WFI(); +// for (index=0;index<2;index++); +// pADI_WDT0->CTL = savedWDT; //restore WDT control register. +// UrtCfg(230400);/*Baud rate: 230400*/ +// SpiMasterInit(); +//} diff --git a/examples/AD5940_SPI/AD5940_SPI.c b/examples/AD5940_SPI/AD5940_SPI.c new file mode 100644 index 0000000..e0984df --- /dev/null +++ b/examples/AD5940_SPI/AD5940_SPI.c @@ -0,0 +1,83 @@ +/*! + ***************************************************************************** + @file: AD5940_SPI.c + @author: $Author: nxu2 $ + @brief: Basic register read/write test example. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** + * This example shows how to read/write AD5940 registers through SPI. + * Use function called AD5940_ReadReg and AD5940_WriteReg. +**/ +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" +#include + +void AD5940_Main(void) +{ + unsigned long temp, i; + /** + * Hardware reset can always put AD5940 to default state. + * We recommend to use hardware reset rather than software reset + * because there are some situations that SPI won't work, for example, AD59840 is in hibernate mode, + * or AD5940 system clock is 32kHz that SPI bus clock should also be limited.. + * */ + AD5940_HWReset(); + /** + * @note MUST call this function whenever there is reset happened. This function will put AD5940 to right state. + * The reset can be software reset or hardware reset or power up reset. + */ + AD5940_Initialize(); + /** + * Normal application code starts here. + */ + /** + * Read register test. + */ + temp = AD5940_ReadReg(REG_AFECON_ADIID); + printf("Read ADIID register, got: 0x%04lx\n", temp); + if(temp != AD5940_ADIID) + printf("Read register test failed.\n" ); + else + printf("Read register test pass\n"); + /** + * Write register test. + * */ + srand(0x1234); + i =10000; + while(i--) + { + static unsigned long count; + static unsigned long data; + /* Generate a 32bit random data */ + data = rand()&0xffff; + data <<= 16; + data |= rand()&0xffff; + count ++; /* Read write count */ + /** + * Register CALDATLOCK is 32-bit width, it's readable and writable. + * We use it to test SPI register access. + */ + AD5940_WriteReg(REG_AFE_CALDATLOCK, data); + temp = AD5940_ReadReg(REG_AFE_CALDATLOCK); + if(temp != data) + printf("Write register test failed @0x%08lx\n", data); + if(!(count%1000)) + printf("Read/Write has been done %ld times, latest data is 0x%08lx\n", count, data); + } + printf("SPI read/write test completed"); + while(1); +} + diff --git a/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewd b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewp b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewp new file mode 100644 index 0000000..5b0ccdc --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_SPI.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.rteconfig b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvoptx b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvoptx new file mode 100644 index 0000000..6b87e44 --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvoptx @@ -0,0 +1,306 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + 0 + 110 + 1 +
1748
+ 0 + 0 + 0 + 0 + 0 + 1 + C:\Users\neo\Documents\gitprojects\ad5940-examples\examples\AD5940_ChronoAmperometric\AD5940_SPI.c + + \\ADICUP3029\../AD5940_SPI.c\110 +
+
+ + + 0 + 1 + VzeroCode + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + AD5940Lib + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 0 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_SPI.c + AD5940_SPI.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvprojx b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvprojx new file mode 100644 index 0000000..c8b8669 --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/AD5940_SPI.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_SPI.c + 1 + ..\AD5940_SPI.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_SPI/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_SPI/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_SPI/ADICUP3029/main.c b/examples/AD5940_SPI/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_SPI/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvoptx b/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvoptx new file mode 100644 index 0000000..0b08bb8 --- /dev/null +++ b/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_SPI.c + AD5940_SPI.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvprojx b/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvprojx new file mode 100644 index 0000000..763cb4e --- /dev/null +++ b/examples/AD5940_SPI/NUCLEO-F411/AD5940_SPI.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_SPI.c + 1 + ..\AD5940_SPI.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_SPI/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_SPI/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_SPI/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_SPI/NUCLEO-F411/main.c b/examples/AD5940_SPI/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_SPI/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_Sequencer/AD5940_Sequencer.c b/examples/AD5940_Sequencer/AD5940_Sequencer.c new file mode 100644 index 0000000..539a6b3 --- /dev/null +++ b/examples/AD5940_Sequencer/AD5940_Sequencer.c @@ -0,0 +1,320 @@ +/*! + ***************************************************************************** + @file: AD5940_Sequencer.c + @author: Neo Xu + @brief: Basic usage of sequencer. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** + * Sequencer is used to control the AFE automatically. It can execute commands that + * is pre-loaded to SRAM. There are 6kB SRAM available while you can choose to use + * 2kB or 4kB of it and use reset of SRAM for data FIFO. + * There are 3 commands available. We mainly use only two commands: + * - Write register + * - Wait + * We control the AFE by registers, so with sequencer, we can do almost everything. + * + * Once sequencer is enabled, it starts to wait valid trigger signal. Sequencer can + * manage 4sequences at same time. You can choose which sequence you want to trigger. + * To make the AFE can manage measurement automatically, there are three method to + * trigger sequence. + * - MMR. You can trigger any sequence by register write. Or call function @ref AD5940_SEQMmrTrig + * - GPIO. You can trigger any sequence by GPIO. To use this, you must firstly set + * GPIO function to GPx_TRIG. Where x is the GPIO number. GPIO0 is used to trigger + * Sequence0 and GPIO3 is used to trigger Sequence3. Check the macro definition to + * Check the details (or below table). + * |GPIO|WhichSequence| + * |GP0|SEQUENCE0| + * |GP1|SEQUENCE1| + * |GP2|SEQUENCE2| + * |GP3|SEQUENCE3| + * |GP4|SEQUENCE0| + * |GP5|SEQUENCE1| + * |GP6|SEQUENCE2| + * |GP7|SEQUENCE3| + * - WakeupTimer. Wakeuptimer can automatically wakeup AFE from hibernate state and trigger selected + * sequence in register SEQORDER. This register defines the order of sequence that + * Wakeuptimer will trigger. There are 8 slots in this register. You can fill in any + * of the four sequences. Also, you can choose not to use all these 8 slots, just simply + * specify the end slot. We call the 8 slots are A/B/C/D/E/F/G/H. For example you can + * choose the end slot as C. So wakeup timer will trigger the sequence in below order: + * A->B->C->A->B->C->A->B->C->... until you stop Wakeuptimer. + * If you fill in slot A with sequence0, B with Sequence3, C with sequence1, the sequence + * will be executed in the order defined above(A-B-C-A-B-C...) + * SEQ0->SEQ3->SEQ1->SEQ0->SEQ3->SEQ1->... + * For each sequence, there is a sleep timer and a wakeup timer. The timer will automatically + * load corresponding value. + * The structure @ref WUPTCfg_Type can be used to initialize all above settings. + * + * In this example, we use both three kinds of trigger source. + * We firstly use Wakeup Timer to trigger sequence 0/1/2. The sequence is used to write registers and + * generate a custom-interrupt. We detect the interrupt to identify which sequence is running. + * Finally, we use GPIO to trigger sequence3. + * + * When there is conflict between trigger signals, for example, GPIO triggered one sequence that is running, + * current strategy is ignore this trigger. + * Use @reg SEQCfg_Type to configure sequencer. + * + * @note: connect GP2 and GP1 together. This demo show how to use GPIO to trigger sequencer. GP2 is the trigger input. + * We use GP1 to generate the trigger signal, while in real case, it should be the MCU's GPIO. +*/ +#include "ad5940.h" +#include +#include "string.h" + +int32_t SeqISR(void); +BoolFlag bSeqEnd = bFALSE; +static const uint32_t Seq0Commands[]= +{ + SEQ_WR(REG_AFE_SWCON, 0x0000), + SEQ_INT0(), /* generate custom-interrupt 0. We can generate any custom interrupt(SEQ_INT0/1/2/3()) by sequencer. */ +}; + +static const uint32_t Seq1Commands[]= +{ + SEQ_WR(REG_AFE_SWCON, 0x1111), + SEQ_INT1(), /* generate custom-interrupt 0 */ + SEQ_STOP(), /* Disable sequencer */ +}; + +static const uint32_t Seq2Commands[]= +{ + SEQ_WR(REG_AFE_SWCON, 0x2222), + SEQ_INT2(), /* generate custom-interrupt 1 */ +}; + +static const uint32_t Seq3Commands[]= +{ + SEQ_WR(REG_AFE_SWCON, 0x3333), + SEQ_INT3(), /* generate custom-interrupt 1 */ +}; + +static int32_t AD5940PlatformCfg(void) +{ + CLKCfg_Type clk_cfg; + FIFOCfg_Type fifo_cfg; + AGPIOCfg_Type gpio_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); /* Call this right after AFE reset */ + /* Platform configuration */ + /* Step1. Configure clock */ + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + /* Step2. Configure FIFO and Sequencer*/ + fifo_cfg.FIFOEn = bFALSE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = 4;//AppIMPCfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); + fifo_cfg.FIFOEn = bTRUE; + AD5940_FIFOCfg(&fifo_cfg); + + /* Step3. Interrupt controller */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); /* Enable all interrupt in INTC1, so we can check INTC flags */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_ENDSEQ|AFEINTSRC_CUSTOMINT0|AFEINTSRC_CUSTOMINT1|AFEINTSRC_CUSTOMINT2|AFEINTSRC_CUSTOMINT3, bTRUE); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Step4: Reconfigure GPIO */ + /* GP0: the interrupt output. + GP1: normal GPIO + GP2: used as trigger to sequence2. If valid trigger signal detected, sequencer will try to run sequence2. + GP3: not used. + GP4: controlled by sequencer. + Others: not used. The default function is mode0. + */ + gpio_cfg.FuncSet = GP0_INT|GP1_GPIO|GP2_TRIG|GP4_SYNC; + gpio_cfg.InputEnSet = AGPIO_Pin2; + gpio_cfg.OutputEnSet = AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin2|AGPIO_Pin4; + gpio_cfg.OutVal = 0; + gpio_cfg.PullEnSet = 0; + AD5940_AGPIOCfg(&gpio_cfg); + return 0; +} + +#define SEQ0ADDR 0 +#define SEQ1ADDR 16 +#define SEQ2ADDR 32 +#define SEQ3ADDR 48 + +void AD5940_Main(void) +{ + SEQCfg_Type seq_cfg; + FIFOCfg_Type fifo_cfg; + WUPTCfg_Type wupt_cfg; + SEQInfo_Type seqinfo0, seqinfo1, seqinfo2, seqinfo3; + SeqGpioTrig_Cfg seqgpiotrig_cfg; + AD5940PlatformCfg(); + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bTRUE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bTRUE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Reconfigure FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_DFT, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC3; + fifo_cfg.FIFOThresh = 4; + AD5940_FIFOCfg(&fifo_cfg); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + seqinfo0.pSeqCmd = Seq0Commands; + seqinfo0.SeqId = SEQID_0; + seqinfo0.SeqLen = SEQ_LEN(Seq0Commands); + seqinfo0.SeqRamAddr = SEQ0ADDR; + seqinfo0.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo0); /* Configure sequence0 info and write commands to SRAM */ + + seqinfo1.pSeqCmd = Seq1Commands; + seqinfo1.SeqId = SEQID_1; + seqinfo1.SeqLen = SEQ_LEN(Seq1Commands); + seqinfo1.SeqRamAddr = SEQ1ADDR; + seqinfo1.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo1); + + seqinfo2.pSeqCmd = Seq2Commands; + seqinfo2.SeqId = SEQID_2; + seqinfo2.SeqLen = SEQ_LEN(Seq2Commands); + seqinfo2.SeqRamAddr = SEQ2ADDR; + seqinfo2.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo2); + + seqinfo3.pSeqCmd = Seq3Commands; + seqinfo3.SeqId = SEQID_3; + seqinfo3.SeqLen = SEQ_LEN(Seq3Commands); + seqinfo3.SeqRamAddr = SEQ3ADDR; + seqinfo3.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo3); + + /* Configure wakeup timer */ + wupt_cfg.WuptEn = bFALSE; /* Don't start it right now. */ + wupt_cfg.WuptEndSeq = WUPTENDSEQ_C; /* A->B->C->A->B-C */ + wupt_cfg.WuptOrder[0] = SEQID_0; /* Put SEQ0 to slotA */ + wupt_cfg.WuptOrder[1] = SEQID_3; /* Put SEQ3 to slotB */ + wupt_cfg.WuptOrder[2] = SEQID_1; /* Put SEQ1 to slotC */ + /* There is no need to init slot DEFGH, that's WuptOrder[3] to WuptOrder[7], becaue we don't use it. EndofSeq is C.*/ + wupt_cfg.SeqxSleepTime[SEQID_0] = 10; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(32000.0f*500/1000.0f) - 10 - 2; /* 500ms after, wakeup and trigger seq0 */ + wupt_cfg.SeqxSleepTime[SEQID_3] = 10; + wupt_cfg.SeqxWakeupTime[SEQID_3] = (uint32_t)(32000.0f*1000/1000.0f)- 10 -2; /* 1000ms after, trigger seq2 */ + wupt_cfg.SeqxSleepTime[SEQID_1] = 10; + wupt_cfg.SeqxWakeupTime[SEQID_1] = (uint32_t)(32000.0f*2000/1000.0f)- 10 -2; /* 2000ms after, trigger seq2 */ + AD5940_WUPTCfg(&wupt_cfg); + + printf("Test0: trigger sequencer by wakeup timer.\n"); + AD5940_WUPTCtrl(bTRUE); /* Enable wakeup timer. */ + while(1) + { + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + SeqISR(); + if(bSeqEnd) + break; + } + } + AD5940_WUPTCtrl(bFALSE); /* Wakeup timer is still running and triggering. Trigger is not accepted because sequencer + is disabled in last sequence(SEQ1) command. */ + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer again, because we disabled it in seq3 last command. */ + + /* Test MMR trigger */ + printf("\nTest1: trigger sequence2 manually by register write.\n"); + AD5940_SEQMmrTrig(SEQID_2); /* Trigger sequence2 manually. */ + /* Wait until CUSTMINT2 is set. We generate this interrupt in SEQ2 */ + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_CUSTOMINT2) == bFALSE); /* Test INTC1, we enabled all interrupts in INTC1. */ + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT2); + printf("sequence2 has been executed\n"); + printf("SWCON:0x%08x\n", AD5940_ReadReg(REG_AFE_SWCON)); + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + + /* Toggle GPIO to trigger sequencer2 */ + printf("\nTest2: trigger sequence2 manually by GPIO\n"); + printf("Please connect GP2 and GP1 together. We will set GP2 function to TRIG.\n" + "GP1 is set to GPIO function and is in output state. We use GP1 to toggle GP2.\n"); + AD5940_Delay10us(100*1000*2); + printf("Toggle GPIO now\n"); + + /* Allow GP2 falling edge to trigger sequence2 */ + seqgpiotrig_cfg.bEnable = bTRUE; + seqgpiotrig_cfg.PinSel = AGPIO_Pin2; + seqgpiotrig_cfg.SeqPinTrigMode = SEQPINTRIGMODE_FALLING; + AD5940_SEQGpioTrigCfg(&seqgpiotrig_cfg); + /* GP2 is connected to GP1 by user. + We generate falling edge on GP1(gpio, output) to control GP2(trigger, input). + */ + AD5940_AGPIOSet(AGPIO_Pin1); + AD5940_AGPIOClr(AGPIO_Pin1); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_CUSTOMINT2) == bFALSE); /* Test INTC1, we enabled all interrupts in INTC1. */ + + printf("Trigger received and sequence2 has been executed\n\n"); + printf("Sequencer test done!\n"); + while(1); +} + +int32_t SeqISR(void) +{ + uint32_t IntFlag, temp; + + IntFlag = AD5940_INTCGetFlag(AFEINTC_0); + + if(IntFlag & AFEINTSRC_CUSTOMINT0) + { + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT0); + printf("Custom INT0!\n"); + temp = AD5940_ReadReg(REG_AFE_SWCON); + printf("SWCON:0x%08x\n", temp); + } + if(IntFlag & AFEINTSRC_CUSTOMINT1) + { + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT1); + printf("Custom INT1!\n"); + temp = AD5940_ReadReg(REG_AFE_SWCON); + printf("SWCON:0x%08x\n", temp); + } + if(IntFlag & AFEINTSRC_CUSTOMINT2) + { + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT2); + printf("Custom INT2!\n"); + temp = AD5940_ReadReg(REG_AFE_SWCON); + printf("SWCON:0x%08x\n", temp); + } + if(IntFlag & AFEINTSRC_CUSTOMINT3) + { + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT3); + printf("Custom INT3!\n"); + temp = AD5940_ReadReg(REG_AFE_SWCON); + printf("SWCON:0x%08x\n", temp); + } + if(IntFlag & AFEINTSRC_ENDSEQ) /* This interrupt is generated when Sequencer is disabled. */ + { + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + printf("End of Sequence\n"); + bSeqEnd = bTRUE; + } + return AD5940ERR_OK; +} + diff --git a/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewd b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewp b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewp new file mode 100644 index 0000000..4dabd15 --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_Sequencer.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.rteconfig b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvoptx b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvoptx new file mode 100644 index 0000000..d0a63e7 --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvoptx @@ -0,0 +1,282 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 2 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Sequencer.c + AD5940_Sequencer.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvprojx b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvprojx new file mode 100644 index 0000000..c5bb832 --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/AD5940_Sequencer.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060528::V5.06 update 5 (build 528)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Sequencer.c + 1 + ..\AD5940_Sequencer.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Sequencer/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Sequencer/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..8222ff9 --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,145 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: $Author: ADI $ + @brief: The port for ADI's ADICUP3029 board. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + ///@todo optimize FIFO operation for ADUCM3029. + while(length--) + { + // Flush Tx FIFO + pADI_SPI0->CTL |= BITM_SPI_CTL_TFLUSH; + pADI_SPI0->CTL &=~BITM_SPI_CTL_TFLUSH; + //do spi read and write + pADI_SPI0->CNT = 1; + pADI_SPI0->TX = *pSendBuffer++; + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0); + while((pADI_SPI0->STAT&BITM_SPI_STAT_TXIRQ) == 0); + pADI_SPI0->STAT = BITM_SPI_STAT_TXIRQ|BITM_SPI_STAT_XFRDONE; + *pRecvBuff++ = pADI_SPI0->RX; + } +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Sequencer/ADICUP3029/main.c b/examples/AD5940_Sequencer/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Sequencer/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvoptx b/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvoptx new file mode 100644 index 0000000..1b18dab --- /dev/null +++ b/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Sequencer.c + AD5940_Sequencer.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvprojx b/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvprojx new file mode 100644 index 0000000..4e57968 --- /dev/null +++ b/examples/AD5940_Sequencer/NUCLEO-F411/AD5940_Sequencer.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Sequencer.c + 1 + ..\AD5940_Sequencer.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Sequencer/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Sequencer/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Sequencer/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Sequencer/NUCLEO-F411/main.c b/examples/AD5940_Sequencer/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Sequencer/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_SqrWaveVoltammetry/AD5940Main.c b/examples/AD5940_SqrWaveVoltammetry/AD5940Main.c new file mode 100644 index 0000000..8f5e8eb --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/AD5940Main.c @@ -0,0 +1,171 @@ +/*! + ***************************************************************************** + @file: AD5940Main.c + @author: $Author: nxu2 $ + @brief: Used to control specific application and process data. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "SqrWaveVoltammetry.h" + +/** + User could configure following parameters +**/ + +#define APPBUFF_SIZE 1024 +uint32_t AppBuff[APPBUFF_SIZE]; +float LFOSCFreq; /* Measured LFOSC frequency */ + +/** + * @brief An example to deal with data read back from AD5940. Here we just print data to UART + * @note UART has limited speed, it has impact when sample rate is fast. Try to print some of the data not all of them. + * @param pData: the buffer stored data for this application. The data from FIFO has been pre-processed. + * @param DataCount: The available data count in buffer pData. + * @return return 0. +*/ +static int32_t RampShowResult(float *pData, uint32_t DataCount) +{ + static uint32_t index; + /* Print data*/ + for(int i=0;iSeqStartAddr = 0x10; /* leave 16 commands for LFOSC calibration. */ + pRampCfg->MaxSeqLen = 512-0x10; /* 4kB/4 = 1024 */ + pRampCfg->RcalVal = 10000.0; /* 10kOhm RCAL */ + pRampCfg->ADCRefVolt = 1.820f; /* The real ADC reference voltage. Measure it from capacitor C12 with DMM. */ + pRampCfg->FifoThresh = 1023; /* Maximum value is 2kB/4-1 = 512-1. Set it to higher value to save power. */ + pRampCfg->SysClkFreq = 16000000.0f; /* System clock is 16MHz by default */ + pRampCfg->LFOSCClkFreq = LFOSCFreq; /* LFOSC frequency */ + pRampCfg->AdcPgaGain = ADCPGA_1P5; + pRampCfg->ADCSinc3Osr = ADCSINC3OSR_4; + + /* Step 2:Configure square wave signal parameters */ + pRampCfg->RampStartVolt = -400.0f; /* Measurement starts at 0V*/ + pRampCfg->RampPeakVolt = 0.0f; /* Measurement finishes at -0.4V */ + pRampCfg->VzeroStart = 1300.0f; /* Vzero is voltage on SE0 pin: 1.3V */ + pRampCfg->VzeroPeak = 1300.0f; /* Vzero is voltage on SE0 pin: 1.3V */ + pRampCfg->Frequency = 750; /* Frequency of square wave in Hz */ + pRampCfg->SqrWvAmplitude = 150; /* Amplitude of square wave in mV */ + pRampCfg->SqrWvRampIncrement = 5; /* Increment in mV*/ + pRampCfg->SampleDelay = 0.2f; /* Time between update DAC and ADC sample. Unit is ms and must be < (1/Frequency)/2 - 0.2*/ + pRampCfg->LPTIARtiaSel = LPTIARTIA_1K; /* Maximum current decides RTIA value */ + pRampCfg->bRampOneDir = bFALSE;//bTRUE; /* Only measure ramp in one direction */ +} + +void AD5940_Main(void) +{ + uint32_t temp; + AD5940PlatformCfg(); + AD5940RampStructInit(); + + //AD5940_McuSetLow(); + AppSWVInit(AppBuff, APPBUFF_SIZE); /* Initialize RAMP application. Provide a buffer, which is used to store sequencer commands */ + + + AD5940_Delay10us(100000); /* Add a delay to allow sensor reach equilibrium befor starting the measurement */ + AppSWVCtrl(APPCTRL_START, 0); /* Control IMP measurement to start. Second parameter has no meaning with this command. */ + + while(1) + { + if(AD5940_GetMCUIntFlag()) + { + AD5940_ClrMCUIntFlag(); + temp = APPBUFF_SIZE; + AppSWVISR(AppBuff, &temp); + RampShowResult((float*)AppBuff, temp); + } + + } +} + diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewd b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewp b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewp new file mode 100644 index 0000000..073a33c --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.ewp @@ -0,0 +1,2235 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940Main.c + + + $PROJ_DIR$\main.c + + + $PROJ_DIR$\..\SqrWaveVoltammetry.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.rteconfig b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvoptx b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvoptx new file mode 100644 index 0000000..24361b2 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvoptx @@ -0,0 +1,351 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.RampState + + + 1 + 1 + AppRAMPCfg.StepNumber,0x0A + + + 2 + 1 + AppRAMPCfg.CurrStepPos,0x0A + + + 3 + 1 + DACSeqLenMax,0x0A + + + 4 + 1 + StepsThisBlock,0x0A + + + 5 + 1 + SeqLen,0x0A + + + 6 + 1 + AppBuff + + + 7 + 1 + bIsFinalBlk + + + 8 + 1 + StepsThisBlock,0x0A + + + 9 + 1 + BlockStartSRAMAddr,0x0A + + + 10 + 1 + SRAMAddr,0x0A + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\SqrWaveVoltammetry.c + SqrWaveVoltammetry.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvprojx b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvprojx new file mode 100644 index 0000000..9df06ea --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/AD5940_SqrWaveVoltmmetry.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + SqrWaveVoltammetry.c + 1 + ..\SqrWaveVoltammetry.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/main.c b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvoptx b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvoptx new file mode 100644 index 0000000..ad92dae --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvoptx @@ -0,0 +1,333 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940Main.c + AD5940Main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\SqrWaveVoltammetry.c + SqrWaveVoltammetry.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvprojx b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvprojx new file mode 100644 index 0000000..fcbf4a6 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/AD5940_SqrWaveVoltammetry.uvprojx @@ -0,0 +1,589 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940Main.c + 1 + ..\AD5940Main.c + + + SqrWaveVoltammetry.c + 1 + ..\SqrWaveVoltammetry.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/main.c b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.c b/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.c new file mode 100644 index 0000000..4a59548 --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.c @@ -0,0 +1,941 @@ +/*! +***************************************************************************** +@file: SWVTest.c +@author: $Author: mlambe $ +@brief: Square Wave Voltammetry measurement sequences. +@date: Updated 15th May 2021 +----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +/** @addtogroup AD5940_System_Examples +* @{ +* @defgroup Ramp_Test_Example +* @brief Using sequencer to generate ramp signal and control ADC to sample data. +* @details +* @note Need to update code when runs at S2 silicon. +* @todo update LPDAC switch settings for S2 and LPDAC 1LSB bug. +* @todo Calibrate ADC/PGA firstly to get accurate current. (Voltage/Rtia = Current) +* @note The method to calculate LPDAC ouput voltage +* - #define LSB_DAC12BIT (2.2V/4095) +* - #define LSB_DAC6BIT (2.2V/4095*64) +* - Volt_12bit = Code12Bit*LSB_DAC12BIT + 0.2V +* - Volt_6bit = Code6Bit*LSB_DAC6BIT + 0.2V +* +* # Ramp Signal Parameters definition +* +* @code +* (Vbias - Vzero): +* RampPeakVolt --> / +* / +* / +* / +* / +* / +* / +* / +* / +* RampStartVolt --> / +* +* Vzero: If there is no limitation on Vzero, Set VzeroStart to 2.2 and VzeroPeak to 0.4V +* Voltage VzeroStart --> ______ +* | +* Voltage VzeroPeak --> |_____ +* +* +* Vbias: Vbias is calculated from RampPeakVolt, RampStartVolt, VzeroStart and VzeroPeak. +* Voltage VbiasPeak --> /| / +* / | / +* / | / +* / | / +* Voltage VbiasStart --> / |/ +* +* RampState define: S0 | S1 | S2 | +* @endcode +* +* # The sequencer method to do Ramp test. +* The Ramp test need to update DAC data in real time to generate required waveform, and control ADC to start sample data. \n +* We used two kinds of sequence to realize it. One is to control DAC where SEQ0 and SEQ1 are used, another sequence SEQ2 controls ADC. +* ## Sequence Allocation +* SEQ3 is used to initialize AD5940.\n +* SEQ0/1 is used to generate voltage step.\n +* SEQ2 is used to startup ADC to sample one point. +* +* |SRAM allocation||| +* |------------|----------------|---------| +* |SequenceID | AddressRange | Usage | +* |SEQID_3 | 0x0000-0xzzzz | Initialization sequence| +* |SEQID_2 | 0xzzzz-0xyyyy | ADC control sequence, run this sequence will get one ADC result| +* |SEQID_0/1 | 0xyyyy-end | DAC update sequence. If size if not enough for all steps, use it like a FIFO.| +* Where 0xzzzz equals to SEQ3 length, 0xyyyy equals to sum of SEQ2 and SEQ3 length. +* In one word, put SEQ2 commands right after SEQ3. Don't waste any SRAM resource. +* ##Sequencer Running Order +* The sequencer running order is set to firstly update DAC then start ADC. Repeat this process until all waveform generated. +* Below is explanation of sequencer running order. +* @code +* DAC voltage changes with sequencer, assume each step is 0.05V start from 0.2V +* 400mV-> _______ +* 350mV-> _____ | +* 300mV-> _____ | |____| +* 250mV-> | |____| +* 200mV-> __| +* Update DAC: ? ? ? ? ? ? -No update +* SEQ0 SEQ1 SEQ0 SEQ1 SEQ0 SEQ1 SEQ0 +* | / | / | / | / | / | / | +* SEQ2 SEQ2 SEQ2 SEQ2 SEQ2 SEQ2 |The final sequence is set to disable sequencer +* WuptTrigger ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +* Time Spend |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 |t1| t2 +* |The following triggers are ignored because sequencer is disabled +* Wupt: Wakeup Timer +* @endcode +* +* The final sequence will disable sequencer thus disable the whole measurement. It could be SEQ0 or SEQ1. \n +* SEQ2 will always follow SEQ0/SEQ1 to turn on ADC to sample data. \n +* SEQ0/1 and SEQ2 is managed by wakeup timer. The time delay between SEQ0/1 and SEQ +* is set by user. Reason is that after updating DAC, signal needs some time to settle before sample it. \n +* In above figure, the time t1 is the delay set by user which controls where ADC starts sampling. +* +* SEQ2 commands are fixed. Function is simply turn on ADC for a while and turn off it +* after required number of data ready. \n +* SEQ0/1 is always changing its start address to update DAC with different voltage. \n +* Check above figure we can see SEQ0/SEQ1 is repeatedly trigged by Wakeuptimer, if we don't change the start +* Address of SEQ0/SEQ1, they will always update DAC with same data, thus no waveform generated. +* +* Considering below SEQ0 command which is similar for SEQ1 on modifying SEQxINFO register.: +* +* **Sequencer Command Block 1** +* @code +* //Total sequence command length is **4** +* SEQ_WR(REG_AFE_LPDACDAT0, 0x1234); //update DAC with correct voltage +* SEQ_WAIT(10); //wait 10clocks to allow DAC update +* SEQ_WR(REG_AFE_SEQ1INFO, NextAddr|SeqLen); //The next sequence is SEQ1, set it to correct address where stores commands. +* SEQ_SLP(); //Put AFE to hibernate/sleep mode. +* @endcode +* +* It will update DAC with data 0x1234, then it wait 10 clocks to allow LPDAC update. +* The final command is to send AFE to sleep state. +* The third commands here is to allow modify sequence infomation by sequencer. Above piece of commands are running by SEQ0. +* It modify the start address of **SEQ1**. SEQ1 has same ability to update DAC data but with **different** data. +* By the time Wakeup Timer triggers SEQ1, it will update DAC with correct data. +* +* The last block of sequencer command is to disable sequencer. +* +* **Sequencer Command Block 2** +* @code +* SEQ_NOP(); +* SEQ_NOP(); +* SEQ_NOP(); +* SEQ_STOP(); //Put AFE to hibernate/sleep mode. +* @endcode +* +* Total SRAM is 6kB in AD594x. In normal other application, we use 2kB for sequencer and 4kB for FIFO. +* Assume the ramp test require 128 steps, then the sequence length is 4*128 = 512, each command need 4Byte. So it costs 2kB SRAM. +* When ramp test requires hundres of voltage steps(ADC samples), 2kB SRAM is far from enough. We recommend to use 4kB for sequencer +* and 2kB for data FIFO. +* If ramp test require more steps, then we need to update SRAM with commands dynamically, use it as a ping-pong buffer. +* +* **Sequencer Command Block 3** +* @code +* SEQ_WR(REG_AFE_LPDACDAT0, 0x1234); +* SEQ_WAIT(10); +* SEQ_WR(REG_AFE_SEQ1INFO, NextAddr|SeqLen); +* SEQ_INT0(); //Generate custom interrupt 0 to inform MCU to update ping-pong buffer. +* @endcode +* +* @{ +* **/ + +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" +#include "SqrWaveVoltammetry.h" + +/** +* @brief The ramp application paramters. +* @details Do not modify following default parameters. Use the function in AD5940Main.c to change it. +* +* */ +static AppSWVCfg_Type AppSWVCfg = +{ + .bParaChanged = bFALSE, + .SeqStartAddr = 0, + .MaxSeqLen = 0, + .SeqStartAddrCal = 0, + .MaxSeqLenCal = 0, + + .LFOSCClkFreq = 32000.0, + .SysClkFreq = 16000000.0, + .AdcClkFreq = 16000000.0, + .RcalVal = 10000.0, + .ADCRefVolt = 1820.0f, /* 1.8V or 1.82V? */ + /* Describe Ramp signal */ + .RampStartVolt = -1000.0f, /* -1V */ + .RampPeakVolt = +1000.0f, /* +1V */ + .VzeroStart = 2200.0f, /* 2.2V */ + .VzeroPeak = 400.0f, /* 0.4V */ + .StepNumber = 866, + /* Receive path configuration */ + .SampleDelay = 1.0f, /* 1ms */ + .LPTIARtiaSel = LPTIARTIA_20K, /* Maximum current decides RTIA value */ + .ExternalRtiaValue = 20000.0f, /* Optional external RTIA resistore value in Ohm. */ + .AdcPgaGain = ADCPGA_1, + .ADCSinc3Osr = ADCSINC3OSR_4, + .FifoThresh = 4, + /* Priviate parameters */ + .SWVInited = bFALSE, + .StopRequired = bFALSE, + .RampState = SWV_STATE0, + .bFirstDACSeq = bTRUE, + .bSqrWaveHiLevel = bFALSE, + /* Configure Square wave */ + .Frequency = 25, /* Frequency in Hz */ + .SqrWvAmplitude = 25, /* Square wave amplitude in mV */ + .SqrWvRampIncrement = 5, /* Ramp increment in mV*/ +}; + +/** +* @todo add paramater check. +* SampleDelay will limited by wakeup timer, check WUPT register value calculation equation below for reference. +* SampleDelay > 1.0ms is acceptable. +* ... +* */ + +/** +* @brief This function is provided for upper controllers that want to change +* application parameters specially for user defined parameters. +* @param pCfg: The pointer used to store application configuration structure pointer. +* @return none. +*/ +AD5940Err AppSWVGetCfg(void *pCfg) +{ + if(pCfg) + { + *(AppSWVCfg_Type**)pCfg = &AppSWVCfg; + return AD5940ERR_OK; + } + return AD5940ERR_PARA; +} + +/** +* @brief Control application like start, stop. +* @param Command: The command for this application, select from below paramters +* - APPCTRL_START: start the measurement. Note: the ramp test need firstly call function AppSWVInit() every time before start it. +* - APPCTRL_STOPNOW: Stop the measurement immediately. +* - APPCTRL_STOPSYNC: Stop the measuremnt when current measured data is read back. +* - APPCTRL_SHUTDOWN: Stop the measurement immediately and put AFE to shut down mode(turn off LP loop and enter hibernate). +* @return none. +*/ +AD5940Err AppSWVCtrl(uint32_t Command, void *pPara) +{ + switch (Command) + { + case APPCTRL_START: + { + WUPTCfg_Type wupt_cfg; + + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + if(AppSWVCfg.SWVInited == bFALSE) + return AD5940ERR_APPERROR; + /** + * SWV example is special, because the sequence is dynamically generated. + * Before 'START' ramp test, call AppSWVInit firstly. + */ + if(AppSWVCfg.RampState == SWV_STOP) + return AD5940ERR_APPERROR; + + /* Start it */ + wupt_cfg.WuptEn = bTRUE; + wupt_cfg.WuptEndSeq = WUPTENDSEQ_D; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.WuptOrder[1] = SEQID_2; + wupt_cfg.WuptOrder[2] = SEQID_1; + wupt_cfg.WuptOrder[3] = SEQID_2; + wupt_cfg.SeqxSleepTime[SEQID_2] = 1; + wupt_cfg.SeqxWakeupTime[SEQID_2] = (uint32_t)(AppSWVCfg.LFOSCClkFreq*AppSWVCfg.SampleDelay/1000.0f) - 1; + wupt_cfg.SeqxSleepTime[SEQID_0] = 1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(AppSWVCfg.LFOSCClkFreq*((1/AppSWVCfg.Frequency*500) - AppSWVCfg.SampleDelay)/1000.0f) - 4; + wupt_cfg.SeqxSleepTime[SEQID_1] = wupt_cfg.SeqxSleepTime[SEQID_0]; + wupt_cfg.SeqxWakeupTime[SEQID_1] = wupt_cfg.SeqxWakeupTime[SEQID_0]; + + AD5940_WUPTCfg(&wupt_cfg); + break; + } + case APPCTRL_STOPNOW: + { + if(AD5940_WakeUp(10) > 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + /* Start Wupt right now */ + AD5940_WUPTCtrl(bFALSE); + /* There is chance this operation will fail because sequencer could put AFE back + to hibernate mode just after waking up. Use STOPSYNC is better. */ + AD5940_WUPTCtrl(bFALSE); + break; + } + case APPCTRL_STOPSYNC: + { + AppSWVCfg.StopRequired = bTRUE; + break; + } + case APPCTRL_SHUTDOWN: + { + AppSWVCtrl(APPCTRL_STOPNOW, 0); /* Stop the measurement if it's running. */ + AD5940_ShutDownS(); + } + break; + default: + break; + } + return AD5940ERR_OK; +} + +/** +* @brief Generate initialization sequence and write the commands to SRAM. +* @return return error code. +*/ +static AD5940Err AppSWVSeqInitGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + AFERefCfg_Type aferef_cfg; + LPLoopCfg_Type lploop_cfg; + DSPCfg_Type dsp_cfg; + /* Start sequence generator here */ + AD5940_SEQGenCtrl(bTRUE); + + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + lploop_cfg.LpAmpCfg.LpAmpSel = LPAMP0; + lploop_cfg.LpAmpCfg.LpAmpPwrMod = LPAMPPWR_BOOST3; + lploop_cfg.LpAmpCfg.LpPaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaPwrEn = bTRUE; + lploop_cfg.LpAmpCfg.LpTiaRf = LPTIARF_20K; + lploop_cfg.LpAmpCfg.LpTiaRload = LPTIARLOAD_SHORT; + lploop_cfg.LpAmpCfg.LpTiaRtia = AppSWVCfg.LPTIARtiaSel; + if(AppSWVCfg.LPTIARtiaSel == LPTIARTIA_OPEN) /* User want to use external RTIA */ + lploop_cfg.LpAmpCfg.LpTiaSW = LPTIASW(13)|LPTIASW(2)|LPTIASW(4)|LPTIASW(5)|LPTIASW(9)/*|LPTIASW(10)*/; /* SW5/9 is closed to support external RTIA resistor */ + else + lploop_cfg.LpAmpCfg.LpTiaSW = /*LPTIASW(13)|*/LPTIASW(2)|LPTIASW(4); + lploop_cfg.LpDacCfg.LpdacSel = LPDAC0; + lploop_cfg.LpDacCfg.DacData6Bit = (uint32_t)((AppSWVCfg.VzeroStart - 200.0f)/DAC6BITVOLT_1LSB); + lploop_cfg.LpDacCfg.DacData12Bit = (int32_t)((AppSWVCfg.RampStartVolt)/DAC12BITVOLT_1LSB) + lploop_cfg.LpDacCfg.DacData6Bit*64 ; + lploop_cfg.LpDacCfg.DataRst = bFALSE; + lploop_cfg.LpDacCfg.LpDacSW = LPDACSW_VBIAS2LPPA/*|LPDACSW_VBIAS2PIN*/|LPDACSW_VZERO2LPTIA/*|LPDACSW_VZERO2PIN*/; + lploop_cfg.LpDacCfg.LpDacRef = LPDACREF_2P5; + lploop_cfg.LpDacCfg.LpDacSrc = LPDACSRC_MMR; + lploop_cfg.LpDacCfg.LpDacVbiasMux = LPDACVBIAS_12BIT; /* Step Vbias. Use 12bit DAC ouput */ + lploop_cfg.LpDacCfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Base is Vzero. Use 6 bit DAC ouput */ + lploop_cfg.LpDacCfg.PowerEn = bTRUE; + AD5940_LPLoopCfgS(&lploop_cfg); + + AD5940_StructInit(&dsp_cfg, sizeof(dsp_cfg)); + dsp_cfg.ADCBaseCfg.ADCMuxN = ADCMUXN_LPTIA0_N; + dsp_cfg.ADCBaseCfg.ADCMuxP = ADCMUXP_LPTIA0_P; + dsp_cfg.ADCBaseCfg.ADCPga = AppSWVCfg.AdcPgaGain; + + dsp_cfg.ADCFilterCfg.ADCSinc3Osr = AppSWVCfg.ADCSinc3Osr; + dsp_cfg.ADCFilterCfg.ADCRate = ADCRATE_800KHZ; /* ADC runs at 16MHz clock in this example, sample rate is 800kHz */ + dsp_cfg.ADCFilterCfg.BpSinc3 = bFALSE; /* We use data from SINC3 filter */ + dsp_cfg.ADCFilterCfg.Sinc2NotchEnable = bTRUE; + dsp_cfg.ADCFilterCfg.BpNotch = bTRUE; + dsp_cfg.ADCFilterCfg.ADCSinc2Osr = ADCSINC2OSR_1067; /* Don't care */ + dsp_cfg.ADCFilterCfg.ADCAvgNum = ADCAVGNUM_2; /* Don't care because it's disabled */ + AD5940_DSPCfgS(&dsp_cfg); + + /* Sequence end. */ + AD5940_SEQGenInsert(SEQ_STOP()); /* Add one extra command to disable sequencer for initialization sequence because we only want it to run one time. */ + + /* Stop sequence generator here */ + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + if(error == AD5940ERR_OK) + { + AD5940_StructInit(&AppSWVCfg.InitSeqInfo, sizeof(AppSWVCfg.InitSeqInfo)); + if(SeqLen >= AppSWVCfg.MaxSeqLen) + return AD5940ERR_SEQLEN; + + AppSWVCfg.InitSeqInfo.SeqId = SEQID_3; + AppSWVCfg.InitSeqInfo.SeqRamAddr = AppSWVCfg.SeqStartAddr; + AppSWVCfg.InitSeqInfo.pSeqCmd = pSeqCmd; + AppSWVCfg.InitSeqInfo.SeqLen = SeqLen; + AppSWVCfg.InitSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppSWVCfg.InitSeqInfo); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** +* @brief Generate ADC control sequence and write the commands to SRAM. +* @return return error code. +*/ +static AD5940Err AppSWVSeqADCCtrlGen(void) +{ + AD5940Err error = AD5940ERR_OK; + const uint32_t *pSeqCmd; + uint32_t SeqLen; + + uint32_t WaitClks; + ClksCalInfo_Type clks_cal; + + clks_cal.DataCount = 1; /* Sample one point everytime */ + clks_cal.DataType = DATATYPE_SINC3; + clks_cal.ADCSinc3Osr = AppSWVCfg.ADCSinc3Osr; + clks_cal.ADCSinc2Osr = ADCSINC2OSR_1067; /* Don't care */ + clks_cal.ADCAvgNum = ADCAVGNUM_2; /* Don't care */ + clks_cal.RatioSys2AdcClk = AppSWVCfg.SysClkFreq/AppSWVCfg.AdcClkFreq; + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + AD5940_SEQGenCtrl(bTRUE); + AD5940_SEQGpioCtrlS(AGPIO_Pin2); + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); + AD5940_SEQGenInsert(SEQ_WAIT(16*100)); /* wait 250us for reference power up */ + AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert and DFT */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); /* wait for first data ready */ + AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV, bFALSE); /* Stop ADC */ + AD5940_SEQGpioCtrlS(0); + AD5940_EnterSleepS();/* Goto hibernate */ + /* Sequence end. */ + error = AD5940_SEQGenFetchSeq(&pSeqCmd, &SeqLen); + AD5940_SEQGenCtrl(bFALSE); /* Stop sequencer generator */ + + if(error == AD5940ERR_OK) + { + AD5940_StructInit(&AppSWVCfg.ADCSeqInfo, sizeof(AppSWVCfg.ADCSeqInfo)); + if((SeqLen + AppSWVCfg.InitSeqInfo.SeqLen) >= AppSWVCfg.MaxSeqLen) + return AD5940ERR_SEQLEN; + AppSWVCfg.ADCSeqInfo.SeqId = SEQID_2; + AppSWVCfg.ADCSeqInfo.SeqRamAddr = AppSWVCfg.InitSeqInfo.SeqRamAddr + AppSWVCfg.InitSeqInfo.SeqLen ; + AppSWVCfg.ADCSeqInfo.pSeqCmd = pSeqCmd; + AppSWVCfg.ADCSeqInfo.SeqLen = SeqLen; + AppSWVCfg.ADCSeqInfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&AppSWVCfg.ADCSeqInfo); + } + else + return error; /* Error */ + return AD5940ERR_OK; +} + +/** +* @brief Calculate DAC code step by step. +* @details The calculation is based on following variables. +* - RampStartVolt +* - RampPeakVolt +* - VzeroStart +* - VzeroPeak +* - StepNumber +* Below variables must be initialzed before call this function. It's done in function @ref AppSWVInit +* - RampState +* - CurrStepPos +* - bDACCodeInc +* - CurrRampCode +* @return return error code. +*/ +static AD5940Err RampDacRegUpdate(uint32_t *pDACData) +{ + uint32_t VbiasCode, VzeroCode; + + if (AppSWVCfg.bRampOneDir) + { + if(AppSWVCfg.RampStartVolt > AppSWVCfg.RampPeakVolt) + AppSWVCfg.bDACCodeInc = bFALSE; + switch(AppSWVCfg.RampState) + { + case SWV_STATE0: /* Begin of Ramp */ + AppSWVCfg.CurrVzeroCode = (uint32_t)((AppSWVCfg.VzeroStart - 200.0f)/DAC6BITVOLT_1LSB); + AppSWVCfg.RampState = SWV_STATE1; + break; + case SWV_STATE1: + if(AppSWVCfg.CurrStepPos >= AppSWVCfg.StepNumber/2) + { + AppSWVCfg.RampState = SWV_STATE2; /* Enter State2 */ + AppSWVCfg.CurrVzeroCode = (uint32_t)((AppSWVCfg.VzeroPeak - 200.0f)/DAC6BITVOLT_1LSB); + } + break; + case SWV_STATE2: + if(AppSWVCfg.CurrStepPos >= AppSWVCfg.StepNumber) + AppSWVCfg.RampState = SWV_STOP; /* Enter Stop */ + break; + case SWV_STOP: + break; + } + } + + else + { + switch(AppSWVCfg.RampState) + { + case SWV_STATE0: /* Begin of Ramp */ + AppSWVCfg.CurrVzeroCode = (uint32_t)((AppSWVCfg.VzeroStart - 200.0f)/DAC6BITVOLT_1LSB); + AppSWVCfg.RampState = SWV_STATE1; + break; + + case SWV_STATE1: + if(AppSWVCfg.CurrStepPos >= AppSWVCfg.StepNumber/4) + { + AppSWVCfg.RampState = SWV_STATE2; /* Enter State2 */ + AppSWVCfg.CurrVzeroCode = (uint32_t)((AppSWVCfg.VzeroPeak - 200.0f)/DAC6BITVOLT_1LSB); + } + break; + + case SWV_STATE2: + if(AppSWVCfg.CurrStepPos >= (AppSWVCfg.StepNumber*2)/4) + { + AppSWVCfg.RampState = SWV_STATE3; /* Enter State2 */ + AppSWVCfg.bDACCodeInc = AppSWVCfg.bDACCodeInc ? bFALSE : bTRUE; + } + break; + case SWV_STATE3: + if(AppSWVCfg.CurrStepPos >= (AppSWVCfg.StepNumber*3)/4) + { + AppSWVCfg.RampState = SWV_STATE4; /* Enter State2 */ + AppSWVCfg.CurrVzeroCode = (uint32_t)((AppSWVCfg.VzeroPeak - 200.0f)/DAC6BITVOLT_1LSB); + } + break; + case SWV_STATE4: + if(AppSWVCfg.CurrStepPos >= (AppSWVCfg.StepNumber)) + AppSWVCfg.RampState = SWV_STOP; /* Enter Stop */ + break; + case SWV_STOP: + break; + } + + } + AppSWVCfg.CurrStepPos++; + if(AppSWVCfg.bSqrWaveHiLevel) + { + if(AppSWVCfg.bDACCodeInc) + AppSWVCfg.CurrRampCode -= (AppSWVCfg.DACCodePerStep - AppSWVCfg.DACCodePerRamp); + else + AppSWVCfg.CurrRampCode -= AppSWVCfg.DACCodePerStep; + AppSWVCfg.bSqrWaveHiLevel = bFALSE; + }else + { + + if(AppSWVCfg.bDACCodeInc) + AppSWVCfg.CurrRampCode += AppSWVCfg.DACCodePerStep; + else + AppSWVCfg.CurrRampCode += (AppSWVCfg.DACCodePerStep - AppSWVCfg.DACCodePerRamp); + AppSWVCfg.bSqrWaveHiLevel = bTRUE; + } + VzeroCode = AppSWVCfg.CurrVzeroCode; + VbiasCode = (uint32_t)(VzeroCode*64 + AppSWVCfg.CurrRampCode); + + if(VbiasCode < (VzeroCode*64)) + VbiasCode --; + /* Truncate */ + if(VbiasCode > 4095) VbiasCode = 4095; + if(VzeroCode > 63) VzeroCode = 63; + *pDACData = (VzeroCode<<12)|VbiasCode; + return AD5940ERR_OK; +} + +/* Geneate sequence(s) to update DAC step by step */ +/* Note: this function doesn't need sequencer generator */ + +/** +* @brief Update DAC sequence in SRAM in real time. +* @details This function generates sequences to update DAC code step by step. It's also called in interrupt +* function when half commands in SRAM has been completed. We don't use sequence generator to save memory. +* Check more details from documentation of this example. @ref Ramp_Test_Example +* @return return error code +* +* */ +static AD5940Err AppSWVSeqDACCtrlGen(void) +{ +#define SEQLEN_ONESTEP 4L /* How many sequence commands are needed to update LPDAC. */ +#define CURRBLK_BLK0 0 /* Current block is BLOCK0 */ +#define CURRBLK_BLK1 1 /* Current block is BLOCK1 */ + AD5940Err error = AD5940ERR_OK; + uint32_t BlockStartSRAMAddr; + uint32_t DACData, SRAMAddr; + uint32_t i; + uint32_t StepsThisBlock; + BoolFlag bIsFinalBlk; + uint32_t SeqCmdBuff[SEQLEN_ONESTEP]; + + /* All below static variables are inited in below 'if' block. They are only used in this function */ + static BoolFlag bCmdForSeq0 = bTRUE; + static uint32_t DACSeqBlk0Addr, DACSeqBlk1Addr; + static uint32_t StepsRemainning, StepsPerBlock, DACSeqCurrBlk; + + AppSWVCfg.StepNumber = (uint32_t)(2*(AppSWVCfg.RampPeakVolt - AppSWVCfg.RampStartVolt)/AppSWVCfg.SqrWvRampIncrement); + if(AppSWVCfg.bRampOneDir == bFALSE) + { + AppSWVCfg.StepNumber*=2; + AppSWVCfg.StepNumber-=2; + } + //AppSWVCfg.FifoThresh = AppSWVCfg.StepNumber; + + if(AppSWVCfg.StepNumber >1020) + { + printf("Error: Selected Increment, StartVolt and PeakVolt exceed accepted limits \n"); + while(1){} + } + /* Do some math calculations */ + if(AppSWVCfg.bFirstDACSeq == bTRUE) + { + /* Reset bIsFirstRun at end of function. */ + int32_t DACSeqLenMax; + StepsRemainning = AppSWVCfg.StepNumber; + DACSeqLenMax = (int32_t)AppSWVCfg.MaxSeqLen - (int32_t)AppSWVCfg.InitSeqInfo.SeqLen - (int32_t)AppSWVCfg.ADCSeqInfo.SeqLen; + if(DACSeqLenMax < SEQLEN_ONESTEP*4) + return AD5940ERR_SEQLEN; /* No enough sequencer SRAM available */ + DACSeqLenMax -= SEQLEN_ONESTEP*2; /* Reserve commands each block */ + StepsPerBlock = DACSeqLenMax/SEQLEN_ONESTEP/2; + DACSeqBlk0Addr = AppSWVCfg.ADCSeqInfo.SeqRamAddr + AppSWVCfg.ADCSeqInfo.SeqLen; + DACSeqBlk1Addr = DACSeqBlk0Addr + StepsPerBlock*SEQLEN_ONESTEP; + DACSeqCurrBlk = CURRBLK_BLK0; + + /* Analog part */ + AppSWVCfg.DACCodePerStep = AppSWVCfg.SqrWvAmplitude/DAC12BITVOLT_1LSB; + AppSWVCfg.DACCodePerRamp = AppSWVCfg.SqrWvRampIncrement/DAC12BITVOLT_1LSB; + +#if ALIGIN_VOLT2LSB + AppSWVCfg.DACCodePerStep = (int32_t)AppSWVCfg.DACCodePerStep; + AppSWVCfg.DACCodePerRamp = (int32_t)AppSWVCfg.DACCodePerRamp; +#endif + if(AppSWVCfg.DACCodePerStep > 0) + AppSWVCfg.bDACCodeInc = bTRUE; + else + AppSWVCfg.bDACCodeInc = bFALSE; + AppSWVCfg.CurrRampCode = AppSWVCfg.RampStartVolt/DAC12BITVOLT_1LSB; + AppSWVCfg.RampState = SWV_STATE0; /* Init state to STATE0 */ + AppSWVCfg.CurrStepPos = 0; + + bCmdForSeq0 = bTRUE; /* Start with SEQ0 */ + } + + if(StepsRemainning == 0) return AD5940ERR_OK; /* Done. */ + bIsFinalBlk = StepsRemainning <= StepsPerBlock?bTRUE:bFALSE; + if(bIsFinalBlk) + StepsThisBlock = StepsRemainning; + else + StepsThisBlock = StepsPerBlock; + StepsRemainning -= StepsThisBlock; + + BlockStartSRAMAddr = (DACSeqCurrBlk == CURRBLK_BLK0)?\ +DACSeqBlk0Addr:DACSeqBlk1Addr; +SRAMAddr = BlockStartSRAMAddr; + +for(i=0; i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Start sequence generator */ + /* Initialize sequencer generator */ + if((AppSWVCfg.SWVInited == bFALSE)||\ + (AppSWVCfg.bParaChanged == bTRUE)) + { + if(pBuffer == 0) return AD5940ERR_PARA; + if(BufferSize == 0) return AD5940ERR_PARA; + + if(AppSWVCfg.LPTIARtiaSel == LPTIARTIA_OPEN) /* Internal RTIA is opened. User wants to use external RTIA resistor */ + { + AppSWVCfg.RtiaValue.Magnitude = AppSWVCfg.ExternalRtiaValue; + AppSWVCfg.RtiaValue.Phase = 0; + } + else + AppSWVRtiaCal(); + + AppSWVCfg.SWVInited = bFALSE; + AD5940_SEQGenInit(pBuffer, BufferSize); + /* Generate sequence and write them to SRAM start from address AppSWVCfg.SeqStartAddr */ + error = AppSWVSeqInitGen(); /* Application initialization sequence */ + if(error != AD5940ERR_OK) return error; + error = AppSWVSeqADCCtrlGen(); /* ADC control sequence */ + if(error != AD5940ERR_OK) return error; + AppSWVCfg.bParaChanged = bFALSE; /* Clear this flag as we already implemented the new configuration */ + } + + /* Reconfigure FIFO, The Rtia calibration function may generate data that stored to FIFO */ + AD5940_FIFOCtrlS(FIFOSRC_SINC3, bFALSE); /* Disable FIFO firstly */ + fifo_cfg.FIFOEn = bTRUE; + fifo_cfg.FIFOSrc = FIFOSRC_SINC3; + fifo_cfg.FIFOThresh = AppSWVCfg.FifoThresh; /* Change FIFO paramters */ + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; + AD5940_FIFOCfg(&fifo_cfg); + + /* Clear all interrupts */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Generate DAC sequence */ + AppSWVCfg.bFirstDACSeq = bTRUE; + error = AppSWVSeqDACCtrlGen(); + if(error != AD5940ERR_OK) return error; + + /* Configure sequence info. */ + AppSWVCfg.InitSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppSWVCfg.InitSeqInfo); + + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer */ + AD5940_SEQMmrTrig(AppSWVCfg.InitSeqInfo.SeqId); + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + + AppSWVCfg.ADCSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppSWVCfg.ADCSeqInfo); + + AppSWVCfg.DACSeqInfo.WriteSRAM = bFALSE; + AD5940_SEQInfoCfg(&AppSWVCfg.DACSeqInfo); + + AD5940_SEQCtrlS(bFALSE); + AD5940_WriteReg(REG_AFE_SEQCNT, 0); + AD5940_SEQCtrlS(bTRUE); /* Enable sequencer, and wait for trigger */ + AD5940_ClrMCUIntFlag(); /* Clear interrupt flag generated before */ + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); /* Set to low power mode */ + + AppSWVCfg.SWVInited = bTRUE; /* SWV application has been initialized. */ + return AD5940ERR_OK; +} + +/** +* @brief This function is called in ISR when AFE has been wakeup and we can access registers. +* @param pData: the buffer points to data read back from FIFO. Not needed for this application-SWV +* @param pDataCount: The data count in pData buffer. +* @return return error code. +*/ +static int32_t AppSWVRegModify(int32_t * const pData, uint32_t *pDataCount) +{ + if(AppSWVCfg.StopRequired == bTRUE) + { + AD5940_WUPTCtrl(bFALSE); + return AD5940ERR_OK; + } + return AD5940ERR_OK; +} + +/** +* @brief Depending on the data type, do appropriate data pre-process before return back to controller +* @param pData: the buffer points to data read back from FIFO. Not needed for this application-SWV +* @param pDataCount: The data count in pData buffer. +* @return return error code. +*/ +static int32_t AppSWVDataProcess(int32_t * const pData, uint32_t *pDataCount) +{ + uint32_t i, datacount; + datacount = *pDataCount; + float *pOut = (float *)pData; + + for(i=0;i 10) /* Wakeup AFE by read register, read 10 times at most */ + return AD5940ERR_WAKEUP; /* Wakeup Failed */ + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); + *pCount = 0; + IntFlag = AD5940_INTCGetFlag(AFEINTC_0); + if(IntFlag & AFEINTSRC_CUSTOMINT0) /* High priority. */ + { + AD5940Err error; + AD5940_INTCClrFlag(AFEINTSRC_CUSTOMINT0); + //AD5940_McuSetHigh(); + error = AppSWVSeqDACCtrlGen(); + //AD5940_McuSetLow(); + if(error != AD5940ERR_OK) return error; + // AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); + //AD5940_EnterSleepS(); /* If there is need to do AFE re-configure, do it here when AFE is in active state */ + } + if(IntFlag&AFEINTSRC_DATAFIFOTHRESH) + { + FifoCnt = AD5940_FIFOGetCnt(); + + if(FifoCnt > BuffCount) + { + ///@todo buffer is limited. + } + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AppSWVRegModify(pBuff, &FifoCnt); + // AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); + //AD5940_EnterSleepS(); + /* Process data */ + AppSWVDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + return 0; + } + if(IntFlag & AFEINTSRC_ENDSEQ) + { + FifoCnt = AD5940_FIFOGetCnt(); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + AD5940_FIFORd((uint32_t *)pBuff, FifoCnt); + /* Process data */ + AppSWVDataProcess((int32_t*)pBuff,&FifoCnt); + *pCount = FifoCnt; + AppSWVCtrl(APPCTRL_STOPNOW, 0); /* Stop the Wakeup Timer. */ + + } + return 0; +} + +/** +* @} +* @} +*/ diff --git a/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.h b/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.h new file mode 100644 index 0000000..a2e212c --- /dev/null +++ b/examples/AD5940_SqrWaveVoltammetry/SqrWaveVoltammetry.h @@ -0,0 +1,94 @@ +/*! + ***************************************************************************** + @file: RampTest.H + @author: $Author: nxu2 $ + @brief: Ramp Test header file. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#ifndef _SWVTEST_H_ +#define _SWVTEST_H_ +#include "ad5940.h" +#include +#include "string.h" +#include "math.h" + +/* Do not modify following parameters */ +#define ALIGIN_VOLT2LSB 0 /* Set it to 1 to align each voltage step to 1LSB of DAC. 0: step code is fractional. */ +#define DAC12BITVOLT_1LSB (2200.0f/4095) //mV +#define DAC6BITVOLT_1LSB (DAC12BITVOLT_1LSB*64) //mV + +/** + * The Ramp application related paramter structure +*/ +typedef struct +{ +/* Common configurations for all kinds of Application. */ + BoolFlag bParaChanged; /**< Indicate to generate sequence again. It's auto cleared by AppBIAInit */ + uint32_t SeqStartAddr; /**< Initialaztion sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLen; /**< Limit the maximum sequence. */ + uint32_t SeqStartAddrCal; /**< Not used for Ramp.Calibration sequence start address in SRAM of AD5940 */ + uint32_t MaxSeqLenCal; /**< Not used for Ramp. */ +/* Application related parameters */ + float LFOSCClkFreq; /**< The clock frequency of Wakeup Timer in Hz. Typically it's 32kHz. Leave it here in case we calibrate clock in software method */ + float SysClkFreq; /**< The real frequency of system clock */ + float AdcClkFreq; /**< The real frequency of ADC clock */ + float RcalVal; /**< Rcal value in Ohm */ + float ADCRefVolt; /**< The real ADC voltage in mV. */ + /* Describe Ramp signal */ + float RampStartVolt; /**< The start voltage of ramp signal in mV */ + float RampPeakVolt; /**< The maximum or minimum voltage of ramp in mV */ + float VzeroStart; /**< The start voltage of Vzero in mV. Set it to 2400mV by default */ + float VzeroPeak; /**< The peak voltage of Vzero in mV. Set it to 200mV by default */ + uint32_t StepNumber; /**< Total number of steps. Limited to 4095. */ + /* Receive path configuration */ + float SampleDelay; /**< The time delay between update DAC and start ADC */ + uint32_t LPTIARtiaSel; /**< Select RTIA */ + float ExternalRtiaValue; /**< The optional external RTIA value in Ohm. Disconnect internal RTIA to use external RTIA. When using internal RTIA, this value is ignored. */ + uint32_t AdcPgaGain; /**< PGA Gain select from GNPGA_1, GNPGA_1_5, GNPGA_2, GNPGA_4, GNPGA_9 !!! We must ensure signal is in range of +-1.5V which is limited by ADC input stage */ + uint8_t ADCSinc3Osr; /**< We use data from SINC3 filter. */ + /* Digital related */ + uint32_t FifoThresh; /**< FIFO Threshold value */ +/* Private variables for internal usage */ + BoolFlag SWVInited; /**< If the program run firstly, generated initialization sequence commands */ + fImpPol_Type RtiaValue; /**< Calibrated Rtia value */ + SEQInfo_Type InitSeqInfo; + SEQInfo_Type ADCSeqInfo; + BoolFlag bFirstDACSeq; /**< Init DAC sequence */ + SEQInfo_Type DACSeqInfo; /**< The first DAC update sequence info */ + uint32_t CurrStepPos; /**< Current position */ + float DACCodePerStep; /**< DAC codes in square waveform */ + float DACCodePerRamp; /**< DAC codes needed to ramp increment */ + float CurrRampCode; /**< */ + float Frequency; /**< Frequency of square wave */ + float SqrWvAmplitude; /**< Set amplitude of square wave */ + float SqrWvRampIncrement; /**< Ramp increase in mV */ + uint32_t CurrVzeroCode; + BoolFlag bDACCodeInc; /**< Increase DAC code. */ + BoolFlag bSqrWaveHiLevel; /**< Flag to indicate square wave high level */ + BoolFlag bRampOneDir; /**< Ramp in one direction only */ + BoolFlag StopRequired; /**< After FIFO is ready, stop the measurement sequence */ + enum _RampState{SWV_STATE0 = 0, SWV_STATE1, SWV_STATE2, SWV_STATE3, SWV_STATE4, SWV_STOP} RampState; +}AppSWVCfg_Type; + +#define APPCTRL_START 0 +#define APPCTRL_STOPNOW 1 +#define APPCTRL_STOPSYNC 2 +#define APPCTRL_SHUTDOWN 3 /**< Note: shutdown here means turn off everything and put AFE to hibernate mode. The word 'SHUT DOWN' is only used here. */ + +AD5940Err AppSWVInit(uint32_t *pBuffer, uint32_t BufferSize); +AD5940Err AppSWVGetCfg(void *pCfg); +AD5940Err AppSWVISR(void *pBuff, uint32_t *pCount); +AD5940Err AppSWVCtrl(uint32_t Command, void *pPara); +void AD5940_McuSetLow(void); +void AD5940_McuSetHigh(void); + +#endif diff --git a/examples/AD5940_Temperature/AD5940_Temperature.c b/examples/AD5940_Temperature/AD5940_Temperature.c new file mode 100644 index 0000000..59eef0e --- /dev/null +++ b/examples/AD5940_Temperature/AD5940_Temperature.c @@ -0,0 +1,225 @@ +/*! +***************************************************************************** +@file: AD5940_Temperature.c +@author: Neo Xu +@brief: AD5940 internal temperature sensor example with sequencer support. +----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" + +/** + * This example shows how to configure temperature sensor and using sequencer to take + * measurements. There is 'chop' function to remove offset errors from circuit, this + * feature is in register REG_AFE_TEMPSENS and is not included in this example. Enable + * this function will have better accuracy. +*/ + +#define SINC3OSR_SEL ADCSINC3OSR_4 +#define SINC2OSR_SEL ADCSINC2OSR_22 +#define MEASURE_FREQ 4.0f //4Hz(4SPS) +#define FIFO_THRESHOLD 4 //generate FIFO threshold interrupt every 4 data. + +#define BUFF_SIZE 128 +//this buffer will be used by sequence generator and used to store result from AD5940 +uint32_t buff[BUFF_SIZE]; +uint32_t data_count = 0; //the temperature data count in buffer. + +/* Initialize AD5940 basic blocks like clock */ +static int32_t AD5940PlatformCfg(void){ + CLKCfg_Type clk_cfg; + FIFOCfg_Type fifo_cfg; + SEQCfg_Type seq_cfg; + AGPIOCfg_Type gpio_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + /* Platform configuration */ + AD5940_Initialize(); + /* Step1. Configure clock */ + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + /* Step2. Configure FIFO and Sequencer*/ + fifo_cfg.FIFOEn = bFALSE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_SINC2NOTCH; + fifo_cfg.FIFOThresh = FIFO_THRESHOLD; + AD5940_FIFOCfg(&fifo_cfg); /* Disable to reset FIFO. */ + fifo_cfg.FIFOEn = bTRUE; + AD5940_FIFOCfg(&fifo_cfg); /* Enable FIFO here */ + /* Configure sequencer and stop it */ + seq_cfg.SeqMemSize = SEQMEMSIZE_2KB; + seq_cfg.SeqBreakEn = bFALSE; + seq_cfg.SeqIgnoreEn = bFALSE; + seq_cfg.SeqCntCRCClr = bTRUE; + seq_cfg.SeqEnable = bFALSE; + seq_cfg.SeqWrTimer = 0; + AD5940_SEQCfg(&seq_cfg); + + /* Step3. Interrupt controller */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); /* Enable all interrupt in Interrupt Controller 1, so we can check INTC flags */ + AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH, bTRUE); /* Interrupt Controller 0 will control GP0 to generate interrupt to MCU */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Step4: Reconfigure GPIO */ + gpio_cfg.FuncSet = GP6_SYNC|GP5_SYNC|GP2_TRIG|GP1_SYNC|GP0_INT; + gpio_cfg.InputEnSet = AGPIO_Pin2; + gpio_cfg.OutputEnSet = AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin5|AGPIO_Pin6; + gpio_cfg.OutVal = 0; + gpio_cfg.PullEnSet = AGPIO_Pin2; + AD5940_AGPIOCfg(&gpio_cfg); + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Enable AFE to enter sleep mode. */ + return 0; +} + +void _ad5940_analog_init(void){ + AFERefCfg_Type aferef_cfg; + ADCBaseCfg_Type adc_base; + ADCFilterCfg_Type adc_filter; + //init ad5940 for temperature measurement. + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); /* Init all to disable state */ + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; /* The High speed buffers are automatically turned off during hibernate */ + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control - turn off them to save power*/ + aferef_cfg.LpBandgapEn = bFALSE; + aferef_cfg.LpRefBufEn = bFALSE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + /* Initialize ADC basic function */ + adc_base.ADCMuxP = ADCMUXP_TEMPP; + adc_base.ADCMuxN = ADCMUXN_TEMPN; + adc_base.ADCPga = ADCPGA_1P5; + AD5940_ADCBaseCfgS(&adc_base); + /* Initialize ADC filters ADCRawData-->SINC3-->SINC2+NOTCH */ + adc_filter.ADCSinc3Osr = SINC3OSR_SEL; + adc_filter.ADCSinc2Osr = SINC2OSR_SEL; + adc_filter.ADCAvgNum = ADCAVGNUM_2; /* Don't care about it. Average function is only used for DFT */ + adc_filter.ADCRate = ADCRATE_800KHZ; /* If ADC clock is 32MHz, then set it to ADCRATE_1P6MHZ. Default is 16MHz, use ADCRATE_800KHZ. */ + adc_filter.BpNotch = bTRUE; /* SINC2+Notch is one block, when bypass notch filter, we can get fresh data from SINC2 filter. */ + adc_filter.BpSinc3 = bFALSE; /* We use SINC3 filter. */ + adc_filter.Sinc2NotchEnable = bTRUE; /* Enable the SINC2+Notch block. You can also use function AD5940_AFECtrlS */ + AD5940_ADCFilterCfgS(&adc_filter); + AD5940_AFECtrlS(AFECTRL_TEMPSPWR, bTRUE); /* Turn on temperature sensor power */ +} + +/** + * @brief Init everything we need to measure temperature. + */ +void AD5940_TemperatureInit(void){ + uint32_t const *pSeqCmd; + uint32_t seq_len; + SEQInfo_Type seq_info; + WUPTCfg_Type wupt_cfg; + ClksCalInfo_Type clks_cal; + uint32_t WaitClks; + clks_cal.DataType = DATATYPE_SINC2; + clks_cal.DataCount = 1; /* Sample one data when wakeup */ + clks_cal.ADCSinc2Osr = SINC2OSR_SEL; + clks_cal.ADCSinc3Osr = SINC3OSR_SEL; + clks_cal.ADCAvgNum = 0; + clks_cal.RatioSys2AdcClk = 1; /* Assume ADC clock is same as system clock */ + AD5940_ClksCalculate(&clks_cal, &WaitClks); + + _ad5940_analog_init(); + //generate sequence to measure temperature sensor output + AD5940_SEQGenInit(buff, BUFF_SIZE); //init sequence generator + AD5940_SEQGenCtrl(bTRUE); //from now on, record all register operations rather than write them to AD5940 through SPI. + + AD5940_SEQGpioCtrlS(AGPIO_Pin1); //pull high AGPIO1 so we know the sequencer is running by observing pin status with oscilloscope etc. + AD5940_SEQGenInsert(SEQ_WAIT(16*200)); /* Time for reference settling(if ad5940 is just wake up from hibernate mode) */ + AD5940_AFECtrlS(AFECTRL_ADCPWR, bTRUE); /* Turn ON ADC power */ + AD5940_SEQGenInsert(SEQ_WAIT(16*50)); /* wait another 50us for ADC to settle. */ + AD5940_AFECtrlS(AFECTRL_TEMPCNV|AFECTRL_ADCCNV, bTRUE); /* Start ADC convert */ + AD5940_SEQGenInsert(SEQ_WAIT(WaitClks)); + AD5940_AFECtrlS(AFECTRL_TEMPCNV|AFECTRL_ADCPWR, bFALSE); /* Stop ADC */ + AD5940_SEQGenInsert(SEQ_WAIT(20)); /* Add some delay before put AD5940 to hibernate, needs some clock to move data to FIFO. */ + AD5940_SEQGpioCtrlS(0); /* pull low AGPIO so we know end of sequence.*/ + AD5940_EnterSleepS();/* Goto hibernate */ + AD5940_SEQGenCtrl(bFALSE); /* stop sequence generator */ + if(AD5940_SEQGenFetchSeq(&pSeqCmd, &seq_len) != AD5940ERR_OK){ + puts("Sequence generator error!"); + } + seq_info.pSeqCmd = pSeqCmd; + seq_info.SeqId = SEQID_0; //use SEQ0 to run this sequence + seq_info.SeqLen = seq_len; + seq_info.SeqRamAddr = 0; //place this sequence from start of SRAM. + seq_info.WriteSRAM = bTRUE;// we need to write this sequence to AD5940 SRAM. + AD5940_SEQInfoCfg(&seq_info); + + //now configure wakeup timer to trigger above sequence periodically to measure temperature data. + wupt_cfg.WuptEn = bFALSE; // do not start it right now. + wupt_cfg.WuptEndSeq = WUPTENDSEQ_A; + wupt_cfg.WuptOrder[0] = SEQID_0; + wupt_cfg.SeqxSleepTime[SEQID_0] = 4-1; + wupt_cfg.SeqxWakeupTime[SEQID_0] = (uint32_t)(32e3f/MEASURE_FREQ)-4-1; + AD5940_WUPTCfg(&wupt_cfg); + //enable sequencer + AD5940_SEQCtrlS(bTRUE); //now sequencer is ready to be triggered. +} + +void AD5940_TemperatureISR(void){ + //process data from AD5940 FIFO. + uint32_t FifoCnt, IntcFlag; + if(AD5940_WakeUp(10) > 10){ /* Wakeup AFE by read register, read 10 times at most */ + printf("Failed to wakeup AD5940!\n"); + return; + } + AD5940_SleepKeyCtrlS(SLPKEY_LOCK); /* We need time to read data from FIFO, so, do not let AD5940 goes to hibernate automatically */ + IntcFlag = AD5940_INTCGetFlag(AFEINTC_0); + if(IntcFlag&AFEINTSRC_DATAFIFOTHRESH){ + FifoCnt = AD5940_FIFOGetCnt(); + FifoCnt = FifoCnt>BUFF_SIZE?BUFF_SIZE:FifoCnt; + data_count = FifoCnt; + AD5940_FIFORd(buff, FifoCnt); + AD5940_INTCClrFlag(AFEINTSRC_DATAFIFOTHRESH); + AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); /* Allow AFE to enter sleep mode. AFE will stay at active mode until sequencer trigger sleep */ + AD5940_EnterSleepS(); //If MCU is too slow, comment this line, otherwise there is chance the sequencer is running at this point. + } +} + +void AD5940_PrintResult(void){ + for(int i=0; i + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.ewp b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.ewp new file mode 100644 index 0000000..08d1838 --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_Temperature.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.rteconfig b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvoptx b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvoptx new file mode 100644 index 0000000..8a846a3 --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvoptx @@ -0,0 +1,289 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ADICUP3029 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"DAPLink CMSIS-DAP" -U0600000032624e45004a2015b1750046 -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + + 0 + 1 + ADCCode + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Temperature.c + AD5940_Temperature.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvprojx b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvprojx new file mode 100644 index 0000000..bc7cc5d --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/AD5940_Temperature.uvprojx @@ -0,0 +1,498 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ADICUP3029 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Temperature.c + 1 + ..\AD5940_Temperature.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + +
diff --git a/examples/AD5940_Temperature/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_Temperature/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_Temperature/ADICUP3029/main.c b/examples/AD5940_Temperature/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_Temperature/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvoptx b/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvoptx new file mode 100644 index 0000000..a8a0380 --- /dev/null +++ b/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvoptx @@ -0,0 +1,321 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + AD5940Prj + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_Temperature.c + AD5940_Temperature.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvprojx b/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvprojx new file mode 100644 index 0000000..94c71a6 --- /dev/null +++ b/examples/AD5940_Temperature/NUCLEO-F411/AD5940_Temperature.uvprojx @@ -0,0 +1,584 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + AD5940Prj + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_Temperature.c + 1 + ..\AD5940_Temperature.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + +
diff --git a/examples/AD5940_Temperature/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_Temperature/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_Temperature/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_Temperature/NUCLEO-F411/main.c b/examples/AD5940_Temperature/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_Temperature/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/AD5940_WG/AD5940_WGArbitrary.c b/examples/AD5940_WG/AD5940_WGArbitrary.c new file mode 100644 index 0000000..e7a61cd --- /dev/null +++ b/examples/AD5940_WG/AD5940_WGArbitrary.c @@ -0,0 +1,204 @@ +/*! + ***************************************************************************** + @file: AD5940_WGArbitrary.c + @author: $Author: nxu2 $ + @brief: Arbitrary Waveform Genertor using sequencer. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + + +#include "ad5940.h" +#include "stdio.h" +#include "string.h" + +#define SIN_FREQ 200000.0f /* 20kHz */ +#define SIN_AMPLITUDE 4095 /* unit is DAC peak to peak code. Maximum is 4095 */ +#define SAMPLE_RATE 2000000.0f /* 200kHz */ +#define SAMPLE_POINTS 200 /* 100 Points */ +#define SYSCLK_FREQ 16000000.0f /* System clock frequency is 16MHz for this example. */ + +#define APPBUFF_SIZE 1024 +static uint32_t AppBuff[APPBUFF_SIZE]; /* We use 2kB SRAM for sequencer in this example, maximum sequence length is 512 */ + +/** + * Write the method to generate Arbitrary Waveform. You can use expression or looup table. + * In this example, we use sin wave expression. +**/ +static uint32_t GetNextDacPoint(float Freq, float SampleRate, uint32_t Index) +{ + static uint32_t index; + float fRes; + int32_t iRes; + uint32_t Amplitude = SIN_AMPLITUDE; + if(Amplitude > 4095) Amplitude = 4095; + fRes = Amplitude/2.0f*sin(2*MATH_PI*Freq*Index/SampleRate); + iRes = (int32_t)(fRes) + 0x800; + printf("index:%d, fRes:%f, iRes:%d\n", index++, fRes, iRes); + if(iRes < 0) iRes = 0; + if(iRes > 0xfff) iRes = 0xfff; + return iRes; +} + +static AD5940Err BuildSequence(void) +{ + AD5940Err error = AD5940ERR_OK; + SEQCfg_Type seqcfg; + SEQInfo_Type seqinfo; + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HpLoopCfg; + AD5940_SEQGenInit(AppBuff, APPBUFF_SIZE); + AD5940_SEQGenCtrl(bTRUE); /* Start sequencer generator here */ + + /* sequence starts here */ + AD5940_SEQGpioCtrlS(AGPIO_Pin1); /* Pull high GPIO to indicate sequencer is running */ + AD5940_AFECtrlS(AFECTRL_ALL, bFALSE); + /* Step1. Init reference system */ + AD5940_StructInit(&aferef_cfg, sizeof(aferef_cfg)); /* Disable everything and only enable below functions */ + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + /* LP reference control */ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + AD5940_REFCfgS(&aferef_cfg); + + /* Step2: Configure HSLoop: HSDAC, HSTIA, SWMatrix and WG(MMR type) */ + AD5940_StructInit(&HpLoopCfg, sizeof(HpLoopCfg)); + HpLoopCfg.HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + HpLoopCfg.HsDacCfg.HsDacGain = HSDACGAIN_1; + HpLoopCfg.HsDacCfg.HsDacUpdateRate = 7; + + HpLoopCfg.HsTiaCfg.DiodeClose = bFALSE; + HpLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HpLoopCfg.HsTiaCfg.HstiaCtia = 16; /* 16pF */ + HpLoopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HpLoopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; /* Connect HSTIA output to DE0 pin */ + HpLoopCfg.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_200; + + HpLoopCfg.SWMatCfg.Dswitch = SWD_CE0; + HpLoopCfg.SWMatCfg.Pswitch = SWP_CE0; + HpLoopCfg.SWMatCfg.Nswitch = SWN_SE0LOAD; + HpLoopCfg.SWMatCfg.Tswitch = SWT_TRTIA|SWT_SE0LOAD; + + HpLoopCfg.WgCfg.WgType = WGTYPE_MMR; /* We use sequencer to update DAC data point by point. */ + HpLoopCfg.WgCfg.GainCalEn = bFALSE; + HpLoopCfg.WgCfg.OffsetCalEn = bFALSE; + HpLoopCfg.WgCfg.WgCode = 0x800; /* Init to mid-scale */ + AD5940_HSLoopCfgS(&HpLoopCfg); + + AD5940_AFECtrlS(AFECTRL_DACREFPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_EXTBUFPWR|AFECTRL_INAMPPWR|AFECTRL_HSTIAPWR|AFECTRL_HSDACPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); + + AD5940_StructInit(&seqcfg, sizeof(seqcfg)); /* Disable everything */ + seqcfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + seqcfg.SeqEnable = bTRUE; /* Keep sequencer enabled */ + seqcfg.SeqWrTimer = ((uint32_t)(SYSCLK_FREQ/SAMPLE_RATE + 0.5f)-1); /* Run next command after write timer and timer is set to update rate */ + if(seqcfg.SeqWrTimer > 255) + return AD5940ERR_PARA; + AD5940_SEQCfg(&seqcfg); + for(uint32_t i=0; i 512) + return AD5940ERR_SEQLEN; + seqinfo.SeqId = SEQID_0; + seqinfo.SeqRamAddr = 0; + seqinfo.WriteSRAM = bTRUE; + AD5940_SEQInfoCfg(&seqinfo); + + return AD5940ERR_OK; +} + +/* Initialize AD5940 basic blocks like clock */ +static int32_t AD5940PlatformCfg(void) +{ + CLKCfg_Type clk_cfg; + FIFOCfg_Type fifo_cfg; + AGPIOCfg_Type gpio_cfg; + + /* Use hardware reset */ + AD5940_HWReset(); + /* Platform configuration */ + AD5940_Initialize(); + /* Step1. Configure clock */ + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + /* Step2. Configure FIFO and Sequencer*/ + fifo_cfg.FIFOEn = bFALSE; + fifo_cfg.FIFOMode = FIFOMODE_FIFO; + fifo_cfg.FIFOSize = FIFOSIZE_4KB; /* 4kB for FIFO, The reset 2kB for sequencer */ + fifo_cfg.FIFOSrc = FIFOSRC_DFT; + fifo_cfg.FIFOThresh = 4;//AppBIACfg.FifoThresh; /* DFT result. One pair for RCAL, another for Rz. One DFT result have real part and imaginary part */ + AD5940_FIFOCfg(&fifo_cfg); /* Disable to reset FIFO. */ + fifo_cfg.FIFOEn = bTRUE; + AD5940_FIFOCfg(&fifo_cfg); /* Enable FIFO here */ + + /* Step3. Interrupt controller */ + AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); /* Enable all interrupt in Interrupt Controller 1, so we can check INTC flags */ + AD5940_INTCClrFlag(AFEINTSRC_ALLINT); + /* Step4: Reconfigure GPIO */ + gpio_cfg.FuncSet = GP2_TRIG|GP1_SYNC|GP0_INT; + gpio_cfg.InputEnSet = AGPIO_Pin2; + gpio_cfg.OutputEnSet = AGPIO_Pin0|AGPIO_Pin1|AGPIO_Pin4|AGPIO_Pin5|AGPIO_Pin6; + gpio_cfg.OutVal = 0; + gpio_cfg.PullEnSet = 0; + AD5940_AGPIOCfg(&gpio_cfg); + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + return 0; +} + +void AD5940_Main(void) +{ + AD5940Err error; + SEQCfg_Type seqcfg; + AD5940PlatformCfg(); + AD5940_StructInit(&seqcfg, sizeof(seqcfg)); + seqcfg.SeqEnable = bTRUE; + seqcfg.SeqMemSize = SEQMEMSIZE_2KB; /* 2kB SRAM is used for sequencer, others for data FIFO */ + AD5940_SEQCfg(&seqcfg); /* Enable Sequencer here. */ + error = BuildSequence(); /* Generate sequencer commands and load it to SRAM */ + if(error != AD5940ERR_OK) + { + printf("Build Sequence error, errorno:%d. \n", error); + while(1); + } + AD5940_SEQMmrTrig(SEQID_0); /* Trigger sequence0 */ + while(1) + { + while(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_ENDSEQ) == bFALSE); + AD5940_INTCClrFlag(AFEINTSRC_ENDSEQ); + AD5940_SEQCtrlS(bTRUE); + AD5940_SEQMmrTrig(SEQID_0); + } +} + diff --git a/examples/AD5940_WG/AD5940_WGSin.c b/examples/AD5940_WG/AD5940_WGSin.c new file mode 100644 index 0000000..ff957c7 --- /dev/null +++ b/examples/AD5940_WG/AD5940_WGSin.c @@ -0,0 +1,93 @@ +/*! + ***************************************************************************** + @file: AD5940_WGSin.c + @author: Neo Xu + @brief: Waveform generator(sin wave) example include switch matrix. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + + +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" + + +#define SIN_FREQ 25000 /* 25kHz */ + +#define SYS_CLOCK_HZ 16000000.0 /* System clock frequency */ + + +void AD5940_Main(void) +{ + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HpLoopCfg; + CLKCfg_Type clk_cfg; + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control */ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + HpLoopCfg.HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + HpLoopCfg.HsDacCfg.HsDacGain = HSDACGAIN_1; + HpLoopCfg.HsDacCfg.HsDacUpdateRate = 7; + + HpLoopCfg.HsTiaCfg.DiodeClose = bFALSE; + HpLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HpLoopCfg.HsTiaCfg.HstiaCtia = 16; /* 16pF */ + HpLoopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HpLoopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; + HpLoopCfg.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_160K; + + HpLoopCfg.SWMatCfg.Dswitch = SWD_CE0; + HpLoopCfg.SWMatCfg.Pswitch = SWP_CE0; + HpLoopCfg.SWMatCfg.Nswitch = SWN_SE0LOAD; + HpLoopCfg.SWMatCfg.Tswitch = SWT_TRTIA|SWT_SE0LOAD; + + HpLoopCfg.WgCfg.WgType = WGTYPE_SIN; + HpLoopCfg.WgCfg.GainCalEn = bFALSE; + HpLoopCfg.WgCfg.OffsetCalEn = bFALSE; + HpLoopCfg.WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(SIN_FREQ,SYS_CLOCK_HZ); + HpLoopCfg.WgCfg.SinCfg.SinAmplitudeWord = 2047; + HpLoopCfg.WgCfg.SinCfg.SinOffsetWord = 0; + HpLoopCfg.WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_HSLoopCfgS(&HpLoopCfg); + + AD5940_AFECtrlS(AFECTRL_DACREFPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_EXTBUFPWR|AFECTRL_INAMPPWR|AFECTRL_HSTIAPWR|AFECTRL_HSDACPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + while(1); +} + diff --git a/examples/AD5940_WG/AD5940_WGSin_LPDAC.c b/examples/AD5940_WG/AD5940_WGSin_LPDAC.c new file mode 100644 index 0000000..2510b91 --- /dev/null +++ b/examples/AD5940_WG/AD5940_WGSin_LPDAC.c @@ -0,0 +1,120 @@ +/*! + ***************************************************************************** + @file: AD5940_WGSin_LPDAC.c + @author: $Author: nxu2 $ + @brief: Waveform generator(sin wave) example using LPDAC. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ +#include "ad5940.h" +#include +#include "string.h" +/** + * This example is to generate sin wave on pin CE0 using waveform generator and LPDAC. + * Signal generator simpley generates digital codes. The code can route to both + * HSDAC and LPDAC. So, we can generate sin wave using both DAC. + * + * @note: LPDAC has limited bandwidth, do not use it to generate signal above 300Hz, + * otherwise, you will see significant performance drop. + * The DAC update rate parameter is decided by register HSDACCON.Rate. This also true + * when using LPDAC as data sink. +*/ +#define SIN_AMPLITUDE 1100.0 /**< Signal amplitude in mV.*/ +#define SIN_FREQ 100.0 /**< 100Hz. Max is 300Hz */ +#define WG_CLOCK_HZ 32e3f /**< Waveform generator clock frequency. Equal to system clock. */ + +void AD5940_Main(void) +{ + AFERefCfg_Type aferef_cfg; + CLKCfg_Type clk_cfg; + LPDACCfg_Type lpdac_cfg; + WGCfg_Type WgCfg; + LPAmpCfg_Type lpamp_cfg; + HSDACCfg_Type HsDacCfg; + + /* Use hardware reset */ + AD5940_HWReset(); + AD5940_Initialize(); + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + + /* LP reference control */ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + /* Configure LPDAC*/ + lpdac_cfg.LpdacSel = LPDAC0; + lpdac_cfg.DataRst = bFALSE; + lpdac_cfg.LpDacSW = LPDACSW_VBIAS2LPPA/*|LPDACSW_VBIAS2PIN*/|LPDACSW_VZERO2LPTIA/*|LPDACSW_VZERO2PIN*/; + lpdac_cfg.LpDacRef = LPDACREF_2P5; /* Use internal 2.5V reference */ + lpdac_cfg.LpDacSrc = LPDACSRC_WG; /* Use data from waveform generator */ + lpdac_cfg.LpDacVbiasMux = LPDACVBIAS_12BIT; + lpdac_cfg.LpDacVzeroMux = LPDACVZERO_6BIT; /* Use 6bit LPDAC for Vzero */ + lpdac_cfg.PowerEn = bTRUE; /* Enable LPDAC */ + lpdac_cfg.DacData12Bit = 0; /* Don't care, 12bit DAC data is from WG */ + lpdac_cfg.DacData6Bit = 32; + AD5940_LPDACCfgS(&lpdac_cfg); + + /* Configure low power amplifiers */ + lpamp_cfg.LpAmpSel = LPAMP0; + lpamp_cfg.LpAmpPwrMod = LPAMPPWR_NORM; /* Use normal power mode is enough */ + lpamp_cfg.LpPaPwrEn = bTRUE; /* Enable Potential amplifier */ + lpamp_cfg.LpTiaPwrEn = bFALSE; /* TIA is not used in this example */ + lpamp_cfg.LpTiaRf = LPTIARF_1M; + lpamp_cfg.LpTiaRload = LPTIARLOAD_100R; /* don't care */ + lpamp_cfg.LpTiaRtia = LPTIARTIA_1K; /* don't care */ + lpamp_cfg.LpTiaSW = 0; /* don't care */ + AD5940_LPAMPCfgS(&lpamp_cfg); + + HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + HsDacCfg.HsDacGain = HSDACGAIN_1; + HsDacCfg.HsDacUpdateRate = 7; /* DAC update rate equals to WG_CLK/HsDacUpdateRate */ + AD5940_HSDacCfgS(&HsDacCfg); + /* Configure Waveform Generator */ + WgCfg.WgType = WGTYPE_SIN; + WgCfg.GainCalEn = bFALSE; + WgCfg.OffsetCalEn = bFALSE; + WgCfg.SinCfg.SinFreqWord = AD5940_WGFreqWordCal(SIN_FREQ, WG_CLOCK_HZ); + WgCfg.SinCfg.SinAmplitudeWord = (uint32_t)(SIN_AMPLITUDE/1100.0f*2047); + WgCfg.SinCfg.SinOffsetWord = 0; + WgCfg.SinCfg.SinPhaseWord = 0; + AD5940_WGCfgS(&WgCfg); + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_AUTOSET); + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); + + /* Change to 32kHz clock. LPDAC needs 32kHz clock for waveform generator */ + AD5940_LPModeEnS(bTRUE); /* Enter LP control mode. The registers are summarized to LPMODECON, so we can control some blocks conveniently */ + AD5940_LPModeClkS(LPMODECLK_LFOSC); /* Trigger switching system clock to 32kHz */ + AD5940_LPModeCtrlS(LPMODECTRL_NONE); /* Disable all */ + AD5940_LPModeCtrlS(LPMODECTRL_GLBBIASZ|LPMODECTRL_GLBBIASP|LPMODECTRL_HPREFPWR|LPMODECTRL_BUFHP1P8V|LPMODECTRL_BUFHP1P1V|LPMODECTRL_HFOSCEN); + while(1); +} + diff --git a/examples/AD5940_WG/AD5940_WGTrapezoid.c b/examples/AD5940_WG/AD5940_WGTrapezoid.c new file mode 100644 index 0000000..c0dae4a --- /dev/null +++ b/examples/AD5940_WG/AD5940_WGTrapezoid.c @@ -0,0 +1,98 @@ +/*! + ***************************************************************************** + @file: AD5940_WGTrapezoid.c + @author: $Author: nxu2 $ + @brief: Waveform generator example include switch matrix. + @version: $Revision: 766 $ + @date: $Date: 2017-08-21 14:09:35 +0100 (Mon, 21 Aug 2017) $ + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + + +#include "ad5940.h" +#include "AD5940.h" +#include +#include "string.h" + + +#define SIN_FREQ 200000.0 /* 25kHz */ + +#define SYS_CLOCK_HZ 16000000.0 /* System clock frequency */ + + +void AD5940_Main(void) +{ + AFERefCfg_Type aferef_cfg; + HSLoopCfg_Type HsloopCfg; + CLKCfg_Type clk_cfg; + /* Use hardware reset */ + AD5940_HWReset(); + + AD5940_Initialize(); + clk_cfg.ADCClkDiv = ADCCLKDIV_1; + clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; + clk_cfg.SysClkDiv = SYSCLKDIV_1; + clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; + clk_cfg.HfOSC32MHzMode = bFALSE; + clk_cfg.HFOSCEn = bTRUE; + clk_cfg.HFXTALEn = bFALSE; + clk_cfg.LFOSCEn = bTRUE; + AD5940_CLKCfg(&clk_cfg); + + aferef_cfg.HpBandgapEn = bTRUE; + aferef_cfg.Hp1V1BuffEn = bTRUE; + aferef_cfg.Hp1V8BuffEn = bTRUE; + aferef_cfg.Disc1V1Cap = bFALSE; + aferef_cfg.Disc1V8Cap = bFALSE; + aferef_cfg.Hp1V8ThemBuff = bFALSE; + aferef_cfg.Hp1V8Ilimit = bFALSE; + aferef_cfg.Lp1V1BuffEn = bFALSE; + aferef_cfg.Lp1V8BuffEn = bFALSE; + /* LP reference control */ + aferef_cfg.LpBandgapEn = bTRUE; + aferef_cfg.LpRefBufEn = bTRUE; + aferef_cfg.LpRefBoostEn = bFALSE; + AD5940_REFCfgS(&aferef_cfg); + + HsloopCfg.HsDacCfg.ExcitBufGain = EXCITBUFGAIN_2; + HsloopCfg.HsDacCfg.HsDacGain = HSDACGAIN_1; + HsloopCfg.HsDacCfg.HsDacUpdateRate = 7; + + HsloopCfg.HsTiaCfg.DiodeClose = bFALSE; + HsloopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1; + HsloopCfg.HsTiaCfg.HstiaCtia = 16; /* 16pF */ + HsloopCfg.HsTiaCfg.HstiaDeRload = HSTIADERLOAD_OPEN; + HsloopCfg.HsTiaCfg.HstiaDeRtia = HSTIADERTIA_TODE; + HsloopCfg.HsTiaCfg.HstiaRtiaSel = HSTIARTIA_160K; + + HsloopCfg.SWMatCfg.Dswitch = SWD_CE0; + HsloopCfg.SWMatCfg.Pswitch = SWP_CE0; + HsloopCfg.SWMatCfg.Nswitch = SWN_SE0LOAD; + HsloopCfg.SWMatCfg.Tswitch = SWT_TRTIA|SWT_SE0LOAD; + + HsloopCfg.WgCfg.WgType = WGTYPE_TRAPZ; + HsloopCfg.WgCfg.GainCalEn = bFALSE; + HsloopCfg.WgCfg.OffsetCalEn = bFALSE; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzDCLevel1 = 0x200; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzDCLevel2 = 0xa00; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzDelay1 = 50; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzDelay2 = 100; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzSlope1 = 200; + HsloopCfg.WgCfg.TrapzCfg.WGTrapzSlope2 = 300; + AD5940_HSLoopCfgS(&HsloopCfg); + + AD5940_AFECtrlS(AFECTRL_DACREFPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_EXTBUFPWR|AFECTRL_INAMPPWR|AFECTRL_HSTIAPWR|AFECTRL_HSDACPWR, bTRUE); + AD5940_AFECtrlS(AFECTRL_WG, bTRUE); + + AD5940_AFEPwrBW(AFEPWR_LP, AFEBW_250KHZ); + while(1); +} + diff --git a/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewd b/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewd new file mode 100644 index 0000000..f874c8c --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewd @@ -0,0 +1,3104 @@ + + + 3 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 32 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 32 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewp b/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewp new file mode 100644 index 0000000..7d40dbe --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/AD5940_WG.ewp @@ -0,0 +1,2232 @@ + + + 3 + + Debug + + ARM + + 1 + + General + 3 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + + Release + + ARM + + 0 + + General + 3 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 37 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + + AD5940Lib + + $PROJ_DIR$\..\..\ad5940lib\ad5940.c + + + $PROJ_DIR$\ADICUP3029Port.c + + + + application + + $PROJ_DIR$\..\AD5940_WGSin.c + + + $PROJ_DIR$\main.c + + + + CMSIS-Pack + CMSISPack.Component + + $PROJ_DIR$\RTE\RTE_Components.h + + + Device Startup + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + $PROJ_DIR$\RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + Device Global Configuration + CMSISPack.Component + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + $PROJ_DIR$\RTE\Device\ADuCM3029\adi_global_config.h + + + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<configuration xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> + <packages/> + <device Dclock="26000000" Dcore="Cortex-M3" DcoreVersion="r2p1" Dendian="Little-endian" Dfamily="ADuCM302x Series" Dfpu="NO_FPU" Dmpu="NO_MPU" Dname="ADuCM3029" Dvendor="Analog Devices:1" Pname=""> + <url>http://www.keil.com/dd2/analogdevices/aducm3029</url> + <package info="Analog Devices ADuCM302x Device Support. (Subject to the Software License Agreement referred to in the Release Notes.)" name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + </device> + <toolchain Tcompiler="IAR" Toutput="exe"/> + <components> + <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.2"> + <package name="CMSIS" url="http://www.keil.com/pack/" vendor="ARM" version="5.4.0"/> + <file category="doc" name="CMSIS/Documentation/Core/html/index.html"/> + <file category="include" name="CMSIS/Core/Include/"/> + </component> + <component Cclass="Device" Cgroup="Global Configuration" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_cycle_counting_config.h" version="3.2.0"/> + <file attr="config" category="header" deviceDependent="1" name="Include/config/adi_global_config.h" version="3.2.0"/> + </component> + <component Cclass="Device" Cgroup="Startup" Cvendor="AnalogDevices" Cversion="3.2.0" deviceDependent="1"> + <package name="ADuCM302x_DFP" url="http://download.analog.com/tools/EZBoards/CM302x/Releases/" vendor="AnalogDevices" version="3.2.0"/> + <file category="include" deviceDependent="1" name="Include/"/> + <file attr="config" category="source" condition="ADuCM3029_IAR" deviceDependent="1" name="Source/IAR/startup_ADuCM3029.s" version="3.2.0"/> + <file attr="config" category="source" condition="ADuCM3029" deviceDependent="1" name="Source/system_ADuCM3029.c" version="3.2.0"/> + </component> + </components> + <apis/> +</configuration> + + + diff --git a/examples/AD5940_WG/ADICUP3029/AD5940_WG.rteconfig b/examples/AD5940_WG/ADICUP3029/AD5940_WG.rteconfig new file mode 100644 index 0000000..9decf27 --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/AD5940_WG.rteconfig @@ -0,0 +1,28 @@ + + + + + http://www.keil.com/dd2/analogdevices/aducm3029 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvoptx b/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvoptx new file mode 100644 index 0000000..bc6ec51 --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvoptx @@ -0,0 +1,852 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + WG_SIN + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + WG_TRAPZ + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"DAPLink CMSIS-DAP" -U0600000032624e45004e2015b175000e -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + WG_Arbitrary + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + WG_LPDAC + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O198 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + JL2CM3 + -U228200467 -O79 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8008 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x.FLM -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + AD5940Lib + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\ADICUP3029Port.c + ADICUP3029Port.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + + + Application + 0 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_WGSin.c + AD5940_WGSin.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\AD5940_WGTrapezoid.c + AD5940_WGTrapezoid.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\AD5940_WGArbitrary.c + AD5940_WGArbitrary.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\AD5940_WGSin_LPDAC.c + AD5940_WGSin_LPDAC.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvprojx b/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvprojx new file mode 100644 index 0000000..ce0c741 --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/AD5940_WG.uvprojx @@ -0,0 +1,2616 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + WG_SIN + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X,ADI_DEBUG + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + ::Device + + + + + WG_TRAPZ + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + ::Device + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + + + WG_Arbitrary + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + ::Device + + + + + WG_LPDAC + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ADuCM3029 + Analog Devices + AnalogDevices.ADuCM302x_DFP.3.2.0 + http://download.analog.com/tools/EZBoards/CM302x/Releases/ + IRAM(0x20000000,0x04000) IRAM2(0x20040000,0x04000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0ADuCM302x -FS00 -FL040000 -FP0($$Device:ADuCM3029$Flash\ADuCM302x.FLM)) + 0 + $$Device:ADuCM3029$Include\ADuCM3029.h + + + + + + + + + + $$Device:ADuCM3029$SVD\ADuCM302x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + ADICUP3029 + 1 + 0 + 0 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x4000 + + + 0 + 0x20040000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CHIPSEL_594X + + ..\..\;..\..\AD5940Lib + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + CHIPSEL_594X + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ADICUP3029Port.c + 1 + .\ADICUP3029Port.c + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + CHIPSEL_594X + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ADuCM3029\adi_cycle_counting_config.h + + + + + + + + + + + RTE\Device\ADuCM3029\adi_global_config.h + + + + + + + + + + + RTE\Device\ADuCM3029\adi_i2c_config.h + + + + + + RTE\Device\ADuCM3029\adi_pwr_config.h + + + + + + RTE\Device\ADuCM3029\startup_ADuCM3029.s + + + + + + + + + + + RTE\Device\ADuCM3029\system_ADuCM3029.c + + + + + + + + + + + + +
diff --git a/examples/AD5940_WG/ADICUP3029/ADICUP3029Port.c b/examples/AD5940_WG/ADICUP3029/ADICUP3029Port.c new file mode 100644 index 0000000..00fe0ac --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/ADICUP3029Port.c @@ -0,0 +1,150 @@ +/*! + ***************************************************************************** + @file: ADICUP3029Port.c + @author: Neo Xu + @brief: The port for ADI's ADICUP3029 board. + ----------------------------------------------------------------------------- + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*****************************************************************************/ + +#include +#include "ADuCM3029.h" + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to ADICUP3029 board. */ +#define SYSTICK_CLKFREQ 26000000L /* Systick clock frequency in Hz. This only appies to ADICUP3029 board */ +volatile static uint32_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficient way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + uint32_t tx_count=0, rx_count=0; + pADI_SPI0->CNT = length; + while(1){ + uint32_t fifo_sta = pADI_SPI0->FIFO_STAT; + if(rx_count < length){ + if(fifo_sta&0xf00){//there is data in RX FIFO. + *pRecvBuff++ = pADI_SPI0->RX; + rx_count ++; + } + } + if(tx_count < length){ + if((fifo_sta&0xf) < 8){// there is space in TX FIFO. + pADI_SPI0->TX = *pSendBuffer++; + tx_count ++; + } + } + if(rx_count == length && tx_count==length) + break; //done + } + while((pADI_SPI0->STAT&BITM_SPI_STAT_XFRDONE) == 0);//wait for transfer done. +} + +void AD5940_CsClr(void) +{ + pADI_GPIO1->CLR = (1<<10); +} + +void AD5940_CsSet(void) +{ + pADI_GPIO1->SET = (1<<10); +} + +void AD5940_RstSet(void) +{ + pADI_GPIO2->SET = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_RstClr(void) +{ + pADI_GPIO2->CLR = 1<<6; //p2.6-ADC3-A3 +} + +void AD5940_Delay10us(uint32_t time) +{ + if(time==0)return; + if(time*10LOAD = time*10*(SYSTICK_CLKFREQ/1000000); + SysTick->CTRL = (1 << 2) | (1<<0); /* Enable SysTick Timer, using core clock */ + while(!((SysTick->CTRL)&(1<<16))); /* Wait until count to zero */ + SysTick->CTRL = 0; /* Disable SysTick Timer */ + } + else { + AD5940_Delay10us(time/2); + AD5940_Delay10us(time/2 + (time&1)); + } +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 0; + return 1; +} + +/* Functions that used to initialize MCU platform */ + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + pADI_GPIO0->PE = 0xFFFF; + pADI_GPIO1->PE = 0xFFFF; + pADI_GPIO2->PE = 0xFFFF; + pADI_GPIO2->OEN |= (1<<6); //P2.6-ADC3-A3-AD5940_Reset + pADI_GPIO2->SET = 1<<6; //Pull high this pin. + + /*Setup Pins P0.0-->SCLK P0.1-->MOSI P0.2-->MISO P1.10-->CS*/ + pADI_GPIO0->CFG = (1<<0)|(1<<2)|(1<<4)|(pADI_GPIO0->CFG&(~((3<<0)|(3<<2)|(3<<4)))); + pADI_GPIO1->CFG &=~(3<<14); /* Configure P1.10 to GPIO function */ + pADI_GPIO1->OEN |= (1<<10); /* P1.10 Output Enable */ + /*Set SPI Baudrate = PCLK/2x(iCLKDiv+1).*/ + pADI_SPI0->DIV = 0;/*Baudrae is 13MHz*/ + pADI_SPI0->CTL = BITM_SPI_CTL_CSRST| // Configure SPI to reset after a bit shift error is detected + BITM_SPI_CTL_MASEN| // Enable master mode + /*BITM_SPI_CTL_CON|*/ // Enable continous transfer mode + BITM_SPI_CTL_OEN| // Select MISO pin to operate as normal - + BITM_SPI_CTL_RXOF| // overwrite data in Rx FIFO during overflow states + /*BITM_SPI_CTL_ZEN|*/ // transmit 00 when no valid data in Tx FIFO + BITM_SPI_CTL_TIM| // initiate trasnfer with a write to SPITX + BITM_SPI_CTL_SPIEN; // Enable SPI. SCLK idles low/ data clocked on SCLK falling edge + pADI_SPI0->CNT = 1;// Setup to transfer 1 bytes to slave + /* Step2: initialize GPIO interrupt that connects to AD5940's interrupt output pin(Gp0, Gp3, Gp4, Gp6 or Gp7 ) */ + pADI_GPIO0->IEN |= 1<<15;// Configure P0.15 as an input + + pADI_XINT0->CFG0 = (0x1<<0)|(1<<3);//External IRQ0 enabled. Falling edge + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + NVIC_EnableIRQ(XINT_EVT0_IRQn); //Enable External Interrupt 0 source. + + AD5940_CsSet(); + AD5940_RstSet(); + return 0; +} + +/* MCU related external line interrupt service routine */ +void Ext_Int0_Handler() +{ + pADI_XINT0->CLR = BITM_XINT_CLR_IRQ0; + ucInterrupted = 1; + /* This example just set the flag and deal with interrupt in AD5940Main function. It's your choice to choose how to process interrupt. */ +} + diff --git a/examples/AD5940_WG/ADICUP3029/main.c b/examples/AD5940_WG/ADICUP3029/main.c new file mode 100644 index 0000000..049abeb --- /dev/null +++ b/examples/AD5940_WG/ADICUP3029/main.c @@ -0,0 +1,143 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ + +#include "stdio.h" +#include "ADuCM3029.h" +#include "AD5940.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +/* Below functions are used to initialize MCU Platform */ +uint32_t MCUPlatformInit(void *pCfg) +{ + int UrtCfg(int iBaud); + + /*Stop watch dog timer(ADuCM3029)*/ + pADI_WDT0->CTL = 0xC9; + /* Clock Configure */ + pADI_CLKG0_OSC->KEY = 0xCB14; // Select HFOSC as system clock. + pADI_CLKG0_OSC->CTL = // Int 32khz LFOSC selected in LFMUX + BITM_CLKG_OSC_CTL_HFOSCEN|BITM_CLKG_OSC_CTL_HFXTALEN; + + while((pADI_CLKG0_OSC->CTL&BITM_CLKG_OSC_CTL_HFXTALOK) == 0); + + pADI_CLKG0_OSC->KEY = 0xCB14; + pADI_CLKG0_CLK->CTL0 = 0x201; /* Select XTAL as system clock */ + pADI_CLKG0_CLK->CTL1 = 0; // ACLK,PCLK,HCLK divided by 1 + pADI_CLKG0_CLK->CTL5 = 0x00; // Enable clock to all peripherals - no clock gating + + UrtCfg(230400);/*Baud rate: 230400*/ + return 1; +} + +/** + @brief int UrtCfg(int iBaud, int iBits, int iFormat) + ==========Configure the UART. + @param iBaud :{B1200,B2200,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B430800} \n + Set iBaud to the baudrate required: + Values usually: 1200, 2200 (for HART), 2400, 4800, 9600, + 19200, 38400, 57600, 115200, 230400, 430800, or type in baud-rate directly + @note + - Powers up UART if not powered up. + - Standard baudrates are accurate to better than 0.1% plus clock error.\n + - Non standard baudrates are accurate to better than 1% plus clock error. + @warning - If an external clock is used for the system the ullRtClk must be modified with \n + the speed of the clock used. +**/ + +int UrtCfg(int iBaud) +{ + int iBits = 3;//8bits, + int iFormat = 0;//, int iBits, int iFormat + int i1; + int iDiv; + int iRtC; + int iOSR; + int iPllMulValue; + unsigned long long ullRtClk = 16000000; // The root clock speed + + + /*Setup P0[11:10] as UART pins*/ + pADI_GPIO0->CFG = (1<<22)|(1<<20)|(pADI_GPIO0->CFG&(~((3<<22)|(3<<20)))); + + iDiv = (pADI_CLKG0_CLK->CTL1& BITM_CLKG_CLK_CTL1_PCLKDIVCNT); // Read UART clock as set by CLKCON1[10:8] + iDiv = iDiv>>8; + if (iDiv == 0) + iDiv = 1; + iRtC = (pADI_CLKG0_CLK->CTL0& BITM_CLKG_CLK_CTL0_CLKMUX); // Check what is the root clock + + switch (iRtC) + { + case 0: // HFOSC selected + ullRtClk = 26000000; + break; + + case 1: // HFXTAL selected + if ((pADI_CLKG0_CLK->CTL0 & 0x200)==0x200) // 26Mhz XTAL used + ullRtClk = 26000000; + else + ullRtClk = 16000000; // Assume 16MHz XTAL + break; + + case 2: // SPLL output + iPllMulValue = (pADI_CLKG0_CLK->CTL3 & // Check muliplication factor in PLL settings + BITM_CLKG_CLK_CTL3_SPLLNSEL); // bits[4:0]. Assume div value of 0xD in bits [14:11] + ullRtClk = (iPllMulValue *1000000); // Assume straight multiplication by pADI_CLKG0_CLK->CTL3[4:0] + break; + + case 3: + ullRtClk = 26000000; //External clock is assumed to be 26MhZ, if different + break; //clock speed is used, this should be changed + + default: + break; + } + // iOSR = (pADI_UART0->COMLCR2 & 0x3); + // iOSR = 2^(2+iOSR); + pADI_UART0->COMLCR2 = 0x3; + iOSR = 32; + //i1 = (ullRtClk/(iOSR*iDiv))/iBaud; // UART baud rate clock source is PCLK divided by OSR + i1 = (ullRtClk/(iOSR*iDiv))/iBaud-1; //for bigger M and N value + pADI_UART0->COMDIV = i1; + + pADI_UART0->COMFBR = 0x8800|(((((2048/(iOSR*iDiv))*ullRtClk)/i1)/iBaud)-2048); + pADI_UART0->COMIEN = 0; + pADI_UART0->COMLCR = (iFormat&0x3c)|(iBits&3); + + + pADI_UART0->COMFCR = (BITM_UART_COMFCR_RFTRIG & 0/*RX_FIFO_1BYTE*/ ) |BITM_UART_COMFCR_FIFOEN; + pADI_UART0->COMFCR |= BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR; // Clear the UART FIFOs + pADI_UART0->COMFCR &= ~(BITM_UART_COMFCR_RFCLR|BITM_UART_COMFCR_TFCLR); // Disable clearing mechanism + + NVIC_EnableIRQ(UART_EVT_IRQn); // Enable UART interrupt source in NVIC + pADI_UART0->COMIEN = BITM_UART_COMIEN_ERBFI|BITM_UART_COMIEN_ELSI; /* Rx Interrupt */ + return pADI_UART0->COMLSR; +} +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + pADI_UART0->COMTX = c; + while((pADI_UART0->COMLSR&0x20) == 0);// tx fifo empty + return c; +} diff --git a/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvoptx b/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvoptx new file mode 100644 index 0000000..51f89b0 --- /dev/null +++ b/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvoptx @@ -0,0 +1,1008 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + WG_SIN + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + WG_TRAPZ + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + WG_Arbitrary + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + WG_LPDAC + 0x4 + ARM-ADS + + 16000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\OUT\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF485457725187092317 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + + + + + + 0 + 1 + AppRAMPCfg.CurrRampCode + + + 1 + 1 + AppRAMPCfg.DACCodePerStep + + + 2 + 1 + AppRAMPCfg.CurrRampCode + + + 3 + 1 + AppRAMPCfg.CurrVzeroCode + + + 4 + 1 + VzeroCode + + + 5 + 1 + AppRAMPCfg.VzeroStart + + + 6 + 1 + AppRAMPCfg.VzeroPeak + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + AD5940Lib + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\AD5940Lib\ad5940.c + ad5940.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\NUCLEOF411Port.c + NUCLEOF411Port.c + 0 + 0 + + + + + Application + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\AD5940_WGSin.c + AD5940_WGSin.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\AD5940_WGArbitrary.c + AD5940_WGArbitrary.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\AD5940_WGSin_LPDAC.c + AD5940_WGSin_LPDAC.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\AD5940_WGTrapezoid.c + AD5940_WGTrapezoid.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvprojx b/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvprojx new file mode 100644 index 0000000..1fa7060 --- /dev/null +++ b/examples/AD5940_WG/NUCLEO-F411/AD5940_WG.uvprojx @@ -0,0 +1,2816 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + WG_SIN + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X,ADI_DEBUG + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + ::Device + + + + + WG_TRAPZ + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + ::Device + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + WG_Arbitrary + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + ::Device + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + WG_LPDAC + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F411RETx + STMicroelectronics + Keil.STM32F4xx_DFP.2.13.0 + http://www.keil.com/pack + IRAM(0x20000000,0x20000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512 -FS08000000 -FL080000 -FP0($$Device:STM32F411RETx$CMSIS\Flash\STM32F4xx_512.FLM)) + 0 + $$Device:STM32F411RETx$Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h + + + + + + + + + + $$Device:STM32F411RETx$CMSIS\SVD\STM32F411xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\OUT\ + NUCLEOF411 + 1 + 0 + 1 + 1 + 1 + .\OUT\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER,STM32F411xE,CHIPSEL_594X + + ..\..\AD5940Lib;..\..\STM32F4StdLib\CMSIS\Device\ST\STM32F4xx\Include;..\..\STM32F4StdLib\STM32F4xx_StdPeriph_Driver\inc;..\..\STM32F4StdLib\CMSIS\Include;..\;.\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + AD5940Lib + + + ad5940.c + 1 + ..\..\AD5940Lib\ad5940.c + + + NUCLEOF411Port.c + 1 + .\NUCLEOF411Port.c + + + + + Application + + + main.c + 1 + .\main.c + + + AD5940_WGSin.c + 1 + ..\AD5940_WGSin.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGArbitrary.c + 1 + ..\AD5940_WGArbitrary.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + AD5940_WGSin_LPDAC.c + 1 + ..\AD5940_WGSin_LPDAC.c + + + AD5940_WGTrapezoid.c + 1 + ..\AD5940_WGTrapezoid.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\STM32F103C8\RTE_Device.h + + + + + + RTE\Device\STM32F103C8\startup_stm32f10x_md.s + + + + + + RTE\Device\STM32F103C8\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103C8\system_stm32f10x.c + + + + + + RTE\Device\STM32F103RE\RTE_Device.h + + + + + + RTE\Device\STM32F103RE\startup_stm32f10x_hd.s + + + + + + RTE\Device\STM32F103RE\stm32f10x_conf.h + + + + + + RTE\Device\STM32F103RE\system_stm32f10x.c + + + + + + RTE\Device\STM32F411RETx\RTE_Device.h + + + + + + + + + + + RTE\Device\STM32F411RETx\startup_stm32f411xe.s + + + + + + + + + + + RTE\Device\STM32F411RETx\stm32f4xx_hal_conf.h + + + + + + + + + + + RTE\Device\STM32F411RETx\system_stm32f4xx.c + + + + + + + + + + + + +
diff --git a/examples/AD5940_WG/NUCLEO-F411/NUCLEOF411Port.c b/examples/AD5940_WG/NUCLEO-F411/NUCLEOF411Port.c new file mode 100644 index 0000000..c78dd97 --- /dev/null +++ b/examples/AD5940_WG/NUCLEO-F411/NUCLEOF411Port.c @@ -0,0 +1,190 @@ +/** + * @file NUCLEOF411Port.c + * @brief ST NUCLEOF411 board port file. + * @version V0.2.0 + * @author ADI + * @date March 2019 + * @par Revision History: + * + * Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +**/ +#include "ad5940.h" +#include "stdio.h" +#include "stm32f4xx_hal.h" + +/* Definition for STM32 SPI clock resources */ +#define AD5940SPI SPI1 +#define AD5940_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() +#define AD5940_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define AD5940_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define AD5940_GP0INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +#define AD5940SPI_FORCE_RESET() __HAL_RCC_SPI1_FORCE_RESET() +#define AD5940SPI_RELEASE_RESET() __HAL_RCC_SPI1_RELEASE_RESET() + +/* Definition for AD5940 Pins */ +#define AD5940_SCK_PIN GPIO_PIN_5 +#define AD5940_SCK_GPIO_PORT GPIOA +#define AD5940_SCK_AF GPIO_AF5_SPI1 +#define AD5940_MISO_PIN GPIO_PIN_6 +#define AD5940_MISO_GPIO_PORT GPIOA +#define AD5940_MISO_AF GPIO_AF5_SPI1 +#define AD5940_MOSI_PIN GPIO_PIN_7 +#define AD5940_MOSI_GPIO_PORT GPIOA +#define AD5940_MOSI_AF GPIO_AF5_SPI1 + +#define AD5940_CS_PIN GPIO_PIN_6 +#define AD5940_CS_GPIO_PORT GPIOB + +#define AD5940_RST_PIN GPIO_PIN_0 //A3 +#define AD5940_RST_GPIO_PORT GPIOB + +#define AD5940_GP0INT_PIN GPIO_PIN_10 //A3 +#define AD5940_GP0INT_GPIO_PORT GPIOA +#define AD5940_GP0INT_IRQn EXTI15_10_IRQn + +SPI_HandleTypeDef SpiHandle; + +#define SYSTICK_MAXCOUNT ((1L<<24)-1) /* we use Systick to complete function Delay10uS(). This value only applies to NUCLEOF411 board. */ +#define SYSTICK_CLKFREQ 100000000L /* Systick clock frequency in Hz. This only appies to NUCLEOF411 board */ +volatile static uint8_t ucInterrupted = 0; /* Flag to indicate interrupt occurred */ + +/** + @brief Using SPI to transmit N bytes and return the received bytes. This function targets to + provide a more efficent way to transmit/receive data. + @param pSendBuffer :{0 - 0xFFFFFFFF} + - Pointer to the data to be sent. + @param pRecvBuff :{0 - 0xFFFFFFFF} + - Pointer to the buffer used to store received data. + @param length :{0 - 0xFFFFFFFF} + - Data length in SendBuffer. + @return None. +**/ +void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,unsigned char *pRecvBuff,unsigned long length) +{ + HAL_SPI_TransmitReceive(&SpiHandle, pSendBuffer, pRecvBuff, length, (uint32_t)-1); +} + +void AD5940_CsClr(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_RESET); +} + +void AD5940_CsSet(void) +{ + HAL_GPIO_WritePin(AD5940_CS_GPIO_PORT, AD5940_CS_PIN, GPIO_PIN_SET); +} + +void AD5940_RstSet(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_SET); +} + +void AD5940_RstClr(void) +{ + HAL_GPIO_WritePin(AD5940_RST_GPIO_PORT, AD5940_RST_PIN, GPIO_PIN_RESET); +} + +void AD5940_Delay10us(uint32_t time) +{ + time/=100; + if(time == 0) time =1; + HAL_Delay(time); +} + +uint32_t AD5940_GetMCUIntFlag(void) +{ + return ucInterrupted; +} + +uint32_t AD5940_ClrMCUIntFlag(void) +{ + ucInterrupted = 0; + return 1; +} + +uint32_t AD5940_MCUResourceInit(void *pCfg) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + /* Step1, initialize SPI peripheral and its GPIOs for CS/RST */ + AD5940_SCK_GPIO_CLK_ENABLE(); + AD5940_MISO_GPIO_CLK_ENABLE(); + AD5940_MOSI_GPIO_CLK_ENABLE(); + AD5940_CS_GPIO_CLK_ENABLE(); + AD5940_RST_GPIO_CLK_ENABLE(); + /* Enable SPI clock */ + AD5940_CLK_ENABLE(); + + GPIO_InitStruct.Pin = AD5940_SCK_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = AD5940_SCK_AF; + HAL_GPIO_Init(AD5940_SCK_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MISO GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MISO_PIN; + GPIO_InitStruct.Alternate = AD5940_MISO_AF; + HAL_GPIO_Init(AD5940_MISO_GPIO_PORT, &GPIO_InitStruct); + + /* SPI MOSI GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_MOSI_PIN; + GPIO_InitStruct.Alternate = AD5940_MOSI_AF; + HAL_GPIO_Init(AD5940_MOSI_GPIO_PORT, &GPIO_InitStruct); + /* SPI CS GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_CS_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(AD5940_CS_GPIO_PORT, &GPIO_InitStruct); + + /* SPI RST GPIO pin configuration */ + GPIO_InitStruct.Pin = AD5940_RST_PIN; + HAL_GPIO_Init(AD5940_RST_GPIO_PORT, &GPIO_InitStruct); + + AD5940_CsSet(); + AD5940_RstSet(); + + /* Set the SPI parameters */ + SpiHandle.Instance = AD5940SPI; + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; //SPI clock should be < AD5940_SystemClock + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + HAL_SPI_Init(&SpiHandle); + + /* Step 2: Configure external interrupot line */ + AD5940_GP0INT_GPIO_CLK_ENABLE(); + GPIO_InitStruct.Pin = AD5940_GP0INT_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = 0; + HAL_GPIO_Init(AD5940_GP0INT_GPIO_PORT, &GPIO_InitStruct); + + /* Enable and set EXTI Line0 Interrupt to the lowest priority */ + HAL_NVIC_EnableIRQ(AD5940_GP0INT_IRQn); +// HAL_NVIC_SetPriority(AD5940_GP0INT_IRQn, 0, 0); + return 0; +} + +/* MCU related external line interrupt service routine */ +void EXTI15_10_IRQHandler() +{ + ucInterrupted = 1; + __HAL_GPIO_EXTI_CLEAR_IT(AD5940_GP0INT_PIN); +} + diff --git a/examples/AD5940_WG/NUCLEO-F411/main.c b/examples/AD5940_WG/NUCLEO-F411/main.c new file mode 100644 index 0000000..d4af402 --- /dev/null +++ b/examples/AD5940_WG/NUCLEO-F411/main.c @@ -0,0 +1,182 @@ +/* + +Copyright (c) 2017-2019 Analog Devices, Inc. All Rights Reserved. + +This software is proprietary to Analog Devices, Inc. and its licensors. +By using this software you agree to the terms of the associated +Analog Devices Software License Agreement. + +*/ +#include "stdio.h" +#include "AD5940.h" +#include "stm32f4xx_hal.h" + +/* Functions that used to initialize MCU platform */ +uint32_t MCUPlatformInit(void *pCfg); + +int main(void) +{ + void AD5940_Main(void); + MCUPlatformInit(0); + AD5940_MCUResourceInit(0); /* Initialize resources that AD5940 use, like SPI/GPIO/Interrupt. */ + + printf("Hello AD5940-Build Time:%s\n",__TIME__); + AD5940_Main(); +} + +#define DEBUG_UART USART2 +#define DEBUG_UART_IRQN USART2_IRQn +#define DEBUGUART_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() +#define DEBUGUART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() + +/* Definition for AD5940 Pins */ +#define DEBUGUART_TX_PIN GPIO_PIN_2 +#define DEBUGUART_TX_GPIO_PORT GPIOA +#define DEBUGUART_TX_AF GPIO_AF7_USART2 + +#define DEBUGUART_RX_PIN GPIO_PIN_3 +#define DEBUGUART_RX_GPIO_PORT GPIOA +#define DEBUGUART_RX_AF GPIO_AF7_USART2 + +UART_HandleTypeDef UartHandle; + +void Error_Handler(void){ + while(1); +} +/** + * @brief SPI MSP Initialization + * This function configures the hardware resources used in this example: + * - Peripheral's clock enable + * - Peripheral's GPIO Configuration + * @param husart: SPI handle pointer + * @retval None + */ +void HAL_UART_MspInit(UART_HandleTypeDef *husart) +{ + GPIO_InitTypeDef GPIO_InitStruct; + + if(husart->Instance == DEBUG_UART) + { + /*##-1- Enable peripherals and GPIO Clocks #################################*/ + /* Enable GPIO TX/RX clock */ + DEBUGUART_GPIO_CLK_ENABLE(); + /* Enable UART clock */ + DEBUGUART_CLK_ENABLE(); + + /*##-2- Configure peripheral GPIO ##########################################*/ + /* UART TX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_TX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = DEBUGUART_TX_AF; + HAL_GPIO_Init(DEBUGUART_TX_GPIO_PORT, &GPIO_InitStruct); + + /* UART RX GPIO pin configuration */ + GPIO_InitStruct.Pin = DEBUGUART_RX_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Alternate = DEBUGUART_RX_AF; + HAL_GPIO_Init(DEBUGUART_RX_GPIO_PORT, &GPIO_InitStruct); + } +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; + RCC_OscInitStruct.PLL.PLLN = 100; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) + { + Error_Handler(); + } +} + +uint32_t MCUPlatformInit(void *pCfg) +{ + HAL_Init(); + SystemClock_Config(); + HAL_Init(); + /* Init UART */ + UartHandle.Instance = DEBUG_UART; + + UartHandle.Init.BaudRate = 230400; + UartHandle.Init.WordLength = UART_WORDLENGTH_8B; + UartHandle.Init.StopBits = UART_STOPBITS_1; + UartHandle.Init.Parity = UART_PARITY_NONE; + UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + UartHandle.Init.Mode = UART_MODE_TX_RX; + UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; + if(HAL_UART_Init(&UartHandle) != HAL_OK) + { + /* Initialization Error */ + return 0; + } + __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE); + HAL_NVIC_EnableIRQ(DEBUG_UART_IRQN); + return 1; +} + +void USART2_IRQHandler(void) +{ + //void UARTCmd_Process(char); + volatile char c; + if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE)) + { + c = USART2->DR; + //UARTCmd_Process(c); + } +} + +#include "stdio.h" +#ifdef __ICCARM__ +int putchar(int c) +#else +int fputc(int c, FILE *f) +#endif +{ + uint8_t t = c; + HAL_UART_Transmit(&UartHandle, &t, 1, 1000); + return c; +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + HAL_IncTick(); +} diff --git a/examples/ADICUP3029.eww b/examples/ADICUP3029.eww new file mode 100644 index 0000000..ab0f1ec --- /dev/null +++ b/examples/ADICUP3029.eww @@ -0,0 +1,81 @@ + + + + $WS_DIR$\AD5940_ADC\ADICUP3029\AD5940_ADC.ewp + + + $WS_DIR$\AD5940_Amperometric\ADICUP3029\AD5940_Amperometric.ewp + + + $WS_DIR$\AD5940_BATImpedance\ADICUP3029\AD5940_BATImpedance.ewp + + + $WS_DIR$\AD5940_BIA\ADICUP3029\AD5940_BIA.ewp + + + $WS_DIR$\AD5940_BioElec\ADICUP3029\AD5940_BioElec.ewp + + + $WS_DIR$\AD5940_BIOZ-2Wire\ADICUP3029\AD5940_BIOZ-2Wire.ewp + + + $WS_DIR$\AD5940_ChronoAmperometric\ADICUP3029\AD5940_ChronoAmperometric.ewp + + + $WS_DIR$\AD5940_DFT\ADICUP3029\AD5940_DFT.ewp + + + $WS_DIR$\AD5940_ECG\ADICUP3029\AD5940_ECG.ewp + + + $WS_DIR$\AD5940_ECSns_EIS\ADICUP3029\AD5940_ECSensEIS.ewp + + + $WS_DIR$\AD5940_EDA\ADICUP3029\AD5940_EDA.ewp + + + $WS_DIR$\AD5940_HSDACCal\ADICUP3029\AD5940_HSDACCal.ewp + + + $WS_DIR$\AD5940_Impedance\ADICUP3029\AD5940_Impedance.ewp + + + $WS_DIR$\AD5940_Impedance_Adjustable_with_frequency\ADICUP3029\AD5940_Impedance_Adjustable_with_frequency.ewp + + + $WS_DIR$\AD5940_LPDAC\ADICUP3029\AD5940_LPDAC.ewp + + + $WS_DIR$\AD5940_LPLoop\ADICUP3029\AD5940_LPLoop.ewp + + + $WS_DIR$\AD5940_Ramp\ADICUP3029\AD5940_Ramp.ewp + + + $WS_DIR$\AD5940_Reset\ADICUP3029\AD5940_Reset.ewp + + + $WS_DIR$\AD5940_Sequencer\ADICUP3029\AD5940_Sequencer.ewp + + + $WS_DIR$\AD5940_SPI\ADICUP3029\AD5940_SPI.ewp + + + $WS_DIR$\AD5940_SqrWaveVoltammetry\ADICUP3029\AD5940_SqrWaveVoltmmetry.ewp + + + $WS_DIR$\AD5940_Temperature\ADICUP3029\AD5940_Temperature.ewp + + + $WS_DIR$\AD5940_WG\ADICUP3029\AD5940_WG.ewp + + + + Debug + + AD5940_ADC + Debug + + + + diff --git a/examples/ADICUP3029.uvmpw b/examples/ADICUP3029.uvmpw new file mode 100644 index 0000000..d6a6dbc --- /dev/null +++ b/examples/ADICUP3029.uvmpw @@ -0,0 +1,126 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + WorkSpace + + + .\AD5940_SPI\ADICUP3029\AD5940_SPI.uvprojx + 1 + 1 + 1 + + + + .\AD5940_Reset\ADICUP3029\AD5940_Reset.uvprojx + 1 + + + + .\AD5940_Sequencer\ADICUP3029\AD5940_Sequencer.uvprojx + 1 + + + + .\AD5940_ADC\ADICUP3029\AD5940_ADC.uvprojx + 1 + + + + .\AD5940_Temperature\ADICUP3029\AD5940_Temperature.uvprojx + + + + .\AD5940_DFT\ADICUP3029\AD5940_DFT.uvprojx + 1 + + + + .\AD5940_LPDAC\ADICUP3029\AD5940_LPDAC.uvprojx + 1 + + + + .\AD5940_LPLoop\ADICUP3029\AD5940_LPLoop.uvprojx + 1 + + + + .\AD5940_WG\ADICUP3029\AD5940_WG.uvprojx + 1 + + + + .\AD5940_HSDACCal\ADICUP3029\AD5940_HSDACCal.uvprojx + 1 + + + + .\AD5940_BATImpedance\ADICUP3029\AD5940_BATImpedance.uvprojx + 1 + + + + .\AD5940_EDA\ADICUP3029\AD5940_EDA.uvprojx + 1 + + + + .\AD5940_ECG\ADICUP3029\AD5940_ECG.uvprojx + 1 + + + + .\AD5940_BIA\ADICUP3029\AD5940_BIA.uvprojx + 1 + + + + .\AD5940_BIA_HiZ_Electrodes\ADICUP3029\AD5940_BIA_HiZ_Electrodes.uvprojx + 1 + + + + .\AD5940_BioElec\ADICUP3029\AD5940_BioElec.uvprojx + 1 + + + + .\AD5940_BIOZ-2Wire\ADICUP3029\AD5940_BIOZ-2Wire.uvprojx + 1 + + + + .\AD5940_Impedance\ADICUP3029\AD5940_Impedance.uvprojx + 1 + + + + .\AD5940_ECSns_EIS\ADICUP3029\AD5940_ECSensEIS.uvprojx + 1 + + + + .\AD5940_Amperometric\ADICUP3029\AD5940_Amperometric.uvprojx + 1 + + + + .\AD5940_ChronoAmperometric\ADICUP3029\AD5940_ChronoAmperometric.uvprojx + 1 + + + + .\AD5940_Ramp\ADICUP3029\AD5940_Ramp.uvprojx + 1 + + + + .\AD5940_SqrWaveVoltammetry\ADICUP3029\AD5940_SqrWaveVoltmmetry.uvprojx + 1 + + +
diff --git a/examples/NUCLEO-F411RE.uvmpw b/examples/NUCLEO-F411RE.uvmpw new file mode 100644 index 0000000..683ea89 --- /dev/null +++ b/examples/NUCLEO-F411RE.uvmpw @@ -0,0 +1,126 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + WorkSpace + + + .\AD5940_SPI\NUCLEO-F411\AD5940_SPI.uvprojx + 1 + 1 + 1 + + + + .\AD5940_Reset\NUCLEO-F411\AD5940_Reset.uvprojx + 1 + + + + .\AD5940_Sequencer\NUCLEO-F411\AD5940_Sequencer.uvprojx + 1 + + + + .\AD5940_ADC\NUCLEO-F411\AD5940_ADC.uvprojx + 1 + + + + .\AD5940_Temperature\NUCLEO-F411\AD5940_Temperature.uvprojx + + + + .\AD5940_DFT\NUCLEO-F411\AD5940_DFT.uvprojx + 1 + + + + .\AD5940_LPDAC\NUCLEO-F411\AD5940_LPDAC.uvprojx + 1 + + + + .\AD5940_LPLoop\NUCLEO-F411\AD5940_LPLoop.uvprojx + 1 + + + + .\AD5940_WG\NUCLEO-F411\AD5940_WG.uvprojx + 1 + + + + .\AD5940_HSDACCal\NUCLEO-F411\AD5940_HSDACCal.uvprojx + 1 + + + + .\AD5940_BATImpedance\NUCLEO-F411\AD5940_BATImpedance.uvprojx + 1 + + + + .\AD5940_EDA\NUCLEO-F411\AD5940_EDA.uvprojx + 1 + + + + .\AD5940_ECG\NUCLEO-F411\AD5940_ECG.uvprojx + 1 + + + + .\AD5940_BIA\NUCLEO-F411\AD5940_BIA.uvprojx + 1 + + + + .\AD5940_BIA_HiZ_Electrodes\NUCLEO-F411\AD5940_BIA_HiZ_Electrodes.uvprojx + 1 + + + + .\AD5940_BioElec\NUCLEO-F411\AD5940_BioElec.uvprojx + 1 + + + + .\AD5940_BIOZ-2Wire\NUCLEO-F411\AD5940_BIOZ-2Wire.uvprojx + 1 + + + + .\AD5940_Impedance\NUCLEO-F411\AD5940_Impedance.uvprojx + 1 + + + + .\AD5940_ECSns_EIS\NUCLEO-F411\AD5940_ECSns_EIS.uvprojx + 1 + + + + .\AD5940_Amperometric\NUCLEO-F411\AD5940_Amperometric.uvprojx + 1 + + + + .\AD5940_ChronoAmperometric\NUCLEO-F411\AD5940_ChronoAmperometric.uvprojx + 1 + + + + .\AD5940_Ramp\NUCLEO-F411\AD5940_Ramp.uvprojx + 1 + + + + .\AD5940_SqrWaveVoltammetry\NUCLEO-F411\AD5940_SqrWaveVoltammetry.uvprojx + 1 + + +